Create Series
Create a series (a program in the product UI): pick the included activities and, optionally, the first session dates. Dates and sessions are managed afterwards via Add Session. A real booking is created for every schedule slot you pass.
Endpointโ
POST /v1/series
Authenticationโ
Requires a live or test API key with series:write scope.
Request Bodyโ
| Field | Type | Required | Description |
|---|---|---|---|
experience_ids | array of integers | Yes | The experiences (activities) included in the program. Minimum 1. |
experience_id | integer | No | Optional single-experience shorthand for a one-activity program. Use experience_ids for new integrations. |
schedule_ids | array of integers | No | Specific experience_availability IDs to include as sessions at creation โ one session booking is created per slot. Optional; sessions can be added afterwards. |
name | string | No | Series name. Defaults to the activity name. |
pricing_type | string | No | sum (default โ add up all sessions) or fixed. See Pricing. |
rates | array | No | Per-person fixed pricing (pricing_type: fixed): [{ "rate_category_id": 3, "price": 150.00 }] โ one row per rate category (e.g. adult, child). rate_category_id is optional for a single catch-all rate. |
group_price | float | No | Group fixed pricing (pricing_type: fixed): flat price for the whole group. |
price_per_participant | float | No | Group fixed pricing: optional price per extra person beyond per_participant_included. |
per_participant_included | integer | No | Group fixed pricing: how many people the flat group_price includes before the per-extra-person price applies. |
max_group_size | integer | No | Group fixed pricing: maximum people the program takes per enrollment. |
bookable_online | boolean | No | Sell the program on your booking page. Defaults to true; send false for a program you only sell yourself. |
All schedule slots must belong to one of the given experiences, be in the future, and have enough remaining capacity.
Legacy fields
The v2 price_structure / fixed_price fields are still accepted โ fixed_price sets a single flat program price. They are equivalent to pricing_type: fixed with one catch-all rate.
Example Requestโ
curl -X POST "https://app.equipdash.com/api/v1/series" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"experience_ids": [12],
"schedule_ids": [501, 502, 503],
"name": "Intro Course โ Fall Program",
"pricing_type": "fixed",
"rates": [
{ "rate_category_id": 3, "price": 150.00 },
{ "rate_category_id": 4, "price": 90.00 }
]
}'
Responseโ
Success (201 Created)โ
Returns the created series in the same shape as Get Series, including totals.
{
"data": {
"id": 1,
"name": "Intro Course โ Fall Program",
"experience": {
"id": 12,
"name": "Intro Course"
},
"group": {
"id": 7,
"name": "Tuesday Group"
},
"billing_mode": "consolidated",
"status": "active",
"pricing_type": "fixed",
"pricing": [
{ "rate_category_id": 3, "label": "Adult", "price": 150.00 },
{ "rate_category_id": 4, "label": "Child", "price": 90.00 }
],
"image_url": null,
"collage_image_urls": [
"https://cdn.equipdash.com/suppliers/5/experiences/intro-course.jpg"
],
"totals": {
"total": 450.00,
"paid": 0.00,
"balance": 450.00
},
"sessions": [
{
"id": 101,
"session_index": 1,
"schedule": {
"id": 501,
"start_datetime_utc": "2026-09-01T17:00:00Z",
"end_datetime_utc": "2026-09-01T18:30:00Z"
},
"booking": {
"id": 9001,
"status": "confirmed",
"payment_status": "pending"
},
"created_at": "2026-07-20T10:00:00Z",
"updated_at": "2026-07-20T10:00:00Z"
},
{
"id": 102,
"session_index": 2,
"schedule": {
"id": 502,
"start_datetime_utc": "2026-09-08T17:00:00Z",
"end_datetime_utc": "2026-09-08T18:30:00Z"
},
"booking": {
"id": 9002,
"status": "confirmed",
"payment_status": "pending"
},
"created_at": "2026-07-20T10:00:00Z",
"updated_at": "2026-07-20T10:00:00Z"
},
{
"id": 103,
"session_index": 3,
"schedule": {
"id": 503,
"start_datetime_utc": "2026-09-15T17:00:00Z",
"end_datetime_utc": "2026-09-15T18:30:00Z"
},
"booking": {
"id": 9003,
"status": "confirmed",
"payment_status": "pending"
},
"created_at": "2026-07-20T10:00:00Z",
"updated_at": "2026-07-20T10:00:00Z"
}
],
"created_at": "2026-07-20T10:00:00Z",
"updated_at": "2026-07-20T10:00:00Z"
},
"meta": {
"request_id": "req_abc123"
}
}
Errorsโ
| Status | Code | Description |
|---|---|---|
| 401 | authentication_required | No API key provided |
| 403 | insufficient_scope | API key lacks series:write scope |
| 422 | validation_failed | Missing/invalid fields โ e.g. experience_ids absent or empty, a schedule ID that does not belong to one of the experiences, or incomplete fixed pricing (no rates and no group_price) |
| 422 | business error | A schedule slot is in the past or lacks capacity |