Some activities in the Musement catalog require participant info: mandatory information about each person in the booking.
This page covers three endpoints for managing participant information:
- Get participant schema - retrieve the required fields for a cart item
- Update participants - submit participant information
- Get participants - retrieve submitted participant information
While each activity provides a preview of participant info at /activities/{activityUuid}/participants-info/schema, the requested info may change for a cart item. The definitive participant info for a cart item is available by making the following request:
curl -X GET '{baseUrl}/carts/{cartUuid}/items/{cartItemUuid}/participants/schema' \
-H 'Accept: application/json+schema' \
-H 'Accept-Language: en' \
-H 'X-Musement-Application: {applicationValue}' \
-H 'X-Musement-Version: 3.4.0' \
-H 'Authorization: Bearer {accessToken}'| Header | Required | Description |
|---|---|---|
Accept | No | Use application/json+schema to receive JSON Schema format |
Accept-Language | No | Locale code (e.g., en, it, de) for translated field labels |
Cart items with participant info will return a JSON schema with the title cart_item_participants_info:
{
"title": "cart_item_participants_info",
"type": "object",
"properties": {
"participants": {
"type": "array",
"title": "participants",
"items": {
"title": "prototype",
"type": "object",
"properties": {
"salutation": {
"type": "string",
"title": "Salutation",
"enum": ["Mr", "Mrs", "Ms"],
"propertyOrder": 1
},
"firstname": {
"type": "string",
"title": "First name",
"propertyOrder": 2
},
"lastname": {
"type": "string",
"title": "Last name",
"propertyOrder": 3
},
"date_of_birth": {
"type": "string",
"title": "Date of birth",
"format": "date",
"propertyOrder": 4
},
"email": {
"type": "string",
"title": "Email",
"format": "email",
"propertyOrder": 5
}
},
"required": [
"salutation",
"firstname",
"lastname",
"date_of_birth",
"email"
]
},
"minItems": 2,
"maxItems": 2,
"propertyOrder": 1
}
},
"required": [
"participants"
]
}The minItems and maxItems values match the cart item quantity. If a cart item contains a quantity of two, then two sets of participant information must be collected.
The schema may include any combination of the following fields, depending on the activity's requirements:
| Field | Type | Format | Description |
|---|---|---|---|
salutation | string | enum | Title/salutation. Values: Mr, Mrs, Ms |
firstname | string | text | Participant's first name |
lastname | string | text | Participant's last name |
date_of_birth | string | date (Y-m-d) | Date of birth |
passport | string | text | Passport number |
passport_expiry_date | string | date (Y-m-d) | Passport expiration date |
email | string | Email address | |
nationality | string | text | Nationality |
medical_notes | string | text | Medical notes or conditions |
address | string | text | Physical address |
fan_card | string | text | Fan card number (optional field) |
weight | number | float | Weight in kilograms |
phone_number | string | text | Phone number |
Some activities from third-party providers (Bokun, Regiondo, MatchingBot, TuiSupplierPlatform) may include additional custom questions in the schema. These appear as extra properties alongside the standard fields and should be submitted with the participant data.
| Status | Description |
|---|---|
| 403 | Unauthorized access to the cart |
| 404 | Cart not found, cart item not found, no product linked to cart item, cart item quantity is zero, or no participant requirements configured |
If the response returns a 404 status code, no participant info is required for the cart item.
Submit participant info for a cart item by making the following request:
curl -X PUT '{baseUrl}/carts/{cartUuid}/items/{cartItemUuid}/participants' \
-H 'X-Musement-Application: {applicationValue}' \
-H 'X-Musement-Version: 3.4.0' \
-H 'Authorization: Bearer {accessToken}' \
-H 'Content-Type: application/json' \
--data-raw '[
{
"salutation": "Mr",
"firstname": "John",
"lastname": "Doe",
"date_of_birth": "1990-05-15",
"email": "john.doe@example.com",
"phone_number": "+1234567890"
},
{
"salutation": "Mrs",
"firstname": "Jane",
"lastname": "Doe",
"date_of_birth": "1992-08-22",
"email": "jane.doe@example.com",
"phone_number": "+0987654321"
}
]'The request body must be a JSON array of participant objects. The number of participants must exactly match the cart item quantity.
| Field | Format | Example |
|---|---|---|
salutation | One of: Mr, Mrs, Ms | "Mr" |
date_of_birth | Y-m-d | "1990-05-15" |
passport_expiry_date | Y-m-d | "2030-12-31" |
email | Valid email address | "user@example.com" |
weight | Numeric (float) | 75.5 |
A successful request returns a 200 status code with an array of the saved participant objects:
[
{
"salutation": "Mr",
"firstname": "John",
"lastname": "Doe",
"date_of_birth": "1990-05-15",
"passport": null,
"passport_expiry_date": null,
"email": "john.doe@example.com",
"nationality": null,
"medical_notes": null,
"address": null,
"fan_card": null,
"weight": null,
"phone_number": "+1234567890"
},
{
"salutation": "Mrs",
"firstname": "Jane",
"lastname": "Doe",
"date_of_birth": "1992-08-22",
"passport": null,
"passport_expiry_date": null,
"email": "jane.doe@example.com",
"nationality": null,
"medical_notes": null,
"address": null,
"fan_card": null,
"weight": null,
"phone_number": "+0987654321"
}
]| Status | Description |
|---|---|
| 400 | Validation errors (missing required fields, invalid format, wrong participant count) |
| 403 | Unauthorized access to the cart |
| 404 | Cart not found, cart item not found, or participant info not required for this item |
| 423 | Cart is locked by an order (payment already processed) |
Example 400 error response for validation errors:
{
"code": 400,
"message": "You must specify exactly 2 participant(s)"
}Retrieve the submitted participant information for a cart item:
curl -X GET '{baseUrl}/carts/{cartUuid}/items/{cartItemUuid}/participants' \
-H 'X-Musement-Application: {applicationValue}' \
-H 'X-Musement-Version: 3.4.0' \
-H 'Authorization: Bearer {accessToken}'Returns an array of participant objects. If no participants have been set, returns an empty array [].
[
{
"salutation": "Mr",
"firstname": "John",
"lastname": "Doe",
"date_of_birth": "1990-05-15",
"passport": null,
"passport_expiry_date": null,
"email": "john.doe@example.com",
"nationality": null,
"medical_notes": null,
"address": null,
"fan_card": null,
"weight": null,
"phone_number": "+1234567890"
}
]| Field | Type | Description |
|---|---|---|
salutation | string | Title/salutation |
firstname | string | First name |
lastname | string | Last name |
date_of_birth | string | Date of birth in Y-m-d format |
passport | string | Passport number |
passport_expiry_date | string | Passport expiration date in Y-m-d format |
email | string | Email address |
nationality | string | Nationality |
medical_notes | string | Medical notes |
address | string | Physical address |
fan_card | string | Fan card number |
weight | float | Weight in kilograms |
phone_number | string | Phone number |
Custom answers from third-party providers are inlined in the response (since API version 3.4.0).
| Status | Description |
|---|---|
| 403 | Unauthorized access to the cart |
| 404 | Cart not found or cart item not found |
Since the requested participant details can vary by activity, we recommend using the react-jsonschema-form tool to create user-friendly forms from the schema endpoint's response. The tool features a live playground where you can paste Musement API responses and see the resulting form in real time.