Update Participant
Change one person on a booking: their details, their sizes, or their answers to the questions the experience asks each person.
Endpointโ
PATCH /v1/bookings/{id}/participants/{participantId}
Authenticationโ
Requires an API key with the bookings:write scope.
Path Parametersโ
| Parameter | Type | Description |
|---|---|---|
id | integer | The booking ID |
participantId | integer | The participant's id, from the booking's participants array |
Request Bodyโ
All fields are optional. Only the fields you send change.
| Field | Type | Description |
|---|---|---|
first_name | string | First name |
last_name | string | Last name |
email | string|null | Email address |
phone | string|null | Phone number |
phone_country_code | string|null | Dialing code, for example +1 |
dob | string|null | Date of birth, YYYY-MM-DD |
notes | string|null | A note about this person on this booking (max 2000 characters) |
custom_field_values | object | Answers to the shop's own questions, keyed by field_id: {"88": "yes"}. An ID that is not one of your per-person questions is skipped |
gear_sizes | array | This person's sizes: [{ "product_id": 41, "size": "M" }]. See Sizes |
A name, email or date of birth belongs to the person, not the seat, so a change follows them to their
other bookings. Changing the name to someone already on this booking returns duplicate_participant.
Sizesโ
Each gear_sizes row names an item the experience uses and the size this person needs.
- The size must be one the item has. It is matched without regard to case, so
msaves asM. "size": nullor""clears the size.- The item must ask each person their size on the experience (
ask_sizeon its gear row, see Create Experience). - Sizes are checked before anything else is saved, so a size the item does not have changes nothing.
A booking can be saved with a size still missing; staff fill it in later through this endpoint. Sizes alone can still be changed once people have checked in. Any other change is refused at that point.
{
"gear_sizes": [
{ "product_id": 41, "size": "M" },
{ "product_id": 42, "size": null }
]
}
Responseโ
Success (200 OK)โ
{
"data": {
"participant": {
"id": 45,
"customer_id": 310,
"first_name": "Jane",
"last_name": "Doe",
"email": "jane.doe@example.com",
"phone": null,
"phone_country_code": null,
"dob": null,
"notes": null,
"rate_category": { "id": 7, "label": "Adult" },
"checked_in_at": null,
"custom_fields": [
{ "field_id": 88, "label": "Can you swim 50m?", "field_type": "yes_no", "value": "yes", "formatted_value": "Yes" }
],
"gear_sizes": [
{ "product_id": 41, "item": "Wetsuit", "size": "M" }
],
"missing": ["Helmet size"]
}
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-10-06T09:00:00+00:00"
}
}
gear_sizes and missing read the same as on Get Booking.
Errorsโ
| Status | Code | Description |
|---|---|---|
| 401 | authentication_required | No API key provided |
| 401 | invalid_api_key | Invalid API key |
| 403 | insufficient_scope | API key lacks bookings:write scope |
| 403 | forbidden | The booking belongs to another account |
| 404 | resource_not_found | The booking or participant does not exist |
| 409 | conflict | The booking is returned, completed or cancelled. Once people have checked in, only gear_sizes can change |
| 422 | validation_error | A field is wrong. A size problem is reported under gear_sizes, for example Wetsuit has no size "XXL". Its sizes are: S, M, L. |
| 422 | duplicate_participant | The new name belongs to someone already on this booking |
Example Requestโ
curl -X PATCH "https://app.equipdash.com/api/v1/bookings/123/participants/45" \
-H "Authorization: Bearer eqd_live_abc123xyz789..." \
-H "Content-Type: application/json" \
-d '{"gear_sizes": [{"product_id": 41, "size": "M"}]}'