Read everything — cursor pagination
A first page is not the result set. You want every matching signal in the window, not just the first page.
Steps
- Follow meta.next_cursor until has_more is false (the SDK does this with signals.iterate).
REST
Authenticate with Authorization: Bearer ond_… (create a key at /account/api). Try any of these live in the Playground.
Full result set (cursor loop)
bash
# Returns the first page (up to `limit`, max 500). If the response's
# meta.has_more is true, repeat with &cursor=<meta.next_cursor> for the rest.
curl "https://offnadir-delta.com/api/v1/signals?bbox=22%2C44%2C40%2C53&recency=24h&min_severity_band=6" \
-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
"""Iterate every signal across pages and count them by category on the client side."""
from collections import Counter
from datetime import date, timedelta
from offnadir_delta import Client
AOI = [22.0, 44.0, 40.0, 53.0]
def main() -> None:
with Client() as client:
# Auto-pagination: follows the cursor until exhausted (each page is metered).
by_category: Counter[str] = Counter()
today = date.today()
for signal in client.signals.iterate(
bbox=AOI,
start_date=(today - timedelta(days=13)).isoformat(),
end_date=today.isoformat(),
min_severity_band=6,
):
by_category[signal.category or "unknown"] += 1
print("High-severity signals by category:")
for category, count in by_category.most_common():
print(f" {category}: {count}")
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: query_signals. See the full roster at /docs/mcp.
From headline to satellite evidence
One connected intelligence workflow across four surfaces — free to start, no GIS software or remote-sensing background required.