Skip to main content

Fiat Payout

A fiat payout converts stablecoins into fiat currency and delivers funds to a customer's mobile money wallet, bank account, or via SWIFT. It requires a rate quote before submission.

There are two flows depending on whether you provide a source.walletId:

FlowHow it's funded
Without walletIdCelar creates an intermediary wallet: you send crypto to it to fund the payout
With walletIdCelar debits your specified Celar wallet directly: no on-chain funding step needed

Examples use the sandbox environment. For production, replace api.sandbox.celar.io with api.celar.io and pay.sandbox.celar.io with pay.celar.io.

Rate validity

Rate quotes are valid for 5 minutes. Submit the transfer before the signature expires. If the amount doesn't match the quoted cryptoEquivalent, the transfer will fail.


Flow 1: Without walletId (external funding)

Use this flow when you don't have a pre-funded Celar wallet. Celar provides an intermediary wallet address you fund on-chain to trigger the payout.

How it works

  1. Fetch a rate from the Rates API: get cryptoEquivalent and signature
  2. Submit the fiat_payout transfer without a walletId
  3. Celar returns an intermediary_wallet address
  4. Send the exact crypto amount to that address on-chain
  5. Celar detects the deposit and processes the fiat delivery
  6. A webhook fires when status moves to settled

Step 1: Get a rate

Before submitting, fetch a rate quote from the Rates API. This returns the cryptoEquivalent and signature you need for the next step.

Step 2: Submit the transfer

curl --request POST \
--url https://api.sandbox.celar.io/api/v1/payments/transfer \
--header 'Authorization: Bearer <your_api_key>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <unique_uuid>' \
--data '{
"operationType": "fiat_payout",
"customer_id": "cr_2ae76bc76f03437d",
"amount": 3.922,
"signature": "sig_8c23dc5c3140a72b",
"source": {
"currency": "USDC",
"chain": "base"
},
"destination": {
"currency": "KES",
"description": "Mobile money payout to customer",
"reference": "PAYOUT-23923",
"serviceProvider": "MPESA",
"paymentMethod": "mobile",
"phoneNumber": "+254712345678",
"purpose_of_transaction": "REMITTANCE"
}
}'

Response

{
"payment_id": "transfer_2928607dce205ecd",
"status": "pending",
"magic_link_url": "https://pay.sandbox.celar.io/transfer_2928607dce205ecd",
"chain": "base",
"intermediary_wallet": "0x3c62c211C3211b7EffFa27B49DC967AbB346Bf72",
"rate": "127.5",
"amount": 3.922
}

Step 3: Fund the transfer

Send exactly amount of the source token to the intermediary_wallet address. Celar detects the on-chain deposit and automatically processes the fiat delivery.


Flow 2: With walletId (internal wallet funding)

Use this flow when you have a pre-funded Celar wallet. Celar debits it directly: no intermediary wallet or on-chain funding step required.

How it works

  1. Fetch a rate from the Rates API: get cryptoEquivalent and signature
  2. Submit the fiat_payout transfer with source.walletId set to your Celar wallet
  3. Celar debits the wallet and immediately processes the fiat delivery
  4. A webhook fires when status moves to settled

Step 1: Get a rate

Before submitting, fetch a rate quote from the Rates API. This returns the cryptoEquivalent and signature you need for the next step.

Step 2: Submit the transfer

curl --request POST \
--url https://api.sandbox.celar.io/api/v1/payments/transfer \
--header 'Authorization: Bearer <your_api_key>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <unique_uuid>' \
--data '{
"operationType": "fiat_payout",
"customer_id": "cr_2ae76bc76f03437d",
"amount": 3.922,
"signature": "sig_8c23dc5c3140a72b",
"source": {
"currency": "USDC",
"chain": "base",
"walletId": "cw_1053b738d73ad9b5"
},
"destination": {
"currency": "KES",
"description": "Mobile money payout to customer",
"reference": "PAYOUT-23923",
"serviceProvider": "MPESA",
"paymentMethod": "mobile",
"phoneNumber": "+254712345678",
"purpose_of_transaction": "REMITTANCE"
}
}'

Response

{
"message": "Payout Success"
}

No intermediary_wallet is returned: the payout is triggered immediately from your Celar wallet balance.

US customers

USA customers require destination.transfer_type in the request. The signature field is not required for US customer payouts.

curl --request POST \
--url https://api.sandbox.celar.io/api/v1/payments/transfer \
--header 'Authorization: Bearer <your_api_key>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <unique_uuid>' \
--data '{
"operationType": "fiat_payout",
"customer_id": "cr_2ae76bc76f03437d",
"amount": 3.922,
"source": {
"currency": "USDC",
"chain": "base",
"walletId": "cw_1053b738d73ad9b5"
},
"destination": {
"currency": "USD",
"description": "ACH payout to US customer",
"reference": "PAYOUT-23923",
"paymentMethod": "bank",
"transfer_type": "ach_credit",
"accountNumber": "0123456789",
"purpose_of_transaction": "REMITTANCE"
}
}'

Field reference

FieldRequiredDescription
operationTypeYesfiat_payout
customer_idYesThe customer receiving the payout
amountYesCrypto amount: use cryptoEquivalent from the rate response
signatureYes (non-US)Rate signature from the Rates API
source.currencyYesUSDC or USDT
source.chainYesbase, polygon, arbitrum, or baseSepolia
source.walletIdNoIf set, debits this Celar wallet directly (Flow 2)
destination.currencyYesFiat currency: e.g. KES, NGN, GHS, USD
destination.paymentMethodYesmobile, bank, or swift
destination.serviceProviderConditionalRequired for mobile: e.g. MPESA, MTN, AIRTEL
destination.bankCodeConditionalRequired for bank: bank code from the banks endpoint
destination.swiftCodeConditionalRequired for swift: recipient bank's BIC/SWIFT code
destination.transfer_typeConditionalRequired for US customers: ach_credit, same_day_ach_credit, or rtp_credit
destination.phoneNumberConditionalRequired for mobile (E.164 format)
destination.accountNumberConditionalRequired for bank and swift: customer's account number or IBAN
destination.descriptionYesInternal description
destination.referenceNoYour own reference ID
destination.purpose_of_transactionNoSee supported values below

Purpose of transaction

Supported values
ValueDescription
GOODS_PURCHASEPayment for physical goods or merchandise.
SERVICES_PAYMENTPayment for services rendered.
INVOICE_PAYMENTSettlement of an issued invoice.
LOAN_REPAYMENTRepayment of a loan or credit obligation.
BILLS_PAYMENTPayment of utilities, subscriptions, or recurring bills.
SALARY_AND_WAGESSalary, payroll, or wage disbursement.
P2P_TRANSFERPerson-to-person transfer between individuals.
REMITTANCEDomestic or cross-border transfer to a beneficiary.
DONATIONCharitable or personal donation.
GRANTS_AND_SCHOLARSHIPSFunding for grants, bursaries, or scholarships.
TRAVEL_AND_ACCOMMODATIONPayment for travel, lodging, or related expenses.
TAX_PAYMENTTax remittance to a government or regulatory authority.
INSURANCE_PREMIUMPayment of an insurance premium.
FAMILY_SUPPORTFinancial support sent to family members.
EDUCATIONTuition fees, school expenses, or educational costs.
GIFT_AND_DONATIONPersonal gift or charitable contribution.
MEDICAL_TREATMENTPayment for medical or healthcare services.
MAINTENANCE_EXPENSESOngoing maintenance or upkeep costs.
TRAVELTravel-related expenses.
SMALL_VALUE_REMITTANCELow-value cross-border remittance.
LIBERALIZED_REMITTANCERemittance under a liberalized scheme.
CONSTRUCTION_EXPENSESCosts related to construction or building projects.
HOTEL_ACCOMMODATIONPayment for hotel or lodging services.
ADVERTISING_EXPENSESMarketing or advertising costs.
ADVISORY_FEESFees for consulting or advisory services.
BUSINESS_INSURANCEBusiness-related insurance payment.
INSURANCE_CLAIMSPayment of an insurance claim.
DELIVERY_FEESShipping or delivery charges.
EXPORTED_GOODSPayment for goods exported internationally.
SERVICE_CHARGESGeneral service or processing charges.
LOAN_PAYMENTLoan instalment or repayment.
OFFICE_EXPENSESOffice supplies or operational costs.
PROPERTY_PURCHASEPayment for real estate or property acquisition.
PROPERTY_RENTALRent payment for residential or commercial property.
ROYALTY_FEESRoyalties for intellectual property or licensing.
SHARES_INVESTMENTInvestment in shares or equities.
FUND_INVESTMENTInvestment into a fund or financial instrument.
TRANSPORTATION_FEESTransport or logistics costs.
UTILITY_BILLSPayment for electricity, water, gas, or internet.
PERSONAL_TRANSFERGeneral personal transfer with no specific category.
SALARY_PAYMENTSalary disbursement to an employee.
OTHER_FEESMiscellaneous fees not covered by other categories.
COMPUTER_SERVICESPayment for IT or software services.
REWARD_PAYMENTReward, bonus, or incentive payment.
INFLUENCER_PAYMENTPayment to a content creator or influencer.