Hoe PCI Proxy werkt
U stuurt ons kaartgegevens. Wij tokeniseren, slaan ze op in een PCI DSS-vault en retourneren een token. Uw systemen ontvangen nooit het kaartnummer.
U verstuurt
Wij bewaren
U ontvangt
De flow in 5 stappen
Van het moment dat de klant kaartgegevens invoert tot het token in uw backoffice: dit gebeurt stap voor stap.
Kaartgegevens binnen
Website checkout, API-call of callcenterformulier
PCI Proxy onderschept
Wij ontvangen kaartgegevens uit de HTTP-payload voordat ze uw servers bereiken
Tokenisatie
Wij versleutelen het kaartnummer en genereren een uniek token
Beveiligde vault
Het kaartnummer blijft versleuteld in onze PCI DSS Niveau 1-vault, alleen in de EU
Token naar u
U ontvangt het token en gebruikt het voor betalingen, abonnementen of terugbetalingen
Wat er gebeurt bij tokenisatie
Wij vervangen het kaartnummer door een token. In uw systemen ziet u nooit het platte kaartnummer. Dit zijn de drie interne stappen.
Stap
Wij detecteren kaartgegevens
Wij analyseren binnenkomende requests en identificeren kaartnummers in JSON, formulieren of multipart payloads. Geen codewijzigingen aan uw kant: koppel uw flow en u bent klaar.
Stap
Wij maken het token
Elk token begint met tok_pci_eu_ en bevat de laatste vier cijfers, scheme en vervaldatum. Zo kan uw UI "Visa eindigend op 1234" tonen zonder ooit het kaartnummer te bewaren.
Stap
Zelfde token, zelfde kaart
Als dezelfde kaart opnieuw binnenkomt, retourneren wij hetzelfde token. Handig voor abonnementen en opgeslagen kaarten. De mapping blijft alleen in de vault en wordt niet via API blootgesteld.
→ 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
}
Wanneer het kaartnummer nodig is
Om een betaling te autoriseren heeft de PSP het echte kaartnummer nodig. U stuurt het token: wij halen de kaart uit de vault en sturen deze veilig door. U ziet het nooit.
Wanneer dit gebeurt
Wanneer u een opgeslagen kaart wilt belasten, stuurt u het token naar ons forward-endpoint. Wij halen het kaartnummer op in de vault en geven het door aan de PSP via een versleutelde verbinding. Het verschijnt niet in uw logs.
Wie dit mag doen
Alleen houders van een API-sleutel met forward or detokenize rechten. U kunt beperken op IP, omgeving en requestvolume.
Volledig geaudit
Elke ophaling wordt gelogd: wie het aanvroeg, wanneer en naar welke PSP. Logs worden minimaal 12 maanden bewaard en zijn beschikbaar via dashboard of API.
Beschermingslagen
Elke request wordt geauthenticeerd
Alleen vanaf uw geautoriseerde servers
TLS met geverifieerde certificaten
Bewaard gedurende minimaal 12 maanden
Twee endpoints, duidelijke flow
Authenticeer met uw API-sleutel. Eén endpoint maakt het token, het andere gebruikt het om te betalen. JSON in, JSON out.
/v1/tokenize Scope: tokenize Request body
{ "card_number": "4111111111111111", "expiry": "12/26", "cvv": "123" }
Response 200 OK
{ "token": "tok_pci_eu_a1b2c3d4e5f6", "last_four": "1111", "brand": "visa", "expires_at": "2026-12-31" }
/v1/forward Scope: forward Request body
{ "token": "tok_pci_eu_a1b2c3d4e5f6", "target_url": "https://psp.eu/charge", "amount": 9900, "currency": "EUR" }
Response (van PSP, geproxied)
{ "status": "authorized", "transaction_id": "txn_9f8e7d6c", "amount": 9900, "currency": "EUR" }
Webhooks en meldingen
Wanneer iets gebeurt (token aangemaakt, betaling verstuurd, fout), sturen wij een real-time event naar uw endpoint. Elk bericht is ondertekend zodat u het server-side kunt verifiëren.
Als aflevering mislukt, proberen wij het tot 5 keer opnieuw met oplopende intervallen. U kunt ook handmatig opnieuw afspelen vanuit het dashboard binnen 72 uur.
Ondersteunde event types
token.created Nieuw token gegenereerd token.used Token verstuurd naar PSP token.expired Token bereikte zijn TTL token.deleted Token verwijderd op verzoek forward.success PSP retourneerde 2xx forward.failure PSP retourneerde fout Webhook payload-voorbeeld
your-server.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
} Handtekeningverificatie
Elke webhook bevat de X-PCI-Signature header. Bereken HMAC-SHA256 van de body met uw secret en vergelijk met de handtekening. Als ze niet overeenkomen, wijs het verzoek af.
SDK's en integratiemethoden
SDK's voor Node, Python en PHP, of hosted fields in iFrames. Kies wat bij uw stack past.
JavaScript SDK
npmimport PCIProxy from '@pci-proxy-eu/js';
const pci = new PCIProxy({
merchantId: 'mrc_xyz789'
});
const { token } = await pci.tokenize({
cardNumber: '4111...'
}); Python SDK
PyPIfrom pci_proxy_eu import Client
client = Client(
merchant_id="mrc_xyz789",
api_key="sk_live_..."
)
result = client.tokenize(
card_number="4111..."
) PHP SDK
Composeruse PCIProxyEU\Client;
$client = new Client(
merchantId: 'mrc_xyz789',
apiKey: 'sk_live_...'
);
$result = $client->tokenize([
'card_number' => '4111...'
]); Beveiligde iFrames voor checkout
Om SAQ A te behouden: kaartvelden worden gerenderd in onze iFrames. Kaartgegevens gaan nooit via uw 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) => {
// token only, never the card number
console.log(result.token);
}
});
</script> Betalingsgegevens
Kaartgegevens nooit op uw server
SAQ A
Minder PCI-belasting
CSS
Aanpasbare styling
Mobile
Responsive
Klaar om te integreren?
Lees wat een PCI Proxy is, verdiep u in tokenisatie of bekijk hoe ontwikkelaars het platform gebruiken.