> ## Documentation Index
> Fetch the complete documentation index at: https://firespark.cloud/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Multi-schedule menu

> One product and one category across two daypart menus with different schedules.

This example shows how to publish **two composed menus** in a single upsert when the same store, channel, and fulfillment need different active windows — without modifier groups or duplicate catalog masters.

## What this example includes

| Entity          | Count | Purpose                      |
| --------------- | ----- | ---------------------------- |
| Products        | 1     | Soup of the day              |
| Categories      | 1     | Daily specials section       |
| Modifier groups | 0     | No customization             |
| Menus           | 2     | Breakfast and lunch dayparts |

```mermaid theme={null}
flowchart LR
    PROD["soup-daily"]
    CAT["daily-specials"]
    PROD --> CAT
    CAT --> M1["breakfast-delivery\n06:00–11:00"]
    CAT --> M2["lunch-delivery\n11:00–15:00"]
```

Each menu entry shares the same `category_ids` but carries its own `id`, `name`, and `schedules`. Fire spark returns every menu in `data` whose schedule matches the customer's order time. Outside those windows, it returns the nearest upcoming menu or menus instead.

## Request

Send both menus in one [Upsert menus](/docs/integrations-api/menus/put) call. Catalog entities (`products`, `categories`) are shared; each object in `menus` defines a separate composed menu for its schedule.

```bash theme={null}
curl --request PUT \
  --url 'https://firespark.cloud/api/integrations/v1/menus?fulfillment_id=delivery&store_id=downtown&channel_id=app&brand_id=0001' \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d @multi-schedule-menu.json
```

```json multi-schedule-menu.json theme={null}
{
  "style": "DEFAULT",
  "products": [
    {
      "id": "soup-daily",
      "name": { "en_us": "Soup of the day" },
      "description": { "en_us": "Chef's daily selection." },
      "image_url": null,
      "status": "ACTIVE",
      "bundled_items": [],
      "pricing": {
        "minimum_quantity": 1,
        "maximum_quantity": 5,
        "is_tax_inclusive": true,
        "tax_rate": 0.15,
        "price": 6.99,
        "anchor_price": 6.99,
        "anchor_price_percentage": 0,
        "modifiers": [],
        "modifier_group_ids": []
      },
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    }
  ],
  "categories": [
    {
      "id": "daily-specials",
      "name": { "en_us": "Daily specials" },
      "description": { "en_us": "Rotating chef picks" },
      "status": "ACTIVE",
      "items": [{ "type": "PRODUCT", "id": "soup-daily" }],
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    }
  ],
  "modifier_groups": [],
  "menus": [
    {
      "id": "breakfast-delivery",
      "name": { "en_us": "Breakfast delivery" },
      "description": { "en_us": "Morning daypart" },
      "schedules": [
        { "day_of_week": "monday", "periods": [{ "start_time": "06:00:00", "end_time": "11:00:00" }] },
        { "day_of_week": "tuesday", "periods": [{ "start_time": "06:00:00", "end_time": "11:00:00" }] },
        { "day_of_week": "wednesday", "periods": [{ "start_time": "06:00:00", "end_time": "11:00:00" }] },
        { "day_of_week": "thursday", "periods": [{ "start_time": "06:00:00", "end_time": "11:00:00" }] },
        { "day_of_week": "friday", "periods": [{ "start_time": "06:00:00", "end_time": "11:00:00" }] },
        { "day_of_week": "saturday", "periods": [{ "start_time": "06:00:00", "end_time": "11:00:00" }] },
        { "day_of_week": "sunday", "periods": [{ "start_time": "06:00:00", "end_time": "11:00:00" }] }
      ],
      "metadata": {},
      "category_ids": ["daily-specials"],
      "status": "ACTIVE"
    },
    {
      "id": "lunch-delivery",
      "name": { "en_us": "Lunch delivery" },
      "description": { "en_us": "Midday daypart" },
      "schedules": [
        { "day_of_week": "monday", "periods": [{ "start_time": "11:00:00", "end_time": "15:00:00" }] },
        { "day_of_week": "tuesday", "periods": [{ "start_time": "11:00:00", "end_time": "15:00:00" }] },
        { "day_of_week": "wednesday", "periods": [{ "start_time": "11:00:00", "end_time": "15:00:00" }] },
        { "day_of_week": "thursday", "periods": [{ "start_time": "11:00:00", "end_time": "15:00:00" }] },
        { "day_of_week": "friday", "periods": [{ "start_time": "11:00:00", "end_time": "15:00:00" }] },
        { "day_of_week": "saturday", "periods": [{ "start_time": "11:00:00", "end_time": "15:00:00" }] },
        { "day_of_week": "sunday", "periods": [{ "start_time": "11:00:00", "end_time": "15:00:00" }] }
      ],
      "metadata": {},
      "category_ids": ["daily-specials"],
      "status": "ACTIVE"
    }
  ]
}
```

## Key points

* **One upsert, two menus.** You can send up to 10 menu definitions per request. Each needs a unique external `id`.
* **Schedules gate the menu shell.** When a customer orders at 09:00, Fire spark composes `breakfast-delivery`. At 12:30, it composes `lunch-delivery`.
* **Shared catalog, different dayparts.** Both menus reference the same category. To show different products per daypart, give each menu different `category_ids` or add more categories to the payload.
* **No modifier groups.** Products with no customization send `"modifier_groups": []`.

<Tip>
  When breakfast and lunch need completely different assortments, add separate
  categories (for example `breakfast-mains` and `lunch-mains`) and point each
  menu at the categories that belong to that daypart.
</Tip>

## Related

<CardGroup cols={2}>
  <Card title="Menu sync — schedules" icon="clock" href="/docs/integrations-api/guides/menu-sync">
    Schedule patterns and daypart menus
  </Card>

  <Card title="Upsert menus" icon="upload" href="/docs/integrations-api/menus/put">
    Endpoint reference
  </Card>
</CardGroup>
