{"openapi":"3.1.0","info":{"title":"Foresight API","version":"1.0.0","description":"OpenAPI document for the live v1 read API surface in this tree. Catalog routes are anonymous; observations and ping require bearer API keys."},"servers":[{"url":"https://api.creativeforesight.io","description":"Production"}],"security":[],"tags":[{"name":"Catalog"},{"name":"Observations"},{"name":"Insights"},{"name":"Signals"},{"name":"Diagnostics"}],"components":{"securitySchemes":{"ApiKeyBearer":{"type":"http","scheme":"bearer","bearerFormat":"cf_live_ or cf_test_ API key"}},"headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}}},"schemas":{"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false},"Source":{"type":"object","required":["slug","name","provider","category","indicator_count","docs_url"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"provider":{"type":["string","null"]},"category":{"type":["string","null"]},"indicator_count":{"type":"integer","minimum":0},"docs_url":{"type":["string","null"],"format":"uri"}},"additionalProperties":false},"Indicator":{"type":"object","required":["id","code","name","description","source","category","subcategory","unit","frequency","is_active"],"properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"source":{"type":["string","null"]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"unit":{"type":["string","null"]},"frequency":{"type":["string","null"]},"is_active":{"type":"boolean"}},"additionalProperties":false},"IndicatorDetail":{"type":"object","required":["id","code","name","description","source","category","subcategory","unit","frequency","default_region","available_regions","date_range"],"properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"source":{"oneOf":[{"type":"object","required":["slug","name"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},{"type":"null"}]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"unit":{"type":["string","null"]},"frequency":{"type":["string","null"]},"default_region":{"oneOf":[{"type":"object","required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},{"type":"null"}]},"available_regions":{"type":"array","items":{"type":"string"}},"date_range":{"type":"object","required":["start","end"],"properties":{"start":{"type":["string","null"],"format":"date"},"end":{"type":["string","null"],"format":"date"}},"additionalProperties":false}},"additionalProperties":false},"Region":{"type":"object","required":["code","type","name","slug","parent_code","fips_state","fips_county"],"properties":{"code":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"parent_code":{"type":["string","null"]},"fips_state":{"type":["string","null"]},"fips_county":{"type":["string","null"]}},"additionalProperties":false},"Observation":{"type":"object","required":["date","value","indicator","region","unit","source","source_updated_at","is_preliminary","revision"],"properties":{"date":{"type":"string","format":"date"},"value":{"type":["number","null"]},"indicator":{"type":"string"},"region":{"type":"string"},"unit":{"type":["string","null"]},"source":{"type":["string","null"]},"source_updated_at":{"type":["string","null"],"format":"date-time"},"is_preliminary":{"type":"boolean"},"revision":{"type":"integer"}},"additionalProperties":false},"LatestObservation":{"type":"object","required":["indicator","region","period_start","period_end","period_type","value","revision","is_preliminary","source_updated_at","unit"],"properties":{"indicator":{"type":"string"},"region":{"type":"string"},"period_start":{"type":"string","format":"date"},"period_end":{"type":["string","null"],"format":"date"},"period_type":{"type":["string","null"]},"value":{"type":"number"},"revision":{"type":"integer"},"is_preliminary":{"type":"boolean"},"source_updated_at":{"type":["string","null"],"format":"date-time"},"unit":{"type":["string","null"]}},"additionalProperties":false},"InsightFact":{"type":"object","required":["kind","params","humanTemplate","salience"],"properties":{"kind":{"type":"string","enum":["trend","latest_delta","watermark_high_distance","watermark_low_distance","longest_run","peer_rank"]},"params":{"type":"object","additionalProperties":true},"humanTemplate":{"type":"string"},"salience":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false},"InsightSignal":{"type":"object","required":["id","indicator","region","kind","salience","summary","observed_at"],"properties":{"id":{"type":"string"},"indicator":{"type":"string"},"region":{"type":"string"},"kind":{"type":"string"},"salience":{"type":"number","minimum":0,"maximum":1},"summary":{"type":"string"},"observed_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","additionalProperties":true}},"additionalProperties":false},"Signal":{"type":"object","required":["id","indicator","region","type","strength","direction","valid_from","valid_to","detected_at","last_seen_at","evidence","vocabulary"],"properties":{"id":{"type":"string","format":"uuid"},"indicator":{"type":"object","required":["code","name","category","unit","frequency","source"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"category":{"type":["string","null"]},"unit":{"type":["string","null"]},"frequency":{"type":["string","null"]},"source":{"type":"object","required":["slug","name"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false},"region":{"type":"object","required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},"type":{"type":"string","enum":["acceleration","extreme","trend_break"]},"strength":{"type":"string","enum":["weak","neutral","strong"]},"direction":{"type":["string","null"]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"type":["string","null"],"format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"last_seen_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","additionalProperties":true},"vocabulary":{"type":"object","required":["glyph","label"],"properties":{"glyph":{"type":"string"},"label":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"responses":{"Unauthorized":{"description":"The request did not include a valid bearer API key.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"RateLimited":{"description":"The API key exceeded its one-minute request limit.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"InvalidParameter":{"description":"A query parameter was missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}},"paths":{"/v1/sources":{"get":{"tags":["Catalog"],"summary":"List data sources","security":[],"parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Sources catalog.","headers":{"Cache-Control":{"description":"Public CDN cache policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["slug","name","provider","category","indicator_count","docs_url"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"provider":{"type":["string","null"]},"category":{"type":["string","null"]},"indicator_count":{"type":"integer","minimum":0},"docs_url":{"type":["string","null"],"format":"uri"}},"additionalProperties":false}}},"additionalProperties":false}}}},"500":{"description":"The sources catalog could not be loaded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/regions":{"get":{"tags":["Catalog"],"summary":"List regions","security":[],"parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"parent","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Regions catalog.","headers":{"Cache-Control":{"description":"Public CDN cache policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["code","type","name","slug","parent_code","fips_state","fips_county"],"properties":{"code":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"parent_code":{"type":["string","null"]},"fips_state":{"type":["string","null"]},"fips_county":{"type":["string","null"]}},"additionalProperties":false}}},"additionalProperties":false}}}},"500":{"description":"The regions catalog could not be loaded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/indicators":{"get":{"tags":["Catalog"],"summary":"List indicators","security":[],"parameters":[{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"frequency","in":"query","required":false,"schema":{"type":"string"}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Indicator catalog.","headers":{"Cache-Control":{"description":"Public CDN cache policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","required":["id","code","name","description","source","category","subcategory","unit","frequency","is_active"],"properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"source":{"type":["string","null"]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"unit":{"type":["string","null"]},"frequency":{"type":["string","null"]},"is_active":{"type":"boolean"}},"additionalProperties":false}},"meta":{"type":"object","required":["total","limit","offset"],"properties":{"total":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":0,"maximum":100},"offset":{"type":"integer","minimum":0}},"additionalProperties":false}},"additionalProperties":false}}}},"400":{"description":"A query parameter was missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"500":{"description":"The indicator catalog could not be loaded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/indicators/{code}":{"get":{"tags":["Catalog"],"summary":"Get indicator detail","security":[],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}},{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Indicator detail with available regions and date range.","headers":{"Cache-Control":{"description":"Public CDN cache policy.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["id","code","name","description","source","category","subcategory","unit","frequency","default_region","available_regions","date_range"],"properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"source":{"oneOf":[{"type":"object","required":["slug","name"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},{"type":"null"}]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"unit":{"type":["string","null"]},"frequency":{"type":["string","null"]},"default_region":{"oneOf":[{"type":"object","required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},{"type":"null"}]},"available_regions":{"type":"array","items":{"type":"string"}},"date_range":{"type":"object","required":["start","end"],"properties":{"start":{"type":["string","null"],"format":"date"},"end":{"type":["string","null"],"format":"date"}},"additionalProperties":false}},"additionalProperties":false},"meta":{"type":"object","required":["ambiguous_with"],"properties":{"ambiguous_with":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}},"additionalProperties":false}}}},"400":{"description":"A query parameter was missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"404":{"description":"The requested indicator was not found.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"500":{"description":"Indicator detail or availability could not be loaded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/observations":{"get":{"tags":["Observations"],"summary":"List observations","security":[{"ApiKeyBearer":[]}],"parameters":[{"name":"indicator","in":"query","required":true,"schema":{"type":"string"}},{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"region","in":"query","required":false,"schema":{"type":"string"}},{"name":"start_date","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"end_date","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"include_revisions","in":"query","required":false,"schema":{"type":"boolean","default":false}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":1000,"default":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0}},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"Observation rows matching the query.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","required":["date","value","indicator","region","unit","source","source_updated_at","is_preliminary","revision"],"properties":{"date":{"type":"string","format":"date"},"value":{"type":["number","null"]},"indicator":{"type":"string"},"region":{"type":"string"},"unit":{"type":["string","null"]},"source":{"type":["string","null"]},"source_updated_at":{"type":["string","null"],"format":"date-time"},"is_preliminary":{"type":"boolean"},"revision":{"type":"integer"}},"additionalProperties":false}},"meta":{"type":"object","required":["indicator","region","unit","total","limit","offset"],"properties":{"indicator":{"type":"string"},"region":{"type":["string","null"]},"unit":{"type":["string","null"]},"total":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":0,"maximum":1000},"offset":{"type":"integer","minimum":0}},"additionalProperties":false}},"additionalProperties":false}}}},"400":{"description":"A query parameter was missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"401":{"description":"The request did not include a valid bearer API key.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"404":{"description":"The requested indicator or region resource was not found.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"429":{"description":"The API key exceeded its one-minute request limit.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"500":{"description":"Observation data could not be loaded.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/observations/latest":{"get":{"tags":["Observations"],"summary":"Get latest observation","description":"Use either indicator for the legacy single-indicator response envelope or indicators for a comma-separated batch of up to 20 indicator codes. Batch responses return data and per-indicator errors.","security":[{"ApiKeyBearer":[]}],"parameters":[{"name":"indicator","in":"query","required":false,"schema":{"type":"string"}},{"name":"indicators","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated indicator codes for batch latest lookup. Maximum 20."},{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"region","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Latest observation for a single indicator, or a successful batch with no per-indicator errors.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["data","meta"],"properties":{"data":{"oneOf":[{"type":"object","required":["indicator","region","period_start","period_end","period_type","value","revision","is_preliminary","source_updated_at","unit"],"properties":{"indicator":{"type":"string"},"region":{"type":"string"},"period_start":{"type":"string","format":"date"},"period_end":{"type":["string","null"],"format":"date"},"period_type":{"type":["string","null"]},"value":{"type":"number"},"revision":{"type":"integer"},"is_preliminary":{"type":"boolean"},"source_updated_at":{"type":["string","null"],"format":"date-time"},"unit":{"type":["string","null"]}},"additionalProperties":false},{"type":"null"}]},"meta":{"type":"object","required":["indicator","region","unit","total","limit","offset"],"properties":{"indicator":{"type":"string"},"region":{"type":"string"},"unit":{"type":["string","null"]},"total":{"type":"integer","minimum":0,"maximum":1},"limit":{"type":"integer","const":1},"offset":{"type":"integer","const":0}},"additionalProperties":false}},"additionalProperties":false},{"type":"object","required":["data","errors"],"properties":{"data":{"type":"array","items":{"type":"object","required":["indicator","region","period_start","period_end","period_type","value","revision","is_preliminary","source_updated_at","unit"],"properties":{"indicator":{"type":"string"},"region":{"type":"string"},"period_start":{"type":"string","format":"date"},"period_end":{"type":["string","null"],"format":"date"},"period_type":{"type":["string","null"]},"value":{"type":"number"},"revision":{"type":"integer"},"is_preliminary":{"type":"boolean"},"source_updated_at":{"type":["string","null"],"format":"date-time"},"unit":{"type":["string","null"]}},"additionalProperties":false}},"errors":{"type":"array","items":{"type":"object","required":["indicator","code","message"],"properties":{"indicator":{"type":"string"},"code":{"type":"string","enum":["INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}}},"additionalProperties":false}]}}}},"207":{"description":"Batch latest response with one or more per-indicator errors.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","errors"],"properties":{"data":{"type":"array","items":{"type":"object","required":["indicator","region","period_start","period_end","period_type","value","revision","is_preliminary","source_updated_at","unit"],"properties":{"indicator":{"type":"string"},"region":{"type":"string"},"period_start":{"type":"string","format":"date"},"period_end":{"type":["string","null"],"format":"date"},"period_type":{"type":["string","null"]},"value":{"type":"number"},"revision":{"type":"integer"},"is_preliminary":{"type":"boolean"},"source_updated_at":{"type":["string","null"],"format":"date-time"},"unit":{"type":["string","null"]}},"additionalProperties":false}},"errors":{"type":"array","items":{"type":"object","required":["indicator","code","message"],"properties":{"indicator":{"type":"string"},"code":{"type":"string","enum":["INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}}},"additionalProperties":false}}}},"400":{"description":"A query parameter was missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"401":{"description":"The request did not include a valid bearer API key.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"404":{"description":"The requested indicator or region resource was not found.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"429":{"description":"The API key exceeded its one-minute request limit.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"500":{"description":"Latest observation data could not be loaded.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/insights":{"get":{"tags":["Insights"],"summary":"Compute descriptive facts and active signals for an indicator series","description":"Returns deterministic computed facts over the requested observation window, plus active signals when the signals repository is available.","security":[{"ApiKeyBearer":[]}],"parameters":[{"name":"indicator","in":"query","required":true,"schema":{"type":"string"}},{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"region","in":"query","required":false,"schema":{"type":"string"}},{"name":"window","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|[1-9][0-9]*[dmy])$","default":"all","examples":["90d","12m","5y","all"]}}],"responses":{"200":{"description":"Salience-ranked computed facts and active signals for the series.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["facts","signals","meta"],"properties":{"facts":{"type":"array","items":{"type":"object","required":["kind","params","humanTemplate","salience"],"properties":{"kind":{"type":"string","enum":["trend","latest_delta","watermark_high_distance","watermark_low_distance","longest_run","peer_rank"]},"params":{"type":"object","additionalProperties":true},"humanTemplate":{"type":"string"},"salience":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false}},"signals":{"type":"array","items":{"type":"object","required":["id","indicator","region","kind","salience","summary","observed_at"],"properties":{"id":{"type":"string"},"indicator":{"type":"string"},"region":{"type":"string"},"kind":{"type":"string"},"salience":{"type":"number","minimum":0,"maximum":1},"summary":{"type":"string"},"observed_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"meta":{"type":"object","required":["indicator","region","unit","window","observation_count"],"properties":{"indicator":{"type":"string"},"region":{"type":"string"},"unit":{"type":["string","null"]},"window":{"type":"string"},"observation_count":{"type":"integer","minimum":0},"source_attribution":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}}}},"400":{"description":"A query parameter was missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"401":{"description":"The request did not include a valid bearer API key.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"403":{"description":"The API key does not include access to the indicator category.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"404":{"description":"The requested indicator or region resource was not found.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"429":{"description":"The API key exceeded its one-minute request limit.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"500":{"description":"Insight data could not be loaded.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/signals/active":{"get":{"tags":["Signals"],"summary":"List active premium signals","security":[{"ApiKeyBearer":[]}],"parameters":[{"name":"indicator","in":"query","required":false,"schema":{"type":"string"}},{"name":"region","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["acceleration","extreme","trend_break"]}},{"name":"strength","in":"query","required":false,"schema":{"type":"string","enum":["weak","neutral","strong"],"default":"neutral"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"Open signal intervals matching the query.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","required":["id","indicator","region","type","strength","direction","valid_from","valid_to","detected_at","last_seen_at","evidence","vocabulary"],"properties":{"id":{"type":"string","format":"uuid"},"indicator":{"type":"object","required":["code","name","category","unit","frequency","source"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"category":{"type":["string","null"]},"unit":{"type":["string","null"]},"frequency":{"type":["string","null"]},"source":{"type":"object","required":["slug","name"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false},"region":{"type":"object","required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},"type":{"type":"string","enum":["acceleration","extreme","trend_break"]},"strength":{"type":"string","enum":["weak","neutral","strong"]},"direction":{"type":["string","null"]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"type":["string","null"],"format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"last_seen_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","additionalProperties":true},"vocabulary":{"type":"object","required":["glyph","label"],"properties":{"glyph":{"type":"string"},"label":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"meta":{"type":"object","required":["count","limit","filters"],"properties":{"count":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":500},"next_cursor":{"type":"string"},"filters":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"400":{"description":"A query parameter was missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"401":{"description":"The request did not include a valid bearer API key.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"403":{"description":"The API key does not include creative-foresight premium signal access.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"429":{"description":"The API key exceeded its one-minute request limit.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"500":{"description":"Signal data could not be loaded.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/signals":{"get":{"tags":["Signals"],"summary":"List premium signal intervals","security":[{"ApiKeyBearer":[]}],"parameters":[{"name":"indicator","in":"query","required":false,"schema":{"type":"string"}},{"name":"region","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["acceleration","extreme","trend_break"]}},{"name":"strength","in":"query","required":false,"schema":{"type":"string","enum":["weak","neutral","strong"],"default":"neutral"}},{"name":"active","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Signal intervals matching the query.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","required":["id","indicator","region","type","strength","direction","valid_from","valid_to","detected_at","last_seen_at","evidence","vocabulary"],"properties":{"id":{"type":"string","format":"uuid"},"indicator":{"type":"object","required":["code","name","category","unit","frequency","source"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"category":{"type":["string","null"]},"unit":{"type":["string","null"]},"frequency":{"type":["string","null"]},"source":{"type":"object","required":["slug","name"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false},"region":{"type":"object","required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},"type":{"type":"string","enum":["acceleration","extreme","trend_break"]},"strength":{"type":"string","enum":["weak","neutral","strong"]},"direction":{"type":["string","null"]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"type":["string","null"],"format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"last_seen_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","additionalProperties":true},"vocabulary":{"type":"object","required":["glyph","label"],"properties":{"glyph":{"type":"string"},"label":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"meta":{"type":"object","required":["count","limit","filters"],"properties":{"count":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":500},"next_cursor":{"type":"string"},"filters":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"400":{"description":"A query parameter was missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"401":{"description":"The request did not include a valid bearer API key.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"403":{"description":"The API key does not include creative-foresight premium signal access.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"429":{"description":"The API key exceeded its one-minute request limit.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"500":{"description":"Signal data could not be loaded.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}},"/v1/ping":{"get":{"tags":["Diagnostics"],"summary":"Validate bearer API key connectivity","security":[{"ApiKeyBearer":[]}],"responses":{"200":{"description":"The bearer API key is valid.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","keyName"],"properties":{"ok":{"type":"boolean","const":true},"keyName":{"type":"string"}},"additionalProperties":false}}}},"401":{"description":"The request did not include a valid bearer API key.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}},"429":{"description":"The API key exceeded its one-minute request limit.","headers":{"X-Request-Id":{"description":"Request correlation identifier.","schema":{"type":"string","format":"uuid"}},"X-RateLimit-Limit":{"description":"Configured request limit for the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current one-minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current one-minute window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_API_KEY","EXPIRED_API_KEY","RATE_LIMIT_EXCEEDED","INVALID_PARAMETER","RESOURCE_NOT_FOUND","CATEGORY_NOT_ALLOWED","REGION_NOT_ALLOWED","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false}},"additionalProperties":false}}}}}}}}}