List all bookings

GET
/bookings

Returns the company's bookings, newest created first by default. Use sort_by and sort_direction to choose a different order.

Bookings in pending_payment, completed or cancelled state are listed. A pending booking is listed only if your staff created it in the dashboard or it is awaiting a bank transfer.

These rules also apply to bookings created through POST /bookings. GET /bookings/{id} can retrieve them before they appear in this list.

Filters combine as an intersection, and each filter accepting several values matches any of them. Range filters are supplied as field[operator]=value.

Query Parameters

limit?integer

Number of results per page. Default 50, maximum 200. Values above 200 or zero/negative are clamped to that range rather than rejected.

Default50
next_cursor?string

Opaque pagination cursor returned in next_cursor of the previous response. Malformed values are ignored and the first page is returned.

search?string

Free-text search over the booking reference, the booking id, and the lead booker's name and email address. An exact reference or id match wins, otherwise a partial reference or id, otherwise a name or email match. Must be 3 to 50 characters.

Length3 <= length <= 50
state?array<string>

Return only bookings in these states, as a comma-separated list, e.g. ?state=completed,cancelled. Repeated state[]= keys are accepted too.

booked_at?object

Range filter on when the booking was confirmed. Each bound is an ISO 8601 date (e.g. booked_at[gteq]=2026-04-15) or date-time (e.g. booked_at[gteq]=2026-04-15T14:30:00Z). A date covers that whole day, and a value carrying no offset is read in your company's time zone. Bookings that were never confirmed match no bound.

gteq?string
gt?string
lteq?string
lt?string
start_date?object

Range filter on the booking's first travel date — the earliest start date across its line items. Bounds are ISO 8601 dates (e.g. start_date[gteq]=2026-06-01), compared as calendar dates with no time zone applied. A booking with no travel date yet, such as one your staff created but nobody has paid for, matches no bound.

gteq?string
Formatdate
gt?string
Formatdate
lteq?string
Formatdate
lt?string
Formatdate
sort_by?string

Field to order by. A booking with no value for the chosen field is ordered by a substitute value instead, so it still appears: for booked_at, when the booking was created; for start_date, when it was confirmed, or when it was created if it was never confirmed.

Default"created_at"
Value in"created_at" | "booked_at" | "start_date"
sort_direction?string

Order direction: asc lists the earliest first, desc the latest first.

Default"desc"
Value in"asc" | "desc"

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/bookings" \  -H "Easol-API-Version: 2026-11-01"
{
  "object": "string",
  "url": "string",
  "has_more": true,
  "next_cursor": "string",
  "data": [
    {
      "object": "booking",
      "id": "string",
      "reference": "string",
      "state": "pending",
      "sales_channel": "string",
      "total": {
        "amount": 0,
        "currency": "string"
      },
      "subtotal": {
        "amount": 0,
        "currency": "string"
      },
      "balance": {
        "amount": 0,
        "currency": "string"
      },
      "customer": {
        "object": "customer",
        "id": "string",
        "first_name": "string",
        "last_name": "string",
        "email": "user@example.com",
        "phone": "+447762000000",
        "email_marketing_consent": {
          "consented": true,
          "consented_at": "2026-09-04T10:00:00Z"
        },
        "sms_marketing_consent": {
          "consented": true,
          "consented_at": "2026-09-04T10:00:00Z"
        }
      },
      "billing_address": {
        "line_one": "string",
        "line_two": "string",
        "city": "string",
        "post_code": "string",
        "country_code": "string",
        "subdivision_code": "string"
      },
      "purchase_order_number": "string",
      "vat_number": "string",
      "expires_at": "string",
      "cancelled_at": "string",
      "created_at": "string",
      "custom_fields": [
        {
          "custom_field_id": "fld_aBcDeFgHiJ",
          "key": "flight_number",
          "type": "text",
          "value": "BA2612",
          "option": {
            "id": "string",
            "value": "string"
          }
        }
      ],
      "first_visit": {
        "object": "customer_visit",
        "id": "visit_7hK2mQ9x",
        "occurred_at": "2026-09-04T10:00:00Z",
        "landing_page": "https://shop.example.com/",
        "referrer_url": "https://partner.example.com/",
        "referral_code": "ExternalPartner"
      },
      "last_visit": {
        "object": "customer_visit",
        "id": "visit_7hK2mQ9x",
        "occurred_at": "2026-09-04T10:00:00Z",
        "landing_page": "https://shop.example.com/",
        "referrer_url": "https://partner.example.com/",
        "referral_code": "ExternalPartner"
      },
      "line_items": {
        "object": "list",
        "url": "string",
        "has_more": false,
        "next_cursor": "string",
        "data": [
          {
            "object": "line_item",
            "id": "string",
            "variant_id": "string",
            "product_id": "string",
            "quantity": 1,
            "state": "pending",
            "variant_name": "string",
            "product_name": "string",
            "start_date": "2019-08-24",
            "end_date": "2027-04-19",
            "start_time": "string",
            "experience_slot_id": "string",
            "total": {
              "amount": 0,
              "currency": "string"
            },
            "guest_count": 2,
            "allocated_resources": {
              "object": "list",
              "url": "string",
              "has_more": false,
              "next_cursor": "string",
              "data": [
                {
                  "object": "resource",
                  "id": "string",
                  "name": "string",
                  "resource_group_name": "string"
                }
              ]
            }
          }
        ]
      },
      "guests": {
        "object": "list",
        "url": "string",
        "has_more": false,
        "next_cursor": "string",
        "data": [
          {
            "object": "guest",
            "id": "string",
            "first_name": "string",
            "last_name": "string",
            "email": "string",
            "phone": "+447762000000",
            "line_item_id": "string",
            "check_in_status": "pending",
            "is_lead": true,
            "custom_fields": [
              {
                "custom_field_id": "fld_aBcDeFgHiJ",
                "key": "flight_number",
                "type": "text",
                "value": "BA2612",
                "option": {
                  "id": "string",
                  "value": "string"
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "code": "string",
    "message": "string"
  }
}