Overview
Contro provides two methods to access sensitive card data (PAN, CVV, expiry date). The right choice depends on your PCI DSS compliance status and how you want to handle card data.Card data is highly sensitive and regulated. Not every organization is permitted to store or process this information directly. Choose the method that matches your compliance posture.
Decision flowchart
Methods compared
| Aspect | Direct API | Embedded widget |
|---|---|---|
| PCI DSS required | Yes (SAQ-D) | No - reduced scope (SAQ-A) |
| Card data touches your servers | Yes (RSA-encrypted) | No |
| UI customization | Full control - you build the UI | CSS stylesheet on Contro-hosted widget |
| Implementation effort | Higher - key management + decryption | Lower - embed an iframe |
| Best for | Backend systems, batch operations, custom UIs | End-user card reveal UIs |
| Endpoint | GET /partner/cards/{id}/reveal | POST /partner/cards/{id}/reveal-html |
Direct API
Best for: Organizations with PCI DSS compliance that need card data on their servers - backend processing, batch operations, or fully custom card display UIs. How it works:- Upload your RSA public key to Contro
- Call the reveal endpoint
- Decrypt the RSA-encrypted response with your private key
- Use the card data however you need
Direct API guide
Full setup: key generation, upload, API call, and decryption examples
Embedded widget
Best for: Organizations that want to show card data to end-users without handling sensitive data on their servers. No PCI DSS certification needed. How it works:- Configure allowed origins in your dashboard settings
- Generate a short-lived, single-use signed URL via API
- Embed the URL in an iframe - Contro renders the card data
- Optionally apply custom CSS for branding
Embedded widget guide
Full setup: origin configuration, URL generation, iframe embedding, and styling
Security
Both methods are designed with security as a default:- Direct API: RSA-4096 encryption with OAEP-SHA256. Card data is encrypted before leaving Contro’s servers.
- Embedded widget: Single-use tokens, 60-second expiry,
frame-ancestorsCSP restricted to your allowed origins. - Sandbox testing: Both methods work with
sk_test_keys using test card data - no real card data is exposed during development.
Next steps
- Determine your PCI status - if unsure, start with the embedded widget for faster integration
- Set up sandbox testing - both methods return test data with
sk_test_API keys - Configure settings - upload your RSA key or set allowed origins in https://partner.contro.me/settings