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

  • White Label Application Key

  • Version of the API that the client app expects

  • The identifier of the device and/or client app that sent the request

  • Required even on requests with no body

  • Bearer token of the signed-in customer. Omit it for an anonymous guest

Body

required
application/json
  • The invite token from the host's share link.

  • How this participant appears in the roster. Required when joining without a signed-in customer.

Responses

  • application/json
  • 1205 unknown invite token · 1208 the session is locked, cancelled or expired · 1213 the session is full · a missing display_name on an anonymous join

  • Validation failed.

  • Too many join attempts.

Request Example for post/group-cart/join
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"
  }
}