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

# Inicio rápido

> Envío por primera vez: cree una aplicación, registre el dispositivo web y envíe una notificación.

<Tip>
  Desde **cero hasta su primer envío en la cola** en unos pocos pasos: **Push App** → **dispositivo registrado** → **enviar** con ID de dispositivo en `to`.
</Tip>

## En resumen

* **Crear una aplicación Push**, Web VAPID se genera automáticamente al crearla.
* **Registrar cada dispositivo** cuando el usuario acepte en el navegador y guardar el **ID del dispositivo**.
* **Enviar notificaciones** pasando los ID del dispositivo en **`to`** (hasta **100** por llamada).

Contexto: [Introducción](/es/push-api/como-funciona/introducao). Alcances: [Alcances de clave API](/es/push-api/como-funciona/escopos-da-api-key).

## Antes de empezar

* Clave con **`push:apps:manage`**, **`push:devices:register`** y **`push:send`** (o alcance de administrador en la prueba)
* Plan con push habilitado
* Autenticación: `Authorization: Bearer sk_live_...` o `x-api-key`
* URL base: `https://api.notifique.dev`, use `sk_test_...` en [Sandbox](/es/guides/sandbox/index) al comenzar

<Note>
  Una clave con **`pushAppIds`** en el panel solo envía a dispositivos desde esas aplicaciones. Otra aplicación → **403** (`PUSH_APP_NOT_ALLOWED`).
</Note>

***

## 1. Crear aplicación push

Dos caminos, elige el que mejor se adapte a tu integración:

#### 1A, a través del tablero

1. Presione → **Nueva aplicación**
2. Ingrese el producto **nombre**
3. Tenga en cuenta la aplicación **`id`** y la **clave pública VAPID** (para el sitio)

#### 1B, a través de API

Respuesta esperada: **200** con VAPID generado automáticamente:

Scope: **`push:apps:manage`**. Save the **`id`** and use `vapidPublicKey` on the front end to register the subscription.

### Custom VAPID (optional)

To use your own key pair instead of the generated one:

The **private** key stays on Notifique; the **public** key goes on your site.

***

## 2. Register device

When the user grants permission in the browser, send the **subscription** to your backend and register via API:

Expected response: **200**:

Guarda el dispositivo **`id`**, que va en `to` al enviar. Alcance: **`push:devices:register`**.

<Note>
  El registro **público** (sin clave API) también existe para los flujos de front-end, solo `appId` + `subscription`. Con una clave, se requiere el alcance anterior.
</Note>

***

## 3. Enviar notificación

Hasta **100** IDs de dispositivo por llamada. Al menos **title** o **body** en `payload` es obligatorio. Cada envío consume **1 crédito**.

```http theme={null}
POST /v1/push/messages
Content-Type: application/json
Authorization: Bearer sk_live_xxxxx
```

```json theme={null}
{
  "to": ["clxxdevice..."],
  "type": "push",
  "payload": {
    "title": "¡Hola!",
    "body": "Tienes un nuevo mensaje.",
    "url": "https://tusitio.com/notificaciones",
    "icon": "https://tusitio.com/icon.png"
  },
  "options": { "priority": "normal" }
}
```

Respuesta esperada: **202**

```json theme={null}
{
  "success": true,
  "data": {
    "status": "QUEUED",
    "count": 1,
    "messageIds": ["clpush1..."],
    "pushIds": ["clpush1..."]
  }
}
```

`messageIds` es el campo canónico; `pushIds` es alias de compatibilidad. Alcance: **`push:send`**.

### Enviar con plantilla

```json theme={null}
{
  "to": ["clxxdevice..."],
  "type": "template",
  "payload": {
    "templateId": "ID_DE_LA_PLANTILLA",
    "variables": { "name": "María" }
  }
}
```

**Programar**, incluye `schedule.sendAt` (ISO 8601) en el body. **Webhook solo de este lote:** `options.webhook` con `url` y `secret`.

***

## 4. Query, list, and cancel

**List sends**

Filtros opcionales: `status`, `appId`. Alcance: **`push:read`**.

**Ver un envío**

**Cancel scheduled** (only **SCHEDULED** status):

El crédito programado regresa al espacio de trabajo.

***

## 5. Evite duplicados

**`Idempotency-Key`** encabezado en el envío `POST`. Las repeticiones dentro de las 24 h no crean impulsos duplicados. Ver [Seguridad y confiabilidad](/es/guides/conceitos/seguranca-e-confiabilidade).

***

## 6. Webhooks (opcional)

Configure `push.sent`, `push.delivered`, `push.clicked`, `push.failed` y `push.cancelled` para realizar un seguimiento sin sondeo.

Guía: [Eventos de webhook](/es/push-api/como-funciona/eventos-do-webhooks).

***

## Todos los tipos de envío

En la referencia de la API (pestaña Push), abra **Enviar notificación push** y elija un ejemplo en el playground: Push completo, Plantilla, Programado.

## Próximos pasos

* [Introducción](/es/push-api/como-funciona/introducao): cuándo usar y estado del ciclo de vida
* [Scopes](/es/push-api/como-funciona/escopos-da-api-key): permisos clave
* [Eventos de webhook](/es/push-api/como-funciona/eventos-do-webhooks): estado en tiempo real
* [Respuestas de error](/es/guides/conceitos/resposta-de-erros): códigos HTTP y `code`
