{"openapi":"3.1.1","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"Datahub public recipe and dimensions API","version":"1.0.0","description":"Credential-free public data connections. Recipe request format is datahub.analysis v2; response version is 1. Live values may revise. Snapshots evaluate supplied observations without provider requests. Terms, units, missingness and provenance remain applicable. Incompatible changes require a new URL version; removal requires a dated notice and migration instructions in the descriptor and documentation."},"servers":[{"url":"https://datahub.kristinn.eu"}],"security":[],"externalDocs":{"url":"https://datahub.kristinn.eu/integrations/api","description":"Complete executable examples, limits and semantic validation"},"paths":{"/api/v1/recipes/run":{"get":{"summary":"Discover recipe versions, contract links, limits and transformations","responses":{"200":{"description":"Recipe descriptor","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Datahub-Recipe-Version":{"description":"Recipe response version","schema":{"const":"1"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"const":1},"input":{"type":"string"},"documentation":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"openapi":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"examples":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"limits":{"type":"object","properties":{"bodyBytes":{"type":"integer","minimum":0},"layers":{"type":"integer","minimum":0},"observationsPerLayer":{"type":"integer","minimum":0},"rows":{"type":"integer","minimum":0},"responseBytes":{"type":"integer","minimum":0}},"required":["bodyBytes","layers","observationsPerLayer","rows","responseBytes"],"additionalProperties":false},"transforms":{"type":"array","items":{"type":"string"}},"modes":{"type":"object","properties":{"recipe":{"type":"string"},"snapshot":{"type":"string"}},"required":["recipe","snapshot"],"additionalProperties":false},"deprecation":{"type":"string"}},"required":["version","input","documentation","openapi","examples","limits","transforms","modes","deprecation"],"additionalProperties":false}}}}}},"post":{"summary":"Run a live recipe or supplied snapshot","description":"Content-Type application/json required. 2,097,152 request bytes; eight layers; 12,000 observations per layer; 96,000 output rows; 20,971,520 response bytes. Sequential provider execution and existing cache/traffic limits apply. Any selected source failure fails the complete request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"},"examples":{"simple-live":{"summary":"simple-live","externalValue":"https://datahub.kristinn.eu/api/v1/examples/simple-live.json"},"multi-source":{"summary":"multi-source","externalValue":"https://datahub.kristinn.eu/api/v1/examples/multi-source.json"},"offline-snapshot":{"summary":"offline-snapshot","externalValue":"https://datahub.kristinn.eu/api/v1/examples/offline-snapshot.json"}}}}},"responses":{"200":{"description":"Normalized series, joined rows and source/transform manifest","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}},"X-Datahub-Recipe-Version":{"description":"Recipe response version","schema":{"const":"1"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeResponse"}}}},"400":{"description":"Invalid JSON, workspace or query","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"403":{"description":"Upstream access denied","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"404":{"description":"Dataset not found","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"413":{"description":"Input or result too large","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"422":{"description":"Unsupported provider or rejected upstream query","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"429":{"description":"Provider throttled or busy; respect Retry-After","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"502":{"description":"Upstream unavailable or invalid response","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"504":{"description":"Upstream timeout","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}}}},"options":{"summary":"Credential-free CORS preflight","responses":{"204":{"description":"Allowed methods: POST, GET, OPTIONS. Content-Type allowed; preflight cache 86400 seconds.","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"Access-Control-Allow-Methods":{"description":"Allowed methods","schema":{"const":"POST, GET, OPTIONS"}},"Access-Control-Allow-Headers":{"description":"Allowed request headers","schema":{"const":"Content-Type"}},"Access-Control-Max-Age":{"description":"Preflight cache seconds","schema":{"const":"86400"}}}}}}},"/api/v1/recipes/table":{"get":{"summary":"Refresh live recipe as a long-form CSV","description":"UTF-8 with BOM. Columns: series, seriesId, period, value, unit, country, countryCode, frequency, originalPeriod, status, source, retrieved, dimensions, codes, derivationMethod, derivationVersion, derivationSourcePeriods, derivationQualityFlags, derivationComplete, derivationExpected. Null numeric values are empty cells; codes/dimensions and derivation arrays are JSON text. Joined missing observations have status 'no observation'. Source-controlled spreadsheet formula prefixes are escaped. No observations returns 400.","parameters":[{"name":"recipe","in":"query","required":true,"description":"Exactly one unpadded base64url UTF-8 datahub.analysis v2 live recipe. No snapshots or other parameters. The UI emits at most 5,800 input bytes; decoder accepts at most 7,800 encoded characters.","schema":{"type":"string","minLength":1,"maxLength":7800,"pattern":"^[A-Za-z0-9_-]+$"}}],"responses":{"200":{"description":"CSV attachment datahub-data.csv","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"Content-Disposition":{"description":"attachment; filename=datahub-data.csv","schema":{"type":"string"}}},"content":{"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid JSON, workspace or query","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"403":{"description":"Upstream access denied","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"404":{"description":"Dataset not found","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"413":{"description":"Input or result too large","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"422":{"description":"Unsupported provider or rejected upstream query","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"429":{"description":"Provider throttled or busy; respect Retry-After","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"502":{"description":"Upstream unavailable or invalid response","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"504":{"description":"Upstream timeout","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}}}},"options":{"summary":"Credential-free CORS preflight","responses":{"204":{"description":"Allowed methods: GET, OPTIONS. No additional request headers are advertised.","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"Access-Control-Allow-Methods":{"description":"Allowed methods","schema":{"const":"GET, OPTIONS"}}}}}}},"/api/v1/recipes/model":{"get":{"summary":"Refresh live recipe as Power BI HTML model tables","description":"Static HTML with Data and Date tables; Country and Currency only when resolved. Data adds periodKey, currencyCode and baseCurrencyCode to the CSV columns. Join Data.periodKey→Date.periodKey, countryCode→Country.iso2, currencyCode→Currency.code. Preserve text keys. Date represents observed period grain, not a daily DAX table. Currency is resolved from units, never guessed from country. No observations returns 400. CSP default-src 'none'; frame-ancestors 'none'; base-uri 'none'.","parameters":[{"name":"recipe","in":"query","required":true,"description":"Exactly one unpadded base64url UTF-8 datahub.analysis v2 live recipe. No snapshots or other parameters. The UI emits at most 5,800 input bytes; decoder accepts at most 7,800 encoded characters.","schema":{"type":"string","minLength":1,"maxLength":7800,"pattern":"^[A-Za-z0-9_-]+$"}}],"responses":{"200":{"description":"Semantic HTML tables","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"text/html":{"schema":{"type":"string"}}}},"400":{"description":"Invalid JSON, workspace or query","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"403":{"description":"Upstream access denied","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"404":{"description":"Dataset not found","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"413":{"description":"Input or result too large","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"422":{"description":"Unsupported provider or rejected upstream query","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"429":{"description":"Provider throttled or busy; respect Retry-After","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"502":{"description":"Upstream unavailable or invalid response","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}},"504":{"description":"Upstream timeout","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Request-ID":{"description":"Correlation identifier on recipe errors and run success.","schema":{"type":"string"}},"Retry-After":{"description":"Optional seconds to wait on provider failures. Do not immediately retry 429.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeError"}}}}}},"options":{"summary":"Credential-free CORS preflight","responses":{"204":{"description":"Allowed methods: GET, OPTIONS. No additional request headers are advertised.","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"Access-Control-Allow-Methods":{"description":"Allowed methods","schema":{"const":"GET, OPTIONS"}}}}}}},"/api/dimensions/countries":{"get":{"summary":"Country list or identity resolution","description":"All parameters occur at most once, ≤200 characters. lookup cannot combine with q/region and requires JSON. Preserve ISO/numeric keys as text. Aggregate and ambiguous inputs do not become countries.","parameters":[{"name":"lookup","in":"query","required":false,"description":"Resolve one name or code","schema":{"type":"string","maxLength":200}},{"name":"joinOn","in":"query","required":false,"description":"Resolution field; default auto","schema":{"type":"string","enum":["auto","iso2","iso3","numeric","name"]}},{"name":"q","in":"query","required":false,"description":"Substring filter on names, aliases and codes","schema":{"type":"string","maxLength":200}},{"name":"region","in":"query","required":false,"description":"Exact case-insensitive region, regionCode or continent","schema":{"type":"string","maxLength":200}},{"name":"format","in":"query","required":false,"description":"List output format; default json. Lookups require json. CSV preserves text codes; keep its linked manifest.","schema":{"type":"string","enum":["json","csv","manifest"],"default":"json"}}],"responses":{"200":{"description":"Reference list, lookup or export","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CountryList"},{"$ref":"#/components/schemas/CountryLookup"},{"$ref":"#/components/schemas/ReferenceManifest"}]}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid, repeated, incompatible or oversized parameters","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"405":{"description":"Method not allowed (Allow header lists supported methods)","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}},"head":{"summary":"Same status and headers as GET, without a body","parameters":[{"name":"lookup","in":"query","required":false,"description":"Resolve one name or code","schema":{"type":"string","maxLength":200}},{"name":"joinOn","in":"query","required":false,"description":"Resolution field; default auto","schema":{"type":"string","enum":["auto","iso2","iso3","numeric","name"]}},{"name":"q","in":"query","required":false,"description":"Substring filter on names, aliases and codes","schema":{"type":"string","maxLength":200}},{"name":"region","in":"query","required":false,"description":"Exact case-insensitive region, regionCode or continent","schema":{"type":"string","maxLength":200}},{"name":"format","in":"query","required":false,"description":"List output format; default json. Lookups require json. CSV preserves text codes; keep its linked manifest.","schema":{"type":"string","enum":["json","csv","manifest"],"default":"json"}}],"responses":{"200":{"description":"Reference list, lookup or export","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"400":{"description":"Invalid, repeated, incompatible or oversized parameters","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"405":{"description":"Method not allowed (Allow header lists supported methods)","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}}}},"options":{"summary":"Credential-free CORS preflight","responses":{"204":{"description":"Allowed methods: GET, HEAD, POST, OPTIONS. Content-Type allowed; preflight cache 600 seconds.","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"Access-Control-Allow-Methods":{"description":"Allowed methods","schema":{"const":"GET, HEAD, POST, OPTIONS"}},"Access-Control-Allow-Headers":{"description":"Allowed request headers","schema":{"const":"Content-Type"}},"Access-Control-Max-Age":{"description":"Preflight cache seconds","schema":{"const":"600"}}}},"403":{"description":"Unsupported preflight method or header","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}},"post":{"summary":"Batch country resolution","description":"Maximum 64,000 body bytes and 1,000 values. Numeric codes are integers 0–999; strings ≤200 characters. Body joinOn defaults to auto, including null. Query parameters are ignored.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryBatchRequest"}}}},"responses":{"200":{"description":"One ordered result per input","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryBatchResponse"}}}},"400":{"description":"Invalid body","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"413":{"description":"Body exceeds 64,000 bytes","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}}},"/api/dimensions/currencies":{"get":{"summary":"Currency list or identity resolution","description":"All parameters occur at most once, ≤200 characters. lookup requires JSON and cannot combine with q. ISO 4217 current codes only; no exchange rates or historical validity. numeric is text, minorUnit may be null.","parameters":[{"name":"lookup","in":"query","required":false,"description":"Exact code, numeric code or currency name","schema":{"type":"string","maxLength":200}},{"name":"q","in":"query","required":false,"description":"Substring filter on code, numeric code, name or entities","schema":{"type":"string","maxLength":200}},{"name":"format","in":"query","required":false,"description":"List output format; default json. Lookups require json. CSV preserves text codes; keep its linked manifest.","schema":{"type":"string","enum":["json","csv","manifest"],"default":"json"}}],"responses":{"200":{"description":"Reference list, lookup or export","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CurrencyList"},{"$ref":"#/components/schemas/CurrencyLookup"},{"$ref":"#/components/schemas/ReferenceManifest"}]}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid, repeated, incompatible or oversized parameters","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"405":{"description":"Method not allowed (Allow header lists supported methods)","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}},"head":{"summary":"Same status and headers as GET, without a body","parameters":[{"name":"lookup","in":"query","required":false,"description":"Exact code, numeric code or currency name","schema":{"type":"string","maxLength":200}},{"name":"q","in":"query","required":false,"description":"Substring filter on code, numeric code, name or entities","schema":{"type":"string","maxLength":200}},{"name":"format","in":"query","required":false,"description":"List output format; default json. Lookups require json. CSV preserves text codes; keep its linked manifest.","schema":{"type":"string","enum":["json","csv","manifest"],"default":"json"}}],"responses":{"200":{"description":"Reference list, lookup or export","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"400":{"description":"Invalid, repeated, incompatible or oversized parameters","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"405":{"description":"Method not allowed (Allow header lists supported methods)","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}}}},"options":{"summary":"Credential-free CORS preflight","responses":{"204":{"description":"Allowed methods: GET, HEAD, OPTIONS. Content-Type allowed; preflight cache 600 seconds.","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"Access-Control-Allow-Methods":{"description":"Allowed methods","schema":{"const":"GET, HEAD, OPTIONS"}},"Access-Control-Allow-Headers":{"description":"Allowed request headers","schema":{"const":"Content-Type"}},"Access-Control-Max-Age":{"description":"Preflight cache seconds","schema":{"const":"600"}}}},"403":{"description":"Unsupported preflight method or header","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}}},"/api/dimensions/dates":{"get":{"summary":"Generate Gregorian UTC periods or normalize a source period","description":"All parameters occur once, ≤100 characters. For generation supply start and end in 1900–2100, ordered and inclusive; ≤12,000 periods. Complete periods intersecting the range are returned. lookup excludes start/end/frequency and requires JSON; calendar normalization accepts years 0001–9999.","parameters":[{"name":"start","in":"query","required":false,"description":"Inclusive range start YYYY-MM-DD","schema":{"type":"string","format":"date","maxLength":100}},{"name":"end","in":"query","required":false,"description":"Inclusive range end YYYY-MM-DD","schema":{"type":"string","format":"date","maxLength":100}},{"name":"frequency","in":"query","required":false,"description":"Default daily","schema":{"type":"string","enum":["daily","monthly","quarterly","annual"]}},{"name":"lookup","in":"query","required":false,"description":"Source annual, monthly, quarterly or daily period (e.g. 2024M01 or 2024K1)","schema":{"type":"string","maxLength":100}},{"name":"format","in":"query","required":false,"description":"List output format; default json. Lookups require json. CSV preserves text codes; keep its linked manifest.","schema":{"type":"string","enum":["json","csv","manifest"],"default":"json","maxLength":100}}],"responses":{"200":{"description":"Reference list, lookup or export","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DateList"},{"$ref":"#/components/schemas/DateLookup"},{"$ref":"#/components/schemas/ReferenceManifest"}]}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid, repeated, incompatible or oversized parameters","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"405":{"description":"Method not allowed (Allow header lists supported methods)","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}},"head":{"summary":"Same status and headers as GET, without a body","parameters":[{"name":"start","in":"query","required":false,"description":"Inclusive range start YYYY-MM-DD","schema":{"type":"string","format":"date","maxLength":100}},{"name":"end","in":"query","required":false,"description":"Inclusive range end YYYY-MM-DD","schema":{"type":"string","format":"date","maxLength":100}},{"name":"frequency","in":"query","required":false,"description":"Default daily","schema":{"type":"string","enum":["daily","monthly","quarterly","annual"]}},{"name":"lookup","in":"query","required":false,"description":"Source annual, monthly, quarterly or daily period (e.g. 2024M01 or 2024K1)","schema":{"type":"string","maxLength":100}},{"name":"format","in":"query","required":false,"description":"List output format; default json. Lookups require json. CSV preserves text codes; keep its linked manifest.","schema":{"type":"string","enum":["json","csv","manifest"],"default":"json","maxLength":100}}],"responses":{"200":{"description":"Reference list, lookup or export","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"400":{"description":"Invalid, repeated, incompatible or oversized parameters","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"405":{"description":"Method not allowed (Allow header lists supported methods)","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}}}},"options":{"summary":"Credential-free CORS preflight","responses":{"204":{"description":"Allowed methods: GET, HEAD, OPTIONS. Content-Type allowed; preflight cache 600 seconds.","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"Access-Control-Allow-Methods":{"description":"Allowed methods","schema":{"const":"GET, HEAD, OPTIONS"}},"Access-Control-Allow-Headers":{"description":"Allowed request headers","schema":{"const":"Content-Type"}},"Access-Control-Max-Age":{"description":"Preflight cache seconds","schema":{"const":"600"}}}},"403":{"description":"Unsupported preflight method or header","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}}},"/api/dimensions/crosswalks":{"get":{"summary":"Bounded historical relationship pilot","description":"No parameters returns the index. Otherwise kind is required. Municipality: list with kind alone, or code/sourceDate/targetDate together, JSON only; excludes country/date/role. Country-currency: list with optional role, or country/date together, JSON only; excludes code/sourceDate/targetDate. Coverage is Skagafjörður merger and Croatia currency changeover, 2022-01-01 inclusive to 2026-09-14 exclusive. No automatic allocation, weights or exchange rates. All parameters occur once, ≤200 characters.","parameters":[{"name":"kind","in":"query","required":false,"description":"Relationship family","schema":{"type":"string","enum":["municipality","country-currency"]}},{"name":"code","in":"query","required":false,"description":"Original municipality code as text","schema":{"type":"string","maxLength":200}},{"name":"sourceDate","in":"query","required":false,"description":"Original date YYYY-MM-DD","schema":{"type":"string","maxLength":200}},{"name":"targetDate","in":"query","required":false,"description":"Target date YYYY-MM-DD","schema":{"type":"string","maxLength":200}},{"name":"country","in":"query","required":false,"description":"Country name or code","schema":{"type":"string","maxLength":200}},{"name":"date","in":"query","required":false,"description":"Membership date YYYY-MM-DD","schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"description":"Default account","schema":{"type":"string","enum":["account","cash"]}},{"name":"format","in":"query","required":false,"description":"List output format; default json. Lookups require json. CSV preserves text codes; keep its linked manifest.","schema":{"type":"string","enum":["json","csv","manifest"],"default":"json"}}],"responses":{"200":{"description":"Reference list, lookup or export","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CrosswalkIndex"},{"$ref":"#/components/schemas/MunicipalityList"},{"$ref":"#/components/schemas/MunicipalityLookup"},{"$ref":"#/components/schemas/CountryCurrencyList"},{"$ref":"#/components/schemas/CountryCurrencyLookup"},{"$ref":"#/components/schemas/ReferenceManifest"}]}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid, repeated, incompatible or oversized parameters","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrosswalkError"}}}},"405":{"description":"Method not allowed (Allow header lists supported methods)","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}},"head":{"summary":"Same status and headers as GET, without a body","parameters":[{"name":"kind","in":"query","required":false,"description":"Relationship family","schema":{"type":"string","enum":["municipality","country-currency"]}},{"name":"code","in":"query","required":false,"description":"Original municipality code as text","schema":{"type":"string","maxLength":200}},{"name":"sourceDate","in":"query","required":false,"description":"Original date YYYY-MM-DD","schema":{"type":"string","maxLength":200}},{"name":"targetDate","in":"query","required":false,"description":"Target date YYYY-MM-DD","schema":{"type":"string","maxLength":200}},{"name":"country","in":"query","required":false,"description":"Country name or code","schema":{"type":"string","maxLength":200}},{"name":"date","in":"query","required":false,"description":"Membership date YYYY-MM-DD","schema":{"type":"string","maxLength":200}},{"name":"role","in":"query","required":false,"description":"Default account","schema":{"type":"string","enum":["account","cash"]}},{"name":"format","in":"query","required":false,"description":"List output format; default json. Lookups require json. CSV preserves text codes; keep its linked manifest.","schema":{"type":"string","enum":["json","csv","manifest"],"default":"json"}}],"responses":{"200":{"description":"Reference list, lookup or export","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"400":{"description":"Invalid, repeated, incompatible or oversized parameters","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"405":{"description":"Method not allowed (Allow header lists supported methods)","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}},"500":{"description":"Unexpected reference failure","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"X-Reference-Version":{"description":"Version of the reference snapshot; keep with exports.","schema":{"type":"string"}},"X-Country-Reference-Version":{"description":"Also returned by country GET/HEAD responses.","schema":{"type":"string"}},"X-Crosswalk-Reference-Version":{"description":"Also returned by crosswalk GET/HEAD responses; not exposed through CORS, use X-Reference-Version.","schema":{"type":"string"}},"Content-Disposition":{"description":"Attachment filename for CSV and manifest.","schema":{"type":"string"}},"Link":{"description":"CSV describedby link to companion manifest.","schema":{"type":"string"}},"X-Content-Type-Options":{"description":"Prevents MIME sniffing","schema":{"const":"nosniff"}},"Access-Control-Expose-Headers":{"description":"X-Reference-Version, X-Country-Reference-Version, Content-Disposition, Retry-After, Link","schema":{"type":"string"}}}}}},"options":{"summary":"Credential-free CORS preflight","responses":{"204":{"description":"Allowed methods: GET, HEAD, OPTIONS. Content-Type allowed; preflight cache 600 seconds.","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}},"Access-Control-Allow-Methods":{"description":"Allowed methods","schema":{"const":"GET, HEAD, OPTIONS"}},"Access-Control-Allow-Headers":{"description":"Allowed request headers","schema":{"const":"Content-Type"}},"Access-Control-Max-Age":{"description":"Preflight cache seconds","schema":{"const":"600"}}}},"403":{"description":"Unsupported preflight method or header","headers":{"Access-Control-Allow-Origin":{"description":"Public, credential-free CORS","schema":{"const":"*"}},"Cache-Control":{"description":"Recipes: no-store; successful references: public max-age=3600 (dates: 86400). Errors: no-store.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionError"}}}}}}}},"components":{"schemas":{"Query":{"type":"object","properties":{"provider":{"type":"string","enum":["kjarasamningar","centralbank","hagstofa","eurostat","worldbank","norway","sweden","finland","hms","arion"]},"id":{"type":"string","maxLength":2000,"minLength":1},"lang":{"type":"string","enum":["is","en"]},"selections":{"type":"object","minProperties":1,"maxProperties":100,"propertyNames":{"type":"string","maxLength":2000,"minLength":1,"not":{"enum":["__proto__","constructor","prototype"]}},"additionalProperties":{"type":"array","items":{"type":"string","maxLength":2000,"minLength":1},"maxItems":12000,"minItems":1}}},"required":["provider","id","lang","selections"],"additionalProperties":false,"description":"Workspace query shape. Before execution, selected queries must pass provider validation: safe dataset ID ≤600 characters, 1–20 dimension names ≤100 characters, unique nonempty value codes ≤100 characters, Cartesian product ≤12,000, provider-specific dimensions and metadata values. Arion is access-required and returns 422. Custom dimension names are supported. See human documentation."},"Governance":{"type":"object","properties":{"license":{"type":"string","maxLength":4000},"termsUrl":{"anyOf":[{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},{"type":"null"}]},"status":{"type":"string","enum":["reviewed","unresolved","access-required"]},"attribution":{"type":"string","maxLength":4000},"exceptions":{"type":"string","maxLength":4000},"reviewedAt":{"type":"string","maxLength":4000},"owner":{"type":"string","maxLength":4000},"nextReview":{"type":"string","maxLength":4000}},"required":["license","termsUrl","status","attribution","exceptions","reviewedAt","owner","nextReview"],"additionalProperties":false},"ReferenceTerms":{"type":"object","properties":{"license":{"type":"string","maxLength":4000},"termsUrl":{"anyOf":[{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},{"type":"null"}]},"status":{"type":"string","enum":["reviewed","unresolved","access-required"]},"attribution":{"type":"string","maxLength":4000},"exceptions":{"type":"string","maxLength":4000},"reviewedAt":{"type":"string","maxLength":4000},"owner":{"type":"string","maxLength":4000},"nextReview":{"type":"string","maxLength":4000},"notice":{"type":"string"}},"required":["license","termsUrl","status","attribution","exceptions","reviewedAt","owner","nextReview"],"additionalProperties":false},"SourceRequest":{"type":"object","properties":{"url":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"method":{"type":"string","enum":["GET","POST"]},"body":{}},"required":["url","method"],"additionalProperties":false},"Derivation":{"type":"object","properties":{"method":{"const":"annual-average"},"version":{"const":1},"sourcePeriods":{"type":"array","items":{"type":"string","maxLength":2000,"minLength":1},"maxItems":366},"qualityFlags":{"type":"array","items":{"type":"string","maxLength":4000},"maxItems":366},"complete":{"type":"boolean"},"expected":{"type":"integer","minimum":1,"maximum":366}},"required":["method","version","sourcePeriods","qualityFlags","complete","expected"],"additionalProperties":false},"Observation":{"type":"object","properties":{"timeDimension":{"type":"string","maxLength":4000},"period":{"type":"string","maxLength":2000,"minLength":1},"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"dimensions":{"type":"object","maxProperties":100,"propertyNames":{"type":"string","maxLength":2000,"minLength":1,"not":{"enum":["__proto__","constructor","prototype"]}},"additionalProperties":{"type":"string","maxLength":4000}},"codes":{"type":"object","maxProperties":100,"propertyNames":{"type":"string","maxLength":2000,"minLength":1,"not":{"enum":["__proto__","constructor","prototype"]}},"additionalProperties":{"type":"string","maxLength":4000}},"unit":{"type":"string","maxLength":4000},"status":{"type":"string","maxLength":4000},"derivation":{"$ref":"#/components/schemas/Derivation"}},"required":["period","value","dimensions","codes","unit","status"],"additionalProperties":false},"SourceResult":{"type":"object","properties":{"query":{"$ref":"#/components/schemas/Query"},"title":{"type":"string","maxLength":4000},"observations":{"type":"array","items":{"$ref":"#/components/schemas/Observation"},"maxItems":12000},"retrieved":{"type":"string","maxLength":100,"description":"A timestamp accepted by JavaScript Date.parse; ISO 8601 UTC is recommended."},"updated":{"type":"string","maxLength":4000},"sourceUrl":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"request":{"$ref":"#/components/schemas/SourceRequest"},"note":{"type":"string","maxLength":20000},"governance":{"$ref":"#/components/schemas/Governance"},"freshness":{"type":"object","properties":{"retrieved":{"anyOf":[{"type":"string","maxLength":100,"description":"A timestamp accepted by JavaScript Date.parse; ISO 8601 UTC is recommended."},{"type":"null"}]},"cache":{"type":"string","enum":["hit","miss","mixed"]},"policy":{"type":"string","maxLength":4000}},"required":["retrieved","cache","policy"],"additionalProperties":false}},"required":["query","title","observations","retrieved","sourceUrl","request","note"],"additionalProperties":false},"Provenance":{"type":"object","properties":{"sourceUrl":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"retrieved":{"type":"string","maxLength":100,"description":"A timestamp accepted by JavaScript Date.parse; ISO 8601 UTC is recommended."},"updated":{"type":"string","maxLength":4000},"request":{"$ref":"#/components/schemas/SourceRequest"},"terms":{"type":"string","maxLength":20000},"governance":{"$ref":"#/components/schemas/Governance"},"coverage":{"type":"object","properties":{"firstPeriod":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"lastPeriod":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"observations":{"type":"integer","minimum":0},"values":{"type":"integer","minimum":0}},"required":["firstPeriod","lastPeriod","observations","values"],"additionalProperties":false}},"required":["sourceUrl","retrieved","request","terms","coverage"],"additionalProperties":false},"Layer":{"type":"object","properties":{"key":{"type":"string","maxLength":200,"minLength":1},"title":{"type":"string","maxLength":4000,"minLength":1},"query":{"$ref":"#/components/schemas/Query"},"transformation":{"const":"annual-average"},"requestedYears":{"anyOf":[{"type":"array","prefixItems":[{"type":"integer","minimum":1,"maximum":9999},{"type":"integer","minimum":1,"maximum":9999}],"items":false,"minItems":2,"maxItems":2},{"type":"null"}]},"result":{"$ref":"#/components/schemas/SourceResult"},"provenance":{"$ref":"#/components/schemas/Provenance"}},"required":["key","title","query"],"additionalProperties":false},"MapDisplay":{"type":"object","properties":{"measure":{"type":"string","maxLength":400},"period":{"type":"string","maxLength":40},"view":{"type":"string","enum":["flat","globe"]},"extent":{"type":"string","enum":["world","europe","nordic"]},"classes":{"type":"string","enum":["continuous","quantile"]}},"required":["measure","period","view","extent","classes"],"additionalProperties":false},"Display":{"type":"object","properties":{"base":{"type":"string","maxLength":40},"overlay":{"type":"boolean"},"chart":{"type":"string","enum":["line","bar","table","map"]},"join":{"type":"string","enum":["separate","inner","outer"]},"map":{"$ref":"#/components/schemas/MapDisplay"}},"required":["base","overlay","chart","join"],"additionalProperties":false},"Workspace":{"type":"object","properties":{"format":{"const":"datahub.analysis"},"version":{"const":2},"kind":{"type":"string","enum":["recipe","snapshot"]},"name":{"type":"string","maxLength":160,"minLength":1},"question":{"type":"string","maxLength":10000},"createdAt":{"type":"string","maxLength":100,"description":"A timestamp accepted by JavaScript Date.parse; ISO 8601 UTC is recommended."},"savedAt":{"type":"string","maxLength":100,"description":"A timestamp accepted by JavaScript Date.parse; ISO 8601 UTC is recommended."},"layers":{"type":"array","items":{"$ref":"#/components/schemas/Layer"},"maxItems":8,"minItems":1},"display":{"$ref":"#/components/schemas/Display"},"comparison":{"anyOf":[{"type":"object","properties":{"keys":{"type":"array","items":{"type":"string","maxLength":200,"minLength":1},"maxItems":8,"minItems":1},"base":{"type":"string","maxLength":40},"overlay":{"type":"boolean"}},"required":["keys","base","overlay"],"additionalProperties":false},{"type":"null"}]}},"required":["format","version","kind","name","question","createdAt","savedAt","layers","display","comparison"],"additionalProperties":false,"allOf":[{"if":{"properties":{"kind":{"const":"recipe"}},"required":["kind"]},"then":{"properties":{"layers":{"items":{"not":{"required":["result"]}}}}}}],"description":"Strict input: unknown keys are rejected. Semantic checks: valid timestamps/calendar base; ordered requestedYears; unique layer keys; comparison keys must reference layers; nested result.query equals layer.query ignoring selection order; product of selections ≤12,000. A snapshot must contain result.observations on every selected layer (unselected layers may omit results). Those cross-field checks run in the handler, not JSON Schema."},"Country":{"type":"object","properties":{"iso2":{"type":"string"},"iso3":{"type":"string"},"numeric":{"type":"string"},"name":{"type":"string"},"nameEn":{"type":"string"},"nameIs":{"type":"string"},"regionCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"region":{"anyOf":[{"type":"string"},{"type":"null"}]},"subregionCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"subregion":{"anyOf":[{"type":"string"},{"type":"null"}]},"intermediateRegionCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"intermediateRegion":{"anyOf":[{"type":"string"},{"type":"null"}]},"continent":{"type":"string"},"leastDeveloped":{"type":"boolean"},"landlockedDeveloping":{"type":"boolean"},"smallIslandDeveloping":{"type":"boolean"}},"required":["iso2","iso3","numeric","name","nameEn","nameIs","regionCode","region","subregionCode","subregion","intermediateRegionCode","intermediateRegion","continent","leastDeveloped","landlockedDeveloping","smallIslandDeveloping"],"additionalProperties":false},"CountryRow":{"type":"object","properties":{"iso2":{"type":"string"},"iso3":{"type":"string"},"numeric":{"type":"string"},"name":{"type":"string"},"nameEn":{"type":"string"},"nameIs":{"type":"string"},"regionCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"region":{"anyOf":[{"type":"string"},{"type":"null"}]},"subregionCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"subregion":{"anyOf":[{"type":"string"},{"type":"null"}]},"intermediateRegionCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"intermediateRegion":{"anyOf":[{"type":"string"},{"type":"null"}]},"continent":{"type":"string"},"leastDeveloped":{"type":"boolean"},"landlockedDeveloping":{"type":"boolean"},"smallIslandDeveloping":{"type":"boolean"},"aliases":{"type":"array","items":{"type":"string"}}},"required":["iso2","iso3","numeric","name","nameEn","nameIs","regionCode","region","subregionCode","subregion","intermediateRegionCode","intermediateRegion","continent","leastDeveloped","landlockedDeveloping","smallIslandDeveloping","aliases"],"additionalProperties":false},"CountryMatch":{"type":"object","properties":{"input":{"type":["string","number"]},"status":{"type":"string","enum":["matched","unmatched","ambiguous","aggregate"]},"country":{"anyOf":[{"$ref":"#/components/schemas/Country"},{"type":"null"}]},"candidates":{"type":"array","items":{"type":"string"}}},"required":["input","status","country","candidates"],"additionalProperties":false},"Calendar":{"type":"object","properties":{"key":{"type":"string"},"frequency":{"type":"string","enum":["annual","quarterly","monthly","daily"]},"start":{"type":"string"},"end":{"type":"string"}},"required":["key","frequency","start","end"],"additionalProperties":false},"Point":{"type":"object","properties":{"timeDimension":{"type":"string","maxLength":4000},"period":{"type":"string","maxLength":2000,"minLength":1},"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"dimensions":{"type":"object","maxProperties":100,"propertyNames":{"type":"string","maxLength":2000,"minLength":1,"not":{"enum":["__proto__","constructor","prototype"]}},"additionalProperties":{"type":"string","maxLength":4000}},"codes":{"type":"object","maxProperties":100,"propertyNames":{"type":"string","maxLength":2000,"minLength":1,"not":{"enum":["__proto__","constructor","prototype"]}},"additionalProperties":{"type":"string","maxLength":4000}},"unit":{"type":"string","maxLength":4000},"status":{"type":"string","maxLength":4000},"derivation":{"$ref":"#/components/schemas/Derivation"},"originalPeriod":{"type":"string"},"calendar":{"$ref":"#/components/schemas/Calendar"},"geography":{"anyOf":[{"type":"object","properties":{"input":{"type":["string","number"]},"status":{"type":"string","enum":["matched","unmatched","ambiguous","aggregate"]},"country":{"anyOf":[{"$ref":"#/components/schemas/Country"},{"type":"null"}]},"candidates":{"type":"array","items":{"type":"string"}},"dimension":{"type":"string"},"sourceCode":{"type":"string"},"sourceName":{"type":"string"},"referenceVersion":{"type":"string"}},"required":["input","status","country","candidates","dimension","sourceCode","sourceName","referenceVersion"],"additionalProperties":false},{"type":"null"}]},"sourceValue":{"anyOf":[{"type":"number"},{"type":"null"}]},"sourceUnit":{"type":"string"}},"required":["period","value","dimensions","codes","unit","status","originalPeriod","calendar","geography"],"additionalProperties":false},"Series":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"unit":{"type":"string"},"layerKey":{"type":"string"},"points":{"type":"array","items":{"$ref":"#/components/schemas/Point"},"maxItems":12000}},"required":["id","label","unit","layerKey","points"],"additionalProperties":false},"ManifestSource":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"},"query":{"$ref":"#/components/schemas/Query"},"transformation":{"type":"string","enum":["none","annual-average"]},"requestedYears":{"anyOf":[{"type":"array","prefixItems":[{"type":"integer","minimum":1,"maximum":9999},{"type":"integer","minimum":1,"maximum":9999}],"items":false,"minItems":2,"maxItems":2},{"type":"null"}]},"sourceUrl":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"retrieved":{"type":"string","maxLength":100,"description":"A timestamp accepted by JavaScript Date.parse; ISO 8601 UTC is recommended."},"updated":{"type":"string"},"note":{"type":"string"},"governance":{"$ref":"#/components/schemas/Governance"}},"required":["key","title","query","transformation","requestedYears","sourceUrl","retrieved","note"],"additionalProperties":false},"RecipeResponse":{"type":"object","properties":{"version":{"const":1},"registryVersion":{"type":"string"},"mode":{"type":"string","enum":["recipe","snapshot"]},"question":{"type":"string"},"name":{"type":"string"},"rows":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"series":{"type":"string"},"period":{"type":"string"},"value":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["series","period","value"],"additionalProperties":false},{"type":"object","properties":{"period":{"type":"string"},"values":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"}]}}},"required":["period","values"],"additionalProperties":false}]},"maxItems":96000},"series":{"type":"array","items":{"$ref":"#/components/schemas/Series"}},"manifest":{"type":"object","properties":{"timeNormalization":{"const":"calendar-v1"},"base":{"type":"string"},"join":{"type":"string","enum":["separate","inner","outer"]},"overlay":{"type":"boolean"},"chart":{"type":"string","enum":["line","bar","table","map"]},"map":{"$ref":"#/components/schemas/MapDisplay"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/ManifestSource"},"maxItems":8}},"required":["timeNormalization","base","join","sources"],"additionalProperties":false}},"required":["version","registryVersion","mode","question","name","rows","series","manifest"],"additionalProperties":false},"RecipeError":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_QUERY","QUERY_TOO_LARGE","UNSUPPORTED_PROVIDER","PROVIDER_THROTTLED","PROVIDER_BUSY","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","RESULT_TOO_LARGE","INVALID_RESPONSE","DATASET_NOT_FOUND","UPSTREAM_QUERY_REJECTED","UPSTREAM_ACCESS_DENIED"]},"requestId":{"type":"string"},"retryAfter":{"type":"number","exclusiveMinimum":0}},"required":["error","code","requestId"],"additionalProperties":false},"DimensionError":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false},"CrosswalkError":{"type":"object","properties":{"error":{"type":"string"},"code":{"const":"INVALID_QUERY"}},"required":["error","code"],"additionalProperties":false},"Reference":{"type":"object","properties":{"version":{"type":"string"},"terms":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ReferenceTerms"}},"source":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"namesSource":{"type":"string"},"classification":{"type":"string"},"published":{"type":"string"},"description":{"type":"string"},"calendar":{"type":"string"},"timeZone":{"type":"string"},"rangeRule":{"type":"string"},"limit":{"type":"integer","minimum":0},"status":{"type":"string"},"coverageFrom":{"type":"string"},"coverageToExclusive":{"type":"string"},"coverage":{"type":"string"},"validity":{"type":"string"},"allocation":{"type":"string"},"sources":{"type":"array","items":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"}},"countryReference":{"$ref":"#/components/schemas/Reference"}},"required":["version","terms"],"additionalProperties":true,"description":"Versioned reference metadata. Fields depend on the reference family; terms is a named dictionary of attribution and reuse policies. Additional metadata may be introduced compatibly."},"ReferenceManifest":{"type":"object","properties":{"format":{"const":"datahub-reference-manifest"},"version":{"const":1},"generatedAt":{"type":"string","format":"date-time"},"reference":{"$ref":"#/components/schemas/Reference"},"rowCount":{"type":"integer","minimum":0},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"csvUrl":{"type":"string"},"usage":{"type":"string"}},"required":["format","version","generatedAt","reference","rowCount","parameters","csvUrl","usage"],"additionalProperties":false},"CountryList":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"count":{"type":"integer","minimum":0},"countries":{"type":"array","items":{"$ref":"#/components/schemas/CountryRow"}}},"required":["reference","count","countries"],"additionalProperties":false},"CountryLookup":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"input":{"type":["string","number"]},"status":{"type":"string","enum":["matched","unmatched","ambiguous","aggregate"]},"country":{"anyOf":[{"$ref":"#/components/schemas/Country"},{"type":"null"}]},"candidates":{"type":"array","items":{"type":"string"}}},"required":["reference","input","status","country","candidates"],"additionalProperties":false},"CountryBatchRequest":{"type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"string","maxLength":200},{"type":"integer","minimum":0,"maximum":999}]},"maxItems":1000,"minItems":1},"joinOn":{"anyOf":[{"type":"string","enum":["auto","iso2","iso3","numeric","name"]},{"type":"null"}]}},"required":["values"],"additionalProperties":false},"CountryBatchResponse":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"results":{"type":"array","items":{"$ref":"#/components/schemas/CountryMatch"},"maxItems":1000}},"required":["reference","results"],"additionalProperties":false},"Currency":{"type":"object","properties":{"code":{"type":"string"},"numeric":{"type":"string"},"name":{"type":"string"},"minorUnit":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"entities":{"type":"array","items":{"type":"string"}}},"required":["code","numeric","name","minorUnit","entities"],"additionalProperties":false},"CurrencyList":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"count":{"type":"integer","minimum":0},"currencies":{"type":"array","items":{"$ref":"#/components/schemas/Currency"}}},"required":["reference","count","currencies"],"additionalProperties":false},"CurrencyLookup":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"input":{"type":"string"},"status":{"type":"string","enum":["matched","unmatched","ambiguous"]},"currency":{"anyOf":[{"$ref":"#/components/schemas/Currency"},{"type":"null"}]},"candidates":{"type":"array","items":{"type":"string"}}},"required":["reference","input","status","currency","candidates"],"additionalProperties":false},"DateRow":{"type":"object","properties":{"key":{"type":"string"},"frequency":{"type":"string","enum":["annual","quarterly","monthly","daily"]},"start":{"type":"string"},"end":{"type":"string"},"year":{"type":"integer","minimum":0},"quarter":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"month":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"day":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"dateKey":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"dayOfYear":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"isoWeek":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"isoWeekYear":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"weekday":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"weekdayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"isWeekend":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["key","frequency","start","end","year","quarter","month","day","dateKey","dayOfYear","isoWeek","isoWeekYear","weekday","weekdayName","isWeekend"],"additionalProperties":false},"DateList":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"count":{"type":"integer","minimum":0},"dates":{"type":"array","items":{"$ref":"#/components/schemas/DateRow"},"maxItems":12000}},"required":["reference","count","dates"],"additionalProperties":false},"DateLookup":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"originalPeriod":{"type":"string"},"period":{"$ref":"#/components/schemas/Calendar"}},"required":["reference","originalPeriod","period"],"additionalProperties":false},"CrosswalkIndex":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"datasets":{"type":"array","items":{"type":"string","enum":["municipality","country-currency"]}}},"required":["reference","datasets"],"additionalProperties":false},"MunicipalityList":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"entities":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"validFrom":{"anyOf":[{"type":"string"},{"type":"null"}]},"validTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"}},"required":["code","name","validFrom","validTo","source"],"additionalProperties":false}},"relationships":{"type":"array","items":{"type":"object","properties":{"sourceCode":{"type":"string"},"targetCode":{"type":"string"},"validFrom":{"type":"string"},"validTo":{"type":"null"},"relationship":{"type":"string"},"allocationWeight":{"type":"null"},"source":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"referenceVersion":{"type":"string"},"coverageFrom":{"type":"string"},"coverageToExclusive":{"type":"string"}},"required":["sourceCode","targetCode","validFrom","validTo","relationship","allocationWeight","source","referenceVersion","coverageFrom","coverageToExclusive"],"additionalProperties":false}}},"required":["reference","entities","relationships"],"additionalProperties":false},"MunicipalityLookup":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"input":{"type":"string"},"sourceDate":{"type":"string"},"targetDate":{"type":"string"},"automaticValueAllocation":{"const":false},"allocationWeights":{"type":"null"},"relationship":{"type":"string"},"changes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"effectiveFrom":{"type":"string"},"from":{"type":"array","items":{"type":"string"}},"to":{"type":"array","items":{"type":"string"}},"source":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"}},"required":["id","effectiveFrom","from","to","source"],"additionalProperties":false}},"targets":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"validFrom":{"anyOf":[{"type":"string"},{"type":"null"}]},"validTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"}},"required":["code","name","validFrom","validTo","source"],"additionalProperties":false}},"status":{"type":"string","enum":["out-of-coverage","unmatched","requires-allocation","matched"]},"reason":{"type":"string"}},"required":["reference","input","sourceDate","targetDate","automaticValueAllocation","allocationWeights","relationship","changes","targets","status","reason"],"additionalProperties":false},"CountryCurrencyList":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"relationships":{"type":"array","items":{"type":"object","properties":{"countryIso2":{"type":"string"},"countryIso3":{"type":"string"},"countryNumeric":{"type":"string"},"currency":{"type":"string"},"role":{"type":"string","enum":["account","cash"]},"validFrom":{"anyOf":[{"type":"string"},{"type":"null"}]},"validTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"},"referenceVersion":{"type":"string"},"coverageFrom":{"type":"string"},"coverageToExclusive":{"type":"string"}},"required":["countryIso2","countryIso3","countryNumeric","currency","role","validFrom","validTo","source","referenceVersion","coverageFrom","coverageToExclusive"],"additionalProperties":false}}},"required":["reference","relationships"],"additionalProperties":false},"CountryCurrencyLookup":{"type":"object","properties":{"reference":{"$ref":"#/components/schemas/Reference"},"input":{"type":"string"},"date":{"type":"string"},"role":{"type":"string","enum":["account","cash"]},"country":{"anyOf":[{"$ref":"#/components/schemas/Country"},{"type":"null"}]},"currencies":{"type":"array","items":{"type":"object","properties":{"countryIso2":{"type":"string"},"countryIso3":{"type":"string"},"countryNumeric":{"type":"string"},"currency":{"type":"string"},"role":{"type":"string","enum":["account","cash"]},"validFrom":{"anyOf":[{"type":"string"},{"type":"null"}]},"validTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","maxLength":12000,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]?://"}},"required":["countryIso2","countryIso3","countryNumeric","currency","role","validFrom","validTo","source"],"additionalProperties":false}},"exchangeRatesIncluded":{"const":false},"status":{"type":"string","enum":["matched","unmatched","out-of-coverage"]},"reason":{"type":"string"}},"required":["reference","input","date","role","country","currencies","exchangeRatesIncluded","status","reason"],"additionalProperties":false}}}}