Sincronizar os contatos de um site
POST/contacts/sync
Os clientes de um site conectado, até 500 por chamada. É o que o plugin do WordPress
chama para trazer os usuários, clientes e leads do site — e qualquer plataforma própria
com a API key de um site conectado pode chamar também. A resposta é 200 mesmo quando
linhas falham: o resultado de cada uma vem em results, na ordem do envio.
POST /contacts/batch é uma planilha enviada uma vez. Esta rota é o contrário: um
sistema que reporta as mesmas pessoas de novo e de novo, e por isso as regras só somam,
nunca destroem:
- o contato é achado primeiro por quem ele é no site (
ref: o usuário 42 do WordPress), depois pelo telefone. Quem trocou de número continua sendo o mesmo contato; se o número novo já é de outro contato, nada é unido e a linha volta comphone_conflict; - sem telefone e sem vínculo com o site, ninguém é criado (
no_phone,invalid_phone); - tags só entram, pelo nome, e as que não existem são criadas. Para tirar uma, use
removeTags; - nome, e-mail e campos personalizados só preenchem o que está vazio: o que alguém
digitou no painel vence o que o site reporta. Os campos que o próprio site calcula
(os
wc_…do WooCommerce) sobrescrevem — a menos queoccurredAtseja mais antigo que o último aplicado para aquele vínculo (stale_snapshot); - um opt-out dado no site sempre vale. O consentimento só passa de
unknownparaopted_in, com evidência, e nunca por cima de um opt-out (kept_opt_out) ou de uma supressão (kept_suppression); - um valor para um campo que a conta não tem, ou do tipo errado, é descartado e aparece
em
warnings— o resto da linha é aplicado; - contatos novos contam no teto do plano (
contact_limit_reached).
Com options.triggers em false — o padrão, o de uma carga inicial — nada dispara:
nenhum fluxo começa e nenhum webhook contact.created sai. Uma carga de dez mil clientes
não pode cumprimentar dez mil pessoas. Mande true para o que acabou de acontecer no site.
Idempotência. Com o header Idempotency-Key, um lote repetido depois de uma conexão
que caiu devolve o primeiro resultado, com Idempotent-Replayed: true, em vez de ser
aplicado duas vezes. A mesma chave com outro corpo é recusada com
422 idempotency_key_reused; enquanto a primeira requisição ainda roda, a repetição
recebe 409 idempotency_in_progress.
Só a API key de um site conectado sincroniza — ela vem com a permissão contacts:sync.
Uma API key comum recebe 404 site_not_found, e uma API key restrita a alguns números,
403.
Request
Responses
- 200
- 401
- 402
- 403
- 404
- 409
- 413
- 422
- 429
Resultado por linha.
Token ausente, malformado, desconhecido ou revogado (authentication), ou
conta suspensa (tenant_inactive).
Sem direito de uso (payment_required). O corpo traz o motivo em reason e a saída
em action: o que fazer (kind) e a página do painel onde se faz (url).
Uma sessão do painel em vez de uma API key (site_key_required), uma API key sem a permissão contacts:sync (key_permission_denied) ou restrita a alguns números (forbidden).
A API key não está ligada a um site conectado (site_not_found). Conecte o site de novo pelo plugin.
O site está pausado no painel (site_paused), ou uma requisição com a mesma Idempotency-Key ainda está em andamento (idempotency_in_progress).
O corpo passou de 1 MB (payload_too_large). Divida o lote.
Corpo inválido — contacts ausente, vazio ou com mais de 500 linhas (invalid_request, com issues) —, ou a mesma Idempotency-Key com outro corpo (idempotency_key_reused). Uma linha inválida não recusa o lote: ela volta em results como failed.
Limite de requisições excedido (rate_limit).
Response Headers
Segundos a aguardar antes de tentar de novo.
Categoria do limite aplicada — send, media ou default.
Qual balde os outros headers descrevem — key (a API key), session (o painel) ou account (o teto da conta).
Teto de requisições da categoria na janela atual.
Requisições restantes na janela atual.