---
title: "Staff: create a series every N weeks or monthly, for count times, until a date, or open-ended (neither); each occurrence is held independently and open-ended series are topped up daily"
method: POST
path: "/api/v1/recurring-series"
---

# Staff: create a series every N weeks or monthly, for count times, until a date, or open-ended (neither); each occurrence is held independently and open-ended series are topped up daily

`POST /api/v1/recurring-series`

## Request

- Base URL: `http://127.0.0.1:4310`
- URL: `http://127.0.0.1:4310/api/v1/recurring-series`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `sfb_session`

## Request body

- union
  - object
    - `service_id` string, required
    - `staff_id` string
    - `location_id` string
    - `start` string, required
    - `frequency` 'weekly' | 'fortnightly' | 'monthly', required
    - `interval_weeks` integer
    - `count` integer
    - `until` string
    - `client` object, required
      - `name` string, required
      - `email` string
      - `phone` string
    - `add_on_ids` string[]
    - `consent` boolean
    - `intake_answer` string
    - `idempotency_key` string, required
    - `accept_busy_time` boolean
    - `client_id` string: Staff only: select an existing, unmerged client
  - object
    - `service_id` string, required
    - `staff_id` string
    - `location_id` string
    - `start` string, required
    - `frequency` 'weekly' | 'fortnightly' | 'monthly', required
    - `interval_weeks` integer
    - `count` integer
    - `until` string
    - `client` object
      - `name` string, required
      - `email` string
      - `phone` string
    - `add_on_ids` string[]
    - `consent` boolean
    - `intake_answer` string
    - `idempotency_key` string, required
    - `accept_busy_time` boolean
    - `client_id` string, required: Staff only: select an existing, unmerged client

## Response `201`

OK

- object

## Other responses

- `400`: Validation error
- `401`: Unauthenticated
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict or invalid state

## Changes

- **2026-10-19** `de234618b4ce`: 3 info
  - added the new optional request property `client_id`
  - added `subschema #1, subschema #2` to the request body `anyOf` list
  - the request property `client` became optional

[Operation history](https://skmtc.dev/scalingfirm/apis/tsf-booking-api/changes/api/v1/recurring-series/post.md)

---

[API](https://skmtc.dev/scalingfirm/apis/tsf-booking-api.md) · [All operations](https://skmtc.dev/scalingfirm/apis/tsf-booking-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scalingfirm/apis/tsf-booking-api/revisions/81704199cd37?raw)
