Fare Calendar

Compare low fares across up to 31 departure dates for one route. Choose a date, then use exact flight search to see itineraries and retrieve booking links.

POST/api/fares/calendar

Request body

ParameterTypeRequiredDescription
originstringYes3-letter IATA airport or metro code for departure (e.g. SFO or LON).
destinationstringYes3-letter IATA airport or metro code for arrival (e.g. JFK or PAR).
adultsintegerNoNumber of passengers age 12 or older. Default: 1. Max total passengers: 9.
childrenintegerNoNumber of child passengers ages 2–11. Default: 0.
infants_in_seatintegerNoNumber of infants with their own seat. Default: 0.
infants_on_lapintegerNoNumber of lap infants. Cannot exceed number of adults. Default: 0.
cabin_classstringNoOne of "economy", "premium_economy", "business", or "first". Default: "economy". Fares use this requested cabin class.
max_stopsintegerNoMaximum number of stops (0, 1, or 2). Omit this field to allow any number of stops.
marketstringNo2-letter country code for pricing locale (e.g. "US", "GB"). Default: "US".
departure_date_rangeobjectYesInclusive start and end dates (YYYY-MM-DD), spanning 1–31 days. Start cannot be before today at the origin.
stay_daysintegerNoOmit for one-way fares. Set 0–365 for round trips returning this many calendar days after each departure. Explicit null is invalid.

Airport and metro codes, passengers, cabin, maximum stops and market work the same way as exact search. Maximum stops applies to each direction. Each trip uses local departure dates; the return date is the departure date plus stay_days. This is a fixed date interval, not a hotel-night or elapsed-hour guarantee.

Baggage, time-of-day, airline, price and self-transfer filters are not supported by this endpoint. Unsupported fields are rejected. Use exact search when you need those filters.

One-way month

curl -X POST "https://ignav.com/api/fares/calendar" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"origin":"NYC","destination":"LON","departure_date_range":{"start":"2026-11-17","end":"2026-12-17"}}'

Seven-day return, two adults, nonstop

curl -X POST "https://ignav.com/api/fares/calendar" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"origin":"NYC","destination":"LON","departure_date_range":{"start":"2026-11-17","end":"2026-12-17"},"stay_days":7,"adults":2,"max_stops":0,"market":"GB"}'

Response and freshness

The response contains origin, destination, days, status and cache_hit. Every requested departure date appears once in ascending order. Each day has departure_date, price, status and observed_at; round trips also have return_date.

Illustrative response for a one-date window
{
  "origin": "NYC",
  "destination": "LON",
  "status": "complete",
  "cache_hit": false,
  "days": [
    {
      "departure_date": "2026-11-17",
      "return_date": "2026-11-24",
      "status": "priced",
      "price": {
        "amount": 589,
        "currency": "GBP",
        "status": "unverified"
      },
      "observed_at": "2026-10-18T12:00:00Z"
    }
  ]
}
ParameterTypeRequiredDescription
pricedday statusYesA qualifying quote was observed. Price is the whole trip for the whole passenger party, in the market's currency, with status unverified.
no_priceday statusYesThe date was answered with no qualifying quote. Price is null. This does not prove no flights exist.
unavailableday statusYesThe date could not be answered. Both price and observed_at are null. Do not treat it as a sold-out date.

Top-level status is complete when every day was answered, otherwise partial. A partial response is returned only when at least one day is priced. With no priced days and any unavailable days, the request returns HTTP 424 with unable_to_complete_request. A complete calendar with only no_price days returns HTTP 200.

Prices are the lowest qualifying quotes observed in this discovery search, including required taxes and fees. They are not guaranteed to be the lowest fares across all inventory. Optional extras are excluded, availability can change, and exact search may return different prices.

Qualifying dates may be reused for up to 30 minutes. observed_at is the UTC time Ignav retrieved that cell, not the airline's quote age. Cached cells keep their timestamps. cache_hit is true only when every requested cell came from cache; overlapping windows can contain cells observed at different times.

From discovery to booking

Keep the same route, passengers, cabin, stops and market. Pass the chosen departure_date to one-way search, or departure_date and return_date to round-trip search. Choose an itinerary and pass its ignav_id to booking-links. Calendar cells have no booking IDs and are not bookable itineraries.

curl -X POST "https://ignav.com/api/fares/round-trip" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"origin":"NYC","destination":"LON","departure_date":"2026-11-17","return_date":"2026-11-24","adults":2,"max_stops":0,"market":"GB"}'

Each HTTP 200 calendar response counts as one successful request at your existing rate, including partial, cached and complete empty responses. HTTP 424 is unbilled. Exact searches and booking-link requests are billed separately under the same rules. No per-date charge or new subscription is required.