Guia do desenvolvedorAutomações
Contatos e eventos
Contatos com atributos e eventos do seu app pela API do Couryo (POST /v1/contacts e POST /v1/events), idempotentes, que disparam e encerram sequências. Sem cobrança por contato.
Um contato é uma pessoa que recebe as suas sequências, com atributos para personalizar (nome, plano, timezone). Um evento é algo que aconteceu no seu app (user.signed_up, order.paid): ele coloca o contato nas sequências que começam por esse nome e encerra as que esperam essa conversão.
Sem cobrança por contato. Ter 100 ou 100 mil contatos custa o mesmo: só os e-mails enviados contam na cota do plano.
Mandar um evento#
curl https://api.couryo.com/v1/events \
-H "Authorization: Bearer $COURYO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: signup-ana-1042" \
-d '{
"contact": { "email": "ana@exemplo.com.br", "attributes": { "nome": "Ana", "plano": "free" } },
"name": "user.signed_up",
"properties": { "origem": "site" }
}'{
"id": "cev_8k2m4q9w1x7z3abc",
"contact_id": "con_3n5p7r9t1v2x4zab",
"name": "user.signed_up",
"enrolled": [{ "sequence_id": "seq_q8w2e4r6t8y0u1io", "enrollment_id": "enr_a1s3d5f7g9h2j4kl" }],
"converted": [],
"created_at": "2026-10-08T18:30:00Z"
}- O contato é criado ou atualizado pelo e-mail (os atributos se juntam aos que já existem).
enrolledlista as sequências ativas que este evento iniciou. Um contato entra numa sequência por evento uma vez; para colocar de novo, use a entrada manual.convertedlista as inscrições encerradas porque este é o evento de conversão delas.propertiesficam disponíveis nos e-mails da sequência como{{event.origem}}.- Nome do evento: letras, números,
.,_,:e-, até 100 caracteres. - Escopo: chave
send(ouadmin). Uma chaveck_test_coloca o contato em modo de teste: os e-mails da sequência são capturados e nunca entregues.
Idempotência#
Mande Idempotency-Key em todo evento. A mesma chave com o mesmo corpo devolve a mesma resposta, com Idempotent-Replayed: true, e não cria outro evento nem outra inscrição. Corpo diferente com a mesma chave devolve 409 idempotency_conflict. Além das 24 horas de sempre, o evento guarda a chave: repetir depois disso ainda devolve o mesmo evento.
Contatos#
curl https://api.couryo.com/v1/contacts \
-H "Authorization: Bearer $COURYO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "email": "ana@exemplo.com.br", "attributes": { "plano": "pro", "cidade": null } }'- Responde
201quando cria e200quando atualiza. - Atributos são valores simples (texto, número, verdadeiro ou falso).
nullapaga o atributo. - O atributo
timezone(por exemplo,America/Manaus) é usado pelas esperas "até as HH:mm no fuso do contato". subscribedéfalsequando o endereço está na lista de supressão para marketing (descadastro, devolução, reclamação ou manual). O descadastro sempre vale: o contato não recebe sequências de marketing, e uma sequência em andamento termina na hora.
| Método e caminho | Escopo | O que faz |
|---|---|---|
POST /v1/contacts |
send |
cria ou atualiza pelo e-mail |
GET /v1/contacts |
read |
lista, do mais novo; q busca por parte do e-mail, limit e starting_after paginam |
GET /v1/contacts/{id} |
read |
um contato, pelo id (con_...) ou pelo e-mail |
PATCH /v1/contacts/{id} |
admin |
muda o e-mail ou os atributos |
DELETE /v1/contacts/{id} |
admin |
apaga o contato e os eventos dele; ele sai das sequências (a supressão continua) |
POST /v1/events |
send |
registra um evento do contato |
Pelo MCP#
As ferramentas track_event (escopo send, com idempotency_key) e upsert_contact (escopo send) fazem o mesmo pelo servidor MCP, para o seu agente de IA registrar cadastros e compras.