API REST · Google Messages · RCS

Uma chamada REST. Mensagem no chat nativo do Android.

A API de mensagens RCS que entrega texto, imagem, PDF e áudio pelo Google Messages na conversa padrão do cliente — sem app instalado, sem número novo. Fila com retry, campanhas em massa e respostas direto no seu webhook.

1POST e foi
5.000números/lote
24/7sessão ativa
POST /send
$ curl -X POST rcs.vps1.com.br/send \
  -H "x-api-key: $CHAVE" \
  -d '{
    "phone": "+5511999990000",
    "text": "Pedido saiu para entrega 📦"
  }'

← 202 { "jobId": 4021 }
RCS ≠ SMS

Não é SMS. É o sucessor dele.

RCS (Rich Communication Services) é o padrão que substitui o SMS no Android. Chega na mesma caixa de entrada — o Google Messages, que já vem instalado — mas com a experiência de um app de mensagem moderno.

SMS

tecnologia de 1992
  • Só texto, limitado a 160 caracteres
  • Remetente é um número desconhecido
  • Sem confirmação de entrega ou leitura
  • Imagem? Só como link suspeito no meio do texto
  • Custo por mensagem enviada

RCS

padrão atual do Android
  • Texto sem limite, imagem, PDF e áudio na conversa
  • Nome do remetente no lugar do número
  • Recibo de entrega e leitura (✓✓)
  • Cliente responde na mesma conversa — e a resposta cai no seu webhook
  • Trafega por dados/Wi-Fi, sem custo por SMS
O que dá pra fazer

Tudo que o chat do Google entrega, via REST

Sem app instalado no cliente, sem número novo: a mensagem sai como RCS pelo Google Messages e cai na conversa padrão do Android.

Texto

Mensagem de texto direto na thread RCS do destinatário, com confirmação de envio por job.

Imagem & arquivo

PNG, JPG, PDF, documento — anexa qualquer arquivo junto da mensagem, do jeito que o Messages mostra.

Áudio

Envie áudios como arquivo de mídia — o destinatário toca direto na conversa.

Campanhas em massa

Até 5.000 números por lote com espaçamento automático entre envios. Pause, retome ou cancele quando quiser.

Inbox + webhook

Resposta do cliente chega no seu webhook em tempo real; se a entrega falhar, fica disponível por polling.

Fila com retry

Cada envio vira um job com status, tentativas e erro classificado. Caiu a conexão? Nada se perde — a fila retoma sozinha.

Do zero ao disparo

Três passos. Sério.

1

Conectamos seu número

Pareamos seu chip ao Google Messages uma única vez. A sessão fica viva 24/7 com recuperação automática.

2

Você chama a API

Uma requisição REST com sua chave de acesso. POST /send para um número, POST /campaigns para a lista inteira.

3

Acompanha tudo

Status por job, relatório por campanha e as respostas dos clientes entregues no seu sistema via webhook.

Feita para dev

Integra em minutos, não em sprints

API HTTP direta: JSON pra dentro, JSON pra fora. Autenticação por chave. Paginação por cursor. Erros com código estável.

Campanha em massa
POST /campaigns
{
  "name": "promo-julho",
  "message": { "text": "☀️ 20% off até domingo!" },
  "phones": ["+5511988880000", "..."]
}

← 202 { "campaignId": 12, "total": 350 }
Acompanhamento
GET /campaigns/12
 {
  "status": "active",
  "total": 350,
  "sent": 204,
  "pending": 145,
  "running": 1,
  "failed": 0
}

Documentação completa da API →

Perguntas frequentes

O que todo mundo pergunta antes de disparar

O que é uma API de mensagens RCS?

É uma interface REST que permite ao seu sistema enviar mensagens RCS — texto, imagem, PDF e áudio — direto na conversa nativa do Android, via Google Messages. Uma chamada HTTP com JSON e a mensagem chega onde o cliente realmente lê.

O cliente precisa instalar algum app para receber?

Não. A mensagem chega no Google Messages, o app de mensagens padrão do Android — o mesmo lugar onde chega o SMS, só que com mídia, nome do remetente e confirmação de leitura.

Quantas mensagens dá pra enviar por campanha?

Até 5.000 números por lote, com espaçamento automático entre envios. Dá pra pausar, retomar ou cancelar a campanha a qualquer momento, e acompanhar o relatório em tempo real por API.

Como recebo as respostas dos clientes?

Em tempo real no seu webhook: cada resposta vira um POST no seu sistema. Se a entrega do webhook falhar, a mensagem fica disponível por polling no endpoint de inbox — nada se perde.

O que acontece se a conexão cair no meio de um envio?

Cada envio é um job com status, tentativas e erro classificado. A fila tem retry automático e recuperação de sessão — quando a conexão volta, os envios pendentes retomam sozinhos.

Quanto custa o Wablast RCS?

O acesso é liberado sob medida para cada operação, sem tabela fixa. Chama a gente no WhatsApp, conta seu volume e caso de uso — a resposta é rápida.

Acesso antecipado

Sem tabela de preço.
Com conversa de verdade.

O acesso ao Wablast RCS é liberado sob medida para cada operação. Chama a gente no WhatsApp, conta o seu volume e o seu caso de uso — a gente responde rápido.

Chamar no WhatsApp
Referência pública · v1

Documentação da API

Todos os endpoints recebem e devolvem JSON. Autentique cada requisição com o header x-api-key. Horários saem em ISO 8601 no fuso configurado da conta.

BASE URL https://rcs.vps1.com.br

✈ Envios

POST /send Envia uma mensagem para um número

Body

CampoTipoDescrição
phonestringNúmero com DDI, ex.: +5511999990000
textstring?Texto da mensagem
filePathstring?Arquivo de mídia já enviado (imagem, PDF, áudio…)
imagePathstring?Apelido retrocompatível de filePath

Pelo menos um entre text, filePath e imagePath é obrigatório. Dá pra mandar texto + mídia juntos: mídia com legenda.

Resposta · 202

{ "jobId": 4021 }

Exemplo

curl -X POST $BASE/send \
  -H "x-api-key: $CHAVE" \
  -H "content-type: application/json" \
  -d '{"phone":"+5511999990000",
       "text":"Olá! 👋"}'
GET /jobs Lista envios com filtro e paginação

Query

ParamDescrição
statuspending · running · sent · failed · canceled
campaignIdSó os jobs de uma campanha
limit1–200 (padrão 50)
beforeCursor: id da página anterior

Resposta · 200

{
  "jobs": [ { "id": 4021, "status": "sent",  } ],
  "nextCursor": 3971
}

nextCursor nulo = acabou. Presente = repita a chamada com before=nextCursor.

GET /jobs/:id Status de um envio específico

Resposta · 200

{
  "status": "sent",
  "attempts": 1,
  "error": null,
  "errorCode": null,
  "sentAt": "2026-07-21T11:05:18-03:00"
}

✉ Campanhas

POST /campaigns Dispara a mesma mensagem para uma lista

Body

CampoTipoDescrição
namestringNome da campanha (aparece no relatório)
message.textstring?Texto da mensagem
message.filePathstring?Mídia anexada a todos os envios
message.imagePathstring?Apelido retrocompatível de message.filePath
phonesstring[]1 a 5.000 números com DDI

Um número inválido recusa a lista inteira — melhor corrigir antes do que disparar metade da campanha. O espaçamento entre envios é automático.

Resposta · 202

{ "campaignId": 12, "total": 350 }

Exemplo

curl -X POST $BASE/campaigns \
  -H "x-api-key: $CHAVE" \
  -H "content-type: application/json" \
  -d '{"name":"promo-julho",
       "message":{"text":"☀️ 20% off!"},
       "phones":["+5511988880000"]}'
GET /campaigns/:id Relatório da campanha em tempo real

Resposta · 200

{
  "status": "active",
  "total": 350,
  "sent": 204,
  "failed": 0,
  "pending": 145,
  "running": 1,
  "canceled": 0
}
POST /campaigns/:id/pause · resume · cancel Controla a execução

pause segura os próximos envios · resume retoma de onde parou · cancel encerra e cancela todos os envios pendentes.

POST /campaigns/12/pause   ← 200 { "ok": true }

📥 Inbox

GET /messages Mensagens recebidas dos seus clientes

Query

ParamDescrição
phoneFiltra por remetente
sinceISO 8601, ex.: 2026-07-21T09:00:00-03:00
limit1–200 (padrão 200)
beforeCursor: id da página anterior

As respostas também são entregues em tempo real no seu webhook. Este endpoint é o fallback por polling — nada fica pra trás.

Resposta · 200

{
  "messages": [
    {
      "id": 881,
      "phone": "+5511988880000",
      "body": "Quero aproveitar a promo!",
      "receivedAt": "2026-07-21T11:12:40-03:00",
      "webhookStatus": "delivered"
    }
  ],
  "nextCursor": null
}

← Voltar ao site