Discovery endpoints
The /v1/meta/* endpoints list the platform’s current vocabulary — engines, models, jurisdictions, regulatory areas, and export types — so clients can discover valid values at runtime instead of hardcoding them. All five are cheap bearer-authenticated reads (60/min bucket) with no parameters.
| Endpoint | Feeds |
|---|---|
GET /v1/meta/engines | engine and horizon on POST /v1/scans |
GET /v1/meta/models | model / searchModel on POST /v1/scans |
GET /v1/meta/jurisdictions | jurisdictions on POST /v1/scans |
GET /v1/meta/areas | areas on POST /v1/scans |
GET /v1/meta/export-types | The whole body of POST /v1/exports |
Engines
GET /v1/meta/engines
curl https://api.regsn.app/v1/meta/engines \
-H "Authorization: Bearer $REGSN_API_KEY"200 — the current response, in full:
{
"data": [
{ "id": "v4", "label": "V4", "description": "V4 classic" },
{ "id": "v4.5-alpha", "label": "V4.5α", "description": "Verifier-aware (Sonnet+Tools)" },
{ "id": "v4.5-beta", "label": "V4.5β", "description": "Verifier-aware (SerpAPI/Firecrawl)" }
],
"horizons": [3, 6, 12, 18, 24, 36]
}| Field | Notes |
|---|---|
data[].id | The value to send as engine on POST /v1/scans. |
data[].label / description | Display strings, as shown in the product UI. |
horizons | Valid horizon values, in months. |
Models
GET /v1/meta/models — the model catalogue, grouped by provider. The catalogue is dynamic; always read it rather than assuming these ids.
curl https://api.regsn.app/v1/meta/models \
-H "Authorization: Bearer $REGSN_API_KEY"200 (truncated example):
{
"data": [
{
"provider": "anthropic",
"label": "Anthropic",
"configured": true,
"models": [
{
"id": "sonnet",
"label": "Sonnet 4.6",
"role": "analyst",
"tier": null,
"model_id": "claude-sonnet-4-6"
}
]
}
]
}| Field | Notes |
|---|---|
data[].provider | Provider key (anthropic, openai, gemini, deepl, cohere, perplexity). |
data[].configured | Whether the provider is usable on this deployment. Unconfigured providers are listed but their models will fail at scan time. |
models[].id | The value to send as model / searchModel on POST /v1/scans. |
models[].role | Which pipeline role the entry is offered for. |
models[].tier | Optional tier tag, or null. |
models[].model_id | The provider’s own identifier for the model, where applicable. |
models[].pro_variant | Optional { id, label, model_id } — a higher-capability variant selectable by its own id. |
Note model: "haiku" is rejected on verifier-aware scan configs — see Scans.
Jurisdictions
GET /v1/meta/jurisdictions — the jurisdiction vocabulary the product scans with, each with its principal regulators.
curl https://api.regsn.app/v1/meta/jurisdictions \
-H "Authorization: Bearer $REGSN_API_KEY"200 (truncated):
{
"data": [
{ "id": "UK", "label": "UK", "regulators": ["FCA", "PRA", "BoE", "HMT", "PSR", "ICO"] },
{ "id": "EU", "label": "EU", "regulators": ["EC", "ESMA", "EBA", "EIOPA", "ECB/SSM", "EDPB"] }
]
}Current ids: US, EU, UK, Singapore, Hong Kong, Japan, Australia, Switzerland, Canada, Brazil, India, China, South Korea.
POST /v1/scans does not reject names outside this list (only count and length are validated) — but this list is what the product itself is tuned for.
Areas
GET /v1/meta/areas — the regulatory-area vocabulary.
curl https://api.regsn.app/v1/meta/areas \
-H "Authorization: Bearer $REGSN_API_KEY"200:
{
"data": [
{ "id": "Banking / Prudential", "label": "Banking / Prudential" },
{ "id": "Capital Markets", "label": "Capital Markets" },
{ "id": "Digital Assets / Crypto", "label": "Digital Assets / Crypto" },
{ "id": "AML / KYC", "label": "AML / KYC" },
{ "id": "Payments", "label": "Payments" },
{ "id": "Data Privacy", "label": "Data Privacy" },
{ "id": "Operational Resilience", "label": "Operational Resilience" },
{ "id": "ESG / Sustainable Finance", "label": "ESG / Sustainable Finance" },
{ "id": "Sanctions", "label": "Sanctions" },
{ "id": "Research Bundling / Unbundling", "label": "Research Bundling / Unbundling" },
{ "id": "Consumer Protection", "label": "Consumer Protection" }
]
}As with jurisdictions, free-text areas are accepted on POST /v1/scans; this is the recommended vocabulary. See also jurisdictions and topics in the concepts guide.
Export types
GET /v1/meta/export-types — every (provider, artifact_type) pair accepted by POST /v1/exports, each with a machine-readable options schema.
curl https://api.regsn.app/v1/meta/export-types \
-H "Authorization: Bearer $REGSN_API_KEY"200 (one row shown):
{
"data": [
{
"key": "pptx",
"label": "Regulation-focused",
"provider": "internal-pptx",
"artifact_type": "slide-deck",
"group": "internal",
"provider_label": "Internal",
"requires_provider": null,
"has_options": true,
"options_schema": {
"theme": { "type": "string", "enum": ["light", "dark"], "default": "dark", "description": "Deck visual theme." },
"editorialModel": { "type": "string", "enum": ["haiku", "sonnet", "opus"], "default": "sonnet", "description": "DEPRECATED — accepted for backwards compatibility but ignored. …" },
"targetLanguage": { "type": "string", "description": "…" }
}
}
]
}| Field | Notes |
|---|---|
key / label / group / provider_label | Display metadata, as used in the product UI. |
provider + artifact_type | The pair to send on POST /v1/exports. |
requires_provider | Non-null when the type depends on an integration being configured for your account (notebooklm, elevenLabsPodcast). |
has_options | true when options_schema is non-empty. |
options_schema | Field name → { type, enum?, default?, description?, maxLength? }. This is the validation vocabulary for the options object — unknown fields and out-of-enum values are rejected with 422. |
Build export UIs and pipelines from options_schema rather than hardcoding — style catalogues in particular change over time. A human-readable summary is on the Exports page.