API v1

API para desarrolladores

Integra el análisis de accesibilidad (WCAG 2.2 AA · EN 301 549 · Ley 11/2023) en tu CI/CD, tus scripts y tus paneles. Una petición, una respuesta JSON con veredicto, puntuación y barreras.

Autenticación

Todas las peticiones requieren una API key en la cabecera Authorization (o X-Api-Key). Las claves empiezan por rk_ y se gestionan por cliente. Solicita tu clave (incluida en los planes Pro y Agencia).

Authorization: Bearer rk_tu_clave

Límite de uso: 30 peticiones/hora por clave. Nunca expongas la clave en el navegador ni en repositorios públicos.

Escanear un sitio

POSThttps://www.rampascanner.com/api/v1/scan

Analiza hasta 10 páginas del sitio en móvil y escritorio y devuelve el veredicto de accesibilidad. Además de las reglas de axe-core, el motor mide el contraste real sobre degradados y prueba teclado, reflow al 400 %, orden de lectura, estados ARIA, idioma por fragmentos y autoplay.

Parámetros (cuerpo JSON)

CampoTipoPor defectoDescripción
url requeridostringURL pública (http/https) a analizar.
maxPagesnúmero3Páginas a rastrear (1–10).
thresholdnúmero90Puntuación mínima para passed cuando failOn = score (0–100).
failOnstringscorescore · critical (falla si hay críticas) · serious (falla si hay críticas o graves).

Ejemplos

Línea de comandos (CLI) · lo más rápido

# Sin instalar nada (Node ≥ 18). Consigue tu API key en el panel.
export RAMPASCANNER_API_KEY=rk_tu_clave

# Falla (exit 1) si la nota baja de 85 o hay barreras graves:
npx rampascanner https://tu-sitio.com --threshold 85 --fail-on serious

# Salida JSON para tratarla en scripts:
npx rampascanner https://tu-sitio.com --json

El paquete rampascanner corre con npx (Node ≥ 18), sin instalar nada. Sale con código 0 si pasa y 1 si falla — ideal para romper un pipeline de CI.

cURL

curl -X POST https://www.rampascanner.com/api/v1/scan \
  -H "Authorization: Bearer rk_tu_clave" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://tu-sitio.com", "maxPages": 3, "failOn": "serious" }'

Node.js

const res = await fetch("https://www.rampascanner.com/api/v1/scan", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.RAMPA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ url: "https://tu-sitio.com", failOn: "serious" }),
});
const data = await res.json();
if (!data.passed) {
  console.error(`Accesibilidad: ${data.score}/100 — ${data.totals.critical} críticas`);
  process.exit(1);
}

GitHub Actions (con el CLI)

# .github/workflows/a11y.yml — bloquea el merge si baja la accesibilidad
name: Accesibilidad
on: [pull_request]
jobs:
  a11y:
    runs-on: ubuntu-latest
    steps:
      - run: npx rampascanner https://tu-sitio.com --fail-on serious
        env:
          RAMPASCANNER_API_KEY: ${{ secrets.RAMPASCANNER_API_KEY }}

Respuesta 200 OK

{
  "url": "https://tu-sitio.com",
  "passed": false,
  "reason": "ok",
  "score": 78,
  "grade": "C",
  "threshold": 90,
  "failOn": "serious",
  "pagesScanned": 3,
  "pagesAudited": 3,
  "totals": { "issues": 9, "nodes": 40, "critical": 1, "serious": 2, "moderate": 4, "minor": 2 },
  "topIssues": [
    { "id": "image-alt", "help": "Las imágenes deben tener texto alternativo",
      "impact": "critical", "nodes": 6, "wcag": ["wcag2a", "wcag111"] }
  ],
  "scannedAt": "2026-08-21T10:00:00.000Z"
}

passed resume el veredicto según failOn. totals desglosa las barreras por gravedad y topIssues lista las 10 principales con su criterio WCAG.

Códigos de estado

CódigoSignificado
200Análisis completado (revisa passed).
400URL ausente, malformada o privada/no pública.
401Falta la API key o es inválida/revocada.
422No se pudo auditar ninguna página (web caída, bloqueada o muy lenta).
429Límite de peticiones alcanzado (30/hora).
502 / 504El servicio de análisis no respondió a tiempo.

Auditar un recorrido (embudo)

POSThttps://www.rampascanner.com/api/v1/flow

Audita la accesibilidad a lo largo de un recorrido (carrito→checkout, login, contacto…), no solo páginas sueltas: conduce el navegador paso a paso y audita cada punto de control. Ideal para un gate de CI/CD sobre tu embudo de conversión. Misma autenticación y límite (30/hora por clave).

Parámetros (cuerpo JSON)

CampoTipoDescripción
templatestringcheckout · login · contacto (embudo listo; requiere url).
urlstringURL de inicio (http/https público). Solo con template.
stepsarrayPasos explícitos (alternativa a template): goto, checkpoint, click, fill, press, waitFor, wait. Empieza por goto e incluye algún checkpoint.
failOnstringscore · critical · serious (falla si CUALQUIER checkpoint tiene esa gravedad).

Ejemplos (cURL)

# Embudo listo (checkout / login / contacto):
curl -X POST https://www.rampascanner.com/api/v1/flow \
  -H "Authorization: Bearer rk_tu_clave" -H "Content-Type: application/json" \
  -d '{ "template": "checkout", "url": "https://tu-sitio.com", "failOn": "serious" }'

# O pasos explícitos (empieza por goto, incluye algún checkpoint):
curl -X POST https://www.rampascanner.com/api/v1/flow \
  -H "Authorization: Bearer rk_tu_clave" -H "Content-Type: application/json" \
  -d '{ "steps": [
        { "action": "goto", "url": "https://tu-sitio.com" },
        { "action": "checkpoint", "label": "Inicio" },
        { "action": "click", "text": "Añadir al carrito" },
        { "action": "checkpoint", "label": "Carrito" }
      ], "failOn": "serious" }'

Respuesta 200 OK

{
  "url": "https://tu-sitio.com",
  "passed": false,
  "reason": "ok",
  "score": 82,
  "grade": "B",
  "failOn": "serious",
  "checkpoints": 2,
  "incomplete": null,
  "steps": [
    { "label": "Inicio", "url": "https://tu-sitio.com/", "score": 95,
      "totals": { "issues": 1, "critical": 0, "serious": 0, "moderate": 1, "minor": 0 },
      "topIssues": [ /* … */ ] },
    { "label": "Carrito", "url": "https://tu-sitio.com/cart", "score": 68,
      "totals": { "issues": 4, "critical": 0, "serious": 2, "moderate": 1, "minor": 1 },
      "topIssues": [ { "id": "label", "impact": "serious", "nodes": 3, "wcag": ["wcag2a","wcag412"] } ] }
  ],
  "scannedAt": "2026-08-24T10:00:00.000Z"
}

passed es el veredicto según failOn. score es la nota media del recorrido; cada elemento de steps trae la nota, totals y las barreras de ese punto de control. incomplete avisa si el recorrido se detuvo antes de tiempo (un paso falló). Un 422 significa que no se auditó ningún checkpoint.

Obtener resultados por slug

GEThttps://www.rampascanner.com/api/v1/report/{slug}

Recupera los resultados de un informe ya generado (el mismo que es público en /r/{slug}). Sin parámetros devuelve el informe en JSON; con ?doc= devuelve un documento enterprise en Markdown: vpat, en301549, audit o patch (este último acepta &fw=jsx).

# Informe completo en JSON
curl https://www.rampascanner.com/api/v1/report/TU_SLUG \
  -H "Accept: application/json"

# Un documento enterprise en Markdown (vpat · en301549 · audit · patch)
curl "https://www.rampascanner.com/api/v1/report/TU_SLUG?doc=vpat"
curl "https://www.rampascanner.com/api/v1/report/TU_SLUG?doc=patch&fw=jsx"

OpenAPI

Especificación OpenAPI 3.1 lista para importar en Postman, Insomnia o un generador de clientes:

GEThttps://www.rampascanner.com/api/v1/openapi.json

¿Listo para integrar?

Consigue tu API key y empieza a bloquear regresiones de accesibilidad en cada Pull Request.

Solicitar API key
API para desarrolladores — RampaScanner