Growth OS API

Listar campos personalizados

As `fieldKey` aceitas em `customFields` de contatos e negócios (§9.19).

GET
/custom-fields

As fieldKey aceitas em customFields de contatos e negócios (§9.19).

AutorizaçãoBearer <token>

Chave de API (gos_…)

Em: header

Parâmetros de consulta

entity?string
Default"contact"

Value in

  • "contact"
  • "opportunity"

Corpo da resposta

application/json

curl -X GET "https://example.com/custom-fields"
{  "data": [    {      "fieldKey": "string",      "label": "string",      "type": "string",      "required": true,      "options": [        "string"      ]    }  ]}

Listar interações (linha do tempo global por período)

Toda interação com contatos do workspace, mais recente primeiro (`createdAt DESC, id DESC`). Mensagem do inbox: `createdAt` é a data do ENVIO registrada pelo provedor — o histórico importado do GHL sai na data original, não na do import. No histórico importado, `actor` vem do `source` do CRM antigo quando não há carimbo de autor: workflow/campanha/disparo em massa = `automation`, api = `api`. paginada por cursor. Fontes: mensagens do inbox (WhatsApp/Instagram/Facebook, e as conversas de canal `phone` — importadas ou abertas pela telefonia), ligações, e-mails (resposta enviada pelo painel, resposta recebida do contato, e-mail de automação) e notas. `id` = `<fonte>:<id da linha>`. `actor` diz QUEM agiu: `user` = pessoa do time no app (só quando o `userId` de quem mandou está gravado); `contact` = o lead (toda interação `inbound`); `ia` / `automation` / `system` / `api` = robôs; `unknown` = mensagem outbound sem autor conhecido (histórico antigo, importado sem `source` reconhecido, ou sem carimbo). `userId` é o usuário do app que mandou — carimbado no MOMENTO DO ENVIO, imutável, e só preenchido com `actor=user`. Para o Speed-to-Lead, filtre `direction=outbound&actor=user`. Mensagem do inbox: `userId` NUNCA é inferido do responsável atual da conversa — antes de 0728 (issue #728) uma mensagem sem carimbo saía atribuída a quem estivesse dono do atendimento NA HORA DA CONSULTA, e o valor mudava sozinho quando a conversa era reatribuída (bug medido pelo cliente: pior que devolver vazio numa auditoria de comissão). Hoje, sem carimbo, `userId: null` e `actor: "unknown"`. `conversationAssigneeUserId` é o campo separado e honesto pra "quem é o dono do atendimento HOJE" — mutável, não é quem mandou. `channelInstanceId` (id da conexão) e `senderPhone` (o número/identificador dela) ajudam a resolver a autoria sem depender de quem digitou, quando a linha do SDR é separada da dos closers; `null` quando a mensagem não tem conexão associada ou a fonte não é mensagem de inbox. Ligação: `durationSec` (segundos) e `status` = `answered` | `no_answer` | demais estados crus do provedor (ex.: `ringing`). NÃO entram: campanhas de e-mail em massa, tarefas, reuniões (vivem em `/appointments`) e os marcadores internos do fio da conversa ("Automação X rodou", "Reunião cancelada", "Negócio foi de A para B", atribuição de atendente) — são anotação para quem atende, nunca chegam ao contato. `opportunityId` só vem preenchido na nota; nas demais o vínculo com o negócio é pelo `contactId`. Filtros: `contactId`, `userId`, `channel` (CSV de whatsapp,instagram,facebook,phone,call,email,note), `direction`, `actor`, `createdAfter` / `createdBefore` (ISO-8601, exclusivos). `limit` até 500.

Listar etiquetas do workspace

Próxima página