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

# Crear o actualizar dispositivos de kiosco

> Crea o actualiza hasta 100 dispositivos de kiosco por identificador externo en una sola solicitud.

Envía un arreglo de dispositivos de kiosco. Cada ítem crea un dispositivo o actualiza el que ya usa su id externo. Envía solo los campos que quieres cambiar. Los campos omitidos se quedan como están.

> [!NOTE]
>
> Requiere un access token con el scope `kiosk:write`. Consulta
> [Token](https://firespark.cloud/docs/es/integrations-api/oauth/token/post.md) para obtener un token.

El `id` de cada ítem es tuyo. Fire spark no lo deriva de la tienda y el alias.

Crear un dispositivo exige `channel_id`, `store_id`, `alias` y `device_code`. El canal tiene que ser de kiosco. La tienda tiene que existir. Fire spark genera un `pairing_code`, deja `status` en `LINKED` y copia los tracks de app por defecto del canal. Un id eliminado se puede volver a crear como un dispositivo nuevo.

Un dispositivo existente acepta cualquier subconjunto de esos campos más `settings_overrides`. Cambiar `store_id` o `alias` avisa a la tablet para que recargue su configuración. El estado, la salud, el software, el enrollment y los secretos los reporta la tablet y no se escriben aquí.

`device_code` se guarda en mayúsculas y debe tener al menos 8 caracteres. `alias` es único dentro de la tienda. `settings_overrides.disabled_payment_ids` reemplaza la lista completa. Un arreglo vacío habilita todos los pagos que permite el canal. Omite `settings_overrides` para dejar la lista actual.

## Solicitud

```bash theme={null}
curl -X PUT "https://firespark.cloud/api/integrations/v1/kiosk/devices" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "id": "counter-1",
      "channel_id": "kioscos",
      "store_id": "downtown",
      "alias": "Counter 1",
      "device_code": "tablet01",
      "settings_overrides": {
        "disabled_payment_ids": ["cash-desk"]
      }
    },
    {
      "id": "counter-2",
      "alias": "Counter 2"
    }
  ]'
```

## Cuerpo

Un arreglo de 1 a 100 ítems. Cada ítem acepta estos campos:

| Campo | Obligatorio al crear | Descripción |
| - | - | - |
| `id` | sí, siempre | Identificador externo del dispositivo. Solo caracteres alfanuméricos, `_` y `-`. De 1 a 64 caracteres. |
| `channel_id` | sí | Id externo de un canal de kiosco. |
| `store_id` | sí | Identificador externo de la tienda. |
| `alias` | sí | Nombre que se ve en el dashboard. Único por tienda. |
| `device_code` | sí | Código que muestra la tablet. Mínimo 8 caracteres. Se guarda en mayúsculas. |
| `settings_overrides.disabled_payment_ids` | no | Ids de configuración de pago deshabilitados en este dispositivo. |

## Respuesta

Zod valida el cuerpo completo antes de guardar. Si algún campo es inválido, responde HTTP `400` y no se guarda ningún ítem. Cuando el cuerpo es válido, los ítems se guardan uno tras otro. El HTTP es `200` solo si todos se guardaron. Si un ítem posterior falla por una regla de negocio, el HTTP es el `status` de ese ítem (`422` o `500`).

| Campo | Descripción |
| - | - |
| `id` | El `id` del ítem. `null` si faltaba o no era válido. |
| `status` | `200` si se guardó. `422` cuando una creación no trae canal, tienda, alias o código, cuando el canal o la tienda no existen, o cuando el código, el alias o el id ya están en uso. `500` por un fallo inesperado. |
| `data` | El dispositivo guardado, con la misma forma que [Obtener dispositivo de kiosco](https://firespark.cloud/docs/es/integrations-api/kiosk/devices/\[id]/get). Solo cuando `status` es `200`. |
| `error` | Mensaje de error. Solo cuando `status` no es `200`. |
| `details` | Detalle del error a nivel de ítem. |

```json Success theme={null}
{
  "data": [
    {
      "id": "counter-1",
      "status": 200,
      "data": {
        "id": "counter-1",
        "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "channel_id": "kioscos",
        "store_id": "downtown",
        "alias": "Counter 1",
        "pairing_code": "K7M2QX",
        "device_code": "TABLET01",
        "settings_overrides": { "disabled_payment_ids": ["cash-desk"] },
        "status": "LINKED",
        "app_update_status": "UNKNOWN",
        "can_operate": false,
        "is_online": false,
        "app_presence": "UNKNOWN"
      }
    },
    {
      "id": "counter-2",
      "status": 422,
      "error": "Channel, store, alias, and device code are required",
      "details": null
    }
  ]
}
```

```json Campos inválidos theme={null}
{
  "error": "Invalid fields",
  "details": {
    "0.alias": "Required"
  }
}
```

## Errores

| Estado | Descripción |
| - | - |
| `400` | El cuerpo no es un arreglo de 1 a 100 ítems, o algún ítem tiene campos inválidos. No se guarda ningún ítem. |
| `401` | Access token ausente o inválido. |
| `403` | El token no incluye el scope `kiosk:write`. |


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