{"openapi":"3.1.0","info":{"title":"World Price Index API","version":"1.0.0","description":"Country, FX, macro-indicator, commodity, Apple, and subscription price endpoints.\n\n## Endpoint glossary\n\n### Countries\n\n- `GET /v1/countries` - list supported countries, ISO aliases, currencies, and regions.\n- `GET /v1/countries/{code}/snapshot` - latest country metadata and macro observations.\n\n### Indicators\n\n- `GET /v1/indicators` - discover macro indicators, including ONS UK indicators.\n- `GET /v1/indicators/{slug}` - fetch indicator metadata, source details, and freshness.\n- `GET /v1/series/{indicator_slug}` - fetch country-level indicator observations.\n\n### FX\n\n- `GET /v1/fx/{base}/{quote}` - latest exchange rate.\n- `GET /v1/fx/{base}/{quote}/history` - historical exchange-rate observations.\n\n### Commodities\n\n- `GET /v1/commodities` - discover IMF commodities plus EIA petroleum and natural gas products.\n- `GET /v1/commodities/{slug}/series` - list available series for one commodity product.\n- `GET /v1/commodity-series/{series_slug}` - fetch observations for one commodity series.\n\n### Apple\n\n- `GET /v1/apple/products` - list Apple product slugs.\n- `GET /v1/apple/products/{slug}/prices` - current Apple prices for one product.\n- `GET /v1/apple/products/{slug}/history` - historical Apple prices for one product.\n\n### Subscriptions\n\n- `GET /v1/netflix/plans` and `GET /v1/netflix/plans/{slug}/prices`\n- `GET /v1/spotify/plans` and `GET /v1/spotify/plans/{slug}/prices`\n- `GET /v1/adobe/plans` and `GET /v1/adobe/plans/{slug}/prices`"},"servers":[{"url":"https://api.worldpriceindex.org","description":"Canonical API endpoint"},{"url":"https://worldpriceindex.org","description":"Legacy website-host alias"}],"components":{"schemas":{"ErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"unauthorized"},"message":{"type":"string","example":"Missing bearer API key."},"request_id":{"type":"string","example":"req_123"}},"required":["code","message","request_id"]}},"required":["error"]},"Meta":{"type":"object","properties":{"attribution":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","example":"World Bank"},"license":{"type":"string","example":"World Bank Open Data terms"},"url":{"type":"string","format":"uri","example":"https://data.worldbank.org/"}},"required":["source","license","url"]}},"request_id":{"type":"string","example":"req_123"}},"required":["attribution","request_id"]},"Freshness":{"type":"object","properties":{"isStale":{"type":"boolean","description":"True when the latest observation is older than the expected update window for its cadence.","example":false},"status":{"type":"string","enum":["current","stale","unknown"],"example":"current"},"ageDays":{"type":["number","null"],"description":"Age of the latest observation in days, when known.","example":18},"staleAfterDays":{"type":"number","description":"Cadence-specific threshold used to decide whether the series is stale.","example":124},"label":{"type":"string","example":"Current"},"detail":{"type":["string","null"],"example":"Updated within 124 days"}},"required":["isStale","status","ageDays","staleAfterDays","label","detail"],"description":"Freshness metadata. Daily and weekly series become stale after 56 days, monthly after 124 days, quarterly after 279 days, and annual/yearly after 730 days."},"Country":{"type":"object","properties":{"name":{"type":"string","example":"United Kingdom"},"code":{"type":"string","example":"UK"},"alpha3":{"type":"string","example":"GBR"},"currency":{"type":["string","null"],"example":"GBP"},"region":{"type":["string","null"],"example":"Europe"},"sub_region":{"type":["string","null"],"example":"Northern Europe"}},"required":["name","code","alpha3","currency","region","sub_region"]},"Indicator":{"type":"object","properties":{"slug":{"type":"string","example":"ons-uk-cpih-all-items-index"},"name":{"type":"string","example":"UK CPIH all items index"},"family":{"type":"string","example":"inflation"},"unit":{"type":"string","example":"index"},"cadence":{"type":"string","example":"monthly"},"external_code":{"type":["string","null"],"example":"cpih01"},"methodology_url":{"type":["string","null"],"example":"https://api.beta.ons.gov.uk/v1/datasets/cpih01"},"description":{"type":["string","null"]},"is_monetary":{"type":"boolean","example":false},"source_slug":{"type":"string","example":"ons"},"source_name":{"type":"string","example":"Office for National Statistics"},"source_homepage":{"type":["string","null"],"example":"https://www.ons.gov.uk/"},"source_license":{"type":["string","null"]},"source_attribution":{"type":["string","null"],"example":"Office for National Statistics"},"latest_observed_at":{"type":["string","null"],"description":"Latest observation date available for this indicator.","example":"2026-03-31"},"freshness":{"$ref":"#/components/schemas/Freshness"}},"required":["slug","name","family","unit","cadence","external_code","methodology_url","description","is_monetary","source_slug","source_name","source_homepage","source_license","source_attribution","latest_observed_at","freshness"]},"SeriesPoint":{"type":"object","properties":{"indicator":{"type":"string","example":"monthly-cpi-yoy"},"country":{"type":"string","example":"GBR"},"observed_at":{"type":"string","example":"2026-04-30"},"value":{"type":"number","example":3.2},"currency":{"type":["string","null"],"example":null},"revision_seq":{"type":"number","example":0},"notes":{"type":["object","null"],"additionalProperties":{}}},"required":["indicator","country","observed_at","value","currency","revision_seq","notes"]},"Commodity":{"type":"object","properties":{"slug":{"type":"string","example":"wti-crude-oil"},"name":{"type":"string","example":"WTI crude oil"},"family":{"type":"string","example":"energy"},"external_code":{"type":["string","null"],"example":"WTI_CRUDE_OIL"},"description":{"type":["string","null"]},"methodology_url":{"type":["string","null"],"example":"https://www.eia.gov/opendata/"},"is_index":{"type":"boolean","example":false},"source_slug":{"type":"string","example":"eia"},"source_name":{"type":"string","example":"U.S. Energy Information Administration"},"source_homepage":{"type":["string","null"],"example":"https://www.eia.gov/opendata/"},"source_license":{"type":["string","null"]},"source_attribution":{"type":["string","null"]},"series_count":{"type":"number","example":12},"observation_count":{"type":"number","example":98517},"latest_observed_at":{"type":["string","null"],"example":"2026-05-12"}},"required":["slug","name","family","external_code","description","methodology_url","is_index","source_slug","source_name","source_homepage","source_license","source_attribution","series_count","observation_count","latest_observed_at"]},"CommoditySeries":{"type":"object","properties":{"slug":{"type":"string","example":"wti-crude-oil-eia-daily"},"commodity":{"type":"string","example":"wti-crude-oil"},"commodity_name":{"type":"string","example":"WTI crude oil"},"external_code":{"type":"string","example":"PET.RWTC.D"},"unit":{"type":"string","example":"USD"},"unit_label":{"type":["string","null"],"example":"US dollars per barrel"},"transformation":{"type":"string","example":"USD"},"cadence":{"type":"string","example":"daily"},"currency":{"type":["string","null"],"example":"USD"},"source_slug":{"type":"string","example":"eia"},"source_name":{"type":"string","example":"U.S. Energy Information Administration"},"source_homepage":{"type":["string","null"],"example":"https://www.eia.gov/opendata/"},"raw_attributes":{"type":["object","null"],"additionalProperties":{}},"latest_observed_at":{"type":["string","null"],"example":"2026-05-12"},"latest_value":{"type":["number","null"],"example":63.67},"observation_count":{"type":"number","example":10163},"freshness":{"$ref":"#/components/schemas/Freshness"}},"required":["slug","commodity","commodity_name","external_code","unit","unit_label","transformation","cadence","currency","source_slug","source_name","source_homepage","raw_attributes","latest_observed_at","latest_value","observation_count","freshness"]},"CommodityObservation":{"type":"object","properties":{"series":{"type":"string","example":"wti-crude-oil-eia-daily"},"commodity":{"type":"string","example":"wti-crude-oil"},"observed_at":{"type":"string","example":"2026-05-12"},"period":{"type":"string","example":"2026-05-12"},"value":{"type":"number","example":63.67},"unit":{"type":"string","example":"USD"},"unit_label":{"type":["string","null"],"example":"US dollars per barrel"},"cadence":{"type":"string","example":"daily"},"currency":{"type":["string","null"],"example":"USD"},"revision_seq":{"type":"number","example":0},"notes":{"type":["object","null"],"additionalProperties":{}}},"required":["series","commodity","observed_at","period","value","unit","unit_label","cadence","currency","revision_seq","notes"]},"FxRate":{"type":"object","properties":{"base":{"type":"string","example":"USD"},"quote":{"type":"string","example":"EUR"},"rate":{"type":"number","example":0.92},"base_is_legacy":{"type":"boolean","example":false},"quote_is_legacy":{"type":"boolean","example":false},"rate_date":{"type":"string","example":"2026-05-10"},"source":{"type":"string","example":"frankfurter"}},"required":["base","quote","rate","base_is_legacy","quote_is_legacy","rate_date","source"]},"AppleProduct":{"type":"object","properties":{"slug":{"type":"string","example":"iphone-16-pro"},"name":{"type":"string","example":"iPhone 16 Pro"},"category":{"type":"string","example":"iphone"},"family":{"type":["string","null"],"example":"iPhone"}},"required":["slug","name","category","family"]},"ApplePrice":{"type":"object","properties":{"product_slug":{"type":"string","example":"iphone-16-pro"},"country":{"type":"string","example":"GBR"},"currency":{"type":"string","example":"GBP"},"price":{"type":"number","example":999},"observed_at":{"type":"string","example":"2026-05-09"}},"required":["product_slug","country","currency","price","observed_at"]},"NetflixPlan":{"type":"object","properties":{"service":{"type":"string","example":"netflix"},"slug":{"type":"string","example":"premium"},"name":{"type":"string","example":"Premium"},"plan_type":{"type":["string","null"],"example":"streaming"},"audience_segment":{"type":["string","null"],"example":"individual"},"billing_model":{"type":"string","example":"flat"},"is_bundle":{"type":"boolean","example":false},"is_addon":{"type":"boolean","example":false},"includes_ads":{"type":"boolean","example":false},"availability_status":{"type":"string","example":"available"},"current_country_count":{"type":"number","example":75}},"required":["service","slug","name","plan_type","audience_segment","billing_model","is_bundle","is_addon","includes_ads","availability_status","current_country_count"]},"NetflixPrice":{"type":"object","properties":{"service":{"type":"string","example":"netflix"},"plan_slug":{"type":"string","example":"premium"},"plan_name":{"type":"string","example":"Premium"},"country":{"type":"string","example":"GBR"},"country_name":{"type":["string","null"],"example":"United Kingdom"},"currency":{"type":["string","null"],"example":"GBP"},"price":{"type":["number","null"],"example":18.99},"price_minor":{"type":["number","null"],"example":1899},"price_text":{"type":["string","null"],"example":"£18.99 / month"},"billing_period":{"type":"string","example":"month"},"billing_cadence":{"type":"string","example":"monthly"},"billing_model":{"type":"string","example":"flat"},"contract_term":{"type":["string","null"],"example":"monthly"},"audience_segment":{"type":["string","null"],"example":"individual"},"account_count_min":{"type":["number","null"],"example":4},"account_count_max":{"type":["number","null"],"example":4},"is_intro_price":{"type":"boolean","example":false},"tax_included":{"type":["boolean","null"],"example":null},"availability_status":{"type":"string","example":"available"},"source_url":{"type":"string","format":"uri","example":"https://help.netflix.com/en/node/24926/gb"},"source_observed_at":{"type":"string","example":"2026-05-11"},"valid_from":{"type":"string","example":"2026-05-11"},"valid_to":{"type":["string","null"],"example":null},"last_seen_at":{"type":"string","example":"2026-05-11T12:00:00Z"}},"required":["service","plan_slug","plan_name","country","country_name","currency","price","price_minor","price_text","billing_period","billing_cadence","billing_model","contract_term","audience_segment","account_count_min","account_count_max","is_intro_price","tax_included","availability_status","source_url","source_observed_at","valid_from","valid_to","last_seen_at"]},"SpotifyPlan":{"type":"object","properties":{"service":{"type":"string","example":"spotify"},"slug":{"type":"string","example":"family"},"name":{"type":"string","example":"Premium Family"},"plan_type":{"type":["string","null"],"example":"music"},"audience_segment":{"type":["string","null"],"example":"family"},"billing_model":{"type":"string","example":"flat"},"is_bundle":{"type":"boolean","example":false},"is_addon":{"type":"boolean","example":false},"includes_ads":{"type":"boolean","example":false},"availability_status":{"type":"string","example":"available"},"current_country_count":{"type":"number","example":80}},"required":["service","slug","name","plan_type","audience_segment","billing_model","is_bundle","is_addon","includes_ads","availability_status","current_country_count"]},"SpotifyPrice":{"type":"object","properties":{"service":{"type":"string","example":"spotify"},"plan_slug":{"type":"string","example":"family"},"plan_name":{"type":"string","example":"Premium Family"},"country":{"type":"string","example":"GBR"},"country_name":{"type":["string","null"],"example":"United Kingdom"},"currency":{"type":["string","null"],"example":"GBP"},"price":{"type":["number","null"],"example":21.99},"price_minor":{"type":["number","null"],"example":2199},"price_text":{"type":["string","null"],"example":"£21.99 / month"},"billing_period":{"type":"string","example":"month"},"billing_cadence":{"type":"string","example":"monthly"},"billing_model":{"type":"string","example":"flat"},"contract_term":{"type":["string","null"],"example":"monthly"},"audience_segment":{"type":["string","null"],"example":"family"},"account_count_min":{"type":["number","null"],"example":1},"account_count_max":{"type":["number","null"],"example":6},"is_intro_price":{"type":"boolean","example":false},"tax_included":{"type":["boolean","null"],"example":null},"availability_status":{"type":"string","example":"available"},"source_url":{"type":"string","format":"uri","example":"https://www.spotify.com/uk/premium/"},"source_observed_at":{"type":"string","example":"2026-05-11"},"valid_from":{"type":"string","example":"2026-05-11"},"valid_to":{"type":["string","null"],"example":null},"last_seen_at":{"type":"string","example":"2026-05-11T12:00:00Z"}},"required":["service","plan_slug","plan_name","country","country_name","currency","price","price_minor","price_text","billing_period","billing_cadence","billing_model","contract_term","audience_segment","account_count_min","account_count_max","is_intro_price","tax_included","availability_status","source_url","source_observed_at","valid_from","valid_to","last_seen_at"]},"AdobePlan":{"type":"object","properties":{"service":{"type":"string","example":"adobe"},"slug":{"type":"string","example":"creative-cloud-pro"},"name":{"type":"string","example":"Creative Cloud Pro"},"plan_type":{"type":["string","null"],"example":"creative-software"},"audience_segment":{"type":["string","null"],"example":"individual"},"billing_model":{"type":"string","example":"flat"},"is_bundle":{"type":"boolean","example":true},"is_addon":{"type":"boolean","example":false},"includes_ads":{"type":"boolean","example":false},"availability_status":{"type":"string","example":"available"},"current_country_count":{"type":"number","example":50}},"required":["service","slug","name","plan_type","audience_segment","billing_model","is_bundle","is_addon","includes_ads","availability_status","current_country_count"]},"AdobePrice":{"type":"object","properties":{"service":{"type":"string","example":"adobe"},"plan_slug":{"type":"string","example":"creative-cloud-pro"},"plan_name":{"type":"string","example":"Creative Cloud Pro"},"country":{"type":"string","example":"GBR"},"country_name":{"type":["string","null"],"example":"United Kingdom"},"currency":{"type":["string","null"],"example":"GBP"},"price":{"type":["number","null"],"example":66.49},"price_minor":{"type":["number","null"],"example":6649},"price_text":{"type":["string","null"],"example":"£66.49"},"billing_period":{"type":"string","example":"month"},"billing_cadence":{"type":"string","example":"annual_billed_monthly"},"billing_model":{"type":"string","example":"flat"},"contract_term":{"type":["string","null"],"example":"annual"},"audience_segment":{"type":["string","null"],"example":"individual"},"account_count_min":{"type":["number","null"]},"account_count_max":{"type":["number","null"]},"is_intro_price":{"type":"boolean","example":false},"tax_included":{"type":["boolean","null"],"example":true},"availability_status":{"type":"string","example":"available"},"source_url":{"type":"string","format":"uri","example":"https://www.adobe.com/uk/creativecloud/plans.html"},"source_observed_at":{"type":"string","example":"2026-05-11"},"valid_from":{"type":"string","example":"2026-05-11"},"valid_to":{"type":["string","null"],"example":null},"last_seen_at":{"type":"string","example":"2026-05-11T12:00:00Z"}},"required":["service","plan_slug","plan_name","country","country_name","currency","price","price_minor","price_text","billing_period","billing_cadence","billing_model","contract_term","audience_segment","account_count_min","account_count_max","is_intro_price","tax_included","availability_status","source_url","source_observed_at","valid_from","valid_to","last_seen_at"]}},"parameters":{},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"WPI API key"}}},"paths":{"/v1/indicators":{"get":{"summary":"List indicators","security":[{"bearerAuth":[]}],"description":"Discover available macro indicator slugs, including World Bank, OECD, IMF, BIS, ILOSTAT, and ONS UK indicators. ONS additions include CPIH, private rents, retail sales, monthly GDP, construction output, card spending, and online job advert series. Each row includes latest_observed_at and freshness metadata.","parameters":[{"schema":{"type":"string","description":"Optional indicator family filter, for example inflation, interest_rate, gdp, population, income, basket, housing, retail, spending, labour, or output.","example":"inflation"},"required":false,"name":"family","in":"query"}],"responses":{"200":{"description":"Discover available macro indicator slugs, including World Bank, OECD, IMF, BIS, ILOSTAT, and ONS UK indicators. ONS additions include CPIH, private rents, retail sales, monthly GDP, construction output, card spending, and online job advert series. Each row includes latest_observed_at and freshness metadata.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Indicator"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/indicators/{slug}":{"get":{"summary":"Get indicator metadata","security":[{"bearerAuth":[]}],"description":"Fetch metadata for one indicator, including source details, latest_observed_at, and freshness. Use /v1/indicators to discover valid slugs.","parameters":[{"schema":{"type":"string","description":"Indicator slug. Use /v1/indicators to discover available indicator slugs, including ONS UK indicator slugs.","example":"ons-uk-cpih-all-items-index"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"Fetch metadata for one indicator, including source details, latest_observed_at, and freshness. Use /v1/indicators to discover valid slugs.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Indicator"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/series/{indicator_slug}":{"get":{"summary":"Get time-series data","security":[{"bearerAuth":[]}],"description":"Fetch observations for an indicator. ONS UK indicators use country=GBR. Use /v1/indicators to discover indicator_slug values and /v1/countries to discover country filters.","parameters":[{"schema":{"type":"string","description":"Indicator slug. Use /v1/indicators to discover available indicator slugs, including ONS UK indicator slugs.","example":"ons-uk-cpih-all-items-index"},"required":true,"name":"indicator_slug","in":"path"},{"schema":{"type":"string","description":"Optional country filter. ISO3 is preferred; ISO2 aliases are accepted where available.","example":"GBR"},"required":false,"name":"country","in":"query"},{"schema":{"type":"string","description":"Optional inclusive date filter in YYYY-MM-DD format.","example":"2026-01-01"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string","description":"Optional inclusive date filter in YYYY-MM-DD format.","example":"2026-01-01"},"required":false,"name":"to","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":5000,"description":"Maximum rows to return. Defaults to 1000. Maximum 5000.","example":1000},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Fetch observations for an indicator. ONS UK indicators use country=GBR. Use /v1/indicators to discover indicator_slug values and /v1/countries to discover country filters.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SeriesPoint"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/commodities":{"get":{"summary":"List commodities","security":[{"bearerAuth":[]}],"description":"Discover commodity products and indexes, including EIA petroleum and natural gas series plus IMF commodity series. Use family=energy and source=eia to browse EIA energy coverage. Coal and electricity data may be withheld from public browse pages while the site taxonomy is being refined.","parameters":[{"schema":{"type":"string","description":"Optional commodity family filter.","example":"energy"},"required":false,"name":"family","in":"query"},{"schema":{"type":"string","description":"Optional source slug filter, for example eia or imf.","example":"eia"},"required":false,"name":"source","in":"query"},{"schema":{"type":"string","description":"Optional case-insensitive search over commodity name and slug.","example":"diesel"},"required":false,"name":"q","in":"query"}],"responses":{"200":{"description":"Discover commodity products and indexes, including EIA petroleum and natural gas series plus IMF commodity series. Use family=energy and source=eia to browse EIA energy coverage. Coal and electricity data may be withheld from public browse pages while the site taxonomy is being refined.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Commodity"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/commodities/{slug}/series":{"get":{"summary":"List commodity series","security":[{"bearerAuth":[]}],"description":"Fetch all available series for a commodity, including cadence, unit, source metadata, latest value, observation count, and freshness metadata.","parameters":[{"schema":{"type":"string","description":"Commodity slug. Use /v1/commodities to discover available commodity slugs.","example":"wti-crude-oil"},"required":true,"name":"slug","in":"path"},{"schema":{"type":"string","description":"Optional cadence filter such as daily, weekly, four-week-average, monthly, or annual.","example":"daily"},"required":false,"name":"cadence","in":"query"}],"responses":{"200":{"description":"Fetch all available series for a commodity, including cadence, unit, source metadata, latest value, observation count, and freshness metadata.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CommoditySeries"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/commodity-series/{series_slug}":{"get":{"summary":"Get commodity series data","security":[{"bearerAuth":[]}],"description":"Fetch observations for one commodity series. Use /v1/commodities/{slug}/series to discover series_slug values for IMF commodities, EIA petroleum, and EIA natural gas.","parameters":[{"schema":{"type":"string","description":"Commodity series slug. Use /v1/commodities/{slug}/series to discover available series slugs.","example":"wti-crude-oil-eia-daily"},"required":true,"name":"series_slug","in":"path"},{"schema":{"type":"string","description":"Optional inclusive date filter in YYYY-MM-DD format.","example":"2026-01-01"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string","description":"Optional inclusive date filter in YYYY-MM-DD format.","example":"2026-01-01"},"required":false,"name":"to","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":5000,"description":"Maximum rows to return. Defaults to 1000. Maximum 5000.","example":1000},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Fetch observations for one commodity series. Use /v1/commodities/{slug}/series to discover series_slug values for IMF commodities, EIA petroleum, and EIA natural gas.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CommodityObservation"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/countries":{"get":{"summary":"List countries","security":[{"bearerAuth":[]}],"description":"Discover supported countries, ISO2 aliases, ISO3 codes, currencies, and regions.","responses":{"200":{"description":"Discover supported countries, ISO2 aliases, ISO3 codes, currencies, and regions.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Country"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/countries/{code}/snapshot":{"get":{"summary":"Get country macro snapshot","security":[{"bearerAuth":[]}],"description":"Fetch the latest available macro observations for a country. Use /v1/countries to discover valid country codes.","parameters":[{"schema":{"type":"string","description":"Country code. ISO3 is preferred, for example GBR, USA, or FRA. ISO2 aliases are accepted where available. Use /v1/countries to discover available values.","example":"GBR"},"required":true,"name":"code","in":"path"}],"responses":{"200":{"description":"Fetch the latest available macro observations for a country. Use /v1/countries to discover valid country codes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"country":{"$ref":"#/components/schemas/Country"},"indicators":{"type":"array","items":{"$ref":"#/components/schemas/SeriesPoint"}}},"required":["country","indicators"]},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/fx/{base}/{quote}":{"get":{"summary":"Get latest FX rate","security":[{"bearerAuth":[]}],"description":"Fetch the latest available exchange rate between two currency codes.","parameters":[{"schema":{"type":"string","description":"ISO 4217 currency code. Use the FX endpoints with common currency codes such as USD, EUR, GBP, JPY, or CHF.","example":"USD"},"required":true,"name":"base","in":"path"},{"schema":{"type":"string","description":"ISO 4217 currency code. Use the FX endpoints with common currency codes such as USD, EUR, GBP, JPY, or CHF.","example":"USD"},"required":true,"name":"quote","in":"path"}],"responses":{"200":{"description":"Fetch the latest available exchange rate between two currency codes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FxRate"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/fx/{base}/{quote}/history":{"get":{"summary":"Get FX history","security":[{"bearerAuth":[]}],"description":"Fetch historical exchange rates between two currency codes. Use from, to, and limit to control the date window and row count.","parameters":[{"schema":{"type":"string","description":"ISO 4217 currency code. Use the FX endpoints with common currency codes such as USD, EUR, GBP, JPY, or CHF.","example":"USD"},"required":true,"name":"base","in":"path"},{"schema":{"type":"string","description":"ISO 4217 currency code. Use the FX endpoints with common currency codes such as USD, EUR, GBP, JPY, or CHF.","example":"USD"},"required":true,"name":"quote","in":"path"},{"schema":{"type":"string","description":"Optional inclusive date filter in YYYY-MM-DD format.","example":"2026-01-01"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string","description":"Optional inclusive date filter in YYYY-MM-DD format.","example":"2026-01-01"},"required":false,"name":"to","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":5000,"description":"Maximum rows to return. Defaults to 365. Maximum 5000.","example":365},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Fetch historical exchange rates between two currency codes. Use from, to, and limit to control the date window and row count.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FxRate"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/apple/products":{"get":{"summary":"List Apple products","security":[{"bearerAuth":[]}],"description":"Discover Apple product slugs for use with the product price and history endpoints.","responses":{"200":{"description":"Discover Apple product slugs for use with the product price and history endpoints.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AppleProduct"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/apple/products/{slug}/prices":{"get":{"summary":"Get Apple prices","security":[{"bearerAuth":[]}],"description":"Fetch current Apple prices for one product. Use /v1/apple/products to discover product slugs.","parameters":[{"schema":{"type":"string","description":"Apple product slug. Use /v1/apple/products to discover available product slugs.","example":"iphone-16-pro"},"required":true,"name":"slug","in":"path"},{"schema":{"type":"string","description":"Optional country filter. ISO3 is preferred; ISO2 aliases are accepted where available.","example":"GBR"},"required":false,"name":"country","in":"query"}],"responses":{"200":{"description":"Fetch current Apple prices for one product. Use /v1/apple/products to discover product slugs.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ApplePrice"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/apple/products/{slug}/history":{"get":{"summary":"Get Apple price history","security":[{"bearerAuth":[]}],"description":"Fetch historical Apple price observations for one product. Use /v1/apple/products to discover product slugs.","parameters":[{"schema":{"type":"string","description":"Apple product slug. Use /v1/apple/products to discover available product slugs.","example":"iphone-16-pro"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"Fetch historical Apple price observations for one product. Use /v1/apple/products to discover product slugs.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ApplePrice"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/netflix/plans":{"get":{"summary":"List Netflix plans","security":[{"bearerAuth":[]}],"description":"Discover Netflix plan slugs for use with the Netflix prices endpoint.","responses":{"200":{"description":"Discover Netflix plan slugs for use with the Netflix prices endpoint.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NetflixPlan"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/netflix/plans/{slug}/prices":{"get":{"summary":"Get Netflix subscription prices","security":[{"bearerAuth":[]}],"description":"Fetch Netflix prices for a plan. Use /v1/netflix/plans to discover plan slugs and /v1/countries to discover country filters.","parameters":[{"schema":{"type":"string","description":"Subscription plan slug. Use the matching plans endpoint, for example /v1/netflix/plans, to discover available plan slugs.","example":"standard"},"required":true,"name":"slug","in":"path"},{"schema":{"type":"string","description":"Optional country filter. ISO3 is preferred; ISO2 aliases are accepted where available.","example":"GBR"},"required":false,"name":"country","in":"query"},{"schema":{"type":"boolean","description":"Set to true to include historical rows as well as current rows.","example":false},"required":false,"name":"history","in":"query"}],"responses":{"200":{"description":"Fetch Netflix prices for a plan. Use /v1/netflix/plans to discover plan slugs and /v1/countries to discover country filters.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NetflixPrice"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/spotify/plans":{"get":{"summary":"List Spotify plans","security":[{"bearerAuth":[]}],"description":"Discover Spotify plan slugs for use with the Spotify prices endpoint.","responses":{"200":{"description":"Discover Spotify plan slugs for use with the Spotify prices endpoint.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SpotifyPlan"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/spotify/plans/{slug}/prices":{"get":{"summary":"Get Spotify subscription prices","security":[{"bearerAuth":[]}],"description":"Fetch Spotify prices for a plan. Use /v1/spotify/plans to discover plan slugs and /v1/countries to discover country filters.","parameters":[{"schema":{"type":"string","description":"Subscription plan slug. Use the matching plans endpoint, for example /v1/netflix/plans, to discover available plan slugs.","example":"standard"},"required":true,"name":"slug","in":"path"},{"schema":{"type":"string","description":"Optional country filter. ISO3 is preferred; ISO2 aliases are accepted where available.","example":"GBR"},"required":false,"name":"country","in":"query"},{"schema":{"type":"boolean","description":"Set to true to include historical rows as well as current rows.","example":false},"required":false,"name":"history","in":"query"}],"responses":{"200":{"description":"Fetch Spotify prices for a plan. Use /v1/spotify/plans to discover plan slugs and /v1/countries to discover country filters.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SpotifyPrice"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/adobe/plans":{"get":{"summary":"List Adobe plans","security":[{"bearerAuth":[]}],"description":"Discover Adobe plan slugs for use with the Adobe prices endpoint.","responses":{"200":{"description":"Discover Adobe plan slugs for use with the Adobe prices endpoint.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AdobePlan"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/adobe/plans/{slug}/prices":{"get":{"summary":"Get Adobe subscription prices","security":[{"bearerAuth":[]}],"description":"Fetch Adobe prices for a plan. Use /v1/adobe/plans to discover plan slugs and /v1/countries to discover country filters.","parameters":[{"schema":{"type":"string","description":"Subscription plan slug. Use the matching plans endpoint, for example /v1/netflix/plans, to discover available plan slugs.","example":"standard"},"required":true,"name":"slug","in":"path"},{"schema":{"type":"string","description":"Optional country filter. ISO3 is preferred; ISO2 aliases are accepted where available.","example":"GBR"},"required":false,"name":"country","in":"query"},{"schema":{"type":"boolean","description":"Set to true to include historical rows as well as current rows.","example":false},"required":false,"name":"history","in":"query"}],"responses":{"200":{"description":"Fetch Adobe prices for a plan. Use /v1/adobe/plans to discover plan slugs and /v1/countries to discover country filters.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AdobePrice"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"webhooks":{}}