Skip to main content

How to create a single payout via API

Overview​

Single payout API allows you to create one crypto payout from a merchant account to a recipient wallet address.

Use this guide to create a payout, track its processing status, and receive webhook notifications until the payout reaches a final status.

Integration flow​

  1. Check account balance and ensure enough funds for the payout are available by using the method - [POST] account
  2. Optionally pre-calculate payout commissions using Commission pre-calculation
  3. Create the payout by using the method - [POST] payout/create
    • After creating a payout request, Calypso sends PAYOUT_CHANGE_STATUS with state CREATION_IN_PROGRESS.
  4. If payout verification is enabled, Calypso sends PAYOUT_CHANGE_STATUS (state: PENDING_CONFIRMATION)
    • Once the payout is confirmed, Calypso sends PAYOUT_CONFIRMED.
    • If the payout is declined, Calypso sends PAYOUT_CHANGE_STATUS with state CANCELED.
  5. Once the payout is processed, Calypso sends PAYOUT_CHANGE_STATUS (state: IN_PROGRESS)
    • If the payout is not validated before being created on the network, Calypso sends PAYOUT_VALIDATION_ERROR.
    • If the payout cannot be processed, Calypso sends PAYOUT_CHANGE_STATUS with state FAILED.
  6. Optional: when the payout receives a blockchain transaction hash, Calypso sends PAYOUT_HASH_RECEIVED.
  7. After a successful payout, Calypso sends PAYOUT_CHANGE_STATUS with state COMPLETED.
  8. Get payout details and current status by using the method - [POST] payout

Sequence​

Names of requests on the scheme indicate certain payout API methods.

Single payout sequence

API methods​

Create new payout - [POST] payout/create​

Request fields​

FieldTypeRequiredDescription
accountstringYesMerchant account ID. The request will be sent for this account.
timestampnumberYesCurrent Unix UTC timestamp in milliseconds. The value must not be less than 3 minutes in the past or greater than 3 minutes in the future.
payloadobjectYesObject with payout creation data.

Payload fields​

FieldTypeRequiredDescription
depositAddressstringYesRecipient's crypto address.
amountnumberYesWithdrawal amount.
currencystringYesCurrency associated with the payout amount.
commentstringNoComment for the payout. Maximum length: 1000 characters.
executionDatestringNoExecution date of the payout in date-time format. Can be used to schedule a payout for a specific date.
idempotencyKeystringNoExternal ID in UUID format. Can be generated by the merchant while creating the payout to prevent duplicate requests.
externalIdstringNoMerchant-side external ID for the payout. Maximum length: 255 characters.

Request example​

{
"account": "text",
"timestamp": 1,
"payload": {
"depositAddress": "text",
"amount": 1,
"currency": "text",
"comment": "text",
"executionDate": "2025-10-29T11:20:32.438Z",
"idempotencyKey": "123e4567-e89b-12d3-a456-426614174000",
"externalId": "text"
}
}

Response fields​

FieldTypeDescription
idstringCalypso payout ID.
accountstringMerchant account ID.
depositAddressstringRecipient's crypto address.
amountnumberWithdrawal amount.
currencystringCurrency associated with the payout amount.
feenumberService fee for the payout.
feePercentagenumberService fee in percentage.
statestringCurrent payout status.
createdDatestringDate and time when the payout was created.
transactionHashstringBlockchain transaction hash, if it has already been received.
commentstringComment for the payout, if provided.
executionDatestringExecution date of the payout, if provided.
idempotencyKeystringExternal ID in UUID format provided during payout creation.
errorsobjectValidation errors grouped by withdrawal, if any errors occurred.
cancellationobjectCancellation details, if the payout was canceled.
belongingTypestringPayout belonging type: INTERNAL or EXTERNAL.
externalIdstringMerchant-side external ID for the payout, if provided.

Response example 200 OK​

{
"id": "string",
"account": "string",
"depositAddress": "string",
"amount": 0,
"currency": "string",
"fee": 0,
"feePercentage": 0,
"state": "CREATION_IN_PROGRESS",
"createdDate": "2025-12-16T10:51:48.429Z",
"transactionHash": "string",
"comment": "string",
"executionDate": "2025-12-16T10:51:48.429Z",
"idempotencyKey": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": {
"withdrawalErrors": [
{
"withdrawalId": "string",
"errors": [
{
"id": 0,
"status": "SUCCESS",
"errorResolved": true,
"errorMessage": "string"
}
]
}
]
},
"cancellation": {
"canceledByUserId": "string",
"canceledByFirstname": "string",
"canceledByLastname": "string",
"cancelMessage": "string"
},
"belongingType": "INTERNAL",
"externalId": "string"
}

Status lifecycle​

Diagram nodes indicate payout statuses, arrows indicate processes a successful completion of which transfers a payout from one status to another.

StatusDescription
CREATION_IN_PROGRESSPayout creation has started.
PENDING_CONFIRMATIONA payout is awaiting confirmation from other process participants.
CONFIRMEDA payout has been confirmed by all required process participants and is ready for processing.
CANCELEDA payout has been canceled by merchant.
IN_PROGRESS

• Transaction for a payout has been created and is waiting to be sent to the network.
• Transaction for a payout has been sent to the network and is awaiting confirmation from nodes.

FAILED

An error occurred when sending funds. There can be many reasons of the error. You may follow these remediation steps:
1. Wait a while and create a new similar payout.
2. Contact our technical support.

COMPLETEDFunds are successfully credited to destination wallet.

Webhooks​

Webhook eventTriggerMerchant action
PAYOUT_CHANGE_STATUSPayout status changed to CREATION_IN_PROGRESS, PENDING_CONFIRMATION, IN_PROGRESS, FAILED, CANCELED, or COMPLETED.Update payout status in your system and request payout details if needed.
PAYOUT_CONFIRMEDPayout was confirmed by all required process participants.Continue tracking payout status.
PAYOUT_HASH_RECEIVEDBlockchain transaction hash was received for the payout.Save the transaction hash and use it for blockchain tracking, if needed.
PAYOUT_VALIDATION_ERRORPayout validation failed before the transaction was created on the network.Check validation errors and create a new payout with corrected data, if needed.

After receiving a status change webhook, we recommend checking the reliability of the payout information via a request - [POST] payout

Errors and edge cases​

CaseDescription
Not enough fundsCheck the account balance before creating a payout.
Payout verification is enabledThe payout may wait for confirmation before processing starts.
Validation errorThe payout was not validated before being created on the network. Check the validation error details.
Processing failedThe payout was not completed. You can create a new payout with corrected data or contact technical support.
DocumentLink
Account API[POST] account
Commission pre-calculationCommission pre-calculation
Payout API referencePayout API
Payout webhooksPayout webhooks