GET /v1/status
Returns detailed status information about the data collection pipeline, including which collectors are running and how fresh the data is for each pair. Use this endpoint to monitor data quality and detect collection outages.
Authentication
This endpoint requires an API key. See Authentication.
Parameters
No parameters required.
Response
| Field | Type | Description |
|---|---|---|
status | string | Overall system status. One of operational, degraded, or outage. |
collectors | array | Status of each exchange data collector. |
collectors[].exchange | string | Exchange name. |
collectors[].status | string | Collector status. One of running, stopped, or error. |
collectors[].last_heartbeat | string | ISO 8601 timestamp of the collector's last heartbeat. |
pairs | array | Per-pair data freshness information. |
pairs[].pair | string | Pair identifier. |
pairs[].last_update | string | ISO 8601 timestamp of the most recent data point. |
pairs[].freshness_seconds | integer | Seconds since the last data point was received. |
pairs[].status | string | Data freshness status. One of fresh, stale, or unavailable. |
timestamp | string | ISO 8601 timestamp of this status check. |
Examples
curl -X GET "https://api.moxiemetrx.com/v1/status" \
-H "X-API-Key: your_key"
import requests
response = requests.get(
"https://api.moxiemetrx.com/v1/status",
headers={"X-API-Key": "your_key"},
)
data = response.json()
print(f"System: {data['status']}")
for pair in data["pairs"]:
print(f" {pair['pair']}: {pair['status']} ({pair['freshness_seconds']}s)")
Response:
{
"status": "operational",
"collectors": [
{
"exchange": "luno",
"status": "running",
"last_heartbeat": "2026-03-23T11:59:55Z"
},
{
"exchange": "quidax",
"status": "running",
"last_heartbeat": "2026-03-23T11:59:58Z"
},
{
"exchange": "valr",
"status": "running",
"last_heartbeat": "2026-03-23T11:59:52Z"
}
],
"pairs": [
{
"pair": "BTCNGN",
"last_update": "2026-03-23T11:59:53Z",
"freshness_seconds": 7,
"status": "fresh"
},
{
"pair": "USDTNGN",
"last_update": "2026-03-23T11:59:56Z",
"freshness_seconds": 4,
"status": "fresh"
},
{
"pair": "ETHNGN",
"last_update": "2026-03-23T11:59:51Z",
"freshness_seconds": 9,
"status": "fresh"
},
{
"pair": "ETHKES",
"last_update": "2026-03-23T11:59:48Z",
"freshness_seconds": 12,
"status": "fresh"
},
{
"pair": "BTCZAR",
"last_update": "2026-03-23T11:59:55Z",
"freshness_seconds": 5,
"status": "fresh"
},
{
"pair": "ETHZAR",
"last_update": "2026-03-23T11:59:57Z",
"freshness_seconds": 3,
"status": "fresh"
},
{
"pair": "XRPNGN",
"last_update": "2026-03-23T11:59:54Z",
"freshness_seconds": 6,
"status": "fresh"
},
{
"pair": "XRPZAR",
"last_update": "2026-03-23T11:59:56Z",
"freshness_seconds": 4,
"status": "fresh"
},
{
"pair": "SOLNGN",
"last_update": "2026-03-23T11:59:50Z",
"freshness_seconds": 10,
"status": "fresh"
},
{
"pair": "SOLZAR",
"last_update": "2026-03-23T11:59:53Z",
"freshness_seconds": 7,
"status": "fresh"
}
],
"timestamp": "2026-03-23T12:00:00Z"
}
Poll this endpoint every 60 seconds in production to detect collector failures before they impact downstream systems.
Handling collector failures
When a collector goes down, affected pairs transition from fresh to stale to unavailable as time passes. Here is how to respond:
| Pair status | Freshness | Recommended action |
|---|---|---|
fresh | < 10 min | Normal operation |
stale | 10-30 min | Log a warning. Data still usable for non-real-time use cases |
unavailable | > 30 min | Halt pricing decisions that depend on this pair. Alert on-call |
If a single collector is down but others are still running, pairs covered by multiple exchanges may remain fresh via the remaining sources. Check the sources array in /v1/rates/live to see which exchanges are actively contributing.