Payments

Raw Card Processing

The `/raw-data` endpoint for PCI DSS Level 1 merchants.

Process a payment by sending untokenized card data. It lives on its own domain and on a different route from /process/, and is only enabled for certified businesses.

Requires PCI DSS Level 1. You must hold a current certification and share your Attestation of Compliance (AOC) with Tonder before production access is enabled. If you don't have it, use the tokenized flow — it covers the same use case with a reduced PCI scope (SAQ A / SAQ A-EP).

Endpoint

EnvironmentURL
SandboxPOST https://process-sandbox.tonder.io/raw-data
ProductionPOST https://process.tonder.io/raw-data

It is not under Tonder's /api/v1/ and does not accept browser calls. Test it from your terminal, Postman or your backend.

Headers

HeaderDescription
AuthorizationYour API key, prefixed with Token.
X-Skyflow-AuthorizationThe access_token (JWT) from GET /api/v1/tokenization/auth/. It's short-lived — request it right before processing.
Content-Typeapplication/json.

Request body

FieldTypeDescription
operation_typestring"payment" to process a payment.
amountnumberAmount in decimal format (e.g. 150.00).
currencystringMXN, CLP or USD. Mexico and Chile use the same flow; only this value changes.
customerobjectThe customer's name and email.
payment_methodobjecttype: "CARD" plus raw card_number, cardholder_name, cvv, expiration_month, expiration_year.
client_referencestringYour unique reference for this transaction.
return_urlstringWhere the customer returns after finishing (for example, after a 3DS challenge).

Example

POST
curl -X POST "https://process-sandbox.tonder.io/raw-data" \
  -H "Authorization: Token YOUR_TONDER_API_KEY" \
  -H "X-Skyflow-Authorization: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "operation_type": "payment",
    "amount": 150.00,
    "currency": "MXN",
    "customer": {
      "name": "Ozzy Osbourne",
      "email": "ozzy@testuser.com"
    },
    "payment_method": {
      "type": "CARD",
      "card_number": "4000000000000077",
      "cardholder_name": "Ozzy Osbourne",
      "cvv": "123",
      "expiration_month": "07",
      "expiration_year": "26"
    },
    "client_reference": "ORD-001",
    "return_url": "https://tonder.io"
  }'

Response

Same shape as a normal /process/ payment: id, status, amount, currency, client_reference and the timestamps.

Always verify the final status at GET /api/v1/transactions/{id}/ — it's the source of truth. Don't rely on the HTTP code or the initial response alone.

Next steps

Was this page helpful?

On this page