Skip to main content

Payouts

Payouts let you send stablecoins from your Celar custodial wallet to your customers.
They represent outbound money movement — for example, paying vendors, merchants, or end-users.

Prerequisites

Before creating a payout you must:

Create and Fund a Wallet
Every payout is executed from one of your custodial wallets.
Use the Wallets API to provision a wallet, and ensure it is pre-funded.
Keep the celar_walletId handy.

Create a Customer
Each payout must be linked to a customer_id. See Customers.

Get Test Tokens
To simulate payouts on our sandbox environment, you’ll need test tokens (USDT, USDC). Use the Celar Faucet to request tokens on supported chains (base and arbitrum). These tokens hold no real world value.

1. Create a Payout

Once you have a funded wallet and a customer_id, you can create one or more payouts in a batch.

Request

curl --request POST \
--url https://api.sandbox.celar.io/api/v1/payments/payouts \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <your_api_key>' \
--header 'Idempotency-Key: <random_uuid>' \
--header 'Content-Type: application/json' \
--data '{
"celar_walletId": "<celar_walletId>",
"token": "USDC",
"payouts": [
{
"customer_id": "<customer_id>",
"amount": 1,
"purpose": "vendor_payment"
}
]
}'

Response

{
"message": "1 payouts sent successfully",
"batch_id": "batch_1d1567b557cf",
"tx_hash": "0x75cf7be970b69e8b30c4489ec23b20ffa44e98b3b88f0d37872e4b9db1bd97cd",
"status": "payout_sent"
}

Key fields:

  • batch_id → identifier for the payout batch.
  • tx_hash → blockchain transaction hash for the payout.
  • status → reflects the lifecycle of the payout.

Purposes

Each payout must include a purpose. This helps with compliance, reporting, and reconciliation.

Allowed values:

  • vendor_payment → paying a supplier or vendor.
  • settlement → merchant settlement / clearing funds.
  • crossborder → international remittance.
  • salary_payment → payroll / employee disbursement.

Any request with an unsupported purpose will be rejected.

2. Track Status

A payout moves through the following lifecycle:

StatusMeaningWebhook Triggered
pendingPayout created, queued for execution.
payout_sentPayout transaction confirmed on-chain.
failedPayout could not be completed (e.g., insufficient funds).

You can:

3. Settlement

Once a payout reaches payout_sent, the stablecoins are successfully transferred to your customer’s address. You can view the transaction on-chain using the tx_hash.

Chains

When creating a request, you must specify a chain. Celar currently supports several blockhains.

-> "best" - Celar automatically routes to the optimal chain.

-> Or specify a chain directly (e.g. "arbitrum").

See Supported Chains for the full list and details.