> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gomry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Experiences

> List all experiences (recurring offerings) for your organization

# List Experiences

Returns a paginated list of experiences (recurring offerings — yoga
classes, workshops, coaching slots) belonging to your organization.

Experiences are distinct from Events. An Event is a one-shot ticketed
gathering with a fixed start/end. An Experience is a recurring catalog
entry that generates bookable sessions on a schedule.

## Query Parameters

<ParamField query="page" type="integer" default="1">
  Page number (starts at 1).
</ParamField>

<ParamField query="page_size" type="integer" default="50">
  Number of experiences per page. Maximum: `200`.
</ParamField>

<ParamField query="status" type="string" default="active">
  Comma-separated list of statuses to include.

  Allowed values: `active`, `inactive`.

  Example: `?status=active,inactive`
</ParamField>

## Response

<ResponseField name="data" type="array">
  <Expandable title="Experience object">
    <ResponseField name="id" type="string">Unique experience identifier</ResponseField>
    <ResponseField name="name" type="string | null">Experience name</ResponseField>
    <ResponseField name="description" type="string | null">Description</ResponseField>
    <ResponseField name="status" type="string | null">`active` or `inactive`</ResponseField>
    <ResponseField name="registration_status" type="string">`open` or `closed` — whether new bookings are accepted</ResponseField>
    <ResponseField name="duration_minutes" type="number | null">Length of one session in minutes</ResponseField>
    <ResponseField name="default_capacity" type="number | null">Maximum attendees per session</ResponseField>
    <ResponseField name="max_booking_quantity" type="number | null">Upper bound on seats per single booking</ResponseField>
    <ResponseField name="required_contact_method" type="string | null">`none`, `email`, or `email_and_phone`</ResponseField>
    <ResponseField name="photos" type="string[]">Array of photo URLs</ResponseField>
    <ResponseField name="cover_image" type="string | null">First photo, if any</ResponseField>

    <ResponseField name="location" type="object | null">
      <Expandable>
        <ResponseField name="type" type="string">`in_person`, `virtual`, or `hybrid`</ResponseField>
        <ResponseField name="venue" type="string | null">Venue name</ResponseField>
        <ResponseField name="address" type="string | null">Street address</ResponseField>

        <ResponseField name="city" type="string | null" />

        <ResponseField name="state" type="string | null" />

        <ResponseField name="country" type="string | null" />

        <ResponseField name="instructions" type="string | null" />

        <ResponseField name="video_link" type="string | null">For `virtual` / `hybrid`</ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="pricing" type="object | null">
      <Expandable>
        <ResponseField name="model" type="string">`per_session`, `package`, `subscription`, or `dynamic`</ResponseField>
        <ResponseField name="currency" type="string">ISO 4217 currency code</ResponseField>
        <ResponseField name="amount" type="number | null">Price (for `per_session` / `package` / `subscription`)</ResponseField>
        <ResponseField name="base_price" type="number | null">For `dynamic` pricing</ResponseField>
        <ResponseField name="floor_price" type="number | null">For `dynamic` pricing</ResponseField>
        <ResponseField name="ceiling_price" type="number | null">For `dynamic` pricing</ResponseField>
        <ResponseField name="sessions_included" type="number | null">For `package` pricing</ResponseField>
        <ResponseField name="interval" type="string | null">`week` or `month` (for `subscription`)</ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="scheduling_rules" type="object | null">
      <Expandable>
        <ResponseField name="booking_window" type="object">
          <Expandable>
            <ResponseField name="min_hours_before" type="number">Cut-off in hours before session start</ResponseField>
            <ResponseField name="max_days_ahead" type="number">How far in advance bookings are allowed</ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="cancellation_policy" type="object">
          <Expandable>
            <ResponseField name="refundable_until_hours_before" type="number" />

            <ResponseField name="late_cancel_fee" type="object | null">Optional `{ currency, amount }`</ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="bookings_count" type="number">Lifetime confirmed bookings</ResponseField>
    <ResponseField name="remove_service_fees" type="boolean">When true, the organizer absorbs Gomry's service fee</ResponseField>
    <ResponseField name="use_ticket_classes" type="boolean">Whether the experience is in tier mode</ResponseField>
    <ResponseField name="providers" type="string[]">SpaceMember IDs of providers running this experience</ResponseField>
    <ResponseField name="created_at" type="string | null">ISO 8601 creation timestamp</ResponseField>
    <ResponseField name="updated_at" type="string | null">ISO 8601 last-updated timestamp</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object">
  <Expandable>
    <ResponseField name="total" type="integer">Total number of matching experiences</ResponseField>
    <ResponseField name="page" type="integer">Current page number</ResponseField>
    <ResponseField name="page_size" type="integer">Items per page</ResponseField>
    <ResponseField name="total_pages" type="integer">Total number of pages</ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -H "X-API-KEY: your_api_key" \
    "https://www.gomry.com/api/v1/experiences?page=1&page_size=20"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://www.gomry.com/api/v1/experiences?page=1&page_size=20",
    { headers: { "X-API-KEY": "your_api_key" } }
  );
  const { data, pagination } = await response.json();
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": [
      {
        "id": "AbCdEfGhIjKlMnOpQrSt",
        "name": "Sunset Yoga",
        "description": "60-minute beach yoga session at sunset.",
        "status": "active",
        "registration_status": "open",
        "duration_minutes": 60,
        "default_capacity": 20,
        "max_booking_quantity": 5,
        "required_contact_method": "email",
        "photos": ["https://storage.googleapis.com/..."],
        "cover_image": "https://storage.googleapis.com/...",
        "location": {
          "type": "in_person",
          "venue": "Ocean Beach",
          "address": "Ocean Beach",
          "city": "San Francisco",
          "state": "CA",
          "country": "US",
          "instructions": null,
          "video_link": null
        },
        "pricing": {
          "model": "per_session",
          "currency": "usd",
          "amount": 25,
          "base_price": null,
          "floor_price": null,
          "ceiling_price": null,
          "sessions_included": null,
          "interval": null
        },
        "scheduling_rules": {
          "booking_window": { "min_hours_before": 1, "max_days_ahead": 60 },
          "cancellation_policy": { "refundable_until_hours_before": 24, "late_cancel_fee": null }
        },
        "bookings_count": 87,
        "remove_service_fees": false,
        "use_ticket_classes": false,
        "providers": [],
        "created_at": "2025-03-01T10:00:00.000Z",
        "updated_at": "2025-06-20T15:30:00.000Z"
      }
    ],
    "pagination": {
      "total": 4,
      "page": 1,
      "page_size": 20,
      "total_pages": 1
    }
  }
  ```
</ResponseExample>
