Criar conta grátis

Referência da API

Notificações push

Registre os aparelhos do seu app, dispare push para um segmento ou para aparelhos específicos, veja alcance e custo antes e conte entregas e aberturas.

  • 7 operações
  • URL basehttps://api.messages.ccxcompany.co
  • AutenticaçãoBearer com a sua chave de API

O texto técnico abaixo vem do contrato público, o openapi.json, no idioma em que o contrato foi escrito.

Registra ou atualiza o token de push de um aparelho

POST/v2/push/tokens

Chame a cada abertura do app. É idempotente por `(app, token)`: reabrir o aplicativo atualiza a linha existente em vez de duplicar o aparelho na sua base.

Ambiente: vem da credencial. Uma chave ccx_test_* grava o aparelho no sandbox, e ele só recebe pushes de sandbox — nunca de uma campanha real.

Web Push exige `p256dh` e `auth` (as keys da subscription do navegador). Sem elas não há como cifrar o payload e o navegador descarta a notificação, então o registro é recusado com 400.

Campos de identificação (externalId, userName, userEmail) são o que faz a busca do compositor achar a pessoa. Mande-os no primeiro registro; nas chamadas seguintes eles podem ser omitidos sem apagar o que já está gravado.

Permissão: push:send.

Corpo da requisiçãoapplication/json

CampoTipoDescrição
appIdobrigatóriostring
tokenobrigatóriostring
platformopcionalstringValores:iosandroidweb
p256dhopcionalstring
authopcionalstring
externalIdopcionalstring
contactIdopcionalstring
userNameopcionalstring
userEmailopcionalstring
userPhoneopcionalstring
deviceNameopcionalstring
topicsopcionalstring[]
optedInopcionalboolean
Exemplo completo do corpo
JSON
{  "appId": "string",  "token": "string",  "platform": "ios",  "p256dh": "string",  "auth": "string",  "externalId": "string",  "contactId": "string",  "userName": "string",  "userEmail": "string",  "userPhone": "string",  "deviceName": "string",  "topics": [    "string"  ],  "optedIn": true}

Respostas

  • 200Default Response

    Campos e exemplo da resposta
    JSON
    {}
  • 400RFC 7807 problem details for BAD_REQUEST (400).

  • 401RFC 7807 problem details for UNAUTHORIZED (401).

  • 403RFC 7807 problem details for FORBIDDEN (403).

  • 404RFC 7807 problem details for NOT_FOUND (404).

As respostas de erro seguem o formato RFC 7807 (application/problem+json), com um código estável no campo code. Ver os códigos de erro

Exemplo em curl

cURL
curl -X POST 'https://api.messages.ccxcompany.co/v2/push/tokens' \  -H "Authorization: Bearer $CCX_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "appId": "string",    "token": "string"  }'
Só os campos obrigatórios. Troque os valores de exemplo pelos seus.

Registra a retirada de permissão de notificação

POST/v2/push/tokens/opt-out

Chame quando o usuário desligar as notificações no aparelho. O aparelho sai de todos os envios seguintes e passa a contar no seu KPI de opt-out.

A linha NÃO é apagada — quem saiu precisa ser contável. Um novo POST /v2/push/tokens com optedIn: true traz o aparelho de volta.

Permissão: push:send.

Corpo da requisiçãoapplication/json

CampoTipoDescrição
appIdobrigatóriostring
tokenobrigatóriostring
Exemplo completo do corpo
JSON
{  "appId": "string",  "token": "string"}

Respostas

  • 200Default Response

    Campos e exemplo da resposta
    JSON
    {}
  • 401RFC 7807 problem details for UNAUTHORIZED (401).

  • 403RFC 7807 problem details for FORBIDDEN (403).

  • 404RFC 7807 problem details for NOT_FOUND (404).

As respostas de erro seguem o formato RFC 7807 (application/problem+json), com um código estável no campo code. Ver os códigos de erro

Exemplo em curl

cURL
curl -X POST 'https://api.messages.ccxcompany.co/v2/push/tokens/opt-out' \  -H "Authorization: Bearer $CCX_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "appId": "string",    "token": "string"  }'
Só os campos obrigatórios. Troque os valores de exemplo pelos seus.

Recibo de abertura de uma notificação entregue

POST/v2/push/dispatches/{id}/opened

Chame quando o usuário TOCAR a notificação. Esta é a única origem da taxa de abertura do canal: nem a APNs nem o FCM contam abertura por você.

O id é o do dispatch, entregue ao app no payload da notificação.

Só a PRIMEIRA abertura conta. Reabrir a mesma notificação devolve counted: false — não é erro, é a proteção contra uma taxa de abertura acima de 100%.

Não afeta cobrança. O que se cobra é o aceite do provedor, não a abertura — ninguém consegue provar que a pessoa viu, e cobrar por isso seria cobrar pela sorte.

Permissão: push:send.

Parâmetros

CampoOndeTipoDescrição
idobrigatóriocaminhostring

Respostas

  • 200Default Response

    Campos e exemplo da resposta
    JSON
    {}
  • 401RFC 7807 problem details for UNAUTHORIZED (401).

  • 403RFC 7807 problem details for FORBIDDEN (403).

  • 404RFC 7807 problem details for NOT_FOUND (404).

As respostas de erro seguem o formato RFC 7807 (application/problem+json), com um código estável no campo code. Ver os códigos de erro

Exemplo em curl

cURL
curl -X POST 'https://api.messages.ccxcompany.co/v2/push/dispatches/<id>/opened' \  -H "Authorization: Bearer $CCX_API_KEY"
Só os campos obrigatórios. Troque os valores de exemplo pelos seus.

Lista os envios de push

GET/v2/push/messages

Ordem decrescente de criação. limit default 50, teto 200.

A lista é do ambiente da credencial: uma chave ccx_test_* vê os envios de sandbox e nada mais. Para ler a produção, use uma ccx_live_*.

Paginação por cursor, e não por `skip` — aqui push difere de SMS e e-mail de propósito. Um envio transacional grava uma linha por mensagem, então esta tabela cresce como uma tabela de mensagens; com skip o Mongo caminha por todos os registros pulados e a página 200 rasteja, enquanto o cursor custa o mesmo na primeira e na milésima.

Mande de volta o nextCursor que veio na resposta; quando ele vier ausente, acabou.

Filtros: status, origin (composer = painel, api, automation), from e to por data de criação (ISO-8601). status e origin aceitam repetição (?status=sent&status=sending).

Permissão: push:read.

Parâmetros

CampoOndeTipoDescrição
statusopcionalquerystring | string[]
originopcionalquerystring | string[]
fromopcionalquerystring · date-time
toopcionalquerystring · date-time
limitopcionalqueryinteger
cursoropcionalquerystring

Respostas

  • 200Default Response

    Campos e exemplo da resposta
    JSON
    {}
  • 400RFC 7807 problem details for BAD_REQUEST (400).

  • 401RFC 7807 problem details for UNAUTHORIZED (401).

  • 403RFC 7807 problem details for FORBIDDEN (403).

  • 422RFC 7807 problem details for VALIDATION_ERROR (422).

As respostas de erro seguem o formato RFC 7807 (application/problem+json), com um código estável no campo code. Ver os códigos de erro

Exemplo em curl

cURL
curl 'https://api.messages.ccxcompany.co/v2/push/messages' \  -H "Authorization: Bearer $CCX_API_KEY"
Só os campos obrigatórios. Troque os valores de exemplo pelos seus.

Dispara um push para um segmento ou para aparelhos específicos

POST/v2/push/messages

Cria o envio e materializa uma linha por aparelho na fila. A resposta chega assim que a fila é montada — não depois de a APNs/FCM aceitar: um disparo para 100 mil aparelhos não cabe num request.

Acompanhe pelo GET /v2/push/messages/{id}, que traz metrics com entregues, abertos e falhas.

`Idempotency-Key` é obrigatória. Sem ela o envio para com 400. Não derivamos uma do corpo: duas campanhas idênticas de propósito não podem virar uma.

Público: mande segment ou tokenIds, nunca os dois. segment aceita all_opt_in (toda a base com permissão) ou o id de um segmento salvo de contatos (seg_…).

Ambiente: vem da credencial. Uma chave ccx_test_* só alcança aparelhos de sandbox, debita a carteira de sandbox e não toca APNs/FCM de verdade.

Janela silenciosa: se o horário cair na janela configurada, o envio é ADIADO e a resposta traz quietDeferredTo com o horário real de saída.

Preço: cobrado por aparelho no ACEITE do provedor, pela tabela publicada. simple só texto, rich com imagem ou botão, silent data-only. Use POST /v2/push/preview para saber o custo antes.

Permissão: push:send.

Corpo da requisiçãoapplication/json

CampoTipoDescrição
titleobrigatóriostring
bodyobrigatóriostring
deepLinkopcionalstring
imageUrlopcionalstring
actionsopcionalobject[]
actions[].labelobrigatóriostring
actions[].linkopcionalstring
platformsobrigatóriostring[]
segmentopcionalstring
tokenIdsopcionalstring[]
scheduledAtopcionalstring · date-time
Exemplo completo do corpo
JSON
{  "title": "string",  "body": "string",  "deepLink": "string",  "imageUrl": "string",  "actions": [    {      "label": "string",      "link": "string"    }  ],  "platforms": [    "ios"  ],  "segment": "string",  "tokenIds": [    "string"  ],  "scheduledAt": "2026-10-16T12:00:00.000Z"}

Respostas

  • 201Default Response

    Campos e exemplo da resposta
    JSON
    {}
  • 400RFC 7807 problem details for BAD_REQUEST (400).

  • 401RFC 7807 problem details for UNAUTHORIZED (401).

  • 402RFC 7807 problem details for PAYMENT_REQUIRED (402).

  • 403RFC 7807 problem details for FORBIDDEN (403).

  • 409RFC 7807 problem details for CONFLICT (409).

  • 422RFC 7807 problem details for VALIDATION_ERROR (422).

As respostas de erro seguem o formato RFC 7807 (application/problem+json), com um código estável no campo code. Ver os códigos de erro

Exemplo em curl

cURL
curl -X POST 'https://api.messages.ccxcompany.co/v2/push/messages' \  -H "Authorization: Bearer $CCX_API_KEY" \  -H "Idempotency-Key: order-4821" \  -H "Content-Type: application/json" \  -d '{    "title": "string",    "body": "string",    "platforms": [      "ios"    ]  }'
Só os campos obrigatórios. Troque os valores de exemplo pelos seus.

Situação e métricas de um envio

GET/v2/push/messages/{id}

Devolve o envio do AMBIENTE da credencial: uma chave ccx_test_* nunca vê disparo de produção, e vice-versa.

metrics.reach é quantos aparelhos entraram na fila; delivered é quantos o provedor ACEITOU; opened só sobe quando o seu app chama POST /v2/push/dispatches/{id}/opened.

breakdown quebra entregues/abertos/falhas por plataforma.

Parâmetros

CampoOndeTipoDescrição
idobrigatóriocaminhostring

Respostas

  • 200Default Response

    Campos e exemplo da resposta
    JSON
    {}
  • 401RFC 7807 problem details for UNAUTHORIZED (401).

  • 403RFC 7807 problem details for FORBIDDEN (403).

  • 404RFC 7807 problem details for NOT_FOUND (404).

As respostas de erro seguem o formato RFC 7807 (application/problem+json), com um código estável no campo code. Ver os códigos de erro

Exemplo em curl

cURL
curl 'https://api.messages.ccxcompany.co/v2/push/messages/<id>' \  -H "Authorization: Bearer $CCX_API_KEY"
Só os campos obrigatórios. Troque os valores de exemplo pelos seus.

Alcance e custo de um envio, sem disparar

POST/v2/push/preview

Espelho do POST /v2/sms/preview: diz quantos aparelhos o público alcança e quanto o envio custa, sem criar nada e sem debitar.

rateKind é a modalidade deduzida do conteúdo — rich quando há imagem ou botão, senão simple. Ela decide a linha da tabela de preço.

charged: false significa que a instalação não tem carteira: o envio sairia sem debitar.

Corpo da requisiçãoapplication/json

CampoTipoDescrição
platformsobrigatóriostring[]
segmentopcionalstring
tokenIdsopcionalstring[]
imageUrlopcionalstring
actionsopcionalobject[]
actions[].labelobrigatóriostring
Exemplo completo do corpo
JSON
{  "platforms": [    "ios"  ],  "segment": "string",  "tokenIds": [    "string"  ],  "imageUrl": "string",  "actions": [    {      "label": "string"    }  ]}

Respostas

  • 200Default Response

    Campos e exemplo da resposta
    JSON
    {}
  • 400RFC 7807 problem details for BAD_REQUEST (400).

  • 401RFC 7807 problem details for UNAUTHORIZED (401).

  • 403RFC 7807 problem details for FORBIDDEN (403).

As respostas de erro seguem o formato RFC 7807 (application/problem+json), com um código estável no campo code. Ver os códigos de erro

Exemplo em curl

cURL
curl -X POST 'https://api.messages.ccxcompany.co/v2/push/preview' \  -H "Authorization: Bearer $CCX_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "platforms": [      "ios"    ]  }'
Só os campos obrigatórios. Troque os valores de exemplo pelos seus.

Travou em alguma rota? Fale com quem mantém a API.

Criando a conta pelo site, você ganha R$ 10 de crédito de teste.