Saltar al contenido
WaitScope Entrar Solicitar acceso (por correo) Menú

Referencia de la API v1

Resumen de la API v1 que usa la app de Android: dirección, token, idioma, códigos de error, rutas de sesión, cuenta, análisis, informe y envío, y los límites.

Se aplica a: API v1 de la consola 1.6.0

La API v1 es la interfaz que usa la app de Android para comunicarse con la consola: inicio de sesión, cuenta, análisis, informes y envío de traces. Se hizo para la app y sigue las mismas reglas que la consola en el navegador. Esta página resume el contrato; para enviar un trace por script, siga Enviar traces por la API.

Dirección y formato

  • Base: https://app.waitscope.com/api/v1, solo por HTTPS. La dirección anterior, https://waitscope.io/api/v1, todavía responde, para la app configurada con ella.
  • JSON en UTF-8 en los dos sentidos, salvo las descargas y los fragmentos de archivo del envío. Un campo desconocido en el cuerpo se rechaza con 400.
  • Las rutas siguen las de la consola, en portugués: /analises, /envios, /conta.
  • Instantes en RFC 3339 con zona horaria, como 2026-10-17T13:50:48-03:00. Tiempos del trace en microsegundos enteros, en los campos que terminan en _us, y tamaños en bytes. Formatear números y fechas para mostrarlos le corresponde al cliente.
  • Sin CORS: la API no atiende una página de otro sitio abierta en el navegador.

Autenticación

El inicio de sesión tiene los dos pasos de la consola: la contraseña y después el código de la app de autenticación. Al final, la API devuelve un token de 43 caracteres, que va en toda llamada en el encabezado 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"}'

La respuesta trae "etapa": "codigo" y un desafio, que vale 10 minutos. Envíe el desafío con el código de 6 dígitos de la app, o con un código de recuperación:

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

La respuesta trae el token, la validez en expira_em y los datos de la cuenta, los mismos de GET /eu.

  • El token vale hasta 90 días y caduca con 30 días sin uso. DELETE /sessao termina el token en el acto.
  • Cuenta en el límite de sesiones simultáneas de la cuenta, junto con las del navegador, y aparece en Mi cuenta como “App Android · dispositivo”, con el device_name del inicio de sesión.
  • La cookie de la consola no vale en la API, y el token no vale en la consola.
  • method es app, el valor predeterminado, o email, este solo cuando la cuenta tiene el correo electrónico confirmado y el servidor envía correo. El rechazo trae los medios aceptados en metodos_disponiveis.
  • La cuenta todavía sin verificación en dos pasos recibe "etapa": "cadastro" y un token que solo abre el registro, durante 30 minutos.
  • Hasta que usted acepte en la consola la versión vigente de los Términos de Servicio y de la Política de Privacidad, toda ruta responde 403 termos_pendentes, salvo GET /eu y DELETE /sessao.

Idioma

Los mensajes, el diagnóstico, las tarjetas del informe y el catálogo de errores de Oracle vienen traducidos por el servidor. Con token, en el idioma de la cuenta, que PUT /conta/idioma cambia. Sin token, por el encabezado Accept-Language: pt, en o es, y cualquier otro pasa a pt.

Errores

El error viene con el estado HTTP y un cuerpo así:

{"erro": {"codigo": "nao_encontrado", "mensagem": "La dirección solicitada no existe."}}

El codigo es estable y sirve para que el programa decida qué hacer; el campo mensagem ya viene traducido, para mostrarlo al usuario. Algunos errores traen campos al lado de erro: bloqueado_ate, con el encabezado Retry-After, tentativas_restantes y metodos_disponiveis.

Códigos de error comunes de la API v1
HTTPcodigoCuándo
400requisicao_invalidaJSON no válido, campo desconocido o valor fuera de rango
401sessao_invalidaSin token, o con un token caducado, terminado o de otro tipo
401credenciais_invalidasUsuario o contraseña incorrectos; la respuesta es la misma para un usuario que no existe
401codigo_incorretoCódigo del segundo paso incorrecto; trae tentativas_restantes
403cadastro_pendenteToken de registro que intenta otra ruta
403troca_de_senhaContraseña caducada o provisional: solo valen /eu, /conta/senha y DELETE /sessao
403acesso_vencidoTerminó el plazo de acceso de la cuenta
403admin_cadastro_localAdministrador sin segundo paso que entra por internet
403admin_so_localAdministrador por internet, cuando el servidor solo acepta al administrador en la propia máquina
403termos_pendentesFalta aceptar en la consola la versión vigente de los términos
404nao_encontradoRecurso que no existe o que es de otra cuenta
409conflitoEl estado no lo permite, como el informe de un análisis que no terminó o el envío ya completado
410desafio_expiradoDesafío del segundo paso caducado, ya usado o reemplazado por otro inicio de sesión
413grande_demaisSuperó el límite de envío
429muitas_tentativasBloqueo de inicio de sesión o de código; trae bloqueado_ate
429limiteCola llena, análisis guardados en el límite u otro envío en curso
503indisponivelServicio no disponible por un instante, como la base de datos caída o el fallo al grabar el archivo
503sem_espacoEl envío dejaría al servidor sin la reserva de espacio en disco

Las rutas de la cuenta y del registro usan también senha_atual_incorreta (401), senha_invalida, metodo_indisponivel, email_indisponivel, email_invalido y codigo_expirado (400).

Rutas

Todas las rutas piden el token, salvo GET /versao y las del inicio de sesión. La ruta con el id de un recurso de otra cuenta responde 404 nao_encontrado, sin confirmar que existe: ni el administrador ve los análisis de otra cuenta.

Versión

Rutas de versión
Método y rutaQué hace
GET /versaoSin token. La versión del servidor y de la API y, cuando hay una app publicada, la de la app: versao, codigo, minima, sha256, bytes, la dirección de la descarga y la de la página de la app. Cuando el codigo instalado es menor que minima, la app pide la actualización.
GET /app/apkDescarga el APK publicado.
curl -s https://app.waitscope.com/api/v1/versao

Con la app publicada, la respuesta trae su versión; sin APK publicado, app viene nulo:

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

Sesión

Rutas de sesión y de registro del segundo paso
Método y rutaQué hace
POST /sessaoPrimer paso del inicio de sesión: username, password, method y device_name, opcional, de hasta 80 caracteres.
POST /sessao/codigoSegundo paso: desafio y codigo. Devuelve el token.
POST /sessao/codigo/reenviarReenvía el código por correo electrónico, como máximo 3 envíos, con 60 s entre ellos.
DELETE /sessaoTermina el token usado en la llamada.
GET /euLos datos de la cuenta: usuario, idioma, plazos, segundo paso, límites (limits) y términos pendientes (terms_pending).
GET y POST /duas-etapas/appCon el token de registro: la clave y el código QR de la app de autenticación y, después, la confirmación con el código, que devuelve los 10 códigos de recuperación.
POST /duas-etapas/email y /duas-etapas/email/confirmarRegistro del código por correo electrónico, cuando el servidor envía correo.

Cuenta

Rutas de la cuenta
Método y rutaQué hace
PUT /conta/idiomaCambia el idioma de la cuenta: pt, en o es.
GET y PUT /conta/privacidadeLa máscara de literales: ocultar_textos y ocultar_numeros, activadas de forma predeterminada. La regla de cada una está en Literales ocultos en el SQL.
POST /conta/senhaCambia la contraseña (senha_atual, nova, repetir) y termina las otras sesiones.
GET /conta/aparelhosLas sesiones abiertas, de la consola y de la app.
DELETE /conta/aparelhos/{id}Termina una sesión.
POST /conta/aparelhos/encerrar-outrosTermina todas las otras sesiones.
POST /conta/recuperacaoGenera códigos de recuperación nuevos.
POST /conta/app y /conta/app/confirmarCambia la app de autenticación; la actual vale hasta la confirmación.
POST /conta/email y /conta/email/confirmarConfigura o cambia el correo electrónico del segundo paso.

Las acciones sensibles (contraseña, app, correo electrónico y códigos de recuperación) piden la senha_atual, con el mismo bloqueo de la consola para quien se equivoca.

Análisis

Rutas de los análisis
Método y rutaQué hace
GET /analises?limite=50&antes=<cursor>Lista los análisis, del más nuevo al más antiguo, de 1 a 200 por página (valor predeterminado 50). El campo proximo lleva a la página siguiente, en antes.
GET /analises/{id}Un análisis.
DELETE /analises/{id}Elimina el análisis.
POST /analises/excluirElimina varios, con {"ids": [...]}, hasta 200.
GET /analises/mudancas?desde=<instante>Los análisis que terminaron después del instante, hasta 500 por consulta. El campo agora es el desde de la consulta siguiente.

Cada análisis trae id, name, status (queued, running, done o error), progress, size_bytes, las fechas, el response_time_us, el tipo de trace y el mensaje de error ya traducido. No hay descarga del trace ni reprocesamiento: el trace no se queda en el servidor.

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

Informe

Rutas del informe
Método y rutaQué hace
GET /analises/{id}/relatorioEl informe en JSON, con las secciones de la página de la consola, los textos traducidos y los números en bruto.
GET /analises/{id}/relatorio.htmlEl HTML exportado, igual al de Descargar HTML.
GET /analises/{id}/comandos/{rank}El detalle de una sentencia, con el plan.
GET /analises/{id}/objetos/{obj}La página del objeto: consultas listas para ejecutar en la base de datos.
GET /analises/{id}/plsql?dono=&nome=&tipo=&linha=Consultas listas para el PL/SQL de la pila de un deadlock.

relatorio y relatorio.html aceptan ?top=N, de 1 a 300, o ?todos=1, como Sentencias por lista; sin ellos, 10. Mientras el análisis no termina, o si terminó con error, las rutas del informe responden 409 conflito. El SQL sale con la máscara de literales de la cuenta. Con una de las opciones de la máscara activada, el sql_id de las variantes (top_variants) viene vacío y el sql_ids de los textos compartibles viene []: el sql_id se calcula a partir del texto con los valores.

Envío

El envío se puede reanudar: el archivo va en fragmentos de hasta 8 MiB, uno por vez, y después de una caída de la red sigue desde donde se detuvo.

Rutas del envío
Método y rutaQué hace
POST /enviosAbre el envío, con juntar y la lista de arquivos (nome y tamanho). Devuelve el id, la lista que vale y el pedaco_max; los archivos .trm y vacíos quedan fuera.
PUT /envios/{id}/arquivos/{n}Envía un fragmento del archivo n, con Content-Range: bytes ini-fim/total; ini es lo que ya se recibió.
GET /envios/{id}Cuánto llegó de cada archivo, para retomar.
POST /envios/{id}/concluirCierra el envío y crea los análisis. Repetirlo devuelve el mismo resultado, sin crear el análisis de nuevo.
DELETE /envios/{id}Cancela el envío y borra lo que llegó.
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

El ejemplo envía el trace sintético, de 1.845 bytes, en un solo fragmento; $ENVIO es el id devuelto por el POST /envios. Con "juntar": true, los archivos pasan a ser una colección, analizada como un solo trace. El envío pertenece al token que lo abrió y desaparece tras 24 horas sin un fragmento nuevo o cuando termina la sesión del token.

Límites

  • Límite de solicitudes por dirección IP y bloqueo progresivo del inicio de sesión después de 5 errores de contraseña o de código. Quien supera el límite recibe 429.
  • Los límites de la cuenta (tamaño por envío, análisis en cola y análisis guardados) vienen en GET /eu, en el campo limits. Si supera el tamaño: 413 grande_demais. Cola o análisis guardados en el límite: 429 limite.
  • Un envío en curso por usuario, en fragmentos de hasta 8 MiB. El envío detenido desaparece en 24 horas.
  • Hasta 200 análisis por página en la lista, hasta 200 ids en la eliminación en lote y hasta 500 elementos por consulta de cambios.
  • Token por hasta 90 días, o 30 días sin uso; token de registro por 30 minutos; desafío del segundo paso por 10 minutos.

Adónde ir después

Actualizado el 29/10/2026. Informar un error en esta página