Process Transaction

Process both payments and withdrawals through a single API call. This unified endpoint handles all transaction types based on the `operation_type` field.

POST
/process/

Authorization

Authorization
Authorization<token>

Your public API key, with the word Token and a space in front of it. Example: Token 6534bc0a7e1f4d2b9c8e3a5f7b1d2c4e6f8a9b0c — that whole value is the header. Sending the key alone returns 401 'Authentication credentials were not provided'. In this playground you may paste just the key; the prefix is added for you.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/process/" \  -H "Content-Type: application/json" \  -d '{    "operation_type": "payment",    "amount": 150,    "currency": "MXN",    "customer": {      "name": "Ana María Rodríguez",      "email": "ana.rodriguez@email.com"    },    "payment_method": {      "type": "CARD",      "card_number": "9230-0892-4469-1474",      "cardholder_name": "c05d89b2-299c-4f93-b49a-42be00d3b64b",      "cvv": "d31f0da3-0ed3-4ad8-8b68-14c2669a99a7",      "expiration_month": "e401a32e-4174-424f-9688-727005f6a80e",      "expiration_year": "bd9ccc23-3d00-4109-9626-fc6581389063"    },    "client_reference": "order-789",    "return_url": "https://mystore.com/payment/return"  }'
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "withdrawal_id": "5a27414e-14a7-4e08-9823-6274a2900c69",
  "transfer_method": "SPEI",
  "operation_type": "payment",
  "status": "Pending",
  "amount": 0,
  "currency": "string",
  "client_reference": "string",
  "payment_method_type": "string",
  "payment_id": 0,
  "transaction_id": "string",
  "provider": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "status_code": 0,
  "next_action": {
    "redirect_to_url": {
      "url": "http://example.com",
      "return_url": "http://example.com",
      "verify_transaction_status_url": "string"
    },
    "display_qr_code": {
      "qr_string": "string",
      "amount": 0,
      "currency": "string",
      "expires_at": "2019-08-24T14:15:22Z",
      "verify_transaction_status_url": "string"
    },
    "display_bank_transfer": {
      "account_type": "string",
      "account_number": "string",
      "alias": "string",
      "holder_name": "string",
      "holder_tax_id": "string",
      "amount": 0,
      "currency": "string",
      "reference": "string",
      "expires_at": "2019-08-24T14:15:22Z",
      "verify_transaction_status_url": "string"
    }
  },
  "payment_instructions": {
    "reference": "string",
    "account_number": "string",
    "bank_name": "string",
    "amount": 0,
    "expires_at": "2019-08-24T14:15:22Z",
    "reference_code": "string",
    "barcode": "string",
    "store_name": "string",
    "expiration_date": "2019-08-24T14:15:22Z",
    "instructions": [
      "string"
    ],
    "voucher_pdf": "http://example.com"
  }
}
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "withdrawal_id": "5a27414e-14a7-4e08-9823-6274a2900c69",
  "transfer_method": "SPEI",
  "operation_type": "payment",
  "status": "Pending",
  "amount": 0,
  "currency": "string",
  "client_reference": "string",
  "payment_method_type": "string",
  "payment_id": 0,
  "transaction_id": "string",
  "provider": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "status_code": 0,
  "next_action": {
    "redirect_to_url": {
      "url": "http://example.com",
      "return_url": "http://example.com",
      "verify_transaction_status_url": "string"
    },
    "display_qr_code": {
      "qr_string": "string",
      "amount": 0,
      "currency": "string",
      "expires_at": "2019-08-24T14:15:22Z",
      "verify_transaction_status_url": "string"
    },
    "display_bank_transfer": {
      "account_type": "string",
      "account_number": "string",
      "alias": "string",
      "holder_name": "string",
      "holder_tax_id": "string",
      "amount": 0,
      "currency": "string",
      "reference": "string",
      "expires_at": "2019-08-24T14:15:22Z",
      "verify_transaction_status_url": "string"
    }
  },
  "payment_instructions": {
    "reference": "string",
    "account_number": "string",
    "bank_name": "string",
    "amount": 0,
    "expires_at": "2019-08-24T14:15:22Z",
    "reference_code": "string",
    "barcode": "string",
    "store_name": "string",
    "expiration_date": "2019-08-24T14:15:22Z",
    "instructions": [
      "string"
    ],
    "voucher_pdf": "http://example.com"
  }
}
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "withdrawal_id": "5a27414e-14a7-4e08-9823-6274a2900c69",
  "transfer_method": "SPEI",
  "operation_type": "payment",
  "status": "Pending",
  "amount": 0,
  "currency": "string",
  "client_reference": "string",
  "payment_method_type": "string",
  "payment_id": 0,
  "transaction_id": "string",
  "provider": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "status_code": 0,
  "next_action": {
    "redirect_to_url": {
      "url": "http://example.com",
      "return_url": "http://example.com",
      "verify_transaction_status_url": "string"
    },
    "display_qr_code": {
      "qr_string": "string",
      "amount": 0,
      "currency": "string",
      "expires_at": "2019-08-24T14:15:22Z",
      "verify_transaction_status_url": "string"
    },
    "display_bank_transfer": {
      "account_type": "string",
      "account_number": "string",
      "alias": "string",
      "holder_name": "string",
      "holder_tax_id": "string",
      "amount": 0,
      "currency": "string",
      "reference": "string",
      "expires_at": "2019-08-24T14:15:22Z",
      "verify_transaction_status_url": "string"
    }
  },
  "payment_instructions": {
    "reference": "string",
    "account_number": "string",
    "bank_name": "string",
    "amount": 0,
    "expires_at": "2019-08-24T14:15:22Z",
    "reference_code": "string",
    "barcode": "string",
    "store_name": "string",
    "expiration_date": "2019-08-24T14:15:22Z",
    "instructions": [
      "string"
    ],
    "voucher_pdf": "http://example.com"
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}

Examples by operation type

The example above is a tokenized card payment. The same endpoint covers the other cases: change operation_type and the method-specific fields.

SPEI payment

{
  "operation_type": "payment",
  "amount": 500.00,
  "currency": "MXN",
  "customer": { "name": "Carlos Eduardo López", "email": "carlos.lopez@empresa.mx" },
  "payment_method": { "type": "SPEI" },
  "client_reference": "invoice-456"
}

The full flow — payment reference, expiry and reconciliation — is in APM payments.

SPEI withdrawal

{
  "operation_type": "withdrawal",
  "amount": 20.00,
  "currency": "MXN",
  "client_reference": "payout-001",
  "transfer_method": "SPEI",
  "description": "Pago de comisiones",
  "beneficiary": {
    "account": "012969100000000110",
    "name": "Ana Maria Gonzalez",
    "rfc": "GOAN850315AB2",
    "institution": "40012",
    "email": "ana.gonzalez@email.com"
  },
  "metadata": {
    "latitude": "22.8870221",
    "longitude": "-109.911775",
    "order_reference": "ORD-001"
  },
  "fee_model": "01"
}

The response carries two identifiers: id is the transaction (use it with GET /transactions/{id}/) and withdrawal_id is the withdrawal (use it to approve it and to read its detail). A new withdrawal stays Pending until you approve it with POST /withdrawals/perform_action/. Approval, statuses, webhooks and test data are in Withdrawals.

Argentina QR payment

{
  "operation_type": "payment",
  "amount": 15000.00,
  "currency": "ARS",
  "customer": { "name": "Juan Pérez", "email": "juan.perez@email.com" },
  "payment_method": { "type": "qr", "apm_config": { "expires_in": 1800 } },
  "client_reference": "ORD-001",
  "metadata": { "external_id": "ORD-001" }
}

Bank transfers to a CVU ("type": "transfer") and payouts to a CBU, CVU or alias are on Argentina.

Card payment with External 3DS

If you authenticated the cardholder with your own 3DS provider, pass the result in a top-level threeDomainSecure object (and the network in payment_method.card_brand). Tonder charges with it — no challenge. Account enablement required; Direct API only.

{
  "operation_type": "payment",
  "amount": 150.00,
  "currency": "MXN",
  "customer": { "name": "Jane Doe", "email": "jane@testuser.com" },
  "payment_method": {
    "type": "CARD",
    "card_number": "9230-0892-4469-1474",
    "cardholder_name": "c05d89b2-299c-4f93-b49a-42be00d3b64b",
    "cvv": "d31f0da3-0ed3-4ad8-8b68-14c2669a99a7",
    "expiration_month": "e401a32e-4174-424f-9688-727005f6a80e",
    "expiration_year": "bd9ccc23-3d00-4109-9626-fc6581389063",
    "card_brand": "mastercard"
  },
  "threeDomainSecure": {
    "ucaf": "kCO52e75N318oAB3MPZU6EhB2Td6",
    "eci": "02",
    "directoryServerTransactionID": "9e8c4ff6-23d9-4fba-8446-6e8e9d13f42e",
    "specificationVersion": "2.2.0"
  },
  "client_reference": "ORD-001",
  "return_url": "https://tonder.io"
}

Fields, ECI rules, placement and errors are on External 3DS.

Chile withdrawal

Withdrawals in Chile use transfer_method: "CLP_TRANSFER", currency: "CLP", a whole-peso amount and a Chilean beneficiary (account, account_type, bank institution id and RUT). The full request is on Withdrawals in Chile.

Apple Pay payments

To charge an Apple Pay token, set payment_method.type to "APPLE_PAY" and send the token in payment_method.token.

There are two ways to integrate it. Choose the one that fits your business:

  • Managed: Tonder validates the merchant and shows the button with the Web SDK. This flow doesn't need the apm_config field.
  • Bring Your Own: you use your own Merchant ID. You send the token with apm_config.apple_pay_integration: "V2". Guide: Bring Your Own.
FieldDescription
payment_method.typeAPPLE_PAY
payment_method.tokenThe complete PKPaymentToken object Apple Pay returns. It must include paymentData
payment_method.apm_config.apple_pay_integrationRequired on Bring Your Own. Send "V2".

Response when the mode doesn't match (HTTP 400):

{
  "error": {
    "code": "apple_pay_integration_mismatch",
    "message": "apm_config.apple_pay_integration does not match the Apple Pay integration mode enabled for this business",
    "type": "bad_request"
  }
}

Payment not authorized (HTTP 402):

{
  "error": {
    "code": "payment_declined",
    "message": "The payment could not be authorized",
    "type": "business_error",
    "details": { "reason": "upstream_decline" }
  },
  "request_id": "<id>"
}

For the complete request example and your business setup, see Bring Your Own.

Was this page helpful?