API REST
Lanza análisis y consulta resultados desde tu propio código.
Autenticación
Crea una clave en Ajustes → Claves de API. Se muestra una sola vez, así que guárdala en ese momento; nosotros sólo almacenamos su hash. Envíala en la cabecera Authorization.
bash
curl https://tu-dominio.com/api/tests \
-H "Authorization: Bearer qa_tu_clave_aqui"También se acepta la cabecera x-api-key. Las respuestas de error tienen siempre la forma { "error": "mensaje" }.
Endpoints
GET
/api/testsLista tus análisis, paginadosPOST
/api/testsLanza un análisis nuevoGET
/api/tests/:idResultado completo con problemas y pasosDELETE
/api/tests/:idBorra un análisis y sus capturasPOST
/api/tests/:id/rerunRepite un análisis con la misma configuraciónPOST
/api/tests/:id/auto-fixGenera el código de los arreglos con IAPOST
/api/tests/generateGenera tests automatizados (5 créditos)GET
/api/dashboard/statsResumen de tu cuentaLanzar un análisis
bash
curl -X POST https://tu-dominio.com/api/tests \
-H "Authorization: Bearer qa_tu_clave_aqui" \
-H "Content-Type: application/json" \
-d '{
"name": "Landing de producción",
"url": "https://miapp.com",
"testTypes": ["FUNCTIONAL", "UI", "PERFORMANCE", "ACCESSIBILITY", "SEO", "SECURITY"],
"devices": ["DESKTOP", "MOBILE"]
}'Devuelve 201 con el análisis recién creado en estado PENDING. La ejecución es asíncrona: consulta el detalle hasta que el estado sea COMPLETED.
json
{
"test": {
"id": "cmt8yfptx000k4df2ikja93f8",
"name": "Landing de producción",
"url": "https://miapp.com",
"status": "PENDING",
"createdAt": "2026-08-25T18:40:12.000Z"
}
}Campos aceptados
name— obligatorio, hasta 120 caracteres.url— obligatorio. Debe ser pública: se rechazan localhost y rangos de red privada.testTypes— al menos uno deFUNCTIONAL,UI,PERFORMANCE,ACCESSIBILITY,SEO,SECURITY.devices— al menos uno deDESKTOP,MOBILE,TABLET.hasAuth,authUsername,authPassword— opcionales, para analizar una zona privada.customInstructions— opcional, contexto libre sobre la aplicación.scheduledAt— opcional, fecha ISO 8601 para dejarlo programado.
Consultar el resultado
bash
curl https://tu-dominio.com/api/tests/cmt8yfptx000k4df2ikja93f8 \
-H "Authorization: Bearer qa_tu_clave_aqui"json
{
"test": {
"id": "cmt8yfptx000k4df2ikja93f8",
"status": "COMPLETED",
"score": 33,
"duration": 50870,
"errorCount": 3,
"warningCount": 5,
"screenshots": ["/api/screenshots/cmt8y.../desktop-inicio.png"],
"resultData": {
"summary": "http://neverssl.com tiene 1 problema crítico...",
"priorities": ["El sitio no usa HTTPS", "La página tarda demasiado en cargar"],
"aiGenerated": false
},
"issues": [
{
"id": "cmt8y...",
"type": "SECURITY",
"severity": "CRITICAL",
"title": "El sitio no usa HTTPS",
"description": "Todo el tráfico viaja sin cifrar...",
"selector": null,
"suggestion": "Activa un certificado en tu hosting..."
}
],
"testSteps": [
{ "stepNumber": 1, "action": "Arrancar navegador", "status": "PASSED", "duration": 397 }
]
}
}Los estados posibles son PENDING, RUNNING, COMPLETED, FAILED y CANCELLED (este último cuando no quedaban créditos). Las severidades son CRITICAL, HIGH, MEDIUM y LOW.
Códigos de respuesta
401— falta la clave o no es válida.402— sin créditos suficientes.400— datos incorrectos; el mensaje dice cuál.404— el análisis no existe o no es de tu cuenta.