{"openapi":"3.1.0","info":{"title":"Financial Market Daily Data Platform API","description":"Deterministic, read-only financial-market & macro data with full lineage, revisions, quality and citations. No LLM dependency.","version":"1.0.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/series":{"get":{"summary":"List Series","operationId":"list_series_api_v1_series_get","parameters":[{"name":"asset_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Class"}},{"name":"availability","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"}},{"name":"connector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connector"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/series/search":{"get":{"summary":"Search Series","operationId":"search_series_api_v1_series_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/series/{code}":{"get":{"summary":"Get Series","operationId":"get_series_api_v1_series__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/observations":{"get":{"summary":"Observations","operationId":"observations_api_v1_observations_get","parameters":[{"name":"series","in":"query","required":true,"schema":{"type":"string","title":"Series"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To"}},{"name":"trusted","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Trusted"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/observations/latest":{"get":{"summary":"Latest Observation","operationId":"latest_observation_api_v1_observations_latest_get","parameters":[{"name":"series","in":"query","required":true,"schema":{"type":"string","title":"Series"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/history":{"get":{"summary":"History","description":"Resolve (instrument, metric, tenor) -> series, return history (spec S19 example).","operationId":"history_api_v1_history_get","parameters":[{"name":"instrument","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instrument"}},{"name":"metric","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric"}},{"name":"tenor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenor"}},{"name":"series","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Series"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To"}},{"name":"trusted","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Trusted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/asof":{"get":{"summary":"As Of","description":"As-of query (spec S3): the dataset as it stood on `as_of`, look-ahead-safe.\n\nRule: for each trading_date <= as_of, take the latest revision that was\nalready ingested by as_of; if none was (e.g. data backfilled later), fall\nback to the ORIGINAL release (rev 0). This never leaks a revision published\nafter as_of — the actual look-ahead hazard the spec targets.","operationId":"as_of_api_v1_asof_get","parameters":[{"name":"series","in":"query","required":true,"schema":{"type":"string","title":"Series"}},{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date","title":"As Of"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/curves":{"get":{"summary":"Curves","description":"Yield curve snapshot across tenors + stored curve spreads (spec S14/S15.C).","operationId":"curves_api_v1_curves_get","parameters":[{"name":"curve","in":"query","required":false,"schema":{"type":"string","default":"UST","title":"Curve"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/changes":{"get":{"summary":"Changes","description":"Latest daily snapshot per series ('What Changed', spec S16).\n\nEach series is shown at ITS OWN latest snapshot — series print on different\ncalendars (a weekend-constant policy rate vs a Friday-close yield), so a single\nglobal max date would silently drop the ones that didn't print today.","operationId":"changes_api_v1_changes_get","parameters":[{"name":"asset_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Class"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/{code}":{"get":{"summary":"Analytics","description":"All stored derived metrics for a series (reproducible; spec S13/S23).","operationId":"analytics_api_v1_analytics__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/macro/indicators":{"get":{"summary":"Macro Indicators","operationId":"macro_indicators_api_v1_macro_indicators_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/macro/releases":{"get":{"summary":"Macro Releases","operationId":"macro_releases_api_v1_macro_releases_get","parameters":[{"name":"indicator","in":"query","required":true,"schema":{"type":"string","title":"Indicator"}},{"name":"latest_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Latest Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/revisions":{"get":{"summary":"Revisions","operationId":"revisions_api_v1_revisions_get","parameters":[{"name":"target","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/data-quality":{"get":{"summary":"Data Quality","operationId":"data_quality_api_v1_data_quality_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"series","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Series"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sources":{"get":{"summary":"Sources","operationId":"sources_api_v1_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/snapshot/{date}":{"get":{"summary":"Snapshot","operationId":"snapshot_api_v1_snapshot__date__get","parameters":[{"name":"date","in":"path","required":true,"schema":{"type":"string","format":"date","title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/freshness":{"get":{"summary":"Freshness All","operationId":"freshness_all_api_v1_freshness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/citation/{citation_id}":{"get":{"summary":"Citation","operationId":"citation_api_v1_citation__citation_id__get","parameters":[{"name":"citation_id","in":"path","required":true,"schema":{"type":"string","title":"Citation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dictionary":{"get":{"summary":"Dictionary","description":"Machine-readable data dictionary (spec S22).","operationId":"dictionary_api_v1_dictionary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/export":{"get":{"summary":"Export","operationId":"export_api_v1_export_get","parameters":[{"name":"series","in":"query","required":true,"schema":{"type":"string","title":"Series"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(csv|json|parquet)$","default":"csv","title":"Format"}},{"name":"trusted","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Trusted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/events":{"get":{"summary":"Events","operationId":"events_api_v1_events_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ingest/daily":{"post":{"summary":"Admin Daily","operationId":"admin_daily_api_v1_admin_ingest_daily_post","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Days"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"type":"string","title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}