Cryptopay API
  • Welcome
  • Guides
    • Introduction
    • Environments
    • Creating a Test Account
    • API Credentials
    • API Basics
      • Responses
      • Date formats
      • Authentication
        • How it works
        • Signature
        • Creating a signature. Code samples
      • Callbacks
    • API Client Libraries
    • API Reference
    • Cryptocurrency Payments
    • Currencies
      • Supported Currencies
      • Currency Icons
    • Confirmations
    • Tools for accepting payments
    • Prebuilt integrations
      • E-commerce payment plugins
      • Payment and software providers
    • Channels
      • Channel payment
      • Payment statuses
      • Channel payment sequence
      • Create a Channel
      • Visual representation at Cashier
      • Channel hosted page
      • Channel payment callbacks
    • Invoices
      • Invoice statuses
      • Invoice payment sequence
      • How to handle unresolved invoices
        • Underpaid
        • Overpaid
        • Paid late
        • Illicit resource
        • Invoice refunds sequence
      • Create an invoice
      • Visual presentation at Cashier
      • Invoice hosted page
      • Online checkout
        • How-to
      • Payment links
      • Invoice callbacks
    • Payouts
      • Payout statuses
      • Payout sequence
      • Payout fees consideration
        • Network fees
      • Create a Coin Withdrawal
        • Possible errors
        • Withdrawals from fiat accounts
        • Withdrawals from cryptocurrency accounts
        • high_risk_address error message
      • Visual representation at Cashier
      • Minimum transaction amount
      • Coin Withdrawal callbacks
      • Travel Rule Compliance
    • Email Billing
      • Create an email billing
      • Email billing callbacks
    • Testing
      • Channels
      • Invoices
      • Payouts
    • Risks
    • Customers
    • Transactions types and Statuses
Powered by GitBook
On this page
  1. Guides
  2. Payouts

Create a Coin Withdrawal

PreviousNetwork feesNextPossible errors

Last updated 9 months ago

In order to create a coin withdrawal, it is necessary to know the following payment details:

  • Payment amount, for example 100

  • Payment currency, for example, EUR

  • Cryptocurrency type in which the payment is to be made, for example, BTC

  • Destination address, for example, 2MvWu1QjMuDWP4x3wZpPxhuVHpvfzBJmyw3

XRP and XLM addresses may require additional parameters specified:

  • Destination tag for XRP

  • Memo ID for XLM

Destination tag and Memo ID are similar to a reference number for bank transfers. They help to identify transactions when a single address is used by multiple users.

Destination tag can’t be left blank. Put “0” if the recipient has a unique XRP address. IMPORTANT: If you put “0“ as a destination tag for a wallet used by multiple users, your funds will be lost PERMANENTLY.

Thus, our API for a Coin Withdrawal will look like this:

curl -X POST \
  https://business-sandbox.cryptopay.me/api/coin_withdrawals \
  -H 'Authorization: HMAC ***' \
  -H 'Content-Type: application/json' \
  -H 'Date: Tue, 19 Mar 2019 10:11:40 GMT' \
  -d '{"charged_currency":"EUR", "charged_amount_to_send":"100", "address":"2MyYeAkU162aMh3otEhYHP9yhUR7xqS7S1r", "received_currency":"BTC", "network": "bitcoin", "custom_id":"113562013", "force_commit":"false"}' 

Let’s go through the parameters that we used in the request above:

  • charged_amount_to_send - the payment amount

  • charged_currency - the currency of payment

  • address - the recipient's wallet address

XRP and XLM addresses require additional parameters specified by adding destination tag or memo ID to address like this: address?dt=destination_tag

  • custom_id - we recommend you specify a certain reference by which you associate your customer with the payment, for example 113562013

  • force_commit - the setting to set up the two-step withdrawal process. If false the coin withdrawal transaction needs to be committed within 30 seconds. Is false if omitted.

  • charged_amount - in this case, if we had used this parameter to specify the amount of payment, Cryptopay would have included the amount of all fees in the amount of the transaction sent. Thus, the BTC transaction with an amount of less than 100 EUR at the exchange rate at the time of the payment request would have been sent to the recipient's address.

We have just sent a 100 EUR Coin Withdrawal request and received the following response from the API.

In case we used charged_amount:

{
  "data": {
    "id": "945965c5-737f-4716-a55d-0392129843f5",
    "custom_id": "113562013",
    "customer_id": null,
    "address": "2MyYeAkU162aMh3otEhYHP9yhUR7xqS7S1r",
    "network": "bitcoin",
    "txid": null,
    "status": "pending",
    "charged_amount": "100.0",
    "charged_currency": "EUR",
    "received_amount": "0.00318659",
    "received_currency": "BTC",
    "network_fee": "0.0000054",
    "network_fee_level": "average",
    "fee": "0.0",
    "fee_currency": "BTC",
    "exchange": {
      "pair": "BTCEUR",
      "rate": "31015.045",
      "fee": "1.0",
      "fee_currency": "EUR"
    },
    "risk": null,
    "created_at": "2019-05-02T12:08:46Z"
  }
}

In case we used charged_amount_to_send:

{
  "data": {
    "id": "c7969faa-a080-4c4d-aeaf-d631b687cc5f",
    "custom_id": "113562013",
    "customer_id": null,
    "address": "2MyYeAkU162aMh3otEhYHP9yhUR7xqS7S1r",
    "network": "bitcoin",
    "txid": null,
    "status": "pending",
    "charged_amount": "101.19",
    "charged_currency": "EUR",
    "received_amount": "0.00324701",
    "received_currency": "BTC",
    "network_fee": "0.0000054",
    "network_fee_level": "average",
    "fee": "0.0",
    "fee_currency": "BTC",
    "exchange": {
      "pair": "BTCEUR",
      "rate": "30797.564",
      "fee": "1.02",
      "fee_currency": "EUR"
    },
    "risk": null,
    "created_at": "2019-05-02T12:08:46Z"
  }
}

The coin withdrawal was created with the initial status “Pending”.

The “Completed” status means that Cryptopay has processed your request and sent the transaction has been sent to the network. This status does not mean that the transaction has shown up on the recipient's wallet balance, since, as explained above, it will take some time for the transaction to be confirmed by the miners.

Sometimes when the transaction status is updated to “Failed” instead of “Completed”, it means that Cryptopay was unable to send the transaction. In this case, the funds charged from the merchant's account will be refunded to the balance. It usually takes from minutes to several hours to return the funds and does not require any action by the merchant.

network - the blockchain in which the withdrawal is going to be created. The list of available networks can be found .

In the example above, we used the charged_amount_to_send parameter to specify the amount of payment. However, if you look at , you will see that the charged_amount parameter can also be used instead of charged_amount_to_send to specify the payment amount. So what is the difference? The fact is that it will depend on whether the Cryptopay fee and miner fee will be included in the payment amount or whether it will be charged from the merchant balance above it:

сharged_amount_to_send - from the example above, when using this parameter, Cryptopay will deduct the entire fee from the merchant balance and not the transaction amount. In this way, the BTC transaction with the amount of 100 EUR will be sent to the recipient's address at the time of processing the payment request.

Once you have created a Coin withdrawal, we recommend that you check the payment status with a , as the delivery of the callbacks is not guaranteed.

request
here
the endpoint description
at the rate
separate request