Contexto do contato para agente (pacote pronto)
v1.0.0https://api.growthaisystem.com/api/v1/contacts/{id}/context- Exige
Authorization: Bearer gos_…— Chave de API (gos_…)· escoposcontacts.read
Tudo o que um agente de conversa precisa saber do contato, numa chamada só e sem nenhuma chamada de IA (só o que já está gravado): a ficha (o mesmo corpo de GET /contacts/{id}, com customFields = respostas de formulário, sem firstHumanTouchAt/lastHumanTouchAt), os negócios ABERTOS com o nome do funil e da etapa, as próximas reuniões e a última passada, as conversas em todos os canais (como em GET /conversations/{id}, com ai.paused e a janela de 24h), a linha do tempo de TODOS os canais (mensagens com texto ou transcrição do áudio, ligações com a transcrição vigente, e-mails, notas e eventos de reunião), e o resumo que a plataforma JÁ gravou na conversa principal.
Delta por turno: só a linha do tempo é recortada por since (o resto é o estado atual). Entra o item que ACONTECEU depois de since (at; mensagem: o envio no provedor) OU que foi GRAVADO aqui depois dele (mensagem que chegou atrasada com horário antigo). Exclusivo. Recomendado: mande em since o generatedAt do pacote anterior menos 5 minutos e descarte os itens cujo id você já viu — cobre a mensagem gravada durante a leitura anterior.
Escopos por seção: a rota exige contacts.read. opportunities exige opportunities.read (nomes de funil/etapa: + pipelines.read); appointments exige calendars.read; conversations, timeline e summary exigem conversations.read — que libera também a transcrição das ligações do contato na linha do tempo (os eventos de reunião: + calendars.read). Sem o escopo, a seção vem null e aparece em omittedSections — a rota não responde 403.
Tetos: linha do tempo limit 30 por padrão, até 100; texto de cada item cortado em maxTextChars (padrão 600, de 50 a 2000) com truncated: true; até 20 negócios, 10 próximas reuniões, 20 conversas, histórico das 20 reuniões mais recentes, resumo até 4000 caracteres. No pior caso (100 itens × 2000 caracteres) o corpo fica na casa de 300 KB; com os padrões, poucas dezenas de KB. Mais histórico: GET /interactions?contactId= (paginado).
includeSummary=false tira o único conteúdo derivado de IA (o summary).
Parâmetros de caminho
Entram no próprio endereço, no lugar das chaves.
- idstringobrigatório
- tamanho mín. 1
Parâmetros de consulta
Vão na querystring, depois do ?.
- sincestringopcional
- limitintegeropcional
- padrão 30
- faixa 1–100
- maxTextCharsintegeropcional
- padrão 600
- faixa 50–2000
- includeSummarystringopcional
- padrão "true"
- um de"true""false"
Respostas
7 respostas documentadas — o código, o que ele significa nesta rota e a forma do corpo.
O pacote de contexto do contato. Seção null = a chave não tem o escopo dela (listada em omittedSections), ou, no summary, não há resumo gravado / includeSummary=false.
V1ContactContext
- idstring
- namestring
- phonestring | null
- emailstring | null
- companystring | null
- companyIdstring | null
- rolestring | null
- cpfstring | null
- notesstring | null
- tagsstring[]
- statusstring
- um de"active""archived""merged"
- ownerUserIdstring | null
- originstring
- customFieldsobjeto livre
- chave string
- valor qualquer valor JSON
- createdAtstring
- updatedAtstring
- urlstring
- sourcestring | null
- mediumstring | null
- campaignstring | null
- termstring | null
- contentstring | null
- firstHumanTouchAtstring | nullpode faltar
- lastHumanTouchAtstring | nullpode faltar
- humanTouchCountintegerpode faltar
Quantos toques humanos este contato recebeu (cada mensagem, ligação, e-mail ou nota com
actor: "user"em/interactionsconta um). 0 = nenhum. Mesma fonte defirstHumanTouchAt/lastHumanTouchAt; só vem emGET /contacts/{id}.- mín. 0
- firstHumanTouchChannelstring | nullpode faltar
O canal do PRIMEIRO toque humano — o mesmo registro de
firstHumanTouchAt, no vocabulário dechannelde/interactions(whatsapp,instagram,facebook,call,email,note…). Dois toques no mesmo instante: vale o de menoridde/interactions.null= nunca houve toque humano.
Cada item — V1ContactContextOpportunity
- idstring
- titlestring
- pipelineIdstring
- stageIdstring
- contactIdstring
- statusstring
- um de"open""won""lost""abandoned"
- valueCentsinteger
- currencystring
- ownerUserIdstring | null
- temperaturestring
- tagsstring[]
- lossReasonstring | null
- expectedCloseAtstring | null
- wonAtstring | null
- wonRecordedAtstring | null
- lostAtstring | null
- lostRecordedAtstring | null
- lostAtStageIdstring | null
- customFieldsobjeto livre
- chave string
- valor qualquer valor JSON
- createdAtstring
- updatedAtstring
- sourcestring | null
- sourcestring | null
- mediumstring | null
- campaignstring | null
- termstring | null
- contentstring | null
- originstring
- stageChangedAtstring
- urlstring
- firstHumanTouchAtstring | nullpode faltar
- lastHumanTouchAtstring | nullpode faltar
- humanTouchCountintegerpode faltar
Quantos toques humanos o contato deste negócio recebeu desde a CRIAÇÃO do negócio (cada mensagem, ligação, e-mail ou nota com
actor: "user"em/interactionsconta um). 0 = nenhum. Mesma fonte e mesmo recorte defirstHumanTouchAt/lastHumanTouchAt. Vem emGET /opportunitiese emGET /opportunities/{id}.- mín. 0
- firstHumanTouchChannelstring | nullpode faltar
O canal do PRIMEIRO toque humano desde a criação do negócio — o mesmo registro de
firstHumanTouchAt, no vocabulário dechannelde/interactions(whatsapp,instagram,facebook,call,email,note…). Dois toques no mesmo instante: vale o de menoridde/interactions.null= ainda não houve toque humano. - lastActivityAtstring | nullpode faltar
- pipelineNamestring | null
- stageNamestring | null
Cada item — V1Appointment
- idstring
- contactIdstring | null
- contactNamestring | null
- opportunityIdstring | null
- titlestring
- startAtstring | null
- endAtstring | null
- locationstring | null
- conferenceUrlstring | null
- calendarKeystring | null
- assigneeUserIdstring | null
- statusstring
- um de"scheduled""canceled"
- outcomestring | null
- um de"realizada""noshow""reagendada"
- sourcestring
- createdAtstring
- createdByUserIdstring | null
- createdBySourcestring
- um de"crm""public_booking""api""automation""import""system""google_calendar"
- updatedAtstring
- canceledAtstring | null
- outcomeAtstring | null
- recoveredFromAppointmentIdstring | null
- externalIdstringpode faltar
Só em
source: "google_calendar": o id do evento no Google Agenda (oiddo events.list). - calendarIdstringpode faltar
Só em
source: "google_calendar": a agenda do Google de onde o evento veio, como a conexão a guarda (primary= a agenda principal da conta conectada). O dono da conta é oassigneeUserId. - allDaybooleanpode faltar
Só em
source: "google_calendar": evento de dia inteiro (ostartAté a meia-noite UTC do dia). - externalStatusstringpode faltar
Só em
source: "google_calendar": a situação crua no Google —confirmed,tentativeoucancelled.statustraduz para o vocabulário da API (cancelled→canceled; as outras →scheduled). - visibilitystringpode faltar
Só em
source: "google_calendar": a privacidade que o dono escolheu para a agenda conectada, a mesma da tela da agenda.busy("só ocupado") = a API mostra exatamente o que a tela mostra: o horário, o dono e o título "Ocupado" —attendeesehtmlLinkvêmnull.details= o título real, os convidados e o link (evento sem título no Google também sai "Ocupado", como na tela).- um de"details""busy"
Só em
source: "google_calendar": os convidados com a resposta de cada um.[]= evento sem convidado.null= agenda em modo "só ocupado" (visibility: "busy"), ou evento espelhado antes desta versão da API que ainda não passou pelo próximo sync (o espelho regrava cada agenda pelo menos uma vez por dia).Cada item — V1CalendarAttendee
- emailstring
E-mail do convidado (minúsculas).
- responseStatusstring | null
A resposta ao convite, no vocabulário do Google:
needsAction,accepted,tentativeoudeclined. - organizerboolean
true= quem organiza o evento. - selfboolean
true= a própria conta Google conectada (o dono da agenda).
- htmlLinkstring | nullpode faltar
Só em
source: "google_calendar": o link do evento no Google Agenda (abre para quem tem acesso à agenda).nullnos mesmos casos deattendees.
- idstring
- contactIdstring | null
- contactNamestring | null
- opportunityIdstring | null
- titlestring
- startAtstring | null
- endAtstring | null
- locationstring | null
- conferenceUrlstring | null
- calendarKeystring | null
- assigneeUserIdstring | null
- statusstring
- um de"scheduled""canceled"
- outcomestring | null
- um de"realizada""noshow""reagendada"
- sourcestring
- createdAtstring
- createdByUserIdstring | null
- createdBySourcestring
- um de"crm""public_booking""api""automation""import""system""google_calendar"
- updatedAtstring
- canceledAtstring | null
- outcomeAtstring | null
- recoveredFromAppointmentIdstring | null
- externalIdstringpode faltar
Só em
source: "google_calendar": o id do evento no Google Agenda (oiddo events.list). - calendarIdstringpode faltar
Só em
source: "google_calendar": a agenda do Google de onde o evento veio, como a conexão a guarda (primary= a agenda principal da conta conectada). O dono da conta é oassigneeUserId. - allDaybooleanpode faltar
Só em
source: "google_calendar": evento de dia inteiro (ostartAté a meia-noite UTC do dia). - externalStatusstringpode faltar
Só em
source: "google_calendar": a situação crua no Google —confirmed,tentativeoucancelled.statustraduz para o vocabulário da API (cancelled→canceled; as outras →scheduled). - visibilitystringpode faltar
Só em
source: "google_calendar": a privacidade que o dono escolheu para a agenda conectada, a mesma da tela da agenda.busy("só ocupado") = a API mostra exatamente o que a tela mostra: o horário, o dono e o título "Ocupado" —attendeesehtmlLinkvêmnull.details= o título real, os convidados e o link (evento sem título no Google também sai "Ocupado", como na tela).- um de"details""busy"
Só em
source: "google_calendar": os convidados com a resposta de cada um.[]= evento sem convidado.null= agenda em modo "só ocupado" (visibility: "busy"), ou evento espelhado antes desta versão da API que ainda não passou pelo próximo sync (o espelho regrava cada agenda pelo menos uma vez por dia).Cada item — V1CalendarAttendee
- emailstring
E-mail do convidado (minúsculas).
- responseStatusstring | null
A resposta ao convite, no vocabulário do Google:
needsAction,accepted,tentativeoudeclined. - organizerboolean
true= quem organiza o evento. - selfboolean
true= a própria conta Google conectada (o dono da agenda).
- htmlLinkstring | nullpode faltar
Só em
source: "google_calendar": o link do evento no Google Agenda (abre para quem tem acesso à agenda).nullnos mesmos casos deattendees.
Cada item — V1Conversation
- idstring
- channelstring
- connectionIdstring | null
- contactIdstring | null
- idstring
- namestring
- phonestring | null
- emailstring | null
- contactDisplaystring | null
- contactPhonestring | null
- assignedUserIdstring | null
- humanAssignedboolean
- assignedAtstring | null
- lastMessageAtstring | null
- lastMessageDirectionstring | null
- um de"inbound""outbound"
- lastMessageActorstring | null
- um de"user""contact""ia""automation""system""api""unknown"
- archivedboolean
- pausedboolean
- pausedUntilstring | null
- pausedReasonstring | null
- appliesboolean
- openboolean
- expiresAtstring | null
- createdAtstring
- updatedAtstring
Cada item — V1ContactTimelineItem
- idstring
- kindstring
- um de"message""call""email""note""meeting"
- channelstring
- directionstring | null
- um de"inbound""outbound"
- actorstring
- um de"user""contact""ia""automation""system""api""unknown"
- userIdstring | null
- conversationIdstring | null
- connectionIdstring | null
- opportunityIdstring | null
- atstring
- textstring | null
- textSourcestring | null
- um de"text""transcription""call_transcript""subject""note""meeting_title"
- truncatedboolean
- messageTypestring | null
- transcriptionStatusstring | null
- hasMediaboolean
- durationSecinteger | null
- statusstring | null
- statusReasonstring | null
- appointmentIdstring
- eventstring
- titlestring | null
- startAtstring | null
- outcomestring | null
- reasonstring | null
- hasMoreboolean
- sincestring | null
- conversationIdstring
- textstring
- truncatedboolean
- generatedBy"platform"
- sempre "platform"
- updatedAtstring | null
Cada item da lista
- sectionstring
- um de"opportunities""opportunities.stageNames""appointments""conversations""timeline""timeline.meetings""summary"
- reason"missing_scope"
- sempre "missing_scope"
- requiredScopesstring[]
- generatedAtstring