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

# Consulta de precios

> GET /v1/pricing devuelve planes, precio por canal y la tabla de WhatsApp Oficial por país, sin autenticación.

<Tip>
  Es la **etiqueta de precio** de la plataforma, siempre con el valor de hoy. No necesita API Key: puede llamarla desde el navegador, desde una página estática o desde un script.
</Tip>

## En pocas palabras

* **Un endpoint público**, sin autenticación: `GET /v1/pricing`.
* Devuelve **planes**, **precio por canal**, la **tarifa de software** de WhatsApp Oficial y la tabla por **país y categoría**.
* Trae `updatedAt`, la fecha en que los precios entraron en vigor.

***

## Solicitud

Sin `Authorization`, sin workspace, sin encabezado especial.

```http theme={null}
GET /v1/pricing
Host: api.notifique.dev
```

```bash theme={null}
curl https://api.notifique.dev/v1/pricing
```

## Respuesta (200)

Ejemplo abreviado, con valores ilustrativos. En la respuesta real, `plans`, `skus` y `rates` vienen completos (la tabla de países pasa de mil líneas).

```json theme={null}
{
  "success": true,
  "data": {
    "version": 12,
    "updatedAt": "2026-07-29T03:10:00.000Z",
    "currency": "BRL",
    "creditValueCents": 0.1,
    "plans": [
      { "plan": "BASIC", "credits": 55000, "priceCents": 4990, "maxInstances": 1 },
      { "plan": "PRO", "credits": 92000, "priceCents": 7990, "maxInstances": 2 },
      { "plan": "BUSINESS", "credits": 580000, "priceCents": 49990, "maxInstances": 9 }
    ],
    "extraInstanceSlot": { "priceCents": 790, "maxSlots": 20 },
    "skus": [
      { "code": "PUSH_SEND", "label": "Push", "credits": 2, "paygCents": 1 },
      { "code": "SMS_STANDARD", "label": "SMS Standard", "credits": 100, "paygCents": 12 },
      { "code": "RCS_RICH", "label": "RCS (card, carrossel, arquivo)", "credits": 200, "paygCents": 25 }
    ],
    "whatsappOfficial": {
      "fallbackCountry": "ZZ",
      "softwareFee": { "credits": 70, "paygCents": 9 },
      "countries": [
        { "code": "BR", "name": "Brazil", "callingCode": "55" },
        { "code": "US", "name": "United States", "callingCode": "1" }
      ],
      "rates": [
        {
          "country": "BR",
          "countryName": "Brazil",
          "callingCode": "55",
          "category": "MARKETING",
          "credits": 519,
          "paygCents": 63,
          "available": true,
          "unavailableReason": null
        },
        {
          "country": "US",
          "countryName": "United States",
          "callingCode": "1",
          "category": "MARKETING",
          "credits": 70,
          "paygCents": 9,
          "available": false,
          "unavailableReason": "Meta não entrega mensagens de marketing para números dos EUA (erro 131049)."
        }
      ]
    }
  }
}
```

## Campos

| Campo                              | Qué es                                                                                             |
| ---------------------------------- | -------------------------------------------------------------------------------------------------- |
| `version`                          | Versión de la tabla activa. `null` mientras la tarificación por SKU no esté activa                 |
| `updatedAt`                        | Cuándo entró en vigor esta tabla. Es la "última actualización" que usted muestra en su página      |
| `currency`                         | Siempre `"BRL"`                                                                                    |
| `creditValueCents`                 | Valor de un crédito en centavos (`0.1`, o sea R\$ 0,001)                                           |
| `plans[]`                          | `plan`, `credits` del mes, `priceCents` y `maxInstances` **por canal**                             |
| `extraInstanceSlot`                | `priceCents` del slot extra y `maxSlots` por workspace                                             |
| `skus[]`                           | Precio fijo por canal: `code`, `label`, `credits` y `paygCents`                                    |
| `whatsappOfficial.fallbackCountry` | País de reserva cuando el destino no tiene línea propia (`ZZ`)                                     |
| `whatsappOfficial.softwareFee`     | `credits` y `paygCents` cobrados por envío cuando **usted le paga la conversación directo a Meta** |
| `whatsappOfficial.countries[]`     | Solo los países, para armar un selector sin recorrer todas las tarifas                             |
| `whatsappOfficial.rates[]`         | Una línea por país × categoría, con `credits`, `paygCents` y disponibilidad                        |

<Info>
  `credits` es lo que sale del plan; `paygCents` es lo que sale del saldo en reales. Para convertir créditos a reales, multiplique por `creditValueCents` y divida por 100.
</Info>

<Warning>
  **Cuál de los dos precios usar.** En la conexión Tech Provider o BYOK (el camino estándar), Meta le factura las conversaciones directamente y Notifique cobra solo `softwareFee`; las líneas de `rates` **no se cobran**, porque ya incluyen la tarifa de Meta que está en su factura. Las líneas de `rates` valen para las conexiones **BSP**, donde quien le paga a Meta es Notifique. Vea [WhatsApp Oficial por país](/es/guides/precos/whatsapp-oficial-por-pais).
</Warning>

<Note>
  `rates` sigue siendo útil en el camino estándar para una cosa: saber si el destino **acepta** la categoría. La disponibilidad vale en los dos modelos.
</Note>

<Note>
  Una línea con `available: false` es un destino que Meta no acepta en esa categoría. El motivo viene en `unavailableReason`, y el envío se rechaza con **400** `DESTINATION_NOT_AVAILABLE`. Vea [WhatsApp Oficial por país](/es/guides/precos/whatsapp-oficial-por-pais).
</Note>

***

## Caché y límite de uso

La respuesta es igual para todo el mundo y cambia como mucho una vez al día, así que conviene guardarla:

* `Cache-Control: public, max-age=300, stale-while-revalidate=3600`
* `ETag` basada en el contenido, y **304** cuando reenvía el mismo valor en `If-None-Match`
* `Access-Control-Allow-Origin: *`, se puede llamar directo desde el navegador

<Warning>
  El límite estándar es de **120 solicitudes por minuto por IP**. Si lo supera, la API devuelve **429** con `RATE_LIMIT_EXCEEDED` y el encabezado `Retry-After: 60`. Guarde la respuesta en caché en lugar de consultarla en cada carga de página.
</Warning>

```json theme={null}
{
  "success": false,
  "error": "Too Many Requests",
  "message": "Pricing rate limit exceeded. Try again in a minute.",
  "code": "RATE_LIMIT_EXCEEDED"
}
```

***

## Próximos pasos

* [WhatsApp Oficial por país](/es/guides/precos/whatsapp-oficial-por-pais): cómo el país y la categoría cambian el precio
* [Facturación](/es/guides/introducao/cobranca-e-pague-pelo-uso): créditos, planes y pago por uso
* [Respuestas de error](/es/guides/conceitos/resposta-de-erros): códigos HTTP y `code`
