Group Cart Join
Joins a group order using the invite token. This is where a participant is created and where you are given the participant_access_token that every later participant call needs.
A guest does not need an account. Call it without an Authorization header and send a display_name so the rest of the group can see who they are; the name is required in that case. A signed-in customer may omit it.
Joining twice behaves differently depending on who you are: a signed-in customer re-joining the same session resumes their existing participant and cart, while an anonymous join always creates a new participant — so persist the token rather than calling join again.
Joining is closed once the host locks the session, which is what 1208 means.
Headers
- Type: stringApplicationrequired
White Label Application Key
- Type: stringApi
- Version requiredVersion of the API that the client app expects
- Type: stringDevice
- U U I D requiredThe identifier of the device and/or client app that sent the request
- Type: stringContent
- Type requiredRequired even on requests with no body
- Type: stringAuthorization
Bearer token of the signed-in customer. Omit it for an anonymous guest
Body
- Type: stringtokenmin length:32max length:128required
The invite token from the host's share link.
- Type: stringdisplay
_name max length:100How this participant appears in the roster. Required when joining without a signed-in customer.
Responses
- application/json
- 400
1205unknown invite token ·1208the session is locked, cancelled or expired ·1213the session is full · a missingdisplay_nameon an anonymous join - 422
Validation failed.
- 429
Too many join attempts.
curl https://api-public-demo.menu.app/api/group-cart/join \
--request POST \
--header 'Application: ' \
--header 'Api-Version: 4.78.0' \
--header 'Device-UUID: ' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"token": "4f1c0f3a2b7c4a669f1e2c9a1c9a1c9a4f1c0f3a2b7c4a669f1e2c9a1c9a1c9a",
"display_name": "Sam"
}'
{
"status": "string",
"code": 1,
"data": {
"group_cart": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"status": "open",
"venue_id": "123e4567-e89b-12d3-a456-426614174000",
"order_type": 1,
"order_type_properties": {},
"max_amount_per_participant": null,
"invite_token": null,
"share_url": "string",
"is_reorder": true,
"is_edit": true,
"poll_interval_seconds": 1,
"modifications_deadline_at": null,
"expires_at": "2026-09-24T15:47:36.843Z",
"locked_at": null,
"participants": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"cart_id": "string",
"customer_account_id": null,
"role": "host",
"display_name": "string",
"is_anonymous": true,
"status": "editing",
"joined_at": "2026-09-24T15:47:36.843Z",
"left_at": null
}
]
},
"participant": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"cart_id": "string",
"customer_account_id": null,
"role": "host",
"display_name": "string",
"is_anonymous": true,
"status": "editing",
"joined_at": "2026-09-24T15:47:36.843Z",
"left_at": null
},
"participant_access_token": "string"
}
}