Desarrolladores

Tres llamadas y un webhook.

Gateway es un checkout alojado, así que la integración es deliberadamente pequeña: crea un pedido, envía al cliente a la página y verifica el resultado firmado. Esto es toda la superficie: la interfaz de pago, la lógica de los métodos, 3-D Secure, los wallets y los recibos los construimos y mantenemos al día nosotros.

A grandes rasgos

Contra qué te integras.

  • REST sobre HTTPS
  • JSON de entrada, JSON de salida
  • Claves de API Bearer
  • Claves de idempotencia
  • Webhooks firmados
  • Protección contra replay
  • Modo de prueba y modo real
  • SDK para iOS y Android
  • Plugins para tiendas
  • Campos integrados

Inicio rápido

De cero a un pedido pagado.

Todo el camino feliz. Los importes van en unidades menores, las referencias son tuyas y la URL de checkout es a la que rediriges al cliente. La URL base de la API se entrega con tus claves de sandbox: expórtala como PROTOCORE_API_BASE y las llamadas de abajo funcionan tal cual.

01

Crea el pedido

Una sola llamada con el importe, la divisa y tu propia referencia. La clave de idempotencia la generas tú: una petición repetida devuelve el pedido original en lugar de crear un segundo.

POST /v1/orders
curl -X POST "$PROTOCORE_API_BASE/v1/orders" \
  -H "Authorization: Bearer $PROTOCORE_API_KEY" \
  -H "Idempotency-Key: 9F21-0716" \
  -H "Content-Type: application/json" \
  -d '{
        "amount": 4900,
        "currency": "EUR",
        "reference": "9F21-0716",
        "line_items": [
          { "name": "Brand identity sprint", "amount": 3850 },
          { "name": "Typeface licensing",   "amount": 600 },
          { "name": "Rush delivery",        "amount": 400 }
        ],
        "return_url": "https://arcstudio.ro/thanks"
      }'
02

Envía al cliente al checkout

La respuesta incluye una URL de checkout en tu propio host de checkout: el que se emite con tu sandbox o tu propio dominio cuando lo apuntes hacia nosotros. Redirige al cliente o ábrela en el SDK; en esa página viven los métodos de pago, los wallets y 3-D Secure, así que no hay nada que construir por tu parte.

201 Created
{
  "id": "ord_2h4Kq9wRz",
  "reference": "9F21-0716",
  "amount": 4900,
  "currency": "EUR",
  "status": "pending",
  "checkout_url": "https://<your-checkout-host>/c/2h4Kq9wRz"
}
03

Verifica el resultado firmado

Cuando el pago se completa, llega un evento firmado a tu endpoint. Verifica la firma con tu secreto de webhook antes de fiarte de nada y después gestiona el pedido con la referencia que ya conoces.

POST /your/webhook — order.paid
{
  "type": "order.paid",
  "id": "evt_7Ka2Lm",
  "created": "2026-07-23T09:41:02Z",
  "data": {
    "id": "ord_2h4Kq9wRz",
    "reference": "9F21-0716",
    "amount": 4900,
    "currency": "EUR",
    "method": "usdc",
    "settlement": { "currency": "EUR", "amount": 4900, "rate": "0.9184" }
  }
}

Referencia

Los endpoints que realmente usarás.

Hay más en la documentación, pero este es el conjunto del que la mayoría de las integraciones no pasa.

POST /v1/orders
Crea un pedido y recibe su URL de checkout. Admite una clave de idempotencia.
GET /v1/orders/:id
El estado actual de un pedido: estado, método, liquidación y reembolsos.
POST /v1/orders/:id/refunds
Reembolso sobre el pedido, total o parcial, con motivo obligatorio.
POST /v1/orders/:id/void
Libera la autorización antes de la liquidación, de modo que no se mueve nada de dinero.
POST /v1/links
Crea un enlace de pago, de un solo uso o multipago, con caducidad opcional.
GET /v1/payouts/:id
Un lote de liquidación y los pedidos que lo componen, con las comisiones desglosadas.
POST /v1/customers/:id/cards
Guarda una tarjeta en la bóveda para cobros con un clic y recurrentes; devuelve una referencia de token.
POST /v1/subscriptions
Cobra una tarjeta guardada de forma periódica; cada ciclo genera su propio pedido.

Webhooks

De qué se entera tu backend.

Cada evento incluye la referencia del pedido que creaste, así que tu handler puede reducirse a un switch sobre el tipo y una búsqueda en tu propio sistema.

order.paid
Autorización y captura completadas: gestiona el pedido con la referencia.
order.failed
El pago no se completó, con un motivo sobre el que un operador puede actuar.
order.refunded
Se emitió un reembolso, total o parcial, con su motivo y su nota.
order.disputed
Se abrió un contracargo, con las pruebas ya adjuntas al pedido.
payout.settled
Un lote de liquidación salió hacia tu cuenta, con el listado de pedidos que lo componen.
subscription.charged
Un ciclo recurrente generó su propio pedido y su recibo.
Verificar

Comprueba la firma antes de fiarte del cuerpo.

Cada envío lleva una marca de tiempo y una firma HMAC sobre el cuerpo sin procesar. Compara en tiempo constante, rechaza lo que supere tu ventana de tolerancia y trata un id de evento duplicado como ya gestionado: reintentamos ante respuestas distintas de 2xx, así que tu handler también debe ser idempotente.

Node — verificación de firma
import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(rawBody, header, secret) {
  const [ts, sig] = header.split(",").map((p) => p.split("=")[1]);
  const expected = createHmac("sha256", secret)
    .update(`${ts}.${rawBody}`)
    .digest("hex");

  const a = Buffer.from(sig, "hex");
  const b = Buffer.from(expected, "hex");
  if (a.length !== b.length || !timingSafeEqual(a, b)) return false;

  // Reject replays outside a five-minute window.
  return Math.abs(Date.now() / 1000 - Number(ts)) < 300;
}

Garantías

Las propiedades sobre las que puedes construir.

01

Creaciones idempotentes

Toda creación de pedido admite una clave de idempotencia. Una petición repetida —tras un timeout, un despliegue o una reentrega de cola— devuelve el pedido original en lugar de cobrar dos veces.

02

Eventos firmados y protegidos contra replay

Los webhooks llevan una firma HMAC con marca de tiempo y un id de evento estable. Los envíos se reintentan con backoff hasta que tu endpoint responde 2xx, así que una ventana de despliegue no hace perder ningún pago.

03

Una referencia, de principio a fin

La referencia que aportas al crear el pedido aparece en el checkout, el recibo, el webhook, la liquidación y cualquier reembolso posterior. No hay un segundo identificador que mapear entre sistemas.

04

El modo de prueba usa el mismo código

Las claves de prueba ejecutan los mismos flujos contra sesiones de prueba. Lo que pasa en test es lo que se despliega: la diferencia está en las claves que envías, no en los endpoints a los que llamas.

Datos de prueba

Cómo probar los caminos que importan.

Cada vía de abajo lleva asociada una tarjeta de prueba, que se indica junto con tus claves al emitir el sandbox. Los números son específicos de cada sandbox y no se publican aquí, para que sigan siendo válidos cuando cambien los rangos de prueba de las redes. El comportamiento es determinista en cualquier caso: un test puede verificar un rechazo con la misma facilidad que un éxito.

Aprobada directamente
Autoriza y captura sin desafío 3-D Secure: el camino ideal.
Desafío 3-D Secure
Fuerza un desafío que puedes recorrer, para probar el tramo de vuelta.
Rechazo blando
Rechaza por fondos insuficientes y reintenta por una ruta alternativa.
Rechazo definitivo
Rechaza de forma permanente por tarjeta caducada, sin reintento.
Redes de prueba USDC
USDC de testnet en Ethereum, Base y Solana, con un precio de cambio fijo.
Simulación de transferencia
Marca una transferencia de prueba a un vIBAN como recibida para pasar el pedido a pagado.

Consigue tus claves y empieza.

Un comercio sandbox con claves de API, secretos de webhook y todos los métodos activados, además de la referencia completa, para que tu equipo integre antes de firmar nada.