Skip to Content

Snapshots

A snapshot is the structured output of one scan: the items found, cross-item trends, an executive summary and narrative, and — when a prior comparable snapshot exists — an overlay of what changed. The product-side explanation is at scans and snapshots.

EndpointPurpose
GET /v1/snapshotsList with filters and paging
GET /v1/snapshots/{id}Full envelope
GET /v1/snapshots/{id}/itemsItems only
GET /v1/snapshots/{id}/trendsTrends only
GET /v1/snapshots/{id}/executive-summarySummary block only
GET /v1/snapshots/{id}/executive-narrativeNarrative prose, with ?language=
GET /v1/snapshots/{id}/driftChanges overlay
GET /v1/snapshots/{id}/briefingSub-editor briefing block

All snapshot endpoints are bearer-authenticated reads (60/min bucket). An id that does not exist or belongs to another account returns 404 not_found.

The envelope

The data object of a snapshot has this top-level shape:

items[] regulatory items — the core payload trends[] cross-item trends executive_summary { bottom_line, priorities[] } executive_narrative prose written for an executive reader (optional) _briefing sub-editor editorial block (optional; see below) driftOverlay changes vs a prior snapshot (optional; see below) translations { "<lang>": { executive_narrative, … } } (optional) _meta { engine, model, searches, estimatedCost, inputFingerprint, … }

Each item carries at minimum a jurisdiction and an area; typical items also have title, source, impact (High | Medium | Low), likelihood (Confirmed | Likely | Possible), date, and summary. Additional fields may appear over time — treat the envelope as open.

The _briefing block

_briefing is the sub-editor’s output — the editorial furniture the product’s Briefing tab renders around the narrative. Seven documented fields:

FieldContents
briefing_headlineEditorial headline for the briefing, six words or fewer, in the register of a broadsheet analysis piece.
briefing_standfirstOne orienting sentence standing under the headline: what the briefing covers and why it matters now.
priorities[]One entry per executive_summary.priorities entry, in the same order. Each is { short_label, tags } — a 2–3-word contents-list label and a "JURISDICTION · INSTRUMENT" tag (e.g. "EU · MiCA").
bottom_line_tightThe briefing’s “so what” in one or two sentences — a fresh closing line, not a truncation of executive_summary.bottom_line.
pull_quoteA two-sentence executive pull quote (~40 words) sharpening one specific point from the narrative body, with one key number or date.
sentiment_labelOne-word posture label: Tightening, Stable, Easing, Mixed, or Volatile.
sentiment_rationaleOne sentence (30 words at most) explaining the sentiment label.

Fields are validated independently after generation: a field that fails validation is absent, not null — treat every field as optional, and the whole block as optional on older snapshots and engine paths that skip the sub-editor.

List snapshots

GET /v1/snapshots

Query parameterTypeDefaultNotes
limitinteger501–100.
offsetinteger0Offset paging; pagination.total gives the full count.
from / toISO 8601 date-timeFilter on creation time.
jurisdictionstringExact match against any item’s jurisdiction.
areastringExact match against any item’s area.

Snapshot starring is retired: there is no starred filter, and sending one is rejected with 422 and code unknown_parameter rather than silently returning the unfiltered list.

curl "https://api.regsn.app/v1/snapshots?jurisdiction=UK&from=2026-06-01T00:00:00Z&limit=10" \ -H "Authorization: Bearer $REGSN_API_KEY"

200:

{ "data": [ { "id": "a1b2…", "title": "UK · EU — AML / KYC (12m)", "created_at": "2026-07-20T09:14:11.000Z", "cost_cents": 55, "actual_cost_cents": 61.4, "item_count": 18, "trend_count": 4, "jurisdiction_count": 2 } ], "pagination": { "limit": 10, "offset": 0, "total": 37 } }

List rows are summaries — counts, not content. Fetch the id for the envelope.

Retrieve a snapshot

GET /v1/snapshots/{id}

curl https://api.regsn.app/v1/snapshots/a1b2… \ -H "Authorization: Bearer $REGSN_API_KEY"

200:

{ "id": "a1b2…", "title": "UK · EU — AML / KYC (12m)", "config": { "jurisdictions": ["UK", "EU"], "areas": ["AML / KYC"], "horizon": 12 }, "data": { "items": ["…"], "trends": ["…"], "executive_summary": { "bottom_line": "…", "priorities": ["…"] }, "executive_narrative": "Over the next twelve months…", "_meta": { "engine": "v4", "model": "…" } }, "cost_cents": 61.4, "created_at": "2026-07-20T09:14:11.000Z" }
FieldNotes
configThe scan configuration that produced this snapshot.
dataThe envelope, verbatim.
cost_centsActual cost where known, otherwise the pre-scan estimate. US cents; may carry fractions of a cent (61.4).

Sub-resources

Three sub-resources project a single key out of the envelope, so you can fetch just what you need instead of the whole document:

EndpointReturns
GET /v1/snapshots/{id}/items{ "data": [ …items ] }
GET /v1/snapshots/{id}/trends{ "data": [ …trends ] }
GET /v1/snapshots/{id}/executive-summary{ "data": { "bottom_line": "…", "priorities": ["…"] } }{ "data": null } if the snapshot has none
curl https://api.regsn.app/v1/snapshots/a1b2…/items \ -H "Authorization: Bearer $REGSN_API_KEY"

Executive narrative

GET /v1/snapshots/{id}/executive-narrative

Query parameterDefaultNotes
languageenen returns the original narrative. Any other code (fr, de, es, it, zh, ja, pt) returns the matching translation if the scan was configured with translationLanguages.
curl "https://api.regsn.app/v1/snapshots/a1b2…/executive-narrative?language=fr" \ -H "Authorization: Bearer $REGSN_API_KEY"

200:

{ "executive_narrative": "Au cours des douze prochains mois…", "language": "fr" }
Status · codeWhen
404 not_foundThe snapshot has no narrative (language=en), or the id does not exist.
404 translation_not_availableNo translation exists for the requested non-English language.

Changes overlay (/drift)

GET /v1/snapshots/{id}/drift returns the snapshot’s driftOverlay — the scan-time comparison recorded when the snapshot was created: what moved between this snapshot and the prior comparable one. The product’s Change Monitor card is a richer, recomputed-on-read view of the same question. The field keeps its original name on the wire for stability.

curl https://api.regsn.app/v1/snapshots/a1b2…/drift \ -H "Authorization: Bearer $REGSN_API_KEY"

200 — the overlay object, verbatim. When the snapshot has no comparison (for example, the first scan of a given configuration):

{ "available": false }

The overlay is only present when an earlier snapshot with a comparable configuration existed at scan time. Treat { "available": false } as the normal first-run case, not an error.

The briefing sub-resource

GET /v1/snapshots/{id}/briefing returns the _briefing block without fetching the whole envelope.

curl https://api.regsn.app/v1/snapshots/a1b2…/briefing \ -H "Authorization: Bearer $REGSN_API_KEY"

200{ "available": true } plus the briefing fields:

{ "available": true, "briefing_headline": "The grace period is over", "pull_quote": "…", "sentiment_label": "Tightening", "sentiment_rationale": "…" }

Snapshots that predate the sub-editor, or whose pass produced no valid fields, return the same shape as /drift’s first-run case:

{ "available": false }

{ "available": false } is a routine state on older snapshots, not an error — 404 is reserved for the snapshot itself being missing. Individual fields are validated independently and may be absent even when available is true.

See also

  • Scans — how snapshots get made.
  • Exports — turn a snapshot into a PDF, deck, infographic, or audio briefing.
  • Changes between scans — the product-side view of the overlay.
Last updated on