> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ca.cryptoprocessing.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Crypto withdrawals integration test cases

These are the test cases to help you test your site's integration with CryptoProcessing [crypto withdrawals](https://docs.ca.cryptoprocessing.com/withdrawals/integration-guide.md).

For each test case, initiate a withdrawal via the [/v2/withdrawal/crypto](https://docs.ca.cryptoprocessing.com/api-reference/endpoints/withdrawal-crypto.md) endpoint and then process the relevant [callback](https://docs.ca.cryptoprocessing.com/api-reference/callbacks/withdrawal-callbacks.md).

Depending on whether you work with standard withdrawals or instant withdrawals, you will need to use different callback types and field names. If your site supports both, make sure to go through both lists of test cases.

> [tab] Standard withdrawals
>
> Make sure to check these test cases if your site uses the [/v2/withdrawal/crypto](https://docs.ca.cryptoprocessing.com/api-reference/endpoints/withdrawal-crypto.md) endpoint.
>
> <table>
>   <thead>
>     <tr>
>       <th>Procedure</th>
>       <th>Expected results</th>
>     </tr>
>   </thead>
>
>   <tbody>
>     <tr>
>       <td colspan="2">
>         **Successful withdrawal**
>       </td>
>     </tr>
>
>     <tr>
>       <td>
>         1. Initiate a crypto withdrawal.
>       </td>
>
>       <td>
>         * The site gets a `withdrawal` callback.
>         * The callback status is `confirmed`.
>       </td>
>     </tr>
>
>     <tr>
>       <td colspan="2">
>         **Successful withdrawal with conversion**
>       </td>
>     </tr>
>
>     <tr>
>       <td>
>         1. Initiate a withdrawal with the `convert_to` field.
>       </td>
>
>       <td>
>         * The site gets a `withdrawal` callback.
>         * The callback status is `confirmed`.
>         * The callback `type` is `withdrawal_exchange`.
>         * `currency_sent` is the amount taken from your balance. Its currency is the one you specified in `currency`.
>         * `currency_received` is the amount sent to the address. Its currency is the one you specified in `convert_to`.
>       </td>
>     </tr>
>
>     <tr>
>       <td colspan="2">
>         **Withdrawal declined by the owner**
>       </td>
>     </tr>
>
>     <tr>
>       <td>
>         1. Go to **Settings → Withdrawal limits → API withdrawals → Custom API withdrawal limits** and set up a limit for a specific currency.
>         2. Initiate a withdrawal in that currency with an amount above the limit.
>         3. As an *Owner*, go to **Transactions** and select the pending transaction.
>         4. Click **Decline**.
>         5. Remove the withdrawal limit if you won't need it after testing.
>       </td>
>
>       <td>
>         * The site gets two `withdrawal` callbacks.
>         * The callback status is first `pending`, then `declined`.
>       </td>
>     </tr>
>
>     <tr>
>       <td colspan="2">
>         **Withdrawal approved by the owner**
>       </td>
>     </tr>
>
>     <tr>
>       <td>
>         1. Go to **Settings → Withdrawal limits → API withdrawals → Custom API withdrawal limits** and set up a limit for a specific currency.
>         2. Initiate a withdrawal in that currency with an amount above the limit.
>         3. As an *Owner*, go to **Transactions** and select the pending transaction.
>         4. Click **Approve**.
>         5. Remove the withdrawal limit if you won't need it after testing.
>       </td>
>
>       <td>
>         * The site gets two `withdrawal` callbacks.
>         * The callback status is first `pending`, then `confirmed`.
>       </td>
>     </tr>
>   </tbody>
> </table>

> [tab] Instant withdrawals
>
> Make sure to check these test cases if your site uses the [/v2/crypto/withdrawal\_instant](https://docs.ca.cryptoprocessing.com/api-reference/endpoints/crypto-withdrawal-instant.md) or [/v2/crypto/withdrawal\_instant\_exchange](https://docs.ca.cryptoprocessing.com/api-reference/endpoints/crypto-withdrawal-instant-exchange.md) endpoints.
>
> <table>
>   <thead>
>     <tr>
>       <th>Procedure</th>
>       <th>Expected results</th>
>     </tr>
>   </thead>
>
>   <tbody>
>     <tr>
>       <td colspan="2">
>         **Successful withdrawal**
>       </td>
>     </tr>
>
>     <tr>
>       <td>
>         1. Initiate an instant crypto withdrawal.
>       </td>
>
>       <td>
>         * The site gets a `withdrawal` callback.
>         * The callback status is `confirmed`.
>         * The callback `type` is `withdrawal_instant`.
>       </td>
>     </tr>
>
>     <tr>
>       <td colspan="2">
>         **Successful withdrawal with conversion**
>       </td>
>     </tr>
>
>     <tr>
>       <td>
>         1. Initiate an instant withdrawal with conversion.
>       </td>
>
>       <td>
>         * The site gets a `withdrawal` callback.
>         * The callback status is `confirmed`.
>         * The callback `type` is `withdrawal_instant_exchange`.
>         * `currency_sent` is the amount taken from your balance. Its currency is the one you specified in `sender_currency`.
>         * `currency_received` is the amount sent to the address. Its currency is the one you specified in `received_currency`.
>       </td>
>     </tr>
>
>     <tr>
>       <td colspan="2">
>         **Withdrawal declined by the owner**
>       </td>
>     </tr>
>
>     <tr>
>       <td>
>         1. Go to **Settings → Withdrawal limits → API withdrawals → Custom API withdrawal limits** and set up a limit for a specific currency.
>         2. Initiate an instant withdrawal in that currency with an amount above the limit.
>         3. As an *Owner*, go to **Transactions** and select the pending transaction.
>         4. Click **Decline**.
>         5. Remove the withdrawal limit if you won't need it after testing.
>       </td>
>
>       <td>
>         * The site gets two `withdrawal` callbacks with the `type` `withdrawal_instant` or `withdrawal_instant_exchange`.
>         * The callback status is first `pending`, then `declined`.
>       </td>
>     </tr>
>
>     <tr>
>       <td colspan="2">
>         **Withdrawal approved by the owner**
>       </td>
>     </tr>
>
>     <tr>
>       <td>
>         1. Go to **Settings → Withdrawal limits → API withdrawals → Custom API withdrawal limits** and set up a limit for a specific currency.
>         2. Initiate an instant withdrawal in that currency with an amount above the limit.
>         3. As an *Owner*, go to **Transactions** and select the pending transaction.
>         4. Click **Approve**.
>         5. Remove the withdrawal limit if you won't need it after testing.
>       </td>
>
>       <td>
>         * The site gets two `withdrawal` callbacks with the `type` `withdrawal_instant` or `withdrawal_instant_exchange`.
>         * The callback status is first `pending`, then `confirmed`.
>       </td>
>     </tr>
>   </tbody>
> </table>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.