Przejdź do treści głównej
Napisz na WhatsAppMoje rezerwacje

API dla deweloperów

Ostatnia aktualizacja: 23 września 2026

Wyszukuj nasze loty, kieruj pasażerów prosto do rezerwacji i zarabiaj prowizję od tego, co do nas przekierujesz. Wszystko opisane poniżej jest udostępniane pod adresem https://aviodeals.com.

Jesteś już partnerem? Twoje statystyki, rezerwacje i miesięczne zestawienia znajdziesz w portalu partnera. Logowanie partnera

Jak uzyskać dostęp

Program partnerski jest otwarty: może do niego dołączyć każdy. Wypełnij poniższy formularz, a od razu wyślemy Ci e-mailem link do Twoich danych dostępowych w wersji próbnej. Opowiedz nam przy okazji o swoim projekcie – na tej podstawie przygotowujemy umowę handlową.

  • Kod śledzący – wartość, którą umieszczasz w parametrze ref w każdym linku, który do nas kierujesz.
  • Token API do endpointów wyszukiwania i danych.
  • Warunki prowizji: procent wartości zamówienia, do uzgodnionej kwoty maksymalnej za rezerwację.

Twój token to poświadczenie typu bearer: każdy, kto go posiada, może wysyłać zapytania w Twoim imieniu. Przechowujemy wyłącznie jego skrót (hash), więc nie możemy go Tobie ponownie odczytać – przechowuj go w bezpiecznym miejscu, a jeśli wycieknie, od razu nam o tym powiedz, a wymienimy go na nowy.

Konto próbne ma ograniczenia, dzięki którym testowanie naszego API nigdy nie narazi umowy z linią lotniczą:

  • Wygasa po 30 dniach, chyba że do tego czasu uzgodnimy warunki współpracy.
  • Do 500 zapytań wyszukiwania dziennie.
  • Odpowiedzi na wyszukiwania pochodzą z naszej bazy cen, którą na bieżąco uzupełniają nasi klienci i aktywni partnerzy. Trasa i data, których nikt ostatnio nie wyszukiwał, mogą zwrócić pustą odpowiedź; konta produkcyjne uruchamiają odświeżanie na żywo.
  • Rezerwacje, które przekażesz w okresie próbnym, są przypisywane do Twojego kodu. Prowizja jest wypłacana od dnia zawarcia umowy.

Uzyskaj dane dostępowe do wersji próbnej

Na jej podstawie powstanie Twój kod śledzący, na przykład acme-travel.

Na ten adres wyślemy link do danych dostępowych i będziemy go używać we wszystkich dalszych sprawach.

Opcjonalnie. Gdzie będą wyświetlane nasze loty.

Jedno lub dwa zdania: produkt, rynki i miejsce, w którym pojawią się nasze loty.

Używamy tych danych wyłącznie do skonfigurowania Twojego dostępu i do kontaktu w sprawie umowy.

Uwierzytelnianie

Wysyłaj swój token w każdym żądaniu danych i wyszukiwania – albo w nagłówku Authorization zawierającym sam token, bez prefiksu Bearer, albo jako parametr zapytania accessToken. Endpointy przekierowań są publiczne i nie wymagają tokenu.

Przykład

curl -H "Authorization: YOUR_TOKEN" \
  "https://aviodeals.com/api/v2/data/routes.json"

Błędy

W obu przypadkach odpowiedzią jest HTTP 401 z kodem ERROR_UNAUTHORIZED:

  • Brak tokenu: Authentication required
  • Token, którego nie rozpoznajemy, lub token należący do dezaktywowanego konta: Access Denied [1]

Endpointy

Odpowiedzi są w formacie JSON. Daty są w formacie ISO 8601 (YYYY-MM-DD). Lotniska wskazuje się kodem IATA albo numerycznym id z pliku lotnisk; oba sposoby są akceptowane wszędzie tam, gdzie podaje się lotnisko.

Bagaż i opcje taryf zwracają wyłącznie dwa adresy zakończone na -tcs: flights-tcs.json i flights-multi-tcs. Pozostałe adresy nigdy się nie zmieniają, więc oparta na nich integracja działa dokładnie tak jak dziś.

GET/api/v2/data/airports.jsonWymaga tokenu

Wszystkie obsługiwane przez nas lotniska – z numerycznym id, kodem IATA, miastem i krajem.

Statyczne dane referencyjne. Przechowuj je w cache – zmieniają się rzadko, a identyfikatory są stałe.

Przykładowa odpowiedź · 200 OK

[
  {
    "id": 51,
    "code": "DUS",
    "city": "Dusseldorf",
    "country": "Germany"
  },
  {
    "id": 242,
    "code": "DAR",
    "city": "Dar es salaam",
    "country": "Tanzania"
  }
]
GET/api/v2/data/routes.jsonWymaga tokenu

Pary lotnisk, między którymi faktycznie latamy, jako pary wylotu i celu.

Dwa obsługiwane przez nas lotniska nie tworzą jeszcze pary, którą można zarezerwować. Korzystaj z tego pliku, aby ograniczyć wyszukiwania do istniejących tras – para spoza niego zawsze zwróci pustą odpowiedź.

Przykładowa odpowiedź · 200 OK

[
  {
    "departure": {
      "id": 242,
      "code": "DAR",
      "city": "Dar es salaam",
      "country": "Tanzania"
    },
    "destination": {
      "id": 267,
      "code": "ZNZ",
      "city": "Zanzibar",
      "country": "Tanzania"
    }
  }
]
GET/api/v2/data/routes/with-availability.jsonWymaga tokenu

Te same pary wraz z dniami, w które kursuje każda trasa.

Dzięki temu nie wyszukujesz trasy w dniu, w którym nie ma lotów.

Przykładowa odpowiedź · 200 OK

[
  {
    "dep": "DAR",
    "des": "ZNZ",
    "dow": "Mon,Tue,Wed,Thu,Fri,Sat,Sun",
    "from": "2026-01-01",
    "to": "2027-12-31"
  }
]
GET/api/v2/flights.jsonWymaga tokenu

Wyszukiwanie jednej trasy w jednym dniu, w jedną stronę lub w obie strony.

Zwraca obiekt z tablicami departure i return. Każdy lot ma własne id – przekaż je do endpointu przekierowania, aby pasażer trafił dokładnie na ten lot.

Parametry

from wymagany
Lotnisko wylotu, kod IATA lub id.
to wymagany
Lotnisko docelowe, kod IATA lub id.
departureDate wymagany
Data wylotu, YYYY-MM-DD.
returnDate opcjonalny
Data powrotu przy locie w obie strony. Pomiń przy locie w jedną stronę.
adults opcjonalny
Dorośli pasażerowie. Domyślnie 1.
children opcjonalny
Dzieci. Domyślnie 0.
infants opcjonalny
Niemowlęta na kolanach. Domyślnie 0.
  • Para, na której nie latamy, zwraca puste tablice, a nie błąd – pusta odpowiedź nigdy nie jest powodem do ponowienia zapytania.
  • Data z przeszłości zwraca pustą odpowiedź zamiast błędu.
  • return pojawia się tylko wtedy, gdy wysłano returnDate.

Przykładowa odpowiedź · 200 OK

{
  "departure": [
    {
      "from": {
        "id": 242,
        "code": "DAR",
        "city": "Dar es salaam",
        "country": "Tanzania"
      },
      "to": {
        "id": 267,
        "code": "ZNZ",
        "city": "Zanzibar",
        "country": "Tanzania"
      },
      "legs": [
        {
          "from": {
            "id": 242,
            "code": "DAR",
            "city": "Dar es salaam",
            "country": "Tanzania"
          },
          "to": {
            "id": 267,
            "code": "ZNZ",
            "city": "Zanzibar",
            "country": "Tanzania"
          },
          "number": "611",
          "dates": {
            "departure": "2026-10-27 07:15",
            "arrival": "2026-10-27 07:30"
          },
          "duration": 900,
          "airline": {
            "id": 173,
            "name": "Auric Air",
            "code": "UI"
          }
        }
      ],
      "dates": {
        "departure": "2026-10-27 07:15",
        "arrival": "2026-10-27 07:30"
      },
      "duration": 900,
      "airline": {
        "id": 173,
        "name": "Auric Air",
        "code": "UI"
      },
      "price": {
        "currency": "USD",
        "adult": "122.00",
        "child": "0.00",
        "infant": "0.00"
      },
      "priceUsd": {
        "adult": "122.00",
        "child": "0.00",
        "infant": "0.00"
      },
      "priceEur": {
        "adult": "106.05",
        "child": "0.00",
        "infant": "0.00"
      },
      "priceGbp": {
        "adult": "90.88",
        "child": "0.00",
        "infant": "0.00"
      },
      "requiredFields": {
        "phone": true,
        "nationality": true,
        "documentType": true,
        "documentNumber": true,
        "documentExpiry": false,
        "documentIssuer": false,
        "documentIssueDate": false,
        "birthDate": false,
        "birthDateForChildren": false,
        "birthDateForInfants": false,
        "placeOfBirth": false
      },
      "id": 1000000383705
    }
  ]
}
GET/api/v2/flights-tcs.jsonWymaga tokenu

To samo wyszukiwanie z bagażem i maksymalnie czterema opcjami taryf na lot.

Zwraca dokładnie to samo co flights.json, a każdy obiekt lotu otrzymuje dodatkowo tablicę fareOptions: taryfy, które możesz sprzedać na tym locie, od najtańszej, maksymalnie cztery. Każda opcja ma własne id dla endpointu przekierowania, własne bloki cen, fareFamilyName oraz zawarty w niej bagaż – cabinBag i checkedBag, każdy z liczbą sztuk (pieces), statusem (FREE lub NOT_INCLUDED) oraz – jeśli linia lotnicza ją podaje – wagą jednej sztuki w kilogramach. Przygotowane z myślą o porównywaniu łącznego kosztu, np. Skyscanner Total Cost Search.

Parametry

from wymagany
Lotnisko wylotu, kod IATA lub id.
to wymagany
Lotnisko docelowe, kod IATA lub id.
departureDate wymagany
Data wylotu, YYYY-MM-DD.
returnDate opcjonalny
Data powrotu przy locie w obie strony. Pomiń przy locie w jedną stronę.
adults opcjonalny
Dorośli pasażerowie. Domyślnie 1.
children opcjonalny
Dzieci. Domyślnie 0.
infants opcjonalny
Niemowlęta na kolanach. Domyślnie 0.
  • Pierwsza opcja taryfy to oferta samego lotu: to samo id i ta sama cena co w obiekcie lotu.
  • Pole, którego linia lotnicza nie podała, jest pomijane, a nie wysyłane jako zero – brak cabinBag lub checkedBag traktuj jako informację nieznaną.
  • cancellation i flightChange pojawiają się wyłącznie jako FREE i tylko wtedy, gdy linia lotnicza to podaje; ich brak nie oznacza niczego.
  • Dwie taryfy o identycznych atrybutach to jeden produkt: wymieniamy tylko tańszą z nich.
  • Nie sprzedajemy płatnego bagażu, więc cena bagażu nigdy nie jest wysyłana.
  • flights.json pozostaje bez zmian i nadal jest dostępny; korzystaj z tego, który lepiej pasuje do Twojej integracji.

Przykładowa odpowiedź · 200 OK

{
  "departure": [
    {
      "from": {
        "id": 242,
        "code": "DAR",
        "city": "Dar es salaam",
        "country": "Tanzania"
      },
      "to": {
        "id": 267,
        "code": "ZNZ",
        "city": "Zanzibar",
        "country": "Tanzania"
      },
      "legs": [
        {
          "from": {
            "id": 242,
            "code": "DAR",
            "city": "Dar es salaam",
            "country": "Tanzania"
          },
          "to": {
            "id": 267,
            "code": "ZNZ",
            "city": "Zanzibar",
            "country": "Tanzania"
          },
          "number": "611",
          "dates": {
            "departure": "2026-10-27 07:15",
            "arrival": "2026-10-27 07:30"
          },
          "duration": 900,
          "airline": {
            "id": 173,
            "name": "Auric Air",
            "code": "UI"
          }
        }
      ],
      "dates": {
        "departure": "2026-10-27 07:15",
        "arrival": "2026-10-27 07:30"
      },
      "duration": 900,
      "airline": {
        "id": 173,
        "name": "Auric Air",
        "code": "UI"
      },
      "price": {
        "currency": "USD",
        "adult": "122.00",
        "child": "0.00",
        "infant": "0.00"
      },
      "priceUsd": {
        "adult": "122.00",
        "child": "0.00",
        "infant": "0.00"
      },
      "priceEur": {
        "adult": "106.05",
        "child": "0.00",
        "infant": "0.00"
      },
      "priceGbp": {
        "adult": "90.88",
        "child": "0.00",
        "infant": "0.00"
      },
      "requiredFields": {
        "phone": true,
        "nationality": true,
        "documentType": true,
        "documentNumber": true,
        "documentExpiry": false,
        "documentIssuer": false,
        "documentIssueDate": false,
        "birthDate": false,
        "birthDateForChildren": false,
        "birthDateForInfants": false,
        "placeOfBirth": false
      },
      "id": 1000000383705,
      "fareOptions": [
        {
          "id": 1000000383705,
          "fareFamilyName": "NR",
          "price": {
            "currency": "USD",
            "adult": "122.00",
            "child": "0.00",
            "infant": "0.00"
          },
          "priceUsd": {
            "adult": "122.00",
            "child": "0.00",
            "infant": "0.00"
          },
          "priceEur": {
            "adult": "106.05",
            "child": "0.00",
            "infant": "0.00"
          },
          "priceGbp": {
            "adult": "90.88",
            "child": "0.00",
            "infant": "0.00"
          },
          "cabinBag": {
            "pieces": 1,
            "status": "FREE",
            "weight": {
              "value": 5,
              "unit": "KG"
            }
          },
          "checkedBag": {
            "pieces": 1,
            "status": "FREE",
            "weight": {
              "value": 20,
              "unit": "KG"
            }
          }
        },
        {
          "id": 1000000383706,
          "fareFamilyName": "Y",
          "price": {
            "currency": "USD",
            "adult": "168.00",
            "child": "0.00",
            "infant": "0.00"
          },
          "priceUsd": {
            "adult": "168.00",
            "child": "0.00",
            "infant": "0.00"
          },
          "priceEur": {
            "adult": "146.04",
            "child": "0.00",
            "infant": "0.00"
          },
          "priceGbp": {
            "adult": "125.15",
            "child": "0.00",
            "infant": "0.00"
          },
          "checkedBag": {
            "pieces": 2,
            "status": "FREE",
            "weight": {
              "value": 23,
              "unit": "KG"
            }
          },
          "flightChange": "FREE"
        }
      ]
    }
  ]
}
POST/api/v2/flights-multiWymaga tokenu

Wyszukiwanie do pięciu tras i dat w jednym żądaniu, bez bagażu.

Żądanie to ciało JSON. Każdy element destinations to jedna trasa w jednym dniu; podróż w obie strony to dwa elementy: wylot i powrót. Odpowiedzią jest obiekt o nazwie result z kluczami w formacie FROM-TO-DATE (na przykład MGA-RNI-2026-10-27), z których każdy zawiera loty danego elementu w tym samym formacie co flights.json. Jego odpowiedź nigdy się nie zmienia: aby otrzymać bagaż i opcje taryf, wyślij to samo żądanie do flights-multi-tcs.

Parametry

passengers.adults opcjonalny
Dorośli pasażerowie. Domyślnie 1.
passengers.children opcjonalny
Dzieci. Domyślnie 0.
passengers.infants opcjonalny
Niemowlęta na kolanach. Domyślnie 0.
destinations[N].from wymagany
Lotnisko wylotu, kod IATA lub id.
destinations[N].to wymagany
Lotnisko docelowe, kod IATA lub id.
destinations[N].date wymagany
Data, YYYY-MM-DD.
  • Odczytujemy najwyżej pięć elementów destinations; kolejne po piątym są ignorowane.
  • Aby utworzyć link do podróży w obie strony, przekaż id lotu tam i id lotu powrotnego do redirect-multi.
  • Para spoza pliku tras jest odrzucana z kodem HTTP 400 i kodem błędu ERROR_DATA_VALIDATION (Route X-Y is not supported), podczas gdy flights.json zwraca dla tej samej pary puste tablice.
  • Element w dniu, w którym nie latamy, lub z datą z przeszłości zwraca pustą listę. Żądanie bez elementów destinations zwraca pustą tablicę.

Przykładowe żądanie

{
  "passengers": {
    "adults": 1,
    "children": 0,
    "infants": 0
  },
  "destinations": [
    {
      "from": "MGA",
      "to": "RNI",
      "date": "2026-10-27"
    }
  ]
}

Przykładowa odpowiedź · 200 OK

{
  "result": {
    "MGA-RNI-2026-10-27": [
      {
        "from": {
          "id": 5217,
          "code": "MGA",
          "city": "Managua",
          "country": "Nicaragua"
        },
        "to": {
          "id": 5219,
          "code": "RNI",
          "city": "Corn Island",
          "country": "Nicaragua"
        },
        "legs": [
          {
            "from": {
              "id": 5217,
              "code": "MGA",
              "city": "Managua",
              "country": "Nicaragua"
            },
            "to": {
              "id": 5219,
              "code": "RNI",
              "city": "Corn Island",
              "country": "Nicaragua"
            },
            "number": "142",
            "dates": {
              "departure": "2026-10-27 07:00",
              "arrival": "2026-10-27 08:30"
            },
            "duration": 5400,
            "airline": {
              "id": 1320,
              "name": "LAC",
              "code": "6Y"
            }
          }
        ],
        "dates": {
          "departure": "2026-10-27 07:00",
          "arrival": "2026-10-27 08:30"
        },
        "duration": 5400,
        "airline": {
          "id": 1320,
          "name": "LAC",
          "code": "6Y"
        },
        "price": {
          "currency": "USD",
          "adult": "161.74",
          "child": "0.00",
          "infant": "0.00"
        },
        "priceUsd": {
          "adult": "161.74",
          "child": "0.00",
          "infant": "0.00"
        },
        "priceEur": {
          "adult": "140.60",
          "child": "0.00",
          "infant": "0.00"
        },
        "priceGbp": {
          "adult": "120.48",
          "child": "0.00",
          "infant": "0.00"
        },
        "requiredFields": {
          "phone": false,
          "nationality": true,
          "documentType": false,
          "documentNumber": true,
          "documentExpiry": false,
          "documentIssuer": false,
          "documentIssueDate": false,
          "birthDate": false,
          "birthDateForChildren": false,
          "birthDateForInfants": false,
          "placeOfBirth": false
        },
        "id": 1000000384088
      }
    ]
  }
}
POST/api/v2/flights-multi-tcsWymaga tokenu

To samo wyszukiwanie wielu tras z bagażem i maksymalnie czterema opcjami taryf na lot.

Przyjmuje dokładnie to samo żądanie co flights-multi i zwraca dokładnie tę samą odpowiedź, a każdy obiekt lotu otrzymuje dodatkowo tablicę fareOptions, tak jak opisano dla flights-tcs.json: taryfy, które możesz sprzedać na tym locie, od najtańszej, maksymalnie cztery, każda z własnym id dla endpointów przekierowań, własnymi blokami cen, fareFamilyName i zawartym w niej bagażem. Przygotowane z myślą o porównywaniu łącznego kosztu, np. Skyscanner Total Cost Search.

Parametry

passengers.adults opcjonalny
Dorośli pasażerowie. Domyślnie 1.
passengers.children opcjonalny
Dzieci. Domyślnie 0.
passengers.infants opcjonalny
Niemowlęta na kolanach. Domyślnie 0.
destinations[N].from wymagany
Lotnisko wylotu, kod IATA lub id.
destinations[N].to wymagany
Lotnisko docelowe, kod IATA lub id.
destinations[N].date wymagany
Data, YYYY-MM-DD.
  • Pierwsza opcja taryfy to oferta samego lotu: to samo id i ta sama cena co w obiekcie lotu.
  • Pole, którego linia lotnicza nie podała, jest pomijane, a nie wysyłane jako zero – brak cabinBag lub checkedBag traktuj jako informację nieznaną.
  • cancellation i flightChange pojawiają się wyłącznie jako FREE i tylko wtedy, gdy linia lotnicza to podaje; ich brak nie oznacza niczego.
  • Nie sprzedajemy płatnego bagażu, więc cena bagażu nigdy nie jest wysyłana.
  • flights-multi pozostaje bez zmian i nadal jest dostępny; przejście to wyłącznie zmiana adresu.

Przykładowe żądanie

{
  "passengers": {
    "adults": 1,
    "children": 0,
    "infants": 0
  },
  "destinations": [
    {
      "from": "MGA",
      "to": "RNI",
      "date": "2026-10-27"
    }
  ]
}

Przykładowa odpowiedź · 200 OK

{
  "result": {
    "MGA-RNI-2026-10-27": [
      {
        "from": {
          "id": 5217,
          "code": "MGA",
          "city": "Managua",
          "country": "Nicaragua"
        },
        "to": {
          "id": 5219,
          "code": "RNI",
          "city": "Corn Island",
          "country": "Nicaragua"
        },
        "legs": [
          {
            "from": {
              "id": 5217,
              "code": "MGA",
              "city": "Managua",
              "country": "Nicaragua"
            },
            "to": {
              "id": 5219,
              "code": "RNI",
              "city": "Corn Island",
              "country": "Nicaragua"
            },
            "number": "142",
            "dates": {
              "departure": "2026-10-27 07:00",
              "arrival": "2026-10-27 08:30"
            },
            "duration": 5400,
            "airline": {
              "id": 1320,
              "name": "LAC",
              "code": "6Y"
            }
          }
        ],
        "dates": {
          "departure": "2026-10-27 07:00",
          "arrival": "2026-10-27 08:30"
        },
        "duration": 5400,
        "airline": {
          "id": 1320,
          "name": "LAC",
          "code": "6Y"
        },
        "price": {
          "currency": "USD",
          "adult": "161.74",
          "child": "0.00",
          "infant": "0.00"
        },
        "priceUsd": {
          "adult": "161.74",
          "child": "0.00",
          "infant": "0.00"
        },
        "priceEur": {
          "adult": "140.60",
          "child": "0.00",
          "infant": "0.00"
        },
        "priceGbp": {
          "adult": "120.48",
          "child": "0.00",
          "infant": "0.00"
        },
        "requiredFields": {
          "phone": false,
          "nationality": true,
          "documentType": false,
          "documentNumber": true,
          "documentExpiry": false,
          "documentIssuer": false,
          "documentIssueDate": false,
          "birthDate": false,
          "birthDateForChildren": false,
          "birthDateForInfants": false,
          "placeOfBirth": false
        },
        "id": 1000000384088,
        "fareOptions": [
          {
            "id": 1000000384088,
            "fareFamilyName": "Light",
            "price": {
              "currency": "USD",
              "adult": "161.74",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceUsd": {
              "adult": "161.74",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceEur": {
              "adult": "140.60",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceGbp": {
              "adult": "120.48",
              "child": "0.00",
              "infant": "0.00"
            },
            "cabinBag": {
              "pieces": 1,
              "status": "FREE",
              "weight": {
                "value": 9.5,
                "unit": "KG"
              }
            },
            "checkedBag": {
              "pieces": 0,
              "status": "NOT_INCLUDED"
            }
          },
          {
            "id": 1000000384091,
            "fareFamilyName": "Standard",
            "price": {
              "currency": "USD",
              "adult": "172.74",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceUsd": {
              "adult": "172.74",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceEur": {
              "adult": "150.16",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceGbp": {
              "adult": "128.68",
              "child": "0.00",
              "infant": "0.00"
            },
            "checkedBag": {
              "pieces": 1,
              "status": "FREE",
              "weight": {
                "value": 14,
                "unit": "KG"
              }
            }
          },
          {
            "id": 1000000384092,
            "fareFamilyName": "Essential",
            "price": {
              "currency": "USD",
              "adult": "194.74",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceUsd": {
              "adult": "194.74",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceEur": {
              "adult": "169.29",
              "child": "0.00",
              "infant": "0.00"
            },
            "priceGbp": {
              "adult": "145.07",
              "child": "0.00",
              "infant": "0.00"
            },
            "cabinBag": {
              "pieces": 1,
              "status": "FREE",
              "weight": {
                "value": 9.5,
                "unit": "KG"
              }
            },
            "checkedBag": {
              "pieces": 1,
              "status": "FREE",
              "weight": {
                "value": 14,
                "unit": "KG"
              }
            }
          }
        ]
      }
    ]
  }
}
GET/api/v2/redirectPubliczny

Deep link. Kieruj tu pasażerów, aby trafili na lot, który kliknęli.

Przekierowuje na naszą stronę wyników z już uzupełnionymi danymi podróży i zapisuje przypisanie do Ciebie. Ten endpoint nigdy nie zwraca błędu: nawet id, którego nie potrafimy rozpoznać, prowadzi pasażera na użyteczną stronę, a nie w ślepy zaułek.

Parametry

flightId wymagany
Id lotu tam z odpowiedzi wyszukiwania.
returnFlightId opcjonalny
Id lotu powrotnego przy podróży w obie strony.
ref wymagany
Twój kod śledzący. Bez niego wizyta nic Ci nie przyniesie.
subAffiliate opcjonalny
Twoja własna etykieta podkanału, zwracana Ci w raportach.
campaign opcjonalny
Twoja własna etykieta kampanii.
partnerClickId opcjonalny
Twój identyfikator kliknięcia, dzięki któremu możesz dopasować rezerwację do własnych logów.
currency opcjonalny
Waluta, w której wyświetlane są ceny. Nie zmienia waluty obciążenia.

Przykładowa odpowiedź · 301 Moved Permanently

Location: https://aviodeals.com/search?from=DAR&to=ZNZ&depart=2026-10-27&adults=1&children=0&infants=0#results
GET/api/v2/redirect-multiPubliczny

Deep link dla podróży w obie strony, przyjmujący oba odcinki jako listę.

Odczytuje flightIds jako kolekcję: pierwszy element to lot tam, drugi – lot powrotny. Przyjmuje te same parametry przypisania co pojedyncze przekierowanie.

Parametry

flightIds[] wymagany
Id lotów w kolejności: najpierw lot tam, potem lot powrotny.
ref wymagany
Twój kod śledzący.

Przykładowa odpowiedź · 301 Moved Permanently

Location: https://aviodeals.com/search?from=DAR&to=ZNZ&depart=2026-10-27&adults=1&children=0&infants=0#results
GET/api/v2/results-multiPubliczny

Deep link zbudowany z lotnisk i dat zamiast z id lotów.

Używaj go, gdy nie masz pod ręką id lotu – na przykład przy wyszukiwaniu z cache lub takim, które wygasło. Odczytuje destinations jako parametry indeksowane: destinations[0][from], destinations[0][to], destinations[0][date].

Parametry

destinations[N][from] wymagany
Lotnisko wylotu dla odcinka N.
destinations[N][to] wymagany
Lotnisko docelowe dla odcinka N.
destinations[N][date] wymagany
Data dla odcinka N.
ref wymagany
Twój kod śledzący.
  • Element, którego nie potrafimy rozpoznać, jest pomijany, a nie odrzucany.

Przykładowa odpowiedź · 301 Moved Permanently

Location: https://aviodeals.com/search?from=DAR&to=ZNZ&depart=2026-10-27&adults=1&children=0&infants=0#results
GET/api/v2/partner/statistics.jsonWymaga tokenu

Twoje wyszukiwania, kliknięcia, rezerwacje i prowizja – według dni lub tras.

Dane ze strony Statystyki w Twoim portalu partnera, do wykorzystania we własnych systemach. Wyszukiwania to zapytania wyszukiwania wysłane z Twoim tokenem; kliknięcia to przekierowania, które do nas skierowałeś, a ślepy zaułek to kliknięcie, którego nie udało się dopasować do lotu. Rezerwacje są liczone w dniu opłacenia, każda z prowizją – prowizja nigdy nie jest odbierana, niezależnie od tego, co później stanie się z rezerwacją.

Parametry

from opcjonalny
Pierwszy dzień, YYYY-MM-DD (UTC). Domyślnie pierwszy dzień miesiąca daty to.
to opcjonalny
Ostatni dzień, YYYY-MM-DD (UTC), włącznie. Domyślnie dzisiaj. Najwyżej 366 dni po from.
groupBy opcjonalny
day (domyślnie) lub route. Trasy liczą oba kierunki łącznie.
  • Zawsze wyłącznie Twoje własne dane. Odpowiedź pochodzi z naszych własnych zapisów – nigdy nie trafia do linii lotniczej.
  • Prowizja to liczba w walucie podanej w odpowiedzi.

Przykładowa odpowiedź · 200 OK

{
  "partner": {
    "code": "your-code",
    "id": 10001
  },
  "from": "2026-09-01",
  "to": "2026-09-26",
  "groupBy": "day",
  "currency": "USD",
  "totals": {
    "searches": 41280,
    "clicks": 312,
    "deadEnds": 4,
    "bookings": 9,
    "commission": 51.32
  },
  "days": [
    {
      "date": "2026-09-01",
      "searches": 1466,
      "clicks": 11,
      "deadEnds": 0,
      "bookings": 0,
      "commission": 0
    },
    {
      "date": "2026-09-02",
      "searches": 1655,
      "clicks": 13,
      "deadEnds": 0,
      "bookings": 0,
      "commission": 0
    },
    {
      "date": "2026-09-03",
      "searches": 1702,
      "clicks": 12,
      "deadEnds": 0,
      "bookings": 1,
      "commission": 3.05
    }
  ]
}
GET/api/v2/partner/bookings.jsonWymaga tokenu

Twoje rezerwacje z jednego miesiąca, z prowizją i Twoimi własnymi identyfikatorami kliknięć.

Wiersze ze strony Rezerwacje w Twoim portalu partnera. Rezerwacja należy do miesiąca, w którym została opłacona, i zachowuje swoją prowizję; rezerwacja później anulowana lub zwrócona pozostaje na liście ze swoim statusem.

Parametry

month opcjonalny
YYYY-MM. Domyślnie bieżący miesiąc.
  • status ma wartość confirmed, cancelled lub refunded; prowizja za miesiąc obejmuje każdą rezerwację opłaconą w tym miesiącu, niezależnie od jej statusu.
  • clickId i subId to wartości, które przesłałeś nam wraz z kliknięciem.

Przykładowa odpowiedź · 200 OK

{
  "partner": {
    "code": "your-code",
    "id": 10001
  },
  "month": "2026-09",
  "currency": "USD",
  "count": 9,
  "commission": 51.32,
  "bookings": [
    {
      "paidAt": "2026-09-25T10:14:03.000Z",
      "reference": "00GDSG",
      "route": "SAP-RTB-SAP",
      "travelFrom": "2026-12-20",
      "travelTo": "2027-01-03",
      "passengers": 1,
      "commission": 7.5,
      "currency": "USD",
      "status": "confirmed",
      "clickId": "c-B4C912",
      "subId": null
    }
  ]
}

Błędy

Każdy błąd ma tę samą strukturę: success ma wartość false, code wskazuje rodzaj błędu, a errors wymienia, co było nie tak – z polem path wskazującym parametr, jeśli to on jest przyczyną. Brakujący lub nieznany token zwraca 401; wyszukiwanie, którego nie da się odczytać, zwraca 400. Pusty wynik nigdy nie jest błędem.

401 Unauthorized

{
  "success": false,
  "code": "ERROR_UNAUTHORIZED",
  "errors": [
    {
      "message": "Authentication required"
    }
  ]
}

400 Bad Request

{
  "success": false,
  "code": "ERROR_GENERAL",
  "errors": [
    {
      "message": "To airport is required",
      "path": "to"
    },
    {
      "message": "Departure date is required",
      "path": "departureDate"
    }
  ]
}

Przypisanie

Umieszczaj swój kod śledzący w parametrze ref w każdym linku. Gdy pasażer trafi na naszą stronę, ustawiamy własny plik cookie (first-party) i odczytujemy go, jeśli dokona rezerwacji – dzięki temu rezerwacja zostanie przypisana do Ciebie nawet wtedy, gdy nastąpi kilka dni po kliknięciu.

https://aviodeals.com/api/v2/redirect?flightId=1000000000123&ref=YOUR_CODE
  • Okno przypisania wynosi 42 dni od kliknięcia.
  • Decyduje ostatnie kliknięcie: jeśli pasażer trafi do nas przez innego partnera już po Tobie, rezerwacja przypada jemu.
  • Rezerwacja jest przypisywana jeden raz, w chwili jej utworzenia.

Prowizja

Otrzymujesz uzgodniony procent wartości zamówienia, do uzgodnionej kwoty maksymalnej za rezerwację. Dokładne wartości znajdziesz w swojej umowie – poniższe zasady obowiązują wszystkich.

  • Kwota maksymalna dotyczy rezerwacji, a nie pasażera: jedna rezerwacja daje jedną prowizję z limitem, niezależnie od liczby pasażerów.
  • Prowizja jest liczona od faktycznie pobranej wartości zamówienia, a nie od ceny podanej wcześniej.
  • Kwoty są zaokrąglane w dół do pełnego centa.
  • Prowizja należy się za opłacone rezerwacje i nigdy nie jest odbierana, jeśli rezerwacja zostanie później anulowana lub zwrócona. Rezerwacja z samą blokadą ceny ani porzucona płatność nie dają prowizji.
  • Rezerwacja sprzedana w walucie innej niż waluta Twojej wypłaty jest Tobie raportowana, a nie wypłacana automatycznie – nie przeliczamy walut przy rozliczeniu, kurs uzgadniamy z Tobą.

Raporty

Zaloguj się do portalu partnera, aby zobaczyć swoje statystyki, rezerwacje i miesięczne zestawienia, lub pobieraj te same dane przez dwa opisane wyżej endpointy partnerskie. Drugiego dnia każdego miesiąca wysyłamy Ci e-mailem zestawienie za poprzedni miesiąc ze wszystkim, czego potrzebujesz do wystawienia faktury.

Uczciwe korzystanie

Kupujemy miejsca od linii lotniczych na podstawie umów, które mierzą, ile wyszukiwań wysyłamy do nich na jedną rezerwację. Ten limit dzielimy z Tobą, więc kilka nawyków pozwala utrzymać połączenie w dobrej kondycji dla nas obu.

  • Wyszukuj tylko pary z pliku tras, w dni, w które według pliku dostępności kursują loty. Para, na której nie latamy, zawsze zwróci pustą odpowiedź, a pytanie o nią zużywa limit na darmo.
  • Przechowuj pliki lotnisk i tras w cache. Zmieniają się rzadko.
  • Nie odpytuj wielokrotnie wyszukiwania dla tej samej podróży. Ceny są gwarantowane w chwili rezerwacji, a nie wyszukiwania.
  • Zanim znacząco zwiększysz liczbę zapytań, daj nam znać, abyśmy mogli najpierw podnieść własne limity.

Pytania

Coś jest niejasne, coś nie działa albo potrzebujesz endpointu, którego tu nie ma? Skontaktuj się z nami – wolimy zmienić API, niż zmuszać Cię do obchodzenia go.

API dla deweloperów | aviodeals