7 - Environments & Platform Status
This page describes the available environments for the SafeSky Public REST API, how to target each one, and how to programmatically check platform availability before establishing connections.
Environments
The SafeSky Public REST API is available in two environments. Your API key determines which environment your requests are routed to — you do not need to change the base URL.
Production
The production environment provides real-time, unfiltered access to live traffic data. Use this for operational deployments.
| Property | Value |
|---|---|
| Base URL | https://public-api.safesky.app |
| Swagger UI | public-api.safesky.app/swagger-ui/index.html |
| Live traffic viewer | live.safesky.app |
| API key prefix | ssk_live_... |
| Quota | Enforced — usage metering applies |
| Traffic data | Full real-time data, all aircraft |
Sandbox
The sandbox environment is designed for development and integration testing. It mirrors the production API surface but uses limited, simulated traffic data. Sandbox API keys are exempt from billing and quota enforcement.
| Property | Value |
|---|---|
| Base URL | https://sandbox-public-api.safesky.app |
| Swagger UI | sandbox-public-api.safesky.app/swagger-ui/index.html |
| Live traffic viewer | sandbox-live.safesky.app |
| API key prefix | ssk_test_... |
| Quota | Not enforced |
| Traffic data | Limited / simulated — data quality is marked as degraded |
Note: Use the sandbox to validate your integration, test request payloads, and explore edge cases without affecting production data or incurring usage charges.
Platform Status API
Before starting a mission or establishing a connection, you can programmatically check whether the SafeSky platform is available.
Status Endpoint
GET https://status.safesky.app/api/v1/status
No authentication is required. This endpoint is public and responses are cached at the CDN edge for 60 seconds, matching the platform's check interval.
Response
{
"status": "operational",
"checkedAt": "2026-03-16T14:32:01.000Z",
"services": {
"app-api": {
"name": "SafeSky App API",
"status": "operational",
"lastCheckedAt": "2026-03-16T14:32:01.000Z"
},
"public-api": {
"name": "SafeSky Public API",
"status": "operational",
"lastCheckedAt": "2026-03-16T14:32:01.000Z"
},
"uav-api": {
"name": "UAV API",
"status": "operational",
"lastCheckedAt": "2026-03-16T14:32:01.000Z"
}
}
}
Top-level status Values
| Value | Meaning |
|---|---|
operational |
All services are functioning normally |
degraded |
One or more services are experiencing intermittent issues |
disrupted |
One or more services are unavailable |
Per-service status values follow the same vocabulary: operational, degraded, outage, or unknown (returned only on cold start before the first check cycle completes).
The checkedAt field reflects the timestamp of the most recent completed check cycle. Status is refreshed every 60 seconds.
Recommended Behaviour
| Status | Recommended action |
|---|---|
operational |
Proceed normally |
degraded |
Proceed with caution; show a warning to the operator |
disrupted |
Halt non-essential API calls; alert the operator |
| Endpoint unreachable | Treat as disrupted; do not assume availability |
Safety note:
degradedshould be treated as available — the platform is reachable but may be slower than usual. Onlydisruptedshould block a safety-critical operation.
Integration Example
async function isPlatformAvailable() {
const res = await fetch('https://status.safesky.app/api/v1/status');
const { status } = await res.json();
return status === 'operational' || status === 'degraded';
}
Important: The Status API reflects availability as observed from SafeSky's own monitoring infrastructure. It does not replace your application's own error handling and retry logic. Always implement robust error handling on API calls regardless of reported platform status.
Human-Readable Status Page
The same status information is available as a dashboard at status.safesky.app, showing:
- Real-time service status
- 24-hour uptime timeline
- Incident history for each service