{"openapi":"3.1.0","info":{"title":"UN/LOCODE API","version":"1.0.0","description":"The UN/LOCODE registry (United Nations Code for Trade and Transport Locations) as an API — 116,000+ ports, airports, rail and road terminals and trade points across 249 countries. Resolve any 5-character code (e.g. USNYC → New York; DEHAM → Hamburg; NLRTM → Rotterdam) to its name, country, subdivision, transport functions (port, rail, road, airport, postal, …), IATA code and coordinates; search locations by name with country and function filters; or list every location in a country. UN/LOCODE is the standard used in shipping, logistics, customs and EDI. Ideal for supply-chain, freight, trade-compliance and logistics software.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/locode-api","description":"oanor gateway"}],"tags":[{"name":"UN/LOCODE"},{"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/code":{"get":{"operationId":"get_v1_code","tags":["UN/LOCODE"],"summary":"A location by UN/LOCODE","description":"","parameters":[{"name":"code","in":"query","required":true,"description":"5-character UN/LOCODE, e.g. USNYC","schema":{"type":"string"},"example":"USNYC"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"code":"USNYC","name":"New York","country":"US","latitude":40.7,"location":"NYC","functions":["Port","Rail terminal","Road terminal","Airport","Postal exchange"],"longitude":-74,"subdivision":"NY"},"meta":{"timestamp":"2026-05-31T06:28:06.938Z","request_id":"472962c1-acd1-4534-9417-4045b81c82e9"},"status":"ok","message":"Location retrieved","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":["UN/LOCODE"],"summary":"All locations in a country","description":"","parameters":[{"name":"country","in":"query","required":true,"description":"2-letter country code, e.g. DE","schema":{"type":"string"},"example":"DE"},{"name":"function","in":"query","required":false,"description":"Filter by function, e.g. port","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max results (1-200, default 50)","schema":{"type":"string"},"example":"50"},{"name":"offset","in":"query","required":false,"description":"Pagination offset","schema":{"type":"string"},"example":"0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":50,"limit":50,"total":10025,"offset":0,"country":"DE","results":[{"code":"DE222","name":"Brandscheid/Westerwald","country":"DE","latitude":50.567,"functions":["Road terminal"],"longitude":7.917},{"code":"DE223","name":"Brandshagen","country":"DE","latitude":54.25,"functions":["Road terminal"],"longitude":13.183},{"code":"DE225","name":"Braschwitz","country":"DE","latitude":51.517,"functions":["Road terminal"],"longitude":12.067},{"code":"DE226","name":"Bräsen","country":"DE","latitude":51.967,"functions":["Road terminal"],"longitude":12.383},{"code":"DE229","name":"Braunfels","country":"DE","latitude":50.517,"functions":["Road terminal"],"longitude":8.4},{"code":"DE22B","name":"Böllen","country":"DE","latitude":47.8,"functions":["Road terminal"],"longitude":7.85},{"code":"DE22E","name":"Eicklingen","country":"DE","latitude":52.55,"functions":["Road terminal"],"longitude":10.183},{"code":"DE232","name":"Braunichswalde","country":"DE","latitude":50.8,"functions":["Road terminal"],"longitude":12.217},{"code":"DE233","name":"Braunlage","country":"DE","latitude":51.733,"functions":["Road terminal"],"longitude":10.617},{"code":"DE234","name":"Bräunrode","country":"DE","latitude":51.633,"functions":["Road terminal"],"longitude":11.4},{"code":"DE235","name":"Braunsbach","country":"DE","latitude":49.2,"functions":["Road terminal"],"longitude":9.783},{"code":"DE236","name":"Braunsberg","country":"DE","latitude":53.05,"functions":["Road terminal"],"longitude":12.833},{"code":"DE237","name":"Braunschwende","country":"DE","latitude":51.583,"functions":["Road terminal"],"longitude":11.233},{"code":"DE238","name":"Braunsdorf bei Freital","country":"DE","latitude":51.017,"functions":["Road terminal"],"longitude":13.567},{"code":"DE239","name":"Braunsdorf bei Zeulenroda","country":"DE","latitude":50.733,"functions":["Road terminal"],"longitude":11.917},{"code":"DE23A","name":"Leinatal","country":"DE","latitude":50.9,"functions":["Port","Multimodal"],"longitude":10.633},{"code":"DE23B","name":"Bollenbach/Hunsrück","country":"DE","latitude":49.833,"functions":["Road terminal"],"longitude":7.35},{"code":"DE243","name":"Bräunsdorf/Limbach-Oberfrohna","country":"DE","latitude":50.867,"functions":["Road terminal"],"longitude":12.7},{"code":"DE244","name":"Bräunsdorf/Oberschöna","country":"DE","latitude":50.95,"functions":["Road terminal"],"longitude":13.217},{"code":"DE245","name":"Braunshorn","country":"DE","latitude":50.083,"functions":["Road terminal"],"longitude":7.517},{"code":"DE246","name":"Braunsroda (Heldrungen)","country":"DE","latitude":51.3,"functions":["Road terminal"],"longitude":11.25},{"code":"DE247","name":"Braunsroda bei Naumburg/Saale","country":"DE","latitude":51.167,"functions":["Road terminal"],"longitude":11.517},{"code":"DE248","name":"Braunweiler","country":"DE","latitude":49.867,"functions":["Road terminal"],"longitude":7.75},{"code":"DE249","name":"Brauweiler","country":"DE","latitude":49.817,"functions":["Road terminal"],"longitude":7.5},{"code":"DE24B","name":"Böllenborn","country":"DE","latitude":49.1,"functions":["Road terminal"],"longitude":7.933},{"code":"DE252","name":"Brebel","country":"DE","latitude":54.633,"functions":["Road terminal"],"longitude":9.75},{"code":"DE25B","name":"Bollendorf","country":"DE","latitude":49.85,"functions":["Road terminal"],"longitude":6.367},{"code":"DE26B","name":"Bollensdorf","country":"DE","latitude":51.833,"functions":["Road terminal"],"longitude":13.383},{"code":"DE26S","name":"Sennestadt","country":"DE","latitude":51.95,"functions":["Road terminal"],"longitude":8.617},{"code":"DE26T","name":"Wilhelmsburg","country":"DE","latitude":53.5,"functions":["Road terminal"],"longitude":10},{"code":"DE27B","name":"Bolleroda","country":"DE","latitude":51.017,"functions":["Road terminal"],"longitude":10.4},{"code":"DE28B","name":"Bollersdorf","country":"DE","latitude":52.583,"functions":["Road terminal"],"longitude":14.05},{"code":"DE29B","name":"Bollewick","country":"DE","latitude":53.35,"functions":["Road terminal"],"longitude":12.583},{"code":"DE2AA","name":"Alleshausen","country":"DE","latitude":48.1,"functions":["Road terminal"],"longitude":9.617},{"code":"DE2AB","name":"Allstedt","country":"DE","latitude":51.4,"functions":["Road terminal"],"longitude":11.383},{"code":"DE2AD","name":"Alt Kätwin","country":"DE","latitude":53.967,"functions":["Road terminal"],"longitude":12.317},{"code":"DE2AE","name":"Alt Poorstorf","country":"DE","latitude":53.95,"functions":["Road terminal"],"longitude":11.75},{"code":"DE2AF","name":"Alt Tucheband","country":"DE","latitude":52.533,"functions":["Road terminal"],"longitude":14.517},{"code":"DE2AG","name":"Altenahr","country":"DE","latitude":50.517,"functions":["Road terminal"],"longitude":7},{"code":"DE2AH","name":"Altenbuch","country":"DE","latitude":49.833,"functions":["Road terminal"],"longitude":9.4},{"code":"DE2AI","name":"Altenhausen","country":"DE","latitude":52.25,"functions":["Road terminal"],"longitude":11.25},{"code":"DE2AJ","name":"Altenriet","country":"DE","latitude":48.583,"functions":["Road terminal"],"longitude":9.217},{"code":"DE2AK","name":"Altersbach","country":"DE","latitude":50.7,"functions":["Road terminal"],"longitude":10.533},{"code":"DE2AL","name":"Altheimersberg","country":"DE","latitude":48.917,"functions":["Road terminal"],"longitude":10.933},{"code":"DE2AM","name":"Altlay","country":"DE","latitude":49.983,"functions":["Road terminal"],"longitude":7.267},{"code":"DE2AN","name":"Altrich","country":"DE","latitude":49.95,"functions":["Road terminal"],"longitude":6.917},{"code":"DE2AO","name":"Altwigshagen","country":"DE","latitude":53.7,"functions":["Road terminal"],"longitude":13.833},{"code":"DE2AP","name":"Ammelstädt","country":"DE","latitude":50.733,"functions":["Road terminal"],"longitude":11.317},{"code":"DE2AQ","name":"Anderbeck","country":"DE","latitude":51.983,"functions":["Road terminal"],"longitude":10.933},{"code":"DE2AR","name":"Angern","country":"DE","latitude":52.35,"functions":["Road terminal"],"longitude":11.733}]},"meta":{"timestamp":"2026-05-31T06:28:07.011Z","request_id":"55becf6c-3382-4699-936b-53135589ba38"},"status":"ok","message":"Country locations listed","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/search":{"get":{"operationId":"get_v1_search","tags":["UN/LOCODE"],"summary":"Search locations by name with country / function filters","description":"","parameters":[{"name":"q","in":"query","required":false,"description":"Name search, e.g. rotterdam","schema":{"type":"string"},"example":"rotterdam"},{"name":"country","in":"query","required":false,"description":"2-letter country, e.g. NL","schema":{"type":"string"}},{"name":"function","in":"query","required":false,"description":"port | rail | road | airport | postal | multimodal | border","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Results per page (1-100, default 20)","schema":{"type":"string"},"example":"20"},{"name":"offset","in":"query","required":false,"description":"Pagination offset","schema":{"type":"string"},"example":"0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":3,"limit":20,"query":"rotterdam","total":3,"offset":0,"filters":[],"results":[{"code":"NLRTM","name":"Rotterdam","country":"NL","latitude":51.917,"functions":["Port","Rail terminal","Road terminal","Airport","Postal exchange"],"longitude":4.5},{"code":"USRAJ","name":"Rotterdam","country":"US","latitude":42.783,"functions":["Port","Rail terminal","Road terminal"],"longitude":-73.967},{"code":"USRJN","name":"Rotterdam Junction","country":"US","functions":["Road terminal"]}]},"meta":{"timestamp":"2026-05-31T06:28:07.093Z","request_id":"665e8de8-a570-4665-80c2-e5e357045e14"},"status":"ok","message":"Locations listed","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":"Totals & functions","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"5-character code = 2-letter country + 3-character location. Functions indicate port/rail/road/airport/postal/etc.","total":116213,"fields":["code","country","location","name","subdivision","iata","functions","latitude","longitude"],"source":"UN/LOCODE — UN Code for Trade and Transport Locations","countries":249,"functions":["port","rail","road","airport","postal","multimodal","fixed","border"],"with_coordinates":93151},"meta":{"timestamp":"2026-05-31T06:28:07.152Z","request_id":"9d304420-653f-4de4-90da-d83625c66d69"},"status":"ok","message":"Meta retrieved","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":5000,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":500,"monthly_call_quota":55000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1550,"monthly_call_quota":280000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3800,"monthly_call_quota":1400000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/locode-api"}