Documentation

Comprehensive guides for building with Temporal Intelligence

Core Concepts

Behavioral Modulation Signal (BMS)

The BMS is a standardized way to understand and work with timing-aware intelligence. It translates complex temporal patterns into actionable insights that any digital system can use. The BMS includes:

  • Temporal Position: Your current location within natural time cycles
  • Behavioral Phase: The active state influencing your behavior
  • Expression Intensity: How strongly temporal patterns are manifesting
  • Maturity Level: Long-term developmental trajectory
  • Daily Rhythm: 24-hour behavioral modulation cycle
  • Harmony Score: Alignment between short-term and long-term patterns

Temporal Intelligence Computing

A new approach to computing where systems adapt based on timing, rhythm, and behavioral sequence—not just static data. This enables:

  • AI that adapts its behavior based on temporal context
  • Personalized experiences that evolve with your rhythms
  • Synchronized digital interactions across platforms
  • Context-aware decision support

Five Core Intelligence Systems

Our platform operates through five interconnected systems that work together:

Daily Rhythms

24-hour behavioral cycles that influence daily patterns and activities

Life Trajectory

Long-term behavioral evolution and maturity patterns

Nine Dimensions

Distinct behavioral aspects from Individuality to Connectivity

Harmony Analysis

Measures alignment between daily expression and long-term patterns

Maturity Intelligence

Identifies your behavioral archetype and developmental stage

Temporal DNA API Documentation

The Retrograde Observatory Temporal DNA API enables third-party applications to access Time Intelligence data and personal timeline calculations.

Partner Program & API Access

To access the Temporal DNA API, you must register as a Retrograde Observatory Partner:

  1. Visit: retrogradeobservatory.com
  2. Click: Partner button in the sidebar
  3. Register: Complete partner registration with your details
  4. Generate: API keys through the Partner Management Dashboard

Partner Registration Requirements

  • Personal Information: Full Name, Email, Phone (with Country Code)
  • Category Selection: Individual, Community, or Enterprise
  • Complete Address: Building/Flat, Street, Area, City, Country, PIN
  • Security PIN: 6-digit numeric PIN for account security

Authentication

All API requests require an API key obtained through the Partner Program. Include it in the x-api-key header:

# Request with API key in header
curl -H "x-api-key: YOUR_PARTNER_API_KEY" \
  https://www.retrogradeobservatory.com/api/external/v1/calculate

# Or as query parameter
curl "https://www.retrogradeobservatory.com/api/external/v1/calculate?api_key=YOUR_PARTNER_API_KEY"

API Endpoints

POST /api/external/v1/calculate

Calculate personal time intelligence components from birth data and current location.

POST /api/external/v1/sips

Provides detailed micro-intelligence data for a given time system.

POST /api/external/v1/vortex

Provides holistic macro-intelligence data for a given time system.

Calculate Endpoint Parameters

Parameter Type Required Description
birthDate string Yes Birth date in YYYY-MM-DD format
birthTime string Yes Birth time in HH:MM:SS format (24-hour)
latitude number Yes Current location latitude (-90 to 90)
longitude number Yes Current location longitude (-180 to 180)
timezone string Recommended Timezone offset (e.g., "UTC+05:30", "UTC-08:00")
endDate string No End date in YYYY-MM-DD format (for custom time range)
endTime string No End time in HH:MM:SS format (for custom time range)

SIPS/Vortex Endpoint Parameters

Parameter Type Required Description
action string Yes Must be "fetchAndStoreAllCalendarData"
system object Yes Object containing time system parameters
calendars array No Array of calendar keys (e.g., ["7F7F7F", "FF0000"])

System Object Parameters

Parameter Type Example
startDate string "1990-01-01"
startTime string "12:00"
timezone string "UTC+0"
latitude number 40.7128
longitude number -74.0060

Response Format

Calculate Endpoint Response

{
  "last": "17:15:28",
  "node": "63",
  "direction": "Levitating",
  "movement": "East-South",
  "season": "Summer",
  "stage": "Action Potential",
  "timeQuadrant": "Disintegrated",
  "scale": "Supra-Human",
  "numericalQuotient": "Quinary",
  "aayu": "1"
}

Response Field Definitions

Header Components

  • last: Local Apparent Sidereal Time (HH:MM:SS)
  • node: Current node position (1-432 daily cycle)
  • direction: Cardinal temporal direction
  • movement: Movement phase (Levitating, Gravitating, Transition)

Extended Components

  • season: Temporal season (Spring, Summer, Autumn, Winter)
  • stage: Current electrical stage
  • timeQuadrant: Time quadrant state
  • scale: Consciousness scale
  • numericalQuotient: Pattern complexity
  • aayu: Personal cycle count since birth

SIPS/Vortex Response

{
  "success": true,
  "results": {
    "7F7F7F": {
      "Calendar": "7F7F7F",
      "Anatomy": -17.3624,
      "Yield": 45.1234,
      "Culture": -22.9876,
      "Time Travel": 55.83,
      "Elevation": -69.1,
      "Horizon": 114.5,
      "Ground": 31168.6,
      "Aura": 729451.9,
      "Magnetism": 123.45,
      "Charge": 67.89,
      "timeQuadrant": "Decentralized",
      "season": "Autumn",
      "direction": "South",
      "scale": "Micro",
      "phase": "Waning",
      "actionType": "Voluntary",
      "numericalQuotient": "Binary",
      "stage": "Action Potential"
    }
  }
}

Integration Examples

JavaScript (Fetch API)

const response = await fetch('https://www.retrogradeobservatory.com/api/external/v1/calculate', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'x-api-key': 'YOUR_API_KEY'
    },
    body: JSON.stringify({
        birthDate: '1990-01-15',
        birthTime: '14:30:00',
        latitude: 40.7128,
        longitude: -74.0060,
        timezone: 'UTC-05:00'
    })
});

const timeData = await response.json();
console.log('Current Node:', timeData.node);
console.log('Current Season:', timeData.season);

Python

import requests

url = 'https://www.retrogradeobservatory.com/api/external/v1/calculate'
headers = {'x-api-key': 'YOUR_API_KEY'}
data = {
    'birthDate': '1990-01-15',
    'birthTime': '14:30:00',
    'latitude': 40.7128,
    'longitude': -74.0060
}

response = requests.post(url, json=data, headers=headers)
time_data = response.json()

print(f"Node: {time_data['node']}")
print(f"Season: {time_data['season']}")

cURL

curl -X POST "https://www.retrogradeobservatory.com/api/external/v1/calculate" \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "birthDate": "1990-01-15",
    "birthTime": "14:30:00",
    "latitude": 40.7128,
    "longitude": -74.0060,
    "timezone": "UTC-05:00"
  }'

SIPS Request Example

curl -X POST https://www.retrogradeobservatory.com/api/external/v1/sips \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "action": "fetchAndStoreAllCalendarData",
    "system": {
      "startDate": "1990-01-01",
      "startTime": "12:00",
      "timezone": "UTC+0",
      "latitude": 40.7128,
      "longitude": -74.0060
    },
    "calendars": ["7F7F7F", "FF0000"]
  }'

Timezone Handling

Use standard UTC offset format for timezone parameter:

Local Time Timezone Converts to UTC
18:00:00 UTC+05:30 12:30:00 UTC
14:30:00 UTC-08:00 22:30:00 UTC
12:00:00 UTC+00:00 12:00:00 UTC

Error Handling

Code Meaning Description
200 OK The request was successful
400 Bad Request Missing parameters or improperly formatted request
401 Unauthorized API key is missing or invalid
403 Forbidden API key lacks required permissions
429 Too Many Requests Rate limit exceeded
500 Internal Server Error Server error during processing

Rate Limits

  • 50 requests per 15-minute window per API key
  • Exceeding limits returns HTTP 429 with retry information
  • Rate limit headers included in responses: x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset

Partner Dashboard Features

API Key Management

  • Create keys with custom names
  • One-click copy to clipboard
  • Key regeneration & revocation
  • Usage analytics (coming soon)

Account Management

  • Sign in with Email & PIN
  • Profile management
  • Unique Client ID
  • Secure PIN verification

Data Organization

  • Dedicated GCS folder structure
  • Profile & API key storage
  • Analytics & billing info

Lumina Map SIPS API v1

The Lumina Map SIPS API provides temporal location and distance calculations for advanced time intelligence applications.

API Key Requirements

The SIPS API uses the same API key system as other Retrograde Observatory endpoints. Partners must have:

  • A valid API key from the existing system
  • The lumina-map permission enabled on their API key
  • Active status and non-expired key

API Key Usage Methods

# Header method
X-API-Key: YOUR_API_KEY

# Authorization header
Authorization: Bearer YOUR_API_KEY

# Query parameter
?api_key=YOUR_API_KEY

API Endpoints

POST /api/luminamap/v1/sips/

Main SIPS calculations endpoint for temporal location and distance

GET /api/luminamap/v1/sips/elements

Get available calendar elements

GET /api/luminamap/v1/sips/health

Health check endpoint

GET /api/luminamap/v1/sips/docs

API documentation

GET /api/luminamap/v1/sips/version

Version information

GET /api/luminamap/v1/sips/status

System status

Request Parameters

Parameter Type Required Description
startDate string Yes Start date in YYYY-MM-DD format
startTime string Yes Start time in HH:MM format
endDate string No End date for dual-date calculations
endTime string No End time for dual-date calculations
timezone string Yes Timezone offset (e.g., "UTC-5", "UTC+05:30")
latitude number Yes Location latitude (-90 to 90)
longitude number Yes Location longitude (-180 to 180)
calendars array No Calendar elements to calculate (e.g., ["Individuality", "Capacity"])
format string No Response format: "standard", "compact", or "partner"
partner_id string No Partner identifier for tracking

Usage Examples

Single Date Request (Temporal Location)

curl -X POST https://www.retrogradeobservatory.com/api/luminamap/v1/sips \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "startDate": "2025-01-15",
    "startTime": "14:30",
    "timezone": "UTC-5",
    "latitude": 40.7128,
    "longitude": -74.0060,
    "calendars": ["Individuality", "Capacity", "Flexibility"],
    "format": "standard",
    "partner_id": "test_partner"
  }'

Dual Date Request (Temporal Location & Distance)

curl -X POST https://www.retrogradeobservatory.com/api/luminamap/v1/sips \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "startDate": "1990-05-20",
    "startTime": "08:00",
    "endDate": "2025-01-15",
    "endTime": "14:30",
    "timezone": "UTC-5",
    "latitude": 40.7128,
    "longitude": -74.0060,
    "calendars": ["7F7F7F", "FF0000"],
    "format": "standard",
    "partner_id": "test_partner"
  }'

India Standard Time Example

curl -X POST https://www.retrogradeobservatory.com/api/luminamap/v1/sips \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "startDate": "2025-01-15",
    "startTime": "19:30",
    "timezone": "UTC+05:30",
    "latitude": 28.6139,
    "longitude": 77.2090,
    "calendars": ["Stability", "Context"],
    "partner_id": "test_partner"
  }'

Response Formats

Single Date Response

{
  "success": true,
  "api_version": "1.0",
  "temporal_location": 23.45,
  "temporal_distance": "N/A (single date scenario)",
  "elements": {
    "Individuality": {
      "element_name": "Individuality",
      "calendar_code": "7F7F7F",
      "temporal_location": 23.45
    }
  },
  "request_parameters": {
    "location": {
      "latitude": 40.7128,
      "longitude": -74.0060
    },
    "timezone": "UTC-5",
    "date": "2025-01-15",
    "time": "14:30"
  }
}

Dual Date Response

{
  "success": true,
  "api_version": "1.0",
  "temporal_location": "See elements for start/end values",
  "temporal_distance": 45.67,
  "elements": {
    "Individuality": {
      "element_name": "Individuality",
      "calendar_code": "7F7F7F",
      "temporal_location": {
        "start": 12.34,
        "end": 23.45
      },
      "temporal_distance": 45.67
    }
  },
  "request_parameters": {
    "location": {
      "latitude": 40.7128,
      "longitude": -74.0060
    },
    "timezone": "UTC-5",
    "date": "1990-05-20",
    "time": "08:00",
    "end_date": "2025-01-15",
    "end_time": "14:30"
  }
}

Supported Timezone Formats

The API supports international timezone formats including half-hour and quarter-hour offsets:

Format Example Region
Whole Hours UTC-5, UTC+3 US Eastern, Europe
Half Hours UTC+05:30, UTC+09:30 India, Australia Central
Quarter Hours UTC+05:45, UTC-03:30 Nepal, Newfoundland

Error Handling

Authentication Error

{
  "success": false,
  "error": "API key required",
  "message": "Provide API key in X-API-Key header, Authorization header (Bearer token), or api_key query parameter",
  "api_version": "1.0",
  "endpoint": "/api/luminamap/v1/sips",
  "timestamp": "2024-11-10T12:00:00.000Z"
}

Permission Error

{
  "success": false,
  "error": "Insufficient permissions",
  "reason": "Missing required permission: lumina-map",
  "required_permission": "lumina-map",
  "available_permissions": ["calculate", "lumina-ai"],
  "api_version": "1.0",
  "endpoint": "/api/luminamap/v1/sips",
  "timestamp": "2024-11-10T12:00:00.000Z"
}

Rate Limiting

Rate limits are controlled by your API key settings:

Key Type Rate Limit
Demo 10 requests per 15 minutes
Standard 50 requests per 15 minutes
Premium 100 requests per 15 minutes

HTTP 429 status code is returned when rate limit is exceeded.

Security & Partner Notes

Security Features

  • API Key Authentication required
  • Permission-based access control
  • Per-key rate limiting
  • Input validation & sanitization
  • CORS support configured

Partner Integration

  • Requires lumina-map permission
  • Use partner_id for tracking
  • Three response formats available
  • All calendar codes supported
  • Usage monitored per API key

Monitoring Endpoints

  • /health - Basic health check
  • /status - Detailed system status
  • /version - API version info
  • /docs - Complete documentation

Lumina Coordinate Vortex API v1

The Lumina Coordinate API provides Vortex-based temporal analysis, mapping Elements of Lifestyle to Temporal Station and Temporal Shift calculations.

API Key Requirements

The Lumina Coordinate API uses the same API key system as other Retrograde Observatory endpoints. Partners must have:

  • A valid API key from the existing system
  • The lumina-coordinate permission enabled on their API key
  • Active status and non-expired key

API Key Usage Methods

# Header method
x-api-key: YOUR_API_KEY

# Authorization header
Authorization: Bearer YOUR_API_KEY

# Query parameter
?api_key=YOUR_API_KEY

API Endpoints

POST /api/luminacoord/v1/vortex

Main Vortex calculations endpoint for Temporal Station and Shift

GET /api/luminacoord/v1/vortex/elements

Get available elements and calendar codes

GET /api/luminacoord/v1/vortex/health

Health check endpoint

GET /api/luminacoord/v1/vortex/docs

API documentation

GET /api/luminacoord/v1/vortex/version

Version information

GET /api/luminacoord/v1/vortex/status

System status

Request Parameters

Parameter Type Required Description
startDate string Yes Start date in YYYY-MM-DD format
startTime string Yes Start time in HH:MM format (24-hour)
endDate string No End date for dual-date calculations
endTime string No End time for dual-date calculations
timezone string Yes UTC offset format (e.g., "UTC-5", "UTC+05:30")
latitude number Yes Location latitude (-90 to 90)
longitude number Yes Location longitude (-180 to 180)
calendars array Yes Calendar codes or element names (e.g., ["Individuality", "Capacity"])
format string No Response format: "standard", "compact", or "partner"
partner_id string No Partner identifier for tracking

Available Elements & Calendar Codes

Calendar Code Element Name Description
7F7F7F Individuality Personal uniqueness and self-expression
FF0000 Capacity Ability to handle and process experiences
FF4000 Flexibility Adaptability and responsiveness to change
FFFF00 Stability Groundedness and consistency
00FF00 Context Environmental awareness and situational understanding
00FFC0 Continuity Connection and flow between experiences
0000FF Content Substance and meaning of experiences
FF00FF Duality Balance between opposing forces
606F Connectivity Relationships and interconnections

Usage Examples

Single Date Request (Temporal Station)

curl -X POST https://www.retrogradeobservatory.com/api/luminacoord/v1/vortex \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "startDate": "2025-01-15",
    "startTime": "14:30",
    "timezone": "UTC-5",
    "latitude": 40.7128,
    "longitude": -74.0060,
    "calendars": ["Individuality", "Capacity", "Flexibility"],
    "format": "standard",
    "partner_id": "test_partner"
  }'

Dual Date Request (Temporal Station & Shift)

curl -X POST https://www.retrogradeobservatory.com/api/luminacoord/v1/vortex \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "startDate": "1990-05-20",
    "startTime": "08:00",
    "endDate": "2025-01-15",
    "endTime": "14:30",
    "timezone": "UTC-5",
    "latitude": 40.7128,
    "longitude": -74.0060,
    "calendars": ["7F7F7F", "FF0000", "0000FF"],
    "format": "standard",
    "partner_id": "test_partner"
  }'

India Standard Time Example

curl -X POST https://www.retrogradeobservatory.com/api/luminacoord/v1/vortex \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "startDate": "2025-01-15",
    "startTime": "19:30",
    "timezone": "UTC+05:30",
    "latitude": 28.6139,
    "longitude": 77.2090,
    "calendars": ["Stability", "Context"],
    "partner_id": "test_partner"
  }'

Response Formats

Single Date Response (Temporal Station)

{
  "success": true,
  "api_version": "1.0",
  "temporal_station": 23.456,
  "temporal_shift": "N/A (single date scenario)",
  "elements": {
    "Individuality": {
      "element_name": "Individuality",
      "calendar_code": "7F7F7F",
      "temporal_station": 23.456
    },
    "Capacity": {
      "element_name": "Capacity",
      "calendar_code": "FF0000",
      "temporal_station": 18.742
    }
  },
  "request_parameters": {
    "location": {
      "latitude": 40.7128,
      "longitude": -74.0060
    },
    "timezone": "UTC-5",
    "date": "2025-01-15",
    "time": "14:30"
  }
}

Dual Date Response (Temporal Station & Shift)

{
  "success": true,
  "api_version": "1.0",
  "temporal_station": "See elements for start/end values",
  "temporal_shift": 12.789,
  "elements": {
    "Individuality": {
      "element_name": "Individuality",
      "calendar_code": "7F7F7F",
      "temporal_station": {
        "start": 15.234,
        "end": 23.456
      },
      "temporal_shift": 12.789
    },
    "Capacity": {
      "element_name": "Capacity",
      "calendar_code": "FF0000",
      "temporal_station": {
        "start": 12.567,
        "end": 18.742
      },
      "temporal_shift": 8.345
    }
  },
  "request_parameters": {
    "location": {
      "latitude": 40.7128,
      "longitude": -74.0060
    },
    "timezone": "UTC-5",
    "date": "1990-05-20",
    "time": "08:00",
    "end_date": "2025-01-15",
    "end_time": "14:30"
  }
}

Key Terminology

Temporal Station

  • Single Date: The rho value representing temporal coordinate at a specific moment
  • Dual Date: Start and end r1/r2 values showing temporal evolution

Temporal Shift

  • Dual Date Only: The timeSpread value representing temporal distance
  • Indicates magnitude of change in element's temporal positioning

JavaScript Integration Examples

React.js Integration

const fetchLuminaCoordinate = async (requestData) => {
  try {
    const response = await fetch('/api/luminacoord/v1/vortex', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': process.env.REACT_APP_API_KEY
      },
      body: JSON.stringify(requestData)
    });

    if (!response.ok) {
      const error = await response.json();
      throw new Error(error.error || 'API request failed');
    }

    return await response.json();
  } catch (error) {
    console.error('Lumina Coordinate API error:', error);
    throw error;
  }
};

// Usage
const coordinateData = await fetchLuminaCoordinate({
  startDate: '2025-01-15',
  startTime: '14:30',
  timezone: 'UTC-5',
  latitude: 40.7128,
  longitude: -74.0060,
  calendars: ['Individuality', 'Capacity'],
  partner_id: 'my-app'
});

Node.js Server-to-Server

import fetch from 'node-fetch';

class LuminaCoordinateClient {
  constructor(apiKey, baseUrl = 'https://www.retrogradeobservatory.com') {
    this.apiKey = apiKey;
    this.baseUrl = baseUrl;
  }

  async calculateTemporalStation(requestData) {
    const response = await fetch(`${this.baseUrl}/api/luminacoord/v1/vortex`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': this.apiKey
      },
      body: JSON.stringify(requestData)
    });

    if (!response.ok) {
      const error = await response.json();
      throw new Error(`API Error: ${error.error}`);
    }

    return await response.json();
  }
}

// Usage
const client = new LuminaCoordinateClient('YOUR_API_KEY');
const result = await client.calculateTemporalStation({
  startDate: '2025-01-15',
  startTime: '14:30',
  timezone: 'UTC-5',
  latitude: 40.7128,
  longitude: -74.0060,
  calendars: ['Individuality'],
  partner_id: 'my-service'
});

Error Handling

Authentication Error

{
  "success": false,
  "error": "Missing API key",
  "api_version": "1.0",
  "endpoint": "/api/luminacoord/v1/vortex",
  "timestamp": "2025-01-15T14:30:00.000Z"
}

Permission Error

{
  "success": false,
  "error": "Insufficient permissions",
  "required_permission": "lumina-coordinate",
  "current_permissions": ["calculate", "lumina-ai", "lumina-map"],
  "api_version": "1.0",
  "endpoint": "/api/luminacoord/v1/vortex",
  "timestamp": "2025-01-15T14:30:00.000Z"
}

Validation Error

{
  "success": false,
  "error": "startTime must be in HH:MM format",
  "api_version": "1.0",
  "endpoint": "/api/luminacoord/v1/vortex",
  "timestamp": "2025-01-15T14:30:00.000Z"
}

Rate Limiting

Rate limits are controlled by your API key settings:

Key Type Rate Limit
Demo 10 requests per 15 minutes
Standard 50 requests per 15 minutes
Premium 100 requests per 15 minutes

HTTP 429 status code is returned when rate limit is exceeded.

Security & Partner Notes

Security Features

  • API Key Authentication required
  • Permission-based access control
  • Per-key rate limiting
  • Input validation & sanitization
  • CORS support configured
  • Error sanitization (no sensitive info)

Partner Integration

  • Requires lumina-coordinate permission
  • Use partner_id for tracking
  • Three response formats available
  • Element names or calendar codes supported
  • Usage monitored per API key

Best Practices

  • Use element names for readability
  • Implement retry logic for failures
  • Cache results for identical requests
  • Track usage against rate limits
  • Validate inputs client-side first

Common Issues & Troubleshooting

Issue Solution
"Missing API key" Ensure API key is included in x-api-key header
"Insufficient permissions" Contact support to add lumina-coordinate permission
"Calendar parameter is wrong" Use valid element names or calendar codes from the table above
"Ephemeris data not found" Temporary NASA data issue, retry after a few minutes
Rate limit exceeded Implement exponential backoff retry strategy

Support & Resources

  • Technical Support: evolve@retrogradeobservatory.com
  • API Key Requests: Include your organization name and use case
  • Integration Questions: Provide sample requests and expected responses
  • Bug Reports: Include full request/response data and error messages

BMS API v1 - Behavioral Modulation Signals

The BMS (Behavioral Modulation Signals) API provides real-time access to temporal behavioral intelligence data. BMS transforms complex temporal calculations into actionable behavioral parameters.

Base URLs

# Production
https://os.retrogradeobservatory.com/api/bms/v1

# Development
http://localhost:3005/api/bms/v1

What is BMS?

BMS processes temporal intelligence from two primary sources:

  • SIPS (Micro Time Intelligence) - 24-hour behavioral cycles
  • Vortex (Macro Time Intelligence) - Life-cycle temporal patterns

These are synthesized into behavioral signals across 9 elemental aspects, producing 172,032 unique behavioral combinations.

Use Cases

Visualization

3D avatars, data visualizations, generative art

Wellness

Mood tracking, energy indicators, stress monitoring

Gaming

NPC behaviors, procedural animation, dynamic content

Creative Tools

Color generation, composition guidance, creative prompts

Quick Start

# Check API Health
curl https://os.retrogradeobservatory.com/api/bms/v1/health

# Get Current Signal
curl https://os.retrogradeobservatory.com/api/bms/v1/signal

# Get Signal for Specific Calendar
curl "https://os.retrogradeobservatory.com/api/bms/v1/signal?calendarId=crimson-forge&tier=standard"

# Get All 9 Calendar Signals
curl "https://os.retrogradeobservatory.com/api/bms/v1/signals?tier=minimal"

API Endpoints

GET /api/bms/v1/health

Check API health and status

GET /api/bms/v1/signal

Get BMS signal for current or specified calendar

GET /api/bms/v1/signals

Get BMS signals for all 9 calendars in a single request

POST /api/bms/v1/signal

Generate BMS signal for a specific date, time, and location

GET /api/bms/v1/calendars

Get list of all available calendars with metadata

GET /api/bms/v1/schema

Get API schema including property definitions for each tier

GET /signal Parameters

Parameter Type Required Description
calendarId string No One of 9 calendar IDs (default: active calendar)
tier string No Response detail level: minimal, standard, full, raw (default: standard)

Valid Calendar IDs

Calendar ID Name Aspect Color
monolith-stillness The Monolith of Stillness Individuality #7F7F7F
crimson-forge The Crimson Forge Capacity #FF0000
ember-serpent The Ember Serpent Flexibility #FF4000
solar-loom The Solar Loom Stability #FFFF00
emerald-grid The Emerald Grid Context #00FF00
tidal-compass The Tidal Compass Continuity #00FFC0
indigo-exile The Indigo Exile Content #0000FF
twin-spiral The Twin Spiral Duality #FF00FF
ouroboric-gate The Ouroboric Gate Connectivity #606F60

Tier System

The tier system controls the amount of data returned in responses:

Tier Properties Rate Limit Best For
minimal ~7 100 req/min Mobile apps, widgets, simple displays
standard ~22 60 req/min Most applications, visualizations
full ~35+ 30 req/min Rich visualizations, games, detailed analysis
raw All 10 req/min Research, debugging, ML training

Response Format (Standard Tier)

{
  "success": true,
  "version": "v1",
  "timestamp": "2025-12-04T12:00:00.000Z",
  "data": {
    "calendarId": "crimson-forge",
    "aspect": "Capacity",
    "colorHex": "#FF0000",
    "density": 1.2,
    "brightness": 0.85,
    "visibility": 0.92,
    "rhythmScale": 1.15,
    "spatialX": 0.65,
    "spatialY": 0.48,
    "spatialZ": 0.72,
    "cohesiveness": 0.78,
    "wobbleScale": 0.35,
    "interactionDepth": 0.68,
    "spatialExtent": 1.25,
    "responsiveness": 0.62,
    "verticalBias": 0.18,
    "rotationalVelocity": 1.35,
    "magneticPull": 0.52,
    "auraRadius": 1.85,
    "harmonyGlow": 1.42,
    "formSolidity": 1.12,
    "stageModifier": 1.0
  },
  "meta": {
    "tier": "standard",
    "calendarId": "crimson-forge",
    "aspect": "Capacity",
    "requestId": "550e8400-e29b-41d4-a716-446655440000"
  }
}

POST /signal - Generate Signal

Generate BMS signal for a specific date, time, and location:

curl -X POST "https://os.retrogradeobservatory.com/api/bms/v1/signal" \
  -H "Content-Type: application/json" \
  -d '{
    "calendarId": "twin-spiral",
    "date": "2025-12-04",
    "time": "14:30",
    "latitude": 28.6139,
    "longitude": 77.2090,
    "timezone": "Asia/Kolkata"
  }'

POST Request Body Parameters

Parameter Type Required Description
calendarId string Yes One of 9 calendar IDs
date string Yes Date in YYYY-MM-DD format
time string Yes Time in HH:MM format (24-hour)
latitude number Yes Latitude (-90 to 90)
longitude number Yes Longitude (-180 to 180)
timezone string Yes IANA timezone or UTC offset

Core Property Definitions

Property Type Range Description
calendarId string - Calendar identifier
aspect string - Human-readable aspect name
colorHex string #XXXXXX Signature color
density number 0.0-2.0 Energy concentration
brightness number 0.0-1.0 Radiance/vitality
visibility number 0.0-1.0 Expression clarity
rhythmScale number 0.0-2.0 Tempo/pace
spatialX number 0.0-1.0 Horizontal reach (from Anatomy)
spatialY number 0.0-1.0 Vertical aspiration (from Yield)
spatialZ number 0.0-1.0 Depth/complexity (from Culture)

BMS Signal Object (Full Tier)

{
  "bmsSignal": {
    "signal_id": "uuid",
    "archetype_id": "CRIMSON_FORGE",
    "aspect": "Capacity",
    "state": "balanced",
    "mode": "MODERATE",
    "stage": "ESTABLISHED",

    "physics": {
      "mass": 0.8,
      "scale": 1.2,
      "drag": 0.3,
      "restitution": 0.6
    },

    "render": {
      "shader": "standard",
      "opacity": 0.85,
      "wireframe": false,
      "glow": 1.2,
      "roughness": 0.4
    },

    "animation": {
      "type": "orbit",
      "speed": 1.1,
      "velocity": 0.8,
      "frequency": 2.0
    },

    "interaction": {
      "hover_effect": "glow",
      "click_effect": "pulse",
      "excitability": 0.7
    },

    "normalized_vals": {
      "A": 0.65,
      "C": 0.42,
      "Y": 0.78
    }
  }
}

Behavioral Archetypes

Archetype Characteristics
SAGE Wisdom without urgency, contemplative
WARRIOR Disciplined power, action-oriented
SEEKER Active exploration, curiosity
GUARDIAN Protective stability, nurturing
ARTIST Creative flow, expressive
HEALER Nurturing presence, restorative
MYSTIC Deep contemplation, transcendent
EXPLORER Unbounded curiosity, adventurous
ANCHOR Grounded stability, dependable

Rate Limiting

Rate limits are enforced per IP address and vary by tier level:

# Rate Limit Headers in Response
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Window: 60

# When Rate Limited (HTTP 429)
{
  "success": false,
  "version": "v1",
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded. Try again in 45 seconds.",
    "retryAfter": 45
  }
}

Error Codes

Code HTTP Status Description
RATE_LIMITED 429 Rate limit exceeded
INVALID_TIER 400 Invalid tier parameter
INVALID_CALENDAR 400 Invalid calendarId
INVALID_DATE_FORMAT 400 Date not in YYYY-MM-DD format
INVALID_TIME_FORMAT 400 Time not in HH:MM format
INVALID_COORDINATES 400 Latitude/Longitude out of range
MISSING_REQUIRED_FIELD 400 Required POST body field missing
SIGNAL_GENERATION_FAILED 500 BMS generation error
SERVICE_UNAVAILABLE 503 Service temporarily unavailable

JavaScript Integration

const BASE_URL = 'https://os.retrogradeobservatory.com/api/bms/v1';

// Get current signal
async function getBMSSignal(calendarId = null, tier = 'standard') {
  const params = new URLSearchParams({ tier });
  if (calendarId) params.append('calendarId', calendarId);

  const response = await fetch(`${BASE_URL}/signal?${params}`);
  const data = await response.json();

  if (!data.success) {
    throw new Error(data.error.message);
  }

  return data.data;
}

// Get all 9 calendar signals
async function getAllSignals(tier = 'minimal') {
  const response = await fetch(`${BASE_URL}/signals?tier=${tier}`);
  const data = await response.json();
  return data.data;
}

// Generate signal for specific date/location
async function generateSignal(params) {
  const response = await fetch(`${BASE_URL}/signal`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      calendarId: params.calendarId,
      date: params.date,
      time: params.time,
      latitude: params.latitude,
      longitude: params.longitude,
      timezone: params.timezone
    })
  });
  const data = await response.json();
  return data.data;
}

// Usage
const signal = await getBMSSignal('crimson-forge', 'standard');
console.log(`Capacity brightness: ${signal.brightness}`);

Python Integration

import requests
from typing import Optional, Dict, Any

BASE_URL = "https://os.retrogradeobservatory.com/api/bms/v1"

def get_bms_signal(
    calendar_id: Optional[str] = None,
    tier: str = "standard"
) -> Dict[str, Any]:
    """Get BMS signal for current or specified calendar."""
    params = {"tier": tier}
    if calendar_id:
        params["calendarId"] = calendar_id

    response = requests.get(f"{BASE_URL}/signal", params=params)
    data = response.json()

    if not data["success"]:
        raise Exception(data["error"]["message"])

    return data["data"]

def get_all_signals(tier: str = "minimal") -> Dict[str, Any]:
    """Get BMS signals for all 9 calendars."""
    response = requests.get(f"{BASE_URL}/signals", params={"tier": tier})
    data = response.json()
    return data["data"]

def generate_signal(
    calendar_id: str,
    date: str,
    time: str,
    latitude: float,
    longitude: float,
    timezone: str
) -> Dict[str, Any]:
    """Generate BMS signal for specific date/time/location."""
    response = requests.post(
        f"{BASE_URL}/signal",
        json={
            "calendarId": calendar_id,
            "date": date,
            "time": time,
            "latitude": latitude,
            "longitude": longitude,
            "timezone": timezone
        }
    )
    return response.json()["data"]

# Usage
signal = get_bms_signal("crimson-forge", "full")
print(f"Capacity brightness: {signal['brightness']}")

React Hook Example

import { useState, useEffect } from 'react';

const BASE_URL = 'https://os.retrogradeobservatory.com/api/bms/v1';

export function useBMSSignal(calendarId, tier = 'standard') {
  const [signal, setSignal] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    const fetchSignal = async () => {
      try {
        setLoading(true);
        const params = new URLSearchParams({ tier });
        if (calendarId) params.append('calendarId', calendarId);

        const response = await fetch(`${BASE_URL}/signal?${params}`);
        const data = await response.json();

        if (!data.success) throw new Error(data.error.message);
        setSignal(data.data);
      } catch (err) {
        setError(err.message);
      } finally {
        setLoading(false);
      }
    };

    fetchSignal();
    const interval = setInterval(fetchSignal, 30000); // Refresh every 30s
    return () => clearInterval(interval);
  }, [calendarId, tier]);

  return { signal, loading, error };
}

// Usage in component
function MyComponent() {
  const { signal, loading, error } = useBMSSignal('crimson-forge');

  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error: {error}</div>;

  return (
    <div style={{ backgroundColor: signal.colorHex }}>
      <h2>{signal.aspect}</h2>
      <p>Brightness: {signal.brightness}</p>
    </div>
  );
}

Authentication (Planned)

Current Version: No authentication required (development mode)

Production (Planned):

Header: X-BMS-API-Key: your-api-key-here

Contact the Retrograde Observatory team to obtain API keys for production use.

Support

  • Documentation: This page
  • Email: api-support@retrograde-observatory.com
  • Version: BMS API v1.0.0

Contact Us

Get in touch with the Retrograde Observatory team