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, paginados
POST/api/testsLanza un análisis nuevo
GET/api/tests/:idResultado completo con problemas y pasos
DELETE/api/tests/:idBorra un análisis y sus capturas
POST/api/tests/:id/rerunRepite un análisis con la misma configuración
POST/api/tests/:id/auto-fixGenera el código de los arreglos con IA
POST/api/tests/generateGenera tests automatizados (5 créditos)
GET/api/dashboard/statsResumen de tu cuenta

Lanzar 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 de FUNCTIONAL, UI, PERFORMANCE, ACCESSIBILITY, SEO, SECURITY.
  • devices — al menos uno de DESKTOP, 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.