Portal de Desarrolladores

WooCommerce Redsys Gateway REST API

Una REST API para consultar transacciones, gestionar tokens y automatizar flujos de pago desde sistemas externos.

Visión general

El plugin WooCommerce Redsys Gateway Premium expone dos superficies máquina a máquina complementarias sobre el mismo pipeline firmado de Redsys que impulsa un checkout normal (PSD2/SCA del lado del comprador, IPN firmado del lado del banco). Cada pago automatizado sigue terminando en un pedido real de WooCommerce.

SuperficieQué esNamespace
A2A (Agent2Agent)Una superficie JSON-RPC 2.0 que permite a un agente de IA autenticado o a un cliente de backend crear, capturar, reembolsar, consultar y tokenizar pagos.wc-redsys-a2a/v1
UCP (Universal Commerce Protocol)Una superficie de comercio RESTful: descubrimiento de catálogo, sesiones de carrito y checkout, pedidos, reembolsos y webhooks para flujos de compra agéntica.redsys-ucp/v1

Ambas superficies vienen desactivadas por defecto y deben ser habilitadas por el comerciante en WooCommerce → Ajustes → Redsys Advanced → Agentic Commerce. Hasta que se habiliten, los endpoints devuelven un error de servicio no disponible mientras que los documentos públicos de descubrimiento (Agent Card, manifiesto UCP) siguen siendo accesibles para que un cliente pueda descubrir la superficie.

También existen dos namespaces internos — redsys-acp/v1 (puente Agentic Commerce Protocol) y redsys-app/v1 (rutas auxiliares para móvil/app). Siguen el mismo modelo OAuth y no se cubren endpoint por endpoint aquí.

URLs base y namespaces

Todas las rutas REST se sirven desde la raíz REST de WordPress de tu tienda bajo los namespaces del plugin. Los documentos de descubrimiento se publican además en rutas well-known en la raíz del sitio.

URLs base
# A2A (JSON-RPC)
https://your-store.com/wp-json/wc-redsys-a2a/v1/

# UCP (REST) — canonical namespace
https://your-store.com/wp-json/redsys-ucp/v1/

# UCP OAuth 2.1 authorization server
https://your-store.com/wp-json/redsys-ucp/oauth/v1/

# Well-known discovery documents
https://your-store.com/.well-known/agent-card.json
https://your-store.com/.well-known/ucp.json
https://your-store.com/.well-known/oauth-authorization-server

Por comodidad, varias capacidades de UCP también se registran bajo alias acotados por capacidad (por ejemplo redsys-ucp/checkout/v1, redsys-ucp/catalog/v1, redsys-ucp/orders/v1) que reflejan las rutas canónicas redsys-ucp/v1. Usa preferentemente el namespace canónico que se muestra a lo largo de esta página.

Autenticación

Ambas superficies se autentican con tokens bearer OAuth 2.1 + PKCE emitidos por el servidor de autorización UCP incluido en el mismo plugin. No hay claves de API estáticas. En cada petición se envía un token en la cabecera Authorization: Bearer.

Endpoints OAuth
MetodoRutaDescripcion
GET POST/wp-json/redsys-ucp/oauth/v1/authorizeEndpoint de autorización (flujo authorization-code + PKCE)
POST/wp-json/redsys-ucp/oauth/v1/tokenIntercambia un authorization code (o refresh) por un access token
POST/wp-json/redsys-ucp/oauth/v1/registerRegistro dinámico de cliente (RFC 7591)
POST/wp-json/redsys-ucp/oauth/v1/introspectIntrospección de token (RFC 7662)
POST/wp-json/redsys-ucp/oauth/v1/revokeRevocación de token (RFC 7009)
GET/.well-known/oauth-authorization-serverMetadatos del servidor de autorización (RFC 8414)
GET/.well-known/oauth-protected-resourceMetadatos del recurso protegido
Registrar un cliente

Registra un cliente de forma dinámica y luego ejecuta el flujo estándar authorization-code + PKCE. Los clientes A2A deben registrarse con un client_type que empiece por a2a_; el servidor emite entonces un client_id con la forma a2a_… y un client_secret de un solo uso. Los tokens A2A llevan scopes a2a:payments:*; un token de tipo UCP se rechaza en la superficie A2A y viceversa — las superficies están aisladas a propósito.

JSON — ejemplo de petición de registro
POST /wp-json/redsys-ucp/oauth/v1/register
{
  "client_name": "Concierge Bot",
  "client_type": "a2a_concierge",
  "redirect_uris": ["https://bot.example/oauth/callback"],
  "scopes": ["a2a:payments:read", "a2a:payments:create"]
}
Llamar a un endpoint
cURL — ejemplo
curl https://your-store.com/wp-json/redsys-ucp/v1/discovery \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Accept: application/json'
Scopes de A2A
ScopePermite
a2a:payments:readquery_payment_status, list_payments, tasks/get de solo lectura
a2a:payments:createcreate_payment
a2a:payments:capturecapture_payment (captura post-autorización)
a2a:payments:refundrefund_payment
a2a:payments:tokenizetokenize_card, recurrent_charge

Los scopes se comparan de forma exacta — a2a:payments:create no implica a2a:payments:read. Cada petición A2A atraviesa una cadena de cinco controles: autenticar, autorizar (scope), lista blanca de IP, ventana horaria y límite de tasa por cliente (por defecto 60/min, 600/hora, 5000/día). Hay una credencial bearer de sandbox disponible para pruebas locales, pero solo se resuelve cuando WP_DEBUG es true y el comerciante la ha habilitado explícitamente; nunca se acepta en una instalación de producción.

A2A — Agent2Agent

A2A es una superficie JSON-RPC 2.0. El descubrimiento se realiza mediante la Agent Card; cada operación es un único POST al endpoint /rpc; las tareas de larga duración informan del progreso mediante Server-Sent Events.

MetodoRutaDescripcion
GET/.well-known/agent-card.jsonAgent Card pública. Sin autenticación. Cacheable (ETag, max-age 300)
GET/wp-json/wc-redsys-a2a/v1/agent-cardAgent Card extendida (requiere autenticación) incluyendo skills privadas
POST/wp-json/wc-redsys-a2a/v1/rpcEndpoint JSON-RPC 2.0 para todas las invocaciones de skills
GET/wp-json/wc-redsys-a2a/v1/tasks/{taskId}/streamStream SSE de una tarea. Reanudable con Last-Event-ID
GET/wp-json/wc-redsys-a2a/v1/sca/return/{taskId}Callback público de navegador tras completar el comprador la SCA
POST/wp-json/wc-redsys-a2a/v1/rpc

Transporte JSON-RPC 2.0. El method selecciona el verbo RPC; para tasks/send y tasks/sendSubscribe el params.skill_id selecciona la operación. Los importes siempre son céntimos enteros (1500 = 15,00 EUR); los códigos de moneda son ISO-4217 en mayúsculas.

Métodos RPC
MetodoPropósito
tasks/sendInvoca una skill. Devuelve una tarea.
tasks/sendSubscribeInvoca una skill y devuelve un stream_url al que suscribirse.
tasks/getBusca una tarea por id.
tasks/cancelCancela una tarea no terminal.
agent/listSkillsLista las skills que el bearer tiene permitido invocar.
Skills
skill_idScope requeridoDescripcion
query_payment_statusa2a:payments:readBusca un pago por payment_id de A2A o wc_order_id
list_paymentsa2a:payments:readLista pagos con filtros
create_paymenta2a:payments:createProvisiona un pedido pendiente; devuelve una URL de redirección SCA
capture_paymenta2a:payments:captureCaptura un pago previamente preautorizado
refund_paymenta2a:payments:refundReembolso total o parcial
tokenize_carda2a:payments:tokenizeAlmacena un token de tarjeta reutilizable
recurrent_chargea2a:payments:tokenizeCobra sobre un token almacenado
Ejemplo de petición — create_payment
JSON — ejemplo
POST /wp-json/wc-redsys-a2a/v1/rpc
Authorization: Bearer <token>

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tasks/send",
  "params": {
    "skill_id": "create_payment",
    "input": {
      "amount": 1250,
      "currency": "EUR",
      "order_reference": "ORDER-2026-001",
      "mode": "redirect"
    },
    "idempotency_key": "5d1c…"
  }
}
Ejemplo de respuesta (HTTP 200)
JSON — ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "task_id": "b9b3f9a4-…",
    "state": "input-required",
    "artifacts": {
      "sca_redirect_url": "https://your-store.com/checkout/order-pay/…"
    }
  }
}

Una tarea recorre una máquina de estados estricta: submitted → working → input-required → completed | failed | canceled. El comprador completa la SCA en la URL de redirección exactamente igual que un cliente normal; el IPN firmado de Redsys liquida el pedido y la lógica de webhook refleja el resultado en la tarea. Tanto las llamadas correctas como los errores de negocio usan HTTP 200 con un sobre JSON-RPC; los rechazos de transporte (bearer ausente, límite de tasa) usan HTTP 401/429 y siguen llevando un error JSON-RPC.

UCP — descubrimiento

El manifiesto UCP anuncia las capacidades soportadas, sus URIs de especificación/esquema y el servidor de autorización OAuth. El descubrimiento no requiere autenticación.

MetodoRutaDescripcion
GET/.well-known/ucp.jsonManifiesto UCP (también servido en /.well-known/ucp)
GET/wp-json/redsys-ucp/v1/discoveryDocumento de descubrimiento de capacidades UCP
POST/wp-json/redsys-ucp/v1/negotiateNegocia versiones de capacidad y el transporte preferido

UCP — catálogo y productos

Descubrimiento de catálogo de solo lectura para compra agéntica. Los ids de producto son ids de producto de WooCommerce. Hay disponible un feed de productos JSON pregenerado para ingestión masiva.

MetodoRutaDescripcion
GET/wp-json/redsys-ucp/v1/catalog/searchBusca en el catálogo
GET/wp-json/redsys-ucp/v1/catalog/{id}Busca un único artículo del catálogo
GET/wp-json/redsys-ucp/v1/productsLista productos
GET/wp-json/redsys-ucp/v1/products/{id}Recupera un único producto
GET/wp-json/redsys-ucp/v1/products/feed.jsonFeed completo de productos (JSON)
GET/wp-json/redsys-ucp/v1/products/feed/manifestManifiesto del feed (metadatos de fragmentación / frescura)
GET/wp-json/redsys-ucp/v1/catalog/search

Busca productos para un agente. Los parámetros siguientes son los habituales; el conjunto exacto aceptado sigue el esquema de búsqueda de catálogo UCP anunciado en el documento de descubrimiento.

Parámetros
NombreTipoDescripcion
qstringConsulta de texto libre (ejemplo)
limitintNúmero máximo de resultados a devolver (ejemplo)

UCP — sesiones de carrito

Una sesión de carrito contiene las líneas de artículos antes del checkout. Crea una y luego léela o actualízala por id.

MetodoRutaDescripcion
POST/wp-json/redsys-ucp/v1/cart-sessionsCrea una sesión de carrito
GET/wp-json/redsys-ucp/v1/cart-sessions/{id}Recupera una sesión de carrito
PUT/wp-json/redsys-ucp/v1/cart-sessions/{id}Actualiza líneas de artículos / cantidades

UCP — sesiones de checkout

Una sesión de checkout convierte un carrito en un pedido pagable. Complétala para desencadenar el pago firmado de Redsys, o cancélala. Las mismas rutas también se exponen bajo el alias genérico /sessions.

MetodoRutaDescripcion
POST/wp-json/redsys-ucp/v1/checkout-sessionsCrea una sesión de checkout
GET/wp-json/redsys-ucp/v1/checkout-sessions/{id}Recupera una sesión de checkout
PUT/wp-json/redsys-ucp/v1/checkout-sessions/{id}Actualiza datos de comprador / envío / pago
POST/wp-json/redsys-ucp/v1/checkout-sessions/{id}/completeCompleta la sesión e inicia el pago
POST/wp-json/redsys-ucp/v1/checkout-sessions/{id}/cancelCancela la sesión

Rutas alias: POST /sessions, GET /sessions/{id}, PATCH /sessions/{id}, POST /sessions/{id}/complete, POST /sessions/{id}/cancel.

UCP — pedidos

Lee los pedidos creados a través de la superficie de comercio y actúa sobre ellos. Los ids de pedido son ids de pedido de WooCommerce.

MetodoRutaDescripcion
GET/wp-json/redsys-ucp/v1/ordersLista pedidos
GET/wp-json/redsys-ucp/v1/orders/{id}Recupera un único pedido
POST/wp-json/redsys-ucp/v1/orders/{id}/cancelCancela un pedido
POST/wp-json/redsys-ucp/v1/orders/{id}/refundCrea un reembolso total o parcial (sincronizado con Redsys)
POST/wp-json/redsys-ucp/v1/orders/{id}/refund

Reembolsa total o parcialmente un pedido pagado. El reembolso se ejecuta contra Redsys y se registra en el pedido de WooCommerce.

Parámetros
NombreTipoDescripcion
idintid de pedido de WooCommerce (parámetro de ruta)
amountintImporte en céntimos a reembolsar (omitir para un reembolso total) (ejemplo)
reasonstringMotivo de reembolso opcional (ejemplo)
Ejemplo de respuesta (HTTP 200)
JSON — ejemplo
{
  "order_id": 10432,
  "status": "refunded",
  "refunded_amount": 1250,
  "currency": "EUR"
}

UCP — webhooks

Registra endpoints HTTPS para recibir notificaciones de eventos firmadas (por ejemplo cuando se paga o reembolsa un pedido) en lugar de hacer polling.

MetodoRutaDescripcion
POST/wp-json/redsys-ucp/v1/webhooksRegistra una suscripción a webhook
GET/wp-json/redsys-ucp/v1/webhooksLista las suscripciones a webhook
DELETE/wp-json/redsys-ucp/v1/webhooks/{id}Elimina una suscripción a webhook

Manejo de errores

Los endpoints REST de UCP devuelven códigos de estado HTTP estándar con un cuerpo de error JSON al estilo de WordPress (code, message, data.status). Los endpoints A2A devuelven sobres de error JSON-RPC; los fallos a nivel de transporte llevan además el estado HTTP correspondiente.

EstadoSignificadoCuándo
400Bad requestParámetros inválidos o ausentes / fallo de validación de esquema
401UnauthorizedToken bearer ausente, inválido, caducado o revocado
403ForbiddenEl token carece del scope requerido, IP no en lista blanca, o fuera de la ventana horaria permitida
404Not foundNingún recurso (tarea, sesión, pedido) coincide con el id
429Too many requestsLímite de tasa por cliente superado (ventana de minuto / hora / día)
503Service unavailableLa superficie A2A o UCP no está habilitada por el comerciante
500Server errorError inesperado de la pasarela o de Redsys (consulta los logs de Redsys)

Códigos de error JSON-RPC de A2A representativos: -32002 scope_denied (con data.required_scope), -32003 rate_limited (con data.window y data.limit), y a2a_client_revoked cuando un token real se corresponde con un cliente revocado.

Consigue acceso completo a la API

La REST API se incluye con el plugin WooCommerce Redsys Gateway Premium.