Paying Providers - Overview

Understanding PAYOUT orders and provider payments

Paying Providers (PAYOUT)

Learn how to send payments from your virtual balance to external bank accounts.

What is PAYOUT?

PAYOUT is the order type used to send funds from your virtual balance account to external bank accounts (providers, vendors, contractors, etc.).


Use Cases

Vendor Payments

Pay suppliers and vendors for goods and services

Contractor Payouts

Send payments to freelancers and contractors

Refunds

Return payments to customers

Marketplace Settlements

Pay sellers on your marketplace platform


How It Works

High-Level Flow

1

Check your virtual balance

Ensure you have sufficient funds

2

Create provider contact

Store provider information and bank account

3

Create PAYOUT order

Specify amount and destination bank account

4

Funds are debited

Money is immediately reserved from your virtual account

5

Bank transfer initiated

Koywe initiates transfer to providerโ€™s bank

6

Provider receives funds

Settlement time varies by country (instant to 24 hours)

7

You receive confirmation

Webhook notification when transfer completes

Detailed Flow Diagram


Prerequisites

Before making payouts:

Required:

  • โœ… Sufficient funds in virtual account
  • โœ… Provider contact created
  • โœ… Provider bank account linked
  • โœ… Bank account details verified

Critical: Always check your virtual account balance before creating a PAYOUT order. Orders will fail if you have insufficient funds.


Supported Countries

Colombia ๐Ÿ‡จ๐Ÿ‡ด

  • Method: Direct bank transfer
  • Currency: COP
  • Settlement: 1-2 hours (business hours)
  • Banks: All Colombian banks

Brazil ๐Ÿ‡ง๐Ÿ‡ท

  • Method: PIX transfer
  • Currency: BRL
  • Settlement: Instant
  • Banks: All Brazilian banks with PIX

Mexico ๐Ÿ‡ฒ๐Ÿ‡ฝ

  • Method: SPEI transfer
  • Currency: MXN
  • Settlement: Instant โšก
  • Banks: All Mexican banks

Chile ๐Ÿ‡จ๐Ÿ‡ฑ

  • Method: Bank transfer
  • Currency: CLP
  • Settlement: 1-2 business days
  • Banks: All Chilean banks

Argentina ๐Ÿ‡ฆ๐Ÿ‡ท

  • Method: Bank transfer
  • Currency: ARS
  • Settlement: 1-2 business days
  • Banks: All Argentine banks

Quick Example

Hereโ€™s a simple PAYOUT flow:

Node.js
1// 1. Check balance
2const balance = await getBalance(token, orgId, merchantId, 'COP');
3console.log('Available:', balance.availableBalance); // e.g., 1,000,000 COP
4
5// 2. Create provider contact
6const provider = await createContact(token, orgId, merchantId, {
7 fullName: 'Servicios ABC SAS',
8 email: 'provider@example.com',
9 country: 'CO',
10 documentType: 'NIT',
11 documentNumber: '900123456-1',
12 businessType: 'COMPANY'
13});
14
15// 3. Add bank account
16const bankAccount = await addBankAccount(token, orgId, merchantId, provider.id, {
17 country: 'CO',
18 currency: 'COP',
19 bankCode: 'BANCOLOMBIA',
20 accountNumber: '1234567890',
21 accountType: 'checking',
22 holderName: 'Servicios ABC SAS'
23});
24
25// 4. Create PAYOUT order
26const payout = await createPayoutOrder(token, orgId, merchantId, {
27 type: 'PAYOUT',
28 originCurrencySymbol: 'COP',
29 destinationCurrencySymbol: 'COP',
30 amountIn: 500000, // 500,000 COP
31 contactId: provider.id,
32 destinationAccountId: bankAccount.id,
33 description: 'Payment for Invoice #INV-001'
34});
35
36console.log('Payout created:', payout.id);
37console.log('Status:', payout.status); // "PROCESSING"

Key Differences vs PAYIN

FeaturePAYINPAYOUT
DirectionCustomer โ†’ Your accountYour account โ†’ Provider
BalanceCredits your accountDebits your account
Payment URLYes (for customer)No
Bank AccountOptionalRequired
ContactOptionalRecommended
Balance CheckNot neededCritical

Payment Flow Comparison

PAYIN (Receiving)

Customer pays โ†’ Funds credited โ†’ Webhook โ†’ Fulfill order

PAYOUT (Sending)

Check balance โ†’ Create order โ†’ Funds debited โ†’ Bank transfer โ†’ Webhook confirmation

Balance Requirements

Checking Balance Before PAYOUT

Node.js
1async function safeCreatePayout(token, orgId, merchantId, payoutData) {
2 // 1. Get current balance
3 const balances = await getMerchantBalances(token, orgId, merchantId);
4 const balance = balances.find(b => b.currencySymbol === payoutData.currency);
5
6 // 2. Check available balance
7 if (!balance || balance.availableBalance < payoutData.amount) {
8 throw new Error(
9 `Insufficient balance. Available: ${balance?.availableBalance || 0} ${payoutData.currency}, ` +
10 `Required: ${payoutData.amount} ${payoutData.currency}`
11 );
12 }
13
14 console.log(`โœ“ Sufficient balance: ${balance.availableBalance} ${payoutData.currency}`);
15
16 // 3. Create payout
17 const payout = await createPayoutOrder(token, orgId, merchantId, payoutData);
18
19 return payout;
20}

Settlement Times

Understanding when providers receive funds:

CountryMethodTypical Settlement
ColombiaBank Transfer1-2 hours (business hours)
BrazilPIXInstant (24/7)
MexicoSPEIInstant โšก
ChileBank Transfer1-2 business days
ArgentinaBank Transfer1-2 business days

Business Hours: For countries with business-hour restrictions, transfers initiated after hours or on weekends may be processed the next business day.


Next Steps


Additional Resources