> ## Documentation Index
> Fetch the complete documentation index at: https://docs.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](/integration-guide/withdrawals).

For each test case, initiate a withdrawal via the [/api/v2/withdrawal/crypto](/api-reference/endpoints/withdrawal-crypto) endpoint and then process the relevant [callback](/api-reference/callbacks#withdrawal-callbacks).

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.

<Tabs>
  <Tab id="standard" title="Standard withdrawals">
    Make sure to check these test cases if your site uses the [/api/v2/withdrawal/crypto](/api-reference/endpoints/withdrawal-crypto) endpoint.

    <table class="m-0 [&_th]:text-left">
      <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`.
            * `currency_sent` describes the amount you sent (minus the network fee). Its currency is the same as you specified in `currency`.
            * `currency_received` describes the amount you received on your balance. Its currency is the same as 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>

  <Tab id="instant" title="Instant withdrawals">
    Make sure to check these test cases if your site uses the [/api/v2/crypto/withdrawal\_instant](/api-reference/endpoints/crypto-withdrawal-instant) or [/api/v2/crypto/withdrawal\_instant\_exchange](/api-reference/endpoints/crypto-withdrawal-instant-exchange) endpoints.

    <table class="m-0 [&_th]:text-left">
      <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_instant` callback.
            * The callback status is `confirmed`.
          </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_instant_exchange` callback.
            * The callback status is `confirmed`.
            * `currency_sent` describes the amount you sent (minus the network fee). Its currency is the same as you specified in `sender_currency`.
            * `currency_received` describes the amount you received on your balance. Its currency is the same as 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_instant` or `withdrawal_instant_exchange` 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 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_instant` or `withdrawal_instant_exchange` callbacks.
            * The callback status is first `pending`, then `confirmed`.
          </td>
        </tr>
      </tbody>
    </table>
  </Tab>
</Tabs>
