{"openapi":"3.1.0","info":{"title":"Flynnstone Public Research API","version":"1.1.0","summary":"Authless, read-only access to indexed Flynnstone research.","description":"The public v1 API needs no API key and exposes only reviewed, indexed research. No separate sandbox is required. Incompatible changes use a new versioned URL."},"externalDocs":{"description":"Flynnstone developer quickstart and API lifecycle policy","url":"https://flynnstone.ai/developers"},"servers":[{"url":"https://flynnstone.ai/api/v1","description":"Public production API; safe for read-only integration testing."}],"security":[],"tags":[{"name":"Discovery","description":"API capability and endpoint discovery."},{"name":"Research","description":"Indexed research articles and series."},{"name":"Sources","description":"Approved public source catalogs."}],"paths":{"/":{"get":{"tags":["Discovery"],"operationId":"getApiDiscovery","summary":"Discover the public API","description":"Returns the current API version, authentication policy, documentation links, and reachable endpoint URLs.","parameters":[],"responses":{"200":{"description":"Public API discovery document.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discovery"}}}},"405":{"description":"The method is not available because the public API is read-only.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"406":{"description":"No supported response representation is acceptable.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"The request quota is exhausted for the current window.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}},"Retry-After":{"description":"Delay in seconds before another request should be attempted.","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"The server could not generate the requested public representation.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/articles":{"get":{"tags":["Research"],"operationId":"listArticles","summary":"List indexed articles","description":"Returns a filtered, cursor-paginated catalog drawn only from the indexed article projection.","parameters":[{"name":"topic","in":"query","required":false,"description":"Exact normalized topic.","schema":{"type":"string","minLength":1}},{"name":"article_type","in":"query","required":false,"description":"Exact article genre.","schema":{"type":"string","minLength":1}},{"name":"published_after","in":"query","required":false,"description":"Return articles published after this date.","schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"description":"Page size.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor returned by the preceding page.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Indexed article catalog.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleCatalog"}}}},"400":{"description":"A filter, page size, date, or cursor is invalid.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"The method is not available because the public API is read-only.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"406":{"description":"No supported response representation is acceptable.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"The request quota is exhausted for the current window.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}},"Retry-After":{"description":"Delay in seconds before another request should be attempted.","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"The server could not generate the requested public representation.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/articles/{slug}":{"get":{"tags":["Research"],"operationId":"getArticle","summary":"Get one indexed article","description":"Returns the reviewed public projection for one exact article slug.","parameters":[{"name":"slug","in":"path","required":true,"description":"Canonical article slug.","schema":{"type":"string","pattern":"^[a-z0-9-]+$"}}],"responses":{"200":{"description":"One indexed article.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleDocument"}}}},"404":{"description":"The article is missing or has not completed the index gate.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"The method is not available because the public API is read-only.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"406":{"description":"No supported response representation is acceptable.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"The request quota is exhausted for the current window.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}},"Retry-After":{"description":"Delay in seconds before another request should be attempted.","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"The server could not generate the requested public representation.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/index/latest":{"get":{"tags":["Research"],"operationId":"getLatestIndex","summary":"Get the latest economics index","description":"Returns the latest indexed issue in the Butcher Economics Index series.","parameters":[],"responses":{"200":{"description":"Latest indexed issue.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestIndex"}}}},"405":{"description":"The method is not available because the public API is read-only.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"406":{"description":"No supported response representation is acceptable.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"The request quota is exhausted for the current window.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}},"Retry-After":{"description":"Delay in seconds before another request should be attempted.","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"The server could not generate the requested public representation.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/sources":{"get":{"tags":["Sources"],"operationId":"listSources","summary":"List public source catalogs","description":"Returns the approved public source inventory used by Flynnstone research.","parameters":[],"responses":{"200":{"description":"Public source catalog.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCatalog"}}}},"405":{"description":"The method is not available because the public API is read-only.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"406":{"description":"No supported response representation is acceptable.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"The request quota is exhausted for the current window.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}},"Retry-After":{"description":"Delay in seconds before another request should be attempted.","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"The server could not generate the requested public representation.","headers":{"RateLimit-Policy":{"description":"Quota policy using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";q=30;w=60"}},"RateLimit":{"description":"Current quota state using draft-ietf-httpapi-ratelimit-headers-11 structured-field syntax.","schema":{"type":"string","example":"\"public\";r=99;t=60"}},"Link":{"description":"Link to the stable versioning and deprecation policy.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}}},"components":{"schemas":{"ProblemDetails":{"type":"object","additionalProperties":false,"description":"RFC 9457 problem detail with stable Flynnstone recovery fields.","required":["type","title","status","detail","instance","code","resolution"],"properties":{"type":{"type":"string","format":"uri-reference"},"title":{"type":"string"},"status":{"type":"integer","minimum":400,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string","format":"uri-reference"},"code":{"type":"string","description":"Stable Flynnstone error code."},"resolution":{"type":"string","description":"A direct recovery hint."}}},"Article":{"type":"object","additionalProperties":false,"required":["id","slug","canonical_url","title","summary","body","body_url","article_type","topics","published","modified","disclosure","claims","sources"],"properties":{"id":{"type":"string","description":"Stable URN for the article."},"slug":{"type":"string","pattern":"^[a-z0-9-]+$"},"canonical_url":{"type":"string","format":"uri"},"title":{"type":"string"},"summary":{"type":"string"},"body":{"type":"string","description":"Reviewed article body in Markdown."},"body_url":{"type":"string","format":"uri"},"article_type":{"type":"string"},"topics":{"type":"array","maxItems":50,"items":{"type":"string"}},"published":{"type":"string","format":"date"},"modified":{"type":"string","format":"date"},"disclosure":{"type":["string","null"]},"claims":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["statement","value","source_name","source_url","accessed_at","locator"],"properties":{"statement":{"type":"string"},"value":{"type":["string","number"]},"source_name":{"type":"string"},"source_url":{"type":"string","format":"uri"},"accessed_at":{"type":"string","format":"date"},"locator":{"type":"string"}}}},"sources":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["name","url"],"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"}}}},"visuals":{"type":"array","maxItems":3,"items":{"$ref":"#/components/schemas/ArticleVisual"},"description":"Added in 1.1.0. The figures the article page draws (charts, key figures, process steps), each with its data rows and cited sources. Empty when the article has none. The Markdown representation of the article carries the same figures as tables."}}},"ArticleVisual":{"type":"object","additionalProperties":false,"required":["id","type","kicker","title","summary","caption","unit","x_axis","y_axis","remainder_label","claim_indices","items","sources"],"properties":{"id":{"type":"string","pattern":"^[a-z0-9-]+$"},"type":{"type":"string","enum":["bar","delta","metrics","share","flow","timeline","matrix","waterfall"],"description":"New figure types may be added within v1; clients must tolerate an unknown type."},"kicker":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"caption":{"type":"string","description":"Scope and comparability limits for the figure."},"unit":{"type":["string","null"]},"x_axis":{"type":["string","null"]},"y_axis":{"type":["string","null"]},"remainder_label":{"type":["string","null"],"description":"Share figures only: the unlabeled remainder, never given a derived percentage."},"claim_indices":{"type":"array","maxItems":8,"items":{"type":"integer","minimum":0},"description":"Context claims for flow and matrix figures."},"items":{"type":"array","maxItems":8,"items":{"$ref":"#/components/schemas/ArticleVisualItem"}},"sources":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["name","url"],"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"}}}}}},"ArticleVisualItem":{"type":"object","additionalProperties":false,"required":["label","display","value","note","claim_index","fx_conversion_id","source_urls","direction","role","period","description","x","y"],"properties":{"label":{"type":"string"},"display":{"type":["string","null"],"description":"The value exactly as the page displays it, unit words included."},"value":{"type":["number","null"],"description":"The numeric magnitude that sets the drawn geometry; equal to the displayed number."},"note":{"type":["string","null"]},"claim_index":{"type":["integer","null"],"minimum":0,"description":"Zero-based index into the article claims array."},"fx_conversion_id":{"type":["string","null"],"description":"Set when the value is a sourced currency conversion; its amount and rate claims are in source_urls."},"source_urls":{"type":"array","maxItems":10,"items":{"type":"string","format":"uri"}},"direction":{"type":["string","null"],"enum":["up","down","flat",null],"description":"Delta figures only."},"role":{"type":["string","null"],"enum":["base","add","subtract","total",null],"description":"Waterfall figures only."},"period":{"type":["string","null"],"description":"Timeline figures only."},"description":{"type":["string","null"],"description":"Flow step or timeline event text."},"x":{"type":["string","null"],"enum":["low","high",null],"description":"Matrix figures only: position on x_axis."},"y":{"type":["string","null"],"enum":["low","high",null],"description":"Matrix figures only: position on y_axis."}}},"Source":{"type":"object","additionalProperties":false,"required":["id","name","url","cadence"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"cadence":{"type":"string"}}},"Discovery":{"type":"object","additionalProperties":false,"required":["version","authentication","sandbox","documentation","agent_access","deprecation_policy","openapi","endpoints"],"properties":{"version":{"type":"string","const":"v1"},"authentication":{"type":"object","additionalProperties":false,"required":["required","api_key"],"properties":{"required":{"type":"boolean","const":false},"api_key":{"type":"boolean","const":false}}},"sandbox":{"type":"object","additionalProperties":false,"required":["required","reason"],"properties":{"required":{"type":"boolean","const":false},"reason":{"type":"string"}}},"documentation":{"type":"string","format":"uri"},"agent_access":{"type":"string","format":"uri"},"deprecation_policy":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"endpoints":{"type":"object","additionalProperties":false,"required":["articles","latest_index","sources"],"properties":{"articles":{"type":"string","format":"uri"},"latest_index":{"type":"string","format":"uri"},"sources":{"type":"string","format":"uri"}}}}},"ArticleCatalog":{"type":"object","additionalProperties":false,"required":["version","items","next_cursor","total"],"properties":{"version":{"type":"string","const":"v1"},"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Article"}},"next_cursor":{"type":["string","null"]},"total":{"type":"integer","minimum":0}}},"ArticleDocument":{"type":"object","additionalProperties":false,"required":["version","article"],"properties":{"version":{"type":"string","const":"v1"},"article":{"$ref":"#/components/schemas/Article"}}},"LatestIndex":{"type":"object","additionalProperties":false,"required":["version","series","issue"],"properties":{"version":{"type":"string","const":"v1"},"series":{"type":"object","additionalProperties":false,"required":["id","name","cadence"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"cadence":{"type":"string"}}},"issue":{"oneOf":[{"$ref":"#/components/schemas/Article"},{"type":"null"}],"description":"Latest indexed issue, or null before the first issue completes review."}}},"SourceCatalog":{"type":"object","additionalProperties":false,"required":["version","items","total"],"properties":{"version":{"type":"string","const":"v1"},"items":{"type":"array","maxItems":500,"items":{"$ref":"#/components/schemas/Source"}},"total":{"type":"integer","minimum":0}}}}},"x-versioning-policy":{"current":"v1","breakingChanges":"A breaking change requires a new URL version.","noticeDays":180,"deprecationHeaders":["Deprecation","Sunset","Link"]},"x-rate-limit-specification":"draft-ietf-httpapi-ratelimit-headers-11"}
