Skip to main content

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โ€‹

ParameterTypeDescription
idintegerThe booking ID
participantIdintegerThe participant's id, from the booking's participants array

Request Bodyโ€‹

All fields are optional. Only the fields you send change.

FieldTypeDescription
first_namestringFirst name
last_namestringLast name
emailstring|nullEmail address
phonestring|nullPhone number
phone_country_codestring|nullDialing code, for example +1
dobstring|nullDate of birth, YYYY-MM-DD
notesstring|nullA note about this person on this booking (max 2000 characters)
custom_field_valuesobjectAnswers 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_sizesarrayThis 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 m saves as M.
  • "size": null or "" clears the size.
  • The item must ask each person their size on the experience (ask_size on 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โ€‹

StatusCodeDescription
401authentication_requiredNo API key provided
401invalid_api_keyInvalid API key
403insufficient_scopeAPI key lacks bookings:write scope
403forbiddenThe booking belongs to another account
404resource_not_foundThe booking or participant does not exist
409conflictThe booking is returned, completed or cancelled. Once people have checked in, only gear_sizes can change
422validation_errorA field is wrong. A size problem is reported under gear_sizes, for example Wetsuit has no size "XXL". Its sizes are: S, M, L.
422duplicate_participantThe 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"}]}'