Metadados da organização

Cinco endpoints de leitura que devolvem a configuração da conta. São eles que dizem quais valores a API aceita nos outros endpoints: quais chaves existem em fields, quais etiquetas você pode aplicar, quem pode receber uma carteira.

Rota Escopo Devolve
GET /fields contacts:read Campos personalizados de contato
GET /tags contacts:read Etiquetas de contato ou de conversa
GET /pipelines contacts:read Funis e suas etapas, na ordem
GET /users contacts:read Membros da organização
GET /quick-replies conversations:read Respostas rápidas da equipe

Limite: 60 requisições por minuto em cada um. Todos devolvem o envelope de lista, com next_cursor sempre null: configuração de conta é lista curta e vem inteira.

/fields

As chaves daqui são exatamente as aceitas em fields no POST /contacts e nos tokens {{chave}} de template e campanha. Mandar uma chave que não está cadastrada devolve 400 com unknown_fields.

curl "https://api.wevi.chat/functions/v1/fields" \
  -H "Authorization: Bearer wevi_SUA_CHAVE"
{
  "data": [
    {
      "key": "plano",
      "label": "Plano dental",
      "type": "select",
      "options": ["Particular", "OdontoPrev", "Amil Dental"],
      "placeholder": null,
      "position": 0
    }
  ],
  "next_cursor": null,
  "has_more": false
}

/tags

Por padrão devolve as etiquetas de contato. Passe ?type=conversation para as de conversa.

curl "https://api.wevi.chat/functions/v1/tags?type=conversation" \
  -H "Authorization: Bearer wevi_SUA_CHAVE"
{
  "data": [{ "id": "aaaa...", "name": "Urgente", "color": "#ef4444", "type": "conversation", "created_at": "..." }],
  "next_cursor": null,
  "has_more": false
}

/pipelines

Cada funil já vem com as etapas na ordem em que aparecem no painel. Os ids daqui são os aceitos em POST /contacts/stage.

{
  "data": [
    {
      "id": "c24cde19-...",
      "name": "Funil de vendas",
      "position": 0,
      "is_default": true,
      "auto_enroll": true,
      "stages": [
        { "id": "00741eec-...", "name": "Contato", "color": "#3B82F6", "position": 0 },
        { "id": "3af8c4a2-...", "name": "Lead", "color": "#8B5CF6", "position": 1 }
      ],
      "created_at": "2026-06-12T11:50:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

/users

Quem pode virar dono de carteira ou receber uma conversa. Use ?assignable=true para filtrar só os papéis elegíveis, ou ?role=atendente para um papel específico.

{
  "data": [
    {
      "id": "ca5dd03e-...",
      "name": "Adriano Silveira",
      "email": "adriano@exemplo.com",
      "role": "admin",
      "is_owner": true,
      "member_since": "2026-06-12T11:47:27Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

O email daqui é o que POST /contacts/assign espera em assigned_user_email.

/quick-replies

As respostas rápidas que a equipe usa no inbox, com o atalho de cada uma.

{
  "data": [
    { "id": "...", "shortcut": "horario", "title": "Horário de funcionamento", "content": "Atendemos de segunda a sexta, das 9h às 18h.", "created_at": "...", "updated_at": "..." }
  ],
  "next_cursor": null,
  "has_more": false
}