Off-Nadir Delta

AI deep-dive — assess one signal, then ask the analyst

A row tells you what was reported; you want an assessment of what satellites could verify, and a sourced answer to a free-form question.

Uses the AI endpoints (assess / analyst). Available on every plan — these are simply the expensive calls, so the gate is your token balance.

Steps

  1. Pick the highest-severity recent signal in the AOI.
  2. Run the RS assessment on it (quick or deep).
  3. Ask the analyst a question; poll the job until it completes (polling is free).

In the web app

Ask Delta Agent

REST

Authenticate with Authorization: Bearer ond_… (create a key at /account/api). Try any of these live in the Playground.

Pick a signal

bash
curl "https://offnadir-delta.com/api/v1/signals?bbox=22%2C44%2C40%2C53&days=7&sort=severity&limit=1" \
  -H "Authorization: Bearer ond_YOUR_API_KEY"

Assess it

bash
curl "https://offnadir-delta.com/api/v1/assess" \
  -X POST \
  -H "Authorization: Bearer ond_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"eventId":1315064079,"kind":"quick"}'

Ask the analyst

bash
curl "https://offnadir-delta.com/api/v1/analyst" \
  -X POST \
  -H "Authorization: Bearer ond_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"question":"What is escalating in this area in the last 3 days?"}'

Python

This is the runnable example shipped with the SDK (pip install offnadir-delta, then set OFFNADIR_DELTA_API_KEY).

python
"""AI assessment and the analyst agent (metered — these are the expensive calls)."""

from offnadir_delta import Client
from offnadir_delta.errors import InsufficientTokensError, PermissionDeniedError

AOI = [22.0, 44.0, 40.0, 53.0]


def main() -> None:
    with Client() as client:
        if not client.usage().plan.api_llm_access:
            print("This key's plan does not have LLM access (Pro required). Skipping.")
            return

        try:
            # Assess the single highest-severity recent signal.
            page = client.signals.list(bbox=AOI, days=7, sort="severity", limit=1)
            if page.signals and page.signals[0].id is not None:
                event_id = page.signals[0].id
                assessment = client.intelligence.assess(event_id, kind="quick")
                print("Assessment:\n", assessment.content, "\n")

            # Free-form analyst question (metered 5-123 tokens, not idempotent).
            answer = client.intelligence.analyst(
                "What is the most significant escalation this week and why?",
                bbox=AOI,
            )
            print("Analyst brief:\n", answer.brief)
        except PermissionDeniedError:
            print("Pro plan required for these endpoints.")
        except InsufficientTokensError as e:
            print(f"Not enough tokens (need {e.required}, have {e.available}).")


if __name__ == "__main__":
    main()

MCP

Connect once, from any MCP client:

bash
claude mcp add --transport http off-nadir-delta \
  https://offnadir-delta.com/api/v1/mcp \
  --header "Authorization: Bearer ond_..."

The tools this workflow uses: assess_signal, ask_analyst, get_analyst_job. See the full roster at /docs/mcp.

Go deeper

← All recipes

From headline to satellite evidence

One connected intelligence workflow across four surfaces — free to start, no GIS software or remote-sensing background required.