Mexico

Detail for transaction processing in Mexico.

Fintoc (Bank Transfer)

Create a payout to a Mexican bank account through Fintoc.

Request parameters

Each object in the array accepts the following fields.

AttributeData typeMandatoryNotes
order_idString [max_length: 255]YesPayment order identification.
credit_noteString [max_length: 255]YesUnique code per merchant. Only letters, numbers, - and _ are accepted.
account_idString [max_length: 255] — exactly 18 digitsYesBeneficiary CLABE.
account_typeString [max_length: 255]YesSend clabe. Any other value is rejected at dispatch time.
vat_idString [max_length: 255]YesBeneficiary identification number. Must not be empty.
vat_id_typeString [max_length: 10]Nocurp or ine. Case-insensitive.
nameString [max_length: 255]YesBeneficiary full name.
amountDecimalYesAmount in MXN. Must be greater than zero. Send at most two decimal places.
subjectString [max_length: 255]YesFree use. Example: PAGO POR SERVICIOS.
bank_detailString [max_length: 255]YesFree use. Example: PAGO ALPS MEXICO.
channelString [max_length: 255]YesFree use. Example: Transferencia.
user_emailString [max_length: 255]YesMust be a valid address in the format [email protected].
phone_numberString [max_length: 255]YesBeneficiary contact number.
bankIntegerYesALPS bank ID, obtained from GET /banks/?country=MX.
currencyIntegerNoID from GET /currencies/. Only MXN is accepted for Mexico. When omitted, the MXN currency configured for your Mexican account is applied.
extra_dataObjectNoOptional metadata.
📘

transfer_status is ignored on creation

Every transaction is always created with status 1 (in process), regardless of the value you send.


Mexico-specific rules

Account number (CLABE)

account_id must be the beneficiary's 18-digit CLABE. ALPS removes spaces and hyphens before validating the length, so 0191 2221 9004 3011 56 and 019122219004301156 are equivalent.

Any value that is not exactly 18 characters after that clean-up is rejected at creation time with a length [account] error.

Currency and amount

Only MXN is accepted for Mexico. You may omit currency and let ALPS apply the MXN currency configured for your account, or send its numeric ID from GET /currencies/.

amount is expressed in pesos, not centavos: send 1500.5 for $1,500.50 MXN. ALPS converts the value to centavos before dispatch.

📘

Send at most two decimal places

The conversion to centavos truncates anything beyond the second decimal. 10.999 is dispatched as $10.99, not $11.00. Round on your side before submitting.

Two amount limits apply at creation time:

  • The amount must be greater than zero.
  • Amounts that exceed the equivalent of 7,000 USD require a KYC validation and are rejected. Contact [email protected] to raise the limit.

Bank

bank is the numeric ALPS bank ID, not the SPEI institution code. Retrieve the catalogue for Mexico with GET /banks/?country=MX; the response includes both the ALPS id you must send and the SPEI institution codes for reference.

📘

Bank IDs are assigned per environment

The id of a given bank is not guaranteed to be identical in sandbox and production. Resolve the ID from GET /banks/?country=MX in each environment rather than hard-coding it.

Transfer comment

If you send extra_data.comment, must not be an empty string. ALPS adds its own internal keys to extra_data when processing the transaction, so do not assume the object you sent is returned unchanged.

"extra_data": { "comment": "Retiro de saldo" }

Request example

curl --location 'https://uat-api.alps.cl/api/transactions/' \
--header 'Authorization: ALPS {TOKEN}' \
--header 'Content-Type: application/json' \
--data-raw '[{
    "order_id": "ORD-MX-001",
    "credit_note": "ORD-MX-001",
    "account_id": "019122219004301156",
    "account_type": "clabe",
    "vat_id": "PEGJ850315HDFRRN04",
    "vat_id_type": "curp",
    "name": "JUAN PEREZ GARCIA",
    "amount": 1500.5,
    "subject": "PAGO POR SERVICIOS",
    "bank_detail": "PAGO ALPS MEXICO",
    "channel": "Transferencia",
    "user_email": "[email protected]",
    "phone_number": "+525512345678",
    "bank": "{BANK_ID}"
}]'
import requests

url = "https://uat-api.alps.cl/api/transactions/"

headers = {
    "Authorization": "ALPS {TOKEN}",
    "Content-Type": "application/json",
}

payload = [
    {
        "order_id": "ORD-MX-001",
        "credit_note": "ORD-MX-001",
        "account_id": "019122219004301156",
        "account_type": "clabe",
        "vat_id": "PEGJ850315HDFRRN04",
        "vat_id_type": "curp",
        "name": "JUAN PEREZ GARCIA",
        "amount": 1500.5,
        "subject": "PAGO POR SERVICIOS",
        "bank_detail": "PAGO ALPS MEXICO",
        "channel": "Transferencia",
        "user_email": "[email protected]",
        "phone_number": "+525512345678",
        "bank": "{BANK_ID}",
    }
]

response = requests.post(url, headers=headers, json=payload)

print(response.text)
const myHeaders = new Headers();
myHeaders.append("Authorization", "ALPS {TOKEN}");
myHeaders.append("Content-Type", "application/json");

const raw = JSON.stringify([
  {
    "order_id": "ORD-MX-001",
    "credit_note": "ORD-MX-001",
    "account_id": "019122219004301156",
    "account_type": "clabe",
    "vat_id": "PEGJ850315HDFRRN04",
    "vat_id_type": "curp",
    "name": "JUAN PEREZ GARCIA",
    "amount": 1500.5,
    "subject": "PAGO POR SERVICIOS",
    "bank_detail": "PAGO ALPS MEXICO",
    "channel": "Transferencia",
    "user_email": "[email protected]",
    "phone_number": "+525512345678",
    "bank": "{BANK_ID}"
  }
]);

const requestOptions = {
  method: "POST",
  headers: myHeaders,
  body: raw,
  redirect: "follow"
};

fetch("https://uat-api.alps.cl/api/transactions/", requestOptions)
  .then((response) => response.text())
  .then((result) => console.log(result))
  .catch((error) => console.error(error));
📘

Replace {BANK_ID} before running the example

{BANK_ID} is a lookup placeholder, not a literal value. Retrieve the ALPS bank ID for the beneficiary's institution from GET /banks/?country=MX in the environment you are calling.

Successful response — 200 OK

{
  "data": [
    {
      "id": 104762,
      "payroll": 2851,
      "order_id": "ORD-MX-001",
      "credit_note": "ORD-MX-001",
      "account_id": "019122219004301156",
      "account_type": "clabe",
      "vat_id": "PEGJ850315HDFRRN04",
      "vat_id_type": "curp",
      "name": "JUAN PEREZ GARCIA",
      "amount": 1500.5,
      "subject": "PAGO POR SERVICIOS",
      "bank_detail": "PAGO ALPS MEXICO",
      "channel": "Transferencia",
      "user_email": "[email protected]",
      "phone_number": "+525512345678",
      "created_at": "13-08-2026 09:41:12",
      "updated_at": "13-08-2026 09:41:12",
      "transfer_status": 1,
      "transfer_status_description": "in process",
      "currency": 7,
      "currency_code": "MXN",
      "bank_id": 1234,
      "bank_name": "BBVA MEXICO",
      "fee": 0,
      "tax": 0
    }
  ]
}
📘

Illustrative values. id, payroll, currency and bank_id are assigned by the platform and differ per environment. Fields with a null or empty value are omitted from the response, so the exact set of keys varies by transaction.

Error codes

CodeDescription
200: OKThe request was processed. The response contains the created transactions in data, and an errors array if part of the batch was rejected.
400: Bad requestThe payload has a format, parameter or business-rule error. The response body details each rejected transaction.
403: ForbiddenThe authenticated user does not have the profile required to create payouts.
500: Internal server errorUnexpected server-side condition. Retry later; if it persists, contact support.