WhatsApp Coexistence · official Cloud API

The official WhatsApp Cloud API, on the number your customer already uses

The number stays in the WhatsApp Business app on your customer’s phone and answers through the official Cloud API at the same time. No number migration, no QR code, no lost chat history.

  • No recurring QR code
  • The Meta account stays your customer’s
  • Isolated per organization
Canais conectados

3 / 3

todos ativosplano Starter · 10 webhooks
  • Atendimento+55 21 99999-9999conectado
  • Vendas+55 11 98888-8888conectado
  • Suporteaguardando autorizaçãopendente
Mensagens no mêsagosto

12.480

18%contra o mês anterior
9.140 saídas2.706 entradas634 ecos
  • HMAC SHA-256
  • Signed webhooks
  • Per-organization isolation
  • Idempotency-Key
  • Audit log
The problem

Sessions drop, numbers change, history disappears

Unofficial integration

It scans a QR code to open a browser session. The session expires, the server restarts, the phone runs out of battery — and someone has to scan the code again. When the account gets banned, the number goes with it.

  • Session drops and needs a fresh QR code
  • A second number, on a second device, just for the API
  • Chat history split across two places

Coexistence through the Cloud API

Your customer authorizes through Meta’s Embedded Signup, inside their own Facebook account. The number then exists in both places at once: the app keeps running on the phone and the Cloud API answers on the same number.

  • Authorized once, with no QR code
  • Same number, same device, same history
  • What they type on the phone arrives as an echo event
How it works

Four steps between you and the first connected number

You generate the link, your customer authorizes it in their own Meta account, and the Hub hands back the API key and a signed webhook endpoint. None of it depends on a phone you have to keep plugged in.

  1. Nova organização

    Organização do cliente

    Chaves, canais e logs isolados nesta conta

    01

    Create the organization

    One account per customer of yours. Everything that follows stays isolated inside it.

  2. Link de conexão

    crprohub.com/connect/hub_ln_…

    Expira sozinho · vale para um cliente

    02

    Generate a connection link

    The link is public, expires on its own and is valid for a single customer. Send it however you like.

  3. Embedded Signup
    CancelarAutorizar
    03

    Your customer connects their number

    They open the link, sign in to their own Meta account and authorize. WhatsApp keeps working on their phone.

  4. hub_pk_••••••••••••ativa
    /webhooks/crpro200
    04

    You get the key and the webhook

    The API key comes out scoped, and your endpoint starts receiving signed events.

The API

What you can integrate today

Every endpoint listed here exists and is documented. No catalogue of resources that have not been written yet.

Endpoints in production
  • GET/api/v1/channels

    Lista os números conectados de uma organização, com o estado de cada um.

  • POST/api/v1/channels/{id}/messages

    Envia por um número. Responde 202: aceita e enfileirada, não entregue.

  • GET/api/v1/channels/{id}/messages

    Histórico de entradas, saídas e ecos do aplicativo, com paginação por cursor.

  • POST/api/v1/webhooks

    Cria um endpoint assinado. O segredo aparece uma única vez, na resposta.

  • GET/api/v1/logs

    Auditoria por período, ação, chave e recurso — quem fez o quê, e quando.

  • GET/api/v1/usage

    Consumo do mês por canal, para você repassar ou só acompanhar.

Send a message
curl -X POST https://crprohub.com/api/v1/channels/CHANNEL_UUID/messages \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL" \
  -H "Idempotency-Key: 4a50df76-d6c5-49f3-90a4-13907579d924" \
  -H "Content-Type: application/json" \
  -d '{"to":"5521999999999","type":"text","text":{"body":"Olá"}}'

The response is 202: accepted and queued, not delivered. Final state arrives over the webhook. The Idempotency-Key header is required — replaying the same key with the same body returns the original response instead of sending again.

Send rate limit: 60 por minuto por canalThe limit is documented per endpoint, next to the scope the API key has to carry.
Webhooks

Webhooks you can actually verify

Every delivery carries the x-hub-signature-256 header with an HMAC SHA-256 of the raw body, computed with a secret shown exactly once, when you create the endpoint. The destination is validated before it is stored: internal addresses, localhost and private ranges are rejected.

Signature

HMAC SHA-256 over the raw body, compared in constant time.

Retries

Up to ten attempts, from thirty seconds to two days apart.

Automatic pause

Twenty consecutive failures pause the endpoint instead of hammering it.

Pricing

Start with the right capacity

Each additional number unlocks three more webhook endpoints. WhatsApp conversations are billed by Meta, directly on your customer’s account. Subscriptions are billed in Brazilian reais (BRL).

Starter

3 numbers

R$97/month

For teams connecting their first customers who want the official contract from day one.

  • 3 connected numbers
  • 10 webhook endpoints
  • Additional number for R$ 32,50, with 3 more webhooks
Start with Starter

Pro

Most chosen

R$147/month

For growing portfolios: more numbers included and a cheaper additional number.

  • 5 connected numbers
  • 15 webhook endpoints
  • Additional number for R$ 29,50, with 3 more webhooks
Start with Pro

WhatsApp conversations are billed by Meta on your customer’s own account and do not go through this subscription. Subscription prices are charged in BRL.

Questions

Frequently asked questions

These are the questions that come up most before the first connection. If one is missing, the documentation answers it in detail.

Open the documentation
Can I use the WhatsApp API on the same number that is already on my customer’s phone?

Yes. That is what Meta calls coexistence: the number keeps working in the WhatsApp Business app on your customer’s phone and answers through the Cloud API at the same time. They do not change number, do not lose their conversations and do not have to migrate to a new device.

Do I have to scan a QR code at any point?

No. The connection runs through Meta’s Embedded Signup, inside your customer’s own Facebook account. There is no browser session to drop and no QR code to rescan when the server restarts.

Who pays Meta for the conversations?

Your customer does, on their own WhatsApp Business account. The account belongs to them and conversation billing is settled between them and Meta — you never sit in the middle of that invoice or answer for it.

How do I know a webhook really came from the Hub?

Every delivery carries the x-hub-signature-256 header with an HMAC SHA-256 of the raw body, computed with a secret only your endpoint and the Hub know. Compare it in constant time and discard anything that does not match.

What happens if my server is down when an event arrives?

The delivery is retried up to ten times, with intervals growing from thirty seconds to two days. After twenty consecutive failures the endpoint pauses itself, and you re-enable it in the dashboard once you have fixed what was blocking delivery.

Can one of my customers see another customer’s data?

No. Every API key belongs to one organization and every query filters by it at the database level. Requesting another organization’s resource returns 404, not 403 — the existence of someone else’s resource does not leak either.

If I resend the same message by mistake, does the customer receive it twice?

No, as long as you resend it with the same Idempotency-Key. The header is required on send: the same key with the same body returns the original response, and the same key with a different body returns 409.

Connect your first number today

Create the organization, generate the link and send it to your customer. They authorize it from their own phone — and the key lands in your hands.