Docs

Orders

Last updated: 26 Oct 2026

An order is the booking envelope. It groups one or more typed line items, where each item is a stay (accommodation), a booking (e.g. a sauna or yoga session), an event ticket, or a product. Visit-level detail (start time, status, assigned space) lives on each item; the reference number, channel, totals, and customer reference live on the order.

Requires the orders:read permission.

There is no separate "reservation" object. A booking for several attendees is one order with several line items (one booking per attendee, or several tickets). "Number of attendees" is therefore per item, not a field on the order.

Venue. Every order belongs to the single organization your key is scoped to. Each money amount carries its own currency; orders don't otherwise repeat venue fields.

List orders

GET /admin/v0/orders
Authorization: Bearer YOUR_API_KEY

Returns the organization's orders, newest first, in the paginated envelope.

Query parameters

ParameterTypeDescription
pageintegerPage index (default 1)
per_pageintegerItems per page (default 50, max 200)
created_fromstringISO 8601 timestamp; only orders created at or after this time
created_tostringISO 8601 timestamp; only orders created at or before this time
sales_channelstringFilter by channel: direct, pos, or ota

Filtering is by when the order reached SERVOS (created_at), not booked_at. (Filtering by visit/arrival date is not yet supported; ask the SERVOS team if you need it.)

Get an order

GET /admin/v0/orders/{id}
Authorization: Bearer YOUR_API_KEY

Response

{
  "data": {
    "id": "7eeecefd-e8ef-4bbf-bbe3-6d1724cba0be",
    "order_number": 1042,
    "lifecycle_status": "confirmed",
    "payment_status": "paid",
    "fulfillment_status": "unfulfilled",
    "sales_channel": "direct",
    "sales_channel_name": "Direct",
    "sales_channel_ota": null,
    "booked_at": "2026-07-03T09:00:00+02:00",
    "created_at": "2026-07-03T09:00:00+02:00",
    "updated_at": "2026-07-03T09:00:00+02:00",
    "customer": {
      "id": "8f268b4a-8197-438d-90ca-acf8612ad472",
      "customer_type": "individual",
      "marketing_consented": true,
      "created_at": "2026-05-21T09:23:34+02:00",
      "updated_at": "2026-05-21T09:23:34+02:00"
    },
    "subtotal": { "cents": 25000, "currency": "DKK", "formatted": "250 kr." },
    "tax": { "cents": 0, "currency": "DKK", "formatted": "0 kr." },
    "discount": { "cents": 0, "currency": "DKK", "formatted": "0 kr." },
    "total": { "cents": 25000, "currency": "DKK", "formatted": "250 kr." },
    "items": [
      {
        "id": "d576947e-532c-4dc5-9265-4dc5cc55f434",
        "name": "Public Sauna - Standard Session",
        "purchasable_type": "Appointment",
        "line_total": {
          "cents": 25000,
          "currency": "DKK",
          "formatted": "250 kr."
        },
        "tax_total": { "cents": 0, "currency": "DKK", "formatted": "0 kr." },
        "detail": {
          "id": "0ab6af2e-3fed-46f1-86b5-3e507ae3efab",
          "starts_at": "2026-07-04T09:00:00+02:00",
          "ends_at": "2026-07-04T10:00:00+02:00",
          "guest_count": 1,
          "service_name": "Public Sauna",
          "variant_name": "Standard Session",
          "status": "Upcoming"
        }
      }
    ]
  }
}

Order fields

FieldTypeNotes
idstringOrder public id
order_numbernumberSequential, human-friendly reference
lifecycle_statusstringconfirmed or cancelled
payment_statusstringunpaid / paid / partially_paid / refunded / partially_refunded / overpaid
fulfillment_statusstringunfulfilled / partially_fulfilled / fulfilled
sales_channelstringdirect / pos / ota
sales_channel_namestringThe channel's name: Direct, POS, or the OTA's (Booking.com, Other OTA, …)
sales_channel_otastringOTA key (booking_com, expedia, google_hotels, airbnb, unknown); null for other channels and OTAs
booked_atstringWhen the customer booked. Earlier than created_at for imported and OTA bookings
created_atstringWhen the order reached SERVOS
updated_atstringLast change to the order itself (not item-level transitions — see Events)
customerobjectCustomer reference, pseudonymous unless the key has customer_data:read — see Customers
billing_addressobjectOnly with customer_data:read; null when the order has none — see below
subtotal / tax / discount / totalmoneyOrder totals
itemsarrayLine items (excludes voided items and addons)

Changed October 2026: sales_channel_name and sales_channel_ota were added. An order from an OTA that didn't say which one it was is named Other OTA, with sales_channel_ota unknown.

Billing address fields

Only for a key granted customer_data:read.

FieldTypeNotes
line_1stringStreet address
line_2stringSecond address line, or null
postal_codestringOr null
citystring
state_provincestringOr null
country_codestringISO 3166-1 alpha-2, e.g. NO

Line item fields

FieldTypeNotes
idstringOrder item public id
namestringDisplay name of the line
purchasable_typestringStay, Appointment, Ticket, ProductPurchase, or Fee
line_totalmoneyLine revenue (incl. VAT)
tax_totalmoneyVAT portion of the line
detailobjectType-specific booking detail — shape depends on purchasable_type

Changes on 4 November 2026

On 4 November 2026 a booking line's purchasable_type changes from Appointment to Booking. Its detail stays the same. Accept Booking as well as Appointment before then, so your integration keeps working when it changes.

detail by purchasable_type

Branch on purchasable_type to read detail. A booking detail (Appointment, Stay, Ticket) mirrors the matching booking resource (Bookings, Stays, Tickets), minus the order_id / customer_id / timestamp fields (you already have those from the order). A Fee detail has no resource of its own and keeps its created_at. status is a human-readable display label, not a stable code — see Conventions → Status labels.

Appointment (sauna, yoga, …)

FieldTypeNotes
idstringBooking public id
starts_atstringSession start
ends_atstringScheduled end
guest_countnumberAlways 1: each booking is one attendee
service_namestringe.g. "Public Sauna"
variant_namestringe.g. "Standard Session"
statusstringUpcoming / Checked in / No-show / …

Stay (accommodation)

FieldTypeNotes
idstringStay public id
check_in_datestringDate
check_out_datestringDate
nightsnumberNumber of nights
occupancy_adultsnumberAdults
occupancy_childrennumberChildren
occupancy_infantsnumberInfants
statusstringStatus

Ticket (event)

FieldTypeNotes
idstringTicket public id
event_namestringEvent name
variant_namestringTicket type
statusstringStatus

ProductPurchase

FieldTypeNotes
idstringPurchase id
namestringProduct name
statusstringStatus

Fee (e.g. a cancellation fee)

FieldTypeNotes
idstringFee public id
namestringFee name
created_atstringWhen the fee reached SERVOS