CryptAPI.io - Payment API Documentation (v3.2.0)

Download OpenAPI specification:Download

CryptAPI.io is a cryptocurrency payment API.

It is designed with the intent to allow you to integrate multiple coin payments in your service with the least effort possible.

There are no sign-ups, lengthy implementations or API keys required, it is as easy as a simple CURL request to create a new payment address.

The only thing required is that you implement the logic on your server to handle the callbacks sent to your server when the transaction from the client is confirmed.

For the documentation of BlockBee click here.

Receive a payment

Endpoints to receive payments.

Create new address

This method is used to generate a new address to give your clients, where they can send payments.

Notice: The length of this request can't surpass the 8192 characters!

Please make sure when sending a transaction you consult the minimum transfer value for the crypto/token you wish to use. If the value you send is bellow our minimums, CryptAPI will ignore the transaction.

Before delving into the documentation, why not check if the libraries already have the functionality you need? It could save you time and effort in the long run!

Request
path Parameters
ticker
required
string

The ticker parameter in this CryptAPI request refers to the unique identifier of the cryptocurrency to which you are making the request. It is included in the URL of the request and helps to specify the exact cryptocurrency that you want to retrieve data for. The ticker is typically a short code that uniquely identifies the cryptocurrency, token, and its blockchain.

For instance, the ticker for Bitcoin is btc, and the ticker for USDT over TRC-20 is trc20/usdt. With this in mind, a request for USDT over TRC-20 would look like this: https://api.cryptapi.io/trc20/usdt/create/

Currently supported cryptocurrencies/tokens can be checked on the Supported Coins page.

query Parameters
callback
required
string

The URL the callbacks will be sent to. Must be a valid URL.

Attention:

- The callback URL should be unique. Duplicated callback URLs will return the same address_in. You can make your callback URL unique by adding GET parameters, like: ?user_id=1234

- The callback URL needs to be urlencoded, otherwise the GET parameters you add may be lost.

For a complete list of fields sent by our system, please refer to our callback documentation.

Note: To prevent repeated callbacks to your systems, the response to the callback request should be *ok* in plain text.

address
string

Address or addresses where the payment will be forwarded to.

In case of multiple addresses, it should be in the following format: <percentage_1>@<address_1>|<percentage_2>@<address_2> and so on.

Percentages are set from 0.0001 (0.01%) to 1.0 (100%) and must add up to 1.00 (100%).

Addresses must be valid.

Note: For multiple addresses the minimum value per transaction (see cryptocurrencies page) is multiplied by the following formula: 1 + (N - 1) / 3, where N is the number of output addresses.

Check our knowledge base for more information about multi-address minimums.

pending
integer

If you wish to receive notifications for transactions that are pending and not yet confirmed, set this value to 1.

For a comprehensive list of all fields that our system sends, please consult our pending callback documentation.

Note: In order to avoid multiple callbacks to your systems, please respond to the callback request with the plain text message *ok*.

confirmations
integer

Number of blockchain confirmations you want before receiving the callback (Min. 1)

email
string

E-mail address to receive payment notifications

Note: before getting e-mail payment notifications, you must confirm your e-mail address here.

post
integer

Set this to 1 if you wish to receive the callback as a POST request (default: GET)

priority
string

Users can set the priority for forwarding funds to the provided address using this parameter.

The priority is determined by the amount of fees paid to the blockchain network, which can impact the speed of transaction confirmation.

Please note that this value varies depending on the currency/network being used.

Check our knowledge base for more information about this parameter.

multi_token
integer

Enabling this parameter allows customers to make payments using any token that is supported by the system, even if it differs from the one specified by the user initially.

However, it is important to ensure that your Wallet supports the tokens you expect clients to pay with and that your system can handle price conversions. For instance, if a user requests to receive 1000 USDT (or equivalent), but the client sends 1000 TRX, the system must be capable of handling this scenario.

Please note that this parameter is disabled by default, and must be set to 1 to enable it. For more detailed information regarding this parameter, please refer to our knowledge base.

Important Note: This parameter is only available for TRC-20, BEP-20, ERC-20, and POLYGON networks.

multi_chain
integer

Enabling this parameter allows you to create the same address on all chains that share the same addresses, such as Polygon, Binance Smart Chain, and Ethereum, which enables you to receive payments on all of them.

Please note that this parameter only creates an address for the specified token, and if the token is not supported on one of the chains, the address will not be created on that chain. If you enable multi_token, it will still create but will default for USDT.

It is also important for users to ensure that your Wallet supports all of the specified chains, as BlockBee cannot reverse any payments sent through an unsupported chain.

In addition, this parameter can be paired with multi_token to accept any token sent by the customer, provided it's supported by our systems in the blockchain where it was sent.

Important Note: This parameter is disabled by default, and must be set to 1 to enable it. For more detailed information regarding this parameter, please refer to our knowledge base.

convert
integer

Set this to 1 to enable it (default: 0).

If enabled, returns the converted value converted to FIAT in the callback, with the parameters value_coin_convert and value_forwared_coin_convert. The value of the fields are json-encoded.

Responses
200

Address was created

Response Schema: application/json
address_in
string

Generated Address, give this to your client

address_out
string

Your address(es), where the payment will be forwarded to, should be the same address(es) you provided.

callback_url
string

The callback URL you provided

priority
string

The confirmation priority you requested

status
string

Status

400

Error creating address

get/{ticker}/create/
Request samples
Response samples
application/json
{
  • "address_in": "14PqCsA7KMgseZMPwg6mJy754MtQkrgszu",
  • "address_out": "1H6ZZpRmMnrw8ytepV3BYwMjYYnEkWDqVP (single address) {1H6ZZpRmMnrw8ytepV3BYwMjYYnEkWDqVP: 0.70, 1PE5U4temq1rFzseHHGE2L8smwHCyRbkx3: 0.30} (multiple addresses)",
  • "callback_url": "example.com/invoice/1234?payment_id=5678",
  • "priority": "default",
  • "status": "success"
}

Check payment logs

This method is used to check logs for your callback URLs.

Request
path Parameters
ticker
required
string

The ticker parameter in this CryptAPI request refers to the unique identifier of the cryptocurrency to which you are making the request. It is included in the URL of the request and helps to specify the exact cryptocurrency that you want to retrieve data for. The ticker is typically a short code that uniquely identifies the cryptocurrency, token, and its blockchain.

For instance, the ticker for Bitcoin is btc, and the ticker for USDT over TRC-20 is trc20/usdt. With this in mind, a request for USDT over TRC-20 would look like this: https://api.cryptapi.io/trc20/usdt/create/

Currently supported cryptocurrencies/tokens can be checked on the Supported Coins page.

query Parameters
callback
required
string

The URL of the callback. Must be URL Encoded.

Responses
200

List of payments sent to this callback

Response Schema: application/json
address_in
string

Generated Address, give this to your client

address_out
string

Your address(es), where the payment will be forwarded to, should be the same address(es) you provided.

callback_url
string

The callback URL you provided

status
string

Status

notify_pending
boolean

Get notified of pending transactions

notify_confirmations
integer

Number of confirmations required before sending the callback

priority
string

The confirmation priority you requested

Array of objects (log_items)

List of payments made to this address

400

Your request couldn't be processed, please try again later

404

No request or no payment callbacks found

get/{ticker}/logs/
Request samples
Response samples
application/json
{}

Utils

Utilitaries that give useful information.

Check coin information

This endpoint is used to check the information of the cryptocurrency you want to use.

Request
path Parameters
ticker
required
string

The ticker parameter in this CryptAPI request refers to the unique identifier of the cryptocurrency to which you are making the request. It is included in the URL of the request and helps to specify the exact cryptocurrency that you want to retrieve data for. The ticker is typically a short code that uniquely identifies the cryptocurrency, token, and its blockchain.

For instance, the ticker for Bitcoin is btc, and the ticker for USDT over TRC-20 is trc20/usdt. With this in mind, a request for USDT over TRC-20 would look like this: https://api.cryptapi.io/trc20/usdt/create/

Currently supported cryptocurrencies/tokens can be checked on the Supported Coins page.

query Parameters
prices
integer

If you want to receive also the coin prices, set to 0 to disable the prices (default: 1)

Responses
200

Info fetched successfully

Response Schema: application/json
coin
string

Human readable name of the currency

minimum_transaction
integer

Minimum transaction value for this currency, values below this value are disregarded

minimum_fee
integer

CryptAPI's minimum fee for this currency, in atomic units

fee_percent
number

Fee percentage for this currency

prices_updated
string

Datetime of the last price update

status
string

Status

prices
object

Object with the exchange rate of this currency in various FIAT currencies.

Keys are the names of the currencies, values are the exchange rates.

updated every 5min.

400

Error fetching info

get/{ticker}/info/
Request samples
Response samples
application/json
{
  • "coin": "Bitcoin",
  • "minimum_transaction": "20000",
  • "minimum_fee": "200",
  • "fee_percent": "1.00",
  • "prices_updated": "2019-10-14T13:00:09.585Z",
  • "status": "success",
  • "prices": "{'DKK': '56281.94', 'CAD': '10985.14', 'AED': '30517.01', 'BRL': '34243.36', 'USD': '8308.47', 'MXN': '160193.26', 'CNY': '58740.88', 'INR': '591471.72', 'JPY': '899719.16', 'HKD': '65173.93', 'GBP': '6616.08', 'EUR': '7535.35'}"
}

Generate QR Code

This method generates a base64-encoded image for payments

Request
path Parameters
ticker
required
string

The ticker parameter in this CryptAPI request refers to the unique identifier of the cryptocurrency to which you are making the request. It is included in the URL of the request and helps to specify the exact cryptocurrency that you want to retrieve data for. The ticker is typically a short code that uniquely identifies the cryptocurrency, token, and its blockchain.

For instance, the ticker for Bitcoin is btc, and the ticker for USDT over TRC-20 is trc20/usdt. With this in mind, a request for USDT over TRC-20 would look like this: https://api.cryptapi.io/trc20/usdt/create/

Currently supported cryptocurrencies/tokens can be checked on the Supported Coins page.

query Parameters
address
required
string

The payment address (address_in from our system)

value
integer

Value to request the user, in the main coin (BTC, ETH, etc...). Optional.

Note: Some user wallets don't support this, only the address. Use at your own discretion.

size
integer

Size of the QR Code image in pixels. Min: 64 Max: 1024 Default: 512

Responses
200

The QR Code

Response Schema: application/json
status
string

Status

qr_code
string

Base64-encoded image of the QR Code. Use it like this: <img src='data:image/png;base64,{qr_code}' alt='Payment QR Code'/>

payment_uri
string

Payment URI, useful if you want to make a clickable payment button.

get/{ticker}/qrcode/
Request samples
Response samples
application/json
{
  • "status": "success",
  • "qr_code": "...",
  • "payment_uri": "..."
}

Estimate Blockchain Fees

This method allows you to estimate blockchain fees to process a transaction.

Attention: This is an estimation only, and might change significantly when the transaction is processed. CryptAPI is not responsible if blockchain fees when forwarding the funds differ from this estimation.

Note: These not include CryptAPI's fees.

Request
path Parameters
ticker
required
string

The ticker parameter in this CryptAPI request refers to the unique identifier of the cryptocurrency to which you are making the request. It is included in the URL of the request and helps to specify the exact cryptocurrency that you want to retrieve data for. The ticker is typically a short code that uniquely identifies the cryptocurrency, token, and its blockchain.

For instance, the ticker for Bitcoin is btc, and the ticker for USDT over TRC-20 is trc20/usdt. With this in mind, a request for USDT over TRC-20 would look like this: https://api.cryptapi.io/trc20/usdt/create/

Currently supported cryptocurrencies/tokens can be checked on the Supported Coins page.

query Parameters
addresses
integer

The number of addresses to forward the funds to. Default: 1

priority
string

Different per currency/network. Check our knowledge base for more information about this parameter.

Responses
200

Estimated cost

Response Schema: application/json
status
string

Status

estimated_cost
integer

Estimated cost in the coin

estimated_cost_currency
object

Object with the estimated cost in various FIAT currencies.

Keys are the names of the currencies, values are the estimated costs.

400

Your request couldn't be processed, please try again later

get/{ticker}/estimate/
Request samples
Response samples
application/json
{
  • "status": "success",
  • "estimated_cost": "0.00001",
  • "estimated_cost_currency": "{'USD': '0.09', 'EUR': '0.08', 'GBP': '0.07', 'CAD': '0.11', 'JPY': '10.21', 'AED': '0.33', 'DKK': '0.58', 'BRL': '0.46', 'CNY': '0.56', 'HKD': '0.69', 'INR': '6.67', 'MXN': '1.81', 'UGX': '310.74', 'PLN': '0.35', 'PHP': '4.56', 'CZK': '1.91', 'HUF': '27.95', 'BGN': '0.15', 'RON': '0.39', 'LKR': '18.02'}"
}

Convert prices

This method allows you to easily convert prices from FIAT to Crypto or even between cryptocurrencies

Request
path Parameters
ticker
required
string

The ticker parameter in this CryptAPI request refers to the unique identifier of the cryptocurrency to which you are making the request. It is included in the URL of the request and helps to specify the exact cryptocurrency that you want to retrieve data for. The ticker is typically a short code that uniquely identifies the cryptocurrency, token, and its blockchain.

For instance, the ticker for Bitcoin is btc, and the ticker for USDT over TRC-20 is trc20/usdt. With this in mind, a request for USDT over TRC-20 would look like this: https://api.cryptapi.io/trc20/usdt/create/

Currently supported cryptocurrencies/tokens can be checked on the Supported Coins page.

query Parameters
value
required
number

Value to convert

from
required
string

Specify the type of currency you wish to convert, whether it is a FIAT currency or a cryptocurrency.

For a complete list of the cryptocurrencies we support, please refer to our Supported Coins page.

In case your desired FIAT currency is not included in the list of supported currencies, please don't hesitate to reach out to us so that we can add it to our service:

  • (USD) United States Dollar
  • (EUR) Euro
  • (GBP) Great Britain Pound
  • (CAD) Canadian Dollar
  • (JPY) Japanese Yen
  • (AED) UAE Dollar
  • (MYR) Malaysian Ringgit
  • (IDR) Indonesian Rupiah
  • (THB) Thai Baht
  • (CHF) Swiss Franc
  • (COP) Colombian Peso
  • (SGD) Singapore Dollar
  • (RUB) Russian Ruble
  • (ZAR) South African Rand
  • (TRY) Turkish Lira
  • (LKR) Sri Lankan Rupee
  • (XAF) CFA Franc
  • (RON) Romanian Leu
  • (BGN) Bulgarian Lev
  • (HUF) Hungarian Forint
  • (CZK) Czech Koruna
  • (PHP) Philippine Peso
  • (PLN) Poland Zloti
  • (UGX) Uganda Shillings
  • (MXN) Mexican Peso
  • (INR) Indian Rupee
  • (HKD) Hong Kong Dollar
  • (CNY) Chinese Yuan
  • (BRL) Brazilian Real
  • (DKK) Danish Krone
Example: from=usd
Responses
200

The value converted

Response Schema: application/json
value_coin
number

The converted value

exchange_rate
number

The exchange rate between the 2 currencies

status
string

Status

400

Your request couldn't be processed, please try again later

get/{ticker}/convert/
Request samples
Response samples
application/json
{
  • "value_coin": "0.01",
  • "exchange_rate": "47000",
  • "status": "success"
}

Callbacks

This is the Callback documentation. Be aware that, these callbacks are sent by our API to your platform. The Callbacks are triggered when the user sends the payment to the address generated by our system. Your platform should be able to handle these callbacks.

The callbacks will be sent with an extra header, x-ca-signature, which is a base64-encoded 1024-bit RSA-SHA256 signature of the callback. The data signed depends on what type of callback you're receiving: if it's sent via GET then the full request URL to your system (including all GET parameters) are signed, if it's sent via POST then the entire body of the request is signed.

The Public Key for the verification can be retrieved from this endpoint.

Check our knowledge base to learn how to verify the callback with code samples.

Pending CallbackWebhook

Callback issued when a client's transaction is pending confirmation.

Note 1: Only issued if you have requested to be notified of pending transactions.

Note 2: Sent via POST if post=1 parameter set, else sent via GET

We strongly advise against whitelisting our callback IPs, because they might change in the future without warning, but if you really need to, at this moment the callbacks will be sent from the following IPs: 145.239.119.223 and 135.125.112.47

Request
query Parameters
uuid
string

This is an unique identifier to each payment your clients have made, so you can easily track any duplicate callbacks sent, in the case our system doesn't mark the callback as successful

Example: uuid=dbfcb40e-5a6b-4305-9fa2-b0fbda6e3ff2
address_in
string

Address where your client's payment was received

Example: address_in=14PqCsA7KMgseZMPwg6mJy754MtQkrgszu
address_out
string

Address(es) where we forwarded your payment

Example: address_out=1H6ZZpRmMnrw8ytepV3BYwMjYYnEkWDqVP (single address) {1H6ZZpRmMnrw8ytepV3BYwMjYYnEkWDqVP: 0.70, 1PE5U4temq1rFzseHHGE2L8smwHCyRbkx3: 0.30} (multiple addresses)
txid_in
string

Transaction hash of your client's payment

Example: txid_in=a2174ffd39289100709f2a07b129cdbba69df2e22e5be1830221dab1fd4e332c
confirmations
integer

Number of confirmations of the current transaction

Example: confirmations=1
value
integer
Deprecated

Value of the payment in integer. Field meant to help with precise calculations on some platforms

Notice: For some stable coins (e.g USDT or BUSD), this field always come rounded to 'cents' (two decimals), meaning you must always divide it by 100.
Example: If value=1054, 1054/100=10.54.

It's recomended to use the value_coin field instead

Example: value=50000
value_coin
number

Value of the payment

Example: value_coin=0.05
value_coin_convert
string

Converted value to various FIAT currencies of the value_coin. Response is json-encoded.

Notice: This parameter will only be shown if added the convert=1 parameter in the /create/ endpoint.

Example: value_coin_convert={"USD": "3.20", "EUR": "3.05", "GBP": "2.62", "CAD": "4.16", "JPY": "431.90", "AED": "11.77", "DKK": "22.67", "BRL": "16.52", "CNY": "21.43", "HKD": "25.16", "INR": "249.97", "MXN": "64.95", "UGX": "11975.46", "PLN": "14.25", "PHP": "173.14", "CZK": "75.37", "HUF": "1220.10", "BGN": "5.94", "RON": "15.02", "LKR": "1153.30", "TRY": "55.54", "ZAR": "51.36", "RUB": "181.24"}
coin
string

Ticker of the coin used for the payment: ['btc', 'bch', 'ltc', 'eth', 'xmr', 'trx', 'iota']

For ERC-20 (ETH) Tokens, this parameter will be erc20_ + the ticker of the token, e.g erc20_usdt

For TRC-20 (Tron) Tokens, this parameter will be trc20_ + the ticker of the token, e.g trc20_usdt

For BEP-20 (BSC) Tokens, this parameter will be bep20_ + the ticker of the token, e.g bep20_usdt

For Polygon Tokens, this parameter will be polygon_ + the ticker of the token, e.g polygon_usdt

Example: coin=btc
price
number

Coin price in USD at the time of receiving

Example: price=55.59
pending
integer

1 if transaction is pending

Example: pending=1
Responses
200

Expected response from your server

Response Schema: text/plain
string
Response samples
text/plain
*ok*

Confirmed CallbackWebhook

Callback issued when a client's transaction has been confirmed by the network.

Note: Sent via POST if post=1 parameter set, else sent via GET

We strongly advise against whitelisting our callback IPs, because they might change in the future without warning, but if you really need to, at this moment the callbacks will be sent from the following IPs: 145.239.119.223 and 135.125.112.47

Note: To prevent repeated callbacks sent to your systems, please respond with *ok* to our callbacks.

Request
query Parameters
uuid
string

This is an unique identifier to each payment your clients have made, so you can easily track any duplicate callbacks sent, in the case our system doesn't mark the callback as successful

Example: uuid=dbfcb40e-5a6b-4305-9fa2-b0fbda6e3ff2
address_in
string

Address where your client's payment was received

Example: address_in=14PqCsA7KMgseZMPwg6mJy754MtQkrgszu
address_out
string

Address(es) where we forwarded your payment

Example: address_out=1H6ZZpRmMnrw8ytepV3BYwMjYYnEkWDqVP (single address) {1H6ZZpRmMnrw8ytepV3BYwMjYYnEkWDqVP: 0.70, 1PE5U4temq1rFzseHHGE2L8smwHCyRbkx3: 0.30} (multiple addresses)
txid_in
string

Transaction hash of your client's payment

Example: txid_in=a2174ffd39289100709f2a07b129cdbba69df2e22e5be1830221dab1fd4e332c
txid_out
string

Transaction hash of our the payment forwarded to you

Example: txid_out=a2174ffd39289100709f2a07b129cdbba69df2e22e5be1830221dab1fd4e332c
confirmations
integer

Number of confirmations of the current transaction

Example: confirmations=1
fee
integer
Deprecated

CryptAPI fee in integer. Field meant to help with precise calculations on some platforms

Example: fee=500
value
integer
Deprecated

Value of the payment in integer. Field meant to help with precise calculations on some platforms

Notice: For some stable coins (e.g USDT or BUSD), this field always come rounded to 'cents' (two decimals), meaning you must always divide it by 100.
Example: If value=1054, 1054/100=10.54.

It's recomended to use the value_coin field instead

Example: value=50000
value_coin
number

Value of the payment

Example: value_coin=0.05
value_coin_convert
string

Converted value to various FIAT currencies of the value_coin. Response is json-encoded.

Notice: This parameter will only be shown if added the convert=1 parameter in the /create/ endpoint.

Example: value_coin_convert={"USD": "3.20", "EUR": "3.05", "GBP": "2.62", "CAD": "4.16", "JPY": "431.90", "AED": "11.77", "DKK": "22.67", "BRL": "16.52", "CNY": "21.43", "HKD": "25.16", "INR": "249.97", "MXN": "64.95", "UGX": "11975.46", "PLN": "14.25", "PHP": "173.14", "CZK": "75.37", "HUF": "1220.10", "BGN": "5.94", "RON": "15.02", "LKR": "1153.30", "TRY": "55.54", "ZAR": "51.36", "RUB": "181.24"}
value_forwarded
integer
Deprecated

Value forwarded to you, after fees in integer. Field meant to help with precise calculations on some platforms

Example: value_forwarded=50000
value_forwarded_coin
number

Value forwarded to you, after fees

Example: value_forwarded_coin=0.05
value_forwarded_coin_convert
string

Converted value to various FIAT currencies of the value_forwarded_coin. Response is json-encoded.

Notice: This parameter will only be shown if added the convert=1 parameter in the /create/ endpoint.

Example: value_forwarded_coin_convert={"USD": "3.17", "EUR": "3.01", "GBP": "2.59", "CAD": "4.12", "JPY": "427.16", "AED": "11.64", "DKK": "22.41", "BRL": "16.33", "CNY": "21.20", "HKD": "24.88", "INR": "247.19", "MXN": "64.25", "UGX": "11855.29", "PLN": "14.08", "PHP": "171.25", "CZK": "74.50", "HUF": "1206.19", "BGN": "5.88", "RON": "14.86", "LKR": "1140.51", "TRY": "54.93", "ZAR": "50.82", "RUB": "179.22"}
fee_coin
number

CryptAPI Fee

Example: fee_coin=0.02
coin
string

Ticker of the coin used for the payment: ['btc', 'bch', 'ltc', 'eth', 'xmr', 'trx', 'iota']

For ERC-20 (ETH) Tokens, this parameter will be erc20_ + the ticker of the token, e.g erc20_usdt

For TRC-20 (Tron) Tokens, this parameter will be trc20_ + the ticker of the token, e.g trc20_usdt

For BEP-20 (BSC) Tokens, this parameter will be bep20_ + the ticker of the token, e.g bep20_usdt

For Polygon Tokens, this parameter will be polygon_ + the ticker of the token, e.g polygon_usdt

Example: coin=btc
price
number

Coin price in USD at the time of receiving

Example: price=55.59
pending
integer

If 0 means transaction was paid.

Example: pending=0
Responses
200

Expected response from your server

The callback will be marked as successful when it receives the following response from your server

Response Schema: text/plain
string
Response samples
text/plain
*ok*