oneapi
Sign in
Utile v1 / Aeroporturi

Airports

Search the world's airports by name, city, IATA or ICAO code, with country and type filters. It includes heliports and small airfields, not only commercial ones.

GET
https://oneapi.ro/api/utile/v1/aeroporturi

Query parameters

NameTypeDescriptionAccepted values
qoptional string | null Searches the airport and locality names. Spaces mean AND: "cluj napoca" requires both words. max 80 car.
taraoptional string | null The ISO alpha-2 country code. max 2 car.
continentoptional string | null The continent code: EU, AS, AF, NA, SA, OC, AN. max 2 car.
tipoptional string | null One of large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, closed. large_airportmedium_airportsmall_airportheliportseaplane_baseballoonportclosed
cu_iataoptional boolean | null 1 keeps only records with an IATA code — airports in the everyday sense. e.g. 1
cu_curseoptional boolean | null 1 keeps only airports with declared scheduled service. e.g. true
per_paginaoptional text How many per page (default 50, max 200). e.g. 10
paginaoptional text The page, counted from 1. e.g. 1

How it behaves

  • Of the ~86,000 records, only ~9,000 carry an IATA code. The rest are heliports, private airstrips and closed runways. Without cu_iata=1, a plain search returns a lot of noise.
  • The ordering is stable and useful: large airports first, then alphabetical. Without an explicit order, pagination would return rows in the table's physical order, which changes on every reimport.
  • closed aerodromes no longer operate. They stay in the data because they appear in old documents and historical databases, but do not use them for routing.

What it is for

  • Populate an airport autocomplete in a booking form.
  • List the commercial airports of a country, to know where you can ship by air.
  • Look up an airport by city name when you do not know the code.

Response structure

FieldTypeDescription
data.aeroporturi[].ident string The OurAirports identifier — the only one guaranteed unique.
data.aeroporturi[].iata string The three-letter IATA code, or null.
data.aeroporturi[].icao string The four-letter ICAO code, or null.
data.aeroporturi[].nume string The name, exactly as the source publishes it.
data.aeroporturi[].tip string The aerodrome category.
data.aeroporturi[].municipiu string The municipality served.
data.aeroporturi[].tara object Country code and name.
data.aeroporturi[].tara.cod string Code from the source code list — the key you filter on.
data.aeroporturi[].tara.nume string The name, exactly as the source publishes it.
data.aeroporturi[].regiune object The subdivision (ISO 3166-2) and its name.
data.aeroporturi[].regiune.cod string Code from the source code list — the key you filter on.
data.aeroporturi[].regiune.nume string The name, exactly as the source publishes it.
data.aeroporturi[].continent string The continent it is on.
data.aeroporturi[].latitudine number Latitude, in decimal degrees (WGS 84).
data.aeroporturi[].longitudine number Longitude, in decimal degrees (WGS 84).
data.aeroporturi[].altitudine_ft integer Elevation in feet, as published by the source.
data.aeroporturi[].altitudine_m integer The same elevation converted to metres, so you need not convert it.
data.aeroporturi[].curse_regulate boolean Whether the source declares scheduled service.
data.aeroporturi[].wikipedia string Address of the Wikipedia article.
data.aeroporturi[].site string Address of the official website.
data.observatie string A note on how to read the response: a computation convention or a limit of the data.
data.sursa.nume string Name of the official source.
data.sursa.url string Public address of the source.
data.sursa.licenta string The licence under which the source allows reuse.
meta.paginare.pagina integer Current page, counted from 1.
meta.paginare.per_pagina integer How many records a page holds.
meta.paginare.total integer Total matching records, beyond the current page.
meta.paginare.pagini integer How many pages the list has.

Response examples

GEThttps://oneapi.ro/api/utile/v1/aeroporturi?tara=RO&tip=large_airport
{
    "data": {
        "aeroporturi": [
            {
                "ident": "LRCL",
                "iata": "CLJ",
                "icao": "LRCL",
                "nume": "Avram Iancu Cluj International Airport",
                "tip": "large_airport",
                "municipiu": "Cluj-Napoca",
                "tara": {
                    "cod": "RO",
                    "nume": "România"
                },
                "regiune": {
                    "cod": "RO-CJ",
                    "nume": "Cluj County"
                },
                "continent": "EU",
                "latitudine": 46.786042,
                "longitudine": 23.685733,
                "altitudine_ft": 1039,
                "altitudine_m": 317,
                "curse_regulate": true,
                "wikipedia": "https://en.wikipedia.org/wiki/Cluj_International_Airport",
                "site": "http://www.airportcluj.ro/"
            }
        ],
        "observatie": "Din cele ~86.000 de înregistrări, doar ~9.000 au cod IATA: restul sunt heliporturi, aerodromuri private și piste închise. Filtrează cu `cu_iata=1` dacă vrei doar aeroporturi comerciale.",
        "sursa": {
            "nume": "OurAirports — export public zilnic",
            "url": "https://ourairports.com/data/",
            "licenta": "Domeniu public („All data is released to the Public Domain\"), fără obligație de atribuire."
        }
    },
    "meta": {
        "paginare": {
            "pagina": 1,
            "per_pagina": 50,
            "total": 12,
            "pagini": 1
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareAn undeclared parameter or a value that fails validation (q, tara, continent, tip, cu_iata, cu_curse). The offending field is in detalii.
429cota_depasitaThe plan's monthly quota has been exceeded (see Retry-After).

All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "An undeclared parameter or a value that fails validation (q, tara, continent, tip, cu_iata, cu_curse). The offending field is in detalii.",
        "detalii": {
            "q": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}