anyway.ro API Documentation

Complete reference for logistics and flight services

API Information

Base URL: https://anyway.ro

Version: v1

Format: JSON

Authentication: API Key required

🔐 Authentication

All API endpoints require authentication using an API key.

How to authenticate:

Option 1: Header (Recommended)

x-api-key: your_api_key_here

Option 2: Query Parameter

?api_key=your_api_key_here

⚠️ Security Best Practices:

  • • Never expose your API key in client-side code
  • • Use environment variables to store your API key
  • • Make API calls from your backend/server only
  • • Rotate your API key regularly

⏱️ Rate Limits

  • Per Minute: 1,000 requests
  • Per Day: 100,000 requests
  • Response Header: Check X-RateLimit-Remaining

📐 Data Standards (IATA Compliance)

Toate endpoint-urile respectă standarde IATA stricte. Codurile sunt reale, validate, și nu sunt inventate din primele litere ale numelui.

Formate garantate:

  • Cod aeroport — exact 3 litere majuscule IATA: ^[A-Z]{3}$ (ex: DXB, STN, AYT, MXP)
  • Cod companie aeriană — exact 2 caractere alfanumerice IATA: ^[A-Z0-9]{2}$ (ex: TK, W6, 5F, H4)
  • Număr zbor — cod companie + cifre, fără spații: ^[A-Z0-9]{2}[0-9]{1,5}$ (ex: FZ782, W43935)
  • Cod țară — ISO 3166-1 alpha-2: TR, AE, GB, DE (nu XX)
  • Zile săptămână — ordine calendaristică: Mon, Tue, Wed, Thu, Fri, Sat, Sun (nu alfabetică)
  • Aeroporturi separate — fiecare aeroport = intrare distinctă (ex: STN și LTN separat, nu grupate sub LON)
  • Zboruri deduplicate — un singur entry per flight number, cu array complet de zile

❌ Formate vechi (eliminate):

  • DUB pentru Dubai → acum DXB (DUB = Dublin)
  • ANT pentru Antalya → acum AYT (ANT = Antwerp)
  • LON grupat → acum STN, LTN, LHR separat
  • TU pentru Turkish Airlines → acum TK
  • WI pentru Wizz Air → acum W6 / W4
  • FZ 782 și FZ782 ca duplicate → acum o singură intrare FZ782
  • • Zile sortate alfabetic (Fri, Mon, Sun) → acum calendaristic (Mon, Fri, Sun)
  • countryCode: "XX" → acum cod ISO real

🎨 Airline Logos API

Access to 435 airline logos in multiple sizes (64x64, 28x28, 22x22 pixels)

GET/api/airline-logos

Get complete list of all 435 airlines with logo URLs

Example Response:

{
  "success": true,
  "data": {
    "totalAirlines": 435,
    "airlines": [
      {
        "iataCode": "FR",
        "logoUrls": {
          "large": "https://static.ttm.network/images/airlines/64x64/FR.avif",
          "medium": "https://static.ttm.network/images/airlines/28x28/FR.avif",
          "small": "https://static.ttm.network/images/airlines/22x22/FR.avif"
        }
      }
    ]
  }
}
GET/api/airline-logos?code=FR

Get logo URLs for a specific airline

Parameters:

  • code (required) - 2-letter IATA code (e.g., FR, W6, RO, LH)

Example Response:

{
  "success": true,
  "data": {
    "iataCode": "FR",
    "logoUrls": {
      "large": "https://static.ttm.network/images/airlines/64x64/FR.avif",
      "medium": "https://static.ttm.network/images/airlines/28x28/FR.avif",
      "small": "https://static.ttm.network/images/airlines/22x22/FR.avif"
    }
  }
}
GET/api/airline-logos?code=FR&size=64x64

Get logo URL in a specific size

Parameters:

  • code (required) - 2-letter IATA code
  • size (required) - Size: 64x64, 28x28, 22x22, large, medium, or small

Example Response:

{
  "success": true,
  "data": {
    "iataCode": "FR",
    "logoUrl": "https://static.ttm.network/images/airlines/64x64/FR.avif",
    "size": "64x64"
  }
}

💡 Usage Example with Authentication:

// Using fetch with API key in header
const response = await fetch('/api/airline-logos?code=FR&size=large', {
  headers: {
    'x-api-key': 'your_api_key_here'
  }
});
const data = await response.json();

// Or using query parameter
const response = await fetch(
  '/api/airline-logos?code=FR&size=large&api_key=your_api_key_here'
);

// Use in React component
<img 
  src={data.data.logoUrl} 
  alt="Ryanair logo" 
  width={64} 
  height={64} 
/>

📊 Available Airlines:

  • 435 airlines with 100% logo coverage
  • ✅ Major carriers: LH (Lufthansa), AF (Air France), BA (British Airways), KL (KLM)
  • ✅ Low-cost: FR (Ryanair), W6 (Wizz Air), U2 (easyJet)
  • ✅ Romanian: RO (TAROM), 0B (Blue Air)
  • ✅ Format: AVIF (modern, optimized)

🔍 Smart Search API

Căutare rute zbor (program săptămânal + destinații viitoare). Pentru asistenți AI și chatbot-uri: zbor direct, zile disponibile, listă destinații din origin, alternative multimodale.

GET/api/v1/smart-search

Rută origin → destination, cu zile și opțiuni.

Parametri (query):

  • origin – IATA sau nume oraș (ex. OTP, București, Lisabona)
  • destination – IATA (obligatoriu dacă nu folosești un mod listă de mai jos)
  • date (optional) – YYYY-MM-DD
  • include_schedule_days – 1 = zile cu zboruri
  • include_origins_to_destination – 1 = din ce aeroporturi zboară către destination
  • list_destinations_from_origin – 1 = listă destinații cu zbor direct din origin RO/MD (fără destination)
  • list_romd_destinations_from_origin – 1 = sens invers: destinații RO/MD cu zbor direct din oraș străin (ex. Lisabona → București)
  • lang / locale – ro, en, ru (default: ro)

Exemple:

GET /api/v1/smart-search?origin=RMO&destination=OTP
GET /api/v1/smart-search?origin=OTP&list_destinations_from_origin=1
GET /api/v1/smart-search?origin=Chișinău&list_destinations_from_origin=1
GET /api/v1/smart-search?origin=Lisabona&list_romd_destinations_from_origin=1
GET /api/v1/smart-search?origin=LIS&list_romd_destinations_from_origin=1&lang=en

Autentificare: header x-api-key sau Authorization: Bearer (LOGISTICS_API_KEY).

Listă destinații din origin RO/MD (list_destinations_from_origin=1)

Răspunsul conține destinations_from_origin: array de { city, cityNames, iata?, startsAt?, airline? }. Destinațiile din programul săptămânal sunt completate cu destinații viitoare (anunțuri) care au startsAt și airline.

ai_hint – text sugerat pentru utilizator (ex. „Din București sunt N destinații… Spune o destinație și o zi.”).

Listă destinații RO/MD din oraș străin (list_romd_destinations_from_origin=1)

Pentru întrebări de tipul „Din Lisabona ce orașe din România/Moldova am zbor direct?”.origin = oraș străin (IATA sau nume: Lisabona, LIS, Paris, Londra). Nu trimite destination.

Răspunsul conține romd_destinations_from_origin: array de { to_city, to_iata, country, cityNames, available_days, schedule?, flights?, startsAt?, airline? }.

Caută rute bidirecțional în cache (ex. RMO→LIS apare ca destinație Chișinău din Lisabona). Dacă origin e deja RO/MD (ex. OTP), API-ul returnează mesaj de eroare cu sugestia modului corect.

Exemplu răspuns (origin → destination):

{
  "status": "success",
  "direct_option": {
    "exists": true,
    "days": ["Mon", "Wed", "Fri", "Sun"],
    "schedule": {
      "Mon": ["06:30", "18:45"],
      "Wed": ["06:30"],
      "Fri": ["06:30", "18:45"],
      "Sun": ["18:45"]
    },
    "flights": [
      { "airline": "Wizz Air", "flightNumber": "W63201", "days": ["Mon", "Wed", "Fri"] },
      { "airline": "Wizz Air", "flightNumber": "W63205", "days": ["Mon", "Fri", "Sun"] }
    ],
    "day": "Mon",
    "details": "Zbor direct disponibil în zilele: Mon, Wed, Fri, Sun."
  },
  "multimodal_options": [],
  "ai_hint": "Există zbor direct București → London Stansted în ziua selectată.",
  "query": { "origin": "OTP", "destination": "STN", "originIata": "OTP", "destinationIata": "STN" }
}

Exemplu răspuns (list_destinations_from_origin=1):

{
  "status": "success",
  "destinations_from_origin": [
    { "city": "Berlin", "iata": "BER" },
    { "city": "Chicago", "iata": "ORD", "startsAt": "2026-06-04", "airline": "HiSky" }
  ],
  "ai_hint": "Din București (OTP) sunt 85 destinații cu zbor direct (inclusiv 1 care încep în perioada următoare). Spune o destinație și o zi (ex. „vineri”) sau „weekend"."
}

Exemplu răspuns (list_romd_destinations_from_origin=1&origin=Lisabona):

{
  "status": "success",
  "romd_destinations_from_origin": [
    {
      "to_city": "București",
      "to_iata": "OTP",
      "country": "România",
      "cityNames": { "ro": "București", "en": "Bucharest", "ru": "Бухарест" },
      "available_days": ["Tue", "Thu"],
      "schedule": { "Tue": ["07:30"], "Thu": ["18:15"] },
      "flights": [
        { "airline": "TAROM", "flightNumber": "RO707", "days": ["Tue", "Thu"] }
      ]
    },
    {
      "to_city": "Chișinău",
      "to_iata": "RMO",
      "country": "Moldova",
      "cityNames": { "ro": "Chișinău", "en": "Chisinau", "ru": "Кишинёв" },
      "available_days": ["Wed"],
      "flights": [
        { "airline": "HiSky", "flightNumber": "H4123", "days": ["Wed"] }
      ]
    }
  ],
  "locale": "ro",
  "ai_hint": "Din Lisabona (LIS) sunt 2 destinații directe în România/Moldova.",
  "query": { "origin": "Lisabona", "originIata": "LIS" }
}

📅 Future Destinations API

Destinații noi care încep zborurile într-o anumită perioadă (ex. Chișinău – Stuttgart, București – Chicago). Expuse public prin GET; administrare prin API admin (CRUD) sau panoul Admin → Destinații viitoare.

GET/api/future-destinations

Listează destinații viitoare. Fără autentificare.

Parametri (opționali):

  • origin – filtrează după aeroport plecare (IATA)
  • fromDate, toDate – YYYY-MM-DD

Exemple:

GET /api/future-destinationsGET /api/future-destinations?origin=RMO

Admin CRUD: /api/admin/future-destinations

Autentificare: Basic (admin / parola din .env).

  • GET – listă (opțional ?origin=, ?fromDate=, ?toDate=, ?id=)
  • POST – adaugă (body: originIata, destinationIata sau destinationCity, airline, startDate; opțional: frequencyDays, frequencyPerWeek, notes)
  • PUT – actualizare (body: id + câmpuri de modificat)
  • DELETE – șterge (?id=)

Interfață grafică: Admin Dashboard → tab „Destinații viitoare”.

Integrare în Smart Search:

La list_destinations_from_origin=1, lista destinations_from_origin include și destinațiile viitoare care nu sunt încă în programul săptămânal, cu câmpurile startsAt și airline. La list_romd_destinations_from_origin=1, lista romd_destinations_from_origin include destinații viitoare străin → RO/MD cu aceleași câmpuri opționale.

🗺️ Daily Routes API

Get daily route statistics for Romanian and Moldovan airports

GET/api/daily-routes

Get daily routes for all 16 RO/MD airports

Parameters:

  • date (optional) - Date in YYYY-MM-DD format (default: today)

Example Response:

{
  "success": true,
  "data": [
    {
      "airport": {
        "code": "OTP",
        "icao": "LROP",
        "name": "București Henri Coandă"
      },
      "routes": [
        {
          "destination": {
            "iata": "STN",
            "name": "London Stansted",
            "countryCode": "GB"
          },
          "flights": ["W63201", "W63205"],
          "operators": [
            { "name": "Wizz Air", "iata": "W6" }
          ],
          "flightTimes": [
            { "airline": "W6", "flightNumber": "W63201", "departureTime": "06:30", "days": ["Mon", "Wed", "Fri"] },
            { "airline": "W6", "flightNumber": "W63205", "departureTime": "18:45", "days": ["Tue", "Thu", "Sat", "Sun"] }
          ]
        },
        {
          "destination": {
            "iata": "DXB",
            "name": "Dubai",
            "countryCode": "AE"
          },
          "flights": ["FZ782"],
          "operators": [
            { "name": "flydubai", "iata": "FZ" }
          ],
          "flightTimes": [
            { "airline": "FZ", "flightNumber": "FZ782", "departureTime": "14:30", "days": ["Mon", "Wed", "Sun"] }
          ]
        }
      ],
      "fetchedAt": "2026-03-17T10:00:00Z"
    }
  ],
  "date": "2026-03-17",
  "totalAirports": 16
}
GET/api/daily-routes?airport=OTP

Get daily routes for a specific airport

Parameters:

  • airport (required) - Airport IATA code (OTP, CLJ, TSR, etc.)
  • date (optional) - Date in YYYY-MM-DD format
POST/api/daily-routes

Refresh daily routes data (clear cache)

Request Body:

{
  "date": "2026-02-18",
  "airport": "OTP"  // optional, omit to refresh all
}

💡 Usage Example:

// Get all daily routes
const response = await fetch('/api/daily-routes', {
  headers: { 'x-api-key': 'your_api_key_here' }
});
const data = await response.json();

// Get routes for specific airport
const otpRoutes = await fetch('/api/daily-routes?airport=OTP', {
  headers: { 'x-api-key': 'your_api_key_here' }
});

// Refresh cache
await fetch('/api/daily-routes', {
  method: 'POST',
  headers: {
    'x-api-key': 'your_api_key_here',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ date: '2026-02-18' })
});

🛫 Supported Airports (16):

România:

  • • OTP - București Henri Coandă
  • • BBU - București Aurel Vlaicu
  • • CLJ - Cluj-Napoca
  • • TSR - Timișoara
  • • IAS - Iași
  • • CND - Constanța
  • • SBZ - Sibiu
  • • CRA - Craiova
  • • BCM - Bacău
  • • OMR - Oradea
  • • SCV - Suceava
  • • TGM - Târgu Mureș
  • • ARW - Arad
  • • SUJ - Satu Mare
  • • BAY - Baia Mare

Moldova:

  • • RMO - Chișinău

✈️ Flight Search API

Real-time flight search with schedule and delay information

GET/api/flight-search?flightNumber=LH1234

Search by flight number

Parameters:

  • flightNumber (required) - Flight number (e.g., LH1234, FR8421)
  • origin (optional) - Origin airport IATA code
  • date (optional) - Date in YYYY-MM-DD format
GET/api/flight-search?origin=OTP&destination=DXB

Search flights between two airports (e.g., București-Dubai)

Parameters:

  • origin (required) - Origin airport IATA code (e.g., OTP)
  • destination (required) - Destination airport IATA code (e.g., DXB)
  • date (optional) - Date in YYYY-MM-DD format

Example Response:

{
  "success": true,
  "data": [
    {
      "flight_number": "FZ1732",
      "airline": {
        "name": "flydubai",
        "iata": "FZ"
      },
      "origin": {
        "iata": "OTP",
        "city": "Bucharest"
      },
      "destination": {
        "iata": "DXB",
        "city": "Dubai"
      },
      "scheduled_time": "2026-02-18T14:30:00Z",
      "estimated_time": "2026-02-18T14:45:00Z",
      "actual_time": null,
      "status": "delayed",
      "delay_minutes": 15,
      "gate": "A12",
      "terminal": "1",
      "aircraft": {
        "model": "Boeing 737-800",
        "registration": "A6-FEQ"
      },
      "codeshares": ["EK7932"],
      "data_quality": "Live"
    }
  ],
  "count": 1,
  "searchCriteria": {
    "origin": "OTP",
    "destination": "DXB",
    "date": "2026-02-18"
  },
  "dataQuality": "Live",
  "note": "Real-time data with delays and updates available."
}
GET/api/flight-search?origin=OTP

Get all departures from an airport

Parameters:

  • origin (required) - Origin airport IATA code
  • date (optional) - Date in YYYY-MM-DD format

📊 Response Fields:

  • scheduled_time - Scheduled departure/arrival time
  • estimated_time - Estimated time (updated in real-time)
  • actual_time - Actual time (after departure/arrival)
  • status - scheduled, delayed, departed, landed, canceled
  • delay_minutes - Delay in minutes (positive = delayed, negative = early)
  • data_quality - "Live" (real-time) or "Basic" (schedule only)

📡 Data Quality Levels:

  • Live Data (Large airports: OTP, CLJ, TSR, IAS)
    ✅ Real-time updates, delays, gate info, actual times
  • Basic Data (Small airports: CND, SBZ, CRA, etc.)
    ⚠️ Schedule only, no real-time updates or delays

💡 Usage Example:

// Search București-Dubai flights
const response = await fetch(
  '/api/flight-search?origin=OTP&destination=DXB',
  { headers: { 'x-api-key': 'your_api_key_here' } }
);
const data = await response.json();

// Display flight info
data.data.forEach(flight => {
  console.log(`Flight ${flight.flight_number}`);
  console.log(`Scheduled: ${flight.scheduled_time}`);
  console.log(`Estimated: ${flight.estimated_time}`);
  console.log(`Status: ${flight.status}`);
  console.log(`Delay: ${flight.delay_minutes} minutes`);
});

🤖 Instructiuni pentru LLM și Asistenți AI

Această secțiune explică pas cu pas cum poți folosi API-urile anyway.ro pentru a răspunde la întrebări despre zboruri („vreau să plec joi undeva, duminică înapoi”, „unde zboară din Cluj?”, „există zbor București–Londra miercuri?”). Poate fi folosită ca ghid pentru integrare în chatbot-uri, agenți AI sau documentație pentru modele LLM.

Ce informații să ceri utilizatorului (dacă lipsesc)

  • Plecare: din ce oraș/aeroport? (ex: București, OTP, Chișinău, RMO)
  • Destinația: unde vrea să ajungă? (ex: Londra, LHR, Paris)
  • Ziua / perioada: „joi”, „weekend”, „luni”, sau dată exactă YYYY-MM-DD
  • Întoarcere (dacă e cazul): „duminică înapoi” → zi plecare dus + zi întoarcere
  • Preferințe: dimineață / după-amiază / seară (opțional)

Exemplu: „Vreau să plec joi undeva și duminică înapoi” → trebuie să întrebi: Din ce oraș pleci? (ex. București, Cluj) și eventual Ai vreo destinație în minte sau vrei sugestii?

Pași recomandați (flux logic)

  1. „Unde pot zbura din [oraș RO/MD]?” / „Ce destinații sunt din București?”
    • Apelează: GET /api/v1/smart-search?origin=OTP&list_destinations_from_origin=1 (înlocuiește OTP cu codul aeroportului: OTP=București, CLJ=Cluj, RMO=Chișinău etc.).
    • Origin poate fi IATA (3 litere) sau nume oraș (ex. origin=Chișinău).
    • Răspunsul conține destinations_from_origin (listă orașe + IATA) și ai_hint (text sugerat pentru utilizator).
  2. „Din Lisabona/Paris/Londra ce orașe din România/Moldova am zbor direct?”
    • Apelează: GET /api/v1/smart-search?origin=Lisabona&list_romd_destinations_from_origin=1 (sau origin=LIS, origin=Paris).
    • Nu trimite destination.
    • Răspunsul conține romd_destinations_from_origin cu to_city, to_iata, country, zile și zboruri.
  3. „Există zbor [origin] → [destinație] în [zi]?” / „Vreau București–Londra joi”
    • Convertește ziua în dată (ex. „joi” → următoarea joi în YYYY-MM-DD).
    • Apelează: GET /api/v1/smart-search?origin=OTP&destination=LHR&date=2026-03-12&include_schedule_days=1 (LHR=Londra Heathrow; poți folosi și BER, STN etc. pentru Londra/Berlin).
    • Sau pentru orar live + întârzieri: GET /api/flight-search?origin=OTP&destination=LHR&date=2026-03-12.
    • Răspunsul indică dacă există zbor direct, zilele din săptămână cu zboruri și (la flight-search) ore, status, întârzieri.
  4. „Vreau să plec joi și să mă întorc duminică” (fără destinație fixă)
    • Cere: Din ce oraș pleci? (ex. București).
    • Apelează list_destinations_from_origin=1 pentru acel aeroport → obții lista de destinații.
    • Poți oferi utilizatorului lista și să îl lași să aleagă („Unde vrei să mergi? Berlin, Londra, Milano…”).
    • După ce alege destinația: apelează /api/v1/smart-search?origin=OTP&destination=BER&date=2026-03-12 (joi dus) și același origin/destination cu date=2026-03-15 (duminică întoarcere) sau /api/flight-search?origin=BER&destination=OTP&date=2026-03-15 pentru întoarcere.
  5. „Câte zboruri sunt joi din Otopeni?” / „Rute zilnice pentru [aeroport] în [zi]”
    • Apelează: GET /api/daily-routes?airport=OTP&date=2026-03-12 (date = YYYY-MM-DD pentru joi respectivă).
    • Răspunsul conține routes (destinații + număr zboruri/zi). Pentru toate aeroporturile: GET /api/daily-routes?date=2026-03-12.
  6. „Ce sosiri/plecări sunt acum la [aeroport]?” (live)
    • Plecări: GET /api/flights/[IATA]/departures (ex. /api/flights/OTP/departures).
    • Sosiri: GET /api/flights/[IATA]/arrivals. Nu necesită API key pentru aceste endpoint-uri.
    • Răspuns: listă zboruri cu scheduled_time, estimated_time, status, delay.
  7. „Vreau opțiuni cu plecare luni/marți și întoarcere weekend” (planificator flexibil)
    • Apelează: POST /api/planificator-zboruri cu action: "search" și body: { "filters": { "departureDays": ["monday", "tuesday"], "returnDays": ["saturday", "sunday"], "departureTimeSlots": ["morning", "afternoon"], "returnTimeSlots": ["afternoon", "evening"] } }.
    • Răspuns: data = array de opțiuni (destinație + outboundFlights + returnFlights + totalOptions).
  8. Destinații viitoare (rute noi anunțate)
    • GET /api/future-destinations — toate; ?origin=RMO sau ?origin=OTP pentru un aeroport. Fără autentificare.
    • Util pentru: „Ce rute noi sunt din Chișinău?” sau integrare în smart-search (deja incluse în list_destinations_from_origin cu startsAt și airline).
Întrebare utilizator (tip)Ce să ceri (dacă lipsesc)Endpoint(e) recomandat(e)
„Unde pot zbura din X?” (X = RO/MD)Oraș/aeroport plecare (X)/api/v1/smart-search?origin=X&list_destinations_from_origin=1
„Din Lisabona/Paris ce orașe RO/MD?”Oraș străin plecare/api/v1/smart-search?origin=Lisabona&list_romd_destinations_from_origin=1
„Zbor X → Y în ziua Z?”Origin, destinație, dată (sau zi → dată)/api/v1/smart-search?origin=X&destination=Y&date=YYYY-MM-DD sau /api/flight-search?origin=X&destination=Y&date=...
„Plec joi, mă întorc duminică”Din ce oraș; opțional destinația (sau oferă lista)list_destinations_from_origin apoi smart-search / flight-search pentru dus + întoarcere cu datele respective
„Câte rute/zboruri joi din OTP?”Aeroport, dată (zi → YYYY-MM-DD)/api/daily-routes?airport=OTP&date=YYYY-MM-DD
„Sosiri/plecări acum la X”Cod aeroport (IATA)/api/flights/OTP/arrivals, /api/flights/OTP/departures
„Opțiuni plecare luni, întoarcere sâmbătă”Zile preferate, eventual sloturi (dimineață/seară)POST /api/planificator-zboruri action=search, filters (departureDays, returnDays, timeSlots)
„Ce rute noi sunt din Chișinău?”GET /api/future-destinations?origin=RMO

Coduri IATA utile (România & Moldova)

OTP=București Henri Coandă, BBU=București Băneasa, CLJ=Cluj, TSR=Timișoara, IAS=Iași, CND=Constanța, SBZ=Sibiu, RMO=Chișinău. Londra: LHR, LGW, STN. Berlin: BER. Paris: CDG, ORY. Milano: MXP. Dubai: DXB.

Exemplu de instrucțiuni pentru LLM (system prompt)

Tu ești asistent pentru zboruri din România și Moldova. Folosești API-ul anyway.ro.

Când utilizatorul vrea să plece „joi” și „duminică înapoi”:
1. Întreabă din ce oraș pleacă (București, Cluj, Chișinău etc.).
2. Dacă nu are destinație fixă: apelează GET .../api/v1/smart-search?origin=OTP&list_destinations_from_origin=1 (cu codul aeroportului) și oferă lista de destinații.
3. După ce alege destinația, convertește „joi” și „duminică” în date (YYYY-MM-DD) și apelează:
   - dus: GET .../api/v1/smart-search?origin=OTP&destination=BER&date=<data_joi>&include_schedule_days=1
   - întoarcere: GET .../api/flight-search?origin=BER&destination=OTP&date=<data_duminica>
4. Rezumat: afișează zborurile găsite cu ore, companie, status/întârziere dacă e cazul.

Autentificare: header x-api-key sau Authorization: Bearer <LOGISTICS_API_KEY> pentru /api/v1/smart-search. Endpoint-urile /api/flights/.../arrivals și .../departures și /api/daily-routes (GET) pot fi fără key pe anyway.ro.

⚠️ Error Responses

401 Unauthorized - Missing API Key

{
  "success": false,
  "error": "API key required",
  "message": "Please provide an API key in the x-api-key header or api_key query parameter"
}

401 Unauthorized - Invalid API Key

{
  "success": false,
  "error": "Unauthorized",
  "message": "Invalid API key"
}

429 Too Many Requests

{
  "success": false,
  "error": "Rate limit exceeded",
  "message": "Rate limit exceeded: 1000 requests per minute"
}

404 Not Found

{
  "success": false,
  "error": "Airline code not found",
  "code": "XX"
}

400 Bad Request

{
  "success": false,
  "error": "Invalid size. Use: 64x64, 28x28, 22x22, large, medium, or small"
}

For more information or support, visit anyway.ro