{"openapi":"3.1.0","info":{"title":"Standards API","version":"1.0.0","description":"Read-only JSON access to the international-standards reference data this site browses: ISO 3166 countries, ISO 4217 currencies, ISO 639 languages and IANA timezones. No authentication, permissive CORS, cacheable GETs."},"servers":[{"url":"https://standards.23quirats.dev"}],"tags":[{"name":"countries","description":"Countries from the UN M49 standard with their ISO 3166-1 codes, plus passport (ICAO), vehicle (UNECE), Olympic (IOC), FIFA, aircraft, ccTLD, calling code and membership data."},{"name":"currencies","description":"Active ISO 4217 currencies with their code, numeric code, minor units, symbol and name."},{"name":"historical-currencies","description":"Withdrawn ISO 4217 currencies (List Three) with their code, numeric code, the country that used them and the date they were withdrawn."},{"name":"languages","description":"Languages with their ISO 639-1 / 639-3 codes, English names and native names."},{"name":"timezones","description":"IANA tzdata timezones with their canonical id, UTC offset, covered countries and coordinates."}],"paths":{"/api/countries":{"get":{"operationId":"listCountries","summary":"Countries from the UN M49 standard with their ISO 3166-1 codes, plus passport (ICAO), vehicle (UNECE), Olympic (IOC), FIFA, aircraft, ccTLD, calling code and membership data.","description":"All parameters are optional and combine with AND. An unfiltered request returns the whole dataset. Unknown parameters are rejected with a 400 rather than ignored.","tags":["countries"],"parameters":[{"name":"q","in":"query","required":false,"description":"Fuzzy search across the dataset's main text fields.","schema":{"type":"string","minLength":1}},{"name":"search","in":"query","required":false,"description":"Alias of `q`. Pass one or the other, not both.","schema":{"type":"string","minLength":1}},{"name":"sort","in":"query","required":false,"description":"Comma-separated fields, each optionally suffixed `:desc` — e.g. `name` or `region:desc,name`.","schema":{"type":"string","minLength":1}},{"name":"fields","in":"query","required":false,"description":"Comma-separated fields to return. Applied after filtering and sorting, so you can sort by a field you don't select.","schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return, up to 500. Omit for all matching rows.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Rows to skip. Cannot be combined with `page`/`size`.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"1-based page number, the spelling the site's own URLs use. Cannot be combined with `limit`/`offset`.","schema":{"type":"integer","minimum":1}},{"name":"size","in":"query","required":false,"description":"Rows per page when using `page`, up to 500. Defaults to 20.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"raw","in":"query","required":false,"description":"Return a bare JSON array instead of the `{ data, meta }` envelope.","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"format","in":"query","required":false,"description":"Response format. `csv` returns a flat table instead of the envelope, with the unpaginated total in the `X-Total-Count` header.","schema":{"type":"string","enum":["json","csv"]}},{"name":"include","in":"query","required":false,"description":"Comma-separated related data to embed in each row. Endpoint-specific; joined after pagination, so it costs nothing on rows you don't fetch.","schema":{"type":"string","minLength":1}},{"name":"code","in":"query","required":false,"description":"ISO 3166-1 alpha-2 or alpha-3 code, e.g. `ES` or `ESP`.","schema":{"type":"string","minLength":2,"maxLength":3}},{"name":"region","in":"query","required":false,"description":"UN M49 macro-region, matched as a substring, e.g. `Europe`.","schema":{"type":"string","minLength":1}},{"name":"independent","in":"query","required":false,"description":"ISO 3166 independence status.","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"unMembership","in":"query","required":false,"description":"UN status. `member` is one of the 193 member States; `non-member-state` is a non-member State with a standing observer invitation (Holy See, State of Palestine). Anything on neither list has no value and matches neither.","schema":{"type":"string","enum":["member","non-member-state"]}},{"name":"euMember","in":"query","required":false,"description":"Current EU member state.","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"sovereignState","in":"query","required":false,"description":"Alpha-2 of the administering country, for territories.","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"locale","in":"query","required":false,"description":"ISO 639-1 locale, e.g. `ca`. Adds `localizedName` (the country's name in that language) and `localizedLanguage` (the locale code it was rendered in) to each row. Use `include=localizedNames` for every locale at once.","schema":{"type":"string","minLength":2,"maxLength":3}},{"name":"has","in":"query","required":false,"description":"Comma-separated fields that must have a value. Allowed: alpha3Code, icaoCode, dsitCode, iocCode, fifaCode, aircraftRegPrefixes, ccTLD, phonePrefix, sovereignState, subdivisionCount.","schema":{"type":"string","minLength":1}},{"name":"missing","in":"query","required":false,"description":"Comma-separated fields that must be absent. Allowed: alpha3Code, icaoCode, dsitCode, iocCode, fifaCode, aircraftRegPrefixes, ccTLD, phonePrefix, sovereignState, subdivisionCount.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Matching rows. A `{ data, meta }` envelope, or a bare array when `raw=1`.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"A countries record. Fields: flag, alpha2Code, name, fullName, localShortNames, alpha3Code, icaoCode, dsitCode, iocCode, fifaCode, aircraftRegPrefixes, ccTLD, phonePrefix, independent, unMembership, sovereignState, euMember, region, numericCode, notes, subdivisionCount."}},"meta":{"type":"object","description":"Describes the query that produced `data`.","properties":{"total":{"type":"integer","description":"Rows matching the query, before pagination."},"count":{"type":"integer","description":"Rows in this response, after pagination."},"offset":{"type":"integer"},"limit":{"type":["integer","null"],"description":"null when no limit was requested."},"page":{"type":"integer","description":"Present only when paginating with page/size."},"filters":{"type":"object","description":"The filters that were applied."}},"required":["total","count","offset","limit","filters"]}},"required":["data","meta"]},{"type":"array","items":{"type":"object","description":"A countries record. Fields: flag, alpha2Code, name, fullName, localShortNames, alpha3Code, icaoCode, dsitCode, iocCode, fifaCode, aircraftRegPrefixes, ccTLD, phonePrefix, independent, unMembership, sovereignState, euMember, region, numericCode, notes, subdivisionCount."}}]}}}},"400":{"description":"An invalid or unknown query parameter. Never cached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"issues":{"type":"array","description":"One entry per rejected parameter.","items":{"type":"object","properties":{"param":{"type":"string"},"message":{"type":"string"}},"required":["param","message"]}}},"required":["message"]}},"required":["error"]}}}}}}},"/api/currencies":{"get":{"operationId":"listCurrencies","summary":"Active ISO 4217 currencies with their code, numeric code, minor units, symbol and name.","description":"All parameters are optional and combine with AND. An unfiltered request returns the whole dataset. Unknown parameters are rejected with a 400 rather than ignored.","tags":["currencies"],"parameters":[{"name":"q","in":"query","required":false,"description":"Fuzzy search across the dataset's main text fields.","schema":{"type":"string","minLength":1}},{"name":"search","in":"query","required":false,"description":"Alias of `q`. Pass one or the other, not both.","schema":{"type":"string","minLength":1}},{"name":"sort","in":"query","required":false,"description":"Comma-separated fields, each optionally suffixed `:desc` — e.g. `name` or `region:desc,name`.","schema":{"type":"string","minLength":1}},{"name":"fields","in":"query","required":false,"description":"Comma-separated fields to return. Applied after filtering and sorting, so you can sort by a field you don't select.","schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return, up to 500. Omit for all matching rows.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Rows to skip. Cannot be combined with `page`/`size`.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"1-based page number, the spelling the site's own URLs use. Cannot be combined with `limit`/`offset`.","schema":{"type":"integer","minimum":1}},{"name":"size","in":"query","required":false,"description":"Rows per page when using `page`, up to 500. Defaults to 20.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"raw","in":"query","required":false,"description":"Return a bare JSON array instead of the `{ data, meta }` envelope.","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"format","in":"query","required":false,"description":"Response format. `csv` returns a flat table instead of the envelope, with the unpaginated total in the `X-Total-Count` header.","schema":{"type":"string","enum":["json","csv"]}},{"name":"include","in":"query","required":false,"description":"Comma-separated related data to embed in each row. Endpoint-specific; joined after pagination, so it costs nothing on rows you don't fetch.","schema":{"type":"string","minLength":1}},{"name":"code","in":"query","required":false,"description":"ISO 4217 alpha code, e.g. `EUR`.","schema":{"type":"string","minLength":3,"maxLength":3}},{"name":"country","in":"query","required":false,"description":"Alpha-2 of a country that uses the currency, e.g. `FR`.","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"type","in":"query","required":false,"description":"ISO 4217 entity type.","schema":{"type":"string","enum":["currency","supranational","fund","precious metal","testing","no-currency","bond market unit","special drawing right"]}}],"responses":{"200":{"description":"Matching rows. A `{ data, meta }` envelope, or a bare array when `raw=1`.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"A currencies record. Fields: code, numericCode, name, type, minorUnit, symbolUnicode, symbolIntl, countries, definitions."}},"meta":{"type":"object","description":"Describes the query that produced `data`.","properties":{"total":{"type":"integer","description":"Rows matching the query, before pagination."},"count":{"type":"integer","description":"Rows in this response, after pagination."},"offset":{"type":"integer"},"limit":{"type":["integer","null"],"description":"null when no limit was requested."},"page":{"type":"integer","description":"Present only when paginating with page/size."},"filters":{"type":"object","description":"The filters that were applied."}},"required":["total","count","offset","limit","filters"]}},"required":["data","meta"]},{"type":"array","items":{"type":"object","description":"A currencies record. Fields: code, numericCode, name, type, minorUnit, symbolUnicode, symbolIntl, countries, definitions."}}]}}}},"400":{"description":"An invalid or unknown query parameter. Never cached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"issues":{"type":"array","description":"One entry per rejected parameter.","items":{"type":"object","properties":{"param":{"type":"string"},"message":{"type":"string"}},"required":["param","message"]}}},"required":["message"]}},"required":["error"]}}}}}}},"/api/historical-currencies":{"get":{"operationId":"listHistorical-currencies","summary":"Withdrawn ISO 4217 currencies (List Three) with their code, numeric code, the country that used them and the date they were withdrawn.","description":"All parameters are optional and combine with AND. An unfiltered request returns the whole dataset. Unknown parameters are rejected with a 400 rather than ignored.","tags":["historical-currencies"],"parameters":[{"name":"q","in":"query","required":false,"description":"Fuzzy search across the dataset's main text fields.","schema":{"type":"string","minLength":1}},{"name":"search","in":"query","required":false,"description":"Alias of `q`. Pass one or the other, not both.","schema":{"type":"string","minLength":1}},{"name":"sort","in":"query","required":false,"description":"Comma-separated fields, each optionally suffixed `:desc` — e.g. `name` or `region:desc,name`.","schema":{"type":"string","minLength":1}},{"name":"fields","in":"query","required":false,"description":"Comma-separated fields to return. Applied after filtering and sorting, so you can sort by a field you don't select.","schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return, up to 500. Omit for all matching rows.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Rows to skip. Cannot be combined with `page`/`size`.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"1-based page number, the spelling the site's own URLs use. Cannot be combined with `limit`/`offset`.","schema":{"type":"integer","minimum":1}},{"name":"size","in":"query","required":false,"description":"Rows per page when using `page`, up to 500. Defaults to 20.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"raw","in":"query","required":false,"description":"Return a bare JSON array instead of the `{ data, meta }` envelope.","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"format","in":"query","required":false,"description":"Response format. `csv` returns a flat table instead of the envelope, with the unpaginated total in the `X-Total-Count` header.","schema":{"type":"string","enum":["json","csv"]}},{"name":"include","in":"query","required":false,"description":"Comma-separated related data to embed in each row. Endpoint-specific; joined after pagination, so it costs nothing on rows you don't fetch.","schema":{"type":"string","minLength":1}},{"name":"code","in":"query","required":false,"description":"ISO 4217 alpha code, e.g. `ESP` for the Spanish peseta.","schema":{"type":"string","minLength":3,"maxLength":3}},{"name":"country","in":"query","required":false,"description":"Alpha-2 of the country that used the currency, e.g. `ES`.","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"isFund","in":"query","required":false,"description":"Fund entries rather than national currencies.","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"withdrawnFrom","in":"query","required":false,"description":"Withdrawn on or after this date, as `YYYY` or `YYYY-MM`.","schema":{"type":"string","minLength":4}},{"name":"withdrawnUntil","in":"query","required":false,"description":"Withdrawn on or before this date, as `YYYY` or `YYYY-MM`.","schema":{"type":"string","minLength":4}}],"responses":{"200":{"description":"Matching rows. A `{ data, meta }` envelope, or a bare array when `raw=1`.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"A historical-currencies record. Fields: code, numericCode, name, country, countryCode, withdrawalDate, isFund."}},"meta":{"type":"object","description":"Describes the query that produced `data`.","properties":{"total":{"type":"integer","description":"Rows matching the query, before pagination."},"count":{"type":"integer","description":"Rows in this response, after pagination."},"offset":{"type":"integer"},"limit":{"type":["integer","null"],"description":"null when no limit was requested."},"page":{"type":"integer","description":"Present only when paginating with page/size."},"filters":{"type":"object","description":"The filters that were applied."}},"required":["total","count","offset","limit","filters"]}},"required":["data","meta"]},{"type":"array","items":{"type":"object","description":"A historical-currencies record. Fields: code, numericCode, name, country, countryCode, withdrawalDate, isFund."}}]}}}},"400":{"description":"An invalid or unknown query parameter. Never cached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"issues":{"type":"array","description":"One entry per rejected parameter.","items":{"type":"object","properties":{"param":{"type":"string"},"message":{"type":"string"}},"required":["param","message"]}}},"required":["message"]}},"required":["error"]}}}}}}},"/api/languages":{"get":{"operationId":"listLanguages","summary":"Languages with their ISO 639-1 / 639-3 codes, English names and native names.","description":"All parameters are optional and combine with AND. An unfiltered request returns the whole dataset. Unknown parameters are rejected with a 400 rather than ignored.","tags":["languages"],"parameters":[{"name":"q","in":"query","required":false,"description":"Fuzzy search across the dataset's main text fields.","schema":{"type":"string","minLength":1}},{"name":"search","in":"query","required":false,"description":"Alias of `q`. Pass one or the other, not both.","schema":{"type":"string","minLength":1}},{"name":"sort","in":"query","required":false,"description":"Comma-separated fields, each optionally suffixed `:desc` — e.g. `name` or `region:desc,name`.","schema":{"type":"string","minLength":1}},{"name":"fields","in":"query","required":false,"description":"Comma-separated fields to return. Applied after filtering and sorting, so you can sort by a field you don't select.","schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return, up to 500. Omit for all matching rows.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Rows to skip. Cannot be combined with `page`/`size`.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"1-based page number, the spelling the site's own URLs use. Cannot be combined with `limit`/`offset`.","schema":{"type":"integer","minimum":1}},{"name":"size","in":"query","required":false,"description":"Rows per page when using `page`, up to 500. Defaults to 20.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"raw","in":"query","required":false,"description":"Return a bare JSON array instead of the `{ data, meta }` envelope.","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"format","in":"query","required":false,"description":"Response format. `csv` returns a flat table instead of the envelope, with the unpaginated total in the `X-Total-Count` header.","schema":{"type":"string","enum":["json","csv"]}},{"name":"include","in":"query","required":false,"description":"Comma-separated related data to embed in each row. Endpoint-specific; joined after pagination, so it costs nothing on rows you don't fetch.","schema":{"type":"string","minLength":1}},{"name":"code","in":"query","required":false,"description":"ISO 639-1 or 639-3 code, e.g. `en` or `eng`.","schema":{"type":"string","minLength":2,"maxLength":3}}],"responses":{"200":{"description":"Matching rows. A `{ data, meta }` envelope, or a bare array when `raw=1`.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"A languages record. Fields: code, iso639_3, name, nativeName, localizedName, bcp47Variants, cldrVariants, intlVariants."}},"meta":{"type":"object","description":"Describes the query that produced `data`.","properties":{"total":{"type":"integer","description":"Rows matching the query, before pagination."},"count":{"type":"integer","description":"Rows in this response, after pagination."},"offset":{"type":"integer"},"limit":{"type":["integer","null"],"description":"null when no limit was requested."},"page":{"type":"integer","description":"Present only when paginating with page/size."},"filters":{"type":"object","description":"The filters that were applied."}},"required":["total","count","offset","limit","filters"]}},"required":["data","meta"]},{"type":"array","items":{"type":"object","description":"A languages record. Fields: code, iso639_3, name, nativeName, localizedName, bcp47Variants, cldrVariants, intlVariants."}}]}}}},"400":{"description":"An invalid or unknown query parameter. Never cached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"issues":{"type":"array","description":"One entry per rejected parameter.","items":{"type":"object","properties":{"param":{"type":"string"},"message":{"type":"string"}},"required":["param","message"]}}},"required":["message"]}},"required":["error"]}}}}}}},"/api/timezones":{"get":{"operationId":"listTimezones","summary":"IANA tzdata timezones with their canonical id, UTC offset, covered countries and coordinates.","description":"All parameters are optional and combine with AND. An unfiltered request returns the whole dataset. Unknown parameters are rejected with a 400 rather than ignored.","tags":["timezones"],"parameters":[{"name":"q","in":"query","required":false,"description":"Fuzzy search across the dataset's main text fields.","schema":{"type":"string","minLength":1}},{"name":"search","in":"query","required":false,"description":"Alias of `q`. Pass one or the other, not both.","schema":{"type":"string","minLength":1}},{"name":"sort","in":"query","required":false,"description":"Comma-separated fields, each optionally suffixed `:desc` — e.g. `name` or `region:desc,name`.","schema":{"type":"string","minLength":1}},{"name":"fields","in":"query","required":false,"description":"Comma-separated fields to return. Applied after filtering and sorting, so you can sort by a field you don't select.","schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return, up to 500. Omit for all matching rows.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Rows to skip. Cannot be combined with `page`/`size`.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"1-based page number, the spelling the site's own URLs use. Cannot be combined with `limit`/`offset`.","schema":{"type":"integer","minimum":1}},{"name":"size","in":"query","required":false,"description":"Rows per page when using `page`, up to 500. Defaults to 20.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"raw","in":"query","required":false,"description":"Return a bare JSON array instead of the `{ data, meta }` envelope.","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"format","in":"query","required":false,"description":"Response format. `csv` returns a flat table instead of the envelope, with the unpaginated total in the `X-Total-Count` header.","schema":{"type":"string","enum":["json","csv"]}},{"name":"include","in":"query","required":false,"description":"Comma-separated related data to embed in each row. Endpoint-specific; joined after pagination, so it costs nothing on rows you don't fetch.","schema":{"type":"string","minLength":1}},{"name":"country","in":"query","required":false,"description":"Alpha-2 of a country the zone covers, e.g. `ES`.","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"region","in":"query","required":false,"description":"Zone region, matched as a substring, e.g. `Europe`.","schema":{"type":"string","minLength":1}},{"name":"utcOffset","in":"query","required":false,"description":"UTC offset, compared numerically so `UTC+9` matches the stored `UTC+09`.","schema":{"type":"string","minLength":3}}],"responses":{"200":{"description":"Matching rows. A `{ data, meta }` envelope, or a bare array when `raw=1`.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"A timezones record. Fields: id, name, offset, region, countryCodes, coordinates, comment."}},"meta":{"type":"object","description":"Describes the query that produced `data`.","properties":{"total":{"type":"integer","description":"Rows matching the query, before pagination."},"count":{"type":"integer","description":"Rows in this response, after pagination."},"offset":{"type":"integer"},"limit":{"type":["integer","null"],"description":"null when no limit was requested."},"page":{"type":"integer","description":"Present only when paginating with page/size."},"filters":{"type":"object","description":"The filters that were applied."}},"required":["total","count","offset","limit","filters"]}},"required":["data","meta"]},{"type":"array","items":{"type":"object","description":"A timezones record. Fields: id, name, offset, region, countryCodes, coordinates, comment."}}]}}}},"400":{"description":"An invalid or unknown query parameter. Never cached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"issues":{"type":"array","description":"One entry per rejected parameter.","items":{"type":"object","properties":{"param":{"type":"string"},"message":{"type":"string"}},"required":["param","message"]}}},"required":["message"]}},"required":["error"]}}}}}}}}}