Skip to main content

Create a PayOUT payment

PayOUT allows a merchant to send payments to beneficiaries through Orkestral. The platform validates the request, sends the payment to the specified Payment Service Provider (PSP), and tracks the transaction until its final state.

Before you start

You need:

  • an active Orkestral account;
  • a registered and configured PSP that supports PayOUT;
  • an OAuth/JWT access token;
  • the merchant UUID (merchantId);
  • a public HTTPS URL for notifications;
  • validated beneficiary identity and bank details.

Environments

EnvironmentBase URL
QAShttps://api-qas.orkestralpay.com.br

Ask the Orkestral team for the production URL and credentials. Do not reuse tokens, PSP credentials, or beneficiary data across environments.

Authentication

Send the token and source IP address in the headers:

Authorization: Bearer <access_token>
Content-Type: application/json
IP: <source_ip_address>

Keep tokens and credentials in backend services only. Never expose them in a frontend, repository, or log.

Endpoint

POST /transaction/payout/{merchantId}

The psp field selects the provider. Unlike PayIN, this selection is not made by a payment flow.

Request fields

FieldTypeRequiredDescription
transaction_idUUIDYesUnique identifier assigned by the merchant.
amountintegerYesPositive value in the currency's minor unit. Example: 100 = 1.00.
currencystringYesUppercase currency code.
namestringYesBeneficiary's first name.
last_namestringYesBeneficiary's last name.
emailstringConditionalBeneficiary email required by some PSPs.
birth_datestringConditionalBirth date in YYYY-MM-DD format.
documentstringYesBeneficiary document number.
document_typestringYesDocument type accepted by the country and PSP.
bank_namestringConditionalBank name.
bank_codestringConditionalBank code.
agency_codeintegerConditionalBranch code.
agency_digitintegerConditionalBranch check digit.
account_codestringConditionalAccount number.
account_digitstringConditionalAccount check digit.
account_typestringConditionalAccount type accepted by the PSP.
pspstringYesKushki, Payvalida, WePayments, or PayU.
pix_keystringConditionalPIX key. When present, the payment is processed as PIX.

Conditional fields vary by PSP, country, and method. Confirm the bank catalog enabled for your agreement before sending a payment.

Bank transfer

For a bank transfer, omit pix_key and send the bank details required by the PSP:

curl --request POST \
--url "https://api-qas.orkestralpay.com.br/transaction/payout/<merchantId>" \
--header "Authorization: Bearer <access_token>" \
--header "Content-Type: application/json" \
--header "IP: 192.0.2.10" \
--data '{
"transaction_id": "123e4567-e89b-12d3-a456-426614174000",
"amount": 10000,
"currency": "COP",
"name": "María",
"last_name": "García",
"email": "maria.garcia@example.com",
"birth_date": "1990-01-01",
"document": "123456789",
"document_type": "CC",
"bank_name": "BANCOLOMBIA",
"bank_code": "000007",
"agency_code": 1234,
"agency_digit": 5,
"account_code": "987654321",
"account_digit": "0",
"account_type": "CA",
"psp": "Kushki"
}'

Replace identifiers, beneficiary data, bank, IP address, and credentials with values from your environment.

PIX

PIX PayOUT is available with WePayments. Send a valid pix_key; bank fields may be omitted:

{
"transaction_id": "123e4567-e89b-12d3-a456-426614174001",
"amount": 10000,
"currency": "BRL",
"name": "João",
"last_name": "Silva",
"email": "joao.silva@example.com",
"document": "52998224725",
"document_type": "CPF",
"psp": "WePayments",
"pix_key": "joao.silva@example.com"
}
caution

Do not send a production PIX key during testing. Use only beneficiaries and keys provided for the QAS environment.

PSP rules

PSPReference countries and currenciesMain documentsMain method and rules
KushkiCO/COP, CL/CLP or UF, EC/USD, PE/PEN or USD, MX/MXNCC, NIT, CE, TI, PP, RUC, CURP, RFC, RUT, DNI, PAS, CITransfer; requires bank, account, and account type compatible with the country.
PayvalidaCO/COP, GT/GTQ, PE/PENCO: CC, CE, PS, TI; GT: DPI; PE: DNI, CETransfer; email, bank, account number, and account type are required.
WePaymentsBR/BRLCPF, CNPJPIX or transfer; document must be valid. Transfers require complete bank details.
PayUCO/COPTypes accepted by the PayU agreementTransfer; requires birth_date, bank_code, account_code, and account_type.

Account types

PSPValues
KushkiCC, CA, CB, TD, NC, CV, DE, CM, depending on the country
PayvalidaColombia and Peru: Ahorro, Corriente; Guatemala: Ahorro, Monetaria
WePaymentsUse the value enabled by your agreement, such as CHECKING or SAVINGS; confirm the catalog with the Orkestral team
PayUUse the account type accepted by the merchant's PayU configuration

For Kushki in Peru, accounts at bank 002 use 13 digits for CC and 14 for CA; accounts at other banks use 20 digits. For PayU, bank_code must be an enabled Colombian bank code. Ask the Orkestral team for the current catalog when a bank is unavailable in the environment.

How to fill in and test bank details

The bank_code value does not use the same format for every PSP. Send it as a string to preserve leading zeros.

Kushki

Orkestral forwards bank_code to Kushki as BankId. The identifier varies by country, so do not reuse a code from another country merely because the digits look similar.

In Colombia, the PSP reference uses six digits. Useful QAS codes include:

bank_codeInstitution
000001Banco de Bogotá
000002Banco Popular
000007Bancolombia
000013BBVA Colombia
000051Davivienda
000052Banco AV Villas
000507Nequi

In Peru, BankId also determines the length of account_code:

BankIdaccount_typeaccount_code length
002CC13 digits
002CA14 digits
Other than 002Any accepted type20 digits
warning

Peruvian BankId 002 is not Colombian code 000002 (Banco Popular). Country, currency, document, bank, account type, and account length must belong to the same test scenario.

Payvalida

For Payvalida, bank_code receives the institution name from the country's catalog, not a numeric Kushki code. Use the exact spelling returned for the merchant. The reference lists:

  • Peru: BBVA CONTINENTAL, INTERBANK, BCP, and SCOTIABANK PERU;
  • Guatemala: BAM, BANCO AZTECA, BANCO DE AMERICA CENTRAL, BANCO DE ANTIGUA, BANCO DE CREDITO, BANCO DE DESARROLLO RURAL, BANCO DE GUATEMALA, BANCO DE LOS TRABAJADORES, BANCO FICOHSA, BANCO GYT CONTINENTAL, BANCO INDUSTRIAL, BANCO INMOBILIARIO, BANCO INTERNACIONAL, BANCO INV, BANCO PROMERICA DE GUATEMALA, BANCO PROMERICA, CITIBANK SUCURSAL GUATEMALA, CREDITO HIPOTECARIO NACIONAL, and VIVIBANCO;
  • Colombia: use the exact name enabled in the merchant catalog, such as BANCOLOMBIA, BANCO DE BOGOTA, DAVIVIENDA, NEQUI, or BBVA.

Match the bank with the country's account type: Ahorro or Corriente for Colombia and Peru; Ahorro or Monetaria for Guatemala.

:::tip Minimum QAS checklist

  1. Confirm the country, currency, and PSP configured for the merchant.
  2. Get bank_code from the same environment's catalog and keep it as a string.
  3. Select a document_type and account_type accepted in that country.
  4. For Kushki in Peru, adjust account_code according to BankId before sending the request.
  5. Use a new transaction_id for each scenario and follow it to a final status.

:::

Glossary

An abbreviation's meaning depends on the field in which it is sent. For example, CC means identity document in document_type, but checking account in account_type.

Document types

AbbreviationMeaning
CCIdentity document
NITColombian tax identification number
CEForeign resident card in Colombia or Peru
TIColombian identity card
PPPassport
RUCTax identification number in Ecuador or Peru
CURPMexican Unique Population Registry Code
RFCMexican Federal Taxpayer Registry
RUTChilean Unique Tax Registry
DNIPeruvian National Identity Document
PASPassport in Peru or Ecuador
CIEcuadorian identity card
PSPassport, as named by Payvalida in Colombia
DPIGuatemalan Personal Identification Document
CPFBrazilian Individual Taxpayer Registry
CNPJBrazilian National Registry of Legal Entities

Kushki account types

AbbreviationMeaning
CCChecking account in Colombia, Chile, and Peru
CASavings account in Colombia, Chile, and Peru
CBCLABE account, Mexico only
TDDebit card, Mexico only
NCMobile phone number, Mexico only
CVSight account in Chile
DEElectronic deposit in Colombia
CMMaster account in Peru
info

Available combinations depend on the agreement and credentials registered for the merchant. A listed currency is not necessarily enabled for every account.

Success response

An accepted request returns 200 OK. Optional fields vary by PSP:

{
"id": "123e4567-e89b-12d3-a456-426614174000",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"amount": 10000,
"currency": "COP",
"payment_method": "TRANSFER",
"status": "WAITING_PSP_PAYMENT",
"custom_code": "123e4567-e89b-12d3-a456-426614174000",
"created_date": "2026-07-31T15:00:00",
"country": "CO",
"psp_information": {
"psp_id": "<psp_uuid>",
"psp_name": "Kushki"
},
"psp_transaction_identification": "<psp_transaction_id>"
}

Store id and psp_transaction_identification for reconciliation. WAITING_PSP_PAYMENT means the PSP received the request; it does not confirm that the beneficiary has received the funds.

PayOUT statuses

StatusMeaning
WAITING_PSP_PAYMENTThe payment was sent and awaits PSP confirmation.
SETTLEDThe PSP confirmed settlement.
DENIEDThe PSP denied the payment.
ERRORA validation, configuration, or processing failure occurred.

Webhooks

Register the merchant's Notification URL to receive status changes. Orkestral sends a PATCH request to the registered URL:

PATCH <notification_url>
Content-Type: application/json
IP: <notifier_service_address>
{
"status": {
"paymentStatusId": 6,
"name": "SETTLED"
},
"message": "Payment settled"
}

Return an HTTP 2xx response promptly and process notifications idempotently. The IP header is not a cryptographic signature and must not be the only way to authenticate the source.

See Secret Key and Notification URL for configuration and security guidance.

Error handling

HTTPCommon situationRecommended action
400Invalid field or unsupported PSP combinationFix the payload before retrying.
401Missing, invalid, or expired tokenObtain a valid token.
403Credential cannot access the resourceCheck merchant permissions.
404Merchant, PSP, or configuration not foundCheck the environment and registrations.
409transaction_id already usedReconcile the original request.
422Business rule or invalid PSP credentialReview currency, beneficiary, bank, and configuration.
5xxTemporary failureQuery the transaction before retrying and use backoff.

Do not retry a PayOUT with a different transaction_id after a timeout or 5xx until you confirm whether the first request was processed. An incorrect retry may create a duplicate payment.

Security and best practices

  • Validate the beneficiary, document, bank, account, currency, and amount;
  • Use a unique transaction_id and retain it for reconciliation;
  • Restrict tokens and credentials to backend services;
  • Do not log tokens, full documents, accounts, or PIX keys;
  • Use TLS and valid HTTPS certificates;
  • Treat the initial response as asynchronous and wait for a final state;
  • Validate and process webhooks idempotently;
  • Keep QAS and production data and credentials separate.