Group Cart Init

​

Starts a group order. The signed-in customer who calls this becomes the host: they pick the store and order type, and everyone who joins orders into the same session.

Group ordering is off by default. It has to be enabled on both the brand and the store for the chosen order type — read is_group_ordering_enabled on the order type before offering it, or you will get a 1214.

A customer can only have one active group order per brand at a time. If they already have one, this returns 1201; use Group Cart Active to resume it instead.

Keep two things from the response: participant_access_token, which is the host's own participant credential, and share_url (or invite_token), which is what you give to the people you are inviting.

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

Body

required
application/json
  • Properties: 3
  • UUID of the store the group is ordering from. It cannot be changed later.

  • How the host appears in the roster. Defaults to their account name.

  • Optional spending cap per guest, in minor units. Applies to guests, not to the host.

  • Optional soft deadline shown to participants. Must be in the future and before the session expires.

Responses

  • application/json
  • 1201 the customer already has an active group order · 1204 the caller is a guest account and cannot host · 1214 group ordering is not enabled for this brand, store or order type

  • Missing or invalid customer token.

  • Unknown venue.

  • Validation failed.

  • Too many group orders started. Five per minute per host.

Request Example for post/group-cart/init
curl https://api-public-demo.menu.app/api/group-cart/init \
  --request POST \
  --header 'Application: ' \
  --header 'Api-Version: 4.78.0' \
  --header 'Device-UUID: ' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: ' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "venue_id": "8d2f2c42-2f1e-4a3c-9a1e-2c4c9f0d7f11",
  "order_type": {
    "id": 6,
    "properties": {
      "pickup_asap": true
    }
  },
  "max_amount_per_participant": 5000,
  "display_name": "Alex"
}'
{
  "status": "OK",
  "code": 200,
  "data": {
    "group_cart": {
      "id": "7c9e6679-f1e4-40b3-a2c5-e8f1a0b9d4c3",
      "status": "open",
      "venue_id": "8d2f2c42-2f1e-4a3c-9a1e-2c4c9f0d7f11",
      "order_type": 6,
      "order_type_properties": {
        "pickup_asap": true
      },
      "max_amount_per_participant": 5000,
      "invite_token": "4f1c0f3a2b7c4a669f1e2c9a1c9a1c9a4f1c0f3a2b7c4a669f1e2c9a1c9a1c9a",
      "share_url": "https://order.example.com/group/join?token=4f1c0f3a2b7c4a669f1e2c9a1c9a1c9a4f1c0f3a2b7c4a669f1e2c9a1c9a1c9a",
      "is_reorder": false,
      "is_edit": false,
      "poll_interval_seconds": 10,
      "modifications_deadline_at": null,
      "expires_at": "2026-10-05T17:00:00.000000Z",
      "locked_at": null,
      "participants": [
        {
          "id": "1f2d3c4b-5a60-4b91-8a0e-b1c5f0a377a2",
          "cart_id": "032878b199f90e13e1bdce036e00f157",
          "customer_account_id": "6735e303-50a1-4887-9b11-915a6919cc66",
          "role": "host",
          "display_name": "Alex",
          "is_anonymous": false,
          "status": "editing",
          "joined_at": "2026-09-20T17:00:00.000000Z",
          "left_at": null
        }
      ]
    },
    "participant": {
      "id": "1f2d3c4b-5a60-4b91-8a0e-b1c5f0a377a2",
      "cart_id": "032878b199f90e13e1bdce036e00f157",
      "customer_account_id": "6735e303-50a1-4887-9b11-915a6919cc66",
      "role": "host",
      "display_name": "Alex",
      "is_anonymous": false,
      "status": "editing",
      "joined_at": "2026-09-20T17:00:00.000000Z",
      "left_at": null
    },
    "participant_access_token": "9b2f4e7c1a3d5f8091b2c3d4e5f60718293a4b5c6d7e8f9012a3b4c5d6e7f801"
  }
}