Cómo funciona PCI Proxy
Nos envías los datos de tarjeta. Nosotros los tokenizamos, los custodiamos en el vault PCI DSS y te devolvemos un token. En tus sistemas nunca acaba el número de tarjeta.
Tú envías
Nosotros custodiamos
Tú recibes
El flujo en 5 pasos
Desde el momento en que el cliente introduce la tarjeta hasta el token que guardas en tu gestión: esto es lo que ocurre paso a paso.
Datos de tarjeta entrantes
Checkout en el sitio, llamada API o formulario del call center
PCI Proxy intercepta
Recibimos los datos de tarjeta del payload HTTP antes de que lleguen a tus servidores
Tokenización
Ciframos el número de tarjeta y generamos un token único
Vault seguro
El número de tarjeta permanece cifrado en el vault PCI DSS Nivel 1, solo en la UE
Token para ti
Recibes el token y lo usas para pagos, suscripciones o reembolsos
Qué ocurre cuando tokenizamos
Sustituimos el número de tarjeta por un token. Tú nunca ves la tarjeta en texto claro en tus sistemas. Estos son los tres pasos internos.
Paso
Reconocemos los datos de tarjeta
Analizamos las solicitudes entrantes e identificamos los números de tarjeta, en JSON, formulario o multipart. No tienes que cambiar tu código: solo conectas el flujo y listo.
Paso
Creamos el token
Cada token empieza por tok_pci_eu_ e incluye los últimos cuatro dígitos, el circuito y la fecha de vencimiento. Así puedes mostrar en la interfaz "Visa que termina en 1234" sin tener el número de tarjeta.
Paso
Mismo token, misma tarjeta
Si la misma tarjeta llega de nuevo, devolvemos el mismo token. Útil para suscripciones y tarjetas ya guardadas. La correspondencia permanece solo en el vault, no está expuesta vía API.
→ POST /v1/tokenize
{
"card_number": "4111 1111 1111 1234",
"expiry": "12/26"
}
← 200 OK · 47ms
{
"token": "tok_pci_eu_a1b2c3d4e5f61234",
"last_four": "1234",
"brand": "visa",
"card_in_your_systems": false
}
Cuando se necesita el número de tarjeta
Para autorizar un pago, el PSP necesita el número de tarjeta real. Tú le envías el token: nosotros recuperamos la tarjeta del vault y la remitimos de forma segura. Tú nunca la ves.
Cuándo ocurre
Cuando necesitas cargar una tarjeta guardada, envías el token a nuestro endpoint forward. Nosotros resolvemos el número de tarjeta en el vault y lo pasamos al PSP por conexión cifrada. No aparece en tus logs.
Quién puede hacerlo
Solo quien tenga una clave API con permiso forward o detokenize. Puedes limitar por IP, entorno y volumen de solicitudes.
Todo trazado
Cada recuperación queda registrada: quién solicitó, cuándo, hacia qué PSP. Los logs se conservan al menos 12 meses y puedes consultarlos desde el dashboard o la API.
Niveles de protección
Cada solicitud es autenticada
Solo desde tus servidores autorizados
TLS con certificados verificados
Conservados al menos 12 meses
Dos endpoints, flujo claro
Autentícate con tu clave API. Un endpoint crea el token, el otro lo usa para pagar. JSON de entrada, JSON de salida.
/v1/tokenize Scope: tokenize Cuerpo de la solicitud
{ "card_number": "4111111111111111", "expiry": "12/26", "cvv": "123" }
Respuesta 200 OK
{ "token": "tok_pci_eu_a1b2c3d4e5f6", "last_four": "1111", "brand": "visa", "expires_at": "2026-12-31" }
/v1/forward Scope: forward Cuerpo de la solicitud
{ "token": "tok_pci_eu_a1b2c3d4e5f6", "target_url": "https://psp.eu/charge", "amount": 9900, "currency": "EUR" }
Respuesta (del PSP, proxiada)
{ "status": "authorized", "transaction_id": "txn_9f8e7d6c", "amount": 9900, "currency": "EUR" }
Webhooks y notificaciones
Cuando ocurre algo (token creado, pago enviado, error), te enviamos un evento en tiempo real a tu endpoint. Cada mensaje está firmado: puedes verificarlo en el servidor.
Si la entrega falla, reintentamos hasta 5 veces con intervalos crecientes. También puedes relanzar manualmente desde el dashboard en las 72 horas siguientes.
Tipos de Eventos Soportados
token.created Nuevo token generado token.used Token enviado al PSP token.expired Token alcanzó el TTL token.deleted Token eliminado a petición forward.success PSP devolvió 2xx forward.failure PSP devolvió error Ejemplo de Payload Webhook
tu-servidor.com/webhooks/pci LIVE
{
"event": "token.created",
"timestamp": "2026-04-03T10:15:30Z",
"data": {
"token": "tok_pci_eu_a1b2c3d4e5f6",
"last_four": "1111",
"brand": "visa",
"merchant_id": "mrc_xyz789"
},
"signature": "sha256=4a8b9c..." // HMAC-SHA256
} Verificación de firma
Cada webhook incluye la cabecera X-PCI-Signature. Calcula el HMAC-SHA256 del body con tu secret y compáralo con la firma. Si no coincide, rechaza la solicitud.
SDK y formas de integrarte
SDK en Node, Python y PHP, o campos hosted en iFrame. Elige el que se adapta a tu stack.
SDK JavaScript
npmimport PCIProxy from '@pci-proxy-eu/js';
const pci = new PCIProxy({
merchantId: 'mrc_xyz789'
});
const { token } = await pci.tokenize({
cardNumber: '4111...'
}); SDK Python
PyPIfrom pci_proxy_eu import Client
client = Client(
merchant_id="mrc_xyz789",
api_key="sk_live_..."
)
result = client.tokenize(
card_number="4111..."
) SDK PHP
Composeruse PCIProxyEU\Client;
$client = new Client(
merchantId: 'mrc_xyz789',
apiKey: 'sk_live_...'
);
$result = $client->tokenize([
'card_number' => '4111...'
]); iFrames seguros para el checkout
Para permanecer en SAQ A: los campos de tarjeta se renderizan en iFrames nuestros. Los datos de tarjeta nunca pasan por tu DOM.
<div id="card-number"></div>
<div id="card-expiry"></div>
<div id="card-cvv"></div>
<script>
PCIProxy.hostedFields({
merchantId: 'mrc_xyz789',
fields: {
cardNumber: '#card-number',
expiry: '#card-expiry',
cvv: '#card-cvv'
},
onTokenize: (result) => {
// solo token, nunca el número de tarjeta
console.log(result.token);
}
});
</script> Datos de Pago
Datos de tarjeta nunca en tu servidor
SAQ A
Menos obligaciones PCI
CSS
Estilo personalizable
Mobile
Responsive
¿Listo para integrar?
Descubre qué es un PCI Proxy, profundiza en la tokenización o consulta cómo los desarrolladores usan la plataforma.