Pular para o conteúdo
PATCH/contatos/{id}

Atualizar contato

contatos:escrever

Só os campos enviados mudam; null apaga o campo.

PATCH /contatos/{id}

curl -X PATCH "https://chat.forsi.com.br/api/v1/contatos/08054a7f-a752-481e-9915-cf4cf944df39" \
  -H "Authorization: Bearer $FORSI_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "maria.souza@exemplo.com.br",
    "campos": {"convenio":"Particular"}
  }'
Resposta 200
{
  "dados": {
    "id": "08054a7f-a752-481e-9915-cf4cf944df39",
    "nome": "Maria Souza",
    "nome_whatsapp": "Maria",
    "telefone": "+5531988887777",
    "email": "maria@exemplo.com.br",
    "instagram": "maria.souza",
    "campos": {"convenio":"Unimed"},
    "bloqueado": false,
    "criado_em": "2026-10-04T13:05:12.481Z",
    "atualizado_em": "2026-10-04T13:05:12.481Z",
    "primeiro_anuncio": {
      "anuncio_id": "texto",
      "titulo": "Consulta de retorno",
      "canal": "whatsapp",
      "clicado_em": "2026-10-04T13:05:12.481Z"
    }
  }
}

Parâmetros no caminho#

  • iduuidobrigatório

    No caminho da URL.

Corpo da requisição#

JSON. Mande com Content-Type: application/json.

  • nomestring ou nullopcional
    —
  • telefonestring ou nullopcional
    —
  • emailstring ou nullopcional
    —
  • instagramstring ou nullopcional
    —
  • camposobjeto livreopcional

    Campos personalizados (objeto livre, até 16 mil caracteres).

Resposta#

200 com {"dados": ...}: Contato.

  • iduuidopcional
    —
  • nomestring ou nullopcional
    —
  • nome_whatsappstring ou nullopcional
    —
  • telefonestring ou nullopcional
    —
  • emailstring ou nullopcional
    —
  • instagramstring ou nullopcional
    —
  • camposobjeto livreopcional
    —
  • bloqueadobooleanopcional
    —
  • criado_emdata e hora ISO 8601opcional
    —
  • atualizado_emdata e hora ISO 8601opcional
    —
  • primeiro_anuncioobject ou nullopcional

    Primeiro anúncio que levou a pessoa ao WhatsApp, Instagram ou Messenger.

  • primeiro_anuncio.anuncio_idstring ou nullopcional
    —
  • primeiro_anuncio.titulostring ou nullopcional
    —
  • primeiro_anuncio.canalstringopcional
    —
  • primeiro_anuncio.clicado_emdata e hora ISO 8601opcional
    —

Erros#

Todo erro vem como {"erro": {"codigo", "mensagem"}}. Trate pelo codigo: ele não muda.

Status de erro desta operação
StatusQuando
401Chave ausente ou inválida (resposta igual para qualquer motivo).
403Plano sem API, escopo insuficiente ou https/origem recusados.
404Não existe nesta organização.
409Conflito (repetido, Idempotency-Key com outro corpo).
422Dados inválidos ou regra de negócio (ex.: janela_fechada; conta_restrita = a Meta restringiu a conta por spam: erro traz os campos de RestricaoMeta, como ate, escopo, motivo e retry_after_s).
429Limite de requisições. Veja Retry-After.
Códigos de erro que esta área pode devolver4
  • contato_inexistenteContato não encontrado.
  • telefone_invalidoTelefone inválido. Mande com DDI e DDD.
  • telefone_repetidoJá existe um contato com esse telefone (com ou sem o 9).
  • cursor_invalidoCursor inválido. Use o valor de "proximo" da página anterior.

Os erros que valem para qualquer rota (chave, limite, JSON) estão em Erros.