API i connexió MCP

Auditoria i conversió de PDF a format accessible (WCAG 2.1/2.2, PDF/UA ISO 14289 i EAA Directiva (UE) 2019/882) des de les teves pròpies eines. Per a clients registrats.

Connectaràs un assistent d'IA? La connexió MCP té la seva pròpia documentació.

Com funciona

El processament d'un PDF pot trigar de segons a diversos minuts: validació de conformitat, conversió, etiquetatge de l'estructura i descripció de les imatges. Per això l'API és asíncrona: no esperes mai amb la connexió oberta.

  1. Puges el PDF indicant el tipus: audit (informe, gratis) o conversion (genera el PDF/A accessible, consumeix quota del pla).
  2. La resposta és immediata (202 Accepted) i conté l'id del document. La feina entra a la cua i el servidor la processa en segon pla.
  3. Consultes l'estat amb aquest id tantes vegades com vulguis (o, per MCP, esperes amb wait_for_document).
  4. Quan l'estat és done: demanes l'informe i/o descarregues el PDF/A.

L'id té la forma AAAAMMDD-HHMMSS-xxxxxx i és el mateix identificador que veuràs a la teva àrea de client.

Autenticació

Requisit de pla: l'API i l'MCP estan inclosos a partir del pla Business. Amb un pla inferior no es poden crear credencials i les crides responen 403 plan_required. Veure els plans.

Totes les crides (tret de /api/v1/ping) requereixen una clau d'API creada a El meu compte → Credencials d'API. La clau identifica el teu compte: els documents que creïs són teus i consumeixen el teu pla.

Authorization: Bearer pdfa_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Si el teu entorn no permet enviar la capçalera Authorization, pots fer servir X-Api-Key: pdfa_…. El paràmetre ?api_key= també funciona, però no és recomanable (queda als registres del servidor).

API REST

Basehttps://pdfaccesible.com/api/v1
FormatJSON UTF-8 (les descàrregues retornen application/pdf)
MètodeRutaDescripcióClau
GET /api/v1/ping Comprovació de vida. No requereix credencial. no
GET /api/v1/account Pla contractat, límits i consum del mes.
GET /api/v1/documents Llista els teus documents. Paràmetres: page, per_page, type, status.
POST /api/v1/documents Puja un PDF i l'encua (type=audit|conversion). Retorna l'id amb què es consulta l'estat. Respon 202 Accepted.
GET /api/v1/documents/{id} Estat del processament: queued, processing, done o error, amb avenç i nota.
PUT /api/v1/documents/{id} Actualitza les metadades del document (filename).
DELETE /api/v1/documents/{id} Elimina el document complet: original, PDF/A i informe. Irreversible.
GET /api/v1/documents/{id}/report Informe d'accessibilitat complet (auditoria + conversió). Paràmetres: include_findings=0|1, max_findings.
GET /api/v1/documents/{id}/audit Només el resultat de l'auditoria de l'original.
POST /api/v1/documents/{id}/audit Torna a auditar l'original (per exemple, després d'un canvi de criteris). 202 Accepted.
GET /api/v1/documents/{id}/conversion Estat i resultat de la conversió: not_requested, processing o done.
POST /api/v1/documents/{id}/conversion Encua una conversió NOVA del document. 409 si ja n'hi ha una en curs.
PUT /api/v1/documents/{id}/conversion Assegura la conversió: idempotent, no duplica la feina ni la quota. És la indicada si la teva integració reintenta.
DELETE /api/v1/documents/{id}/conversion Esborra només el PDF/A generat; conserva l'original i l'auditoria.
GET /api/v1/documents/{id}/file/{original|pdfa} Descarrega el PDF triat (application/pdf).
POST /mcp Servidor MCP (JSON-RPC 2.0). Té la seva pròpia pàgina de documentació.

1. Pujar un document

Tres maneres d'enviar el PDF: multipart amb el camp file (recomanada per a fitxers grans), JSON amb file_base64 o file_url, o el PDF cru al cos.

# multipart (auditoria)
curl -X POST https://pdfaccesible.com/api/v1/documents \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@annual-report-2026.pdf" \
  -F "type=audit"

# JSON amb URL (conversió a PDF/A accessible)
curl -X POST https://pdfaccesible.com/api/v1/documents \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"conversion","file_url":"https://example.com/annual-report-2026.pdf"}'
HTTP/1.1 202 Accepted
{
  "id": "20260730-120501-a1b2c3",
  "status": "queued",
  "type": "conversion",
  "filename": "annual-report-2026.pdf",
  "size_bytes": 1048576,
  "progress_pct": 0,
  "step": "Queued",
  "created_at": "2026-07-30T12:05:01+02:00",
  "expires_at": "2026-08-29T12:05:01+02:00",
  "score": null,
  "error": null,
  "links": { "self": "https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3", "web": "…" }
}

2. Consultar l'estat amb l'id

curl https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3 \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "id": "20260730-120501-a1b2c3",
  "status": "done",
  "progress_pct": 100,
  "step": "Completed",
  "score": 100,
  "breakdown": { "overall": 100, "wcag": 100, "pdf_ua": 100, "eaa": 100 },
  "converted": true,
  "links": {
    "self":     "https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3",
    "report":   "https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3/report",
    "original": "https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3/file/original",
    "pdfa":     "https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3/file/pdfa"
  }
}

Sondeja cada 5-10 s. Una auditoria sol trigar entre 10 i 60 s; una conversió completa, entre 1 i 5 min segons la mida i el nombre d'imatges.

3. Informe i descàrrega

# informe complet (nota global, per norma i troballes)
curl "https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3/report?max_findings=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

# PDF/A accessible
curl -L -o accessible.pdf \
  https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3/file/pdfa \
  -H "Authorization: Bearer YOUR_API_KEY"

4. Convertir un document ja pujat

curl -X PUT https://pdfaccesible.com/api/v1/documents/20260730-120501-a1b2c3/conversion \
  -H "Authorization: Bearer YOUR_API_KEY"

5. Un verb, una acció

Cada combinació de ruta + verb és una acció diferent. En particular: POST /documents/{id}/conversion encua una conversió nova i falla amb 409 si ja n'hi ha una en marxa, mentre que PUT sobre la mateixa ruta és idempotent (si el PDF/A ja existeix, o ja s'està generant, no repeteix la feina ni torna a consumir quota): és la que convé fer servir en integracions que reintenten. DELETE /documents/{id}/conversion esborra només el PDF/A generat i conserva l'original i la seva auditoria; DELETE /documents/{id} ho esborra tot.

Estructura de l'informe

La nota global és la mitjana de les tres dimensions d'accessibilitat. PDF/UA es valida amb un validador de conformitat automàtic (autoritatiu); WCAG i EAA s'avaluen sobre els fets del document i les regles PDF/UA incomplertes.

{
  "id": "20260730-120501-a1b2c3",
  "filename": "annual-report-2026.pdf",
  "status": "done",
  "audit": {
    "score": 42,
    "breakdown": { "overall": 42, "wcag": 20, "pdf_ua": 40, "eaa": 67 },
    "pages": 24,
    "pdf_version": "1.7",
    "machine_validated": true,
    "finding_counts": { "pass": 12, "warning": 3, "fail": 9, "info": 4, "na": 1 },
    "standards": {
      "wcag":   { "standard": "WCAG",   "verdict": "fail", "score": 20, "findings_total": 6,
                  "findings": [ { "severity": "fail", "title": "…", "detail": "…", "reference": "WCAG 1.3.1" } ] },
      "pdf_ua": { "standard": "PDF/UA", "verdict": "fail", "score": 40, "findings_total": 3, "findings": [] },
      "eaa":    { "standard": "EAA",    "verdict": "warning", "score": 67, "findings_total": 5, "findings": [] }
    }
  },
  "conversion": {
    "created_at": "2026-07-30T12:09:44+02:00",
    "pdfa_part": 2,
    "tagged": true,
    "result": { "score": 100, "breakdown": { "overall": 100, "wcag": 100, "pdf_ua": 100, "eaa": 100 } }
  },
  "score_improvement": { "before": 42, "after": 100, "delta": 58 }
}

Estats d'un document

EstatSignificat
queuedAcceptat i esperant el treballador de la cua.
processingEn marxa. progress_pct i step indiquen en quina fase és.
doneAcabat: ja hi ha informe i, si era una conversió, PDF/A descarregable.
errorHa fallat; el camp error explica per què. Es reintenta automàticament fins a 3 vegades abans de donar-se per vençut.

Límits i quotes

LímitValor
Peticions per minut i clau120
Documents per hora i clau60
Mida màxima de pujada (servidor)128 MB
Mida màxima a file_base6424 MB · per sobre, fes servir multipart o file_url
Auditoria gratuïtafins a 100 MB per document
Conversionssegons el teu pla (mida per document i nombre al mes)

El consum del mes es compta en donar d'alta cada conversió i queda registrat de manera permanent: esborrar un document no retorna quota. En superar la freqüència reps 429 amb la capçalera Retry-After. Si el pla no cobreix una conversió, reps 402 quota_exceeded: l'auditoria continua estant disponible gratis. Consulta el teu consum en qualsevol moment amb GET /api/v1/account o l'eina get_account.

Errors

{ "error": { "code": "quota_exceeded", "message": "You have used your 3 free conversions…" } }
CodiHTTPQuan
unauthorized401Falta la clau, o és invàlida, revocada o caducada.
quota_exceeded402El pla no permet aquesta conversió (mida per document, límit mensual o conversions gratuïtes exhaurides).
email_not_verified403El compte no ha verificat el seu email.
plan_required403El pla contractat no inclou l'accés a l'API ni a l'MCP (s'inclou a partir del pla Business). El camp required_plan de la resposta indica el pla necessari.
not_found404L'id no existeix al teu compte (o la ruta no existeix).
method_not_allowed405Aquest verb no està permès en aquesta ruta; la capçalera Allow indica els que sí.
already_running409Ja hi ha una feina d'aquest tipus en marxa per a aquest document (fes servir PUT si vols una crida idempotent).
report_not_ready409El document encara no ha acabat de processar-se.
invalid_request422Paràmetres incorrectes: el fitxer no és un PDF, falta el contingut, tipus desconegut…
too_many_requests429S'ha superat el límit de freqüència. Reintenta segons Retry-After.
internal_error500Error inesperat del servidor. Si persisteix, escriu-nos.
api_disabled503L'API està temporalment desactivada.

Retenció i privacitat