{"openapi":"3.0.3","info":{"title":"Gravô — API Enterprise (leitura de transcrições)","version":"1.0.0","description":"Leitura programática das transcrições da conta Enterprise, no MESMO escopo do site: administradores enxergam a conta toda; gerentes de time, só os times que gerenciam. Somente leitura. Combine filtros com & (AND); dentro de um filtro, valores separados por vírgula são OR."},"servers":[{"url":"https://gravo-meet.com.br/api/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Token gerado em /conta/api. Envie SÓ no header Authorization."}}},"paths":{"/transcripts/":{"get":{"operationId":"listTranscripts","summary":"Lista transcrições (metadados, paginado por cursor)","parameters":[{"name":"sector","in":"query","schema":{"type":"string"},"description":"IDs de time separados por vírgula (veja /groups); \"none\" = sem time. Vários = OR. Gerentes: só times que gerenciam."},{"name":"person","in":"query","schema":{"type":"string"},"description":"E-mails separados por vírgula. Vários = OR. E-mail desconhecido é ignorado."},{"name":"from","in":"query","schema":{"type":"string","format":"date"},"description":"Data inicial (AAAA-MM-DD), inclusiva."},{"name":"to","in":"query","schema":{"type":"string","format":"date"},"description":"Data final (AAAA-MM-DD), inclusiva."},{"name":"min_duration","in":"query","schema":{"type":"number","minimum":0},"description":"Duração mínima em MINUTOS. Transcrições sem duração registrada ficam de fora."},{"name":"time_from","in":"query","schema":{"type":"string","example":"08:00"},"description":"Início da janela de horário do DIA (HH:MM), fuso de Brasília (UTC−3), inclusivo. Filtra por hora do dia, repetindo em cada dia do período (ex.: só reuniões da manhã)."},{"name":"time_to","in":"query","schema":{"type":"string","example":"12:00"},"description":"Fim da janela de horário do DIA (HH:MM), fuso de Brasília, inclusivo. Se time_from > time_to, a janela cruza a meia-noite (ex.: 22:00→02:00)."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor da página anterior."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"title","in":"query","schema":{"type":"string"},"description":"Filtra por trecho do título."}],"responses":{"200":{"description":"Página de resultados.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"meeting_date":{"type":"string","format":"date-time"},"duration_sec":{"type":"integer","nullable":true},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"email":{"type":"string"}}},"sector":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}}}},"next_cursor":{"type":"string","nullable":true}}}}}},"400":{"description":"Parâmetro inválido — { error, message }."},"401":{"description":"Token ausente, inválido ou revogado."},"403":{"description":"Sem acesso: exige conta Enterprise com transcrições habilitadas e papel de admin ou gerente de time."},"429":{"description":"Cota de requisições excedida — aguarde e tente de novo."}}}},"/transcripts/search/":{"get":{"operationId":"searchTranscripts","summary":"Busca no texto das reuniões (título + corpo, FULLTEXT)","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Termo de busca (linguagem natural)."},{"name":"sector","in":"query","schema":{"type":"string"},"description":"IDs de time separados por vírgula (veja /groups); \"none\" = sem time. Vários = OR. Gerentes: só times que gerenciam."},{"name":"person","in":"query","schema":{"type":"string"},"description":"E-mails separados por vírgula. Vários = OR. E-mail desconhecido é ignorado."},{"name":"from","in":"query","schema":{"type":"string","format":"date"},"description":"Data inicial (AAAA-MM-DD), inclusiva."},{"name":"to","in":"query","schema":{"type":"string","format":"date"},"description":"Data final (AAAA-MM-DD), inclusiva."},{"name":"min_duration","in":"query","schema":{"type":"number","minimum":0},"description":"Duração mínima em MINUTOS. Transcrições sem duração registrada ficam de fora."},{"name":"time_from","in":"query","schema":{"type":"string","example":"08:00"},"description":"Início da janela de horário do DIA (HH:MM), fuso de Brasília (UTC−3), inclusivo. Filtra por hora do dia, repetindo em cada dia do período (ex.: só reuniões da manhã)."},{"name":"time_to","in":"query","schema":{"type":"string","example":"12:00"},"description":"Fim da janela de horário do DIA (HH:MM), fuso de Brasília, inclusivo. Se time_from > time_to, a janela cruza a meia-noite (ex.: 22:00→02:00)."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor da página anterior."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Resultados com trecho (snippet) ao redor da ocorrência.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"meeting_date":{"type":"string","format":"date-time"},"duration_sec":{"type":"integer","nullable":true},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"email":{"type":"string"}}},"sector":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}}},{"type":"object","properties":{"snippet":{"type":"string"}}}]}},"next_cursor":{"type":"string","nullable":true}}}}}},"400":{"description":"Parâmetro inválido — { error, message }."},"401":{"description":"Token ausente, inválido ou revogado."},"403":{"description":"Sem acesso: exige conta Enterprise com transcrições habilitadas e papel de admin ou gerente de time."},"429":{"description":"Cota de requisições excedida — aguarde e tente de novo."}}}},"/transcripts/{id}/":{"get":{"operationId":"getTranscript","summary":"Uma transcrição com o texto integral (ou por parte, para clientes com teto de resposta)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"part","in":"query","schema":{"type":"integer","minimum":1},"description":"Opcional: devolve só a parte N do texto (~30k caracteres cada) + part/total_parts. Se total_parts > 1, busque as partes seguintes. Sem este parâmetro, o body vem integral."}],"responses":{"200":{"description":"Transcrição completa (campo body = .txt integral).","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"meeting_date":{"type":"string","format":"date-time"},"duration_sec":{"type":"integer","nullable":true},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"email":{"type":"string"}}},"sector":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}}},{"type":"object","properties":{"body":{"type":"string"}}}]}}}},"400":{"description":"Parâmetro inválido — { error, message }."},"401":{"description":"Token ausente, inválido ou revogado."},"403":{"description":"Sem acesso: exige conta Enterprise com transcrições habilitadas e papel de admin ou gerente de time."},"404":{"description":"Não encontrada (inclui id de outra conta ou fora do seu escopo)."},"429":{"description":"Cota de requisições excedida — aguarde e tente de novo."}}}},"/members/":{"get":{"operationId":"listMembers","summary":"Membros da conta (gerentes veem só os dos seus times)","responses":{"200":{"description":"{ data: [{ id, name, email, role, status, sectors: [{ id, name }] }] }"},"400":{"description":"Parâmetro inválido — { error, message }."},"401":{"description":"Token ausente, inválido ou revogado."},"403":{"description":"Sem acesso: exige conta Enterprise com transcrições habilitadas e papel de admin ou gerente de time."},"429":{"description":"Cota de requisições excedida — aguarde e tente de novo."}}}},"/groups/":{"get":{"operationId":"listGroups","summary":"Times internos (para montar o filtro sector)","description":"Cada time pode trazer um `context` (texto de fundo do setor, cadastrado pelo admin): use para interpretar as reuniões daquele time. Não é conteúdo de reunião.","responses":{"200":{"description":"{ data: [{ id, name, member_count, context }] }"},"400":{"description":"Parâmetro inválido — { error, message }."},"401":{"description":"Token ausente, inválido ou revogado."},"403":{"description":"Sem acesso: exige conta Enterprise com transcrições habilitadas e papel de admin ou gerente de time."},"429":{"description":"Cota de requisições excedida — aguarde e tente de novo."}}}},"/context/":{"get":{"operationId":"listCompanyContexts","summary":"Contexto de fundo por empresa (domínio), cadastrado pelo admin","description":"Cada domínio da conta é uma empresa/negócio, com um texto de contexto (ramo, produtos, siglas, jargões). Use para INTERPRETAR as reuniões: aplique o contexto do domínio do e-mail do dono de cada reunião. Não é conteúdo de transcrição — nunca vem junto do texto.","responses":{"200":{"description":"{ data: [{ domain, context }] }"},"400":{"description":"Parâmetro inválido — { error, message }."},"401":{"description":"Token ausente, inválido ou revogado."},"403":{"description":"Sem acesso: exige conta Enterprise com transcrições habilitadas e papel de admin ou gerente de time."},"429":{"description":"Cota de requisições excedida — aguarde e tente de novo."}}}}}}