Skip to main content

How to create a mass payout via API

Overview​

Mass payout API allows you to create multiple crypto payouts in one request from a merchant account to a list of recipient wallet addresses.

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

Integration flow​

  1. Check account balance and ensure enough funds for payouts are available by using the method - [POST] account
  2. Optionally pre-calculate payout commissions using Commission pre-calculation
  3. Create the mass payout by using the method - [POST] payout/mass/create
    • After creating a mass 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 mass payout is confirmed, Calypso sends PAYOUT_CONFIRMED.
    • If the mass payout is declined, Calypso sends PAYOUT_CHANGE_STATUS with state CANCELED.
  5. Once the mass payout is processed, Calypso sends PAYOUT_CHANGE_STATUS (state: IN_PROGRESS)
    • If the mass payout is not validated before transactions are created on the network, Calypso sends PAYOUT_VALIDATION_ERROR.
    • If the mass payout cannot be processed, Calypso sends PAYOUT_CHANGE_STATUS with state FAILED.
    • If one or more payouts from the list fail, Calypso sends PAYOUT_CHANGE_STATUS with state PARTIAL.
  6. After a successful mass payout, Calypso sends PAYOUT_CHANGE_STATUS with state COMPLETED.
  7. Get mass payout details and current status by using the method - [POST] payout/mass

Sequence​

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

Mass payout sequence

API methods​

Create new mass payout - [POST] payout/mass/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 mass payout creation data.

Payload fields​

FieldTypeRequiredDescription
currencystringYesCurrency associated with the payout amount.
namestringYesMass payout name. Maximum length: 100 characters.
commentstringNoComment for the mass payout. Maximum length: 1000 characters. This value is displayed in the payouts table and reports when it is provided.
massAddressesarrayYesList of payout recipients and transaction details for each address.
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 mass payout. Maximum length: 255 characters.

massAddresses fields​

FieldTypeRequiredDescription
depositAddressstringYesRecipient's crypto address.
amountnumberYesTransaction amount.
commentstringNoComment for the withdrawal transaction. Maximum length: 140 characters. This value is included in reports.

Request example​

{
"account": "text",
"timestamp": 1,
"payload": {
"currency": "text",
"name": "text",
"comment": "text",
"massAddresses": [
{
"depositAddress": "text",
"amount": 1,
"comment": "text"
}
],
"executionDate": "2025-11-17T09:55:55.567Z",
"idempotencyKey": "123e4567-e89b-12d3-a456-426614174000",
"externalId": "text"
}
}

Response fields​

FieldTypeDescription
idstringCalypso mass payout ID.
idempotencyKeystringExternal ID in UUID format provided during payout creation.
companyIdstringID of the company that created the mass payout.
accountstringMerchant account ID.
statestringCurrent mass payout status.
commentstringComment for the mass payout, if provided.
namestringMass payout name.
currencystringCurrency associated with the payout amount.
totalWithdrawalAmountnumberTotal amount of all transactions in the mass payout.
totalFeenumberTotal service fee for the mass payout.
totalFeePercentagenumberTotal service fee for the mass payout in percentage.
executionDatestringExecution date of the payout, if provided.
errorsobjectValidation errors grouped by withdrawal, if any errors occurred.
externalIdstringMerchant-side external ID for the mass payout, if provided.

Response example 200 OK​

{
"id": "string",
"idempotencyKey": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"companyId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"account": "string",
"state": "CREATION_IN_PROGRESS",
"comment": "string",
"name": "string",
"currency": "string",
"totalWithdrawalAmount": 0,
"totalFee": 0,
"totalFeePercentage": 0,
"executionDate": "2025-12-16T10:52:46.659Z",
"errors": {
"withdrawalErrors": [
{
"withdrawalId": "string",
"errors": [
{
"id": 0,
"status": "SUCCESS",
"errorResolved": true,
"errorMessage": "string"
}
]
}
]
},
"externalId": "string"
}

Status lifecycle​

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

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

• Transactions for a mass payout have been created and are waiting to be sent to the network.
• Transactions for a mass payout have been sent to the network and are 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.

PARTIALOne or more payouts from the list were not completed successfully. You can get a list of unsuccessful transactions in your personal Calypso account and resend unsuccessful mass payout transactions via UI.
COMPLETEDFunds are successfully credited to destination wallets.

Webhooks​

Webhook eventTriggerMerchant action
PAYOUT_CHANGE_STATUSMass payout status changed to CREATION_IN_PROGRESS, PENDING_CONFIRMATION, IN_PROGRESS, FAILED, PARTIAL, CANCELED, or COMPLETED.Update mass payout status in your system.
PAYOUT_CONFIRMEDMass payout was confirmed by all required process participants.Continue tracking mass payout status.
PAYOUT_VALIDATION_ERRORMass payout validation failed before transactions were created on the network.Check validation errors and create a new mass payout with corrected data, if needed.

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

Errors and edge cases​

CaseDescription
Not enough fundsCheck the account balance before creating a mass payout.
Payout verification is enabledThe mass payout may wait for confirmation before processing starts.
Validation errorThe mass payout was not validated before transactions were created on the network. Check the validation error details.
Processing failedThe mass payout was not completed. You can create a new mass payout with corrected data or contact technical support.
Partial completionOne or more payouts from the list failed while other payouts were completed. Check unsuccessful transactions and resend them if needed.
DocumentLink
Account API[POST] account
Commission pre-calculationCommission pre-calculation
Payout API referencePayout API
Payout webhooksPayout webhooks
Resend unsuccessful mass payouts via UIHow to resend unsuccessful mass payouts transaction via UI