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:
- Visit: retrogradeobservatory.com
- Click: Partner button in the sidebar
- Register: Complete partner registration with your details
- 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
/api/external/v1/calculate
Calculate personal time intelligence components from birth data and current location.
/api/external/v1/sips
Provides detailed micro-intelligence data for a given time system.
/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-mappermission 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
/api/luminamap/v1/sips/
Main SIPS calculations endpoint for temporal location and distance
/api/luminamap/v1/sips/elements
Get available calendar elements
/api/luminamap/v1/sips/health
Health check endpoint
/api/luminamap/v1/sips/docs
API documentation
/api/luminamap/v1/sips/version
Version information
/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-mappermission - Use
partner_idfor 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-coordinatepermission 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
/api/luminacoord/v1/vortex
Main Vortex calculations endpoint for Temporal Station and Shift
/api/luminacoord/v1/vortex/elements
Get available elements and calendar codes
/api/luminacoord/v1/vortex/health
Health check endpoint
/api/luminacoord/v1/vortex/docs
API documentation
/api/luminacoord/v1/vortex/version
Version information
/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-coordinatepermission - Use
partner_idfor 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
/api/bms/v1/health
Check API health and status
/api/bms/v1/signal
Get BMS signal for current or specified calendar
/api/bms/v1/signals
Get BMS signals for all 9 calendars in a single request
/api/bms/v1/signal
Generate BMS signal for a specific date, time, and location
/api/bms/v1/calendars
Get list of all available calendars with metadata
/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