Leia o que mudou
Liste comupdated_since no momento em que sua execução anterior começou,
e sort=updated_at:
updated_at muda sempre que algo no registro muda — um campo padrão, um campo
personalizado ou as tags. O horário precisa ter fuso; 2026-09-30T00:00:00
sem fuso devolve 400.
Siga o cursor até o fim:
updated_at novo.
Filtre uma listagem com parâmetros de query — repita um para fazer OU entre os
valores, combine diferentes para fazer E:
POST /v1/contacts/search, que devolve os mesmos objetos.
Leia o que foi excluído
Exclusões têm um feed próprio, das mais antigas para as mais novas:contacts:read.
DELETE /v1/contacts/{id} (e o mesmo em organizações e negócios) tira um
registro de todas as listagens e buscas sem apagar nada: conversas e
histórico ficam guardados. Fazer upsert do mesmo contato, ou uma nova mensagem
dele, o restaura, e ele volta a aparecer na sua próxima leitura com
updated_since.
Use seus próprios ids
Definaexternal_id com o id do seu sistema ao criar ou atualizar um registro.
Ele é único por workspace e por recurso, volta em toda leitura e pode ser usado
como filtro:
POST /v1/contacts/upsert casa primeiro pelo external_id, depois pelo
phone:
Escreva em massa
POST /v1/contacts/batch faz upsert de até 100 contatos numa chamada. Cada item
é gravado exatamente como em POST /v1/contacts/upsert, em ordem, e recebe o
próprio resultado — um item com falha nunca desfaz os outros:
200 sempre que o lote em si é válido; leia o status de
cada item. Envie um header Idempotency-Key para que um lote reenviado não seja
aplicado duas vezes.
Juntando tudo
- Anote o horário e leia as mudanças com
updated_sinceno início da execução anterior. - Leia
GET /v1/deleted-recordscomsinceno mesmo horário e remova esses registros do seu lado. - Envie suas mudanças com
POST /v1/contacts/batch, pela chaveexternal_id, com umIdempotency-Key. - Guarde o horário do passo 1 como o início desta execução.
X-RateLimit-Remaining em toda resposta e desacelere antes de chegar
a zero.