Skip to content

Pay Out integration

A Pay Out sends funds from your available balance to a recipient. The amount plus fees is reserved straight away, so a payout can never spend money twice. Live payouts may need approval by our team before they are sent to the provider.

Request a payout

POST /payouts · scope payouts:write · requires an Idempotency-Key header

FieldTypeDescription
amount requiredstringAmount the recipient should receive, as a decimal string.
currency requiredstringCurrency code. Paid from your balance in the same currency; currencies are never converted.
reference requiredstringYour unique ID for this payout (1–64 characters: letters, digits, _, -).
destination.type requiredstringcrypto_address, binance_id or email. Which types are allowed depends on the provider (see below).
destination.value requiredstringThe wallet address, numeric Binance ID or email address.
destination.memostringMemo or destination tag, for networks that need one (up to 64 characters).
networkstringRequired for crypto_address payouts through Cryptomus, for example tron.
providerstringcryptomus or binance_pay. Omit to pick the first enabled provider that supports the currency and destination type.
descriptionstringUp to 255 characters.
metadataobjectUp to 20 string values.

Destinations per provider

ProviderDestination typesNotes
Cryptomuscrypto_addressSent on-chain from the platform's Cryptomus wallet. network is required.
Binance Paybinance_id, emailInternal Binance transfer to a Binance account. Binance Pay cannot pay out to external blockchain addresses.

Example

curl -X POST https://gatway.hunario.com/api/v1/payouts \
  -H "Authorization: Bearer $GATEWAY_SECRET_KEY" \
  -H "Idempotency-Key: withdrawal-778" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "250.00",
    "currency": "USDT",
    "network": "tron",
    "reference": "withdrawal-778",
    "destination": { "type": "crypto_address", "value": "TQ5n...your-wallet" }
  }'

Response 201

{
  "data": {
    "id": "po_01j9x5...",
    "object": "payout",
    "status": "under_review",
    "provider": "cryptomus",
    "reference": "withdrawal-778",
    "amount": "250.00000000",
    "currency": "USDT",
    "network": "tron",
    "destination": { "type": "crypto_address", "value": "TQ5n...", "memo": null },
    "service_fee": "2.50000000",
    "network_fee": "1.00000000",
    "total_debit": "253.50000000",
    "tx_hash": null,
    "failure_reason": null,
    "rejection_reason": null
  }
}

How fees work

Payout fees are added on top of the amount. The recipient gets amount and your balance is debited total_debit = amount + service_fee + network_fee. The network fee is the provider's own estimate where it publishes one. With a 1% fee on 10,000 USDT, the service fee is 100 and the total debit is 10,100 plus any network fee.

Payout statuses

StatusMeaningFunds
requestedAccepted and funds reserved.Reserved
under_reviewWaiting for approval by our team.Reserved
approvedApproved and queued for the provider.Reserved
processingSubmitted to the provider.Reserved
completedSent. tx_hash is set when the provider returns one.Debited
rejectedRejected by our team; see rejection_reason.Returned
failedThe provider could not send it; see failure_reason.Returned
cancelledCancelled by you before approval.Returned

Cancel a payout

POST /payouts/{id}/cancel · scope payouts:write. You can cancel only while the status is requested or under_review. Later states return 409 invalid_state.

Common errors

StatusCodeWhen
422insufficient_balanceAvailable balance does not cover total_debit. details shows available and required amounts.
422destination_not_supportedThe provider cannot pay to that destination type.
422network_requiredA network is required for this currency and provider.
409duplicate_referenceThe reference was already used for another payout.
422limit_exceededOver a per-transaction or daily payout limit.
503service_unavailableNew payouts are temporarily paused.