---
title: "Fetch a booking's recurring series"
description: Returns every booking in the recurring series containing this booking, sorted by start time, with the standard booking embeds.
api_method: GET
api_path: "/v1/bookings/{uid}/series"
canonical_url: https://wiblo.app/docs/developers/api/series/get-booking-series
last_updated: 2026-07-28T18:15:49+02:00
md_url: https://wiblo.app/docs/developers/api/series/get-booking-series.md
---

# Fetch a booking's recurring series

`GET /v1/bookings/{uid}/series`

Returns every booking in the recurring series containing this booking, sorted by start time, with the standard booking embeds. Cancelled occurrences are hidden unless `include_cancelled=true`. Unknown and cross-workspace uids collapse onto 404 `BOOKING_NOT_FOUND`; a booking that is not part of a series answers 400. Available to any active member. Per-user rate-limited at 60/60s.

## Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `uid` | `string` | Yes |  |

## Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `include_cancelled` | `"true" \| "false"` | No |  |

## Headers

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `X-Wiblo-Workspace` | `string` | Yes | Workspace id the call is scoped to. The actor must hold an active membership in it; a foreign or unknown id collapses onto 404 WORKSPACE_NOT_FOUND. |

## Request

**curl**

```bash
curl "https://api.wiblo.app/v1/bookings/2b6d9f3c-0e5a-4d7b-9c4f-8a3e6b0d2f5c/series?include_cancelled=true" \
  -H "Authorization: Bearer $WIBLO_TOKEN" \
  -H "X-Wiblo-Workspace: $WIBLO_WORKSPACE_ID"
```

**TypeScript**

```ts
import { createSdk, getBookingSeries } from "@workspace/sdk"

const sdk = createSdk({ baseUrl: "https://api.wiblo.app" })

const { data, error } = await getBookingSeries({
  client: sdk,
  path: { uid: "2b6d9f3c-0e5a-4d7b-9c4f-8a3e6b0d2f5c" },
  query: { include_cancelled: "true" },
  headers: { "X-Wiblo-Workspace": "..." },
})
```

## Example response

```json
{
  "series": {
    "recurring_event_id": "e7b3f9d1-2a6c-4d8b-9f4e-5c1a8d3b7e2f",
    "bookings": [
      {
        "id": "1a5c8e2b-9d4f-4c6a-8b3e-7f2d5a9c1e4b",
        "uid": "2b6d9f3c-0e5a-4d7b-9c4f-8a3e6b0d2f5c",
        "service_id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
        "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
        "title": "",
        "description": null,
        "location": "https://meet.example.com/studio",
        "start_time": "2026-08-11T09:00:00.000Z",
        "end_time": "2026-08-11T10:00:00.000Z",
        "status": "accepted",
        "rescheduled": null,
        "rescheduled_by": null,
        "cancellation_reason": null,
        "cancelled_by": null,
        "recurring_event_id": "e7b3f9d1-2a6c-4d8b-9f4e-5c1a8d3b7e2f",
        "ical_sequence": 0,
        "created_at": "2026-07-28T10:30:00.000Z",
        "updated_at": "2026-07-28T10:30:00.000Z",
        "attendees": [
          {
            "id": "b1e4a7d0-8c3f-4a6b-85dc-7d2b5e9a1c4f",
            "name": "Tom Whitfield",
            "email": "tom@example.com",
            "time_zone": "Europe/London",
            "phone_number": null,
            "no_show": false
          }
        ],
        "booking_hosts": [
          {
            "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
            "role": "organizer"
          }
        ],
        "booking_seats": [],
        "booking_resources": [],
        "service": {
          "id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
          "title": "Weekly coaching session",
          "slug": "weekly-coaching-session",
          "length": 60
        }
      },
      {
        "id": "3c7e0a4d-1f6b-4e8c-ad5a-9b4f7c1e3a6d",
        "uid": "4d8f1b5e-2a7c-4f9d-8e6b-0c5a8d2f4b7e",
        "service_id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
        "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
        "title": "",
        "description": null,
        "location": "https://meet.example.com/studio",
        "start_time": "2026-08-18T09:00:00.000Z",
        "end_time": "2026-08-18T10:00:00.000Z",
        "status": "accepted",
        "rescheduled": null,
        "rescheduled_by": null,
        "cancellation_reason": null,
        "cancelled_by": null,
        "recurring_event_id": "e7b3f9d1-2a6c-4d8b-9f4e-5c1a8d3b7e2f",
        "ical_sequence": 0,
        "created_at": "2026-07-28T10:30:00.000Z",
        "updated_at": "2026-07-28T10:30:00.000Z",
        "attendees": [
          {
            "id": "c2f5b8e1-9d4a-4b7c-96ed-8e3c6f0b2d5a",
            "name": "Tom Whitfield",
            "email": "tom@example.com",
            "time_zone": "Europe/London",
            "phone_number": null,
            "no_show": false
          }
        ],
        "booking_hosts": [
          {
            "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
            "role": "organizer"
          }
        ],
        "booking_seats": [],
        "booking_resources": [],
        "service": {
          "id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
          "title": "Weekly coaching session",
          "slug": "weekly-coaching-session",
          "length": 60
        }
      },
      {
        "id": "5e9a2c6f-3b8d-4a0e-9f7c-1d6b9e3a5c8f",
        "uid": "6f0b3d7a-4c9e-4b1f-a08d-2e7c0f4b6d9a",
        "service_id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
        "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
        "title": "",
        "description": null,
        "location": "https://meet.example.com/studio",
        "start_time": "2026-08-25T09:00:00.000Z",
        "end_time": "2026-08-25T10:00:00.000Z",
        "status": "cancelled",
        "rescheduled": null,
        "rescheduled_by": null,
        "cancellation_reason": "Client is away that week",
        "cancelled_by": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
        "recurring_event_id": "e7b3f9d1-2a6c-4d8b-9f4e-5c1a8d3b7e2f",
        "ical_sequence": 100,
        "created_at": "2026-07-28T10:30:00.000Z",
        "updated_at": "2026-07-30T16:45:00.000Z",
        "attendees": [
          {
            "id": "d3a6c9f2-0e5b-4c8d-a7fe-9f4d7a1c3e6b",
            "name": "Tom Whitfield",
            "email": "tom@example.com",
            "time_zone": "Europe/London",
            "phone_number": null,
            "no_show": false
          }
        ],
        "booking_hosts": [
          {
            "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
            "role": "organizer"
          }
        ],
        "booking_seats": [],
        "booking_resources": [],
        "service": {
          "id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
          "title": "Weekly coaching session",
          "slug": "weekly-coaching-session",
          "length": 60
        }
      },
      {
        "id": "7a1c4e8b-5d0f-4c2a-b19e-3f8d1a5c7e0b",
        "uid": "8b2d5f9c-6e1a-4d3b-82af-4a9e2b6d8f1c",
        "service_id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
        "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
        "title": "",
        "description": null,
        "location": "https://meet.example.com/studio",
        "start_time": "2026-09-08T09:00:00.000Z",
        "end_time": "2026-09-08T10:00:00.000Z",
        "status": "accepted",
        "rescheduled": null,
        "rescheduled_by": null,
        "cancellation_reason": null,
        "cancelled_by": null,
        "recurring_event_id": "e7b3f9d1-2a6c-4d8b-9f4e-5c1a8d3b7e2f",
        "ical_sequence": 0,
        "created_at": "2026-07-28T10:30:00.000Z",
        "updated_at": "2026-07-28T10:30:00.000Z",
        "attendees": [
          {
            "id": "e4b7d0a3-1f6c-4d9e-b80f-0a5e8b2d4f7c",
            "name": "Tom Whitfield",
            "email": "tom@example.com",
            "time_zone": "Europe/London",
            "phone_number": null,
            "no_show": false
          }
        ],
        "booking_hosts": [
          {
            "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
            "role": "organizer"
          }
        ],
        "booking_seats": [],
        "booking_resources": [],
        "service": {
          "id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
          "title": "Weekly coaching session",
          "slug": "weekly-coaching-session",
          "length": 60
        }
      },
      {
        "id": "9c3e6a0d-7f2b-4e4c-93ba-5b0f3c7e9a2d",
        "uid": "0d4f7b1e-8a3c-4f5d-a4cb-6c1a4d8f0b3e",
        "service_id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
        "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
        "title": "",
        "description": null,
        "location": "https://meet.example.com/studio",
        "start_time": "2026-09-15T09:00:00.000Z",
        "end_time": "2026-09-15T10:00:00.000Z",
        "status": "accepted",
        "rescheduled": null,
        "rescheduled_by": null,
        "cancellation_reason": null,
        "cancelled_by": null,
        "recurring_event_id": "e7b3f9d1-2a6c-4d8b-9f4e-5c1a8d3b7e2f",
        "ical_sequence": 0,
        "created_at": "2026-07-28T10:30:00.000Z",
        "updated_at": "2026-07-28T10:30:00.000Z",
        "attendees": [
          {
            "id": "f5c8e1b4-2a7d-4e0f-891a-1b6f9c3e5a8d",
            "name": "Tom Whitfield",
            "email": "tom@example.com",
            "time_zone": "Europe/London",
            "phone_number": null,
            "no_show": false
          }
        ],
        "booking_hosts": [
          {
            "member_id": "5f2d8c1b-7e4a-4b9d-a6c3-1d8e5f2a7b4c",
            "role": "organizer"
          }
        ],
        "booking_seats": [],
        "booking_resources": [],
        "service": {
          "id": "a9d4b7e2-5c8f-4b3a-9e6d-1f7c4a2b8e5d",
          "title": "Weekly coaching session",
          "slug": "weekly-coaching-session",
          "length": 60
        }
      }
    ],
    "total_count": 5,
    "future_count": 5,
    "past_count": 0
  }
}
```

## Responses

**`200`** — The series with its occurrence rows and counts. Returns `GetBookingSeriesResponse`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `series` | `object` | Yes | The series with its occurrence rows and counts. |
| `series.recurring_event_id` | `string` | Yes | The shared id every occurrence row of the series carries. |
| `series.bookings` | `array<BookingSummary>` | Yes | Every booking in the series, sorted by start time, with the standard booking embeds. |
| `series.total_count` | `integer` | Yes | Bookings returned (respects the `include_cancelled` filter). |
| `series.future_count` | `integer` | Yes | Of those, how many start now or later. |
| `series.past_count` | `integer` | Yes | Of those, how many started in the past. |

**`400`** — This booking is not part of a recurring series (`BAD_REQUEST`), or the `X-Wiblo-Workspace` header was missing (`VALIDATION_FAILED`). Returns `ApiErrorEnvelope`.

**`401`** — No valid session cookie or `wbl_*` bearer was present. Returns `ApiErrorEnvelope`.

**`404`** — No booking with this uid in this workspace (`BOOKING_NOT_FOUND`) or the workspace collapsed (`WORKSPACE_NOT_FOUND`). Returns `ApiErrorEnvelope`.

**`429`** — Rate limit exceeded. The body's `error.code` is `RATE_LIMITED` and `error.details.retry_after` is the same number of seconds as the `Retry-After` header. Returns `ApiErrorEnvelope`.
