{"openapi":"3.1.0","info":{"title":"Panion Partner API","version":"1.0.0","description":"Access to your own Panion data, for one or several of your operators: bookings, the daily manifest, sales and analytics, plus narrow writes such as checking guests in and sending a balance payment link.\n\nAnalytics follow one visibility rule, the same one Oracle uses. (1) Your own tours on every surface they are sold on: each Panion-powered site (funnel and sales) and each other sales channel in your booking system, such as GetYourGuide or Viator (sales and revenue only). (2) Whole-site traffic for the sites your operators are on. (3) Sales of other operators' tours only on a site your operator owns; on a site you are only added to, sales cover your own tours. Analytics are read from pre-computed daily rollups that refresh every five minutes, never from raw events.\n\nThe API never creates bookings. Bookings are made through Panion checkout or your own booking system. No endpoint reserves, books, rebooks or mints share links.\n\nWrites act on real bookings. Each has its own scope, off on a new key unless ticked. Every write needs an `Idempotency-Key` header: the same key and request within 24 hours replays the first response with `Idempotent-Replayed: true`, a different request with the same key answers 422, and a missing key answers 400. Each key has daily write limits (by default 2000 check-ins and 50 payment links per UTC day); past a limit the API answers 429 with `Retry-After`. There are no bulk endpoints.\n\nAuthenticate with `Authorization: Bearer pnn_live_...`. Keys are created by team owners and admins in Oracle under Settings, API keys. Scopes: `bookings:read` (Bookings), `manifest:read` (Manifest), `guests.contact:read` (Guest contact details), `finance:read` (Sales), `analytics:read` (Analytics), `checkins:write` (Check guests in (write)), `payment_links:write` (Send balance payment links (write)), `bookings.cancel:write` (Cancel bookings with policy refund (write)), `bookings.reschedule:write` (Reschedule bookings (write)).\n\nOne key can cover several operators: the ones its creator owns or administers and picked for it. Requests act for those where the creator is still owner or admin (none left: 401). Reads return every operator's data, and every booking, manifest passenger and sales row has a `partner` (`id`, `name`). Add `partner_id` to a read for one operator; an id that is not one of the key's operators answers 404. Operators sharing one booking system account are shown once. `GET /api/v1/me` lists the key's operators.\n\nErrors are RFC 9457 problem details. Money is integer minor units with an ISO 4217 currency. Times are ISO 8601; departure times are local wall-clock times with an IANA timezone."},"servers":[{"url":"https://www.panion.travel"}],"security":[{"bearerAuth":[]}],"paths":{"/api/v1/me":{"get":{"operationId":"getMe","summary":"The key and the operators it acts for","description":"Returns the key's name, scopes and expiry, and every operator it acts for right now (`partners`).","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"},"examples":{"example1":{"summary":"A key with read scopes","value":{"key":{"id":"k7h2m4p9","name":"Front desk sync","scopes":["bookings:read","manifest:read"],"created_at":"2026-10-01T08:00:00Z","expires_at":"2027-10-01T08:00:00Z"},"partner":{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"},"partners":[{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"}]}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (300 requests per minute per key)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/bookings":{"get":{"operationId":"listBookings","summary":"List bookings","description":"Bookings made through Panion for the tours of every operator on the key (or the one in `partner_id`), newest first, 50 per page by default. Each carries its `partner`. Holds and abandoned checkouts never appear.\n\nScope: `bookings:read`.","parameters":[{"in":"query","name":"date_from","schema":{"description":"Experience date on or after (YYYY-MM-DD).","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"description":"Experience date on or after (YYYY-MM-DD)."},{"in":"query","name":"date_to","schema":{"description":"Experience date on or before (YYYY-MM-DD).","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"description":"Experience date on or before (YYYY-MM-DD)."},{"in":"query","name":"updated_since","schema":{"description":"Only bookings created or changed at or after this instant.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"description":"Only bookings created or changed at or after this instant."},{"in":"query","name":"status","schema":{"type":"string","enum":["CONFIRMED","CANCELLED","REFUNDED"]}},{"in":"query","name":"cursor","schema":{"description":"`next_cursor` of the last page.","type":"string","maxLength":200},"description":"`next_cursor` of the last page."},{"in":"query","name":"limit","schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"partner_id","schema":{"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key.","type":"string"},"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingList"},"examples":{"example1":{"summary":"Bookings for one week","value":{"data":[{"id":"8f6d2c1e-4b7a-4e3f-9c2d-1a5b6c7d8e9f","confirmation_code":"PNN-7K2Q9X","status":"CONFIRMED","partner":{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"},"tour":{"id":"3a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d","name":"Northern Lights Chase"},"experience_date":"2026-11-14","start_time":"19:00","timezone":"Europe/Oslo","participants":2,"amount_minor":359800,"currency":"NOK","channel":"panion","guest":{"name":"Ingrid Hansen"},"booked_at":"2026-10-01T12:30:00Z","created_at":"2026-10-01T12:30:00Z","updated_at":null}],"next_cursor":null}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (300 requests per minute per key)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/bookings/{id}":{"get":{"operationId":"getBooking","summary":"Get one booking","description":"One booking by its id. A booking whose tour belongs to none of the key's operators (or not to `partner_id`) answers 404.\n\nScope: `bookings:read`.","parameters":[{"in":"query","name":"partner_id","schema":{"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key.","type":"string"},"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key."},{"in":"path","name":"id","schema":{"type":"string","description":"Booking id (UUID)."},"required":true,"description":"Booking id (UUID)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"},"examples":{"example1":{"summary":"A paid booking","value":{"id":"8f6d2c1e-4b7a-4e3f-9c2d-1a5b6c7d8e9f","confirmation_code":"PNN-7K2Q9X","status":"CONFIRMED","partner":{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"},"tour":{"id":"3a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d","name":"Northern Lights Chase"},"experience_date":"2026-11-14","start_time":"19:00","timezone":"Europe/Oslo","participants":2,"amount_minor":359800,"currency":"NOK","channel":"panion","guest":{"name":"Ingrid Hansen"},"booked_at":"2026-10-01T12:30:00Z","created_at":"2026-10-01T12:30:00Z","updated_at":null,"provider_reference":"ARC-123456","payment":{"strategy":"pay_now","pay_later":null},"commission":{"amount_minor":53970,"rate_percent":15,"currency":"NOK","status":"pending"}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found, or not yours","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (300 requests per minute per key)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/manifest":{"get":{"operationId":"getManifest","summary":"Departures and passengers for one day","description":"Every departure the key's operators (or the one in `partner_id`) run on a day, with passengers from every channel, their check-in state and their `partner`. Operators sharing one booking system account show each booking once. Read from your booking system's mirror, which refreshes every two hours for near-term departures.\n\nScope: `manifest:read`.","parameters":[{"in":"query","name":"date","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Departure day (YYYY-MM-DD), local time."},"required":true,"description":"Departure day (YYYY-MM-DD), local time."},{"in":"query","name":"partner_id","schema":{"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key.","type":"string"},"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manifest"},"examples":{"example1":{"summary":"One departure","value":{"date":"2026-11-14","timezone":"Europe/Oslo","synced_at":"2026-11-14T10:00:00Z","totals":{"departures":1,"bookings":1,"passengers":2,"checked_in":0,"no_show":0},"departures":[{"start_time":"19:00","timezone":"Europe/Oslo","product_title":"Northern Lights Chase","rate_title":"Standard","passengers":2,"checked_in":0,"no_show":0,"bookings":[{"id":"5c4b3a29-1807-4f6e-9d5c-4b3a29180716","reference":"ARC-123456","confirmation_code":"PNN-7K2Q9X","status":"CONFIRMED","partner":{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"},"channel":{"class":"panion","source":"Panion","title":"Panion"},"participants":2,"pax_breakdown":[{"title":"Adult","quantity":2}],"guest":{"name":"Ingrid Hansen"},"pickup":{"place":"Radisson Blu Hotel","time":"18:45"},"payment_status":"PAID","check_in":{"status":null,"present":null}}]}],"cancelled":[]}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (300 requests per minute per key)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/sales":{"get":{"operationId":"getSales","summary":"Sales per day and channel","description":"Daily totals for a date range: Panion sales by booking date per operator, and every other channel from your booking system, for every operator on the key or the one in `partner_id`.\n\nScope: `finance:read`.","parameters":[{"in":"query","name":"from","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"First day (YYYY-MM-DD)."},"required":true,"description":"First day (YYYY-MM-DD)."},{"in":"query","name":"to","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Last day, inclusive (YYYY-MM-DD). At most 366 days."},"required":true,"description":"Last day, inclusive (YYYY-MM-DD). At most 366 days."},{"in":"query","name":"currency","schema":{"default":"NOK","description":"Currency for other-channel figures.","type":"string","enum":["EUR","NOK"]},"description":"Currency for other-channel figures."},{"in":"query","name":"partner_id","schema":{"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key.","type":"string"},"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesSummary"},"examples":{"example1":{"summary":"One day","value":{"from":"2026-11-01","to":"2026-11-01","panion":{"days":[{"date":"2026-11-01","revenue_minor":359800,"bookings":1,"currency":"NOK","partner":{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"}}],"totals":[{"currency":"NOK","revenue_minor":359800,"bookings":1,"partner":{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"}}]},"other_channels":{"currency":"NOK","partners":[{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"}],"available":true,"days":[{"date":"2026-11-01","revenue_minor":539700,"bookings":2}],"channels":[{"label":"Desk","revenue_minor":539700,"bookings":2,"participants":3}],"totals":{"revenue_minor":539700,"bookings":2,"participants":3}}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (300 requests per minute per key)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/analytics/tours":{"get":{"operationId":"getTourAnalytics","summary":"Tour funnel and sales per surface and day","description":"Your tours on every surface they are sold on: each Panion-powered site (sessions that viewed the tour, checked availability, opened checkout and tried to pay, then bookings, revenue in EUR and conversion rates) and each other sales channel in your booking system, such as GetYourGuide or Viator (bookings, participants and revenue only: a channel sale has no session, so no funnel and no rate). If your operator owns a site, every operator's tours sold on it are included too, marked `basis: site_owner`. Days are UTC. At most 400 days per request.\n\nScope: `analytics:read`.","parameters":[{"in":"query","name":"from","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"First UTC day (YYYY-MM-DD)."},"required":true,"description":"First UTC day (YYYY-MM-DD)."},{"in":"query","name":"to","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Last UTC day, inclusive (YYYY-MM-DD). At most 400 days from `from`."},"required":true,"description":"Last UTC day, inclusive (YYYY-MM-DD). At most 400 days from `from`."},{"in":"query","name":"granularity","schema":{"default":"day","description":"`day`: one row per tour, surface and UTC day. `total`: one row per tour and surface for the whole range.","type":"string","enum":["day","total"]},"description":"`day`: one row per tour, surface and UTC day. `total`: one row per tour and surface for the whole range."},{"in":"query","name":"tour_id","schema":{"description":"Only this tour.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":"Only this tour."},{"in":"query","name":"surface","schema":{"description":"Only this surface: a site domain or a channel id from `surface.id`.","type":"string","maxLength":200},"description":"Only this surface: a site domain or a channel id from `surface.id`."},{"in":"query","name":"partner_id","schema":{"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. What you see follows that operator's sites and tours.","type":"string"},"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. What you see follows that operator's sites and tours."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsTours"},"examples":{"example1":{"summary":"One tour on a site and on GetYourGuide","value":{"from":"2026-11-01","to":"2026-11-30","granularity":"total","currency":"EUR","partners":[{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"}],"rows":[{"date":null,"surface":{"type":"site","id":"destinationtromso.com","name":"Destination Tromsø"},"tour":{"id":"3a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d","name":"Northern Lights Chase"},"operator":{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"},"basis":"own_tour","funnel":{"views":120,"availability_checks":48,"checkout_opens":20,"checkout_attempts":9},"bookings":6,"participants":null,"revenue_minor":74400,"conversion":{"view_to_check":0.4,"check_to_open":0.4167,"open_to_attempt":0.45,"attempt_to_booking":0.6667,"view_to_booking":0.05}},{"date":null,"surface":{"type":"channel","id":"getyourguide","name":"GetYourGuide"},"tour":{"id":"3a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d","name":"Northern Lights Chase"},"operator":{"id":"2b7e1516-28ae-4d2a-9f15-88094f3c4f3c","name":"Arctic Tours"},"basis":"own_tour","funnel":null,"bookings":14,"participants":31,"revenue_minor":190500,"conversion":null}],"surfaces":[{"surface":{"type":"channel","id":"getyourguide","name":"GetYourGuide"},"funnel":null,"bookings":14,"participants":31,"revenue_minor":190500,"revenue_share":0.7192,"conversion":null},{"surface":{"type":"site","id":"destinationtromso.com","name":"Destination Tromsø"},"funnel":{"views":120,"availability_checks":48,"checkout_opens":20,"checkout_attempts":9},"bookings":6,"participants":null,"revenue_minor":74400,"revenue_share":0.2808,"conversion":{"view_to_check":0.4,"check_to_open":0.4167,"open_to_attempt":0.45,"attempt_to_booking":0.6667,"view_to_booking":0.05}}],"other_channels_available":true}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (300 requests per minute per key), or 2 analytics requests from this key are already running","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The data did not load in time; retry, or ask for a shorter range","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/analytics/sites":{"get":{"operationId":"getSiteAnalytics","summary":"Traffic, sources, funnel and sales per site","description":"Whole-site traffic for every site your operators are on: visitors, sessions, pageviews, bounce rate, a daily series and the top sources. On a site your operator owns you also get the whole-site funnel, conversions per source and every tour's sales; on a site you are only added to, sales cover your own tours. Days are UTC; money is EUR. At most 400 days per request.\n\nScope: `analytics:read`.","parameters":[{"in":"query","name":"from","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"First UTC day (YYYY-MM-DD)."},"required":true,"description":"First UTC day (YYYY-MM-DD)."},{"in":"query","name":"to","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Last UTC day, inclusive (YYYY-MM-DD). At most 400 days from `from`."},"required":true,"description":"Last UTC day, inclusive (YYYY-MM-DD). At most 400 days from `from`."},{"in":"query","name":"site","schema":{"description":"Only this site (its domain). A site the key cannot see traffic for answers 404.","type":"string","maxLength":200},"description":"Only this site (its domain). A site the key cannot see traffic for answers 404."},{"in":"query","name":"partner_id","schema":{"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. What you see follows that operator's sites and tours.","type":"string"},"description":"Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. What you see follows that operator's sites and tours."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsSites"},"examples":{"example1":{"summary":"One site the operator owns","value":{"from":"2026-11-01","to":"2026-11-01","currency":"EUR","sites":[{"domain":"destinationtromso.com","name":"Destination Tromsø","role":"owner","sales_scope":"all_tours","traffic":{"visitors":410,"new_visitors":352,"sessions":468,"pageviews":1290,"bounce_rate":0.41,"avg_session_seconds":96},"days":[{"date":"2026-11-01","visitors":410,"new_visitors":352,"pageviews":1290,"bookings":7,"revenue_minor":86800}],"sources":[{"dimension":"channel","label":"Organic Search","visitors":220,"conversions":4,"revenue_minor":49600}],"funnel":[{"step":"view","unit":"visitors","count":300},{"step":"conversion","unit":"bookings","count":7}],"sales":{"bookings":7,"revenue_minor":86800}}]}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found, or not yours","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (300 requests per minute per key), or 2 analytics requests from this key are already running","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The data did not load in time; retry, or ask for a shorter range","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/bookings/{id}/reschedule-options":{"get":{"operationId":"getRescheduleOptions","summary":"Departures a booking can move to on one day","description":"Read only. Whether the booking can move to `date` and the departures it can take there, from the booking's own booking system (one availability read for that day). A day with room only at a different price shows `price_differs` and no options: a move never changes the price. Needs the bookings.reschedule:write scope.\n\nScope: `bookings.reschedule:write`.","parameters":[{"in":"query","name":"date","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"The day to check (YYYY-MM-DD)."},"required":true,"description":"The day to check (YYYY-MM-DD)."},{"in":"path","name":"id","schema":{"type":"string","description":"Booking id (UUID) from GET /api/v1/bookings."},"required":true,"description":"Booking id (UUID) from GET /api/v1/bookings."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescheduleOptions"},"examples":{"example1":{"summary":"Departures on the new day","value":{"id":"8f6d2c1e-4b7a-4e3f-9c2d-1a5b6c7d8e9f","date":"2026-12-14","current_date":"2026-12-12","reschedulable":true,"available":true,"price_differs":false,"detail":null,"options":[{"start_time_id":"4821","rate_id":"1093","start_time":"18:00","label":null,"remaining":12}]}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found, or not yours","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited (300 requests per minute per key)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/manifest/{id}/checkin":{"post":{"operationId":"setCheckin","summary":"Check a manifest booking in, mark a no-show, or clear it","description":"Sets the check-in state of one manifest row. `checked_in` with `present` records a partial party (3 of 4). `clear` returns the row to not seen. Only the check-in is stored: the booking, its guests and its money are never changed and your booking system is not told.\n\nScope: `checkins:write`. Needs an `Idempotency-Key` header. Counts against the key's daily checkins limit.","parameters":[{"in":"path","name":"id","schema":{"type":"string","description":"Manifest row id: the `id` of a passenger in GET /api/v1/manifest."},"required":true,"description":"Manifest row id: the `id` of a passenger in GET /api/v1/manifest."},{"in":"header","name":"Idempotency-Key","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Required on every write. A unique value per action (a UUID). Kept 24 hours: the same key with the same request replays the first response (header `Idempotent-Replayed: true`); with a different request it answers 422."},"required":true,"description":"Required on every write. A unique value per action (a UUID). Kept 24 hours: the same key with the same request replays the first response (header `Idempotent-Replayed: true`); with a different request it answers 422."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckinRequest"},"examples":{"example1":{"summary":"Three of four turned up","value":{"status":"checked_in","present":3}}}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckinResult"},"examples":{"example1":{"summary":"Three of four turned up","value":{"id":"5c4b3a29-1807-4f6e-9d5c-4b3a29180716","check_in":{"status":"checked_in","present":3}}}}}}},"400":{"description":"Invalid body, or the Idempotency-Key header is missing","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found, or not yours","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"A request with this Idempotency-Key is still running","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Not possible for this booking, or the Idempotency-Key was used for a different request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited, or the key's daily limit for this action is reached (checkins). Retry-After says when to try again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"A system this action depends on did not answer; retry with the same key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/bookings/{id}/payment-link":{"post":{"operationId":"sendPaymentLink","summary":"Email the guest a link to pay the balance still owed","description":"Sends a balance payment link for an existing booking: the pay-later balance of a Panion booking, or the balance your booking system says is due on a direct booking. Panion decides the amount; the request takes none. A cancelled booking (which would need a rebook link, and so a new booking) and anything with nothing owed are refused with 422. Calling it again resends the same open link.\n\nScope: `payment_links:write`. Needs an `Idempotency-Key` header. Counts against the key's daily payment_links limit.","parameters":[{"in":"path","name":"id","schema":{"type":"string","description":"A booking id from GET /api/v1/bookings, or a manifest row id from GET /api/v1/manifest for a booking that exists only in your booking system. Both are UUIDs and never collide."},"required":true,"description":"A booking id from GET /api/v1/bookings, or a manifest row id from GET /api/v1/manifest for a booking that exists only in your booking system. Both are UUIDs and never collide."},{"in":"header","name":"Idempotency-Key","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Required on every write. A unique value per action (a UUID). Kept 24 hours: the same key with the same request replays the first response (header `Idempotent-Replayed: true`); with a different request it answers 422."},"required":true,"description":"Required on every write. A unique value per action (a UUID). Kept 24 hours: the same key with the same request replays the first response (header `Idempotent-Replayed: true`); with a different request it answers 422."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentLinkRequest"},"examples":{"example1":{"summary":"The pay-later balance","value":{}}}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentLinkResult"},"examples":{"example1":{"summary":"The pay-later balance","value":{"id":"8f6d2c1e-4b7a-4e3f-9c2d-1a5b6c7d8e9f","kind":"deferred_balance","url":"https://www.panion.travel/pay/abc123","amount_minor":179900,"currency":"NOK","emailed":true}}}}}},"400":{"description":"Invalid body, or the Idempotency-Key header is missing","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found, or not yours","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"A request with this Idempotency-Key is still running","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Not possible for this booking, or the Idempotency-Key was used for a different request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited, or the key's daily limit for this action is reached (payment_links). Retry-After says when to try again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"A system this action depends on did not answer; retry with the same key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/bookings/{id}/cancel":{"post":{"operationId":"cancelBooking","summary":"Cancel a booking with a full refund","description":"Cancels a live (CONFIRMED or RESERVED) Panion booking exactly as Cancel and refund in Oracle: the seats are released in your booking system first, then the guest gets a full refund (the reservation fee on an unpaid pay-later booking), the booking is marked cancelled, the commission is voided, and the guest and your team are emailed. No free-cancellation window or departure check applies: your call is the refund decision. The request takes no amount. If releasing the seats fails nothing changes (503, retry with the same key). A booking that is already cancelled answers 200 with `already_cancelled` and does not count against the daily limit. Cannot be undone.\n\nScope: `bookings.cancel:write`. Needs an `Idempotency-Key` header. Counts against the key's daily cancels limit.","parameters":[{"in":"path","name":"id","schema":{"type":"string","description":"Booking id (UUID) from GET /api/v1/bookings."},"required":true,"description":"Booking id (UUID) from GET /api/v1/bookings."},{"in":"header","name":"Idempotency-Key","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Required on every write. A unique value per action (a UUID). Kept 24 hours: the same key with the same request replays the first response (header `Idempotent-Replayed: true`); with a different request it answers 422."},"required":true,"description":"Required on every write. A unique value per action (a UUID). Kept 24 hours: the same key with the same request replays the first response (header `Idempotent-Replayed: true`); with a different request it answers 422."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelRequest"},"examples":{"example1":{"summary":"Cancel with a full refund","value":{"reason":"Storm warning, the boat cannot sail"}}}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelResult"},"examples":{"example1":{"summary":"Cancel with a full refund","value":{"id":"8f6d2c1e-4b7a-4e3f-9c2d-1a5b6c7d8e9f","status":"REFUNDED","already_cancelled":false,"refund":{"outcome":"refunded","amount_minor":179900,"currency":"NOK"}}}}}}},"400":{"description":"Invalid body, or the Idempotency-Key header is missing","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found, or not yours","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"A request with this Idempotency-Key is still running","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Not possible for this booking, or the Idempotency-Key was used for a different request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited, or the key's daily limit for this action is reached (cancels). Retry-After says when to try again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"A system this action depends on did not answer; retry with the same key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/bookings/{id}/reschedule":{"post":{"operationId":"rescheduleBooking","summary":"Move a booking to another date or departure","description":"Moves a live Panion booking in your booking system and on Panion, at the same price: the payment is never touched, so a departure with a different price is refused (422). The guest's free-change window does not apply to you, but a tour that has started cannot be moved, the new date must be available, and a pay-later booking still owing its balance cannot move too close to the charge deadline. Pick a departure with GET /api/v1/bookings/{id}/reschedule-options. The guest is emailed that you moved the booking and your team gets the usual reschedule email. A booking already on that date answers 200 with `already_on_date` and does not count against the daily limit.\n\nScope: `bookings.reschedule:write`. Needs an `Idempotency-Key` header. Counts against the key's daily reschedules limit.","parameters":[{"in":"path","name":"id","schema":{"type":"string","description":"Booking id (UUID) from GET /api/v1/bookings."},"required":true,"description":"Booking id (UUID) from GET /api/v1/bookings."},{"in":"header","name":"Idempotency-Key","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Required on every write. A unique value per action (a UUID). Kept 24 hours: the same key with the same request replays the first response (header `Idempotent-Replayed: true`); with a different request it answers 422."},"required":true,"description":"Required on every write. A unique value per action (a UUID). Kept 24 hours: the same key with the same request replays the first response (header `Idempotent-Replayed: true`); with a different request it answers 422."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescheduleRequest"},"examples":{"example1":{"summary":"Move to another evening","value":{"date":"2026-12-14","start_time_id":"4821","rate_id":"1093"}}}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescheduleResult"},"examples":{"example1":{"summary":"Move to another evening","value":{"id":"8f6d2c1e-4b7a-4e3f-9c2d-1a5b6c7d8e9f","status":"CONFIRMED","date":"2026-12-14","start_time":"18:00","previous_date":"2026-12-12","previous_start_time":"18:00","already_on_date":false}}}}}},"400":{"description":"Invalid body, or the Idempotency-Key header is missing","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key lacks the scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found, or not yours","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"A request with this Idempotency-Key is still running","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Not possible for this booking, or the Idempotency-Key was used for a different request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited, or the key's daily limit for this action is reached (reschedules). Retry-After says when to try again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"A system this action depends on did not answer; retry with the same key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"CheckinRequest":{"type":"object","properties":{"status":{"type":"string","enum":["checked_in","no_show","clear"],"description":"`checked_in`, `no_show`, or `clear` (back to not seen)."},"present":{"description":"With `checked_in` only: how many of the party turned up. Omit for everyone.","type":"integer","minimum":1,"maximum":1000}},"required":["status"],"additionalProperties":false},"PaymentLinkRequest":{"type":"object","properties":{},"additionalProperties":false,"description":"Empty. The amount and the kind of link are always decided by Panion."},"CancelRequest":{"type":"object","properties":{"reason":{"type":"string","minLength":3,"maxLength":500,"description":"Why the booking is cancelled. Kept on the booking for your team."}},"required":["reason"],"additionalProperties":false},"RescheduleRequest":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"The new departure day (YYYY-MM-DD)."},"start_time_id":{"description":"`start_time_id` of an option from GET /api/v1/bookings/{id}/reschedule-options. Omit to keep the booking's time of day.","type":"string","minLength":1,"maxLength":200},"rate_id":{"description":"`rate_id` of the same option, when it has one.","type":"string","minLength":1,"maxLength":64}},"required":["date"],"additionalProperties":false},"Me":{"type":"object","properties":{"key":{"type":"object","properties":{"id":{"type":"string","description":"Public key id (the part after pnn_live_)."},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","description":"A scope name. New scopes are added over time; ignore ones you do not know.","x-extensible-enum":["bookings:read","manifest:read","guests.contact:read","finance:read","analytics:read","checkins:write","payment_links:write","bookings.cancel:write","bookings.reschedule:write"]}},"created_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"}},"required":["id","name","scopes","created_at","expires_at"],"additionalProperties":false},"partner":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The first of `partners`, by name (kept for one-operator clients)."},"partners":{"type":"array","items":{"$ref":"#/components/schemas/PartnerRef"},"description":"Every operator this key acts for right now: the operators it was created for where its creator is still owner or admin."}},"required":["key","partner","partners"],"additionalProperties":false},"PartnerRef":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The operator a row belongs to: one of the key's operators (the tour's operator for a booking)."},"Problem":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"instance":{"type":"string"},"request_id":{"type":"string"}},"required":["type","title","status"],"additionalProperties":false,"description":"RFC 9457 problem details."},"BookingList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BookingListItem"}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pass as `cursor` for the next page."}},"required":["data","next_cursor"],"additionalProperties":false},"BookingListItem":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmation_code":{"type":"string"},"status":{"type":"string","enum":["CONFIRMED","CANCELLED","REFUNDED"]},"partner":{"$ref":"#/components/schemas/PartnerRef"},"tour":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name"],"additionalProperties":false},"experience_date":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"start_time":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$","description":"Local wall-clock time (HH:MM) in `timezone`."},{"type":"null"}]},"timezone":{"type":"string","description":"IANA timezone, e.g. Europe/Oslo."},"participants":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"amount_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code."},"channel":{"anyOf":[{"type":"string"},{"type":"null"}]},"guest":{"$ref":"#/components/schemas/Guest"},"booked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","confirmation_code","status","partner","tour","experience_date","start_time","timezone","participants","amount_minor","currency","channel","guest","booked_at","created_at","updated_at"],"additionalProperties":false},"Guest":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"description":"Only with the guests.contact:read scope.","anyOf":[{"type":"string"},{"type":"null"}]},"phone":{"description":"Only with the guests.contact:read scope.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name"],"additionalProperties":false},"Booking":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmation_code":{"type":"string"},"status":{"type":"string","enum":["CONFIRMED","CANCELLED","REFUNDED"]},"partner":{"$ref":"#/components/schemas/PartnerRef"},"tour":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name"],"additionalProperties":false},"experience_date":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"start_time":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$","description":"Local wall-clock time (HH:MM) in `timezone`."},{"type":"null"}]},"timezone":{"type":"string","description":"IANA timezone, e.g. Europe/Oslo."},"participants":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"amount_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code."},"channel":{"anyOf":[{"type":"string"},{"type":"null"}]},"guest":{"$ref":"#/components/schemas/Guest"},"booked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"provider_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Your booking system's own reference (e.g. Bokun code)."},"payment":{"type":"object","properties":{"strategy":{"type":"string","enum":["pay_now","pay_later"]},"pay_later":{"anyOf":[{"type":"object","properties":{"status":{"type":"string"},"amount_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code."},{"type":"null"}]},"charge_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["status","amount_minor","currency","charge_at","paid_at"],"additionalProperties":false},{"type":"null"}]}},"required":["strategy","pay_later"],"additionalProperties":false},"commission":{"anyOf":[{"type":"object","properties":{"amount_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"rate_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code."},{"type":"null"}]},"status":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["amount_minor","rate_percent","currency","status"],"additionalProperties":false},{"type":"null"}]}},"required":["id","confirmation_code","status","partner","tour","experience_date","start_time","timezone","participants","amount_minor","currency","channel","guest","booked_at","created_at","updated_at","provider_reference","payment","commission"],"additionalProperties":false},"Manifest":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"timezone":{"type":"string","description":"IANA timezone, e.g. Europe/Oslo."},"synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"When the booking-system mirror last refreshed this day."},"totals":{"type":"object","properties":{"departures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bookings":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passengers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checked_in":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"no_show":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["departures","bookings","passengers","checked_in","no_show"],"additionalProperties":false},"departures":{"type":"array","items":{"$ref":"#/components/schemas/ManifestDeparture"}},"cancelled":{"type":"array","items":{"$ref":"#/components/schemas/ManifestPassenger"}}},"required":["date","timezone","synced_at","totals","departures","cancelled"],"additionalProperties":false},"ManifestDeparture":{"type":"object","properties":{"start_time":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$","description":"Local wall-clock time (HH:MM) in `timezone`."},{"type":"null"}]},"timezone":{"type":"string","description":"IANA timezone, e.g. Europe/Oslo."},"product_title":{"anyOf":[{"type":"string"},{"type":"null"}]},"rate_title":{"anyOf":[{"type":"string"},{"type":"null"}]},"passengers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checked_in":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"no_show":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bookings":{"type":"array","items":{"$ref":"#/components/schemas/ManifestPassenger"}}},"required":["start_time","timezone","product_title","rate_title","passengers","checked_in","no_show","bookings"],"additionalProperties":false},"ManifestPassenger":{"type":"object","properties":{"id":{"type":"string","description":"Manifest row id (stable for this booking line)."},"reference":{"anyOf":[{"type":"string"},{"type":"null"}]},"confirmation_code":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string"},"partner":{"$ref":"#/components/schemas/PartnerRef"},"channel":{"type":"object","properties":{"class":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["class","source","title"],"additionalProperties":false},"participants":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pax_breakdown":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["title","quantity"],"additionalProperties":false}},{"type":"null"}]},"guest":{"$ref":"#/components/schemas/Guest"},"pickup":{"anyOf":[{"type":"object","properties":{"place":{"anyOf":[{"type":"string"},{"type":"null"}]},"time":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["place","time"],"additionalProperties":false},{"type":"null"}]},"payment_status":{"anyOf":[{"type":"string"},{"type":"null"}]},"check_in":{"type":"object","properties":{"status":{"anyOf":[{"type":"string","enum":["checked_in","no_show"]},{"type":"null"}]},"present":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["status","present"],"additionalProperties":false}},"required":["id","reference","confirmation_code","status","partner","channel","participants","pax_breakdown","guest","pickup","payment_status","check_in"],"additionalProperties":false},"SalesSummary":{"type":"object","properties":{"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"panion":{"type":"object","properties":{"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"bookings":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code."},"partner":{"$ref":"#/components/schemas/PartnerRef"}},"required":["date","revenue_minor","bookings","currency","partner"],"additionalProperties":false}},"totals":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code."},"partner":{"$ref":"#/components/schemas/PartnerRef"},"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"bookings":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["currency","partner","revenue_minor","bookings"],"additionalProperties":false}}},"required":["days","totals"],"additionalProperties":false,"description":"Sales made through Panion (by booking date), in booking currency, one row per day, currency and operator."},"other_channels":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code."},"partners":{"type":"array","items":{"$ref":"#/components/schemas/PartnerRef"},"description":"The operators these figures cover. Operators sharing one booking system account are counted once, not once per operator."},"available":{"type":"boolean","description":"False when the figures could not be read."},"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"bookings":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["date","revenue_minor","bookings"],"additionalProperties":false}},"channels":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"bookings":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"participants":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["label","revenue_minor","bookings","participants"],"additionalProperties":false}},"totals":{"type":"object","properties":{"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (øre, cents)."},"bookings":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"participants":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["revenue_minor","bookings","participants"],"additionalProperties":false}},"required":["currency","partners","available","days","channels","totals"],"additionalProperties":false,"description":"Every other channel from your booking system (OTAs, desk, ...), converted."}},"required":["from","to","panion","other_channels"],"additionalProperties":false},"AnalyticsTours":{"type":"object","properties":{"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"granularity":{"type":"string","enum":["day","total"]},"currency":{"type":"string","const":"EUR"},"partners":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"The operators this answer is for (the key's, or `partner_id`)."},"rows":{"type":"array","items":{"$ref":"#/components/schemas/TourSurfaceRow"}},"surfaces":{"type":"array","items":{"$ref":"#/components/schemas/SurfaceTotal"},"description":"Every row of `rows` summed per surface, largest revenue first."},"other_channels_available":{"type":"boolean","description":"False when other-channel sales could not be read this time; the site rows are still complete."}},"required":["from","to","granularity","currency","partners","rows","surfaces","other_channels_available"],"additionalProperties":false},"TourSurfaceRow":{"type":"object","properties":{"date":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"UTC day. Null with `granularity=total` (the whole range)."},"surface":{"$ref":"#/components/schemas/AnalyticsSurface"},"tour":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name"],"additionalProperties":false},"operator":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"The tour's operator. Null when the tour is not matched to one."},"basis":{"type":"string","enum":["own_tour","site_owner"],"description":"Why you see this row: `own_tour` (a tour of one of your operators, shown on every surface) or `site_owner` (another operator's tour sold on a site you own)."},"funnel":{"anyOf":[{"$ref":"#/components/schemas/TourFunnel"},{"type":"null"}],"description":"Null on a channel."},"bookings":{"type":"integer","minimum":0,"maximum":9007199254740991},"participants":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Channels only; null on a site."},"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (cents) of `currency` (EUR)."},"conversion":{"anyOf":[{"$ref":"#/components/schemas/TourConversion"},{"type":"null"}],"description":"Null on a channel."}},"required":["date","surface","tour","operator","basis","funnel","bookings","participants","revenue_minor","conversion"],"additionalProperties":false},"AnalyticsSurface":{"type":"object","properties":{"type":{"type":"string","enum":["site","channel"],"description":"`site`: a Panion-powered website (sessions, funnel and sales). `channel`: another sales channel from your booking system, such as GetYourGuide or Viator (sales and revenue only, never a funnel)."},"id":{"type":"string","description":"The site's domain, or the channel's id (e.g. `getyourguide`)."},"name":{"type":"string"}},"required":["type","id","name"],"additionalProperties":false},"TourFunnel":{"type":"object","properties":{"views":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Sessions that viewed the tour."},"availability_checks":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Sessions that checked availability."},"checkout_opens":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Sessions that opened checkout."},"checkout_attempts":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Sessions that tried to pay."}},"required":["views","availability_checks","checkout_opens","checkout_attempts"],"additionalProperties":false,"description":"Distinct sessions per step. Sites only."},"TourConversion":{"type":"object","properties":{"view_to_check":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"A ratio (0.25 = 25%). Null when the step before it is zero."},"check_to_open":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"A ratio (0.25 = 25%). Null when the step before it is zero."},"open_to_attempt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"A ratio (0.25 = 25%). Null when the step before it is zero."},"attempt_to_booking":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"A ratio (0.25 = 25%). Null when the step before it is zero."},"view_to_booking":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"A ratio (0.25 = 25%). Null when the step before it is zero."}},"required":["view_to_check","check_to_open","open_to_attempt","attempt_to_booking","view_to_booking"],"additionalProperties":false,"description":"Step-through rates. Sites only."},"SurfaceTotal":{"type":"object","properties":{"surface":{"$ref":"#/components/schemas/AnalyticsSurface"},"funnel":{"anyOf":[{"$ref":"#/components/schemas/TourFunnel"},{"type":"null"}]},"bookings":{"type":"integer","minimum":0,"maximum":9007199254740991},"participants":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (cents) of `currency` (EUR)."},"revenue_share":{"type":"number","minimum":0,"maximum":1,"description":"This surface's share of the revenue in `surfaces` (0 to 1)."},"conversion":{"anyOf":[{"$ref":"#/components/schemas/TourConversion"},{"type":"null"}]}},"required":["surface","funnel","bookings","participants","revenue_minor","revenue_share","conversion"],"additionalProperties":false},"AnalyticsSites":{"type":"object","properties":{"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"currency":{"type":"string","const":"EUR"},"sites":{"type":"array","items":{"$ref":"#/components/schemas/SiteAnalytics"}}},"required":["from","to","currency","sites"],"additionalProperties":false},"SiteAnalytics":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","added"],"description":"`owner`: your operator owns the site, so sales cover every tour sold on it. `added`: your operator is on the site but does not own it, so sales cover your own tours only."},"sales_scope":{"type":"string","enum":["all_tours","own_tours"]},"traffic":{"$ref":"#/components/schemas/SiteTraffic"},"days":{"type":"array","items":{"$ref":"#/components/schemas/SiteDay"}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SiteSource"},"description":"Top 25 per dimension, by visitors."},"funnel":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/SiteFunnelStep"}},{"type":"null"}],"description":"The whole site's funnel. Owners only; null otherwise."},"sales":{"type":"object","properties":{"bookings":{"type":"integer","minimum":0,"maximum":9007199254740991},"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (cents) of `currency` (EUR)."}},"required":["bookings","revenue_minor"],"additionalProperties":false,"description":"Panion sales on this site within `sales_scope`."}},"required":["domain","name","role","sales_scope","traffic","days","sources","funnel","sales"],"additionalProperties":false},"SiteTraffic":{"type":"object","properties":{"visitors":{"type":"integer","minimum":0,"maximum":9007199254740991},"new_visitors":{"type":"integer","minimum":0,"maximum":9007199254740991},"sessions":{"type":"integer","minimum":0,"maximum":9007199254740991},"pageviews":{"type":"integer","minimum":0,"maximum":9007199254740991},"bounce_rate":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"avg_session_seconds":{"type":"number","minimum":0}},"required":["visitors","new_visitors","sessions","pageviews","bounce_rate","avg_session_seconds"],"additionalProperties":false,"description":"The whole site, every tour and page."},"SiteDay":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"visitors":{"type":"integer","minimum":0,"maximum":9007199254740991},"new_visitors":{"type":"integer","minimum":0,"maximum":9007199254740991},"pageviews":{"type":"integer","minimum":0,"maximum":9007199254740991},"bookings":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Within `sales_scope`."},"revenue_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (cents) of `currency` (EUR)."}},"required":["date","visitors","new_visitors","pageviews","bookings","revenue_minor"],"additionalProperties":false},"SiteSource":{"type":"object","properties":{"dimension":{"type":"string","enum":["channel","referrer","utm_source","utm_medium","utm_campaign","country","device","browser","os","path"]},"label":{"type":"string"},"visitors":{"type":"integer","minimum":0,"maximum":9007199254740991},"conversions":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Owners only; null otherwise."},"revenue_minor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Integer minor units (cents) of `currency` (EUR)."},{"type":"null"}],"description":"Owners only; null otherwise."}},"required":["dimension","label","visitors","conversions","revenue_minor"],"additionalProperties":false},"SiteFunnelStep":{"type":"object","properties":{"step":{"type":"string"},"unit":{"type":"string","enum":["visitors","bookings"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["step","unit","count"],"additionalProperties":false},"RescheduleOptions":{"type":"object","properties":{"id":{"type":"string","description":"The booking id."},"date":{"type":"string"},"current_date":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The booking's departure day now."},"reschedulable":{"type":"boolean","description":"False when the booking cannot be moved at all; `detail` says why."},"available":{"type":"boolean","description":"True when the booking can move to `date`."},"price_differs":{"type":"boolean","description":"True when `date` has room only at a different price. A move never changes the price, so it is refused."},"detail":{"anyOf":[{"type":"string"},{"type":"null"}]},"options":{"type":"array","items":{"type":"object","properties":{"start_time_id":{"type":"string"},"rate_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}]},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["start_time_id","rate_id","start_time","label","remaining"],"additionalProperties":false}}},"required":["id","date","current_date","reschedulable","available","price_differs","detail","options"],"additionalProperties":false},"CheckinResult":{"type":"object","properties":{"id":{"type":"string"},"check_in":{"type":"object","properties":{"status":{"anyOf":[{"type":"string","enum":["checked_in","no_show"]},{"type":"null"}]},"present":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["status","present"],"additionalProperties":false}},"required":["id","check_in"],"additionalProperties":false},"PaymentLinkResult":{"type":"object","properties":{"id":{"type":"string","description":"The id you sent."},"kind":{"type":"string","enum":["deferred_balance","provider_balance"],"description":"`deferred_balance`: the balance of a Panion pay-later booking. `provider_balance`: the balance your booking system says is due."},"url":{"type":"string","description":"The payment page. Safe to share with the guest only."},"amount_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"emailed":{"type":"boolean","description":"False when the link exists but the email did not go out; share the url another way."}},"required":["id","kind","url","amount_minor","currency","emailed"],"additionalProperties":false},"CancelResult":{"type":"object","properties":{"id":{"type":"string","description":"The booking id."},"status":{"type":"string","enum":["CONFIRMED","CANCELLED","REFUNDED"],"description":"The booking's status now. `REFUNDED` once the money is back with the guest, `CANCELLED` when nothing needed returning or a void is still settling, `CONFIRMED` only with `refund.outcome` `pending`."},"already_cancelled":{"type":"boolean","description":"True when the booking was already cancelled before this call. Nothing changed."},"refund":{"type":"object","properties":{"outcome":{"type":"string","enum":["refunded","none","pending"],"description":"`refunded`: the payment provider confirmed the money is returned. `none`: nothing was returned by this call (nothing was paid, or it was already cancelled). `pending`: the seats were released but the refund did not complete; Panion has been alerted and completes it by hand."},"amount_minor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Refunded amount in minor units."},"currency":{"type":"string"}},"required":["outcome","amount_minor","currency"],"additionalProperties":false}},"required":["id","status","already_cancelled","refund"],"additionalProperties":false},"RescheduleResult":{"type":"object","properties":{"id":{"type":"string","description":"The booking id."},"status":{"type":"string"},"date":{"type":"string","description":"The booking's departure day now."},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Its start time now, when known."},"previous_date":{"anyOf":[{"type":"string"},{"type":"null"}]},"previous_start_time":{"anyOf":[{"type":"string"},{"type":"null"}]},"already_on_date":{"type":"boolean","description":"True when the booking was already on that date. Nothing changed."}},"required":["id","status","date","start_time","previous_date","previous_start_time","already_on_date"],"additionalProperties":false}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"pnn_live_<key>"}}}}