Off-Nadir Delta

Signals and imagery, concurrently

An event feed and a scene catalog answer different questions; production code usually needs both, and they do not need to wait for each other.

Steps

  1. Fire the signals query and the imagery search for the same AOI concurrently (async client).
  2. Join them: which recent events have a recent low-cloud scene over them.

In the web app

Open the Map

REST

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

Signals over the AOI

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

Scenes over the AOI

bash
curl "https://offnadir-delta.com/api/v1/imagery?bbox=22%2C44%2C40%2C53&collection=sentinel-2-l2a&cloud_cover_max=20&days=14" \
  -H "Authorization: Bearer ond_YOUR_API_KEY"

Python

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

python
"""Async client: concurrently search imagery and stream signals over an AOI."""

import asyncio

from offnadir_delta import AsyncClient

AOI = [22.0, 44.0, 40.0, 53.0]


async def main() -> None:
    async with AsyncClient() as client:
        # Run two independent requests concurrently.
        signals_task = client.signals.list(bbox=AOI, days=7, limit=10)
        imagery_task = client.imagery.search(
            bbox=AOI, collection="sentinel-2-l2a", cloud_cover_max=20, days=14
        )
        page, scenes = await asyncio.gather(signals_task, imagery_task)

        print(f"{page.meta.count} signals, {scenes.meta.count} scenes")
        for scene in scenes.scenes[:5]:
            print(f"  {scene.id} {scene.datetime} cloud={scene.cloud_cover}")

        # Async iteration over every signal.
        async for signal in client.signals.iterate(bbox=AOI, days=3, min_severity=7):
            print("  !", signal.title)


if __name__ == "__main__":
    asyncio.run(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: query_signals, search_imagery. See the full roster at /docs/mcp.

← 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.