> ## 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 preços

> GET /v1/pricing devolve planos, preço por canal e a tabela do WhatsApp Oficial por país, sem autenticação.

<Tip>
  É a **etiqueta de preço** da plataforma, sempre com o valor de hoje. Não precisa de API Key: dá para chamar direto do navegador, de uma página estática ou de um script.
</Tip>

## Em poucas palavras

* **Um endpoint público**, sem autenticação: `GET /v1/pricing`.
* Devolve **planos**, **preço por canal**, a **taxa de software** do WhatsApp Oficial e a tabela por **país e categoria**.
* Traz `updatedAt`, a data em que os preços passaram a valer.

***

## Requisição

Sem `Authorization`, sem workspace, sem header especial.

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

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

## Resposta (200)

Exemplo abreviado, com valores ilustrativos. Na resposta real, `plans`, `skus` e `rates` vêm completos (a tabela de países passa de mil linhas).

```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)."
        }
      ]
    },
    "voice": {
      "fallbackCountry": "BR",
      "surcharges": [
        { "code": "amd_standard", "label": "AMD padrão", "credits": 5, "paygCents": 1 },
        { "code": "recording", "label": "Gravação (por minuto)", "credits": 3, "paygCents": 1 }
      ],
      "countries": [
        { "code": "BR", "name": "Brasil", "callingCode": "55" },
        { "code": "US", "name": "United States", "callingCode": "1" }
      ],
      "rates": [
        {
          "country": "BR",
          "countryName": "Brasil",
          "callingCode": "55",
          "direction": "OUTBOUND",
          "credits": 120,
          "paygCents": 12,
          "available": true,
          "unavailableReason": null
        },
        {
          "country": "BR",
          "countryName": "Brasil",
          "callingCode": "55",
          "direction": "INBOUND",
          "credits": 180,
          "paygCents": 18,
          "available": true,
          "unavailableReason": null
        }
      ]
    },
    "smsOwnNumber": {
      "fallbackCountry": "ZZ",
      "countries": [
        { "code": "BR", "name": "Brasil", "callingCode": "55" }
      ],
      "rates": [
        {
          "country": "BR",
          "countryName": "Brasil",
          "callingCode": "55",
          "credits": 24,
          "paygCents": 3,
          "available": true,
          "unavailableReason": null
        }
      ]
    }
  }
}
```

## Campos

| Campo                              | O que é                                                                                   |
| ---------------------------------- | ----------------------------------------------------------------------------------------- |
| `version`                          | Versão da tabela ativa. `null` enquanto a precificação por SKU não estiver ligada         |
| `updatedAt`                        | Quando esta tabela passou a valer. É a "última atualização" que você mostra na sua página |
| `currency`                         | Sempre `"BRL"`                                                                            |
| `creditValueCents`                 | Valor de um crédito em centavos (`0.1`, ou seja R\$ 0,001)                                |
| `plans[]`                          | `plan`, `credits` do mês, `priceCents` e `maxInstances` **por canal**                     |
| `extraInstanceSlot`                | `priceCents` do slot extra e `maxSlots` por workspace                                     |
| `skus[]`                           | Preço fixo por canal: `code`, `label`, `credits` e `paygCents`                            |
| `whatsappOfficial.fallbackCountry` | País de reserva quando o destino não tem linha própria (`ZZ`)                             |
| `whatsappOfficial.softwareFee`     | `credits` e `paygCents` cobrados por envio quando **você paga a conversa direto à Meta**  |
| `whatsappOfficial.countries[]`     | Só os países, para montar um seletor sem varrer as tarifas                                |
| `whatsappOfficial.rates[]`         | Uma linha por país × categoria, com `credits`, `paygCents` e disponibilidade              |
| `voice.fallbackCountry`            | País de reserva para tarifa de voz                                                        |
| `voice.surcharges[]`               | Sobretaxas: AMD, gravação, transferência, etc. (`code`, `credits`, `paygCents`)           |
| `voice.countries[]`                | Países com tarifa de voz cadastrada                                                       |
| `voice.rates[]`                    | Minuto por país × direção (`OUTBOUND` / `INBOUND`)                                        |
| `smsOwnNumber.fallbackCountry`     | País quando o destino SMS não tem linha própria                                           |
| `smsOwnNumber.countries[]`         | Países com tarifa SMS número próprio                                                      |
| `smsOwnNumber.rates[]`             | Créditos/preço por **parte SMS** e país de destino (com `from` no envio)                  |

<Info>
  `credits` é o que sai do plano; `paygCents` é o que sai do saldo em reais. Para converter créditos em reais, multiplique por `creditValueCents` e divida por 100.
</Info>

<Warning>
  **Qual dos dois preços usar.** Na conexão Tech Provider ou BYOK (o caminho padrão), a Meta fatura as conversas direto de você e a Notifique cobra apenas `softwareFee`; as linhas de `rates` **não são cobradas**, porque já embutem a tarifa da Meta que está na sua fatura. As linhas de `rates` valem para as conexões **BSP**, onde é a Notifique que paga a Meta. Ver [WhatsApp Oficial por país](/guides/precos/whatsapp-oficial-por-pais).
</Warning>

<Note>
  `rates` continua útil no caminho padrão para uma coisa: saber se o destino **aceita** a categoria. A disponibilidade vale nos dois modelos.
</Note>

<Note>
  Linha com `available: false` é destino que a Meta não aceita naquela categoria. O motivo vem em `unavailableReason`, e o envio é recusado com **400** `DESTINATION_NOT_AVAILABLE`. Ver [WhatsApp Oficial por país](/guides/precos/whatsapp-oficial-por-pais).
</Note>

## Voz e SMS número próprio

* **Voz:** o minuto depende do país do destino (saída) ou do chamador (entrada). Sobretaxas em `voice.surcharges` só entram em jogo quando você usa `record: true` ou `amdMode` diferente de `disabled` na chamada. Detalhes: [Preços e opções de voz](/voice-api/como-funciona/precos-opcoes-e-modos).
* **SMS com `from`:** use `smsOwnNumber.rates[]` em vez dos SKUs fixos `SMS_FULL` / `SMS_STANDARD` / `SMS_SLOW`. Detalhes: [SMS número próprio](/sms-api/como-funciona/numero-proprio-e-precos).

***

## Cache e limite de uso

A resposta é igual para todo mundo e muda no máximo uma vez por dia, então vale guardar:

* `Cache-Control: public, max-age=300, stale-while-revalidate=3600`
* `ETag` no conteúdo, e **304** quando você reenvia o mesmo valor em `If-None-Match`
* `Access-Control-Allow-Origin: *`, dá para chamar direto do navegador

<Warning>
  O limite padrão é de **120 requisições por minuto por IP**. Estourou, a API devolve **429** com `RATE_LIMIT_EXCEEDED` e o header `Retry-After: 60`. Guarde a resposta em cache em vez de consultar a cada carregamento 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 passos

* [WhatsApp Oficial por país](/guides/precos/whatsapp-oficial-por-pais): taxa de software, país e categoria
* [Preços e opções de voz](/voice-api/como-funciona/precos-opcoes-e-modos): minuto, AMD, gravação
* [SMS número próprio](/sms-api/como-funciona/numero-proprio-e-precos): tarifa por país com `from`
* [Cobrança](/guides/introducao/cobranca-e-pague-pelo-uso): créditos, planos e pague pelo uso
* [Respostas de erro](/guides/conceitos/resposta-de-erros): códigos HTTP e `code`
