{"openapi":"3.1.0","info":{"title":"Retail Sales API","version":"1.0.0","description":"How much consumers in each economy are actually spending, and which way the high street is turning — the OECD retail trade volume as an API, live from the OECD's official statistics, no key. Retail trade volume is the headline monthly read on consumer demand: it measures the real, inflation-adjusted volume of goods sold by retailers, and its year-on-year change tells you whether households are opening their wallets or pulling back. Consumer spending is the largest part of most economies, so the retail print moves markets and feeds straight into GDP nowcasts — and the latest month-on-month move is the bit traders react to first. The OECD publishes a seasonally-adjusted retail-trade-volume index for each economy; this API turns it into the numbers people use — the year-on-year and month-on-month growth of retail sales. The board endpoint ranks every economy by its year-on-year retail growth, so you can see where consumers are spending and where demand is fading. The momentum endpoint ranks by the latest month-on-month move — who is accelerating or rolling over right now. The country endpoint gives one economy's retail growth, year-on-year and month-on-month, with a plain-language read. Each reading carries its own period and discontinued series are excluded, so the board is genuinely current. The consumer-demand / retail hard-data cut — distinct from the industrial-production board (the supply side, factory output), the leading-indicator and confidence boards (soft survey data), and the generic multi-provider data aggregator. Figures are monthly, in percent.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/retailsales-api","description":"oanor gateway"}],"tags":[{"name":"Board"},{"name":"Momentum"},{"name":"Country"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/board":{"get":{"operationId":"get_v1_board","tags":["Board"],"summary":"Economies ranked by year-on-year retail-sales growth","description":"","parameters":[{"name":"countries_only","in":"query","required":false,"description":"Drop aggregate groups (true)","schema":{"type":"string"},"example":"true"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Economies ranked by year-on-year retail-sales (retail trade volume) growth — the real, inflation-adjusted volume of goods sold. The headline read on consumer demand; feeds GDP nowcasts. Growth computed from the OECD's seasonally-adjusted retail-trade-volume index. Each row carries its own period; discontinued series are excluded. Monthly, cached a few hours.","board":[{"mom":2.59,"yoy":20.64,"code":"TUR","name":"Türkiye","period":"2026-03","reading":"consumers spending strongly","is_aggregate":false},{"mom":1.17,"yoy":8.99,"code":"COL","name":"Colombia","period":"2026-03","reading":"consumers spending strongly","is_aggregate":false},{"mom":1.87,"yoy":8.23,"code":"LTU","name":"Lithuania","period":"2026-04","reading":"consumers spending strongly","is_aggregate":false},{"mom":-0.85,"yoy":8.21,"code":"BGR","name":"Bulgaria","period":"2026-04","reading":"consumers spending strongly","is_aggregate":false},{"mom":-0.21,"yoy":5.63,"code":"LUX","name":"Luxembourg","period":"2026-04","reading":"consumers spending strongly","is_aggregate":false},{"mom":0.51,"yoy":5.14,"code":"ISR","name":"Israel","period":"2026-02","reading":"consumers spending strongly","is_aggregate":false},{"mom":-0.75,"yoy":4.86,"code":"PRT","name":"Portugal","period":"2026-04","reading":"consumers spending strongly","is_aggregate":false},{"mom":-0.4,"yoy":4.47,"code":"SWE","name":"Sweden","period":"2026-04","reading":"consumers spending strongly","is_aggregate":false},{"mom":-1.12,"yoy":3.31,"code":"HUN","name":"Hungary","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-0.86,"yoy":3.19,"code":"SVN","name":"Slovenia","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-0.38,"yoy":3.01,"code":"LVA","name":"Latvia","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-0.48,"yoy":2.79,"code":"GRC","name":"Greece","period":"2026-03","reading":"retail growing","is_aggregate":false},{"mom":1,"yoy":2.5,"code":"USA","name":"United States","period":"2026-03","reading":"retail growing","is_aggregate":false},{"mom":0.48,"yoy":2.46,"code":"BRA","name":"Brazil","period":"2026-03","reading":"retail growing","is_aggregate":false},{"mom":0.11,"yoy":2.43,"code":"MEX","name":"Mexico","period":"2026-03","reading":"retail growing","is_aggregate":false},{"mom":0.05,"yoy":2.24,"code":"ZAF","name":"South Africa","period":"2026-03","reading":"retail growing","is_aggregate":false},{"mom":-0.87,"yoy":2.2,"code":"CZE","name":"Czechia","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-0.52,"yoy":2.16,"code":"FIN","name":"Finland","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-1.53,"yoy":2,"code":"EST","name":"Estonia","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-0.17,"yoy":1.89,"code":"HRV","name":"Croatia","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":0.28,"yoy":1.89,"code":"FRA","name":"France","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-0.19,"yoy":1.78,"code":"NLD","name":"Netherlands","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":0.1,"yoy":1.7,"code":"CHE","name":"Switzerland","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-3.64,"yoy":1.67,"code":"KOR","name":"Korea","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-0.29,"yoy":1.18,"code":"GBR","name":"United Kingdom","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-4.51,"yoy":1.04,"code":"DNK","name":"Denmark","period":"2026-04","reading":"retail growing","is_aggregate":false},{"mom":-1.5,"yoy":0.81,"code":"ESP","name":"Spain","period":"2026-04","reading":"retail roughly flat","is_aggregate":false},{"mom":0.31,"yoy":0.73,"code":"NOR","name":"Norway","period":"2026-04","reading":"retail roughly flat","is_aggregate":false},{"mom":-0.81,"yoy":0.64,"code":"IRL","name":"Ireland","period":"2026-04","reading":"retail roughly flat","is_aggregate":false},{"mom":-0.68,"yoy":0.19,"code":"CAN","name":"Canada","period":"2026-03","reading":"retail roughly flat","is_aggregate":false},{"mom":-0.41,"yoy":0.1,"code":"ITA","name":"Italy","period":"2026-04","reading":"retail roughly flat","is_aggregate":false},{"mom":0.51,"yoy":-0.05,"code":"JPN","name":"Japan","period":"2026-03","reading":"retail roughly flat","is_aggregate":false},{"mom":-0.2,"yoy":-0.3,"code":"DEU","name":"Germany","period":"2026-04","reading":"retail roughly flat","is_aggregate":false},{"mom":-1.51,"yoy":-0.36,"code":"POL","name":"Poland","period":"2026-04","reading":"retail roughly flat","is_aggregate":false},{"mom":-1.81,"yoy":-0.58,"code":"SVK","name":"Slovak Republic","period":"2026-04","reading":"retail roughly flat","is_aggregate":false},{"mom":-0.21,"yoy":-0.72,"code":"AUT","name":"Austria","period":"2026-04","reading":"retail roughly flat","is_aggregate":false},{"mom":-1.79,"yoy":-2.1,"code":"BEL","name":"Belgium","period":"2026-04","reading":"retail contracting","is_aggregate":false},{"mom":-2.55,"yoy":-6.27,"code":"ROU","name":"Romania","period":"2026-04","reading":"retail falling sharply","is_aggregate":false}],"count":38,"source":"OECD retail trade volume (SDMX), seasonally adjusted","indicator":"Retail trade volume (year-on-year)","latest_period":"2026-04"},"meta":{"timestamp":"2026-06-12T19:37:28.482Z","request_id":"a061472d-fe1b-4a2b-a821-41fd877a2c8a"},"status":"ok","message":"Retail sales board retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/momentum":{"get":{"operationId":"get_v1_momentum","tags":["Momentum"],"summary":"Economies ranked by the latest month-on-month retail move","description":"","parameters":[{"name":"countries_only","in":"query","required":false,"description":"Drop aggregate groups (true)","schema":{"type":"string"},"example":"true"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Economies ranked by the latest month-on-month move in retail sales — who is accelerating or rolling over right now, the part traders react to first. Year-on-year alongside. Growth computed from the OECD's seasonally-adjusted retail-trade-volume index. Monthly, cached a few hours.","board":[{"mom":2.59,"yoy":20.64,"code":"TUR","name":"Türkiye","period":"2026-03","is_aggregate":false},{"mom":1.87,"yoy":8.23,"code":"LTU","name":"Lithuania","period":"2026-04","is_aggregate":false},{"mom":1.17,"yoy":8.99,"code":"COL","name":"Colombia","period":"2026-03","is_aggregate":false},{"mom":1,"yoy":2.5,"code":"USA","name":"United States","period":"2026-03","is_aggregate":false},{"mom":0.51,"yoy":-0.05,"code":"JPN","name":"Japan","period":"2026-03","is_aggregate":false},{"mom":0.51,"yoy":5.14,"code":"ISR","name":"Israel","period":"2026-02","is_aggregate":false},{"mom":0.48,"yoy":2.46,"code":"BRA","name":"Brazil","period":"2026-03","is_aggregate":false},{"mom":0.31,"yoy":0.73,"code":"NOR","name":"Norway","period":"2026-04","is_aggregate":false},{"mom":0.28,"yoy":1.89,"code":"FRA","name":"France","period":"2026-04","is_aggregate":false},{"mom":0.11,"yoy":2.43,"code":"MEX","name":"Mexico","period":"2026-03","is_aggregate":false},{"mom":0.1,"yoy":1.7,"code":"CHE","name":"Switzerland","period":"2026-04","is_aggregate":false},{"mom":0.05,"yoy":2.24,"code":"ZAF","name":"South Africa","period":"2026-03","is_aggregate":false},{"mom":-0.17,"yoy":1.89,"code":"HRV","name":"Croatia","period":"2026-04","is_aggregate":false},{"mom":-0.19,"yoy":1.78,"code":"NLD","name":"Netherlands","period":"2026-04","is_aggregate":false},{"mom":-0.2,"yoy":-0.3,"code":"DEU","name":"Germany","period":"2026-04","is_aggregate":false},{"mom":-0.21,"yoy":-0.72,"code":"AUT","name":"Austria","period":"2026-04","is_aggregate":false},{"mom":-0.21,"yoy":5.63,"code":"LUX","name":"Luxembourg","period":"2026-04","is_aggregate":false},{"mom":-0.29,"yoy":1.18,"code":"GBR","name":"United Kingdom","period":"2026-04","is_aggregate":false},{"mom":-0.38,"yoy":3.01,"code":"LVA","name":"Latvia","period":"2026-04","is_aggregate":false},{"mom":-0.4,"yoy":4.47,"code":"SWE","name":"Sweden","period":"2026-04","is_aggregate":false},{"mom":-0.41,"yoy":0.1,"code":"ITA","name":"Italy","period":"2026-04","is_aggregate":false},{"mom":-0.48,"yoy":2.79,"code":"GRC","name":"Greece","period":"2026-03","is_aggregate":false},{"mom":-0.52,"yoy":2.16,"code":"FIN","name":"Finland","period":"2026-04","is_aggregate":false},{"mom":-0.68,"yoy":0.19,"code":"CAN","name":"Canada","period":"2026-03","is_aggregate":false},{"mom":-0.75,"yoy":4.86,"code":"PRT","name":"Portugal","period":"2026-04","is_aggregate":false},{"mom":-0.81,"yoy":0.64,"code":"IRL","name":"Ireland","period":"2026-04","is_aggregate":false},{"mom":-0.85,"yoy":8.21,"code":"BGR","name":"Bulgaria","period":"2026-04","is_aggregate":false},{"mom":-0.86,"yoy":3.19,"code":"SVN","name":"Slovenia","period":"2026-04","is_aggregate":false},{"mom":-0.87,"yoy":2.2,"code":"CZE","name":"Czechia","period":"2026-04","is_aggregate":false},{"mom":-1.12,"yoy":3.31,"code":"HUN","name":"Hungary","period":"2026-04","is_aggregate":false},{"mom":-1.5,"yoy":0.81,"code":"ESP","name":"Spain","period":"2026-04","is_aggregate":false},{"mom":-1.51,"yoy":-0.36,"code":"POL","name":"Poland","period":"2026-04","is_aggregate":false},{"mom":-1.53,"yoy":2,"code":"EST","name":"Estonia","period":"2026-04","is_aggregate":false},{"mom":-1.79,"yoy":-2.1,"code":"BEL","name":"Belgium","period":"2026-04","is_aggregate":false},{"mom":-1.81,"yoy":-0.58,"code":"SVK","name":"Slovak Republic","period":"2026-04","is_aggregate":false},{"mom":-2.55,"yoy":-6.27,"code":"ROU","name":"Romania","period":"2026-04","is_aggregate":false},{"mom":-3.64,"yoy":1.67,"code":"KOR","name":"Korea","period":"2026-04","is_aggregate":false},{"mom":-4.51,"yoy":1.04,"code":"DNK","name":"Denmark","period":"2026-04","is_aggregate":false}],"count":38,"source":"OECD retail trade volume (SDMX), seasonally adjusted","indicator":"Retail trade volume (month-on-month momentum)","latest_period":"2026-04"},"meta":{"timestamp":"2026-06-12T19:37:28.573Z","request_id":"5d680b0d-105e-410a-a65c-70d99e6ceeda"},"status":"ok","message":"Retail momentum retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/country":{"get":{"operationId":"get_v1_country","tags":["Country"],"summary":"One economy's retail-sales growth, year-on-year and month-on-month","description":"","parameters":[{"name":"country","in":"query","required":true,"description":"ISO-3 code or name","schema":{"type":"string"},"example":"USA"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"code":"USA","name":"United States","note":"One economy's retail-sales growth, year-on-year and month-on-month, from the OECD's seasonally-adjusted retail-trade-volume index. A positive year-on-year change means real retail volume is above its level a year earlier. Monthly, cached a few hours.","period":"2026-03","source":"OECD retail trade volume (SDMX)","is_aggregate":false,"retail_sales":{"mom":1,"yoy":2.5,"reading":"retail growing"}},"meta":{"timestamp":"2026-06-12T19:37:28.657Z","request_id":"0460a097-2e74-4f21-b8f6-1090ad749a7c"},"status":"ok","message":"Country retail sales retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Service metadata","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"board and momentum take countries_only (true to drop aggregates). country takes country (ISO-3 code or name, required). meta takes no parameters. Growth figures are in percent; yoy is year-on-year, mom is month-on-month, computed from the retail-trade-volume index. Monthly data; a multi-hour protective cache fronts the OECD upstream.","source":"OECD retail trade volume (DF_INDSERV, TOVM/G47) via OECD SDMX API (seasonally adjusted), live, keyless","service":"retailsales-api","economies":43,"endpoints":{"GET /v1/meta":"This document.","GET /v1/board":"Economies ranked by year-on-year retail-sales growth (countries_only optional).","GET /v1/country":"One economy's retail-sales growth, year-on-year and month-on-month (country=USA).","GET /v1/momentum":"Economies ranked by the latest month-on-month retail move."},"description":"Retail sales — how much consumers in each economy are spending and which way the high street is turning, live from the OECD (no key). It computes the year-on-year and month-on-month growth of the retail-trade-volume index (real, inflation-adjusted). board ranks economies by year-on-year retail growth; momentum ranks by the latest month-on-month move; country gives one economy's figures with a plain-language read. A headline consumer-demand print that feeds GDP nowcasts. The retail / consumer-demand cut — distinct from the industrial-production board (the supply side), the leading-indicator and confidence boards (soft survey data), and the generic data aggregator.","united_states":{"mom":1,"yoy":2.5},"upstream_status":"ok"},"meta":{"timestamp":"2026-06-12T19:37:28.748Z","request_id":"d3149d40-5301-4d4b-ada5-0d7ae181740a"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":795,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1130,"monthly_call_quota":17600,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3420,"monthly_call_quota":89800,"rps_limit":16,"hard_limit":true},{"slug":"business","name":"Business","price_cents_month":7780,"monthly_call_quota":499000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/retailsales-api"}