Cadastrar e atualizar contatos
Use POST /contacts/create-or-update para manter a base da PicChat em dia com o seu site, CRM ou formulário. Ele procura o contato pelo celular e/ou e-mail: se achar, atualiza; se não, cria. Por isso é seguro chamar sempre, sem consultar antes.
Criar ou atualizar
curl --request POST \
--url https://api.picchat.com.br/contacts/create-or-update \
--header 'Authorization: Bearer SEU_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"first_name": "Maria",
"last_name": "Souza",
"mobilephone": "5511999990000",
"email": "maria.souza@example.com",
"font": "organic_search",
"font_detail": "formulario-site",
"etapa_do_funil": "lead"
}'A resposta (201) traz o contato e o campo new: true quando foi criado, false quando já existia e foi atualizado.
Regras de atualização
- Precisa de celular ou e-mail (ou os dois). Se os dois vierem, qualquer um que casar identifica o contato.
first_name,last_name,emailemobilephonevazios ou ausentes mantêm o valor atual.status,is_marketing,font,font_detailsempre sobrescrevem quando enviados — mande só se quiser trocar.mobilephonevai como texto, com DDI:"5511999990000". Número no JSON (sem aspas) é recusado com422.
Origem do contato
font registra de onde o contato veio e aparece nos relatórios do painel:
font |
Origem |
|---|---|
organic_search |
Busca orgânica |
paid_search |
Busca paga |
paid_social |
Anúncio em rede social |
social_media |
Rede social orgânica |
email_marketing |
E-mail marketing |
referrals |
Indicação |
direct_traffic |
Acesso direto |
other_campaigns |
Outras campanhas |
offline |
Offline |
direct_insertion |
Inserção direta |
importation |
Importação |
Use font_detail para o detalhe livre (nome do formulário, campanha, página).
Propriedades personalizadas
Propriedades (etapa do funil, curso de interesse, cidade, plano…) vão como chaves no nível de cima do corpo, pelo internal_name da propriedade:
{
"mobilephone": "5511999990000",
"etapa_do_funil": "lead",
"curso_interesse": "administracao",
"cidade": "São Paulo"
}- O
internal_namede cada propriedade está no painel e emGET /v1/properties. - Para propriedades de seleção, mande o
internal_nameda opção. Um valor que não bate com nenhuma opção é ignorado sem erro — confira as opções antes.
O corpo aceita um campo
properties(lista), mas ele não é processado. Use sempre as chaves no nível de cima.
Buscar um contato
curl 'https://api.picchat.com.br/contacts/find?mobilephone=5511999990000&properties=etapa_do_funil' \
--header 'Authorization: Bearer SEU_TOKEN'Devolve o contato com as propriedades num mapa properties ({ "etapa_do_funil": "lead" }). Com properties=a,b vêm só as propriedades listadas.
Contato que não existe responde
200com corpo vazio — não404. Teste se o corpo veio vazio.
Para listar e filtrar contatos (por lista, propriedade, opt-out, data…), use GET /v1/contacts.
Erros comuns
| Situação | Resposta |
|---|---|
| Sem celular e sem e-mail, ou e-mail mal formado | 500 sem detalhe (será 422 em breve) |
mobilephone como número |
422 |
account_id de outra conta |
403 |