{"uid":"cap_63gTPzhWMmSIGUZ44aH-b","slug":"brij-air-offer-details-ead5869c","name":"Brij Air Offer Details","description":"Paid x402 endpoint: $0.01 USDC for fastbooking: offers, $0.10 USDC for offers from a browser tier (trip.com:, ryanair:) — reading their fare menu costs a real browser session at the supplier — the PAYMENT-REQUIRED challenge always quotes the applicable price.\n\nfastbooking: offers — re-fetches the offer from the flight provider and returns it in the same shape as search results, with CURRENT price and expires_at, plus available_services: the purchasable extras (checked bags with weight limits and prices) on that exact fare. fare_options lists EVERY fare of this flight (same aircraft, every brand: Basic, Standard, Flex…), fresh from the supplier and price-ascending, each with its own bookable offer_id — including fares the search left out of its page. Pick the row you want and pass its offer_id to POST /air/intents.\n\nbrowser-tier offers (trip.com:, ryanair:) — return the offer with fare_options filled from the supplier's own fare menu: per fare, the price, cabin, seats_left, and conditions[] (the supplier's verbatim wording for baggage allowances and refund policy — {type, text} pairs such as CARRY_ON, CONSIGN, UN_REFUND). Each fare row carries its own bookable offer_id ('<tier>:<flight>##<n>', e.g. 'trip.com:2026-11-07T20:35|2026-11-07T21:55|FR##1') and fare_index: create the intent on that offer_id to book THAT fare - the escrow prices at the fare, and the fulfiller selects the same menu index at the supplier. The fare menu must be fresh (re-drill after ~30 min: 409 fare_menu_expired). Expect 20-45s on a cold read; 202 fares_pending means the menu is still being fetched and nothing was charged — wait for the Retry-After header (15s) and send the same request again: it returns the finished result. Do not treat a 202 as the offer. Results are cached ~5 min per offer_id, so repeats are instant and free of supplier load.\n\nUse it to (1) answer \"how much is an extra bag on this fare?\" or \"is this browser-tier fare refundable?\" — the ancillary/conditions questions search results cannot answer — and (2) revalidate a single offer minutes after a search, which is cheaper and quota-friendlier than re-searching.\n\nA stale or unknown offer_id returns 404 and the payment is never settled: refusals cost nothing. Offers expire roughly 20-30 minutes after search; on 404, re-search.\n\nServices are informational only: this API books the fare as-is and cannot add services to the order.","url":"https://travel.brij.fi/air/offer-details?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","required":["offer_id"],"properties":{"offer_id":{"type":"string","example":"fastbooking:off_0000000000000000000000","description":"id from POST /air/search."}}},"responseSchema":{"type":"object","required":["offer","available_services"],"properties":{"offer":{"allOf":[{"type":"object","required":["id","owner_name","origin_iata","destination_iata","departing_at","arriving_at","origin_time_zone","destination_time_zone","stops","technical_stops","duration","comparison_key","fare_brand_name","cabin_class","checked_bags_included","carry_on_bags_included","conditions","slices","total_emissions_kg","identity_documents_required","total_amount","total_amount_decimal","total_currency","requires_instant_payment"],"properties":{"id":{"type":"string","example":"fastbooking:off_0000B5xGbDG4ifAoeDTtG9"},"stops":{"type":"integer","example":1,"description":"Number of connections. 0 means a direct flight."},"slices":{"type":"array","items":{"type":"object","required":["origin_iata","destination_iata","departing_at","arriving_at","origin_time_zone","destination_time_zone","stops","segments"],"properties":{"stops":{"type":"integer"},"duration":{"type":"string","example":"PT1H15M"},"segments":{"type":"array","items":{"$ref":"#/components/schemas/OfferSegment"}},"arriving_at":{"type":"string","example":"2026-08-07T11:35:00"},"origin_iata":{"type":"string","example":"MAD"},"departing_at":{"type":"string","example":"2026-08-07T10:20:00","description":"Airport-local, no UTC offset."},"fare_brand_name":{"type":"string"},"technical_stops":{"type":"integer"},"destination_iata":{"type":"string","example":"LIS"},"origin_time_zone":{"type":"string","example":"Europe/Madrid"},"checked_bags_included":{"type":"integer","nullable":true,"description":"Checked bags included on THIS direction (minimum across its legs; null when a leg does not report it). A round trip can mix brands per direction, and the journey-level checked_bags_included is then the minimum of the two."},"destination_time_zone":{"type":"string","example":"Europe/Lisbon"}},"description":"One direction of the journey: the outbound, and for round trips the inbound. Same semantics as the journey-level fields (whole-direction endpoints, airport-local times, stops = plane changes)."},"description":"Each direction of the journey: one entry for a one-way, two for a round trip (outbound then inbound). The journey-level fields above describe the OUTBOUND for compatibility; slices is the canonical and only complete view for round trips. comparison_key joins all directions, so two round trips sharing an outbound but not a return stay distinct."},"duration":{"type":"string","example":"PT7H28M","description":"Whole-journey duration, ISO 8601."},"segments":{"type":"array","items":{"type":"object","required":["origin_iata","destination_iata","departing_at","arriving_at","origin_time_zone","destination_time_zone","technical_stops"],"properties":{"duration":{"type":"string","example":"PT1H15M","description":"Leg duration, ISO 8601 (e.g. PT1H15M). Precomputed — never subtract the naive local timestamps."},"arriving_at":{"type":"string","example":"2026-08-02T17:44:00","description":"Airport-local time, no UTC offset."},"origin_iata":{"type":"string","example":"JFK"},"carrier_iata":{"type":"string","example":"IB","description":"IATA code of the operating airline (carrier_name) — the stable identifier where the name is a display string."},"carrier_name":{"type":"string","example":"American Airlines"},"departing_at":{"type":"string","example":"2026-08-02T14:42:00","description":"Airport-local time, no UTC offset."},"aircraft_name":{"type":"string","example":"Airbus A320"},"flight_number":{"type":"string","example":"1953"},"fare_basis_code":{"type":"string","example":"ADYO5L","description":"Airline fare basis identifier for this leg."},"origin_terminal":{"type":"string","example":"1"},"technical_stops":{"type":"integer","description":"Refuelling-type stops on this leg WITHOUT a plane change. A leg with technical stops is still one segment; truly non-stop means stops == 0 AND technical_stops == 0."},"destination_iata":{"type":"string","example":"DFW"},"origin_time_zone":{"type":"string","example":"America/New_York","description":"IANA timezone of the origin airport; combine with departing_at for an absolute instant."},"destination_terminal":{"type":"string","example":"4"},"destination_time_zone":{"type":"string","example":"America/Chicago","description":"IANA timezone of the destination airport; combine with arriving_at for an absolute instant."},"marketing_carrier_iata":{"type":"string","example":"BA","description":"IATA code of the selling airline (marketing_carrier_name)."},"marketing_carrier_name":{"type":"string","example":"British Airways","description":"Airline SELLING this leg. Differs from carrier_name (the operating airline) on codeshares — e.g. sold by British Airways, operated by Iberia Express. Explains same-flight offers priced differently by seller."},"operating_flight_number":{"type":"string","example":"1692","description":"Operating carrier's own flight number; flight_number is the marketed one shown on the boarding pass."},"technical_stop_airports":{"type":"array","items":{"type":"string"},"description":"IATA codes of the technical-stop airports, in order."}},"description":"One flight leg of an offer. Times are in the airport's local timezone and carry no UTC offset."},"description":"Every leg of the itinerary, in order."},"conditions":{"allOf":[{"type":"object","properties":{"change_allowed":{"type":"boolean","nullable":true,"description":"true = changeable (see penalty), false = not changeable, null = airline did not say."},"refund_allowed":{"type":"boolean","nullable":true,"description":"true = refundable before departure (see penalty), false = non-refundable, null = airline did not say."},"change_penalty_amount":{"type":"string","example":"0","description":"Decimal fee to change, \"0\" = free change. Absent when unknown."},"refund_penalty_amount":{"type":"string","example":"0","description":"Decimal fee to refund, \"0\" = free refund. Absent when unknown."},"change_penalty_currency":{"type":"string","example":"USD"},"refund_penalty_currency":{"type":"string","example":"USD"}},"description":"What the fare permits before departure. Every field of the parent offer is emitted; null on an *_allowed field means the airline did not disclose it — treat as unknown, do NOT assume false. Penalty amounts are decimal strings in the given currency; \"0\" means free."}],"nullable":true,"description":"Change/refund permissions for this fare; null when the airline disclosed nothing."},"expires_at":{"type":"string","format":"date-time"},"owner_name":{"type":"string","example":"Air Europa"},"arriving_at":{"type":"string","example":"2026-08-02T21:10:00","description":"FINAL arrival at the journey destination, airport-local time with no UTC offset."},"cabin_class":{"type":"string","example":"economy","description":"Normalized cabin: economy, premium_economy, business, first. Empty when unknown."},"origin_iata":{"type":"string","example":"MAD","description":"Start of the whole journey (first leg's origin)."},"departing_at":{"type":"string","example":"2026-08-02T14:42:00","description":"Journey departure, airport-local time with no UTC offset."},"fare_options":{"type":"array","items":{"type":"object","required":["offer_id","total_amount_decimal","total_currency","refundable","changeable","checked_bags_included"],"properties":{"cabin":{"type":"string","description":"browser tier only: cabin label from the supplier's fare menu."},"offer_id":{"type":"string"},"changeable":{"type":"boolean","nullable":true},"conditions":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string"}}},"description":"browser tier only: the supplier's verbatim condition notes (baggage, refund policy)."},"directions":{"type":"array","items":{"type":"object","required":["fare_brand_name","checked_bags_included"],"properties":{"fare_brand_name":{"type":"string","example":"Standard Economy"},"checked_bags_included":{"type":"integer","nullable":true}}},"description":"Round trips only: the brand and checked allowance of each direction in order (outbound, inbound). This is what differs between \"Standard Economy / Basic Economy\" and \"Basic Economy / Standard Economy\" at the same price — the journey-level checked_bags_included is the minimum of the two. Absent on one-ways and on browser-tier menus."},"fare_index":{"type":"integer","description":"browser tier only: the fare's position in the supplier's menu - the index the book flow selects. The row's offer_id embeds it."},"refundable":{"type":"boolean","nullable":true,"description":"null = airline did not say."},"seats_left":{"type":"integer","nullable":true,"description":"browser tier only: seats remaining at this fare, when the supplier discloses it."},"total_currency":{"type":"string","example":"USD"},"fare_brand_name":{"type":"string","example":"Comfort Balearic"},"total_amount_decimal":{"type":"string","example":"265.30"},"change_penalty_amount":{"type":"string","example":"190.00","description":"Fee the airline states for a change before departure, when changeable = true and a fee is disclosed (e.g. \"190.00\"). Absent when free, unknown, or not changeable."},"checked_bags_included":{"type":"integer","nullable":true},"refund_penalty_amount":{"type":"string","description":"Fee the airline states for a refund before departure, when refundable = true and a fee is disclosed. Absent when free, unknown, or non-refundable."},"change_penalty_currency":{"type":"string","example":"USD"},"refund_penalty_currency":{"type":"string"}},"description":"Compact form of one fare inside a grouped result: enough to answer refundability, changeability, baggage and price questions without another search, and to act on the fare via its offer_id. refundable/changeable keep the null-means-undisclosed semantics."},"description":"Present on cheapest_per_itinerary searches: EVERY fare of this itinerary (this offer included), cheapest first. The grouped view is lossless on price, brand, refund/change conditions and checked bags — never claim such a fare does not exist without reading this list."},"tax_currency":{"type":"string","example":"USD"},"total_amount":{"type":"integer","format":"int64","example":67600000,"description":"Atomic amount used by the API for money comparisons."},"base_currency":{"type":"string","example":"USD"},"passenger_ids":{"type":"array","items":{"type":"string"}},"comparison_key":{"type":"string","example":"cmp_abc123","description":"Identifies the physical itinerary: offers with the SAME comparison_key are the same flights at different fares or sellers. Group by it to deduplicate results (a search commonly returns 100+ offers for a few dozen itineraries)."},"total_currency":{"type":"string","example":"USD"},"fare_brand_name":{"type":"string","example":"Flexible Balearic","description":"Airline's name for this fare (e.g. \"Basic\", \"Flexible Balearic\"). The SAME flight is listed once per fare and per seller: use this plus conditions, baggage and owner_name to tell same-flight offers apart. Empty when the airline did not name the fare."},"technical_stops":{"type":"integer","description":"Refuelling-type stops across all legs, without plane change. Truly non-stop = stops 0 and technical_stops 0."},"destination_iata":{"type":"string","example":"LIS","description":"End of the whole journey (last leg's destination), NOT the first connection point."},"origin_time_zone":{"type":"string","example":"America/New_York","description":"IANA timezone of the journey origin."},"fare_options_count":{"type":"integer","description":"Present only on cheapest_per_itinerary searches: how many fares of this same itinerary were collapsed into this cheapest one."},"tax_amount_decimal":{"type":"string","example":"24.50"},"total_emissions_kg":{"type":"string","example":"21","description":"Estimated CO2 for the journey, decimal kilograms. Empty when the provider does not report it. Varies several-fold between offers on the same route."},"base_amount_decimal":{"type":"string","example":"65.00","description":"Fare before tax; total = base + tax."},"payment_required_by":{"type":"string","format":"date-time"},"total_amount_decimal":{"type":"string","example":"67.60"},"checked_bags_included":{"type":"integer","nullable":true,"description":"Checked bags included for the WHOLE journey (minimum across legs). null = the airline did not say — do not assume 0."},"destination_time_zone":{"type":"string","example":"America/Los_Angeles","description":"IANA timezone of the journey destination."},"carry_on_bags_included":{"type":"integer","nullable":true,"description":"Carry-on bags included for the whole journey. null = unknown."},"requires_instant_payment":{"type":"boolean"},"cabin_class_marketing_name":{"type":"string","example":"ECONOMY","description":"The airline's own name for the cabin."},"price_guarantee_expires_at":{"type":"string","format":"date-time"},"identity_documents_required":{"type":"boolean","description":"true = this fare demands passenger identity documents, which this API cannot collect: POST /air/intents refuses such offers with 409 identity_documents_not_supported. Filter them out before choosing."},"supported_loyalty_programmes":{"type":"array","items":{"type":"string"},"description":"IATA codes of airline loyalty programmes this offer can credit miles to (e.g. BA, AF, UA). Empty when none or unknown."}}}],"description":"The offer re-fetched live: total_amount and expires_at are CURRENT, unlike a minutes-old search result."},"available_services":{"type":"array","items":{"type":"object","required":["type","maximum_quantity","total_amount_decimal","total_currency"],"properties":{"type":{"type":"string","example":"baggage","description":"Service family, e.g. baggage."},"baggage_type":{"type":"string","example":"checked","description":"For baggage services: checked or carry_on."},"total_currency":{"type":"string","example":"USD"},"maximum_quantity":{"type":"integer","example":3},"maximum_weight_kg":{"type":"integer","example":23,"nullable":true},"total_amount_decimal":{"type":"string","example":"45.00","description":"Price PER UNIT of the service."}},"description":"One purchasable ancillary on an offer. INFORMATIONAL ONLY: services cannot be bought through this API — use these prices to compare a bare fare plus a paid bag against a fare that already includes one."},"description":"Purchasable extras with prices. Empty array = the airline offers none on this fare (an answer, not missing data)."}}},"example":null,"exampleRequest":null,"tags":["x402","shopping"],"displayCostAmount":"0.01","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.01/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_mkxbxVVtOYyjtq_8IGOLU","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.01","costPer":"request","priority":0,"asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Re-fetches a flight offer from the original supplier to return the current price, expiry, available ancillary services (bags), and the full fare-brand menu for that flight.","exampleAgentPrompt":"Before I book that Madrid to Lisbon flight, can you refresh the offer with ID fastbooking:off_0000B5xGbDG4ifAoeDTtG9 to confirm the current price, when it expires, and show me all available fare brands and what checked bag options I can add?","exampleUseCases":[{"title":"Confirm price before booking","prompt":"I found a flight from London to Barcelona earlier — offer ID is fastbooking:off_000XYZabc123. Can you re-check the current price and confirm it's still valid before I commit to booking it?"},{"title":"Compare all fare tiers on a flight","prompt":"For that Rome to Amsterdam flight I searched — offer fastbooking:off_000RTAmst456 — can you pull up every available fare brand like Basic, Standard, and Flex with their current prices so I can decide which one to book?"},{"title":"Check baggage add-on options","prompt":"I'm about to book offer fastbooking:off_000LHRbag789 for my flight to New York — can you tell me what checked bag options I can purchase, including the weight limits and prices for each?"}],"resultDescription":"Returns the refreshed offer object with current total price, expires_at timestamp, available_services (purchasable extras such as checked bags with weight limits and prices), and fare_options — the full fare-brand menu for that specific flight from the supplier, price-ascending, each with its own bookable offer_id, cabin class, seats_left, and conditions.","failureModes":["Offer expired or no longer available at the supplier — returns error indicating the offer is stale","Invalid or malformed offer_id — returns validation error","Supplier is temporarily unreachable — timeout or upstream error","Browser-tier offers (trip.com, ryanair) may take longer and cost $0.10 due to real browser session requirement","Payment not included or insufficient — returns 402 Payment Required with applicable price quoted"],"whenToPreferThis":"Use this endpoint immediately before booking a flight to confirm the offer is still valid, get the live price, and enumerate all fare brands and ancillary options. Essential when you want to let the user pick a different fare tier (e.g. Flex instead of Basic) or add checked bags before calling POST /air/intents. Also use it when search results are stale or when you need the full fare menu that search may have omitted.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-12T12:37:03.421Z","isFirstParty":false,"canonicalSlug":"brij-air-offer-details-ead5869c"}