Skip to main content
This guide shows you how to process payments directly with raw card data without tokenization. This approach is designed for merchants who already have full PCI DSS Level 1 compliance and want to eliminate the multi-step tokenization process.
Availability RestrictionThis process is only available for clients who are fully PCI DSS compliant. You must maintain enterprise-grade security and handle raw card data according to all PCI DSS requirements.You must share your Attestation of Compliance (AOC) with Tonder before we activate production access to the raw card endpoints.

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.
It is not recommended for:
  • 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 a POST request to the tokenization auth endpoint:
curl -X POST https://stage.tonder.io/tokenization/auth \
  -H "Authorization: Token <YOUR_API_KEY>"
The server will respond with a JWT access token:
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
You will use this access_token as the X-Skyflow-Authorization header value in the next step.

Step 2: Process the Payment

Send a POST request with raw card data directly to the PCI-compliant endpoint. Include both authorization tokens from Step 1 in your request headers.
POST https://process-sandbox.tonder.io/raw-data
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.
HeaderDescriptionExample
AuthorizationYour public API keyToken {{API_KEY_PUBLIC}}
X-Skyflow-AuthorizationJWT access token from Step 1eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-TypeRequest content typeapplication/json

Request Parameters

ParameterTypeRequiredDescription
operation_typestringMust be "payment" to process a payment
amountnumberPayment amount (e.g., 150.00)
currencystringCurrency code (e.g., "MXN" for Mexican Peso)
customerobjectCustomer information containing name and email
payment_methodobjectPayment method details including type and raw card fields
client_referencestringYour unique reference for this transaction
return_urlstringURL where customer returns after 3DS authentication

Example Request

curl -X POST https://process-sandbox.tonder.io/raw-data \
  -H "Authorization: Token {{API_KEY_PUBLIC}}" \
  -H "X-Skyflow-Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{
    "operation_type": "payment",
    "amount": 150.00,
    "currency": "MXN",
    "customer": {
      "name": "Ana María Rodríguez",
      "email": "ana.rodriguez@email.com"
    },
    "payment_method": {
      "type": "CARD",
      "card_number": "4444444444444455",
      "cardholder_name": "Ana María Rodríguez",
      "cvv": "123",
      "expiration_year": "26",
      "expiration_month": "07"
    },
    "client_reference": "order-789",
    "return_url": "https://mystore.com/payment/return"
  }'

Step 3: Handle the Response

Always check the status field in your response and implement appropriate logic based on the status value received. The table below details the fields returned in the response:
FieldTypeDescription
idstringUnique transaction identifier
operation_typestringAlways "payment"
statusstringTransaction status
amountdecimalTransaction amount
currencystringCurrency code
client_referencestringYour reference identifier
payment_idintegerInternal payment ID
transaction_idintegerInternal transaction ID
providerstringPayment provider used
created_atstringISO 8601 timestamp
status_codeintegerHTTP status code
next_actionobjectRequired actions (3DS, redirects)
Validate id and status fieldsFor proper payment validation, you must check:
  • id is the unique transaction identifier — store this for future reference.
  • status is the current payment state — determines next actions.
Never rely on HTTP status codes alone for payment validation.

Next Steps

After implementing PCI-compliant raw card processing: