List all packages

GET
/packages

Lists packages. Each entry has the same shape as GET /packages/{id}, including its composition (see there for how included items, steps and options are structured).

Results are ordered by creation time, newest first, and paginated with an opaque cursor in next_cursor; pass it back as next_cursor on the next call to fetch the next page (null means there are no more results). Malformed cursors are ignored and the first page is returned. Use limit to set the page size (default 50, maximum 200); out-of-range values are clamped rather than rejected.

Draft, selling, and off-sale packages are all returned; archived packages are excluded.

All API keys (app-installation-scoped and dashboard-user-scoped) see every non-archived package in the company.

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.

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/packages" \  -H "Easol-API-Version: 2026-11-01"
{
  "object": "string",
  "url": "string",
  "has_more": true,
  "next_cursor": "string",
  "data": [
    {
      "object": "package",
      "id": "string",
      "name": "string",
      "tagline": "string",
      "multi_date": true,
      "min_adult_count": 0,
      "max_adult_count": 0,
      "off_sale_copy": "string",
      "state": "draft",
      "dashboard_url": "../dictionary",
      "pricing_strategy": "transparent",
      "hero_image_url": "http://example.com",
      "per_person_home_amount": {
        "amount": 0,
        "currency": "string"
      },
      "included_items": {
        "object": "list",
        "url": "string",
        "has_more": false,
        "next_cursor": "string",
        "data": [
          {
            "object": "package_item",
            "id": "string",
            "quantity": 0,
            "bookable": {
              "object": "experience_variant",
              "id": "string",
              "name": "string",
              "tagline": "string",
              "product_name": "string"
            }
          }
        ]
      },
      "steps": {
        "object": "list",
        "url": "string",
        "has_more": false,
        "next_cursor": "string",
        "data": [
          {
            "object": "package_step",
            "id": "string",
            "name": "string",
            "tagline": "string",
            "required": true,
            "selection": "single",
            "step_type": "experience",
            "options": {
              "object": "list",
              "url": "string",
              "has_more": false,
              "next_cursor": "string",
              "data": [
                {
                  "object": "package_step_option",
                  "id": "string",
                  "listable": true,
                  "bookable": {
                    "object": "experience_variant",
                    "id": "string",
                    "name": "string",
                    "tagline": "string",
                    "product_name": "string"
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "code": "string",
    "message": "string"
  }
}