Integrate this application with the Travel Search Engine (TSE) API. Read these first, in this order: 1. https://developers.travnet.app/llms-full.txt The conventions and every endpoint, with parameters and descriptions. 2. https://developers.travnet.app/openapi.json The source of truth for every request and response shape. 3. If you support MCP, connect to https://mcp.travnet.app and call api_conventions first. Claude Code: claude mcp add --transport http tse https://mcp.travnet.app Hosts: - Test: https://test.travnet.app (use this until I say otherwise) - Production: https://api.travnet.app Build, in this order, and test each step against the test host before the next: 1. Sign in: POST /api/v1/auth/login with email and password. Send access_token as "Authorization: Bearer " on every call. Renew it with POST /api/v1/auth/refresh before it expires. 2. Flight search: POST /api/v1/flight/getFare returns a search_id. Read the results from GET /api/v1/flight/getFare/batch/{search_id}, or stream them from GET /api/v1/flight/getFare/stream/{search_id} (Server-Sent Events). 3. Booking: POST /api/v1/bookings/revalidation to confirm the price, then POST /api/v1/bookings/createPnr. 4. Payment and ticketing: POST /api/v1/bookings/{id}/authorize, then POST /api/v1/bookings/{id}/payment/capture, then POST /api/v1/bookings/{id}/ticket. 5. Manage: GET /api/v1/bookings/{id}. Offer only the actions its supplier_actions marks true. 6. Hotels and transport, if this application needs them: the same search, book and manage pattern under /api/v1/hotel and /api/v1/transport. Rules: - Money is an integer in minor units on fields ending _minor: 45000 means 450.00. - Every call that creates or moves money sends an Idempotency-Key header. A retry sends the same key, never a new one. - A 503 with an X-Supplier-Status header means the supplier failed (502) or timed out (504); the reason is in detail. Detail code BOOKING_PENDING_CONFIRMATION means the booking may exist: do not book again, read the booking until it settles. - A 501 means this booking's supplier does not offer that action. - 429 means rate limited: wait and retry. - Never put tokens, offers or passenger details in a URL. Never hard code credentials. - Show the user the API's own error reason rather than a generic failure.