{"openapi":"3.0.0","info":{"title":"LiveAPI","version":"0.1.0","description":"LiveAPI is a reference data API with one bearer token: IP geolocation (city, region, coordinates and ASN for any IPv4 or IPv6 address, DB-IP data), ISO country profiles and boundaries, LiveAPI's in-house postal code dataset, phone, license plate, IBAN, email and EU VAT (VIES) validation, national ID and tax number checks for 14 countries (POST /v1/validate/{country}/{type}: Brazil CPF and CNPJ, Spain DNI/NIE/CIF, Italy codice fiscale, France SIREN/SIRET/NIR, Poland PESEL/NIP/REGON, Netherlands BSN, Belgium national number, Germany Steuer-ID and USt-IdNr, India PAN and GSTIN, US ABA routing and EIN, Canada SIN, Australia ABN and TFN, Mexico CURP and RFC, Turkey TCKN, VKN and IBAN), Turkey's 81 provinces and 973 districts, official exchange rates from the ECB, the Federal Reserve H.10 and the Turkish Central Bank (TCMB), public holidays and business days, time zones and distance.\n\nAuthentication: send `Authorization: Bearer YOUR_TOKEN`. Get a token at https://liveapi.io/login. Every new account has 100 free calls; only successful 2xx responses use a call. Validation endpoints return 200 with `valid: false` and a `reason` for bad input. Exchange rates default to the ECB; source=fed is the Federal Reserve H.10 and source=tcmb is the TCMB forex and banknote buy and sell list. An MCP server for AI assistants is described on the LiveAPI website. LLM summary: https://liveapi.io/llms.txt.","contact":{"name":"LiveAPI support","email":"info@liveapi.io","url":"https://liveapi.io/support"},"termsOfService":"https://liveapi.io/terms"},"servers":[{"url":"https://liveapi.io","description":"Production"}],"externalDocs":{"description":"API guides with examples","url":"https://liveapi.io/apis"},"components":{"securitySchemes":{"Bearer":{"type":"http","scheme":"bearer","description":"API token."}},"schemas":{"IpLocation":{"type":"object","properties":{"ip":{"type":"string","nullable":true},"version":{"type":"string","nullable":true,"enum":["IPv4","IPv6",null]},"city":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"region_code":{"type":"string","nullable":true},"country_code":{"type":"string","nullable":true},"country_code_iso3":{"type":"string","nullable":true},"country_name":{"type":"string","nullable":true},"country_name_tr":{"type":"string","nullable":true},"country_capital":{"type":"string","nullable":true},"country_tld":{"type":"string","nullable":true},"country_flag":{"type":"string","nullable":true},"continent_code":{"type":"string","nullable":true},"in_eu":{"type":"boolean","nullable":true},"postal":{"type":"string","nullable":true},"latitude":{"type":"number","nullable":true},"longitude":{"type":"number","nullable":true},"timezone":{"type":"string","nullable":true},"utc_offset":{"type":"string","nullable":true},"country_calling_code":{"type":"string","nullable":true},"currency":{"type":"string","nullable":true},"currency_name":{"type":"string","nullable":true},"languages":{"type":"string","nullable":true},"language_codes":{"type":"array","items":{"type":"string"}},"country_area":{"type":"number","nullable":true},"asn":{"type":"string","nullable":true},"org":{"type":"string","nullable":true},"colo":{"type":"string","nullable":true},"metro_code":{"type":"string","nullable":true},"browser_language":{"type":"string","nullable":true},"source":{"type":"string","nullable":true,"enum":["cloudflare","db-ip",null]},"attribution":{"type":"string","nullable":true},"attribution_url":{"type":"string","nullable":true},"is_tor":{"type":"boolean","nullable":true,"description":"Listed in the Tor Project bulk exit list (refreshed hourly). null when the list is not loaded."},"is_hosting":{"type":"boolean","nullable":true,"description":"Inside a published cloud range (AWS, Google Cloud, Azure, Cloudflare, Oracle, DigitalOcean) or a hosting ASN (Hetzner, OVHcloud, ...). null when the data is not loaded. VPN detection is not offered."},"hosting_provider":{"type":"string","nullable":true}},"required":["ip","version","city","region","region_code","country_code","country_code_iso3","country_name","country_name_tr","country_capital","country_tld","country_flag","continent_code","in_eu","postal","latitude","longitude","timezone","utc_offset","country_calling_code","currency","currency_name","languages","language_codes","country_area","asn","org","colo","metro_code","browser_language","source","attribution","attribution_url","is_tor","is_hosting","hosting_provider"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]},"Country":{"type":"object","properties":{"code":{"type":"string"},"iso3":{"type":"string"},"numeric":{"type":"string","nullable":true},"name":{"type":"string"},"official_name":{"type":"string"},"name_tr":{"type":"string","nullable":true},"capital":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"subregion":{"type":"string","nullable":true},"tld":{"type":"string","nullable":true},"flag":{"type":"string","nullable":true},"latitude":{"type":"number","nullable":true},"longitude":{"type":"number","nullable":true},"area_km2":{"type":"number","nullable":true},"independent":{"type":"boolean"},"currencies":{"type":"array","items":{"$ref":"#/components/schemas/Currency"}},"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"}},"required":["code","name"]}},"calling_code":{"type":"string","nullable":true},"in_eu":{"type":"boolean"},"geoshape":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["Polygon"]},"coordinates":{"type":"array","items":{"type":"array","items":{"type":"array","items":{"anyOf":[{"type":"number","minimum":-180,"maximum":180},{"type":"number","minimum":-90,"maximum":90}]},"minItems":2,"maxItems":2},"minItems":4},"minItems":1}},"required":["type","coordinates"]},{"type":"object","properties":{"type":{"type":"string","enum":["MultiPolygon"]},"coordinates":{"type":"array","items":{"type":"array","items":{"type":"array","items":{"type":"array","items":{"anyOf":[{"type":"number","minimum":-180,"maximum":180},{"type":"number","minimum":-90,"maximum":90}]},"minItems":2,"maxItems":2},"minItems":4},"minItems":1},"minItems":1}},"required":["type","coordinates"]},{"nullable":true}],"description":"GeoJSON geometry; only included with include=geoshape. Null if this country has no shape in the loaded dataset."},"geoshape_attribution":{"type":"object","properties":{"source":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"license":{"type":"string","nullable":true}},"required":["source","url","license"]}},"required":["code","iso3","numeric","name","official_name","name_tr","capital","region","subregion","tld","flag","latitude","longitude","area_km2","independent","currencies","languages","calling_code","in_eu"]},"Currency":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string","nullable":true}},"required":["code","name","symbol"]},"Division":{"type":"object","properties":{"id":{"type":"string","example":"TR-34"},"country":{"type":"string"},"code":{"type":"string"},"name":{"type":"string"},"level":{"type":"integer","minimum":0,"exclusiveMinimum":true},"parent_id":{"type":"string","nullable":true}},"required":["id","country","code","name","level","parent_id"]},"DivisionDetail":{"allOf":[{"$ref":"#/components/schemas/Division"},{"type":"object","properties":{"children":{"type":"array","items":{"$ref":"#/components/schemas/Division"}}},"required":["children"]}]},"PhoneValidation":{"type":"object","properties":{"valid":{"type":"boolean"},"possible":{"type":"boolean"},"reason":{"type":"string","nullable":true},"e164":{"type":"string","nullable":true},"national":{"type":"string","nullable":true},"international":{"type":"string","nullable":true},"country":{"type":"string","nullable":true},"calling_code":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["valid","possible","reason","e164","national","international","country","calling_code","type"]},"PlateValidation":{"type":"object","properties":{"valid":{"type":"boolean"},"reason":{"type":"string","nullable":true},"normalized":{"type":"string","nullable":true},"country":{"type":"string"},"province_code":{"type":"string","nullable":true},"province_name":{"type":"string","nullable":true}},"required":["valid","reason","normalized","country","province_code","province_name"]},"Rates":{"oneOf":[{"type":"object","properties":{"source":{"type":"string","enum":["ecb"]},"base":{"type":"string","enum":["EUR"]},"date":{"type":"string","nullable":true},"fetched_at":{"type":"string"},"rates":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"rate":{"type":"number"}},"required":["code","rate"]}}},"required":["source","base","date","fetched_at","rates"]},{"type":"object","properties":{"source":{"type":"string","enum":["fed"]},"base":{"type":"string","enum":["USD"]},"date":{"type":"string","nullable":true},"fetched_at":{"type":"string"},"rates":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"rate":{"type":"number"}},"required":["code","rate"]}}},"required":["source","base","date","fetched_at","rates"]},{"type":"object","properties":{"source":{"type":"string","enum":["tcmb"]},"base":{"type":"string","enum":["TRY"]},"date":{"type":"string","nullable":true},"fetched_at":{"type":"string"},"rates":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"unit":{"type":"number","enum":[1]},"source_unit":{"type":"number"},"forex_buying":{"type":"number","nullable":true},"forex_selling":{"type":"number","nullable":true},"banknote_buying":{"type":"number","nullable":true},"banknote_selling":{"type":"number","nullable":true}},"required":["code","name","unit","source_unit","forex_buying","forex_selling","banknote_buying","banknote_selling"]}}},"required":["source","base","date","fetched_at","rates"]}]},"Conversion":{"type":"object","properties":{"from":{"type":"string","example":"USD"},"to":{"type":"string","example":"TRY"},"amount":{"type":"number"},"rate":{"type":"number","description":"Units of to per 1 unit of from."},"result":{"type":"number"},"source":{"type":"string","enum":["ecb","fed","tcmb"]},"base":{"type":"string"},"date":{"type":"string","nullable":true,"description":"Day the rates belong to."},"tcmb_rate":{"type":"string","nullable":true}},"required":["from","to","amount","rate","result","source","base","date","tcmb_rate"]},"Distance":{"type":"object","properties":{"kilometers":{"type":"number"},"from":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"country":{"type":"string","nullable":true},"label":{"type":"string","nullable":true}},"required":["latitude","longitude","country","label"]},"to":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"country":{"type":"string","nullable":true},"label":{"type":"string","nullable":true}},"required":["latitude","longitude","country","label"]}},"required":["kilometers","from","to"]},"IbanValidation":{"type":"object","properties":{"valid":{"type":"boolean"},"reason":{"type":"string","nullable":true,"description":"invalid_format, unsupported_country, invalid_length, or invalid_checksum."},"iban":{"type":"string","nullable":true,"example":"TR330006100519786457841326"},"formatted":{"type":"string","nullable":true,"example":"TR33 0006 1005 1978 6457 8413 26"},"country":{"type":"string","nullable":true},"check_digits":{"type":"string","nullable":true},"bban":{"type":"string","nullable":true},"bank_code":{"type":"string","nullable":true,"description":"Turkish IBANs only: the 5-digit bank field."},"bank_name":{"type":"string","nullable":true,"description":"Turkish IBANs only, from the TCMB participant list."}},"required":["valid","reason","iban","formatted","country","check_digits","bban","bank_code","bank_name"]},"TrNumberValidation":{"type":"object","properties":{"valid":{"type":"boolean"},"reason":{"type":"string","nullable":true,"description":"not_numeric, invalid_length, leading_zero, or invalid_checksum."},"type":{"type":"string","enum":["tckn","vkn"]},"registry_checked":{"type":"boolean","enum":[false]}},"required":["valid","reason","type","registry_checked"]},"IdType":{"type":"object","properties":{"country":{"type":"string","example":"BR"},"type":{"type":"string","example":"cpf"},"name":{"type":"string","example":"CPF"},"holder":{"type":"string","enum":["person","entity","bank"]},"description":{"type":"string"},"example":{"type":"string","example":"529.982.247-25"},"path":{"type":"string","example":"/v1/validate/BR/cpf"}},"required":["country","type","name","holder","description","example","path"]},"IdValidation":{"type":"object","properties":{"valid":{"type":"boolean"},"normalized":{"type":"string","nullable":true,"description":"The value with separators removed and uppercased, or null if it could not be read."},"country":{"type":"string","example":"BR"},"type":{"type":"string","example":"cpf"},"reason":{"type":"string","nullable":true,"description":"invalid_format, invalid_length, invalid_checksum, invalid_date, invalid_prefix or unsupported_country; null when valid."},"details":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"nullable":true}]},"description":"Facts encoded in the number itself, such as birth date and sex (IT, PL, MX, BE) or entity type. Only when the type carries them."},"registry_checked":{"type":"boolean","enum":[false]}},"required":["valid","normalized","country","type","reason","registry_checked"]},"PostalCode":{"type":"object","properties":{"country":{"type":"string","example":"US"},"query":{"type":"string","example":"90210"},"postal_code":{"type":"string","example":"90210"},"match":{"type":"string","enum":["exact","partial"],"description":"Exact for the current LiveAPI dataset; partial remains for backward response compatibility."},"partial_data":{"type":"boolean","description":"Backward-compatible coverage flag; false for the current LiveAPI dataset."},"coverage_note":{"type":"string","nullable":true},"places":{"type":"array","items":{"type":"object","properties":{"postal_code":{"type":"string"},"place":{"type":"string","example":"Beverly Hills"},"admin1":{"type":"string","nullable":true,"example":"California"},"admin1_code":{"type":"string","nullable":true,"example":"CA"},"admin2":{"type":"string","nullable":true,"example":"Los Angeles"},"admin2_code":{"type":"string","nullable":true},"admin3":{"type":"string","nullable":true},"admin3_code":{"type":"string","nullable":true},"latitude":{"type":"number","nullable":true},"longitude":{"type":"number","nullable":true},"accuracy":{"type":"number","nullable":true,"description":"Coordinate accuracy level supplied by the LiveAPI dataset."}},"required":["postal_code","place","admin1","admin1_code","admin2","admin2_code","admin3","admin3_code","latitude","longitude","accuracy"]}},"updated":{"type":"string"},"attribution":{"type":"object","properties":{"source":{"type":"string","enum":["LiveAPI"]},"url":{"type":"string","enum":["https://liveapi.io/"]},"license":{"type":"string","enum":["Proprietary"]}},"required":["source","url","license"]}},"required":["country","query","postal_code","match","partial_data","coverage_note","places","updated","attribution"]},"ReverseGeocode":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"country_code":{"type":"string","example":"TR"},"country_name":{"type":"string","nullable":true},"admin1":{"type":"object","nullable":true,"properties":{"code":{"type":"string","nullable":true},"name":{"type":"string"},"type":{"type":"string","nullable":true}},"required":["code","name","type"],"description":"First-level division (state, province, il), ISO 3166-2 code where Natural Earth has one."},"admin2":{"type":"object","nullable":true,"properties":{"id":{"type":"string","nullable":true},"name":{"type":"string"},"type":{"type":"string","nullable":true}},"required":["id","name","type"],"description":"Second-level division. Turkey only (ilçe), with the id used by /v1/countries/TR/divisions; null elsewhere."},"precision":{"type":"string","enum":["admin2","admin1"]},"attribution":{"type":"string"}},"required":["latitude","longitude","country_code","country_name","admin1","admin2","precision","attribution"]},"UserAgent":{"type":"object","properties":{"ua":{"type":"string","example":"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1"},"browser":{"type":"object","properties":{"name":{"type":"string","nullable":true},"version":{"type":"string","nullable":true},"major":{"type":"string","nullable":true}},"required":["name","version","major"]},"engine":{"type":"object","properties":{"name":{"type":"string","nullable":true},"version":{"type":"string","nullable":true}},"required":["name","version"]},"os":{"type":"object","properties":{"name":{"type":"string","nullable":true},"version":{"type":"string","nullable":true}},"required":["name","version"]},"device":{"type":"object","properties":{"type":{"type":"string","description":"mobile, tablet, smarttv, console, wearable, embedded, xr, desktop, bot or unknown"},"vendor":{"type":"string","nullable":true},"model":{"type":"string","nullable":true}},"required":["type","vendor","model"]},"cpu":{"type":"object","properties":{"architecture":{"type":"string","nullable":true}},"required":["architecture"]},"is_bot":{"type":"boolean"},"bot_match":{"type":"string","nullable":true,"description":"The token that identified a crawler, when is_bot is true."}},"required":["ua","browser","engine","os","device","cpu","is_bot","bot_match"]},"UserAgentRequest":{"type":"object","properties":{"ua":{"type":"string","minLength":1,"maxLength":4096}},"required":["ua"]},"Barcode":{"type":"object","properties":{"input":{"type":"string"},"normalized":{"type":"string","example":"9780306406157"},"valid":{"type":"boolean"},"type":{"type":"string","nullable":true,"enum":["ean8","upca","ean13","gtin14","isbn10","isbn13",null]},"reason":{"type":"string","nullable":true,"enum":["invalid_characters","invalid_length","invalid_check_digit",null]},"check_digit":{"type":"string","nullable":true},"expected_check_digit":{"type":"string","nullable":true},"gtin14":{"type":"string","nullable":true,"description":"The code padded to 14 digits, when valid."},"isbn10":{"type":"string","nullable":true,"description":"ISBN-10 form. Only 978-prefixed ISBN-13s have one."},"isbn13":{"type":"string","nullable":true}},"required":["input","normalized","valid","type","reason","check_digit","expected_check_digit","gtin14","isbn10","isbn13"]},"HolidayList":{"type":"object","properties":{"country":{"type":"string"},"year":{"type":"integer"},"source":{"type":"string","enum":["liveapi-tr","nager.date"]},"holidays":{"type":"array","items":{"$ref":"#/components/schemas/Holiday"}}},"required":["country","year","source","holidays"]},"Holiday":{"type":"object","properties":{"date":{"type":"string","example":"2026-03-20"},"name":{"type":"string"},"local_name":{"type":"string"},"half_day":{"type":"boolean","description":"True for a half-day public holiday, such as a Turkish bayram eve from 13:00."},"nationwide":{"type":"boolean","description":"False when only some regions observe it."}},"required":["date","name","local_name","half_day","nationwide"]},"BusinessDays":{"type":"object","properties":{"country":{"type":"string"},"start":{"type":"string"},"days":{"type":"integer","nullable":true},"end":{"type":"string"},"business_days":{"type":"integer"},"weekend":{"type":"array","items":{"type":"integer"}},"holidays_skipped":{"type":"array","items":{"type":"string"}}},"required":["country","start","days","end","business_days","weekend","holidays_skipped"]},"Timezone":{"type":"object","properties":{"timezone":{"type":"string","example":"Europe/Istanbul"},"utc_offset":{"type":"string","nullable":true,"example":"+0300"},"abbreviation":{"type":"string","nullable":true,"example":"GMT+3"},"is_dst":{"type":"boolean"},"local_time":{"type":"string","example":"2026-10-31T14:05:00+03:00"},"country_code":{"type":"string","nullable":true},"timezones":{"type":"array","items":{"type":"string"},"description":"Every IANA zone of the country, when country was sent."},"source":{"type":"string","enum":["coordinates","country"]}},"required":["timezone","utc_offset","abbreviation","is_dst","local_time","country_code","timezones","source"]},"EmailCheck":{"type":"object","properties":{"email":{"type":"string"},"valid":{"type":"boolean","description":"Syntax is valid and, when DNS was checked, the domain can receive mail. Does not prove the mailbox exists."},"reason":{"type":"string","nullable":true,"example":null},"normalized":{"type":"string","nullable":true},"local_part":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true,"description":"Lowercase, internationalized names in punycode."},"syntax_valid":{"type":"boolean"},"dns_checked":{"type":"boolean"},"domain_exists":{"type":"boolean","nullable":true},"accepts_mail":{"type":"boolean","nullable":true},"mx_records":{"type":"array","items":{"type":"object","properties":{"priority":{"type":"integer"},"exchange":{"type":"string"}},"required":["priority","exchange"]}},"disposable":{"type":"boolean"},"role":{"type":"boolean","description":"Shared role address such as info@ or support@."}},"required":["email","valid","reason","normalized","local_part","domain","syntax_valid","dns_checked","domain_exists","accepts_mail","mx_records","disposable","role"]},"VatCheck":{"type":"object","properties":{"country_code":{"type":"string","example":"DE"},"vat_number":{"type":"string","example":"811569869"},"valid":{"type":"boolean"},"name":{"type":"string","nullable":true,"description":"Null when the member state does not share it."},"address":{"type":"string","nullable":true},"request_date":{"type":"string"},"source":{"type":"string","enum":["vies"]}},"required":["country_code","vat_number","valid","name","address","request_date","source"]}},"parameters":{}},"paths":{"/v1/ip":{"get":{"tags":["Location"],"summary":"Location of the calling device","description":"Returns the location Cloudflare attaches to the calling device. A browser or mobile app should call this endpoint directly. A server-side call returns the server's location. is_tor, is_hosting and hosting_provider flag Tor exit nodes and cloud or hosting networks; they are null until the risk data is loaded, and VPN detection is not offered. Country details such as currency, calling code, and languages are added from the country code. One field is available as plain text at /v1/ip/{field}.","security":[{"Bearer":[]}],"responses":{"200":{"description":"Device location","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpLocation"}}}},"401":{"description":"Invalid token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ip/{ip}/{field}":{"get":{"tags":["Location"],"summary":"One location field for an IP address","description":"Plain text from DB-IP City Lite and ASN Lite, joined with the country profile. country is the ISO code. city, region, latitude, longitude, latlong, asn, and org are available. timezone and utc_offset are derived from the coordinates with tz-lookup (CC0). postal is not in these files and returns 404. IP Geolocation by DB-IP, https://db-ip.com, CC BY 4.0.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"8.8.8.8"},"required":true,"name":"ip","in":"path"},{"schema":{"type":"string","example":"country","description":"country, country_name, city, region, region_code, postal, latitude, longitude, latlong, timezone, utc_offset, org, asn, currency, continent, calling_code"},"required":true,"description":"country, country_name, city, region, region_code, postal, latitude, longitude, latlong, timezone, utc_offset, org, asn, currency, continent, calling_code","name":"field","in":"path"}],"responses":{"200":{"description":"Field value","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Unknown field, empty field, or no record for this address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Location database is not loaded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ip/{field}":{"get":{"tags":["Location"],"summary":"One location field, or an IP address lookup","description":"A field name returns text/plain for the calling device. country is the ISO code. latlong is latitude,longitude with six decimal places. An IP address returns JSON for that address instead: country, region, city, latitude and longitude from DB-IP City Lite, and ASN and organization from DB-IP ASN Lite, joined with the country profile and the Tor and hosting flags. Postal code is not in these files and is null. timezone and utc_offset are derived from the city coordinates with tz-lookup (CC0). Coordinates point to the city, not to the device. IP Geolocation by DB-IP, https://db-ip.com, CC BY 4.0.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"country","description":"country, country_name, city, region, region_code, postal, latitude, longitude, latlong, timezone, utc_offset, org, asn, currency, continent, calling_code"},"required":true,"description":"country, country_name, city, region, region_code, postal, latitude, longitude, latlong, timezone, utc_offset, org, asn, currency, continent, calling_code","name":"field","in":"path"}],"responses":{"200":{"description":"Text for a calling-device field, or JSON for an IP address lookup","content":{"text/plain":{"schema":{"type":"string"}},"application/json":{"schema":{"$ref":"#/components/schemas/IpLocation"}}}},"404":{"description":"Unknown field, empty field, or no record for this address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Location database is not loaded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/countries":{"get":{"tags":["Countries"],"summary":"List countries","description":"ISO country profiles. Filter with q by name, Turkish name, or code. Built from world-countries (ODbL) and libphonenumber calling codes.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","description":"Name or code","example":"turkey"},"required":false,"description":"Name or code","name":"q","in":"query"}],"responses":{"200":{"description":"Countries","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Country"}}}}}}}},"/v1/countries/{code}":{"get":{"tags":["Countries"],"summary":"Get one country","description":"Add include=geoshape to return the GeoJSON Polygon or MultiPolygon and its source attribution. Geometry is stored separately from the base profile.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"TR"},"required":true,"name":"code","in":"path"},{"schema":{"type":"string","enum":["geoshape"]},"required":false,"name":"include","in":"query"}],"responses":{"200":{"description":"Country","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Country"}}}},"400":{"description":"Invalid include value","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Country not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Requested geometry data unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/countries/{code}/divisions":{"get":{"tags":["Countries"],"summary":"First-level administrative divisions","description":"Only Turkish provinces are loaded. Other countries return an empty list. One province is available at /v1/countries/TR/divisions/34 or /v1/divisions/TR-34.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"TR"},"required":true,"name":"code","in":"path"}],"responses":{"200":{"description":"Administrative divisions","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Division"}}}}},"404":{"description":"Country not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/countries/{code}/divisions/{divisionCode}":{"get":{"tags":["Countries"],"summary":"Get one division by country path","description":"The division code is scoped to the country. TR and 34 are Istanbul. The id field is still TR-34. Same body as /v1/divisions/TR-34.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"TR"},"required":true,"name":"code","in":"path"},{"schema":{"type":"string","example":"34"},"required":true,"name":"divisionCode","in":"path"}],"responses":{"200":{"description":"Division","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DivisionDetail"}}}},"404":{"description":"Country or division not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/countries/{code}/divisions/{divisionCode}/children":{"get":{"tags":["Countries"],"summary":"List child divisions by country path","description":"Districts (ilçe) of a Turkish province, level 2, with ids such as TR-34-KADIKOY. All 973 districts of the 81 provinces are loaded, from OpenStreetMap (ODbL 1.0, © OpenStreetMap contributors, https://www.openstreetmap.org/copyright). Neighbourhoods (mahalle) and postal codes are not included. Other countries return an empty list. Same body as /v1/divisions/TR-34/children.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"TR"},"required":true,"name":"code","in":"path"},{"schema":{"type":"string","example":"34"},"required":true,"name":"divisionCode","in":"path"}],"responses":{"200":{"description":"Child divisions","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Division"}}}}},"404":{"description":"Country or division not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/divisions/{id}":{"get":{"tags":["Countries"],"summary":"Get one division by id","description":"The stable id includes the country code, for example TR-34, or TR-34-KADIKOY for a district. Same body as /v1/countries/TR/divisions/34.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"TR-34"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Division","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DivisionDetail"}}}},"404":{"description":"Division not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/divisions/{id}/children":{"get":{"tags":["Countries"],"summary":"List child divisions by id","description":"Districts of a province, for example TR-34. A district id such as TR-34-KADIKOY works with /v1/divisions/{id} and has no children. District data © OpenStreetMap contributors, ODbL 1.0 (https://www.openstreetmap.org/copyright). Same body as /v1/countries/TR/divisions/34/children.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"TR-34"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Child divisions","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Division"}}}}},"404":{"description":"Division not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/currencies":{"get":{"tags":["Rates"],"summary":"List currencies","description":"Currencies taken from country profiles. Exchange rates default to the ECB at /v1/rates.","security":[{"Bearer":[]}],"responses":{"200":{"description":"Currencies","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Currency"}}}}}}}},"/v1/phones/codes":{"get":{"tags":["Phone"],"summary":"Country calling codes","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","example":"TR"},"required":false,"name":"country","in":"query"}],"responses":{"200":{"description":"Calling codes","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string"},"name":{"type":"string"},"calling_code":{"type":"string"}},"required":["country","name","calling_code"]}}}}}}}},"/v1/phones/validate":{"post":{"tags":["Phone"],"summary":"Validate a phone number format","description":"Does not check whether the line is active. Country, type, and E.164 format come from libphonenumber metadata. An invalid number still returns 200.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"number":{"type":"string","example":"+905551112233"},"country":{"type":"string","example":"TR","description":"When omitted, the country is read from the number itself."}},"required":["number"]}}}},"responses":{"200":{"description":"Validation result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneValidation"}}}}}}},"/v1/plates/formats":{"get":{"tags":["Plate"],"summary":"Supported plate formats","security":[{"Bearer":[]}],"responses":{"200":{"description":"Formats","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string"},"description":{"type":"string"},"example":{"type":"string"}},"required":["country","description","example"]}}}}}}}},"/v1/plates/validate":{"post":{"tags":["Plate"],"summary":"Validate a plate format","description":"Checks the pattern only. It does not look up vehicle registration. Turkish plates must use a province code from 01 to 81. An invalid plate still returns 200.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"plate":{"type":"string","example":"34 ABC 123"},"country":{"type":"string","example":"TR"}},"required":["plate","country"]}}}},"responses":{"200":{"description":"Validation result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlateValidation"}}}}}}},"/v1/rates":{"get":{"tags":["Rates"],"summary":"Official exchange rates","description":"The default source is ecb: euro reference rates, one price per currency, updated each business day. source=fed is the Federal Reserve H.10, base USD, published weekly. Quotes the Fed states as dollars per currency unit are inverted, so every fed rate is units of that currency per 1 dollar. source=tcmb is the Turkish Central Bank, base TRY, with forex and banknote buy and sell rates. Rates are stored in KV. date is the day the rate belongs to. When TCMB publishes a rate per 100 units, the value is normalized to 1 unit and source_unit keeps the original unit. Send date=YYYY-MM-DD for a past day (ecb from 1999-01-04 via the ECB Data Portal, tcmb from 1996-04-16 via the TCMB archive); on a weekend or holiday you get the last published day before it, and the response date says which day that is. fed has no history here and returns 400 with a date.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","enum":["ecb","fed","tcmb"],"example":"ecb"},"required":false,"name":"source","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2025-12-31"},"required":false,"name":"date","in":"query"}],"responses":{"200":{"description":"Rates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rates"}}}},"400":{"description":"Date out of range or not supported for this source","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source unavailable and no cache","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/rates/convert":{"get":{"tags":["Rates"],"summary":"Convert an amount between currencies","description":"Converts with official reference rates, crossing through the source's base currency (EUR for ecb, USD for fed, TRY for tcmb). tcmb uses forex_buying unless tcmb_rate says otherwise. date works as on /v1/rates, except fed, which is current only. These are central bank reference rates for accounting and reporting, not the rate a bank or card network charges, and they are not live market quotes.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":3,"maxLength":3,"example":"USD"},"required":true,"name":"from","in":"query"},{"schema":{"type":"string","minLength":3,"maxLength":3,"example":"TRY"},"required":true,"name":"to","in":"query"},{"schema":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":1000000000000000,"example":100},"required":false,"name":"amount","in":"query"},{"schema":{"type":"string","enum":["ecb","fed","tcmb"],"example":"tcmb"},"required":false,"name":"source","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2025-12-31"},"required":false,"name":"date","in":"query"},{"schema":{"type":"string","enum":["forex_buying","forex_selling","banknote_buying","banknote_selling"]},"required":false,"name":"tcmb_rate","in":"query"}],"responses":{"200":{"description":"Conversion","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Conversion"}}}},"400":{"description":"Unknown currency or unsupported date","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source unavailable and no cache","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/geo/distance":{"post":{"tags":["Location"],"summary":"Distance between two points","description":"A point is either latitude and longitude, or a country code. A country code uses the geographic center of the country, not the capital.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"country":{"type":"string","minLength":2,"maxLength":2}}},"to":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"country":{"type":"string","minLength":2,"maxLength":2}}}},"required":["from","to"]}}}},"responses":{"200":{"description":"Kilometers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Distance"}}}},"400":{"description":"Point could not be resolved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iban/validate":{"post":{"tags":["Finance"],"summary":"Validate an IBAN","description":"Checks the country length from the SWIFT IBAN Registry (ISO 13616) and the ISO 7064 mod-97 check digits, then returns the IBAN in print format with its BBAN. For Turkish IBANs the bank code and bank name come from the TCMB payment systems participant list. Does not check that the account exists, is open, or belongs to anyone. An invalid IBAN still returns 200 with valid false and a reason.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","maxLength":64,"example":"TR33 0006 1005 1978 6457 8413 26"}},"required":["iban"]}}}},"responses":{"200":{"description":"Validation result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IbanValidation"}}}}}}},"/v1/tr/identity/validate":{"post":{"tags":["Turkey"],"summary":"Check a T.C. Kimlik No format","description":"Checks the 11-digit Turkish identity number: digits only, no leading zero, and both check digits. This is an algorithmic format check only. It is not an NVİ (MERNİS) or GİB registry lookup and does not confirm that the person or company exists, is active, or matches a name. The number is not stored or logged. An invalid number still returns 200 with valid false and a reason.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"number":{"type":"string","maxLength":32,"example":"10000000146"}},"required":["number"]}}}},"responses":{"200":{"description":"Format check result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrNumberValidation"}}}}}}},"/v1/tr/tax-number/validate":{"post":{"tags":["Turkey"],"summary":"Check a Vergi Kimlik No format","description":"Checks the 10-digit Turkish tax number (VKN) and its check digit. Individuals use their T.C. Kimlik No as tax number; check those with /v1/tr/identity/validate. This is an algorithmic format check only. It is not an NVİ (MERNİS) or GİB registry lookup and does not confirm that the person or company exists, is active, or matches a name. The number is not stored or logged. An invalid number still returns 200 with valid false and a reason.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"number":{"type":"string","maxLength":32,"example":"1234567890"}},"required":["number"]}}}},"responses":{"200":{"description":"Format check result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrNumberValidation"}}}}}}},"/v1/validate":{"get":{"tags":["ID validation"],"summary":"List supported national ID and tax number types","description":"Every country and type pair that POST /v1/validate/{country}/{type} accepts, with a public test example. Currently: AU/abn, AU/tfn, BE/national_number, BR/cpf, BR/cnpj, CA/sin, FR/siren, FR/siret, FR/nir, DE/steuer_id, DE/ust_idnr, IN/pan, IN/gstin, IT/codice_fiscale, IT/partita_iva, MX/curp, MX/rfc, NL/bsn, PL/pesel, PL/nip, PL/regon, ES/dni, ES/nie, ES/cif, TR/tc_kimlik, TR/vkn, TR/iban, US/aba_routing, US/ein.","security":[{"Bearer":[]}],"responses":{"200":{"description":"Supported types","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IdType"}}},"required":["data"]}}}}}}},"/v1/validate/{country}/{type}":{"post":{"tags":["ID validation"],"summary":"Check a national ID, tax or company number","description":"Runs the published check-digit and format rules for one national identifier (for example AU/abn, BE/national_number, BR/cpf, BR/cnpj including the alphanumeric CNPJ, CA/sin, FR/siret, DE/steuer_id, IN/gstin, IT/codice_fiscale, MX/curp, NL/bsn, PL/pesel, ES/dni, TR/tc_kimlik, US/aba_routing). This is an algorithmic check only: it does not query any government registry and does not confirm that the person or company exists. The value is not stored or logged; request logs keep only the route pattern. Separators (spaces, dots, hyphens, slashes) are ignored. An invalid value still returns 200 with valid false and a reason. Aadhaar, US SSN and Japan's My Number are not offered.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":2,"example":"BR"},"required":true,"name":"country","in":"path"},{"schema":{"type":"string","minLength":2,"maxLength":32,"example":"cpf"},"required":true,"name":"type","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","maxLength":64,"example":"529.982.247-25"}},"required":["value"]}}}},"responses":{"200":{"description":"Check result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdValidation"}}}},"404":{"description":"Unknown country or type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/postal-codes":{"get":{"tags":["Postal codes"],"summary":"List countries with postal code data","description":"Countries covered by LiveAPI's in-house postal dataset, with row counts and a compatibility partial flag.","security":[{"Bearer":[]}],"responses":{"200":{"description":"Covered countries","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string"},"count":{"type":"number"},"partial":{"type":"boolean"},"updated":{"type":"string"}},"required":["country","count","partial","updated"]}},"attribution":{"type":"object","properties":{"source":{"type":"string","enum":["LiveAPI"]},"url":{"type":"string","enum":["https://liveapi.io/"]},"license":{"type":"string","enum":["Proprietary"]}},"required":["source","url","license"]}},"required":["data","attribution"]}}}},"503":{"description":"Postal data not loaded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/postal-codes/{country}/{code}":{"get":{"tags":["Postal codes"],"summary":"Look up a postal code","description":"Returns places, administrative areas and coordinates for a postal code. Spaces and hyphens are ignored. Data is produced and maintained by LiveAPI.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":2,"example":"US"},"required":true,"name":"country","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":16,"example":"90210"},"required":true,"name":"code","in":"path"}],"responses":{"200":{"description":"Postal code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostalCode"}}}},"404":{"description":"Unknown code or country","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Postal data not loaded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reverse":{"get":{"tags":["Location"],"summary":"Country and administrative area for a coordinate","description":"Point-in-polygon lookup. Every country down to the first-level division (state, province, region) from Natural Earth 1:10m admin-1 (public domain), and Turkey down to the district (ilçe) from geoBoundaries / OpenStreetMap (ODbL). No street, city or postal code. Natural Earth borders are generalized at 1:10,000,000, so points within roughly 1 km of a border or coastline can resolve to the neighbour or to nothing; a point at sea returns 404. Request logs keep only the route pattern, not the coordinates.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"number","nullable":true,"minimum":-90,"maximum":90,"example":41.0082},"required":false,"name":"lat","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":-180,"maximum":180,"example":28.9784},"required":false,"name":"lon","in":"query"}],"responses":{"200":{"description":"Area for the point","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseGeocode"}}}},"400":{"description":"lat or lon missing or out of range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No land area at this point","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Boundary data is not loaded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/user-agent":{"get":{"tags":["User agent"],"summary":"Parse the caller's own User-Agent","description":"Parses the User-Agent header of this request. Parsed with ua-parser-js 1.x (MIT) and isbot (Unlicense). The User-Agent string is not stored or logged; request logs keep only the route pattern. Strings longer than 1024 characters are truncated. Browsers that send reduced User-Agent strings (Chrome's frozen OS version, for example) can only be parsed as far as the string goes.","security":[{"Bearer":[]}],"responses":{"200":{"description":"Parsed User-Agent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAgent"}}}},"400":{"description":"No User-Agent header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["User agent"],"summary":"Parse a given User-Agent string","description":"Parses the ua field of the JSON body. Parsed with ua-parser-js 1.x (MIT) and isbot (Unlicense). The User-Agent string is not stored or logged; request logs keep only the route pattern. Strings longer than 1024 characters are truncated. Browsers that send reduced User-Agent strings (Chrome's frozen OS version, for example) can only be parsed as far as the string goes.","security":[{"Bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAgentRequest"}}}},"responses":{"200":{"description":"Parsed User-Agent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAgent"}}}},"400":{"description":"Missing or empty ua","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/barcodes/validate":{"get":{"tags":["Barcodes"],"summary":"Validate an EAN, UPC, GTIN or ISBN","description":"Checks the check digit of EAN-8, UPC-A (GTIN-12), EAN-13, GTIN-14, ISBN-10 and ISBN-13, detects the type from the length, and converts between ISBN-10, ISBN-13 and GTIN-14. Spaces and hyphens are ignored. Algorithmic only: no product or book database is queried, so a valid code is not proof that a product exists. An invalid code still returns 200 with valid set to false and a reason.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"example":"978-0-306-40615-7"},"required":true,"name":"code","in":"query"}],"responses":{"200":{"description":"Check result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Barcode"}}}},"400":{"description":"code missing or too long","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/holidays":{"get":{"tags":["Calendar"],"summary":"Public holidays of a country","description":"Statutory public holidays for one country and year. Turkey for 2024-2027 is built in from Law 2429 and the Diyanet İşleri Başkanlığı religious calendar, including the half-day eves (arife) from 13:00. Other countries and years come from Nager.Date (MIT) and are cached for 30 days. Does not include regional-only bank holidays as closed days, administrative leave (idari izin) announced by decree, or observances that are not days off.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":2,"example":"TR"},"required":true,"name":"country","in":"query"},{"schema":{"type":"integer","minimum":1975,"maximum":2075,"example":2026},"required":false,"name":"year","in":"query"}],"responses":{"200":{"description":"Holidays","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HolidayList"}}}},"404":{"description":"Country has no holiday data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Holiday source unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/business-days":{"post":{"tags":["Calendar"],"summary":"Add or count business days","description":"Send days to move a date by that many business days (negative goes back), or end to count business days after start up to and including end. Weekends default to Saturday and Sunday; override with weekend as weekday numbers, 0 is Sunday. Nationwide full-day public holidays are closed. Half-day holidays count as business days. Does not know company or bank closures. Spans up to 3660 days.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string","minLength":2,"maxLength":2,"example":"TR"},"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-05-22"},"days":{"type":"integer","minimum":-2500,"maximum":2500,"example":5},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-06-30"},"weekend":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6},"maxItems":6,"example":[0,6]}},"required":["country","start"]}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessDays"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Country has no holiday data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Holiday source unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/timezone":{"get":{"tags":["Location"],"summary":"Time zone for coordinates or a country","description":"Send lat and lon to get the IANA time zone at that point (tz-lookup, CC0; borders are simplified, so points within a few kilometres of a zone border or at sea can be off). Or send country to get its zones from the IANA tz database; the first zone is the one used for the answer, so for countries with several zones list timezones and pick one. utc_offset, abbreviation, is_dst and local_time are computed now from the runtime's tz data. Does not convert arbitrary dates or give historic offsets.","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"number","nullable":true,"minimum":-90,"maximum":90,"example":41.01},"required":false,"name":"lat","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":-180,"maximum":180,"example":28.98},"required":false,"name":"lon","in":"query"},{"schema":{"type":"string","minLength":2,"maxLength":2,"example":"TR"},"required":false,"name":"country","in":"query"}],"responses":{"200":{"description":"Time zone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Timezone"}}}},"400":{"description":"Missing or mixed parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No zone found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/email/validate":{"post":{"tags":["Validation"],"summary":"Check an email address","description":"Checks syntax (RFC 5321 dot-atom local part, no quoted local parts or IP-literal domains), then looks up MX records, or A/AAAA when there is no MX, through Cloudflare DNS over HTTPS (1.1.1.1). Flags disposable domains from the CC0 disposable-email-domains list and shared role addresses. Does not connect to the mail server, so it cannot tell whether the mailbox exists or is full. If DNS is unreachable, reason is dns_unavailable and the DNS fields are null. Send dns: false to skip the lookup.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","minLength":1,"maxLength":320,"example":"info@example.com"},"dns":{"type":"boolean","example":true}},"required":["email"]}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCheck"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/vat/validate":{"post":{"tags":["Finance"],"summary":"Check an EU VAT number in VIES","description":"Asks the European Commission VIES service whether an EU VAT number is active for intra-EU trade, live on every call. Send the number with its country prefix (DE811569869) or send country separately. Greece is EL (GR is accepted), Northern Ireland is XI. Supported: AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HR, HU, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, XI. name and address are null when the member state does not share them (Germany and Spain, for example). valid false means VIES does not list the number as active, not that it never existed. Does not cover non-EU numbers (GB, CH, NO, TR) and does not return a consultation number. Returns 503 when VIES or the member state's system is down, which happens often.","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"vat_number":{"type":"string","minLength":3,"maxLength":20,"example":"NL004495445B01"},"country":{"type":"string","minLength":2,"maxLength":2,"example":"NL"}},"required":["vat_number"]}}}},"responses":{"200":{"description":"VIES answer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VatCheck"}}}},"400":{"description":"Not an EU VAT number format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"VIES or the member state is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}