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_claveLímite de uso: 30 peticiones/hora por clave. Nunca expongas la clave en el navegador ni en repositorios públicos.
Escanear un sitio
https://www.rampascanner.com/api/v1/scanAnaliza 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)
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
url requerido | string | — | URL pública (http/https) a analizar. |
maxPages | número | 3 | Páginas a rastrear (1–10). |
threshold | número | 90 | Puntuación mínima para passed cuando failOn = score (0–100). |
failOn | string | score | score · 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 --jsonEl 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ódigo | Significado |
|---|---|
200 | Análisis completado (revisa passed). |
400 | URL ausente, malformada o privada/no pública. |
401 | Falta la API key o es inválida/revocada. |
422 | No se pudo auditar ninguna página (web caída, bloqueada o muy lenta). |
429 | Límite de peticiones alcanzado (30/hora). |
502 / 504 | El servicio de análisis no respondió a tiempo. |
Auditar un recorrido (embudo)
https://www.rampascanner.com/api/v1/flowAudita 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)
| Campo | Tipo | Descripción |
|---|---|---|
template | string | checkout · login · contacto (embudo listo; requiere url). |
url | string | URL de inicio (http/https público). Solo con template. |
steps | array | Pasos explícitos (alternativa a template): goto, checkpoint, click, fill, press, waitFor, wait. Empieza por goto e incluye algún checkpoint. |
failOn | string | score · 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
https://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:
https://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