Developer reference

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_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Rate 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..."
}
401Missing or invalid key
403Your plan does not include this endpoint
402Insufficient tokens for a metered call
400Invalid parameters (see the message)
404Resource not found
429Rate 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

GET/api/v1/signals3 tok / page

Geolocated 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

ParameterTypeDescription
bboxstringminLon,minLat,maxLon,maxLat (WGS84). Omit for worldwide.
datestring (date)Window end date YYYY-MM-DD (UTC). Defaults to today.
daysinteger 1–30Window length ending on `date`. Defaults to 1.
categoriesstringComma-separated category filter. Omit for all.
limitinteger 1–500Max rows per page. Defaults to 100.
cursorstringPagination cursor from a previous meta.next_cursor.
Request
curl -H "Authorization: Bearer ond_..." \
  "https://offnadir-delta.com/api/v1/signals?days=1&categories=security&limit=2"
Response
{
  "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": "…"
      }
    }
  ]
}
GET/api/v1/brieffree

The 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

ParameterTypeDescription
datestring (date)Brief date YYYY-MM-DD (UTC). Defaults to latest.
Request
curl -H "Authorization: Bearer ond_..." "https://offnadir-delta.com/api/v1/brief"
Response
{
  "brief": {
    "date": "2026-07-07",
    "headline": "…",
    "summary": "…",
    "developments": [ { "title": "…", "why_it_matters": "…" } ],
    "key_judgments": [ … ]
  }
}
POST/api/v1/assess5/15 tok · Pro

AI 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

ParameterTypeDescription
eventIdinteger (required)Signal id (global_event_id) from /signals.
kind"quick" | "deep"Depth. quick=5 tok, deep=15 tok. Defaults to quick.
Request
curl -X POST -H "Authorization: Bearer ond_..." \
  -H "Content-Type: application/json" \
  -d '{"eventId": 1312473707, "kind": "quick"}' \
  "https://offnadir-delta.com/api/v1/assess"
Response
{
  "kind": "quick",
  "cached": false,
  "model": "…",
  "content": {
    "summary": "…",
    "observability": "…",
    "recommendedSensors": ["SAR satellites", "high-resolution optical"]
  },
  "meta": { "tokens": { "charged": 5, "remaining": 195 } }
}
POST/api/v1/analyst45 tok · Pro

Ask 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

ParameterTypeDescription
questionstring (required)The analytic question (≤ 500 chars).
bboxnumber[4]Optional focus bounding box [minLon,minLat,maxLon,maxLat].
Request
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"
Response
{
  "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 Code
claude mcp add --transport http off-nadir-delta \
  https://offnadir-delta.com/api/v1/mcp \
  --header "Authorization: Bearer ond_..."
Config file
{
  "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