Send Withdrawals
Create a transaction to withdraw crypto from your asset pool and send it to an external wallet.
This guide outlines the process for integrating withdrawals into your platform. It provides a detailed walkthrough of the withdrawal process, including how it interacts with the respective blockchain, which endpoint is used to create the payout, the data that needs to be sent to the endpoint, and what that data represents. Additionally, it covers the webhooks sent out during the withdrawal process.
To integrate the withdrawal feature, you must complete the following steps:
- Set up the webhooks destination to send update notifications and any other related events. The webhooks you need are the following:
layer1:crypto:withdrawal:status-change
layer1:digital:balance:updated
- Create the asset pool that will house the created address and keep track of all funds sent to any related addresses created in future.
- Ensure that funds are available in the asset pool to withdraw. For the details, refer to the Create a new address and Receive Deposit and Ingest the Webhooks guides.
To summarise, the withdrawal process involves the following:
- Creating a Withdrawal Transaction via the Create transaction request endpoint. The outbound wallet address is sent in the request.
- Ingesting and deserialising the resulting webhooks to keep track of your pool funds and the status of the withdrawal.
Withdrawal Flow
The withdrawals pass through the following lifecycle on the Layer1 platform:
- A new transaction request is registered with status CREATED and type WITHDRAWAL.
- The system checks whether the asset pool contains sufficient funds for the requested withdrawal.
- If there are insufficient funds, the withdrawal’s status becomes REJECTED (final).
- If there are sufficient funds, the process moves on to reserve those funds.
- During funds reservation, the required amount is moved from the available balance to the reserved balance of the source addresses. The status is updated to FUNDS_RESERVED.
- Once funds are reserved, the transaction is flagged for compliance screening. The status becomes SCREENING_REQUESTED.
- The transaction undergoes automated screening:
- If it passes, the status becomes SCREENING_PASSED.
- If it fails, the status becomes HELD.
- Transactions in HELD are subject to manual review:
- If manually approved, the status changes to SCREENING_PASSED.
- If rejected, the status becomes REJECTED (final).
- After the screening is passed, the system assembles and signs the WITHDRAWAL. It becomes ready for blockchain submission. The state updates to SIGNED.
- The signed transaction is submitted to the blockchain; once detected by monitoring logic, its status becomes DETECTED.
- The respective blockchain processes the transaction and includes it in a new block. This blockchain transaction may contain errors if it is unsuccessful.
- If execution fails (irreversible), status becomes FAILED (final). This action is irreversible.
- If execution succeeds, status becomes UNCONFIRMED. The transaction is monitored until it reaches the required confirmation threshold. For more information, see confirmation threshold.
- After the required number of confirmations is reached, the status updates to CONFIRMED.
- The reserved funds are released and available balance is updated to reflect the irrevocable blockchain fund movement. The WITHDRAWAL is now finalised and state is set to SUCCESS.

Withdrawal Status
A Withdrawal goes through a series of statuses, with each status denoting a specific process has occurred:
Status | Description |
---|---|
Created | The withdrawal request is first registered with the created status |
Rejected | The withdrawal is rejected if there are insufficient funds within the asset pool to action the withdrawal |
Funds_Reserved | The withdrawal has moved funds from the available balance to the reserved balance |
Screening_Requested | The withdrawal has moved into the screening phase and needs to be screened |
Held | The withdrawal has been held to be manually reviewed |
Screening_Passed | The withdrawal has passed screening, either manual or automatic |
Signed | The withdrawal is signed and submitted to the blockchain |
Detected | The withdrawal has been detected and distributed on the blockchain, but does not yet have any confirmations |
Failed | The withdrawal failed due to an on-chain error has occurred during execution, could be multiple underlying reasons |
Unconfirmed | The withdrawal has had one or more blockchain confirmations, but has not yet reached the required confirmation limit |
Confirmed | The withdrawal has reached the required confirmation limit and is not fully confirmed on the blockchain |
Success | The withdrawal is successful and the balance of the asset pool is updated to reflect this |
Updated 10 days ago