Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Get Payers

The Payers endpoint returns available payout providers for a specific country and currency. Each payer has specific requirements for beneficiary information, supported transaction types, and amount limits.


Endpoint

PropertyValue
MethodGET
URL/api/v1/pay-out/payers
AuthenticationBasic Auth (Business Key + Secret)

Query Parameters

ParameterTypeRequiredDescription
country_iso_codestringRecommendedISO-3 country code to filter payers (e.g., BRA, MEX)
currencystringRecommendedISO-4217 currency code (e.g., BRL, MXN)
service_idintegerNoFilter by service type (1=Cash, 2=Bank, 3=Wallet)
per_pageintegerNoResults per page (default: 100, max: 500)
pageintegerNoPage number for pagination

Request Example

Terminal window
curl -X GET "https://api.cashela.com/api/v1/pay-out/payers?country_iso_code=BRA&currency=BRL" \
-H "Authorization: Basic $(echo -n 'your_key:your_secret' | base64)" \
-H "Accept: application/json"

Response Example

{
"success": true,
"data": {
"total": 45,
"per_page": 100,
"current_page": 1,
"last_page": 1,
"data": [
{
"id": 45,
"name": "BANCO SANTANDER BRASIL S.A",
"code": "santander_br",
"currency": "BRL",
"country_iso_code": "BRA",
"service": {
"id": 2,
"name": "BankAccount"
},
"logo_url": "https://assets.cashela.com/payers/santander.png",
"transaction_types": [
{
"transaction_type": "C2C",
"name": "Customer to Customer",
"minimum_amount": 10.00,
"maximum_amount": 50000.00,
"precision": 2,
"required_sending_entity_fields": [
"first_name",
"last_name",
"date_of_birth",
"id_type",
"id_number",
"country_iso_code",
"address"
],
"required_receiving_entity_fields": [
"first_name",
"last_name",
"id_number",
"email",
"msisdn"
],
"credit_party_identifiers_accepted": [
{
"key": "bank_account_number",
"description": "Bank account number",
"regex": "^[0-9]{5,20}$",
"required": true
},
{
"key": "branch_number",
"description": "Bank branch code (agência)",
"regex": "^[0-9]{4}$",
"required": true
},
{
"key": "bank_account_type",
"description": "Account type",
"allowed_values": ["CHECKING", "SAVINGS"],
"required": true
}
],
"required_documents": [],
"purpose_of_remittance_values_accepted": [
"FAMILY_SUPPORT",
"EDUCATION",
"MEDICAL",
"SAVINGS",
"TRAVEL",
"GOODS_SERVICES"
]
}
],
"estimated_delivery": {
"minimum_hours": 0,
"maximum_hours": 24,
"description": "Same day to next business day"
},
"cut_off_time": "16:00",
"cut_off_timezone": "America/Sao_Paulo"
},
{
"id": 78,
"name": "PIX Instant Transfer",
"code": "pix_br",
"currency": "BRL",
"country_iso_code": "BRA",
"service": {
"id": 2,
"name": "BankAccount"
},
"transaction_types": [
{
"transaction_type": "C2C",
"name": "Customer to Customer",
"minimum_amount": 1.00,
"maximum_amount": 100000.00,
"credit_party_identifiers_accepted": [
{
"key": "pix_key",
"description": "PIX key (CPF, email, phone, or random key)",
"regex": "^.{1,77}$",
"required": true
}
]
}
],
"estimated_delivery": {
"minimum_hours": 0,
"maximum_hours": 0,
"description": "Instant (24/7)"
}
}
]
},
"message": "Payers retrieved successfully"
}

Response Fields

Payer Object

FieldTypeDescription
idintegerUnique payer identifier. Use this in quotation and transaction requests
namestringDisplay name of the payer
codestringInternal code identifier
currencystringCurrency supported (ISO-4217)
country_iso_codestringCountry served (ISO-3)
serviceobjectService type information
logo_urlstringURL to payer logo for display
transaction_typesarraySupported transaction types with requirements
estimated_deliveryobjectDelivery time estimates
cut_off_timestringDaily processing cutoff (local time)
cut_off_timezonestringTimezone for cutoff time

Transaction Type Object

FieldTypeDescription
transaction_typestringType code: C2C, C2B, B2C, B2B
namestringHuman-readable type name
minimum_amountnumberMinimum transaction amount
maximum_amountnumberMaximum transaction amount
precisionintegerDecimal precision for amounts
required_sending_entity_fieldsarrayFields required for sender KYC
required_receiving_entity_fieldsarrayFields required for beneficiary KYC
credit_party_identifiers_acceptedarrayBank/wallet account details required
required_documentsarrayDocument uploads required (if any)
purpose_of_remittance_values_acceptedarrayValid purpose codes for this payer

Credit Party Identifier Object

FieldTypeDescription
keystringField name to use in transaction request
descriptionstringHuman-readable field description
regexstringValidation pattern (if applicable)
allowed_valuesarrayValid values (if applicable)
requiredbooleanWhether field is mandatory

Service Types

Service IDNameDescription
1CashCash pickup at retail locations
2BankAccountBank account transfer
3MobileWalletMobile money or digital wallet
4CardDepositDebit/credit card deposit

Transaction Types

CodeDescription
C2CCustomer to Customer - Personal remittance
C2BCustomer to Business - Bill payment, merchant payment
B2CBusiness to Customer - Payroll, disbursements
B2BBusiness to Business - Supplier payments

Usage Example

Building a Dynamic Beneficiary Form

Use the payer requirements to build your beneficiary data collection form:

async function buildBeneficiaryForm(payerId) {
// 1. Fetch payer details
const response = await api.getPayers({ payer_id: payerId });
const payer = response.data.data[0];
// 2. Get required fields for C2C transaction
const txType = payer.transaction_types.find(t => t.transaction_type === 'C2C');
// 3. Build form fields
const formFields = [];
// Add credit party identifiers (bank account details)
for (const identifier of txType.credit_party_identifiers_accepted) {
formFields.push({
name: identifier.key,
label: identifier.description,
type: identifier.allowed_values ? 'select' : 'text',
options: identifier.allowed_values || null,
validation: identifier.regex,
required: identifier.required
});
}
// Add beneficiary KYC fields
for (const field of txType.required_receiving_entity_fields) {
formFields.push({
name: `beneficiary.${field}`,
label: formatFieldLabel(field),
type: getFieldType(field),
required: true
});
}
return formFields;
}
function formatFieldLabel(field) {
const labels = {
'first_name': 'First Name',
'last_name': 'Last Name',
'id_number': 'Document Number',
'email': 'Email Address',
'msisdn': 'Phone Number'
};
return labels[field] || field.replace(/_/g, ' ');
}

Filtering by Service Type

// Get only bank transfer payers for Mexico
const bankPayers = await api.getPayers({
country_iso_code: 'MEX',
currency: 'MXN',
service_id: 2 // BankAccount
});
// Get only cash pickup locations for Colombia
const cashPayers = await api.getPayers({
country_iso_code: 'COL',
currency: 'COP',
service_id: 1 // Cash
});

Best Practices

  1. Cache payer list – Refresh every few hours rather than on each request

  2. Validate before submitting – Use the regex patterns and allowed values provided

  3. Show delivery estimates – Display estimated delivery time to users

  4. Handle cutoff times – Warn users about processing cutoffs

  5. Support multiple transaction types – Some payers support both C2C and B2C

function shouldWarnAboutCutoff(payer) {
if (!payer.cut_off_time) return false;
const now = new Date();
const [hours, minutes] = payer.cut_off_time.split(':').map(Number);
// Convert to payer's timezone
const payerTime = new Date(now.toLocaleString('en-US', {
timeZone: payer.cut_off_timezone
}));
const cutoffMinutes = hours * 60 + minutes;
const currentMinutes = payerTime.getHours() * 60 + payerTime.getMinutes();
// Warn if within 30 minutes of cutoff
return (cutoffMinutes - currentMinutes) <= 30 && (cutoffMinutes - currentMinutes) > 0;
}

Common Errors

HTTP CodeError CodeDescription
400INVALID_COUNTRYInvalid or unsupported country code
400INVALID_CURRENCYInvalid or unsupported currency code
401UNAUTHORIZEDInvalid authentication credentials
404NO_PAYERS_FOUNDNo payers available for the specified filters