Invertus · v1 · setembro 2026

API de Ligações Invertus

Consulta das ligações atendidas e download das gravações, com metadados de agente, resultado e duração.

Visão geral

Uma API REST, respostas em JSON, autenticada por token. Cada ligação atendida e classificada por um de nossos agentes vira um registro aqui, junto com o áudio da conversa.

Há dois modos de trabalho, que podem ser usados juntos: consulta (você chama esta API quando quiser) e push (nós chamamos a sua API assim que a ligação fica pronta). Esta documentação cobre o modo de consulta; o push está descrito ao final.

URL base
https://api.ipbox.corpdata.com.br
Formato
JSON · UTF-8
Fuso dos horários
America/Sao_Paulo (UTC−3)
Janela disponível
Últimos 7 dias
Mantenha a URL base em configuração

Um segundo endereço deve ser ativado mais adiante para a mesma API. Nada além do host muda — token, endpoints e formato das respostas permanecem idênticos —, mas a troca fica mais simples se a URL base não estiver espalhada pelo código.

Autenticação

Todo pedido leva o token no cabeçalho Authorization, no esquema Bearer:

Authorization: Bearer <SEU_TOKEN>

O token é exclusivo da sua integração, entregue por canal separado desta documentação, e não expira. Ele dá acesso somente de leitura ao namespace /v1.

Guarde o token fora do código

Use variável de ambiente ou cofre de segredos. Ele identifica sua integração: se vazar, avise-nos e emitimos outro na hora — o antigo é revogado no mesmo instante.

Sem token, com token inválido, ou com token de outro escopo, a resposta é 401:

{
  "erro": "nao_autorizado",
  "mensagem": "Envie o cabeçalho Authorization: Bearer <token>."
}

Convenções

Identificador da ligação

O campo id é o protocolo gerado pela nossa central. É único, imutável e nunca reaproveitado — use-o como chave de deduplicação do seu lado. Exemplo: 1780000000000001.

Datas e horários

Todos os horários vêm no formato AAAA-MM-DDTHH:MM:SS, sem indicador de fuso, sempre em horário de Brasília (UTC−3). Não há horário de verão no Brasil desde 2019, então o deslocamento é fixo.

Nos parâmetros de filtro (desde, ate) aceitamos ISO 8601 com ou sem fuso; sem fuso, assumimos Brasília.

Três horários diferentes

CampoSignifica
horario_inicioMomento em que a chamada foi atendida e a gravação começou
horario_fimFim da conversa — horario_inicio mais a duração
datahistoricoMomento em que o agente registrou o resultado, alguns segundos após o fim

Listar ligações

GET/v1/ligacoes

Devolve as ligações em ordem decrescente de datahistorico — mais recentes primeiro. Só entram ligações cuja gravação já está arquivada e pronta para download.

Parâmetros de consulta

ParâmetroObrig.Descrição
limitenãoItens por página. Padrão 50, máximo 200.
cursornãoCursor da página seguinte, copiado de paginacao.proximo_cursor.
desdenãoSó ligações a partir desta data/hora. Ex.: 2026-09-08T00:00:00.
atenãoSó ligações até esta data/hora.
agentenãoLogin do agente. Ex.: ana.ribeiro.
filanãoNome exato da fila. Ex.: Vendas Ativo.
resultadonãoDescrição exata do resultado. Ex.: Sem Interesse.

Os filtros combinam entre si com e lógico. Comparações de texto são exatas, sem curinga.

Exemplo

curl -H "Authorization: Bearer <SEU_TOKEN>" \
  "https://api.ipbox.corpdata.com.br/v1/ligacoes?limite=2"

Resposta 200

Os valores abaixo são fictícios, para ilustrar o formato.

{
  "ligacoes": [
    {
      "metadata": {
        "id": "1780000000000001",
        "id_ocorrencia": "1780000000000001",
        "funcionario_id": "42",
        "funcionario_nome": "Ana Ribeiro",
        "funcionario_email": null,
        "url_gravacao": "https://api.ipbox.corpdata.com.br/gravacao/1780000000000001?t=a1b2c3d4…",
        "datahistorico": "2026-09-08T17:48:11",
        "horario_inicio": "2026-09-08T17:47:33",
        "horario_fim": "2026-09-08T17:48:04",
        "duracao_gravacao": 31,
        "ocorrencia_codigo": "77",
        "ocorrencia_descricao": "Sem Interesse"
      }
    }
  ],
  "paginacao": {
    "limite": 2,
    "retornados": 2,
    "proximo_cursor": "MjAyNi0wOS0wOFQyMDo0Nzo0OS4wMDBafDE3ODAwMDAwMDAwMDAwMDI"
  },
  "retencao_dias": 7
}

Buscar uma ligação

GET/v1/ligacoes/{id}

Devolve uma única ligação, no mesmo formato { "metadata": { … } } — sem o envelope de lista.

curl -H "Authorization: Bearer <SEU_TOKEN>" \
  https://api.ipbox.corpdata.com.br/v1/ligacoes/1780000000000001

Responde 404 quando o id não existe ou já saiu da janela de 7 dias. Repare que a gravação continua acessível mesmo nesse caso — veja Gravações.

Baixar a gravação

GET/v1/ligacoes/{id}/audio

Responde 302 com um Location temporário apontando para o arquivo. Seu cliente HTTP precisa seguir redirecionamentos — no curl, a opção -L.

curl -L -H "Authorization: Bearer <SEU_TOKEN>" \
  https://api.ipbox.corpdata.com.br/v1/ligacoes/1780000000000001/audio \
  -o gravacao.wav

A URL de destino vale 1 hora e é gerada nova a cada chamada. Não a armazene: guarde o id e peça de novo quando precisar.

Não repasse o cabeçalho de autenticação no redirecionamento

A URL final é assinada e não deve receber o seu token. Algumas bibliotecas repassam cabeçalhos automaticamente ao seguir 302 — se a sua fizer isso, o armazenamento pode recusar a requisição. Configure para não propagar Authorization entre hosts diferentes.

O objeto ligação

CampoTipoDescrição
idstringProtocolo da ligação. Único e imutável — use como chave de deduplicação.
id_ocorrenciastringIdentificador do atendimento. Hoje repete o id; pode ser reconfigurado para o código do cliente ou o número da ficha, se preferirem.
funcionario_idstring · nuloId interno do agente. Nulo quando o agente já foi desligado e saiu do cadastro.
funcionario_nomestring · nuloNome do agente. Ver ressalvas.
funcionario_emailstring · nuloHoje sempre nulo. Ver ressalvas.
url_gravacaostringLink direto e permanente para o áudio, já assinado. Equivale ao endpoint /audio e dispensa token.
datahistoricodatetimeMomento do registro do resultado pelo agente.
horario_iniciodatetimeInício da conversa (atendimento).
horario_fimdatetimeFim da conversa.
duracao_gravacaointeiroDuração em segundos.
ocorrencia_codigostring · nuloCódigo do resultado. Ver ressalvas.
ocorrencia_descricaostringResultado registrado pelo agente. Ex.: Sem Interesse, Proposta Enviada.

Campos podem ser acrescentados ao objeto sem aviso e sem mudança de versão. Ignore os que não conhecer, em vez de rejeitar a resposta inteira.

Paginação

A paginação é por cursor, não por página numerada. O motivo é prático: entram ligações novas a cada dois minutos, e no topo da lista. Com offset você pularia ou repetiria registros entre uma página e outra.

Cada resposta traz paginacao.proximo_cursor. Repasse-o como ?cursor= para pegar a página seguinte. Quando ele vier null, acabou.

# primeira página
GET /v1/ligacoes?limite=100

# seguintes, até proximo_cursor virar null
GET /v1/ligacoes?limite=100&cursor=MjAyNi0wOS0wOFQyMDo0Nzo0OS4wMDBafDE3ODAw…
Estratégia recomendada de sincronização

Guarde o datahistorico mais recente que você já processou. A cada ciclo, chame ?desde=<esse valor> e percorra os cursores até o fim. Deduplique por id: uma ligação pode reaparecer se o agente corrigir a classificação dentro da janela.

Erros

Erros têm sempre a mesma forma, com um erro estável para tratamento programático e uma mensagem legível.

{ "erro": "nao_encontrada", "mensagem": "Ligação 000000 não está na janela de 7 dias." }
HTTPerroQuando aconteceO que fazer
401nao_autorizadoToken ausente, inválido ou de outro escopoConferir o cabeçalho. Não repetir sem corrigir.
404nao_encontradaId inexistente ou fora da janela de 7 diasTratar como definitivo; não repetir.
404rota_inexistenteCaminho ou método incorretoConferir a URL.
409indisponivelGravação ainda em processo de arquivamentoRepetir em alguns minutos.
5xxFalha nossa, temporáriaRepetir com espera progressiva.

Gravações

Formato
WAV · PCM 16 bit
Amostragem
8 kHz · mono
Tamanho médio
≈ 1 MB por minuto
Disponibilidade
Permanente

É o áudio original da central telefônica, sem reprocessamento. A taxa de 8 kHz é o padrão da telefonia e serve bem para transcrição e análise de fala.

O áudio dura mais que o registro

Os metadados ficam disponíveis por 7 dias; a gravação, por tempo indeterminado. Uma url_gravacao recebida hoje continua funcionando depois que a ligação sai da listagem — inclusive meses depois.

Na prática: GET /v1/ligacoes/{id} passa a responder 404 após 7 dias, mas GET /v1/ligacoes/{id}/audio continua entregando o arquivo.

Se precisarem de MP3 ou Opus em vez de WAV — o que reduz o tamanho em cerca de dez vezes — conseguimos converter na origem. É só pedir.

Retenção e limites

ItemValorObservação
Janela de consulta7 diasAlém disso, só o áudio permanece
Itens por página200Padrão 50
Validade do link de áudio1 horaGerado novo a cada chamada
Atualização dos dados2 minutosIntervalo entre coletas na central
Limite de requisiçõesSem limite fixo; avise-nos se for fazer volume alto
Uma ligação só existe depois de classificada

O registro aparece aqui quando o agente conclui o atendimento e escolhe o resultado — não quando a chamada termina. Se o agente demora a classificar, a ligação demora a aparecer. Isso é característica da central, não atraso da API.

Modo push

Em vez de vocês consultarem, nós entregamos: assim que a ligação é classificada e a gravação arquivada, fazemos um POST na URL que vocês indicarem, com exatamente o mesmo objeto metadata desta documentação — um por requisição.

POST https://api-de-voces.com.br/ligacoes
Content-Type: application/json
Authorization: Bearer <token de vocês>

{ "metadata": { /* mesmos campos da seção "O objeto ligação" */ } }

Latência típica de dois a três minutos após a classificação. Consideramos entregue qualquer resposta 2xx; qualquer outra coisa vira nova tentativa, com espera progressiva, até seis vezes. Requisições repetidas para o mesmo id são possíveis — trate a recepção como idempotente.

Para ligar, precisamos de: a URL de destino, o cabeçalho e o token de autenticação, e o comportamento esperado em caso de reenvio.

Campos com ressalva

Três campos do contrato não têm equivalente direto na central telefônica. Estão documentados aqui em vez de mascarados, porque afetam o que vocês recebem.

funcionario_email — sempre nulo

O cadastro da central tem o campo, mas ele está vazio para todos os agentes. Enquanto não for preenchido, não há origem para o dado. Duas saídas: preenchermos o cadastro na central, ou mantermos uma tabela de correspondência do nosso lado. Digam qual preferem.

funcionario_nome — derivado do login

A central guarda apenas o login (ana.ribeiro), não o nome completo. Formatamos para Ana Ribeiro, o que funciona bem na maioria dos casos mas não recupera nomes compostos nem acentuação. Se precisarem do nome exato, vale a mesma tabela de correspondência do item anterior.

ocorrencia_codigo — o código varia por fila

Na central, cada fila tem seu próprio catálogo de resultados. O mesmo resultado tem códigos diferentes conforme a fila: Caixa Postal, por exemplo, tem doze códigos distintos.

Hoje enviamos o código real da fila em que a ligação aconteceu — fiel à central. Se vocês esperam um catálogo estável, em que cada resultado tem um código só, conseguimos normalizar antes de enviar. É uma decisão de contrato e precisamos da resposta de vocês. Enquanto isso, ocorrencia_descricao é estável e serve como chave.

Aproximadamente 6% das ligações vêm com ocorrencia_codigo nulo — são as filas receptivas, que não expõem catálogo de resultados.

Suporte

Para dúvidas, mudança de contrato, rotação de token ou aumento de volume, falem com a equipe técnica da Invertus. Ao relatar um problema, incluam o id da ligação, o horário aproximado e a resposta completa que receberam — com isso rastreamos o caso ponta a ponta.