> ## 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.

# Producto con horario especial

> Limita cuándo se puede pedir un producto con availability.schedules.

Los horarios a nivel de menú controlan cuándo un menú compuesto completo está activo. **Los horarios a nivel de producto** restringen aún más la ordenabilidad — útil para ítems de happy hour, especiales de almuerzo o productos de temporada que permanecen en el catálogo pero no siempre son comprables.

## Qué incluye este ejemplo

| Entidad | Horario | Comportamiento |
| - | - | - |
| Menú | `schedules: null` | Disponible 24/7 |
| Producto: `drink-happy-hour` | Entre semana 17:00–19:00 | Ordenable solo durante happy hour |
| Producto: `salad-house` | Sin restricción horaria | Siempre ordenable mientras el menú esté activo |

```mermaid theme={null}
flowchart TB
    MENU["Menú: delivery todo el día\n24/7"]
    MENU --> SALAD["salad-house\nsiempre disponible"]
    MENU --> BEER["drink-happy-hour\nLun–Vie 17:00–19:00"]
```

## Request

Define `availability.schedules` en el producto. Usa la misma forma semanal que en los horarios de menú: exactamente **7** entradas `day_of_week` (`monday`–`sunday`), cada una con un array `periods`. Los periodos abiertos usan `start_time` / `end_time`; `closed` es opcional (por defecto `false`); `start_date` / `end_date` opcionales acotan una ventana con fechas. Usa `null` cuando el producto no tenga restricción horaria. Ver [Horarios](https://firespark.cloud/docs/es/integrations-api/guides/menu-sync.md#horarios).

```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 @product-special-schedule.json
```

```json product-special-schedule.json theme={null}
{
  "style": "DEFAULT",
  "products": [
    {
      "id": "drink-happy-hour",
      "name": { "es_ec": "Cerveza happy hour" },
      "description": { "es_ec": "Cerveza de barril a precio happy hour." },
      "image_url": null,
      "status": "ACTIVE",
      "bundled_items": [],
      "pricing": {
        "minimum_quantity": 1,
        "maximum_quantity": 6,
        "is_tax_inclusive": true,
        "tax_rate": 0.15,
        "price": 4.99,
        "anchor_price": 6.99,
        "anchor_price_percentage": 0.29,
        "modifiers": [],
        "modifier_group_ids": []
      },
      "availability": {
        "status": "AVAILABLE",
        "schedules": [
          { "day_of_week": "monday", "periods": [{ "start_time": "17:00:00", "end_time": "19:00:00" }] },
          { "day_of_week": "tuesday", "periods": [{ "start_time": "17:00:00", "end_time": "19:00:00" }] },
          { "day_of_week": "wednesday", "periods": [{ "start_time": "17:00:00", "end_time": "19:00:00" }] },
          { "day_of_week": "thursday", "periods": [{ "start_time": "17:00:00", "end_time": "19:00:00" }] },
          { "day_of_week": "friday", "periods": [{ "start_time": "17:00:00", "end_time": "19:00:00" }] },
          { "day_of_week": "saturday", "periods": [] },
          { "day_of_week": "sunday", "periods": [] }
        ],
        "out_of_stock_until": null
      },
      "metadata": {}
    },
    {
      "id": "salad-house",
      "name": { "es_ec": "Ensalada de la casa" },
      "description": { "es_ec": "Mix de hojas con vinagreta." },
      "image_url": null,
      "status": "ACTIVE",
      "bundled_items": [],
      "pricing": {
        "minimum_quantity": 1,
        "maximum_quantity": 10,
        "is_tax_inclusive": true,
        "tax_rate": 0.15,
        "price": 8.99,
        "anchor_price": 8.99,
        "anchor_price_percentage": 0,
        "modifiers": [],
        "modifier_group_ids": []
      },
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    }
  ],
  "categories": [
    {
      "id": "specials",
      "name": { "es_ec": "Especiales" },
      "description": null,
      "status": "ACTIVE",
      "items": [
        { "type": "PRODUCT", "id": "drink-happy-hour" },
        { "type": "PRODUCT", "id": "salad-house" }
      ],
      "availability": {
        "status": "AVAILABLE",
        "schedules": null,
        "out_of_stock_until": null
      },
      "metadata": {}
    }
  ],
  "modifier_groups": [],
  "menus": [
    {
      "id": "all-day-delivery",
      "name": { "es_ec": "Delivery todo el día" },
      "description": null,
      "schedules": null,
      "metadata": {},
      "category_ids": ["specials"],
      "status": "ACTIVE"
    }
  ]
}
```

## Puntos clave

* **Horarios de menú vs producto.** El menú permanece activo todo el día. La cerveza se oculta fuera de 17:00–19:00 entre semana aunque la categoría y el menú sigan visibles.
* **Semana completa requerida.** Los fines de semana siguen presentes con `"periods": []` (cerrado todo el día). Semanas parciales fallan la validación.
* **Las categorías también pueden tener horario.** Usa `categories[].availability.schedules` cuando una sección completa deba aparecer solo en ciertas horas.
* **Indisponibilidad temporal.** Para 86 puntuales, prefiere `availability.status: OUT_OF_STOCK` con `out_of_stock_until` en lugar de reconstruir horarios.
* **Overrides por contexto.** Para cambiar horarios de un producto en un canal, tienda, tipo de fulfillment o menú concreto sin un upsert completo de menú, llama a [Update product](https://firespark.cloud/docs/es/integrations-api/menus/products/\[id]/put) con `?store_id`, `?channel_id`, `?fulfillment_id` y/o `?menu_id`, enviando `availability.schedules` en el body del producto de menú.

## Relacionado

> [card] [Sync de menús — horarios](https://firespark.cloud/docs/es/integrations-api/guides/menu-sync.md)
>
> Niveles de horario: menú, categoría y producto

> [card] [Menú multi horario](https://firespark.cloud/docs/es/integrations-api/examples/menu-sync/multi-schedule.md)
>
> Dos menús daypart en un upsert


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.