Endpoint
chat:messages:send. Cada envio consome 1 crédito (CHAT_MESSAGE).
O path POST /v1/chat/conversations/{id}/messages continua válido: o id da conversa vai na URL e o corpo é o mesmo (type + payload), sem to.
Campos
Com JWT do membro, não envie
senderExternalUserId: o remetente é o token.
A resposta usa type em maiúsculas (TEXT, IMAGE, AUDIO, FILE).
Texto
Imagem
payload.message (ou payload.caption) é a legenda. Sem payload.mediaUrl → 400.
Áudio
Arquivo
Responder a uma mensagem
replyToId também pode ir em payload.replyToId.
JWT do membro
O app autenticado com o JWT não manda API Key.Várias conversas no mesmo pedido
to aceita lista. Cada id é uma conversa do mesmo workspace.
data é o objeto da mensagem. Várias → data é um array.
WebSocket (app do usuário)
O socket não usa o body PIV1. Depois doauth:
messageType (image | audio | file) e mediaUrl HTTPS, ou payload.type / payload.mediaUrl. O type do frame continua sendo message.send.
REST (backend) → POST /v1/chat/messages. Tempo real no app → WebSocket.
Tipo fora do teto do app ou do interruptor da sala → 403 CHAT_CAPABILITY_DISABLED. DIRECT com bloqueio entre os usuários → 403 CHAT_USER_BLOCKED. Detalhes: Capacidades e bloqueio.
No WebSocket o message.send também aceita type (text | image | audio | file) e mediaUrl (HTTPS). recording.start só vale se a sala tiver audio ligado.
Próximos passos
- Usuário e agente: quem aparece como remetente
- Eventos dos webhooks
- Escopos da API Key

