🌟Create Payouts
In this section, you’ll learn how to create a payout in PayRam to send funds directly to a recipient’s wallet on the selected blockchain.

Create an API payout. PayRam checks it against your project’s limits and either queues it to send (pending) or holds it for approval (pending-approval).
Before you start: the project needs a hot wallet assigned for the payout’s network (Hot Wallet Setup), otherwise the request fails with 422 PAYOUT_HOT_WALLET_NOT_ASSIGNED (PayRam Core v3.9.0 and later).
Endpoint
API-Key
Yes
Your project API key
Content-Type
Yes
application/json
Request body
email
string
Yes
Recipient’s email (must be a valid email).
blockchainCode
string
Yes
ETH, BASE, POLYGON or TRX.
toAddress
string
Yes
Recipient wallet; must be valid for blockchainCode.
customerID
string
Yes
Your identifier for the recipient. A payout cannot be created without it.
mobileNumber
string
No
Recipient’s mobile number.
residentialAddress
string
No
Recipient’s address.
idempotencyKey
string
No
Same as the Idempotency-Key header; the header wins if both are sent.
Amounts
amountis in the token’s own units. To pay a USD value, convert it first with the ticker.PayRam truncates the amount to the token’s precision (
walletPrecision) — never rounds up and never rejects for extra decimals. An amount that truncates to zero is rejected. Round it yourself so your records match what is sent.Bitcoin payouts are not supported: they are refused at creation with
400 PAYOUT_CURRENCY_DISABLED(PayRam Core v3.9.0 and later).
Limits and approval
Limits are evaluated in USD over rolling windows: the last 60 minutes and the last 24 hours. The totals count what the same account has paid out in the project: the API key’s account for API payouts. Payouts held for approval count toward those totals; failed, rejected and cancelled ones do not.
Within limits
201, status: "pending" — queued to send.
Over the auto-approve amount, or over a limit
201, status: "pending-approval" with approvalReason in attributes.
Below the minimum
400 PAYOUT_AMOUNT_BELOW_MINIMUM — no payout is created.
Limits are set in the dashboard — see Editing Payout Limits. Don’t hard-code them.
Idempotency
Always send an idempotency key. Without one, PayRam cannot tell a retry after a timeout from a deliberate second payout.
Generate one key per payout before the first attempt and store it with the payout (an order ID works; a timestamp does not).
Retrying with the same key returns the original payout with
201and the headerIdempotent-Replayed: true(PayRam Core v3.9.0 and later). Keys are per project and do not expire.A reused key with a different body still returns the original payout — never reuse a key for a different payout.
Without a key, an identical payout (same project, address, token, network and amount) within 5 minutes is refused with
409 PAYOUT_DUPLICATE_REQUEST.
Example request
Example response
201 Created:
Store the id — you need it to look up the payout. Field meanings are in GET All Payouts.
Errors
API errors use this shape:
Only an error worth retrying (for example EXCHANGE_RATE_UNAVAILABLE) also carries "retryable": true; otherwise the field is absent.
A body that fails validation (missing field, invalid email) returns 400 with a different shape; fields maps each field to its problem. Malformed JSON (including a non-numeric amount) returns 400 with "error": "Invalid JSON" and no fields.
HTTP
code
When
400
BAD_REQUEST
Amount zero, negative, too large, or below the token’s smallest unit; address invalid for the network; unknown network or token code; missing customerID (PayRam Core v3.9.0 and later). Idempotency-Key over 255 characters.
400
PAYOUT_CURRENCY_DISABLED
Payouts are turned off for this token, or it is Bitcoin. (PayRam Core v3.9.0 and later)
400
PAYOUT_AMOUNT_BELOW_MINIMUM
Amount is below the project minimum.
401
UNAUTHORIZED
Missing or invalid API-Key, or not a project key.
403
INSUFFICIENT_PERMISSIONS
The key lacks payout permission.
404
NOT_FOUND
This network + token pair is not configured on the server.
409
PAYOUT_DUPLICATE_REQUEST
Identical payout within 5 minutes and no idempotency key.
422
PAYOUT_HOT_WALLET_NOT_ASSIGNED
No hot wallet assigned to the project for this network. (PayRam Core v3.9.0 and later)
503
EXCHANGE_RATE_UNAVAILABLE
No live price for a non-stablecoin. Retryable; sent with Retry-After: 30.
500
INTERNAL_SERVER_ERROR
Anything else.
Retry rule: treat 4xx as permanent — fix the request, don’t retry it. Retry 5xx (including EXCHANGE_RATE_UNAVAILABLE), always with the same idempotency key.
Convert USD to crypto (ticker)
Public — no API-Key. Returns one entry per network + currency:
blockchainCode / currencyCode
The network + currency the price applies to.
price
USD price of 1 unit (stablecoins are "1.0").
walletPrecision
Decimal places the token supports — round to this.
tokenAddress
Token contract (0x000…000 for native coins).
standard
native, ERC20, TRC20, etc.
Convert: amount = usdAmount / price, rounded down to walletPrecision. Example: $50 in ETH at price = "1659.57" → 0.030128…. Fetch the ticker right before creating the payout so the rate is current.
Last updated