On- and Off-Ramp API Specification (1.6.0)

About

Mercuryo On-Ramp & Off-Ramp API solution allows to exchange cryptocurrencies to fiat money directly in your app or on your website.

Getting Started

Before using the Sandbox environment, prepare these:

  • IP addresses to add to the whitelist.
  • An email address to log in.

The Sandbox environment works with the following networks:

Testnet Address Supported Cryptocurrency
BTC Testnet msBE6aCaAesegu4VzbQW3L5xWBL8vi15Q7 Bitcoin
ETH Sepolia 0xA14691F9f1F851bd0c20115Ec10B25FC174371DF Ethereum (ETH) and USDT

Contact your integration manager. You will get the sdk-partner-token to sign up user registration and authorization endpoints.

All the requests must contain:

  • Content Type: application/json
  • Accept: application/json
  • User Agent: {PartnerName}

Recommendations:

All Mercuryo API endpoints accept the B2B-User-Ip header, and it is strongly recommended that all requests contain the real IP address of end-user in this header. If there is no end-user's IP, Mercuryo reserves the right to reject transactions according to its internal rules.

API URL: https://sandbox-cryptosaas.mrcr.io/v1.6/.

User Fees

Mercuryo charges fees for:

  • Exchanging fiat money to crypto.
  • Exchanging crypto to fiat money.

Fee information must be available to the user at any moment.

You can include additional fees to the list: Mercuryo’s Fees + Your Fees = Total Fee. Contact your account manager to adjust the fee policy.

Sign-Up

The user must accept the Terms of Service before signing up. You have to ask the user to agree to the Terms of Service on your front end. You will send user’s consent in the accept parameter of POST /b2b/user/sign-up.

All Mercuryo API endpoints — except for the authorization endpoints — require b2b-bearer-token header. Mercuryo uses the header to identify the merchant/user context.

The b2b-bearer-token expires in 24 hours for the Production environment. You can authorize the user again or refresh the token after that. The b2b-bearer-token doesn’t expire in the Sandbox environment.

Steps

  1. Ask your account manager to give you the sdk-partner-token.
  2. Use the sdk-partner-token to sign authorization endpoints.
  3. Use POST /b2b/user/sign-up to sign up a user.

Sign-In

Use POST /b2b/user/sign-in to sign in a user, or use GET /b2b/user/refresh-token to refresh the b2b-bearer-token.

Transaction ID

You can assign an ID to each transaction. Pass your transaction ID in the merchant_transaction_id field.

Transaction ID format: ^[A-Za-z0-9-_]{1,255}$. Any lowercase and uppercase letter of the Latin alphabet, digits, underscore, and hyphen. Total length is up to 255 characters.

KYC

Know Your Customer (KYC) procedures are indispensable for financial institutions to verify their clients and keep business on the safe side.

KYC procedures help Mercuryo fight financial crime. Therefore, it prevents mixing your users’ funds with illegal funds of bad actors and perpetrators of any sort. Identity verification is a legal obligation to be compliant with AML/CFT laws. Mercuryo is strongly committed to the highest industry standards of clients' security, which requires protecting the integrity of the entire financial system.

SumSub is the major KYC procedure provider of Mercuryo.

Note: Please be aware that there must be only one e-mail address per user. That is, if the existing user (who is already registered and passed the KYC procedure with one e-mail address) registers with another e-mail address and provides the same documents to pass the KYC procedure, this user will receive the KYC refusal under the new e-mail. Thus, e-mail address used in user registration must be wisely chosen.

Identity Verification

These documents can be acceptable identity verification:

  • Passport.
  • ID card.
  • Driving license.

The document must have:

  • Full name.
  • MRZ code.
  • Citizenship.
  • Date of birth.
  • Document number.
  • Issuing authority.
  • Date of issue.

Meet these requirements:

  • The document must be unexpired.
  • The document must be scanned or photographed.
  • All the corners and sides of the document must be visible.
  • All the information must be clear and readable.

Integration

There are two cases for integrating KYC procedures depending on your user onboarding:

  1. If you don’t implement any KYC procedures.
  2. If you implement SumSub KYC procedures.

Contact your account manager if you have any questions regarding KYC procedures.

SumSub Access Token

If you don’t implement any KYC procedures, we provide the SumSub interface to do KYC verification directly in Mercuryo.

URL example: https://sandbox-payments.mrcr.io/kyc?access_token=your_token&success_url=url&failure_url=url&scheme=your_scheme&lang=lang_code.

Parameter Description Type
access_token Get the access token using GET /b2b/kyc/access-token. Required
success_url URL-encoded JSON. Example: https://mercuryo.success.com. Required
failure_url URL-encoded JSON. Example: https://mercuryo.failure.com. Required
scheme Light or Dark appearance. Optional
lang The language is English by default. Supported languages: English, Chinese, Russian, French, Hindi, Indonesian, Japanese, Korean, Portuguese, Spanish, Turkish, Vietnamese. Optional

If redirect parameters are missing, the user won’t be redirected. status and msg parameters will be appended to failure_url. status: back if user clicks the back button. status: fail if you get an error.

Use GET /b2b/user/contacts to check user's email verification status.

Steps

  1. Use GET /b2b/user/kyc-status to get the KYC status. We can identify a user whom you registered by the email if we already have it:
    1. If in the list of features, feature: crypto is complete, then that’s it.
  2. Use GET /b2b/kyc/access-token to get the KYC access token.
  3. Use a URL to redirect the user to Mercuryo.
    1. The Production environment URL example: https://payments.mercuryo.io/kyc?access_token=your_token8&scheme=your_scheme&lang=lang_code.
    2. The Sandbox environment URL example: https://sandbox-payments.mrcr.io/kyc?access_token=your_token8&scheme=your_scheme&lang=lang_code.
    3. When testing KYC procedures for Sandbox, upload the documents and contact Mercuryo to approve the documents.
  4. Use GET /b2b/user/kyc-status to get the status for feature: crypto.
    1. Statuses:
      1. complete: KYC procedures are successfully complete.
      2. incomplete: SumSub hasn’t started the verification.
      3. failed_attempt: the first attempt to pass the verification failed. Try again.
      4. failed: the verification failed; the user isn’t allowed to create an IBAN. Contact Mercuryo Support.
      5. under_review: SumSub is verifying the documents.
  5. Use GET /b2b/kyc/documents to fetch details on uploaded KYC documents.

SumSub Share Token

If you have already integrated SumSub KYC procedures, you can share your SumSub applicants with Mercuryo using the share token. The SumSub share token is used by Mercuryo to share applicants and complete the KYC procedures. So, the users won’t have to do the verification twice. See how it works.

Make sure that your applicant’s documents are up-to-date before sharing an applicant using the share token. Mercuryo can accept the share token only once due to the SumSub architecture. The Sandbox environment requires approving users manually.

If Mercuryo already has an applicant who requires verification, use POST /b2b/user/kyc-documents or GET /b2b/kyc/access-token to send additional documents. Or contact Mercuryo Support.

Use GET /b2b/user/contacts to check user's email verification status.

Steps

  1. Use GET /b2b/user/kyc-status to get the KYC status. We can identify a user whom you registered by the email if we already have it:
    1. If in the list of features, feature: crypto is complete, then that’s it.
  2. Use SumSub API https://api.sumsub.com/resources/accessTokens/-/shareToken?applicantId=<applicant-Id>&forClientId=Mercuryo and ClientID Mercuryo to get the share token.
  3. Send the share token using POST /b2b/user/kyc-share-token.
  4. Use GET /b2b/user/kyc-status to get the status for feature: crypto.
    1. Statuses:
      1. complete: KYC procedures are successfully complete.
      2. incomplete: SumSub hasn’t started the verification.
      3. failed_attempt: the first attempt to pass the verification failed. Try again.
      4. failed: the verification failed; the user isn’t allowed to create an IBAN. Contact Mercuryo Support.
      5. under_review: SumSub is verifying the documents.
  5. Use GET /b2b/kyc/documents to fetch details on uploaded KYC documents.

On-Ramp Scenarios

If you’re not PCI-DSS certified, you will have to use Mercuryo interface to acquire the payment card data. Mercuryo interface is customizable.

You can enable the EUR 700 limit feature for crypto purchases with a payment card. A user will be able to buy crypto with a payment card until the limit of EUR 700 is reached. Contact your account manager to enable this feature. If the feature is enabled, use GET /b2b/user/card-limits-unverified to check user limits of the users who haven’t completed the KYC procedures.

Payment Card Crypto Purchase

Buying crypto with fiat money using a payment card.

The user must be signed in and verified (valid KYC). Mercuryo won’t complete the transaction if the verification is expired. Use GET /b2b/user/kyc-status to check user’s verification.

Use GET /b2b/user/contacts to check user's email verification status.

Check user limits before the transaction. Mercuryo won’t complete the transaction when beyond the limit. Use GET /b2b/user/card-limits to get limit details.

Slippage

If the price changes 1% or more upon calling the endpoint after acquiring rates, then the endpoint will contain an error with the 403004 code reading "Conversion rate has been changed”: Mercuryo won't create a transaction. Otherwise, Mercuryo will cover the price difference and the trade will have the rate which was acquired.

Acquire rates again if the elapsed time is more than an hour, because trx_token expires in one hour.

Steps

  1. Use GET /b2b/currencies to get available currencies.
  2. Use GET /b2b/oor/buy-methods to get available purchase methods.
  3. Use the card payment method to buy crypto with user’s payment card.
  4. Use GET /b2b/oor/buy-rates to get rates.
    1. The rates will be frozen and associated with the trx_token.
  5. Use GET /b2b/user/cards to get user’s saved payment cards. All new payment cards are saved automatically.
  6. (Optional) Use GET /b2b/user/contacts to ensure that the user's billing address is present.
    1. If the value of the is_billing_address_set property equals to false, use POST /b2b/user/billing-address to submit user's billing address.
  7. Use POST /b2b/oor/buy to start the transaction.
    1. Mercuryo creates the buy_card transaction.
    2. You will get a link to redirect the user. URL example: https://payments.mrcr.io/buy?parameters.
    3. User will be prompted to enter their billing address unless you explicitly send the billing address before finalizing the transaction via POST /b2b/oor/buy.
    4. Mercuryo will redirect the user to the success URL after confirming the payment card. Please contact your integration manager to set the URL.

Get the transaction status using GET /b2b/transactions?merchant_transaction_id={merchant_transaction_id}.

Crypto Purchase for PCI-DSS Certified

Buying crypto with fiat money using a payment card.

The user must be signed in and verified (valid KYC). Mercuryo won’t complete the transaction if the verification is expired. Use GET /b2b/user/kyc-status to check user’s verification.

Use GET /b2b/user/contacts to check user's email verification status.

Check user limits before the transaction. Mercuryo won’t complete the transaction when beyond the limit. Use GET /b2b/user/card-limits to get limit details.

Steps

  1. Use GET /b2b/currencies to get available currencies.
  2. Use GET /b2b/oor/buy-methods to get available purchase methods.
  3. Use the card payment method to buy crypto with user’s payment card.
  4. Use GET /b2b/oor/buy-rates to get rates.
    1. The rates will be frozen and associated with the trx_token.
  5. Use GET /b2b/user/cards to get user’s saved payment cards. All new payment cards are saved automatically.
  6. Use GET /b2b/user/contacts to ensure that the user's billing address is present.
    1. If the value of the is_billing_address_set property equals to false, use POST /b2b/user/billing-address to submit user's billing address.
  7. Use POST /b2b/oor/buy to start the transaction. For users with Brazil-issued payment cards and Brazilian reals only: pass the tin parameter in POST b2b/oor/buy/card. A Taxpayer Identification Number — which is CPF for Brazil — is required.
    1. POST b2b/oor/buy/card returns a 3-D secure redirect. This redirect contains uri_template. Redirect the user to the URL from uri_template and pass the parameters of the 3-D secure redirect.
    2. Create an iframe in your app to connect to the domain specified in the src attribute. Wait till onLoad is finished and pass the 3-D secure object in the iframe. Process the message at the front end after the 3-D secure form is complete.
    3. Mercuryo will redirect the user to the success URL after confirming the payment card. Please contact your integration specialist to set the URL.

Get the transaction status using GET /b2b/transactions?merchant_transaction_id={merchant_transaction_id}.

Bank Transfer Crypto Purchase

Buying crypto with fiat money.

The user must be signed in and verified (valid KYC). Mercuryo won’t complete the transaction if the verification is expired. Use GET /b2b/user/kyc-status to check user’s verification.

Use GET /b2b/user/contacts to check user's email verification status.

Check user limits before the transaction. Mercuryo won’t complete the transaction when beyond the limit. Use /b2b/user/iban-limits/buy to get limit details.

Slippage

If the rate changes more than 1%, the trade will have the new rate. If the rate changes less than 1%, the trade will have the old rate.

Acquire rates again if the elapsed time is more than an hour, because trx_token expires in one hour.

Steps

  1. Use GET /b2b/currencies to get available currencies.
  2. Use GET /b2b/oor/buy-methods to get available purchase methods.
  3. Use the iban_invoice payment method to buy crypto with user’s payment card.
  4. Use GET /b2b/oor/buy-rates to get rates.
    1. The rates will be frozen and associated with the trx_token.
  5. Use POST /b2b/oor/buy/iban-invoice to start the transaction.
    1. Mercuryo returns payment details and invoice_id.
    2. Mercuryo creates the buy_iban_invoice transaction after receiving the funds of the correct amount with invoice_id stated in the payment purpose.

Get the transaction status using GET /b2b/transactions?merchant_transaction_id={merchant_transaction_id}.

Off-Ramp Scenarios

If you’re not PCI-DSS certified, you will have to use Mercuryo interface to acquire the payment card data. Mercuryo interface is customizable.

Payment Card Crypto Sell

Selling crypto for fiat money and withdrawing funds to a payment card.

The user must be signed in and verified (valid KYC). Mercuryo won’t complete the transaction if the verification is expired. Use GET /b2b/user/kyc-status to check user’s verification.

Use GET /b2b/user/contacts to check user's email verification status.

Check user limits before the transaction. Mercuryo won’t complete the transaction when beyond the limit. Use GET /b2b/user/card-limits to get limit details.

Slippage

Wait for a deposit after successfully using POST /b2b/oor/sell. If the price changes upon receiving a deposit more than 5%, Mercuryo won't create a transaction. Mercuryo will return the deposit. Otherwise, Mercuryo will cover the slippage and the trade will have the rate which was acquired.

Acquire rates again if the elapsed time is more than an hour, because trx_token expires in one hour.

Steps

  1. Use GET /b2b/currencies to get available currencies.
  2. Use GET /b2b/oor/sell-methods to get available sell methods.
  3. Use the card payment method to sell crypto and withdraw funds to user’s payment card.
  4. Use GET /b2b/oor/sell-rates to get rates.
    1. The rates will be frozen and associated with the trx_token.
  5. Use GET /b2b/user/cards to get user’s saved payment cards. All new payment cards are saved automatically.
  6. Use POST /b2b/oor/sell to get a link to redirect the user.
    1. You will get a link to redirect the user. URL example: https://payments.mrcr.io/sell?parameters.
    2. You will get an address to deposit crypto in the GET parameter of the redirect after successfully binding the payment card. Mercuryo will redirect the user to the success URL after confirming the payment card. Please contact your integration specialist to set the URL.
    3. Mercuryo creates the sell_card transaction after receiving crypto. If the sell_card transaction fails, Mercuryo will return crypto to the specified address within two hours.
  7. Get the address parameter value from the URL — which is a blockchain wallet — to send the crypto.
    1. Check the signature parameter value from the URL. It must be the same as the generated hash made up of address and merchant_transaction_id values in JSON, ex. [”address”:”crypto_address”,“merchant_transaction_id”:”123”]. This is a security measure to prevent the money theft.

Get the transaction status using GET /b2b/transactions?merchant_transaction_id={merchant_transaction_id}.

Crypto Sell for PCI-DSS Certified

Selling crypto for fiat money and withdrawing funds to a payment card.

The user must be signed in and verified (valid KYC). Mercuryo won’t complete the transaction if the verification is expired. Use GET /b2b/user/kyc-status to check user’s verification.

Use GET /b2b/user/contacts to check user's email verification status.

Check user limits before the transaction. Mercuryo won’t complete the transaction when beyond the limit. Use GET /b2b/user/card-limits to get limit details.

Steps

  1. Use GET /b2b/currencies to get available currencies.
  2. Use GET /b2b/oor/sell-methods to get available sell methods.
  3. Use the card payment method to sell crypto and withdraw funds to user’s payment card.
  4. Use GET /b2b/oor/sell-rates to get rates.
    1. The rates will be frozen and associated with the trx_token.
  5. Use GET /b2b/user/cards to get user’s saved payment cards. All new payment cards are saved automatically.
  6. Use POST /b2b/oor/sell/card to get the address for depositing crypto.
    1. POST /b2b/oor/sell/card returns a 3-D secure redirect object. This redirect contains uri_template. Redirect the user to the URL from uri_template and pass the parameters of the 3-D secure redirect.
    2. Mercuryo creates the sell_card transaction after receiving crypto.
      1. If the sell_card transaction fails, Mercuryo will return crypto to the specified address within two hours.
    3. Mercuryo will redirect the user to the success URL after confirming the payment card. Please contact your integration specialist to set the URL.

Get the transaction status using GET /b2b/transactions?merchant_transaction_id={merchant_transaction_id}.

IBAN Crypto Sell

Selling crypto and withdraw fiat money to user’s IBAN.

The user must be signed in and verified (valid KYC). Mercuryo won’t complete the transaction if the verification is expired. Use GET /b2b/user/kyc-status to check user’s verification.

Use GET /b2b/user/contacts to check user's email verification status.

Check user limits before the transaction. Mercuryo won’t complete the transaction when beyond the limit. Use GET /b2b/user/iban-limits/sell to get limit details.

Slippage

Wait for a deposit after successfully using POST /b2b/oor/sell. If the price changes upon receiving a deposit more than 5%, Mercuryo won't create a transaction. Mercuryo will return the deposit. Otherwise, Mercuryo will cover the slippage and the trade will have the rate which was acquired.

Acquire rates again if the elapsed time is more than an hour, because trx_token expires in one hour.

Steps

  1. Use GET /b2b/currencies to get available currencies.
  2. Use GET /b2b/oor/sell-methods to get available sell methods.
  3. Use the iban method to sell crypto and withdraw funds to user’s IBAN.
  4. Use GET /b2b/oor/sell-rates to get rates. The rates will be frozen and associated with the sell token.
  5. Use POST /b2b/oor/sell/iban to get the address for depositing crypto.
    1. Mercuryo creates the sell_iban transaction after receiving crypto.
      1. If the sell_iban transaction is failed_send, use POST /b2b/oor/sell/iban/resend to resend the failed transaction.
      2. If the sell_iban transaction fails before transferring fiat money, Mercuryo will return crypto to the specified address within two hours.

Get the transaction status using GET /b2b/transactions?merchant_transaction_id={merchant_transaction_id}.

Transactions

Transaction Statuses Scenarios
buy_card Payment Card Crypto Purchase
buy_iban_invoice Bank Transfer Crypto Purchase
sell_card Payment Card Crypto Sell, Crypto Sell for PCI-DSS Certified
sell_iban pending, succeeded, failed, failed_send. IBAN Crypto Sell

Callbacks

Сontact your integration manager to set the callback URL.

Body

{
"url": "https:\/\/webhook.site\/#!\/6a4e734e-6c46-4de0-b67e-0166681aa250",
"tries": 15,
"payload": {
"data": {
"type": "buy",
"amount": "0.00239598",
"status": "paid",
"address": null,
"currency": "BTC",
"user_uuid": "447efa32-0afc-4326-b474-21e5a8624ce1",
"created_at": "2022-12-12 09:31:44",
"updated_at": "2022-12-12 09:32:08",
"fiat_amount": "40.00",
"fiat_currency": "EUR",
"merchant_transaction_id": "09516f6c766427412"
},
"eventId": "316e4fba-99bb-4322-8703-35542f477390"
},
"sign_key": "vjuKGL4fxMF6csD-3cr724TWPUPNTa8N",
"widget_id": "406a71aa-cc5f-471b-971b-6047dac6173f"
}

FAQ

Visit Help Center

What crypto currencies does Mercuryo Support?

Supported cryptocurrencies.

What crypto networks does Mercuryo Support?

Supported crypto networks.

Where does Mercuryo operate?

Mercuryo is operational and allows end-users from all countries, except for the following list. The below details are used to identify whether end-user’s country is from non-operational list:

  1. End-user's IP address.
  2. End-user’s card issuer country.
  3. Documents provided for passing KYC procedure which verify end-user’s country of residence.

Note that the Off-Ramp operations are available in selected countries.

Can I receive several callbacks of the same transaction with several statuses at the same time? Ex.: one transaction, one callback that is completed and another callback that is pending?

We send callbacks asynchronously. The callback delivery according to the status change is not guaranteed.

Is there “retry” for a failed callback? How does it work? Can I adjust it?

Yes, there is “retry”. You cannot adjust it. If the callback URL request doesn't return 200, we will be sending more requests asynchronously, but fewer with each day.

How is sign_key formed? How do I verify it?

We send the X-Signature header with a callback. This header contains the sha256 hash generated from JSON of the entire POST request. sign_key is used as a key. Please contact your integration manager to obtain sign_key. You can verify a callback by encoding the received callback with the sha256 algorithm and a key from the widget, and comparing the hash with the one from the header.

What is the time zone for created_at and updated_at?

The time zone is UTC.

Do you use POST to send callbacks?

Yes, we use POST to send callbacks.

When exactly do I receive callbacks?

You receive callbacks upon creating a transaction and a status change.

What do my server respond to a callback for it to be considered received?

You server must respond with the 200 http code.

What happens if a crypto sell transaction fails because the transfer takes too long?

It is assumed that a sell transaction must be completed for 6 hours. If the crypto is not received within this time, the transaction will be marked as failed due to a timeout. If the crypto is received after the 6-hour period, Mercuryo will return the crypto to the user's address.

Helper

/b2b/currencies

Get supported currencies filtered for partner

Securitysdk-partner-token
Responses
200

OK

403

Error codes:
* 403003: Too many requests;

500

500000: Various reasons, check the message field

get/b2b/currencies
Response samples
application/json
{}

/b2b/rates

Get buy and sell rates for multiple cryptocurrencies at once

Securitysdk-partner-token
Request
query Parameters
is_amount_without_fee
boolean
Default: false

Return rates without fee included

Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

500

500001: Various reasons, check the message field

get/b2b/rates
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/transactions

B2B transactions list

Securityb2b-bearer-token
Request
query Parameters
merchant_transaction_id
string

Merchant transaction id

date_start
string

Unix Timestamp search from

date_end
string

Unix Timestamp search end

status
string

Transaction status

show_retries
boolean

Show retries transactions

limit
string
Default: "50"

Limit of rows max 50, min 5

offset
string

Number of rows to skip

Responses
200

OK

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/transactions
Response samples
application/json
{
  • "data": [
    ],
  • "next": "string",
  • "prev": "string",
  • "status": "200",
  • "total": "100"
}

/b2b/validate-iban

Validate provided IBAN

Securitysdk-partner-token
Request
query Parameters
iban
required
string

IBAN to validate

Responses
200

OK

400

Error codes:
* 400001: Validation error;

401

401000: Authorization failed

405

405000: Method Not Allowed

500

500000: Various reasons, check the message field

get/b2b/validate-iban
Response samples
application/json
{
  • "data": { },
  • "status": "200"
}

/b2b/validate-wallet

B2B validate wallet

Securityb2b-bearer-token
Request
query Parameters
currency
required
string

Crypto currency

address
required
string

Wallet address to check

network
string

Network of currency

Responses
200

OK

400

Error codes:
* 400000: Bad request;
* 400001: Validation error, check the data field;

405

405000: Method Not Allowed

get/b2b/validate-wallet
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

User

/b2b/kyc/access-token

Get KYC access token for iframe

Securityb2b-bearer-token
Request
query Parameters
feature
required
string

KYC feature

Enum: "crypto" "iban"
Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;
* 400062: Cannot get KYC access token. Check the message field;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/kyc/access-token
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/kyc/documents

Get user’s previously uploaded KYC documents

Securityb2b-bearer-token
Responses
200

OK

400

Bad request

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/kyc/documents
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/billing-address

Save user billing address

Securityb2b-bearer-token
Request
Request Body schema: application/json
required

JSON Body

city
required
string

City name. From 2 to 30 chars.

country_code
required
string

ISO 3166-1 Alpha-2 country code

state_code
required
string

2-3 chars or empty string if not applicable

street_line_1
required
string

Street line 1. From 2 to 30 chars. At least one of street_line_1 and street_line_2 fields is required.

street_line_2
required
string

Street line 2. From 2 to 30 chars. At least one of street_line_1 and street_line_2 fields is required.

zip_code
required
string

Zip code. From 2 to 10 chars.

Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403099: Collecting billing addresses is forbidden;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/user/billing-address
Request samples
application/json
{
  • "city": "London",
  • "country_code": "GB",
  • "state_code": "NY",
  • "street_line_1": "Queens Road",
  • "street_line_2": "63",
  • "zip_code": "EC05"
}
Response samples
application/json
{
  • "data": { },
  • "status": "201"
}

/b2b/user/card-limits

Get card limits

Securityb2b-bearer-token
Request
query Parameters
from
required
string

Currency to convert from

to
required
string

Currency to convert to

type
required
string

Type of convert

Enum: "buy" "sell"
Responses
200

OK

400

Error codes:
* 400057: Validation error for to field;
* 400058: Validation error for from field;
* 400059: Validation error for type field;
* 400074: Fail to get card limits. Check the message field;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/card-limits
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/card-limits-unverified

Get total and remaining card limits for unverified user

Securityb2b-bearer-token
Request
query Parameters
type
required
string

Type of convert. Sell is not available for unverified user

Value: "buy"
Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;
* 403030: Service is unavailable for you;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/card-limits-unverified
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/cards

Get saved cards

Securityb2b-bearer-token
Responses
200

OK

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/cards
Response samples
application/json
{
  • "data": [
    ],
  • "status": "200"
}

/b2b/user/contacts

Get user contacts

Securityb2b-bearer-token
Responses
200

OK

400

Error codes:
* 400064: User not found by token;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/contacts
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/dataDeprecated

B2B user data

Securityb2b-bearer-token
Responses
200

OK

400

Error codes:
* 400064: User not found by token;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/data
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/iban-limits/buy

Get IBAN limits for buy operations

Securityb2b-bearer-token
Request
query Parameters
crypto_currency
required
string

Crypto currency to buy

fiat_currency
required
string

Fiat currency to buy with

payment_method
required
string

Selected payment method

Enum: "iban_exchange" "iban_invoice"
Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;
* 400003: Currency is not supported;
* 400060: Fail to get IBAN limits. Check the message field;
* 400066: Unknown error;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/iban-limits/buy
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/iban-limits/sell

Get IBAN limits for sell operations

Securityb2b-bearer-token
Request
query Parameters
crypto_currency
required
string

Crypto currency to sell

fiat_currency
required
string

Fiat currency to sell to

payment_method
required
string

Selected payment method

Enum: "iban_exchange" "iban"
Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;
* 400003: Currency is not supported;
* 400060: Fail to get IBAN limits. Check the message field;
* 400066: Unknown error;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/iban-limits/sell
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/kyc-access-token

Get KYC access token for iframe

Securityb2b-bearer-token
Request
query Parameters
kyc_level
integer
Default: "1"

Level of kyc

Enum: 1 2
Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;
* 400062: Cannot get KYC access token. Check the message field;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/kyc-access-token
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/kyc-documentsDeprecated

Get user’s previously uploaded KYC documents

Securityb2b-bearer-token
Responses
200

OK

400

Bad request

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/kyc-documents
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/kyc-documents

Send user’s KYC documents

Securityb2b-bearer-token
Request
Request Body schema: application/json
required

JSON Body

address_1
string

Address 1 line (required, only for US kyc level1)

address_2
string

Address 2 line (required, only for US kyc level1)

birthday
string

Birthday. Format '1995-05-25'. (required, only for kyc level1)

citizenship_country_code
string

user's country (required, only for kyc level2 without verification)

city
string

City (required, only for US kyc level1)

correspondence_address_line
string

User's coresponcence address line (required, only for kyc level2 without verification)

correspondence_city
string

User's coresponcence city (required, only for kyc level2 without verification)

correspondence_country_code
string

User's coresponcence country code (required, only for kyc level2 without verification)

correspondence_postal_code
string

User's coresponcence postal code (required, only for kyc level2 without verification)

correspondence_state
string

User's coresponcence state (required, only for kyc level2 without verification)

country_code
string

Country code (required, only for kyc level1)

required
Array of objects
first_name
string

First name (required, only for kyc level1)

first_name_en
string

First name (required, only for kyc level1)

id_number
string

US ID number (required, only for US kyc level1)

kyc_level
integer
Default: "1"

Level of kyc documents

Enum: 1 2
last_name
string

Last name (required, only for kyc level1)

last_name_en
string

Last name (required, only for kyc level1)

residence_address_line
string

user's address line (required, only for kyc level2 without verification)

residence_city
string

user's city (required, only for kyc level2 without verification)

residence_country_code
string

user's country (required, only for kyc level2 without verification)

residence_postal_code
string

User's residence postal code (required, only for kyc level2 without verification)

residence_state
string

User's residence country code (required, only for kyc level2 without verification)

state
string

State code (required, only for US kyc level1)

zip
string

ZIP code (required, only for US kyc level1)

Responses
200

OK

400

Error codes:
* 400000: Bad request;
* 400001: Validation error, check the data field;
* 400005: Validation error for country_code field;
* 400039: Validation error for document field;
* 400040: Validation error for birthday field;
* 400041: Validation error for first_name field;
* 400042: Validation error for last_name field;
* 400066: Unknown error;
* 400067: User profile save error;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403022: KYC already complete;
* 403023: Various reasons, check the message field;
* 403030: This endpoint is disabled for current partner;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/user/kyc-documents
Request samples
application/json
{
  • "address_1": "Plaza Dr",
  • "address_2": "1609",
  • "birthday": "1995-05-25",
  • "citizenship_country_code": "us",
  • "city": "Woodbridge",
  • "correspondence_address_line": "Gebbertstraße, 123",
  • "correspondence_city": "Erlangen",
  • "correspondence_country_code": "de",
  • "correspondence_postal_code": "91058",
  • "correspondence_state": "Bayern",
  • "country_code": "pl",
  • "document": [
    ],
  • "first_name": "Adam",
  • "first_name_en": "Adam",
  • "id_number": "123456789",
  • "kyc_level": "1",
  • "last_name": "Smith",
  • "last_name_en": "Smith",
  • "residence_address_line": "string",
  • "residence_city": "string",
  • "residence_country_code": "us",
  • "residence_postal_code": "91058",
  • "residence_state": "string",
  • "state": "NJ",
  • "zip": "07095"
}
Response samples
application/json
{
  • "data": {
    },
  • "status": "202"
}

/b2b/user/kyc-share-token

Send share-token for KYC

Securityb2b-bearer-token
Request
Request Body schema: application/json
required

JSON Body

kyc_level
integer
Default: "1"

Level of kyc

Enum: 1 2
share_token
required
string

share_token

Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;
* 400064: User not found by token and user_uuid4;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403022: KYC already complete;
* 403023: Applicant already exists;
* 403026: Resource is unavailable. Please contact support;
* 403030: This endpoint is disabled for current partner;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/user/kyc-share-token
Request samples
application/json
{
  • "kyc_level": "1",
  • "share_token": "_act-75e78843-3207-4be6-asdb936-9842ae2a0c71"
}
Response samples
application/json
{
  • "data": { },
  • "status": "202"
}

/b2b/user/kyc-status

Get user KYC statuses

Securityb2b-bearer-token
Responses
200

OK

400

Error codes:
* 400064: User not found by token;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/kyc-status
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/refresh-token

Refresh b2b-bearer-token

Securityb2b-bearer-token
Responses
200

OK

400

Error codes:
* 400014: Empty widget error. Contact your account manager;
* 400064: User not found by token;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/refresh-token
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/set-phone

Set user phone

Securityb2b-bearer-token
Request
Request Body schema: application/json
required

New user phone

phone
required
string

New user phone

Responses
200

OK

400

Error codes:
* 400073: Validation error for the phone field;

401

401000: Authorization failed

403

Error codes:
* 403003: Too many requests for phone validation;
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/user/set-phone
Request samples
application/json
{
  • "phone": "string"
}
Response samples
application/json
{
  • "data": [
    ],
  • "status": "200"
}

/b2b/user/sign-in

Sign-in user

Securitysdk-partner-token
Request
Request Body schema: application/json
required

JSON Body

email
string

email

phone
string

Phone

user_uuid4
string

uuid4

Responses
200

OK

400

Error codes:
* 400004: Validation error for user_uuid4 field;
* 400010: Validation error for phone field;
* 400014: Empty widget error. Contact your account manager;
* 400037: Validation error for email field;
* 400063: Requires one of the parameters: phone, user_uuid4, email;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403031: User is locked by some reason or not found;
* 403031: User email is not confirmed;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/user/sign-in
Request samples
application/json
{
  • "email": "someemail@gmail.com",
  • "phone": "+35797522499",
  • "user_uuid4": "69f63545-9a58-4075-894d-47490eeed55b"
}
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/user/sign-up

Sign-up user

Securitysdk-partner-token
Request
Request Body schema: application/json
required

JSON Body

accept
required
boolean

accept

email
required
string

email

Responses
200

OK

400

Error codes:
* 400006: You need to accept the user agreement to signup;
* 400014: Empty widget error. Contact your account manager;
* 400037: Validation error for email field;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403023: Sign-up failed. Check the message field;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/user/sign-up
Request samples
application/json
{
  • "accept": "true",
  • "email": "someemail@gmail.com"
}
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

Buy

/b2b/oor/buy

Create on-ramp transaction using 'card' method

Securityb2b-bearer-token
Request
query Parameters
trx_token
required
string

Buy token returned by /b2b/oor/buy-rates endpoint

address
required
string

The address to which the crypto should be transferred

merchant_transaction_id
string

Custom ID for checking transaction status. If empty, it will be generated

card_id
string

ID of the existing card (Get from /b2b/user/cards)

theme
string

Widget display theme

Responses
200

OK

400

Error codes:
* 400000: Unable to finish antifraud check of transaction. Try again later
* 400001: Validation error, check the data field;
* 400007: Antifraud check error, amount off limits;
* 400048: Unsupported payment alias;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/oor/buy
Response samples
application/json
{}

/b2b/oor/buy-methods

Get methods for on-ramp transaction

Securityb2b-bearer-token
Responses
200

OK

400

Error codes:
* 400064: User not found by token;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/oor/buy-methods
Response samples
application/json
{
  • "data": [
    ],
  • "status": "200"
}

/b2b/oor/buy-rates

Get rates for on-ramp transaction

Securityb2b-bearer-token
Request
query Parameters
from
required
string

Fiat currency code for sale

to
required
string

Cryptocurrency code for buy

amount_from
string

The total amount, including fees, to be converted into cryptocurrency, required if 'amount_to' empty

amount_to
string

The total amount, including fees, to be received in cryptocurrency, required if 'amount_from' empty

network
string

Cryptocurrency network, if empty default used (default and allowed networks described in /b2b/currencies)

payment_alias
string
Default: "card"

Payment method alias

Enum: "card" "iban_exchange" "iban_invoice"
Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data or message fields;
* 400003: Currency is not supported;
* 400007: Antifraud error. Amount off limits;
* 400011: Validation error for from field;
* 400012: Validation error for to field;
* 400014: Empty widget error. Contact your account manager;
* 400015: Validation error for payment_alias field;
* 400048: Unsupported payment type;
* 400070: Validation error for amount_from field;
* 400071: Validation error for amount_to field;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support
* 403034: Country is not supported for this operation;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/oor/buy-rates
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/oor/buy/card

On-ramp transaction with card attributes

Securityb2b-bearer-token
Request
Request Body schema: application/json
required

Request body

address
required
string

The address to which the crypto should be transferred

card_cvv
required
string

CVV

Example: 123

card_expiration_month
string

Card expiration month

Example: 11

Required if card_id not filled

card_expiration_year
string

Card expiration year

Example: 2026

Required if card_id not filled

card_holder_name
string

Cardholder name

Example: John Doe

Required if card_id not filled

card_id
string

Card ID

Example: 1337

Required if card data not filled

card_number
string

Card number

Example: 1234567890123456

Required if card_id not filled

merchant_transaction_id
string

Unique custom ID to check transaction status. If empty, it will be generated

tin
string

Customer's Taxpayer Identification Number

Required for Brazil users.

Example: 123.456.789-10

trx_token
required
string

Transaction token returned by /b2b/fiat/buy-rates endpoint

Responses
200

OK

400

Error codes:
* 400000: Antifraud error. Cannot check, try again later;
* 400001: Validation error, check the data field;
* 400007: Antifraud error. Amount off limits;
* 400048: Unsupported payment alias;
* 400098: Billing address is not set;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403008: Unable to bind card.
* 403010: Buying failed;
* 403017: Card binding limits reached;
* 403020: IP is blacklisted;
* 403025: You need to provide Customer identity;
* 403026: Service is unavailable. Please contact support;
* 403030: This endpoint is disabled for current partner;
* 403038: Blocked as suspicious;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/oor/buy/card
Request samples
application/json
{
  • "address": 7.60053267365776e+47,
  • "card_cvv": "123",
  • "card_expiration_month": "11",
  • "card_expiration_year": "2026",
  • "card_holder_name": "John Doe",
  • "card_number": "1234567890123456",
  • "merchant_transaction_id": "87654321",
  • "tin": "123.456.789-10",
  • "trx_token": "<from buy-rates request>"
}
Response samples
application/json
{}

/b2b/oor/buy/iban-invoice

Create on-ramp transaction using 'iban_invoice' method

Securityb2b-bearer-token
Request
query Parameters
trx_token
required
string

Buy token returned by /b2b/oor/buy-rates endpoint

address
required
string

The address to which the crypto should be transferred

merchant_transaction_id
string

Custom ID for checking transaction status. If empty, it will be generated

Responses
200

OK

400

Error codes:
* 400000: Unable to finish antifraud check of transaction. Try again later
* 400001: Validation error, check the data field;
* 400007: Antifraud check error, amount off limits;
* 400048: Unsupported payment alias;
* 400052: Cannot create invoice for buying. Check the message field

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/oor/buy/iban-invoice
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

Sell

/b2b/oor/sell

Create off-ramp transaction using 'card' method

Securityb2b-bearer-token
Request
query Parameters
trx_token
required
string

Sell token returned by /b2b/oor/sell-rates endpoint

address
string

Address for returning cryptocurrency in case of an error in the transaction

merchant_transaction_id
string

Custom ID for checking transaction status. If empty, it will be generated.

card_id
string

ID of the existing card (Get from /b2b/user/cards)

theme
string

Widget display theme

Responses
200

OK

400

Error codes:
* 400000: Unable to finish antifraud check of transaction. Try again later
* 400001: Validation error, check the data field;
* 400007: Antifraud check error, amount off limits;
* 400048: Unsupported payment alias;

401

401000: Authorization failed

403

Error codes:
* 403001: Kyc verification needed;
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/oor/sell
Response samples
application/json
{}

/b2b/oor/sell-methods

Get methods for off-ramp transaction

Securityb2b-bearer-token
Responses
200

OK

400

Error codes:
* 400064: User not found by token;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/oor/sell-methods
Response samples
application/json
{
  • "data": [
    ],
  • "status": "200"
}

/b2b/oor/sell-rates

Get rates for off-ramp transaction

Securityb2b-bearer-token
Request
query Parameters
from
required
string

Cryptocurrency code for sale

to
required
string

Fiat currency code for buy

amount_from
string

The total amount of cryptocurrency for sale, including fees, required if 'amount_to' empty

amount_to
string

The total amount, including fees, to be received in fiat currency, required if 'amount_from' empty

network
string

Cryptocurrency network, if empty default used (default and allowed networks described in /b2b/currencies)

payment_alias
string
Default: "card"

Payment method alias

Enum: "card" "iban_exchange" "iban"
Responses
200

OK

400

Error codes:
* 400000: Inner HTTP exception. Please contact support;
* 400001: Validation error, check the data or message fields;
* 400003: Currency is not supported;
* 400007: Antifraud error. Amount off limits;
* 400011: Validation error for from field;
* 400012: Validation error for to field;
* 400014: Empty widget error. Contact your account manager;
* 400015: Validation error for payment_alias field;
* 400048: Unsupported payment type;
* 400070: Validation error for amount_from field;
* 400071: Validation error for amount_to field;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support
* 403034: Country is not supported for this operation;

500

500001: Various reasons, check the message field

get/b2b/oor/sell-rates
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/oor/sell/card

Off-ramp transaction with card attributes

Securityb2b-bearer-token
Request
Request Body schema: application/json
required

Request body

address
string

Address for returning cryptocurrency in case of an error in the transaction

card_expiration_month
string

Card expiration month

Example: 11

Required if card_id not filled

card_expiration_year
string

Card expiration year

Example: 2026

Required if card_id not filled

card_holder_name
string

Cardholder name

Example: John Doe

Required if card_id not filled

card_id
string

Card ID

Example: 018ab9cc29a8a2543

Required if card data not filled

card_number
string

Card number

Example: 4111111111111111

Required if card_id not filled

merchant_transaction_id
string

Unique custom ID to check transaction status. If empty, it will be generated

trx_token
required
string

Sell token returned by /b2b/oor/sell-rates endpoint

Responses
200

OK

400

Error codes:
* 400000: Antifraud error. Cannot check, try again later;
* 400001: Validation error, check the data field;
* 400004: Token is already used;
* 400007: Antifraud error. Amount off limits;
* 400048: Unsupported payment alias;

401

401000: Authorization failed

403

Error codes:
* 403001: Kyc verification needed;
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/oor/sell/card
Request samples
application/json
{
  • "address": 7.60053267365776e+47,
  • "card_expiration_month": "11",
  • "card_expiration_year": "2026",
  • "card_holder_name": "John Doe",
  • "card_id": "018ab9cc29a8a2543",
  • "card_number": "4111111111111111",
  • "merchant_transaction_id": "87654321",
  • "trx_token": "<from sell-rates request>"
}
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/oor/sell/iban

Create off-ramp transaction using 'iban' method

Securityb2b-bearer-token
Request
query Parameters
trx_token
required
string

Sell token returned by /b2b/oor/sell-rates endpoint

beneficiary_iban
required
string

External user's IBAN

beneficiary_country_code
required
string

Beneficiary's country code consisting of 2 letters

beneficiary_city
required
string

Beneficiary's city name

beneficiary_address
required
string

Beneficiary's address line

beneficiary_full_name
required
string

Beneficiary's full name

beneficiary_swift
required
string

Beneficiary's swift number

address
string

Address for returning cryptocurrency in case of an error in the transaction

merchant_transaction_id
string

Custom ID for checking transaction status. If empty, it will be generated.

Responses
200

OK

400

Error codes:
* 400000: Unable to finish antifraud check of transaction. Try again later
* 400001: Validation error, check the data field;
* 400007: Antifraud check error, amount off limits;
* 400048: Unsupported payment alias;
* 400049: IBAN not found;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/oor/sell/iban
Response samples
application/json
{
  • "data": {
    },
  • "status": "200"
}

/b2b/oor/sell/iban/resend

Resend /b2b/oor/sell/iban

Securityb2b-bearer-token
Request
query Parameters
merchant_transaction_id
required
string

Merchant transaction id to identify transaction

beneficiary_iban
required
string

External user's IBAN

beneficiary_country_code
required
string

Beneficiary's country code consisting of 2 letters

beneficiary_city
required
string

Beneficiary's city name

beneficiary_address
required
string

Beneficiary's address line

beneficiary_full_name
required
string

Beneficiary's full name

beneficiary_swift
required
string

Beneficiary's swift number

Responses
200

OK

400

Error codes:
* 400001: Validation error, check the data field;

401

401000: Authorization failed

403

Error codes:
* 403007: There's another active transaction;
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support;

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

post/b2b/oor/sell/iban/resend
Response samples
application/json
{
  • "data": {
    }
}

/b2b/user/iban-history

Return last 5 unique IBAN details from Sell

Securityb2b-bearer-token
Responses
200

OK

400

Error codes:
* 400064: User not found by token;

401

401000: Authorization failed

403

Error codes:
* 403020: IP is blacklisted;
* 403026: Resource is unavailable. Please contact support

405

405000: Method Not Allowed

500

500001: Various reasons, check the message field

get/b2b/user/iban-history
Response samples
application/json
{
  • "data": [
    ],
  • "status": "200"
}