Skip to Content

Exports

An export turns a snapshot into a deliverable artefact — a PDF, CSV, slide deck, infographic, podcast, or video. Exports always run asynchronously: you queue a job, poll it, then download the result. One snapshot can feed any number of exports.

EndpointPurpose
POST /v1/exportsQueue a job
GET /v1/exportsList your jobs, with filters
GET /v1/exports/{id}Poll one job
GET /v1/exports/{id}/downloadStream the finished artefact
DELETE /v1/exports/{id}Delete a job and its artefact bytes

The recipe:

  1. GET /v1/meta/export-types — every export type, as a (provider, artifact_type) pair with a machine-readable options_schema. See Discovery.
  2. POST /v1/exports with snapshot_id, the pair, and any options.
  3. Poll GET /v1/exports/{id} until status is completed, then fetch download_url.

Create an export job

POST /v1/exports — bearer auth; rate-limited to 30 exports per hour per key; accepts Idempotency-Key.

Request body

FieldTypeRequiredNotes
snapshot_idstring (uuid)yesA snapshot owned by you — from POST /v1/scans or GET /v1/snapshots.
providerstringyesProvider key, e.g. internal-pdf, notebooklm.
artifact_typestringyesValid only paired with the matching provider — see the catalogue. Unknown pairs return 422.
optionsobjectnoPer-type string fields, validated against the registry. Unknown option names and out-of-vocabulary values return 422 with did-you-mean hints and the valid list.
curl https://api.regsn.app/v1/exports \ -H "Authorization: Bearer $REGSN_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "snapshot_id": "a1b2…", "provider": "internal-pptx", "artifact_type": "slide-deck", "options": { "theme": "light" } }'

202:

{ "export_job_id": "c3d4…", "status": "queued", "status_url": "/v1/exports/c3d4…", "download_url": null }

More examples:

gemini-infographic, non-default style
curl https://api.regsn.app/v1/exports \ -H "Authorization: Bearer $REGSN_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "snapshot_id": "a1b2…", "provider": "gemini-infographic", "artifact_type": "infographic-custom", "options": { "styleSlug": "riso-tritone-gem", "planModel": "opus" } }'
NotebookLM podcast, deep dive, long
curl https://api.regsn.app/v1/exports \ -H "Authorization: Bearer $REGSN_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "snapshot_id": "a1b2…", "provider": "notebooklm", "artifact_type": "audio", "options": { "audio_format": "DEEP_DIVE", "audio_length": "LONG", "instructions": "Focus on enforcement-action implications." } }'

Errors

Status · codeWhen
404 not_foundsnapshot_id does not exist or belongs to another account.
409 idempotency_key_in_use / idempotency_in_progressSee Idempotency.
422 validation_errorMissing field; unknown provider:artifact_type pair; invalid optionserrors[] names each offending field (codes unknown_option, invalid_value, invalid_type, too_long) with the valid vocabulary.
429 rate_limit_exceededThe exports bucket is exhausted (30/hour). Honour Retry-After.
503 transient_errorService temporarily unavailable. Retry with the same Idempotency-Key.

Export types and options

Sixteen (provider, artifact_type) pairs. All option values are strings. The authoritative, always-current schema is options_schema on GET /v1/meta/export-types; this table reflects it as of 20-07-2026.

providerartifact_typeOptions (defaults in bold)
internal-pdfpdf
internal-csvcsv
internal-tearsheettearsheettargetLanguage; editorialModel (deprecated — accepted but ignored)
internal-pptxslide-decktheme: light | dark; targetLanguage; editorialModel (deprecated — accepted but ignored)
frontend-slidesslide-webstyleSlug: dark-editorial | light-consulting; targetLanguage
gemini-infographictearsheet-detailedstyleSlug (12 styles, default bloomberg-editorial-gem); planModel: sonnet5 | sonnet | opus | opus48; targetLanguage
gemini-infographicinfographic-customstyleSlug (21 styles, default bloomberg-editorial-gem); planModel (default opus); targetLanguage
openai-infographictearsheet-detailedstyleSlug (12 styles, default bloomberg-editorial-oai); targetLanguage
openai-infographicinfographic-customstyleSlug (21 styles, default bloomberg-editorial-oai); targetLanguage
notebooklminfographicstyle (10 styles, default PROFESSIONAL — full list under Field notes); detail_level: CONCISE | STANDARD | DETAILED; orientation: LANDSCAPE | PORTRAIT | SQUARE; instructions; targetLanguage
notebooklmslide-detailedslide_length: SHORT | DEFAULT; instructions; targetLanguage
notebooklmaudioaudio_format: DEBATE | DEEP_DIVE | BRIEF | CRITIQUE; audio_length: SHORT | DEFAULT | LONG; instructions; targetLanguage
notebooklmvideo-explainerinstructions; targetLanguage
notebooklmvideovideo_format: CINEMATIC; instructions; targetLanguage
elevenlabs-briefingpodcast-briefingvoiceId; modelId (alias model_id); targetLanguage
elevenlabs-discussionpodcast-discussionmodelId (alias model_id); targetLanguage

Field notes:

  • targetLanguage — a language code matching a translation present on the snapshot (e.g. fr, de; see translationLanguages). Omit for English. The podcast types fall back to English when the requested translation is missing — and the notebooklm audio type’s default DEBATE format is English-only regardless of targetLanguage, as its product label says.
  • style — the notebooklm infographic visual style: PROFESSIONAL (default), EDITORIAL, SCIENTIFIC, SKETCH_NOTE, BENTO_GRID, BRICKS, CLAY, INSTRUCTIONAL, KAWAII or ANIME.
  • instructions — free text up to 2,000 characters steering the generator (NotebookLM types only).
  • styleSlug — visual style anchor for the infographic types. The full per-type catalogue, with slugs, lives in options_schema on GET /v1/meta/export-types — do not hardcode it.
  • editorialModel — deprecated. Still accepted for backwards compatibility, but has no effect.
  • notebooklm types require the NotebookLM integration to be configured on your account (requires_provider: "notebooklm" in the catalogue); the elevenlabs-* podcast types likewise (requires_provider: "elevenLabsPodcast").

Two account-level settings affect behaviour without appearing in the request. Free-text customisation — if it is disabled for your account, instructions values are replaced server-side with your account’s defaults rather than rejected. Expedite — whether AI-generated exports run in the real-time lane or the slower batch lane is a stored account preference, not a request option; it applies to bearer-key jobs exactly as it does in the dashboard.

List export jobs

GET /v1/exports

Query parameterDefaultNotes
snapshot_idOnly jobs for this snapshot.
statusComma-separated subset of queued, processing, completed, failed, cancelled. Unknown values return 422.
limit50Max 100. Newest first.
curl "https://api.regsn.app/v1/exports?status=queued,processing&limit=20" \ -H "Authorization: Bearer $REGSN_API_KEY"

200{ "data": [ …job objects… ] } in the shape below.

Poll an export job

GET /v1/exports/{id}

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

200:

{ "id": "c3d4…", "status": "completed", "artifact_type": "slide-deck", "provider": "internal-pptx", "snapshot_id": "a1b2…", "created_at": "2026-07-20T10:00:00.000Z", "completed_at": "2026-07-20T10:03:41.000Z", "cost_cents": 12, "error": null, "result_mime": "application/vnd.openxmlformats-officedocument.presentationml.presentation", "result_filename": "regulatory-snapshot.pptx", "result_size_bytes": 482133, "download_url": "/v1/exports/c3d4…/download" }

status is one of queued, processing, completed, failed, cancelled. download_url is populated only when completed; on failed, error carries the reason. 404 not_found for an id that does not exist or belongs to another account.

Download the artefact

GET /v1/exports/{id}/download — streams the raw bytes.

curl -OJ https://api.regsn.app/v1/exports/c3d4…/download \ -H "Authorization: Bearer $REGSN_API_KEY"

Semantics:

  • Content-Type is the job’s result_mime; Content-Disposition supplies result_filename (-OJ saves under it).
  • Audio, video, PDF, and image types are served inline (so players and viewers can point at the URL); everything else is attachment.
  • Audio and video support HTTP range requestsAccept-Ranges: bytes, partial content as 206. Other types ignore Range.
Status · codeWhen
404 not_foundThe id does not exist or belongs to another account.
409 not_readyJob is not completed yet.
410 goneThe job completed but the artefact bytes are no longer retained. Re-run the export.
416 range_not_satisfiableRange outside the resource (audio/video only).

Delete an export job

DELETE /v1/exports/{id} — removes the job and its stored artefact bytes. Mutations bucket (30/min).

curl -X DELETE https://api.regsn.app/v1/exports/c3d4… \ -H "Authorization: Bearer $REGSN_API_KEY"

204 on success; 404 not_found if the id does not exist or belongs to another account. Deleting a job does not affect the snapshot it was built from.

See also

Last updated on