{"openapi":"3.1.0","info":{"title":"TransfersManager Partner API","version":"0.1.0","description":"API for travel agencies and OTAs that send transfers to a TransfersManager operator. Authenticate with the header `X-API-Key: tmp_...` issued by the operator. Every booking is scoped to that operator and to your key. Webhooks are signed with HMAC-SHA256 (`X-TM-Signature: t=<unix>,v1=<hex>` over `<t>.<body>`). Docs: https://transfersmanager.ai/en/developers/partner-api"},"paths":{"/api/v1/partners/":{"get":{"tags":["Partners"],"summary":"List Partners","description":"List all partners","operationId":"list_partners_api_v1_partners__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PartnerResponse"},"title":"Response List Partners Api V1 Partners  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/partners/lookup":{"get":{"tags":["Partners"],"summary":"Partners Lookup","description":"Get partners for role switcher dropdown","operationId":"partners_lookup_api_v1_partners_lookup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Partners Lookup Api V1 Partners Lookup Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/partners/fleet/network":{"get":{"tags":["Partners"],"summary":"List Fleet Partners","description":"List the commercial partners (Channels) referring bookings to the\ncurrent user's fleet — the fleet-scoped equivalent of admin's\nGET /admin/partners, filtered to Partner.fleet_id == caller's fleet.","operationId":"list_fleet_partners_api_v1_partners_fleet_network_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Partner"},"title":"Response List Fleet Partners Api V1 Partners Fleet Network Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/partners/fleet/earnings":{"get":{"tags":["Partners"],"summary":"Get Fleet Partner Earnings","description":"Earnings the current fleet has generated for/via its own commercial\npartners (Channels) — bookings a partner referred, and the channel fee\ntied to each. Scoped to Commission.fleet_id == caller's fleet AND\nCommission.channel_id IS NOT NULL (only channel-attributed commissions,\nnever the platform's own fee).\n\ntotal_earned    = channel fee already settled into a PAID ChannelPayout.\npending_balance = channel fee not yet linked to any payout (mirrors\n                  admin_channel_payouts.py's _ACCRUABLE definition).\nthis_month      = channel fee on commissions created this calendar month\n                  (settled or pending — matches partners-fastapi's own\n                  /partners/earnings this_month semantics).","operationId":"get_fleet_partner_earnings_api_v1_partners_fleet_earnings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetPartnerEarnings"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/partner/me":{"get":{"tags":["Partner API"],"summary":"Who this key is","operationId":"whoami_api_v1_partner_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerIdentity"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"}},"security":[{"PartnerApiKey":[]}]}},"/api/v1/partner/vehicle-classes":{"get":{"tags":["Partner API"],"summary":"Vehicle classes of the operator","operationId":"vehicle_classes_api_v1_partner_vehicle_classes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/VehicleClassOut"},"type":"array","title":"Response Vehicle Classes Api V1 Partner Vehicle Classes Get"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"}},"security":[{"PartnerApiKey":[]}]}},"/api/v1/partner/quotes":{"post":{"tags":["Partner API"],"summary":"Quote a transfer with the operator's prices","description":"One option per vehicle class that fits the group, each with its own\nsigned `quote_id`. The price is the operator's engine (the one that prices\nits own bookings) with the operator's adjustment for this partner, and it\nis EXACTLY what the booking will be: booking a `quote_id` never\nrecalculates. A quote lives 24 hours.","operationId":"create_quote_api_v1_partner_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"PartnerApiKey":[]}]}},"/api/v1/partner/bookings":{"post":{"tags":["Partner API"],"summary":"Book a quote","description":"Creates a CONFIRMED ride in the operator's dispatch at the quoted price.\n\n**Idempotent.** `external_ref` (your reference) is unique for your key:\nsending it again with the same body returns the same booking with\n`duplicate: true` and status 200; with a different body, 409. The\n`Idempotency-Key` header gives the same guarantee for blind retries.\n\n**Payment.** Nothing is charged through TransfersManager: you settle with\nthe operator as agreed.","operationId":"create_booking_api_v1_partner_bookings_post","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__partner_api__BookingOut"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"},"200":{"description":"This external_ref / Idempotency-Key already existed: the same booking (duplicate=true)"},"409":{"description":"external_ref or Idempotency-Key reused with a different body, or still in progress"},"422":{"description":"quote_id invalid, expired, of another partner, or passengers above the quote"}}},"get":{"tags":["Partner API"],"summary":"Your bookings with this operator","operationId":"list_bookings_api_v1_partner_bookings_get","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"external_ref","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"External Ref"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__partner_api__BookingPage"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/partner/bookings/{ref}":{"get":{"tags":["Partner API"],"summary":"One booking","description":"`ref` is the booking_id, the confirmation number (TM26-XXXXXX) or your external_ref.","operationId":"get_booking_api_v1_partner_bookings__ref__get","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__partner_api__BookingOut"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Partner API"],"summary":"Modify a booking","description":"Passenger, flight, notes and address labels change freely until the\ndriver leaves. Pickup time, passengers, luggage and seats change the price:\nquote again (same pickup and drop-off) and pass the new `quote_id`; the\nbooking takes that price.","operationId":"modify_booking_api_v1_partner_bookings__ref__patch","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingModifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__partner_api__BookingOut"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/partner/bookings/{ref}/cancellation":{"get":{"tags":["Partner API"],"summary":"What cancelling now would cost","operationId":"cancellation_preview_api_v1_partner_bookings__ref__cancellation_get","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancellationPreview"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/partner/bookings/{ref}/cancel":{"post":{"tags":["Partner API"],"summary":"Cancel a booking","description":"Cancels with the operator's cancellation policy as it was when you\nbooked. The response's `cancellation` says the notice, the share kept by\nthe operator (`fee_pct`, `fee_amount`) and the policy it came from.\nCancelling twice returns the same result. Once the passenger is on board\n(or the trip is over) it is 409: talk to the operator.","operationId":"cancel_booking_api_v1_partner_bookings__ref__cancel_post","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__partner_api__CancelRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__partner_api__BookingOut"}}}},"401":{"description":"Missing, invalid or revoked partner key"},"402":{"description":"The operator's plan no longer includes integrations"},"429":{"description":"Too many requests for this key, or the operator's monthly quota is spent"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BookingCreateRequest":{"properties":{"quote_id":{"type":"string","maxLength":2048,"minLength":10,"title":"Quote Id"},"external_ref":{"type":"string","maxLength":120,"minLength":1,"title":"External Ref","description":"Your own booking reference. Unique per partner: repeating it returns the same booking."},"passenger":{"$ref":"#/components/schemas/PassengerIn"},"pickup_address":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Pickup Address","description":"Label the driver sees. Defaults to the quoted pickup."},"dropoff_address":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Dropoff Address"},"passengers":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Passengers","description":"Defaults to the quoted number; never more."},"flight_number":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Flight Number"},"meet_board_name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Meet Board Name"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"type":"object","required":["quote_id","external_ref","passenger"],"title":"BookingCreateRequest"},"BookingModifyRequest":{"properties":{"passenger":{"anyOf":[{"$ref":"#/components/schemas/PassengerIn"},{"type":"null"}]},"flight_number":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Flight Number"},"meet_board_name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Meet Board Name"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"},"pickup_address":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Pickup Address"},"dropoff_address":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Dropoff Address"},"quote_id":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Quote Id","description":"To change pickup time, passengers, luggage or seats: quote again with the new data (same pickup and drop-off) and pass the new quote_id. The booking takes its price."}},"additionalProperties":false,"type":"object","title":"BookingModifyRequest","description":"Fields that do not change the price, and a new quote for those that do."},"CancellationOut":{"properties":{"hours_of_notice":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hours Of Notice"},"refund_pct":{"type":"integer","title":"Refund Pct","description":"Share of the price NOT charged, per the operator's policy."},"fee_pct":{"type":"integer","title":"Fee Pct"},"fee_amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Fee Amount"},"currency":{"type":"string","title":"Currency"},"policy_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Source"},"cancelled_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancelled By"}},"type":"object","required":["refund_pct","fee_pct","fee_amount","currency"],"title":"CancellationOut"},"CancellationPreview":{"properties":{"booking_id":{"type":"string","format":"uuid","title":"Booking Id"},"cancellable":{"type":"boolean","title":"Cancellable"},"status":{"type":"string","enum":["pending_confirmation","confirmed","driver_assigned","driver_en_route","driver_arrived","picked_up","completed","no_show","cancelled","rejected"],"title":"Status"},"cancellation":{"anyOf":[{"$ref":"#/components/schemas/CancellationOut"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["booking_id","cancellable","status"],"title":"CancellationPreview"},"FleetPartnerEarnings":{"properties":{"total_earned":{"type":"number","title":"Total Earned"},"pending_balance":{"type":"number","title":"Pending Balance"},"this_month":{"type":"number","title":"This Month"},"total_conversions":{"type":"integer","title":"Total Conversions"},"conversion_rate":{"type":"number","title":"Conversion Rate"},"monthly_breakdown":{"items":{"$ref":"#/components/schemas/FleetPartnerMonthlyEarning"},"type":"array","title":"Monthly Breakdown"}},"type":"object","required":["total_earned","pending_balance","this_month","total_conversions","conversion_rate","monthly_breakdown"],"title":"FleetPartnerEarnings"},"FleetPartnerMonthlyEarning":{"properties":{"month":{"type":"string","title":"Month"},"earned":{"type":"number","title":"Earned"},"pending":{"type":"number","title":"Pending"}},"type":"object","required":["month","earned","pending"],"title":"FleetPartnerMonthlyEarning"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Partner":{"properties":{"fleet_id":{"type":"string","format":"uuid","title":"Fleet Id"},"name":{"type":"string","maxLength":255,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"partner_type":{"type":"string","maxLength":50,"title":"Partner Type"},"status":{"type":"string","maxLength":50,"title":"Status","default":"pending"},"contact_person":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Contact Person"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Phone"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"website":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Website"},"tax_id":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Tax Id"},"business_license":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Business License"},"commission_percentage":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Commission Percentage"},"fixed_commission":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Fixed Commission"},"minimum_commission":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Minimum Commission"},"partnership_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Partnership Start Date"},"partnership_end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Partnership End Date"},"is_active":{"type":"boolean","title":"Is Active","default":true},"auto_payment":{"type":"boolean","title":"Auto Payment","default":false},"payment_threshold":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Payment Threshold"},"is_dummy":{"type":"boolean","title":"Is Dummy","default":false},"id":{"type":"integer","title":"Id"},"total_bookings":{"type":"integer","title":"Total Bookings","default":0},"total_revenue":{"type":"number","title":"Total Revenue","default":0.0},"total_commission_paid":{"type":"number","title":"Total Commission Paid","default":0.0},"last_payment_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Payment Date"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["fleet_id","name","partner_type","id"],"title":"Partner"},"PartnerIdentity":{"properties":{"partner_name":{"type":"string","title":"Partner Name"},"operator_name":{"type":"string","title":"Operator Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"rate_limit_per_minute":{"type":"integer","title":"Rate Limit Per Minute"},"webhook_configured":{"type":"boolean","title":"Webhook Configured"}},"type":"object","required":["partner_name","operator_name","key_prefix","rate_limit_per_minute","webhook_configured"],"title":"PartnerIdentity"},"PartnerResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"partner_type":{"type":"string","title":"Partner Type"}},"type":"object","required":["id","name","partner_type"],"title":"PartnerResponse"},"PassengerIn":{"properties":{"name":{"type":"string","maxLength":150,"minLength":1,"title":"Name"},"phone":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"}},"type":"object","required":["name"],"title":"PassengerIn"},"PassengerOut":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"PassengerOut"},"PlaceIn":{"properties":{"address":{"type":"string","maxLength":300,"minLength":2,"title":"Address","description":"Address, hotel, airport or place name."},"lat":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat"},"lng":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lng"}},"type":"object","required":["address"],"title":"PlaceIn"},"PlaceOut":{"properties":{"address":{"type":"string","title":"Address"},"lat":{"type":"number","title":"Lat"},"lng":{"type":"number","title":"Lng"}},"type":"object","required":["address","lat","lng"],"title":"PlaceOut"},"QuoteOption":{"properties":{"quote_id":{"type":"string","title":"Quote Id","description":"Pass it to POST /bookings. Signed: price and trip cannot be altered."},"vehicle_class":{"$ref":"#/components/schemas/VehicleClassOut"},"price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Price"},"currency":{"type":"string","title":"Currency"},"price_is_approximate":{"type":"boolean","title":"Price Is Approximate","default":false},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["quote_id","vehicle_class","price","currency","expires_at"],"title":"QuoteOption"},"QuoteRequest":{"properties":{"pickup_time":{"type":"string","format":"date-time","title":"Pickup Time","description":"ISO 8601 WITH offset (2026-10-20T09:30:00+02:00). Without offset, pass `timezone`; a time without either is refused (guessing the zone moves a pickup two hours)."},"timezone":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Timezone","description":"IANA zone for a pickup_time without offset."},"passengers":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Passengers","default":1},"luggage":{"type":"integer","maximum":50.0,"minimum":0.0,"title":"Luggage","default":1},"child_seats":{"type":"integer","maximum":6.0,"minimum":0.0,"title":"Child Seats","default":0},"baby_seats":{"type":"integer","maximum":6.0,"minimum":0.0,"title":"Baby Seats","default":0},"booster_seats":{"type":"integer","maximum":6.0,"minimum":0.0,"title":"Booster Seats","default":0},"pickup":{"$ref":"#/components/schemas/PlaceIn"},"dropoff":{"$ref":"#/components/schemas/PlaceIn"},"vehicle_class":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Vehicle Class","description":"Only this vehicle class code."}},"type":"object","required":["pickup_time","pickup","dropoff"],"title":"QuoteRequest"},"QuoteResponse":{"properties":{"pickup":{"$ref":"#/components/schemas/PlaceOut"},"dropoff":{"$ref":"#/components/schemas/PlaceOut"},"pickup_time":{"type":"string","format":"date-time","title":"Pickup Time"},"passengers":{"type":"integer","title":"Passengers"},"luggage":{"type":"integer","title":"Luggage"},"distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Km"},"options":{"items":{"$ref":"#/components/schemas/QuoteOption"},"type":"array","title":"Options"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["pickup","dropoff","pickup_time","passengers","luggage","options"],"title":"QuoteResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VehicleClassOut":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"max_passengers":{"type":"integer","title":"Max Passengers"},"max_luggage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Luggage"}},"type":"object","required":["code","name","max_passengers"],"title":"VehicleClassOut"},"app__schemas__partner_api__BookingOut":{"properties":{"booking_id":{"type":"string","format":"uuid","title":"Booking Id"},"confirmation_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Number"},"external_ref":{"type":"string","title":"External Ref"},"status":{"type":"string","enum":["pending_confirmation","confirmed","driver_assigned","driver_en_route","driver_arrived","picked_up","completed","no_show","cancelled","rejected"],"title":"Status"},"pickup":{"$ref":"#/components/schemas/PlaceOut"},"dropoff":{"$ref":"#/components/schemas/PlaceOut"},"pickup_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pickup Time"},"passengers":{"type":"integer","title":"Passengers"},"luggage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Luggage"},"child_seats":{"type":"integer","title":"Child Seats","default":0},"baby_seats":{"type":"integer","title":"Baby Seats","default":0},"vehicle_class":{"anyOf":[{"$ref":"#/components/schemas/VehicleClassOut"},{"type":"null"}]},"price":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"flight_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flight Number"},"passenger":{"anyOf":[{"$ref":"#/components/schemas/PassengerOut"},{"type":"null"}]},"driver":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__partner_api__DriverOut"},{"type":"null"}]},"vehicle":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__partner_api__VehicleOut"},{"type":"null"}]},"cancellation":{"anyOf":[{"$ref":"#/components/schemas/CancellationOut"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"duplicate":{"type":"boolean","title":"Duplicate","description":"True when this external_ref / Idempotency-Key already existed.","default":false}},"type":"object","required":["booking_id","external_ref","status","pickup","dropoff","passengers"],"title":"BookingOut"},"app__schemas__partner_api__BookingPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/app__schemas__partner_api__BookingOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"BookingPage"},"app__schemas__partner_api__CancelRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Reason"}},"type":"object","title":"CancelRequest"},"app__schemas__partner_api__DriverOut":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"type":"object","title":"DriverOut"},"app__schemas__partner_api__VehicleOut":{"properties":{"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"license_plate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Plate"}},"type":"object","title":"VehicleOut"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"PartnerApiKey":{"type":"apiKey","description":"Partner key issued by the operator from its dashboard (Settings, Partners API). Format: `tmp_...`. It works only on that operator's fleet.","in":"header","name":"X-API-Key"}}}}