API & MCP
Query geolocated world event signals and the Daily World Brief programmatically — over a REST API and an MCP server. Usage is metered on your token balance.
Overview
The API and MCP server are available on paid plans. Every endpoint lives under https://offnadir-delta.com/api/v1 and authenticates with an API key. Requests are billed to your own token balance — the same wallet used across the app.
Issue and manage keys from Account → Developer API. No plan yet? See pricing.
Quickstart
Fetch the free Daily World Brief to confirm your key works, then query signals:
# 1) Free — verify your key
curl -H "Authorization: Bearer ond_..." "https://offnadir-delta.com/api/v1/brief"
# 2) Query signals (3 token/page)
curl -H "Authorization: Bearer ond_..." \
"https://offnadir-delta.com/api/v1/signals?days=1&categories=security&limit=50"Authentication
Pass your key as a bearer token (or the X-API-Key header). Keys are shown once at creation — store them securely and never expose them client-side.
Authorization: Bearer ond_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxRate limits
Successful responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. When exceeded, the API returns 429 with a Retry-After header — back off and retry after the indicated delay.
Errors
Errors return a JSON body with a stable machine-readable code, a human message, and a requestId for support.
{
"error": "date must be YYYY-MM-DD",
"code": "INVALID_PARAMETERS",
"requestId": "req_1783..."
}| 401 | Missing or invalid key |
| 403 | Your plan does not include this endpoint |
| 402 | Insufficient tokens for a metered call |
| 400 | Invalid parameters (see the message) |
| 404 | Resource not found |
| 429 | Rate limit exceeded |
Pagination
/signals is cursor-paginated. Each response carries meta.next_cursor and meta.has_more; pass the cursor back to fetch the next page. Each page is billed as one query.
# follow the cursor until has_more is false
curl -H "Authorization: Bearer ond_..." \
"https://offnadir-delta.com/api/v1/signals?limit=100&cursor=MTAw"Endpoints
/api/v1/signals3 tok / pageGeolocated world event signals — geopolitical, security, disaster, and infrastructure events distilled from global news media, enriched with AI-verified geolocation, severity/GEOINT scores, and satellite-collection recommendations. Returns up to 500 rows per page (cursor-paginated).
Parameters
| Parameter | Type | Description |
|---|---|---|
| bbox | string | minLon,minLat,maxLon,maxLat (WGS84). Omit for worldwide. |
| date | string (date) | Window end date YYYY-MM-DD (UTC). Defaults to today. |
| days | integer 1–30 | Window length ending on `date`. Defaults to 1. |
| categories | string | Comma-separated category filter. Omit for all. |
| limit | integer 1–500 | Max rows per page. Defaults to 100. |
| cursor | string | Pagination cursor from a previous meta.next_cursor. |
curl -H "Authorization: Bearer ond_..." \
"https://offnadir-delta.com/api/v1/signals?days=1&categories=security&limit=2"{
"meta": {
"start_date": "2026-07-08",
"end_date": "2026-07-08",
"bbox": [-180, -90, 180, 90],
"categories": ["security"],
"count": 2,
"next_cursor": "Mg",
"has_more": true,
"tokens": { "charged": 3, "remaining": 9994 }
},
"signals": [
{
"id": 1312473707,
"event_date": "2026-07-08",
"category": "security",
"title": "…",
"summary": "…",
"location": "Kyiv, Ukraine",
"country_code": "UP",
"lat": 50.45, "lng": 30.52,
"severity_score": 78,
"geoint_score": 64,
"escalation_trend": "rising",
"num_mentions": 42,
"num_sources": 11,
"source_url": "https://…",
"collection": {
"rs_level": "…", "rs_sensor": "SAR",
"rs_target": "…", "rs_reason": "…"
}
}
]
}/api/v1/brieffreeThe Daily World Brief — an AI-synthesized digest of the previous day’s worldwide event signals (headline, executive summary, top developments, ranked signals). Free of token charges.
Parameters
| Parameter | Type | Description |
|---|---|---|
| date | string (date) | Brief date YYYY-MM-DD (UTC). Defaults to latest. |
curl -H "Authorization: Bearer ond_..." "https://offnadir-delta.com/api/v1/brief"{
"brief": {
"date": "2026-07-07",
"headline": "…",
"summary": "…",
"developments": [ { "title": "…", "why_it_matters": "…" } ],
"key_judgments": [ … ]
}
}/api/v1/assess5/15 tok · ProAI remote-sensing deep-dive for a single signal: what to observe, recommended sensors, and a collection window. `eventId` is the `id` from a signals result. A prior (event, kind) assessment is cached and not re-charged. Requires a plan with API LLM access (Pro).
Parameters
| Parameter | Type | Description |
|---|---|---|
| eventId | integer (required) | Signal id (global_event_id) from /signals. |
| kind | "quick" | "deep" | Depth. quick=5 tok, deep=15 tok. Defaults to quick. |
curl -X POST -H "Authorization: Bearer ond_..." \
-H "Content-Type: application/json" \
-d '{"eventId": 1312473707, "kind": "quick"}' \
"https://offnadir-delta.com/api/v1/assess"{
"kind": "quick",
"cached": false,
"model": "…",
"content": {
"summary": "…",
"observability": "…",
"recommendedSensors": ["SAR satellites", "high-resolution optical"]
},
"meta": { "tokens": { "charged": 5, "remaining": 195 } }
}/api/v1/analyst45 tok · ProAsk the Delta Analyst an OSINT/GEOINT question. Runs an agentic multi-step analysis and returns a structured brief (summary, findings with collection recommendations, assessment, citations). Synchronous — allow up to ~120s. Not idempotent, so don’t blind-retry. Requires Pro.
Parameters
| Parameter | Type | Description |
|---|---|---|
| question | string (required) | The analytic question (≤ 500 chars). |
| bbox | number[4] | Optional focus bounding box [minLon,minLat,maxLon,maxLat]. |
curl -X POST -H "Authorization: Bearer ond_..." \
-H "Content-Type: application/json" \
-d '{"question": "Key escalation signals in the Black Sea this week?"}' \
"https://offnadir-delta.com/api/v1/analyst"{
"brief": {
"summary": "…",
"findings": [ { "global_event_id": 131…, "recommended_sensor": "SAR", "rationale": "…" } ],
"assessment": "…",
"citations": [ "https://…" ]
},
"meta": { "tokens": { "charged": 45, "remaining": 150 } }
}MCP server
An MCP (Model Context Protocol) server at /api/v1/mcp exposes the same surface as tools, plus resources and prompts, so any MCP-capable agent can consume the intelligence directly.
query_signals·get_world_brief— tools (metered / free)assess_signal·ask_analyst— Pro tools- Resources:
brief://latest,brief://{date},signals://schema - Prompts:
daily-situation-briefing,assess-top-signal,aoi-watch
claude mcp add --transport http off-nadir-delta \
https://offnadir-delta.com/api/v1/mcp \
--header "Authorization: Bearer ond_..."{
"mcpServers": {
"off-nadir-delta": {
"type": "http",
"url": "https://offnadir-delta.com/api/v1/mcp",
"headers": { "Authorization": "Bearer ond_..." }
}
}
}OpenAPI spec
A machine-readable OpenAPI 3.1 document is available for codegen and API explorers:
https://offnadir-delta.com/api/v1/openapi.json