Prerequisites
Before you begin, ensure you have full PCI DSS Level 1 certification, which is mandatory for handling raw card data.When to Use This ApproachRaw card processing is recommended for:
- Large enterprise merchants already PCI Level 1 certified.
- Payment processors operating under existing PCI compliance.
- High-volume businesses with existing PCI infrastructure.
- Systems where reduced latency is critical.
- Small to medium businesses without PCI compliance.
- New payment integrations.
- Cost-conscious merchants (compliance maintenance is expensive).
Step 1: Get an Access Token
Before you can process raw card payments, you must obtain a short-lived access token. This token, along with your API key, authenticates your requests to the raw card processing endpoint. Send aPOST request to the tokenization auth endpoint:
- Sandbox
- Production
access_token as the X-Skyflow-Authorization header value in the next step.
Step 2: Process the Payment
Send aPOST request with raw card data directly to the PCI-compliant endpoint. Include both authorization tokens from Step 1 in your request headers.
- Sandbox
- Production
For testing, use the card numbers and test data available in our Testing Data guide to ensure your integration works correctly before going live.
Required Headers
Both
Authorization and X-Skyflow-Authorization are required. The X-Skyflow-Authorization token is the JWT obtained from the authentication endpoint in Step 1 and is necessary for secure card data handling through Skyflow’s tokenization service.| Header | Description | Example |
|---|---|---|
Authorization | Your public API key | Token {{API_KEY_PUBLIC}} |
X-Skyflow-Authorization | JWT access token from Step 1 | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... |
Content-Type | Request content type | application/json |
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
operation_type | string | ✓ | Must be "payment" to process a payment |
amount | number | ✓ | Payment amount (e.g., 150.00) |
currency | string | ✓ | Currency code (e.g., "MXN" for Mexican Peso) |
customer | object | ✓ | Customer information containing name and email |
payment_method | object | ✓ | Payment method details including type and raw card fields |
client_reference | string | ✓ | Your unique reference for this transaction |
return_url | string | URL where customer returns after 3DS authentication |
Example Request
- cURL
- JavaScript
- Python
Step 3: Handle the Response
Always check thestatus field in your response and implement appropriate logic based on the status value received.
The table below details the fields returned in the response:
| Field | Type | Description |
|---|---|---|
id | string | Unique transaction identifier |
operation_type | string | Always "payment" |
status | string | Transaction status |
amount | decimal | Transaction amount |
currency | string | Currency code |
client_reference | string | Your reference identifier |
payment_id | integer | Internal payment ID |
transaction_id | integer | Internal transaction ID |
provider | string | Payment provider used |
created_at | string | ISO 8601 timestamp |
status_code | integer | HTTP status code |
next_action | object | Required actions (3DS, redirects) |
Next Steps
After implementing PCI-compliant raw card processing:- Set up webhooks for real-time payment status updates.
- Implement 3D Secure authentication for enhanced security.
- Review HTTP response codes for comprehensive error handling.
- Test your implementation using testing data.

