Pular para o conteúdo
WaitScope Entrar Solicitar acesso (por e-mail) Menu

Referência da API v1

Resumo da API v1 que o app Android usa: endereço, token, idioma, códigos de erro, rotas de sessão, conta, análises, relatório e envio, e os limites.

Vale para: API v1 da console 1.6.0

A API v1 é a interface que o app Android usa para falar com a console: login, conta, análises, relatórios e envio de traces. Ela foi feita para o app e segue as mesmas regras da console no navegador. Esta página resume o contrato; para mandar um trace por script, siga Enviar traces pela API.

Endereço e formato

  • Base: https://app.waitscope.com/api/v1, só por HTTPS. O endereço anterior, https://waitscope.io/api/v1, ainda responde, para o app configurado com ele.
  • JSON em UTF-8 nos dois sentidos, menos os downloads e os pedaços de arquivo do envio. Campo desconhecido no corpo é recusado com 400.
  • Os caminhos seguem os da console, em português: /analises, /envios, /conta.
  • Instantes em RFC 3339 com fuso, como 2026-10-17T13:50:48-03:00. Tempos do trace em microssegundos inteiros, nos campos terminados em _us, e tamanhos em bytes. Quem formata números e datas para exibir é o cliente.
  • Sem CORS: a API não atende página de outro site aberta no navegador.

Autenticação

O login tem as duas etapas da console: a senha e depois o código do app autenticador. No fim, a API devolve um token de 43 caracteres, que vai em toda chamada no cabeçalho Authorization: Bearer <token>.

curl -s https://app.waitscope.com/api/v1/sessao \
  -H 'Content-Type: application/json' \
  -d '{"username": "zz-exemplo", "password": "...", "method": "app", "device_name": "zz-script"}'

A resposta traz "etapa": "codigo" e um desafio, que vale 10 minutos. Mande o desafio com o código de 6 dígitos do app, ou com um código de recuperação:

curl -s https://app.waitscope.com/api/v1/sessao/codigo \
  -H 'Content-Type: application/json' \
  -d '{"desafio": "...", "codigo": "123456"}'

A resposta traz o token, a validade em expira_em e os dados da conta, os mesmos de GET /eu.

  • O token vale até 90 dias e cai com 30 dias sem uso. DELETE /sessao encerra o token na hora.
  • Ele conta no limite de sessões simultâneas da conta, junto com as do navegador, e aparece em Minha conta como “App Android · aparelho”, com o device_name do login.
  • O cookie da console não vale na API, e o token não vale na console.
  • method é app, o padrão, ou email, este só quando a conta tem e-mail confirmado e o servidor envia e-mail. A recusa traz os meios aceitos em metodos_disponiveis.
  • A conta ainda sem verificação em duas etapas recebe "etapa": "cadastro" e um token que só abre o cadastro, por 30 minutos.
  • Até você aceitar na console a versão em vigor dos Termos de Serviço e da Política de Privacidade, toda rota responde 403 termos_pendentes, menos GET /eu e DELETE /sessao.

Idioma

As mensagens, o diagnóstico, os cartões do relatório e o catálogo de erros Oracle vêm traduzidos pelo servidor. Com token, no idioma da conta, que PUT /conta/idioma muda. Sem token, pelo cabeçalho Accept-Language: pt, en ou es, e qualquer outro vira pt.

Erros

O erro vem com o status HTTP e um corpo assim:

{"erro": {"codigo": "nao_encontrado", "mensagem": "O endereço pedido não existe."}}

O codigo é estável e serve para o programa decidir o que fazer; a mensagem já vem traduzida, para mostrar a quem usa. Alguns erros trazem campos ao lado de erro: bloqueado_ate, com o cabeçalho Retry-After, tentativas_restantes e metodos_disponiveis.

Códigos de erro comuns da API v1
HTTPcodigoQuando
400requisicao_invalidaJSON inválido, campo desconhecido ou valor fora da faixa
401sessao_invalidaSem token, ou token vencido, encerrado ou de outro tipo
401credenciais_invalidasUsuário ou senha errados; a resposta é a mesma para usuário que não existe
401codigo_incorretoCódigo da segunda etapa errado; traz tentativas_restantes
403cadastro_pendenteToken de cadastro tentando outra rota
403troca_de_senhaSenha vencida ou provisória: só valem /eu, /conta/senha e DELETE /sessao
403acesso_vencidoO prazo de acesso da conta terminou
403admin_cadastro_localAdministrador sem segunda etapa entrando pela internet
403admin_so_localAdministrador pela internet, quando o servidor só aceita o administrador na própria máquina
403termos_pendentesFalta aceitar na console a versão em vigor dos termos
404nao_encontradoRecurso que não existe ou que é de outra conta
409conflitoO estado não permite, como o relatório de análise que não terminou ou o envio já concluído
410desafio_expiradoDesafio da segunda etapa vencido, já usado ou trocado por outro login
413grande_demaisPassou do limite de envio
429muitas_tentativasBloqueio de login ou de código; traz bloqueado_ate
429limiteFila cheia, análises guardadas no limite ou outro envio em andamento
503indisponivelServiço indisponível por um instante, como o banco fora do ar ou a falha ao gravar o arquivo
503sem_espacoO envio deixaria o servidor sem a reserva de espaço em disco

As rotas da conta e do cadastro usam também senha_atual_incorreta (401), senha_invalida, metodo_indisponivel, email_indisponivel, email_invalido e codigo_expirado (400).

Rotas

Todas as rotas pedem o token, menos GET /versao e as do login. A rota com o id de um recurso de outra conta responde 404 nao_encontrado, sem confirmar que ele existe: nem o administrador vê as análises de outra conta.

Versão

Rotas de versão
Método e caminhoO que faz
GET /versaoSem token. A versão do servidor e da API e, quando há app publicado, a do app: versao, codigo, minima, sha256, bytes, o endereço do download e o da página do app. Quando o codigo instalado é menor que minima, o app pede a atualização.
GET /app/apkBaixa o APK publicado.
curl -s https://app.waitscope.com/api/v1/versao

Com o app publicado, a resposta traz a versão dele; sem APK publicado, app vem nulo:

{"api":1,"app":{"bytes":...,"codigo":7,"download":"/api/v1/app/apk","minima":...,"pagina":"/app","sha256":"...","versao":"1.2.1"},"servidor":"1.6.0"}

Sessão

Rotas de sessão e de cadastro da segunda etapa
Método e caminhoO que faz
POST /sessaoPrimeira etapa do login: username, password, method e device_name, opcional, com até 80 caracteres.
POST /sessao/codigoSegunda etapa: desafio e codigo. Devolve o token.
POST /sessao/codigo/reenviarReenvia o código por e-mail, no máximo 3 envios, com 60 s entre eles.
DELETE /sessaoEncerra o token usado na chamada.
GET /euOs dados da conta: usuário, idioma, prazos, segunda etapa, limites (limits) e termos pendentes (terms_pending).
GET e POST /duas-etapas/appCom o token de cadastro: a chave e o QR code do app autenticador e, depois, a confirmação com o código, que devolve os 10 códigos de recuperação.
POST /duas-etapas/email e /duas-etapas/email/confirmarCadastro do código por e-mail, quando o servidor envia e-mail.

Conta

Rotas da conta
Método e caminhoO que faz
PUT /conta/idiomaMuda o idioma da conta: pt, en ou es.
GET e PUT /conta/privacidadeA máscara de literais: ocultar_textos e ocultar_numeros, ligadas por padrão. A regra de cada uma está em Literais escondidos no SQL.
POST /conta/senhaTroca a senha (senha_atual, nova, repetir) e encerra as outras sessões.
GET /conta/aparelhosAs sessões abertas, da console e do app.
DELETE /conta/aparelhos/{id}Encerra uma sessão.
POST /conta/aparelhos/encerrar-outrosEncerra todas as outras sessões.
POST /conta/recuperacaoGera códigos de recuperação novos.
POST /conta/app e /conta/app/confirmarTroca o app autenticador; o atual vale até a confirmação.
POST /conta/email e /conta/email/confirmarConfigura ou troca o e-mail da segunda etapa.

As ações sensíveis (senha, app, e-mail e códigos de recuperação) pedem a senha_atual, com o mesmo bloqueio da console para quem erra.

Análises

Rotas das análises
Método e caminhoO que faz
GET /analises?limite=50&antes=<cursor>Lista as análises, da mais nova para a mais antiga, de 1 a 200 por página (padrão 50). O campo proximo leva à página seguinte, em antes.
GET /analises/{id}Uma análise.
DELETE /analises/{id}Exclui a análise.
POST /analises/excluirExclui várias, com {"ids": [...]}, até 200.
GET /analises/mudancas?desde=<instante>As análises que terminaram depois do instante, até 500 por consulta. O campo agora é o desde da consulta seguinte.

Cada análise traz id, name, status (queued, running, done ou error), progress, size_bytes, as datas, o response_time_us, o tipo do trace e a mensagem de erro já traduzida. Não há download do trace nem reprocessamento: o trace não fica no servidor.

curl -s "https://app.waitscope.com/api/v1/analises?limite=20" -H "Authorization: Bearer $TOKEN"

Relatório

Rotas do relatório
Método e caminhoO que faz
GET /analises/{id}/relatorioO relatório em JSON, com as seções da página da console, os textos traduzidos e os números crus.
GET /analises/{id}/relatorio.htmlO HTML exportado, igual ao Baixar HTML.
GET /analises/{id}/comandos/{rank}O detalhe de um comando, com o plano.
GET /analises/{id}/objetos/{obj}A página de objeto: consultas prontas para rodar no banco.
GET /analises/{id}/plsql?dono=&nome=&tipo=&linha=Consultas prontas para o PL/SQL da pilha de um deadlock.

relatorio e relatorio.html aceitam ?top=N, de 1 a 300, ou ?todos=1, como Comandos por lista; sem eles, 10. Enquanto a análise não termina, ou se ela terminou com erro, as rotas do relatório respondem 409 conflito. O SQL sai com a máscara de literais da conta. Com uma das opções da máscara ligada, o sql_id das variantes (top_variants) vem vazio e o sql_ids dos textos compartilháveis vem []: o sql_id é calculado a partir do texto com os valores.

Envio

O envio é retomável: o arquivo vai em pedaços de até 8 MiB, um por vez, e depois de uma queda de rede continua de onde parou.

Rotas do envio
Método e caminhoO que faz
POST /enviosAbre o envio, com juntar e a lista de arquivos (nome e tamanho). Devolve o id, a lista que vale e o pedaco_max; arquivos .trm e vazios ficam de fora.
PUT /envios/{id}/arquivos/{n}Manda um pedaço do arquivo n, com Content-Range: bytes ini-fim/total; ini é o que já foi recebido.
GET /envios/{id}Quanto já chegou de cada arquivo, para retomar.
POST /envios/{id}/concluirFecha o envio e cria as análises. Repetir devolve o mesmo resultado, sem criar análise de novo.
DELETE /envios/{id}Cancela o envio e apaga o que chegou.
curl -s https://app.waitscope.com/api/v1/envios \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"juntar": false, "arquivos": [{"nome": "exemplo-10046.trc", "tamanho": 1845}]}'

curl -s -X PUT "https://app.waitscope.com/api/v1/envios/$ENVIO/arquivos/0" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Range: bytes 0-1844/1845" \
  --data-binary @exemplo-10046.trc

O exemplo manda o trace sintético, de 1.845 bytes, num pedaço só; $ENVIO é o id devolvido pelo POST /envios. Com "juntar": true, os arquivos viram uma coleta, analisada como um trace só. O envio pertence ao token que o abriu e some com 24 horas sem pedaço novo ou quando a sessão do token termina.

Limites

  • Limite de pedidos por endereço IP e bloqueio progressivo do login depois de 5 erros de senha ou de código. Quem passa do limite recebe 429.
  • Os limites da conta (tamanho por envio, análises na fila e análises guardadas) vêm em GET /eu, no campo limits. Passou do tamanho: 413 grande_demais. Fila ou análises guardadas no limite: 429 limite.
  • Um envio em andamento por usuário, em pedaços de até 8 MiB. O envio parado some em 24 horas.
  • Até 200 análises por página na lista, até 200 ids na exclusão em lote e até 500 itens por consulta de mudanças.
  • Token por até 90 dias, ou 30 dias sem uso; token de cadastro por 30 minutos; desafio da segunda etapa por 10 minutos.

Para onde ir depois

Atualizado em 29/10/2026. Relatar erro nesta página