# General

Learn essential crypto payment terms, explore supported assets, and understand transaction fees to make the most of our gateway for your business’s payment needs.

**0xProcessing** is a technologically advanced payment gateway that allows e-commerce platforms, forex, gaming platforms, gambling providers, chatbot services, and any other businesses to accept more than 85+ most commonly used cryptocurrencies in 18 blockchain's as payment from users around the globe without restrictions and KYC.

We are convenient for businesses of any size. The registration process is fast, simple and KYC-less. Smooth integration process is carried out through the available API methods.

### What makes 0xProcessing different?

* You can accept payments from clients all over the world with more than 65 kinds of popular cryptocurrencies
* You can enable direct payments from Web3 wallets with 0x Web3
* Quick start, you just need to register an account, conduct a quick integration and begin accepting payments
* Fast integration of cryptocurrency payments in the store
* High volatility of the crypto market is no longer a problem due to Volatility Risk Control System of 0x designed for automatic conversion of incoming cryptocurrencies into stablecoins.
* More than 7 different [use cases](/basic/introduction-guide/0xprocessing-use-cases) available
* Payment form can be customized under the merchant brandbook
* There are no geographical restrictions for merchants and their users
* Own blockchain infrastructure of 0xProcessing allows to bring significant security level eliminating unneccessary risks

{% content-ref url="/pages/ODoqFYbH24t1ndODcO7z" %}
[Terms and definitions](/basic/general/terms-and-definitions)
{% endcontent-ref %}

{% content-ref url="/pages/ftyScTyy3tWhVCjkYlFR" %}
[Available assets](/basic/general/available-assets)
{% endcontent-ref %}

{% content-ref url="/pages/J8VQpLVCDwLskEJYJWqB" %}
[Transaction Fees](/basic/general/transaction-fees)
{% endcontent-ref %}


# Terms and definitions

Understand crypto payment terms and definitions to integrate seamlessly, ensuring efficient transactions and smooth operations with our payment gateway.

* **Merchant** – the party that integrates 0xProcessing to accept payments in cryptocurrency for its service and/or goods.
* **Client** – a customer of the Merchant who conducts a payment through 0xProcessing on the Merchant's side.
* **Network fee -** comission paid by sender to network validators or miners for successful transaction in cryptocurrency.

The actual Network fee to pay will vary depending on the network type. In 0Xprocessing Network fee can be paid by Client or covered by the Merchant. By default, the Network fee is paid by Client.

Here you can see an example of the network fee variation:

{% hint style="info" %}
If Client conducts the payment of 1000 USDT in Tron Network (TRC20), he will be billed for 1000.81 USDT (TRC20), since the network commission is around 10 TRX (\~$0.8) for any transaction amount.

If Client conducts the payment of 1000 USDT in Ethereum Network (ERC20), he will be billed 1005.43 USDT(ERC20), the network commission is constantly changing and on the average about 0.00310555 ETH (\~$5).
{% endhint %}

* **Processing fee -** commission of 0xProcessing for each deposit to the Merchant balance. Final amount of fee depends on the Merchant's monthly turnover. There is no processing fee for withdrawals.
* **Webhook (callback) -** notification in JSON format sent to a specified webhook URL when a particular event occurs during the payment process. This feature allows Merchants to receive real-time updates on the statuses of their Clients payments.
* &#x20;**VRCS -** Volatility risk control system

To avoid risks of high cryptocurrency volatility, 0Xprocessing has a feature of automatic conversion to stablecoins. With VRCS feature enabled, funds received from Client are automatically converted into one of the stablecoins supported by 0xProcessing.

* **Stablecoin** - token with market price tied to another stable asset. Unlike other cryptocurrencies, stablecoin is backed by certain fiat currencies or actives that can be traded on exchanges (USD, EUR, JPY and others). The most popular stablecoins are USDT, DAI, USDC, TUSD.
* **0xProcessing vault** - system of secure hot wallets for storage of merchants balances.
* **KYC\KYB- Know Your Customer\Business** - Know Your Client\Business - identification process for merchants and their customers.
* **Destination Tag** optional parameter used for sending the transaction in several cryptocurrencies like XRP. Due to network specifics XRP sender wallet address is the same for all clients, the only way to identify the sender is the Destination tag. Payments without this identifier will be considered as unpaid and merchant will receive a callback with "Canceled" payment status.
* **Transaction hash** unique identifier for a particular blockchain transaction which helps to check the transaction status. Transaction hash usually looks like a random set of letters and/or numbers.
* **Static wallet** intersystem wallet with a permanent address that does not change after each deposit.
* **Web3 wallet** - non-custodial wallet for storage of cryptocurrency, NFTs or other digital assets. Web3 wallets usually have a user-friendly interface that allows to smoothly interact with decentralized applications (dApps) on various blockchains. Most popular web3 wallets are [Metamask](https://metamask.io/download/) and [Trustwallet](https://trustwallet.com/).
* **Fiat money** is legal currency of any state. USD, EUR, CNY, JPY and others.
* **Wallet address -** randomly generated set of numbers and letters that represent a type of unique number, similar to a bank account number. It usually consists of 26-35 alphanumeric characters.
* **System wallet** unique 0xProcessing wallet used for receiving deposits from merchant's clients. It is used for determination of the payment validity. After validity is successfully determined, payment amount is sent to the 0xProcessing vault and credited to the merchant's balance.
* **Native Currency Network-** main token of the blockchain used to pay Network fee, e.g. BNB within the BNB chain or ETH within the Ethereum network.
* **A token** is form of crypto asset created with a smart contract on a particular network. Each token has its own standard (protocol) belonging to the network in which was created.


# Available assets

Discover all cryptocurrencies and stablecoins supported for payments, enabling flexibility and convenience for businesses and customers using our gateway.

{% hint style="info" %}
**Note:**

**ERC20** - token on the Ethereum network;

**TRC20** - token on the Tron network;

**BEP20** - token on the BNB Smart Chain network;

**AVAXC** - token on the Avalanche C-Chain network;

**POLYGON** - token on the Polygon network;

**ARB1** - token on the Arbitrum One network;

**TON** - token on The Open Network;

**SOL - t**oken on the Solana network.

**OPBNB -** token on the opBNB network

**OP -** token on the Optimism network

**HYPE -** token on the Hyperliquid network

**SUI** - token on the SUI network
{% endhint %}

### **Crypto currencies**

**Bitcoin:** BTC

**Litecoin:** LTC

**Dashcoin:** DASH

**Dogecoin:** DOGE

**Bitcoin Cash:** BCH

**Ripple:** XRP, CSC&#x20;

**Monero:** XMR

**Hyperliquid:** HYPE

**Ethereum:** ETH, USDT (ERC20), USDC (ERC20), TUSD (ERC20), DAI (ERC20), AXS (ERC20), WEVER (ERC20), TRX (ERC20), PEPE (ERC20), APE (ERC20), SHIB (ERC20), LINK (ERC20), PYUSD (ERC20), XAUT (ERC20), BGB (ERC20), UNI (ERC20)

**Tron:** TRX, USDT (TRC20), AXS (TRC20), ETH (TRC20)

**BNB Chain:** BNB, USDT (BEP20), USDCOIN (BEP20), DAI (BEP20), BTCB (BEP20), ETH (BEP20), ADA (BEP20), DESU (BEP20), MDAO (BEP20), DOGE (BEP20), ZEC (BEP20), ASTER (BEP20), DOT (BEP20), USD1 (BEP20), BONK (BEP20)

**Avalanche:** AVAX, USDT (AVAXC), TUSD (AVAXC), USDC (AVAXC)

**Polygon:** POL *<mark style="color:blue;">(prev. MATIC)</mark>*, USDT (POLYGON), USDCE (POLYGON) <mark style="color:blue;">(PoS Bridge)</mark>*,* USDCOIN (POLYGON), WETH (POLYGON)

**Arbitrum One:** ETH (ARB1), ARB (ARB1), USDT (ARB1), DAI (ARB1),

USDCE (ARB1) *<mark style="color:blue;">(Bridged)</mark>*, USDCOIN (ARB1), PYUSD (ARB1), WBTC (ARB1)

**The Open Network:** GRAM *<mark style="color:blue;">(prev. TON)</mark>*, USDT (TON), NOT (TON)

**Base Chain:** ETH (BASE), USDC (BASE)

**Solana:** SOL, USDT (SOL), USDC (SOL), USD1 (SOL), PYUSD (SOL), WBTC (SOL), SOETH (SOL), PUMP (SOL), TRUMP (SOL), JUP (SOL), BONK (SOL), PENGU (SOL), SPX (SOL), RAY (SOL), EURC (SOL), FARTCOIN (SOL), JTO (SOL), DBR (SOL)

**opBNB:** BNB (OPBNB), USDT (OPBNB), ETH (OPBNB)

**Optimism:** USDT (OP), USDC (OP), USDCE (OP), OP (OP), ETH (OP), WLD (OP)

**SUI network:** SUI, ETH (SUI), WSOL (SUI), WBTC (SUI), USDT (SUI), USDC (SUI)

### Convertible to stablecoin via [VRCS](/basic/introduction-guide/vrcs-automatic-conversion-to-stablecoins)

BTC, DASH, DOGE, ETH, LTC, XRP, TRX, BNB, ETH (BEP20), ADA (BEP20), AVAXC, POL, ETH (ARB1), BCH, SOL

#### Stablecoins for VRCS:

USDT (ERC20, TRC20, BEP20)

USDC (ERC20, BEP20)

#### Via API available real time conversion rates from cryptocurrencies to major fiat currencies. Those rates are just for informative purposes, like indicating to Client his balance in fiat equivalent.&#x20;

#### AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYN, BYR, BZD, CAD, CDF, CHF, CLF, CLP, CNY, CNH, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRU, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLE, SLL, SOS, SRD, STD, STN, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VES, VND, VUV, WST, XAF, XAG, XAU, XCD, XCG, XDR, XOF, XPF, YER, ZAR, ZMK, ZMW, ZWL

**Source of exchange rates:** [**https://fixer.io/**](https://fixer.io/)


# Transaction Fees

Check detailed transaction fees for deposits, withdrawals, and currency conversions to optimize costs and efficiency in our crypto payment gateway.

Fees consist of processing fee and network fee.&#x20;

**Processing fee -** depends on Merchant’s business model and monthly turnover. It is automatically deducted from each payment received on Merchant's balance and always covered by Merchant.

**Network fee** - commission of the network included by default into Client's payment, used to cover the expense for transaction inside the processing system (from system wallet to vault or to VRCS). If needed, network fee coverage can be switched from Client to Merchant side (menu Settings\Currency Management).

{% hint style="info" %}
**Network fee** amount is dynamic and depends on the complexity and congestion of the network. Exact amounts spent for network fees can be checked in your **account.**
{% endhint %}

{% hint style="danger" %}
**Example:**

BNB chain Network fee: 0.00025500 BNB\
Ethereum Network fee: 0.00095876 ETH\
BTC Network fee: 0.00001208 BTC\
DASH Network fee: 0.00001208 BTC\
DOGE Network fee: 1.78450657 DOGE

BCH Network fee: 0.00001146 BCH\
LTC Network fee: 0.00000270 LTC\
XRP Network fee: 0.000012 XRP\
Tron Network fee: 10-37 TRX&#x20;

Polygon Network fee: 0.003 POL

Arbitrum One Network fee: 0.0000021 ETH\
Base Network fee: 0.00000015635 ETH

Solana Network fee: 0.00000500 SOL

opBNB network fee: 0.00000002 BNB (OPBNB)

USDT (TRC20) withdrawal Network fee: 2.6 USDT (TRC20)\
GRAM withdrawal Network fee: 0.1 GRAM

Tokens on the Polygon network withdrawal Network fee: 0.15 USD

Tokens on the Arbitrum One network withdrawal Network fee: 0.2 USD

{% endhint %}

{% hint style="info" %}
For payments with non-native tokens, the Network fee is charged in token used for payment.
{% endhint %}

**Withdrawals from 0xProcessing** is not a subject to additional fees, only the Network fee is charged.


# Introduction guide

A step-by-step guide to deposit flows, payment forms, withdrawals, webhooks, and everything you need for seamless integration with our crypto payment gateway.

Considering cryptocurrencies as a payment method, it is important to keep in mind that payment process differs from traditional methods e.g. bank cards or e-wallets. To ensure a smooth and easy cryptocurrency payment experience for Clients, worth to have some knowledge of efficient work with crypto.

In this section, we will share our expertise on this topic and provide key information on types of 0xprocessing API integration.<br>

{% content-ref url="/pages/9OHhI76MO8jnDstsHufZ" %}
[Deposit flow](/basic/introduction-guide/deposit-flow)
{% endcontent-ref %}

{% content-ref url="/pages/ZmXtT2PBffhIVrNxBoqL" %}
[Payment form](/basic/introduction-guide/payment-form)
{% endcontent-ref %}

{% content-ref url="/pages/Z36SZJlgV7aTeJQho2eQ" %}
[Withdrawal flow](/basic/introduction-guide/withdrawal-flow)
{% endcontent-ref %}

{% content-ref url="/pages/WQ7aMR5H0pphDeJ93yM1" %}
[VRCS - automatic conversion to stablecoins](/basic/introduction-guide/vrcs-automatic-conversion-to-stablecoins)
{% endcontent-ref %}

{% content-ref url="/pages/pkJ0nPQ5EKYWqPl8RT87" %}
[Webhooks flow](/basic/introduction-guide/webhooks-flow)
{% endcontent-ref %}

{% content-ref url="/pages/GuSkrDHwsOKMaQrRlnfQ" %}
[Broken mention](broken://pages/GuSkrDHwsOKMaQrRlnfQ)
{% endcontent-ref %}

{% content-ref url="/pages/oMndZYfmUrBuxiTvSviM" %}
[Broken mention](broken://pages/oMndZYfmUrBuxiTvSviM)
{% endcontent-ref %}


# Deposit flow

Learn how the deposit process works with our gateway, enabling seamless integration for businesses seeking efficient and reliable crypto payment solutions.

0xProcessing a Merchant's Client can make a deposit via one of the following options:

• Payment with fixed amount

• Payment without fixed amount

• Direct payment on a static wallet

Every time after successful arrival of funds Merchant receives Callback (webhook) notification meaning that he can go forward with providing Client with requested goods or services.

{% hint style="info" %}
By default settings Network fee is already included in Fixed amount deposit payment form. For Variable amount and Static wallet payments Network fee is deducted automatically by blockchain.

Network fee is applicable for all further blockchain based transactions, such as transactions in the processing storage or VRCS system. For some currencies Network fee can be switched[ switched to Merchant's side](/quick-start/currency-management) **(menu Settings / Currency management)**.
{% endhint %}

### **Crypto processing**

0xProcessing provides three options to generate a payment:

* **Payment form with fixed amount -** every time it's invoked it will have a new unique payment address. Form is generated with fixed amount and currency. Within form included options to connect Client's Web3 wallet.
* **Payment without a fixed amount** - Merchant gets all necessary details for his own custom payment form where Client can adjust payment amount, which just should any number bigger than minimal payment for selected currency. For each payment will be generated new unique address.
* **Direct payment on a static wallet** - for every transfer will be used the same receiving address.

### Deposit flow for payment form with fixed amount

1. At Merchant's website Client orders product or service.
2. Client selects 0xProcessing payment option at Merchant's website.
3. Depending on Merchant's design there could be several options for payment amount, or just one option. Client should select desired cryptocurrency or fiat, and pick up desired payment amount in case if Merchant allowed this option.
4. Client is provided with [payment form](/basic/introduction-guide/payment-form#payment-form-with-a-fixed-amount-skrin-i-opisanie-zachem-i-kak-ispolzuetsya-qr-i-knopki-oplaty-chere) with fixed amount in cryptocurrency in an iFrame or via a separate link (depending on the type of integration). The client has a time window for 30-50 min to pay the exact specified amount in the specified currency. If Client closes the payment form without payment or upon time window expiry the transaction will be marked unpaid, in order to retry another payment form with a new wallet address for payment should be generated.
5. Client pays via QR code or by direct payment to provided one time wallet address or with Web3 wallet button by connecting MetaMask or Wallet connect.
6. Upon payment completion Client is redirected to link specified by Merchant.
7. If [VRCS](/quick-start/vrcs-setup) is enabled payment gets automatically converted into selected Stablecoin. When VRCS funds reach certain minimum amount set in the merchant account settings (menu Settings\Currency management), the VRCS funds are transferred to 0xProcessing vault and displayed in the Merchant's balance.
8. Upon transaction completion 0xProcessing sends callback to Client's webhook URL. Callback contains: status, address, currency, amount and commission. If payment is successful Merchant moves to providing Client with requested product or service.
9. In case of underpayment to the payment will be assigned status "Insufficient" and it will wait for confirmation from Merchant in personal account menu Confirmations. Payments in the wrong currency or non-payment will be considered unsuccessful and will be displayed to Merchant as canceled.

<figure><img src="/files/bIWXMYU7yWdZlwHBKnF2" alt=""><figcaption></figcaption></figure>

### **Deposit flow for payment without fixed amount**

1. On Merchant's website Client top ups his balance.
2. Client selects the cryptocurrency for payment.
3. Client is provided with [payment form](/basic/introduction-guide/payment-form#payment-form-without-a-fixed-amount-skrin-i-opisanie-kakie-dannye-peredayutsya-merchantu-dlya-sozdan) created and designed by Merchant, filled with payment details received from 0xProcessing. It is available for 30-50 mins time window. Payment amount selected by Client should be more than minimum amount for selected cryptocurrency. If Client closes the payment form without payment or upon time window expiry the transaction will be marked unpaid, in order to retry another payment form with a new wallet address for payment should be generated.
4. Client pays via QR code or by direct payment to provided one time wallet address. Web3 wallet button is not available for this form.
5. After the payment Client is notified about transaction status at Merchant's discretion.
6. If [VRCS ](/quick-start/vrcs-setup)is enabled payment gets automatically converted into selected Stablecoin. When VRCS funds reach certain minimum amount set in the merchant account settings (menu Settings\Currency management), the VRCS funds are transferred to 0xProcessing vault and displayed in the Merchant's balance.
7. Upon transaction completion 0xProcessing sends [callback](/quick-start/setting-up-webhooks) to Merchant's webhook URL. Callback contains: status, address, currency, amount and commission. If payment is successful Merchant top ups Client's balance accordingly.
8. Payments in the wrong currency, payments less than a minimum amount or non-payment will be considered unsuccessful and will be displayed to Merchant as canceled.

<figure><img src="/files/Jr3KfK9uwT4ZOm4IDeFR" alt=""><figcaption></figcaption></figure>

### Deposit flow for direct payment on a static wallet

Merchant assigns to Client permanent deposit wallet. Client can deposit any funds above minimum amount (\~3USD) which will be sent to the 0xProcessing vault and then credited to Merchant's balance.

{% hint style="warning" %}
**XRP currency is not available for direct payments on a static wallet.**
{% endhint %}

1. On Merchant's website Client top ups his balance.
2. On first top up Merchant requests 0xProcessing to generate static address for Client. Upon obtaining address Merchant can generate QR code for it using some free trusted tool like [**Google Chart Service**](/basic/introduction-guide/payment-form#how-these-parameters-work)**.**
3. Client deposits funds at provided static address or QR code, and once blockchain processes transaction Client's balance will be updated accordingly.
4. After the payment Client is notified about transaction status at Merchant's discretion.
5. Upon transaction completion 0xProcessing sends [callback](/quick-start/setting-up-webhooks) to Merchant's webhook URL. Callback contains: status, address, currency, amount and commission. If payment is successful Merchant top ups Client's balance accordingly.
6. No callback is sent in case if the payment is less than the minimum amount, payment is in the wrong currency or no payment at all. In such cases the payment is considered unsuccessful and should be displayed by the Merchant as canceled.

<figure><img src="/files/Eo0uff7MkaWFT1I2rl1H" alt=""><figcaption></figcaption></figure>


# Payment form

Guide to setting up and customizing payment forms to create efficient, user-friendly, and reliable crypto transaction solutions for your customers.

## What is crypto payment form?

Payment form for crypto payments differs from classic payment methods. Users can send their funds using exchanges and crypto wallet applications instead of classic payment forms.&#x20;

Crypto payment form is a block with the information about payment conditions and crypto address where funds should be sent.&#x20;

The main idea is to provide a user with a deposit crypto address and all necessary information about deposit limits, exchange rates and other payment conditions.&#x20;

Also it will be a good idea to provide crypto addresses using QR codes that users can use as an automatic way to open their wallet application and send a cryptocurrency in one click.

In this section you will learn how to provide the user with all the necessary information, how to implement QR codes to your payment form and what best practices exist in order to make the payment form user friendly, to increase its conversion rate and to avoid user mistakes.

## **Payment form with a fixed amount**&#x20;

**Payment form with fixed amount -** form generated on the 0xProcessing side, with a fixed payment amount, unique wallet address for payment and buttons to connect Web3 wallets.&#x20;

In this form we get such data as the type of cryptocurrency, the amount that must be sent for the deposit to be successful, the address to which you need to send money, QR code, which is a wallet address, which can be scanned for example in the application exchange from which you will send money.&#x20;

Also, there are buttons to connect Web3 wallets and convenient payment from them. To do this, the user must have funds either on Metamask, or on another web3 wallet and connect it through "Wallet connect".

<figure><img src="/files/L9dDjgh4mXLYBMjMFSZ6" alt="0xprocessing payment form" width="375"><figcaption><p>payment form</p></figcaption></figure>

<figure><img src="/files/6i4TZFqZpmEoS8hDAY0F" alt="0xprocessing  success payment" width="375"><figcaption><p>success payment</p></figcaption></figure>

To manage the form after receiving the payment status, the following parameters are used:

**CancelURL** - the address to which the Cancel button will be redirected from the payment form. The address must support SSL

**SuccessURL** - the address to which the Back to website button will be redirected from the payment form. The address must support SSL

**AutoReturn** - true if the user needs to be automatically redirected from the form to SuccessUrl after confirming the transactions in the blockchain

[**More about parameters** ](/0xprocessing-api/deposits/payment-form-with-fixed-amount)

## Payment form without a fixed amount&#x20;

**Payment without a fixed amount** is a type of payment in which the merchant can create his custom payment form based on the received payment data with a unique address for each payment. The client can pay any amount at his discretion, but not less than the minimum amount, the payment will be automatically accounted by the system upon confirmation in the blockchain.

<figure><img src="/files/QiDkZ9Ig62pgMv1Ftjti" alt="" width="365"><figcaption><p>Example Payment form without a fixed amount integration on merchant side</p></figcaption></figure>

To display the QR code as an image, please add the QR code data to the "img" tag with the "src" attribute.

[**More about payment data**](/0xprocessing-api/deposits/payment-without-fixed-amount)

### Static wallet&#x20;

When requesting a top-up on the merchant platform side, sends a request to 0xProcessing to generate the client's wallet, the merchant receives the client's wallet from 0xProcessing and can convert it into a QR code using any popular services. All this data can be embedded in the client's account on the merchant's platform

<figure><img src="/files/rHeggTaXVlK4B433eonD" alt="" width="335"><figcaption><p>Example static wallet integration on merchant side</p></figcaption></figure>

#### How to create QR code for static wallet? <a href="#qrcodeimplementation-howtocreateqrcode" id="qrcodeimplementation-howtocreateqrcode"></a>

In order to create the QR code you can use Google Chart Service and encode the URI.

To create simple QR codes including the link to the wallet address the following parameters should be used:\
<https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl=bitcoin:3AFaCnqriLNxj15kqtp5Pxn8puHfuqbX7W&choe=UTF-8>

You can use this link directly inside the \<img> tag:

```markup
<img src="https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl=bitcoin:3AFaCnqriLNxj15kqtp5Pxn8puHfuqbX7W&choe=UTF-8">
```

<figure><img src="/files/ONoGkSAr1pifftB5NSjY" alt=""><figcaption><p>QR example</p></figcaption></figure>

**chs** - QR code size ("150x150" size is used as an example)\
**cht** - chart type (**"qr" is necessary for QR code**)\
**chl** - the data encoded in the QR code ("bitcoin:3AFaCnqriLNxj15kqtp5Pxn8puHfuqbX7W" has been used in the example above, but additional parameters can be used according to "BIP-0021" standard documentation: <https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki>)\
**choe** - encoding type of the QR code data ("UTF-8" is required by "BIP-0021" standard)

When the user scans this QR code they will be able to open the wallet application and to make the deposit in one click.

### Invoices

The Invoices feature allows merchants to create and manage cryptocurrency payment requests for customers. Users can generate invoices with customized products or services, share them via a unique payment link or email, and track payment statuses in real time. Customers can review invoice details, complete the payment using their preferred crypto wallet, and receive a payment receipt upon successful transaction. Merchants can also edit, duplicate, or manage existing invoices directly from the platform. [More details](broken://spaces/4rL5sciKBfKPypeSSY82)

<figure><img src="/files/gEFP94pIx933lbBql0nw" alt="" width="375"><figcaption></figcaption></figure>

<figure><img src="/files/Ajwt1hFqb7HTRQtZbryN" alt="" width="375"><figcaption></figcaption></figure>

### Payment form generated by the link

In the link you need to put your merchant account ID (required), currency of payment, amount, SuccessUrl and CancelUrl to redirect client after payment:

#### <mark style="color:blue;"><https://app.0xprocessing.com/payment/create/?MerchantId=\\_\\_\\_\\_\\_\\&Currency=\\_\\_\\_\\_\\_\\&Amount=\\_\\_\\_\\_\\_\\&AmountUsd=\\_\\_\\_\\_\\&BillingID=\\_\\_\\_\\_\\_\\&ClientID=\\_\\_\\_\\_\\_\\&SuccessUrl=\\_\\_\\_\\_\\_\\&CancelUrl=\\_\\_\\_\\_\\_\\&AutoReturn=\\_\\_\\_\\_\\>\_</mark> &#x20;

if the payment details are not specified in the link, the client can enter them independently in a special form

<div data-full-width="true"><figure><img src="/files/K8Cqgy3mj9s2UlcfFLRR" alt="0xprocessing payment creation form" width="375"><figcaption><p>payment creation form </p></figcaption></figure></div>

<figure><img src="/files/7KUn7B2WIpwDtzWjZXOz" alt="0xprocessing payment form" width="375"><figcaption><p>payment form</p></figcaption></figure>


# Withdrawal flow

A comprehensive guide to managing withdrawals in our crypto payment gateway, designed to ensure smooth, secure, and efficient transactions.

### **Withdrawal flow via API**

1\.  To create a withdrawal via API, for example, a withdrawal initiated by your Сlient, use the [following request](/0xprocessing-api/withdrawals/withdrawal-by-client)

2\.  Merchant can [set withdrawal limit](/quick-start/balance-management#withdrawal-of-balances) for Clients

&#x20;(menu Confirmations\Settings)

<figure><img src="/files/8bclx64HqHm7KWyekoJU" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/KYJqSbMlqe82JtA3m9Sr" alt=""><figcaption></figcaption></figure>

\- if withdrawal amount below limit it will be processed automatically.

\- if withdrawal amount above limit it should be confirmed by Merchant or Manager before processing

Client can withdraw funds only if Merchant has corresponding currency in necessary volume on his balance. Instruction how to manage balance available here:[Balance management](/quick-start/balance-management#liquidity-topup).

3\. Once withdrawal is executed it will be sent to Client's private wallet in requested amount minus network fee.

#### **Withdrawal confirmation**

If withdrawal executed via API and limit is higher than defined in Merchant's personal account (Merchant\ API\ General settings) it will be suspended until Merchant will approve it or reject.

It can be done in [Confirmations\Withdrawal](#withdrawal-confirmation) section of Merchant's account or via the Manager's account.<br>

<figure><img src="/files/vhV1XkgOBmnhjCKlUuee" alt=""><figcaption></figcaption></figure>

### **Withdrawal flow via personal account**

1. In order to withdraw funds Merchant should select Withdraw at Dashboard page.

<figure><img src="/files/kv6OfZnzBHeKi90mvCFE" alt=""><figcaption></figcaption></figure>

1. Then select currency, amount, wallet address and optionally add comment.

<figure><img src="/files/bomSpWuXWSSw32tqsopm" alt=""><figcaption></figcaption></figure>

1. To confirm withdrawal should be provided two verification: from 2FA app and from email.

<figure><img src="/files/VxRn1PcWj3yysqOE4tFN" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
If Merchant's balance has enough funds and verification was successful withdrawal will be executed for selected amount minus Network fee.
{% endhint %}


# VRCS - automatic conversion to stablecoins

Automate cryptocurrency to stablecoin conversion effortlessly with VRCS, ensuring stability and reliability in your crypto transactions and operations.

Conversion of incoming funds in **0xProcessing** is possible only through VRCS.

If you deposit BTC, DOGE, BCH, ETH, LTC, XRP, TRX, BNB, ETH (BEP20), ETH (ARB1), AVAX, POL, SOL\
\
It is possible to convert it into one of the selected stablecoins:

USDT (ERC20, TRC20, BEP20)

{% hint style="info" %}
Minimum conversion amount is 10 USD - for each currency individually. If necessary Merchants can increase this limit. If received funds are less than minimum amount, conversion will be completed upon receiving more funds sufficient to pass minimum amount level.
{% endhint %}

{% hint style="info" %}
The minimum amount of conversion from VRCS balance to Merchant's balance is 100 USDT. This limit is set in the Merchant account settings and as soon as this limit is reached the funds are transferred from VRCS balance to the main balance in the selected stablecoin.
{% endhint %}

Funds can be converted to stablecoins only before they deposited to Merchant's wallet - once they deposited not as stablecoins they should be withdrawn first in order to convert them to stablecoins.

### Activate VRCS&#x20;

VRCS can be activated by filling form at Settings/ Currency management/ Enable VRCS or by contacting Support Team. (menu Settings/ Currency management/ Enable VRCS). Check [**here**](/quick-start/vrcs-setup) for more details

<figure><img src="/files/zMMfidRPO0r89Jy8wMv6" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**If VRCS is not enabled your funds are not protected against cryptocurrencies volatility.**&#x20;
{% endhint %}


# Webhooks flow

Use webhooks to automate updates for deposits, withdrawals, and real-time transactions, streamlining your crypto payment operations with instant notifications.

Information about incoming payments and withdrawals are available to Merchant in personal account or via callbacks - automatic notifications provided in real time to Merchant's Webhook link.

Merchant can setup Webhook link in **Settings\API menu**, and instantly start receiving data about incoming payments and withdrawals in JSON such as: amount, status, timestamp, etc.

Every time new crypto payment gets deposited or funds have been withdrawn Merchant will receive webhook with transaction details:

* status
* currency
* amount
* USD amount
* blockchain transaction's hash
* address
* Merchants Client ID
* Merchants ID
* Signature
* ...and so on

{% hint style="warning" %}

#### Attention

Merchant should validate webhook's signature and values of known parameters in order to avoid fraudulent activity.
{% endhint %}

{% hint style="info" %}
After successful validation of webhook, Merchant should respond with **HTTP Code: 200 OK.** No additional parameters are required in the response body.&#x20;

Our server expects a response to the webhook within a **3-second** timeout period. If the response is not received within these 3 seconds, the system considers the delivery failed.

In case if Merchant will not validate callback System repeats it 31 times with an interval of 15 seconds. If Webhook still fails to be delivered, System sends notification to the Merchant's email indicating a problem with Webhook URL.
{% endhint %}

Manual on webhook integration[ ](/quick-start/setting-up-webhooks)[Setting up Webhooks](/quick-start/setting-up-webhooks)

Check more details in [**Documentation**](/0xprocessing-api/webhooks)


# 0xProcessing use cases

Explore practical 0xProcessing use cases to address business-specific crypto payment needs, optimizing transactions and expanding possibilities.

## 0xProcessing integration options

With 0xProcessing via API integrations it's possible to receive payments in variety of ways: on websites, platforms, chats, etc.

Below are main use cases:

{% hint style="success" %}
**Merchant needs to process payments with fixed amount (e-commerce, subscription)**
{% endhint %}

The deposit is made by invoice with a fixed amount.

Only the exact amount specified in the payment form will be credited as successful.\
In case of underpayment, the merchant is sent a callback with an appropriate status of Insufficiency.

The merchant can confirm an underpayment in the personal account manually or enable automatic execution of such transactions in the personal account, but they will be accepted only after closing the account payment window (30-50 min).

In case of overpayment, the transaction passes as successful, and the merchant receives a callback for the full amount of payment.\
Ask support for a working example of merchant integration.

{% hint style="info" %}
**Methods used for this type of integration:**

[Payment form with fixed amount](/0xprocessing-api/deposits/payment-form-with-fixed-amount)

[Webhooks](/0xprocessing-api/webhooks/webhooks-for-payment-form-with-fixed-amount)

[To display the balance equivalent in fiat currency](/0xprocessing-api/crypto-or-fiat-equivalent)&#x20;
{% endhint %}

**Example:** [evavpn.com](https://evavpn.com/)

{% hint style="success" %}
**Merchant needs to process payments with non-fixed amount (gambling, platforms with user balance)**
{% endhint %}

If the merchant has a user balance on the platform side (recommended, as this is the best option to avoid the problem of underpayment or overpayment in cryptocurrency) a payment method without a fixed amount is appropriate.

In response to a deposit request, 0xProcessing sends payment data, which the merchant can embed in a pop-up, window or page in its platform design.

0xProcessing sends the wallet address, minimum payment amount and QR. The window design, additional text and recommended payment amount can be added by the merchant at his discretion.

A successful deposit is any amount greater than the minimum (covering network fees).

Funds received from the client are transferred to the merchant's balance in 0xProcessing.

After the customer's deposit, the merchant receives the callback for the amount sent by the user, and after reading it the merchant can display the amount from the callback as a top-up of the user's balance.

Ask support for a working example of merchant integration.

{% hint style="info" %}
**Methods used to integrate this type:**

[Payment form without fixed amount](/0xprocessing-api/deposits/payment-without-fixed-amount)

[Withdraw](/0xprocessing-api/withdrawals/withdrawal-by-client)

[Withdrawal info](/0xprocessing-api/withdrawals/withdrawal-by-client#withdrawal-info)
{% endhint %}

{% hint style="success" %}
**Payments on static wallet (gambling, platforms with user balance)**
{% endhint %}

Merchant generates a static wallet for each user through API at user registration and embeds them in the user's personal account.

A deposit to it of any amount greater than the minimum is considered successful.

The advantage of this type is that it is easier for a user to make repeated deposit, just to top up the purse. There will be fewer calls to the merchant that the client has paid in the wrong wallet.

Ask the support team for a working example of merchant integration

{% hint style="info" %}
**Methods used to integrate this type:**

[Static wallet](/0xprocessing-api/deposits/static-wallet)

[Withdraw](/0xprocessing-api/withdrawals/withdrawal-by-client)

[Withdrawal info](/0xprocessing-api/withdrawals/withdrawal-by-client#withdrawal-info)
{% endhint %}

**Example:** [megapari.com](https://megapari.com/)

{% hint style="success" %}
**Link for payment of specific amount for integration of Merchant's deposit button (e-commerce, tickets, subscriptions with specific cost)**
{% endhint %}

It doesn't guarantee full payment because it opens a form for fixed payment, how much the user will transfer at his discretion.

It requires additional control and confirmation of deposits by the merchant.

**Example:**\
In the link you need to put your merchant account ID (required), currency of payment, amount, SuccessUrl and CancelUrl to redirect client after payment:&#x20;

#### <mark style="color:blue;"><https://app.0xprocessing.com/payment/create/?MerchantId=\\_\\_\\_\\_\\_\\&Currency=\\_\\_\\_\\_\\_\\&Amount=\\_\\_\\_\\_\\_\\&AmountUsd=\\_\\_\\_\\_\\&BillingID=\\_\\_\\_\\_\\_\\&ClientID=\\_\\_\\_\\_\\_\\&SuccessUrl=\\_\\_\\_\\_\\_\\&CancelUrl=\\_\\_\\_\\_\\_\\&AutoReturn=\\_\\_\\_\\_\\>\_</mark> &#x20;

if the payment details are not specified in the link, the client can enter them independently in a [special form](/basic/introduction-guide/payment-form#payment-form-generated-by-the-link)

{% hint style="success" %}
**Web3 wallets payments (gambling, lottery, investment projects, charity)**
{% endhint %}

**Web3 processing**

It allows you to transparently track transactions for other users.\
It allows all users to track how much money is in the "bank" of the project.

**Example:** [dexsport.io](https://dexsport.io/)

{% hint style="success" %}
**Recurrent Web3 wallets payments (subscription to service, salary, etc)**
{% endhint %}

This method is used if the merchant needs to deduct amounts from the user on a regular basis.

When you register a user on the merchant platform, it is possible to sign up a Web3 wallet user on a special contract that allows merchant to write off every month, weekly, daily or at any other time a certain amount of money from the Web3 wallet user.


# Obtaining API Keys

Securely generate API keys to integrate our crypto payment gateway into your systems, enabling seamless and secure access to its powerful features.

1. **Log in to your 0xProcessing account**&#x20;
2. Navigate to Settings **menu**
3. Open the integrated method section **API**
4. Find the section called **“API key”** and click **"Generate key"**.

<figure><img src="/files/P0b3LjAsxf08jxbeul6g" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
**Please copy this key and save it somewhere safe. For security reasons, we cannot show it to you again.**&#x20;

**If you generate a new key, the old one will stop working**
{% endhint %}


# Deposits

Discover deposit methods like fixed amount, no fixed amount, or static wallets, offering tailored solutions for your crypto payment integration needs.

{% content-ref url="/pages/AaQNZbJ5yNoGrakEHDKT" %}
[Payment form with fixed amount](/0xprocessing-api/deposits/payment-form-with-fixed-amount)
{% endcontent-ref %}

{% content-ref url="/pages/zj2TOQScSzZC3bQ7ZXsI" %}
[Payment without fixed amount](/0xprocessing-api/deposits/payment-without-fixed-amount)
{% endcontent-ref %}

{% content-ref url="/pages/j3i5ueR8mcHvSBRitNi5" %}
[Static wallet](/0xprocessing-api/deposits/static-wallet)
{% endcontent-ref %}


# Payment form with fixed amount

Set up fixed amount payment forms to provide predictable, seamless, and efficient crypto transactions for businesses and their customers.

Amount of this payment cannot be changed by Client (but Merchant could provide options). Payment is considered paid when received amount is more of equal to payment amount, otherwise payment will be unsuccessful and will be awaiting for Merchant's confirmation.

**Content Type: x-www-form-urlencoded, form-data**

**Request type: POST**

**Endpoint:**&#x20;

```
https://app.0xprocessing.com/Payment
```

**Parameters:**&#x20;

<table><thead><tr><th width="185">Name</th><th width="451">Description</th><th>Type</th></tr></thead><tbody><tr><td>Amount</td><td>Payment amount in cryptocurrency. Optional parameter if <mark style="color:blue;">AmountUsd</mark> is passed</td><td>Double</td></tr><tr><td>AmountUSD</td><td>Payment amount in USD (equivalent). Optional parameter if <mark style="color:blue;">Amount</mark> is passed</td><td>Double</td></tr><tr><td>Currency (Required field)</td><td>Payment <a href="/pages/ftyScTyy3tWhVCjkYlFR#crypto-currencies">currency<br>Values</a></td><td>String</td></tr><tr><td>Email (Required field)</td><td>Client's e-mail</td><td>String</td></tr><tr><td>FirstName</td><td>Client's first name</td><td>String</td></tr><tr><td>LastName</td><td>Client's last name</td><td>String</td></tr><tr><td>ClientId (Required field)</td><td>Unique identifier of the user in the system from which the payment is made (e.g. client's id on your website)</td><td>String</td></tr><tr><td>MerchantId (Required field)</td><td>Unique Merchant ID in the system 0xProcessing</td><td>String</td></tr><tr><td>BillingID</td><td>Unique payment identifier in the system from which the payment is made</td><td>String</td></tr><tr><td>Test</td><td><p>It indicates whether the payment will be a test payment. This parameter is optional and should only be used for <a href="/pages/m3zeShTcg22RhSKfIeaq#test-callbacks">testing of callbacks.</a></p><p></p><p>In order to use this parameter, you have to be logged into the Merchant account. If authorization has been passed and the request is sent with Test=true, you will see three buttons on the payment form "Confirm payment", "Cancel payment","Insufficient", by clicking on which your WebhookUrl will receive corresponding callbacks. The total number of attempts sent is 30, and the interval between attempts is 15 seconds. Test payments are not displayed in your shop and are not counted</p></td><td>Boolean</td></tr><tr><td></td><td></td><td></td></tr><tr><td>ReturnUrl</td><td>If ReturnUrl = true, you will receive a payment form as a RedirectURL, which you can set as an iFrame on your side</td><td>Boolean</td></tr><tr><td>CancelUrl</td><td>The address to which the Cancel button will be redirected from the payment form. The address must support SSL</td><td>String</td></tr><tr><td>SuccessUrl</td><td>The address to which the Back to website button will be redirected from the payment form. The address must support SSL</td><td>String</td></tr><tr><td>AutoReturn</td><td>True if the user needs to be automatically redirected from the form to SuccessUrl after confirming the transactions in the blockchain</td><td>Boolean</td></tr></tbody></table>

**Example request:**

```html

        <form action="https://app.0xprocessing.com/Payment" method="post">
                <input type="hidden" name="test" value="false" />
                <input type="hidden" name="email" value="test@test.com" />
                <input type="hidden" name="name" value="name" />
                <input type="hidden" name="lastname" value="lastname" />
                <input type="hidden" name="amount" value="115" />
                <input type="hidden" name="currency" value="BTC" />
                <input type="hidden" name="MerchantId" value="Asv0232SSd" />
                <input type="hidden" name="ClientId" value="1000" />
                <input type="hidden" name="BillingId" value="13304" />
                <button type="submit">Send</button>
        </form>
                

```

**Reply**- in response to the above mandatory parameters, sent to **<https://app.0xprocessing.com/Payment>**, a payment form will be generated and shown to the payer to make the payment.

**An example of the response when** **ReturnUrl = true:**

```
   {
    "redirectUrl": "https://app.0xprocessing.com/Payment/Details/765ecbfa-13f5-4f49-83e9-ee468085c473",
    "id": 264239
   }                

```

The deposits report can be implemented by means of webhooks or by checking of payment status.

{% content-ref url="/pages/F6yWUooJ9PxeZEJxC2IT" %}
[Webhooks](/0xprocessing-api/webhooks)
{% endcontent-ref %}

{% content-ref url="/pages/noi71tQULMHhlhbiAI7P" %}
[Broken mention](broken://pages/noi71tQULMHhlhbiAI7P)
{% endcontent-ref %}


# Payment without fixed amount

Create flexible payment forms without fixed amounts, enabling convenience for your customers and flexibility for your business in crypto payments.

**Payment without a fixed amount** is a type of payment in which the client can pay any amount at his discretion, but not less than the minimum amount, the payment will be automatically accounted by the system upon confirmation in the blockchain.

**In this case no payment form is formed, but only data for payment**, which can be built into the design of the merchant platform or chat bot.                             &#x20;

**Content Type: x-www-form-urlencoded, form-data**

**Request type: POST**

**Endpoint:**&#x20;

<pre><code><strong>https://app.0xprocessing.com/Payment
</strong></code></pre>

**Parameters:**

<table><thead><tr><th width="185">Name</th><th width="482">Description</th><th>Type</th></tr></thead><tbody><tr><td>Currency (Required field)</td><td>Payment <a href="/pages/ftyScTyy3tWhVCjkYlFR#crypto-currencies">currency<br>Values</a></td><td>String</td></tr><tr><td>Email (Required field)</td><td>Payer's e-mail</td><td>String</td></tr><tr><td>FirstName</td><td>Payer's name</td><td>String</td></tr><tr><td>LastName</td><td>Payer's surname</td><td>String</td></tr><tr><td>ClientId (Required field)</td><td>Unique identifier of the user in the system from which the payment is made (e.g. client's id on your website)</td><td>String</td></tr><tr><td>MerchantID (Required field)</td><td>Unique Merchant ID in the system 0xProcessing. (Merchant account> Settings -> General )</td><td>String</td></tr><tr><td>BillingID</td><td>Unique payment identifier in the system from which the payment is made</td><td>String</td></tr></tbody></table>

**For a payment without a fixed amount, the response to the request will be:**

```json
{
  "id": 1000,
  "minimumAmount": 0.7,
  "address": "TJq434gdxEyaf8VdXa2YNwQousUkwHRJdi",
  "rate": 1.0004,
  "expDate": "2022-01-01T00:00:00.000000Z",
  "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALkAAAC5CAYAA..."
}
```

{% hint style="warning" %}
When requesting a deposit of **XRP** currency and Ripple-based tokens, the "DestinationTag" parameter is also passed, which must be displayed in your payment form, since a client payment without Destanation Tag will be declined with the status canceled.
{% endhint %}

{% hint style="danger" %}
When requesting a deposit of **GRAM, USDT (TON), NOT (TON)** currencies, the "destinationTag" parameter is also passed, which must be displayed in your payment form, since a client payment without Destination Tag will be declined with the status canceled.
{% endhint %}

{% hint style="info" %}
In this kind of payment there is no test mode of payments, but if use the Test parameter, a test payment will be created, which will not be displayed in the merchant's account, do not need to transfer real funds to the test payment.\
For webhooks tests a request with the parameter **Test=True and a payment form with a fixed amount is used.**
{% endhint %}

{% hint style="info" %}
To display the QR code as an image, please add the QR code data to the "img" tag with the "src" attribute.
{% endhint %}

The deposits report can be implemented by means of webhooks or by checking of payment status.

{% content-ref url="/pages/F6yWUooJ9PxeZEJxC2IT" %}
[Webhooks](/0xprocessing-api/webhooks)
{% endcontent-ref %}

{% content-ref url="/pages/noi71tQULMHhlhbiAI7P" %}
[Broken mention](broken://pages/noi71tQULMHhlhbiAI7P)
{% endcontent-ref %}


# Static wallet

Use static wallets for simple, consistent crypto payment solutions that enhance convenience and reliability for businesses and their customers.

This method allows you to assign the merchant clients permanent deposit wallets instead of payment forms, when client deposit any amount greater than the minimum amount (\~3 USD) which will be sent to the processing vault and then it will be credited to the merchant balance.

{% hint style="warning" %}
**This type of deposit does not support the XRP currency**
{% endhint %}

{% hint style="danger" %}
When requesting a deposit of **GRAM, USDT (TON), NOT (TON)** currencies, the "Tag" parameter is also passed, which must be displayed in your payment form, since a client payment without Tag will not be processed automatically.

The resulting value of the Tag parameter will be static for the client.

The payment form must necessarily contain a field with the value of the Tag/memo parameter.
{% endhint %}

### Rules for integrating the Static Wallet method:

{% hint style="danger" %}
**IMPORTANT:** Create each separate wallet for each user only when the user wants to use this wallet for the first time.&#x20;

That is, for example:&#x20;

**Step 1:** The user has registered on your platform and you do NOT create all the statics for all blockchains and tokens at the same time at this moment.&#x20;

**Step 2**: At the moment when the user wants to use any coins in any block for the FIRST time, you create at THIS MOMENT a static wallet for him (for example, only USDT (TRC20) and in the future the client will always use this static wallet.&#x20;

**Step 3**: You DO NOT create static wallets for tokens that your client does not use.&#x20;

**Step 4:** API method that allows you to delete static client wallets.&#x20;

You need to send the {clientid} POST request to the method: <https://app.0xprocessing.com/Api/DisableClientWallets/{clientId}>
{% endhint %}

## **Creating a wallet for a user**

The request must contain an **APIKEY header with your API key**. The key can be generated in the menu **Settings\API\\**

**Import the user's ID into the 0x system (create a permanent individual wallet for your client using the user ID from the merchant platform):**

**Method: POST**

**Content Type: application/json**

**Endpoint:**&#x20;

```
https://app.0xprocessing.com/Api/CreateClientWallet
```

**Parameters:**

<table><thead><tr><th width="133">Name</th><th width="507">Description</th><th>Type</th></tr></thead><tbody><tr><td>Currency</td><td>Wallet currency.<a href="https://docs.0xprocessing.com/basic/general/available-assets#crypto-currencies"> List of supported currencies</a></td><td>string</td></tr><tr><td>ClientId</td><td>Unique user ID in your system</td><td>string</td></tr></tbody></table>

**Result:**

**Parameters:**

<table><thead><tr><th width="167">Name</th><th width="307">Description</th><th>Type</th></tr></thead><tbody><tr><td>currency</td><td>Wallet currency</td><td>string</td></tr><tr><td>address</td><td>Wallet address</td><td>string</td></tr><tr><td>tag</td><td>Unique identifier of the client, which needs to specify when sending funds in GRAM, USDT (TON), NOT (TON)</td><td>string</td></tr></tbody></table>

```json

                        {
                        "currency": "string",
                        "address": "string",
                        "tag": "string"
                        }
```

{% hint style="info" %}
To support different currencies from the same network, one constant wallet address will be created for each user.&#x20;

For example: for TRX and USDT (TRC20) the client will have the same wallet address.
{% endhint %}

{% hint style="warning" %}
In order for the customer to deposit funds in a chosen currency, there must be a static wallet created in that currency. For example, if only TRX wallet has been created, but the customer sent USDT (TRC20), the payment will not be processed automatically by the system unless a static USDT (TRC20) wallet has been created. Do not forget to initialize the static wallet in each required currency for your customer.&#x20;

If a static wallet was initialized by mistake after the customer sent funds in the wrong currency, don't worry, just contact 0xProcessing payment support, and we will assist you.
{% endhint %}

## **Getting the list of wallets by customer ID:**

The request must contain an **APIKEY header with your API key**. The key can be generated in the menu **Merchant\API\General settings**

**Method: GET**

**Endpoint:**&#x20;

```
https://app.0xprocessing.com/Api/GetClientWallets/{Id}
```

**Parameters:**

<table><thead><tr><th width="148">Name</th><th width="307">Description</th><th>Type</th></tr></thead><tbody><tr><td>Id</td><td>Unique user ID in your system</td><td>string</td></tr></tbody></table>

**Result:**

**Parameters:**

<table><thead><tr><th width="161">Name</th><th width="307">Description</th><th>Type</th></tr></thead><tbody><tr><td>currency</td><td>Wallet currency</td><td>string</td></tr><tr><td>address</td><td>Wallet address</td><td>string</td></tr><tr><td>tag</td><td>Unique identifier of the client, which specifies when sending funds in GRAM, USDT (TON), NOT (TON)</td><td>string</td></tr><tr><td>balance</td><td>Wallet balance</td><td>decimal</td></tr></tbody></table>

```json
                        [
                        {
                        "currency": "string",
                        "address": "string"
                        }
                        ]
```

{% hint style="success" %}
After creating a wallet, the user can deposit it for any amount.
{% endhint %}

The deposits report can be implemented by means of webhooks&#x20;

{% content-ref url="/pages/F6yWUooJ9PxeZEJxC2IT" %}
[Webhooks](/0xprocessing-api/webhooks)
{% endcontent-ref %}

## Deleting **the list of wallets by customer ID:**

This method should be used on the merchant side if the customer has been blocked or deleted from the system, in this case you should definitely use this method and delete the customer's static wallets.

By completing this request ALL static wallets of the specified customer will be deleted.

The request must contain an **APIKEY header with your API key**. The key can be generated in the menu **Merchant\API\General settings**

**Method: POST**

**Content Type: application/json**

**Endpoint:**&#x20;

```
https://app.0xprocessing.com/Api/DisableClientWallets/{clientId}
```

**Parameters:**

<table><thead><tr><th width="148">Name</th><th width="307">Description</th><th>Type</th></tr></thead><tbody><tr><td>clientId</td><td>Unique user ID in your system</td><td>string</td></tr></tbody></table>

**Response:**

{% hint style="success" %}
**HTTP Code: 200 OK**
{% endhint %}

## Enabling the **list of wallets by customer ID:**

This method should be used on the merchant side if the customer has been unlocked or the customer has returned to your service, in which case you can use this method and all customer static wallets will be enabled.

By completing this request ALL static wallets of the specified customer will be enabled again.

The request must contain an **APIKEY header with your API key**. The key can be generated in the menu **Merchant\API\General settings**

**Method: POST**

**Content Type: application/json**

**Endpoint:**&#x20;

```
https://app.0xprocessing.com/Api/EnableClientWallets/{clientId}
```

**Parameters:**

<table><thead><tr><th width="148">Name</th><th width="307">Description</th><th>Type</th></tr></thead><tbody><tr><td>clientId</td><td>Unique user ID in your system</td><td>string</td></tr></tbody></table>

**Response:**

{% hint style="success" %}
**HTTP Code: 200 OK**
{% endhint %}


# Withdrawals

Understand withdrawal flows, including client-initiated withdrawals and status checks by ID, for streamlined crypto payment processes.

{% content-ref url="/pages/4ESpstJOzQgthNUzKH6a" %}
[Withdrawal by client](/0xprocessing-api/withdrawals/withdrawal-by-client)
{% endcontent-ref %}

{% content-ref url="/pages/ZScDiUUGCeCs60ngBF6f" %}
[Check withdrawal status by Withdrawal ID](/0xprocessing-api/withdrawals/check-withdrawal-status-by-withdrawal-id)
{% endcontent-ref %}


# Withdrawal by client

Automate client withdrawals with 0xProcessing's API. Facilitate secure and efficient fund transfers from your merchant account to client wallets.

When requesting withdrawal of funds, a merchant must have liquidity on his balance in corresponding cryptocurrency. The method can be also used for automatization of withdrawals from the merchant's account by the merchant itself.

**Content type: application/x-www-form-urlencoded / application/json**

**Request**\
**Request Type: POST**

**Endpoint:**

```
 https://app.0xprocessing.com/Api/Withdraw
```

The request must contain an **APIKEY header with your API key**. The key can be generated in the menu **Settings\API**

**Parameters:**

<table><thead><tr><th width="182">Name</th><th width="443">Description</th><th>Type</th></tr></thead><tbody><tr><td>Currency</td><td>Withdrawal <a href="/pages/ftyScTyy3tWhVCjkYlFR#crypto-currencies">currency<br>Values</a></td><td>String</td></tr><tr><td>Amount</td><td>Withdrawal amount in cryptocurrency</td><td>Double</td></tr><tr><td>Address</td><td>Wallet address (<a href="/pages/YgimjJDXJnOzUH7XE4dO">learn more about matching a wallet address on your side</a>)</td><td>String</td></tr><tr><td>DestinationTag</td><td>Destination Tag for XRP, GRAM, USDT (TON), NOT (TON) withdrawal. Optional parameter</td><td>String</td></tr><tr><td>ClientId</td><td>Unique client ID in your system</td><td>String</td></tr><tr><td>ExternalId</td><td>Withdrawal ID in your system</td><td>String</td></tr><tr><td>Test</td><td>Indicates whether the withdrawal will be a test withdrawal</td><td>Boolean</td></tr></tbody></table>

**Reply**&#x20;

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="182">Name</th><th width="444">Description</th><th>Type</th></tr></thead><tbody><tr><td>id</td><td>Withdrawal ID in the 0xProcessing system</td><td>Integer</td></tr><tr><td>currency</td><td>Withdrawal currency</td><td>String</td></tr><tr><td>amount</td><td>Withdrawal amount in cryptocurrency</td><td>Double</td></tr><tr><td>address</td><td>Wallet address</td><td>String</td></tr><tr><td>destinationTag</td><td>Destination Tag for XRP, GRAM, USDT (TON), NOT (TON) withdrawal. Optional parameter</td><td>String</td></tr><tr><td>clientId</td><td>Unique client ID in your system</td><td>String</td></tr><tr><td>autoWithdraw</td><td>Specifies whether the withdrawal will be processed automatically. A value of false means that the withdrawal must be processed by the manager</td><td>Boolean</td></tr><tr><td>externalId</td><td>Withdrawal ID in your system</td><td>String</td></tr></tbody></table>

**Example response JSON:**

<pre class="language-json" data-line-numbers><code class="lang-json">                        {
                        "id": 100,
                        "address": "TToSLiYx6gfCrrhnWKXJmrsCivXR1111L",
                        "currency": "TRX",
                        "amount": 100.0,
                        "destinationTag": null,
                        "externalId":"abcd1234",
<strong>                        "clientId": "Client",
</strong>                        "autoWithdraw": false
                        }
</code></pre>

The withdrawals report can be implemented by means of webhooks or by checking of withdrawal status.

{% content-ref url="/pages/F6yWUooJ9PxeZEJxC2IT" %}
[Webhooks](/0xprocessing-api/webhooks)
{% endcontent-ref %}

{% content-ref url="/pages/ZScDiUUGCeCs60ngBF6f" %}
[Check withdrawal status by Withdrawal ID](/0xprocessing-api/withdrawals/check-withdrawal-status-by-withdrawal-id)
{% endcontent-ref %}


# Check withdrawal status by Withdrawal ID

Learn how to check withdrawal statuses by using unique IDs, enabling transparency and real-time updates for your crypto payment operations.

**Request**\
**Request Type:** **GET**

**Endpoint:**&#x20;

<pre><code><strong>https://app.0xprocessing.com/Api/GetWithdraw/{id}
</strong></code></pre>

**Used to check the status of the withdrawal**

{% hint style="warning" %}
To confirm the withdrawal correctly, it must be interrogated before the value in the **"Hash" parameter appears and 'Confirmed'= true**

Or **aborted = true**
{% endhint %}

The request must contain an **APIKEY header with your API key**. The key can be generated in the menu **Settings\API to receive a callback about payment status.**

**Parameters:**

<table><thead><tr><th width="182">Name</th><th width="409">Description</th><th>Type</th></tr></thead><tbody><tr><td>ID</td><td>Withdrawal ID in the 0xProcessing system</td><td>Integer</td></tr></tbody></table>

**Reply**

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="202">Name</th><th width="396">Description</th><th>Type</th></tr></thead><tbody><tr><td>ID</td><td>Withdrawal ID in the 0xProcessing system</td><td>Integer</td></tr><tr><td>Currency</td><td>Withdrawal currency</td><td>String</td></tr><tr><td>Amount</td><td>Withdrawal amount in cryptocurrency</td><td>Double</td></tr><tr><td>Address</td><td>Wallet address</td><td>String</td></tr><tr><td>DestinationTag</td><td>Destination Tag for XRP output. Optional parameter</td><td>String</td></tr><tr><td>ClientId</td><td>Unique customer ID in your system</td><td>String</td></tr><tr><td>AutoWithdraw</td><td>Specify whether the withdrawal will be processed automatically. A value of false means that the withdrawal must be processed by the manager</td><td>Boolean</td></tr><tr><td>Hash</td><td>Transaction hash</td><td>String</td></tr><tr><td>Confirmed</td><td>It indicates whether the withdrawal is confirmed</td><td>Boolean</td></tr><tr><td>Aborted</td><td>It indicates whether the withdrawal is rejected by the manager</td><td>Boolean</td></tr><tr><td>Reason</td><td>The reason the withdrawal was rejected</td><td>String</td></tr><tr><td>Fee</td><td>Withdrawal fee</td><td>Double</td></tr><tr><td>Manager</td><td>The manager who performed the action</td><td>String</td></tr><tr><td>ManagerIp</td><td>Ip of the manager who committed the action</td><td>String</td></tr><tr><td>ManagerActionDate</td><td>The date of the manager's action in UTC</td><td>DateTime?</td></tr><tr><td>ExternalId</td><td>Withdrawal ID in your system</td><td>String</td></tr></tbody></table>

**Example response JSON:**

{% code lineNumbers="true" %}

```json
                        {
                        "id": 10,
                        "amount": 100.0,
                        "currency": "TRX",
                        "address": "TToSLiYx6gfCrrhnWKXJmrsCivXR1111L",
                        "clientId": "Client",
                        "hash": "966b3db234364093cc438bac3fcbd6c7c1133ead4998e23731310bf48491c8f5",
                        "autoWithdraw": true,
                        "confirmed": true,
                        "aborted": false,
                        "reason": null,
                        "fee": 0.0,
                        "manager": null,
                        "managerActionDate": null,
                        "managerIp": null
                        }
```

{% endcode %}


# Webhooks

Automate payment flow updates with webhooks for fixed amounts, flexibility, and static wallets, ensuring efficient and transparent processes.

{% content-ref url="/pages/6FdmdPjJQnIFNjomH1uH" %}
[Webhooks for Payment form with fixed amount](/0xprocessing-api/webhooks/webhooks-for-payment-form-with-fixed-amount)
{% endcontent-ref %}

{% content-ref url="/pages/Psj55NcxmrO6JtST72vQ" %}
[Webhooks for Payment without fixed amount](/0xprocessing-api/webhooks/webhooks-for-payment-without-fixed-amount)
{% endcontent-ref %}

{% content-ref url="/pages/I4S8zwzyRfq1GFGtQdYV" %}
[Webhooks for Static wallet](/0xprocessing-api/webhooks/webhooks-for-static-wallet)
{% endcontent-ref %}

{% content-ref url="/pages/kKvk0Ftj2BHz2Qjyczue" %}
[Webhooks for Withdrawals](/0xprocessing-api/webhooks/webhooks-for-withdrawals)
{% endcontent-ref %}


# Webhooks for Payment form with fixed amount

Configure webhooks to receive updates for fixed amount payment forms, automating notifications for reliable and timely crypto transaction updates.

## Webhook Respond

The deposits report is implemented by means of webhooks.

For more information on setting up Webhooks, see [**Setting up Webhooks**](/quick-start/setting-up-webhooks)**.**

Set the Webhook URL in the menu **Settings\API\WebhookURL to receive a callback about payment status.** Required https (TLS/SSL)

**Webhook password** - password required to verify the payment signature

**Webhook URL** - the address in the system from which the payment is made. This address will be used to send updates on the status of payments:

**Request method:** POST

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="171">Name</th><th width="473">Description</th><th>Type</th></tr></thead><tbody><tr><td>PaymentId</td><td>Transaction ID in the 0xProcessing system</td><td>Integer</td></tr><tr><td>MerchantId</td><td>Merchant ID in 0xProcessing system</td><td>String</td></tr><tr><td>ShopId</td><td>Merchant ID in 0xProcessing system</td><td>String</td></tr><tr><td>Amount</td><td>Payment amount in cryptocurrency</td><td>Double</td></tr><tr><td>AmountUSD</td><td>Payment amount in USD equivalent</td><td>Double</td></tr><tr><td>TotalAmount</td><td>Full amount received in the cryptocurrency without fee</td><td>Double</td></tr><tr><td>TotalAmountUSD</td><td>Full amount received in USD equivalent without fee</td><td>Double</td></tr><tr><td>Currency</td><td>Payment currency</td><td>String</td></tr><tr><td>Email</td><td>Payer's e-mail</td><td>String</td></tr><tr><td>Status</td><td><p>Payment status</p><p>Possible values are:</p><p><strong>Success</strong> - payment has been executed successfully.</p><p></p><p><strong>Canceled</strong> - payment has been cancelled. The amount has been credited to the wallet indicated on the payment form after the payment window is closed (payment window 30-50 min). The amount has not been transferred to the wallet specified in the payment form.</p><p></p><p></p><p><strong>Insufficient</strong> - payment is underpaid. The time of the payment window has expired and the payment has not been executed completely, in this case the callback will contain AmountUSD and Amount corresponding to the real amount of received funds). </p><p></p><p>If the deposit amount is less than the minimum amount, the payment is assigned the status <strong>"Insufficient"</strong>. You will not be able to confirm the payment data without an additional payment.</p></td><td>String</td></tr><tr><td>BillingID</td><td>Unique payment identifier in the system from which the payment is made</td><td>String</td></tr><tr><td>Signature</td><td>Checksum to verify the authenticity of the request (to ensure that the request came from 0xProcessing)</td><td>String</td></tr><tr><td>Insufficient</td><td><p>If "Confirm insufficient" is set in the Merchant settings then after the end of the payment validity period (window), the insufficient payments will be automatically confirmed as successfully made. </p><p>Or Merchant can confirm it manually in <strong>Confirmations menu.</strong></p><p>You will receive a second callback with <strong>Success</strong> status and <strong>insufficient=true</strong> flag, which will transfer information about the (underpaid) amount actually received. You need to process this callback on the payment generation side and change the originally generated payment in accordance with the actual funds received</p></td><td>Boolean</td></tr><tr><td>Test</td><td><p>It indicates whether the payment has been marked as a test payment.</p><p>Test payments are not intended for real funds turnover and are not displayed in the merchant account. <strong>Do not credit funds on callbacks with the parameter test=true</strong></p></td><td>Boolean</td></tr><tr><td>ClientId</td><td>Unique client ID in your system</td><td>String</td></tr><tr><td>TxHashes</td><td>Successful transaction hash</td><td>String []</td></tr></tbody></table>

#### **If you want to know how to test callbacks? please follow** [**the link**](/quick-start/setting-up-webhooks#test-callbacks)

**Signature check:**

1\. A string of the following form must be generated: **"PaymentId":"MerchantID":"Email":"Currency":"Password"** (WebhookURL link password)

Without quotation marks through a colon. **Example:** 12345:Qtfxhgy43:<test@test.com>:USDT (ERC20):qwerty

2\. Encrypt the resulting string using the MD5 algorithm

<https://emn178.github.io/online-tools/md5.html>

3\. Compare the resulting string with the one that came through Webhook

```javascript
"Signature":"a5510c8c3e657ffd8229813749cd20ec"
```

4\. If the strings are the same, **return HTTP Status 200** (Required). Our server expects a response to the webhook within a 3-second timeout period. If the response is not received within these 3 seconds, the system considers the delivery failed.

If the callback is not delivered successfully, the system repeats at 31 times with an interval of 15 seconds. If the webhook still fails to be delivered, the system sends a notification to the merchant's account email indicating a problem with the WebhookURL.

**Example Webhook JSON:**

{% code lineNumbers="true" %}

```json
                        {
                        "PaymentId":10453,
                        "MerchantId":"Asv0232SSd",
                        "Amount":0.00264765,
                        "TotalAmount":0.00264765,
                        "Currency":"BTC",
                        "Email":"test@test.com",
                        "Status":"Success",
                        "Signature":"a5510c8c3e657ffd8229813749cd20ec",
                        "BillingID":"13304",
                        "AmountUSD":115.0,
                        "TotalAmountUSD":115.0,
                        "Insufficient":false,
                        "Test":false,
                        "ClientId": "1000",
                        "TxHashes":["0e61e33a0c02204c41ac210c2fcffda4bea4399792acc49479aa8374465ef63a"]
                        }
```

{% endcode %}

{% hint style="warning" %}
When processing callbacks, you MUST use the **PaymentId** parameter **from the callback 0xProcessing** as an additional validation factor.
{% endhint %}


# Webhooks for Payment without fixed amount

Enable webhook notifications for flexible payment forms, ensuring real-time updates for transactions without fixed amounts in your crypto payments.

## Webhook Respond

The deposit report is implemented by means of webhooks.

For more information on setting up Webhooks, see the [**Setting up Webhooks**](/quick-start/setting-up-webhooks)**.**

Set the Webhook URL in the menu **Settings\API\WebhookURL to receive a callback about payment status.** Required https (TLS/SSL)

**Webhook password** - password required to verify the payment signature

**Webhook URL** - the address in the system from which the payment is made, this address will be used to send updates on the status of payments:

**Request method:** POST

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="185">Name</th><th width="461">Description</th><th>Type</th></tr></thead><tbody><tr><td>PaymentId</td><td>Transaction ID in the 0xProcessing system</td><td>Integer</td></tr><tr><td>MerchantId</td><td>Merchant ID in 0xProcessing system</td><td>String</td></tr><tr><td>ShopId</td><td>Merchant ID in 0xProcessing system</td><td>String</td></tr><tr><td>Amount</td><td>Payment amount in cryptocurrency</td><td>Double</td></tr><tr><td>AmountUSD</td><td>Payment amount in USD equivalent</td><td>Double</td></tr><tr><td>TotalAmount</td><td>Full amount received in the cryptocurrency without fee</td><td>Double</td></tr><tr><td>TotalAmountUSD</td><td>Full amount received in USD equivalent without fee</td><td>Double</td></tr><tr><td>Currency</td><td>Payment currency</td><td>String</td></tr><tr><td>Email</td><td>Payer's e-mail</td><td>String</td></tr><tr><td>Status</td><td><p>Payment status</p><p>Possible values are:</p><p><strong>Success</strong> - payment has been executed successfully</p><p><strong>Canceled</strong> - the payment has been cancelled. The amount has been credited to the wallet indicated on the payment form after the payment window is closed (payment window 30-50 min). The amount has not been transferred to the wallet specified in the payment form.</p><p><strong>Insufficient</strong> - the deposit amount is less than the minimum amount, and the payment is assigned the status <strong>"Insufficient"</strong>. You will not be able to confirm the payment data without an additional payment</p><p></p></td><td>String</td></tr><tr><td>BillingID</td><td>Unique payment identifier in the system from which the payment is made</td><td>String</td></tr><tr><td>Signature</td><td>Checksum to verify the authenticity of the request (to ensure that the request came from 0xProcessing)</td><td>String</td></tr><tr><td>Insufficient</td><td><p>If the insufficient payments will be manually confirmed by support as successfully made.</p><p>You will receive a second callback with <strong>Success</strong> status and <strong>insufficient=true</strong> flag, which will transfer information about the (underpaid) amount actually received. You need to process this callback on the payment generation side and change the originally generated payment in accordance with the actual funds received</p></td><td>Boolean</td></tr><tr><td>ClientId</td><td>Unique client ID in your system</td><td>String</td></tr><tr><td>TxHashes</td><td>Successful transaction hash</td><td>String []</td></tr></tbody></table>

#### **If you want to know how to test callbacks? please follow** [**the link**](/quick-start/setting-up-webhooks#test-callbacks)

**Signature check:**

1\. A string of the following form must be generated: **"PaymentId":"MerchantID":"Email":"Currency":"Password"** (WebhookURL link password)

Without quotation marks through a colon. **Example:** 12345:Qtfxhgy43:<test@test.com>:USDT (ERC20):qwerty

2\. Encrypt the resulting string using MD5 algorithm

<https://emn178.github.io/online-tools/md5.html>

3\. Compare the resulting string with the one that came through Webhook

```javascript
"Signature":"a5510c8c3e657ffd8229813749cd20ec"
```

4\. If the strings are the same, **return HTTP Status 200** (Required). Our server expects a response to the webhook within a 3-second timeout period. If the response is not received within these 3 seconds, the system considers the delivery failed.

If the callback is not delivered successfully, the system repeats at 31 times with an interval of 15 seconds. If the webhook still fails to be delivered, the system sends a notification to the merchant's account email indicating a problem with the WebhookURL.

**Example Webhook JSON:**

{% code lineNumbers="true" %}

```json
                        {
                        "PaymentId":10453,
                        "MerchantId":"Asv0232SSd",
                        "Amount":0.00264765,
                        "TotalAmount":0.00264765,
                        "Currency":"BTC",
                        "Email":"test@test.com",
                        "Status":"Success",
                        "Signature":"a5510c8c3e657ffd8229813749cd20ec",
                        "BillingID":"13304",
                        "AmountUSD":115.0,
                        "TotalAmountUSD":115.0,
                        "Insufficient":false,
                        "Test":false,
                        "ClientId": "1000",
                        "TxHashes":["0e61e33a0c02204c41ac210c2fcffda4bea4399792acc49479aa8374465ef63a"]
                        }
```

{% endcode %}

{% hint style="warning" %}
When processing callbacks, you MUST use the **PaymentId** parameter **from the callback 0xProcessing** as an additional validation factor.
{% endhint %}


# Webhooks for Static wallet

Automate updates for static wallets with webhooks, simplifying payment tracking and enhancing the efficiency of your crypto payment system.

## Webhook Respond

The deposit report is implemented by means of webhooks.

For more information on setting up Webhooks, see the [**Setting up Webhooks**](/quick-start/setting-up-webhooks)**.**

Set the Webhook URL in the menu **Settings\API\WebhookURL to receive a callback about payment status.** Required https (TLS/SSL)

**Webhook password** - password required to verify the payment signature

**Webhook URL** - the address in the system from which the payment is made, this address will be used to send updates on the status of payments:

**Request method:** POST

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="185">Name</th><th width="458">Description</th><th>Type</th></tr></thead><tbody><tr><td>PaymentId</td><td>Transaction ID in the 0xProcessing system</td><td>Integer</td></tr><tr><td>MerchantId</td><td>Merchant ID in 0xProcessing system</td><td>String</td></tr><tr><td>ShopId</td><td>Merchant ID in 0xProcessing system</td><td>String</td></tr><tr><td>Amount</td><td>Payment amount in cryptocurrency</td><td>Double</td></tr><tr><td>AmountUSD</td><td>Payment amount in USD equivalent</td><td>Double</td></tr><tr><td>TotalAmount</td><td>Full amount received in the cryptocurrency without fee</td><td>Double</td></tr><tr><td>TotalAmountUSD</td><td>Full amount received in USD equivalent without fee</td><td>Double</td></tr><tr><td>Currency</td><td>Payment currency</td><td>String</td></tr><tr><td>Email</td><td>Not used for this method</td><td>String</td></tr><tr><td>Status</td><td><p>Payment status</p><p>Possible values are:</p><p><strong>Success</strong> - payment has been executed successfully</p></td><td>String</td></tr><tr><td>BillingID</td><td>Not used for this method</td><td>String</td></tr><tr><td>Signature</td><td>Checksum to verify the authenticity of the request (to ensure that the request came from 0xProcessing)</td><td>String</td></tr><tr><td>Insufficient</td><td>Not used for this method</td><td>Boolean</td></tr><tr><td>Test</td><td><p>It indicates whether the payment has been marked as a test payment.</p><p>Test payments are not intended for real funds turnover and are not displayed in the merchant account. <strong>Do not credit funds on callbacks with the parameter test=true</strong></p></td><td></td></tr><tr><td>ClientId</td><td>Unique client ID in your system</td><td>String</td></tr><tr><td>TxHashes</td><td>Successful transaction hash</td><td>String []</td></tr></tbody></table>

#### **If you want to know how to test callbacks? please follow** [**the link**](/quick-start/setting-up-webhooks#test-callbacks)

**Signature check:**

1\. A string of the following form must be generated: **"PaymentId":"MerchantID"::"Currency":"Password"** (WebhookURL link password)

Without quotation marks through a colon.&#x20;

**Example:** 12345:Qtfxhgy43::USDT (ERC20):qwerty

2\. Encrypt the resulting string using MD5 algorithm

<https://emn178.github.io/online-tools/md5.html>

3\. Compare the resulting string with the one that came through Webhook

```javascript
"Signature":"a5510c8c3e657ffd8229813749cd20ec"
```

4\. If the strings are the same, **return HTTP Status 200** (Required). Our server expects a response to the webhook within a 3-second timeout period. If the response is not received within these 3 seconds, the system considers the delivery failed.

If the callback is not delivered successfully, the system repeats at 31 times with an interval of 15 seconds. If the webhook still fails to be delivered, the system sends a notification to the merchant's account email indicating a problem with the WebhookURL.

**Example Webhook JSON:**

{% code lineNumbers="true" %}

```json
                        {
                        "PaymentId":10453,
                        "MerchantId":"Asv0232SSd",
                        "Amount":0.00264765,
                        "TotalAmount":0.00264765,
                        "Currency":"BTC",
                        "Email":"null",
                        "Status":"Success",
                        "Signature":"a5510c8c3e657ffd8229813749cd20ec",
                        "BillingID":"null",
                        "AmountUSD":115.0,
                        "TotalAmountUSD":115.0,
                        "Insufficient":false,
                        "Test":false,
                        "ClientId": "1000",
                        "TxHashes":["0e61e33a0c02204c41ac210c2fcffda4bea4399792acc49479aa8374465ef63a"]
                        }
```

{% endcode %}

{% hint style="warning" %}
When processing callbacks, you MUST use the **PaymentId** parameter **from the callback 0xProcessing** as an additional validation factor.
{% endhint %}


# Webhooks for Withdrawals

Configure webhooks to get real-time updates on withdrawal processes, ensuring seamless tracking and reliable operations for your payment gateway.

## Webhook Respond

The withdrawals report is implemented by means of webhooks.

For more information on setting up Webhooks, see the [**Setting up Webhooks**](/quick-start/setting-up-webhooks)**.**

Set the Webhook URL in the menu **Settings\API\WebhookURL** to receive a callback about withdrawals statu&#x73;**.** Required https (TLS/SSL)

**Webhook password** - password required to verify the withdrawal signature

**Webhook URL** - the address in the system from which the withdrawal is made, this address will be used to send updates on the status of withdrawals:

**Request method:** POST

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="185">Name</th><th width="454">Description</th><th>Type</th></tr></thead><tbody><tr><td>ID</td><td>Withdrawal ID in the 0xProcessing system</td><td>Integer</td></tr><tr><td>MerchantID</td><td>Merchant Id in 0xProcessing system</td><td>String</td></tr><tr><td>Date</td><td>Date of withdrawal request </td><td>DateTime</td></tr><tr><td>Amount</td><td>Withdrawal amount in cryptocurrency</td><td>Double</td></tr><tr><td>AmountUSD</td><td>Withdrawal amount in USD equivalent</td><td>Double</td></tr><tr><td>Fee</td><td>Withdrawal fee in token equivalent</td><td>Double</td></tr><tr><td>Currency</td><td>Withdrawal currency</td><td>String</td></tr><tr><td>Address</td><td>Withdrawal address</td><td>String</td></tr><tr><td>Status</td><td><p>Withdrawal status</p><p>Possible values are:</p><p><strong>Success</strong> - withdrawal has been executed successfully</p><p><strong>Canceled</strong> - withdrawal has been not executed</p></td><td>String</td></tr><tr><td>Reason</td><td>Reason of withdrawal reject</td><td>String</td></tr><tr><td>ExternalID</td><td>Unique withdrawal identifier in the system from which the withdrawal is made</td><td>String</td></tr><tr><td>Signature</td><td>Checksum to verify the authenticity of the request (to ensure that the request came from 0xProcessing)</td><td>String</td></tr><tr><td>ClientID</td><td>Unique client ID in your system</td><td>String</td></tr><tr><td>Hash</td><td>Successful transaction hash</td><td>String</td></tr></tbody></table>

**Signature check:**

1\. A string of the following form must be generated: **"ID":"MerchantID":"Address":"Currency":"Password"** (WebhookURL link password)

Without quotation marks through a colon. **Example:** 12345:Qtfxhgy43:0xa36740e327726fA05F720b10Ec2D71E0CD4Ae2A5:ETH:qwerty

2\. Encrypt the resulting string using MD5 algorithm

<https://emn178.github.io/online-tools/md5.html>

3\. Compare the resulting string with the one that came through Webhook

```javascript
"Signature":"a5510c8c3e657ffd8229813749cd20ec"
```

4\. If the strings are the same, **return HTTP Status 200** (Required). Our server expects a response to the webhook within a 3-second timeout period. If the response is not received within these 3 seconds, the system considers the delivery failed.

If the callback is not delivered successfully, the system repeats at 31 times with an interval of 15 seconds. If the webhook still fails to be delivered, the system sends a notification to the merchant's account email indicating a problem with the WebhookURL.

**Example Webhook JSON:**

<pre class="language-json" data-line-numbers><code class="lang-json">                        {
                        "ID":33683,
                        "MerchantID":"0xMR000000",
                        "Date":"2023-03-06T16:37:38.547046Z",
                        "Amount":500.0,
                        "Fee":2.6,
                        "Currency":"ETH",
                        "Address":"0x......",
                        "Status":"Success",
                        "Reason":null,
                        "Signature":"3a16086f49eb11c2e8c426a7b3649caa",
<strong>                        "ExternalID":"abcd1234",
</strong>                        "ClientID":"abcd1234",
                        "AmountUSD":0.0,
                        "Hash":"a45172f319ec4561871bf195f17f85e69a4bc842b5c1085dbe000098217fffb7"
                        }
</code></pre>

{% hint style="warning" %}
When processing callbacks, you MUST use the **ID** parameter **from the callback 0xProcessing** as an additional validation factor.
{% endhint %}


# Binance Pay

Binance Pay — instant crypto payments through Binance with fast confirmation and automatic settlement to the merchant balance.

### Authorization

{% hint style="danger" %}
**Authentication Rule** The request must contain an **`APIKEY`** header with your API key. The key can be generated in the merchant dashboard under **Settings \ API .**
{% endhint %}

All requests must include the following header:

```http
APIKEY: your_api_key_here
Content-Type: application/x-www-form-urlencoded
```

***

{% content-ref url="/pages/zsjgOVVS4bdCc4boIcOq" %}
[Create Binance Pay Deposit](/0xprocessing-api/binance-pay/create-binance-pay-deposit)
{% endcontent-ref %}

{% content-ref url="/pages/dkJcXQW0pKj5xgKpu9ON" %}
[List Supported Coins (Binance Pay ID)](/0xprocessing-api/binance-pay/list-supported-coins-binance-pay-id)
{% endcontent-ref %}

{% content-ref url="/pages/q1XhEkCaHTyEskBfJmgd" %}
[Withdraw to Binance Pay ID](/0xprocessing-api/binance-pay/withdraw-to-binance-pay-id)
{% endcontent-ref %}

{% content-ref url="/pages/etUDXAqcEDgKWdHHZ2AY" %}
[List Coins for On-Chain Withdrawal](/0xprocessing-api/binance-pay/list-coins-for-on-chain-withdrawal)
{% endcontent-ref %}

{% content-ref url="/pages/ikmlUypdukphNnKO4XOk" %}
[On-Chain Withdrawal via Binance pay](/0xprocessing-api/binance-pay/on-chain-withdrawal-via-binance-pay)
{% endcontent-ref %}

{% content-ref url="/pages/tLiTkVfAL1iV2E3ltuit" %}
[Webhooks](/0xprocessing-api/binance-pay/webhooks)
{% endcontent-ref %}

***

### Important Notes

* **ExternalId Uniqueness**: The `ExternalId` must be unique per transaction in your system. It is used for idempotency — submitting the same `ExternalId` twice will return the existing transaction data instead of creating a duplicate.
* **txId Availability**: For on-chain withdrawals, `txId` is null while the transaction is pending. It is populated once the transaction is broadcast to the blockchain.
* **binanceId in Response**: The `binanceId` in the withdrawal response becomes available after Binance processes the request. It is null immediately after creation.
* Currency format for on-chain: Always use the exact name returned by `/BinanceOnchainWithdrawCoins` in the  &#x20;Currency field — including the network suffix, e.g. USDT (BEP20).
* Deposit flow: After calling `/binancepaydeposit`, redirect the client to the url field or display the qrLink. The client  &#x20;must complete payment in the Binance app.


# Create Binance Pay Deposit

{% hint style="danger" %}
**Authentication Rule** The request must contain an **`APIKEY`** header with your API key. The key can be generated in the merchant dashboard under **Settings \ API .**
{% endhint %}

All requests must include the following header:

```http
APIKEY: your_api_key_here
Content-Type: application/x-www-form-urlencoded
```

Creates a deposit request via Binance Pay. Returns a QR code and a direct payment URL for the client to complete the payment.

* **Method:** `POST`
* **Endpoint:** `https://app.0xprocessing.com/api/binancepaydeposit`

#### Request Body (x-www-form-urlencoded)

| Parameter      | Type   | Required | Description                                 |
| -------------- | ------ | :------: | ------------------------------------------- |
| **Token**      | string |    Yes   | Currency code (e.g., `USDT`).               |
| **ClientId**   | string |    Yes   | Client identifier in the merchant's system. |
| **ExternalId** | string |    Yes   | Unique transaction ID on the merchant side. |
| **Email**      | string |    Yes   | Client's email address.                     |
| **Amount**     | number |    Yes   | Deposit amount.                             |

#### Response Example

```json
{
    "id": 50683108,
    "binanceId": "436472398856937472",
    "amount": 3.0,
    "token": "USDT",
    "qrLink": "https://public.bnbstatic.com/static/payment/20260610/63775572-6951-4452-99dd-f553f0c17174.jpg",
    "url": "https://pay.binance.com/en/checkout/3023473eefb64933a901f155dfbad543",
    "qrContent": "https://app.binance.com/qr/dplk0c5b8768338543d1964affcd78c28de2"
}
```

#### Response Fields

| Field         | Type    | Description                                            |
| ------------- | ------- | ------------------------------------------------------ |
| **id**        | integer | Internal deposit ID in 0xProcessing.                   |
| **binanceId** | string  | Binance transaction ID.                                |
| **amount**    | number  | Deposit amount.                                        |
| **token**     | string  | Currency code.                                         |
| **qrLink**    | string  | URL of the QR code image for Binance Pay.              |
| **url**       | string  | Direct link to the Binance Pay checkout page.          |
| **qrContent** | string  | The raw content encoded in the QR code for Binance Pay |

{% hint style="info" %}
**Implementation Note** Direct the client to the `url` or display the `qrLink` in your payment interface. The client must scan the QR code or open the link in the Binance app to complete the payment.
{% endhint %}


# List Supported Coins (Binance Pay ID)

{% hint style="danger" %}
**Authentication Rule** The request must contain an **`APIKEY`** header with your API key. The key can be generated in the merchant dashboard under **Settings \ API .**
{% endhint %}

All requests must include the following header:

```http
APIKEY: your_api_key_here
Content-Type: application/x-www-form-urlencoded
```

Returns the list of currencies supported for both deposit and withdrawal via Binance Pay ID, along with their minimum and maximum limits.

* **Method:** `GET`
* **Endpoint:** `https://app.0xprocessing.com/api/BinanceIdCoins`

#### Request Parameters

No parameters required.

#### Response Example

```json
[
    {
        "name": "USDT",
        "minimumWithdraw": 3.0,
        "maximumWithdraw": 70000.0,
        "minimumDeposit": 3.0,
        "maximumDeposit": 1000.0
    }
]
```

#### Response Fields

| Field               | Type   | Description                |
| ------------------- | ------ | -------------------------- |
| **name**            | string | Currency name.             |
| **minimumWithdraw** | number | Minimum withdrawal amount. |
| **maximumWithdraw** | number | Maximum withdrawal amount. |
| **minimumDeposit**  | number | Minimum deposit amount.    |
| **maximumDeposit**  | number | Maximum deposit amount.    |


# Withdraw to Binance Pay ID

{% hint style="danger" %}
**Authentication Rule** The request must contain an **`APIKEY`** header with your API key. The key can be generated in the merchant dashboard under **Settings \ API .**
{% endhint %}

All requests must include the following header:

```http
APIKEY: your_api_key_here
Content-Type: application/x-www-form-urlencoded
```

Creates a withdrawal request to a recipient's Binance account identified by their Binance Pay ID. Funds are transferred instantly with no blockchain network transaction fee.

* **Method:** `POST`
* **Endpoint:** `https://app.0xprocessing.com/api/binanceidwithdraw`

#### Request Body (x-www-form-urlencoded)

| Parameter      | Type   | Required | Description                                 |
| -------------- | ------ | :------: | ------------------------------------------- |
| **Currency**   | string |    Yes   | Currency to withdraw (e.g., `USDT`).        |
| **ClientId**   | string |    Yes   | Client identifier in the merchant's system. |
| **ExternalId** | string |    Yes   | Unique transaction ID on the merchant side. |
| **BinanceId**  | string |    Yes   | Recipient's Binance Pay ID.                 |
| **Amount**     | number |    Yes   | Withdrawal amount.                          |

#### Response Example

```json
{
    "id": 64094013,
    "type": "WithdrawBinanceId",
    "destination": "22390200",
    "txId": null,
    "amount": 3.0,
    "fee": 0.06,
    "currency": "USDT",
    "date": "2026-06-09T11:29:19.6146089Z",
    "status": "pending",
    "clientId": "1234",
    "externalId": "7",
    "binanceId": null
}
```

#### Response Fields

| Field           | Type           | Description                                                    |
| --------------- | -------------- | -------------------------------------------------------------- |
| **id**          | integer        | Internal withdrawal ID in 0xProcessing.                        |
| **type**        | string         | Operation type: `WithdrawBinanceId`.                           |
| **destination** | string         | Recipient's Binance Pay ID.                                    |
| **txId**        | string \| null | Blockchain TX hash (always null for Binance Pay ID transfers). |
| **amount**      | number         | Withdrawal amount.                                             |
| **fee**         | number         | Processing fee.                                                |
| **currency**    | string         | Currency code.                                                 |
| **date**        | string         | Creation timestamp in UTC (ISO format).                        |
| **status**      | string         | Status of the withdrawal (`pending` / `completed` / `failed`). |
| **clientId**    | string         | Merchant's client ID.                                          |
| **externalId**  | string         | Merchant's external transaction ID.                            |
| **binanceId**   | string \| null | Binance transaction ID (available after processing).           |

***

### Transaction Status Reference

The `status` field is present in all withdrawal responses.

| Status        | Description                                                           |
| ------------- | --------------------------------------------------------------------- |
| **pending**   | Request accepted and queued for processing.                           |
| **completed** | Transaction successfully executed.                                    |
| **failed**    | Transaction failed (e.g. invalid wallet address, insufficient funds). |

***

### Important Notes


# List Coins for On-Chain Withdrawal

{% hint style="danger" %}
**Authentication Rule** The request must contain an **`APIKEY`** header with your API key. The key can be generated in the merchant dashboard under **Settings \ API .**
{% endhint %}

All requests must include the following header:

```http
APIKEY: your_api_key_here
Content-Type: application/x-www-form-urlencoded
```

Returns the list of currencies and networks available for on-chain withdrawal via Binance.

* **Method:** `GET`
* **Endpoint:** `https://app.0xprocessing.com/api/BinanceOnchainWithdrawCoins`

#### Request Parameters

No parameters required.

#### Response Example

```json
[
    { "name": "USDT (POLYGON)", "minimumWithdraw": 5.0, "maximumWithdraw": 10000.0 },
    { "name": "USDT (TRC20)",   "minimumWithdraw": 5.0, "maximumWithdraw": 10000.0 },
    { "name": "USDT (BEP20)",   "minimumWithdraw": 5.0, "maximumWithdraw": 10000.0 }
]
```

#### Response Fields

| Field               | Type   | Description                                   |
| ------------------- | ------ | --------------------------------------------- |
| **name**            | string | Currency name and the network in parentheses. |
| **minimumWithdraw** | number | Minimum withdrawal amount.                    |
| **maximumWithdraw** | number | Maximum withdrawal amount.                    |

{% hint style="info" %}
**Integration Tip** Pass the `name` value exactly as returned in this list (including the network suffix in parentheses, e.g., `USDT (BEP20)`) in the `Currency` field of the on-chain withdrawal request.
{% endhint %}


# On-Chain Withdrawal via Binance pay

{% hint style="danger" %}
**Authentication Rule** The request must contain an **`APIKEY`** header with your API key. The key can be generated in the merchant dashboard under **Settings \ API .**
{% endhint %}

All requests must include the following header:

```http
APIKEY: your_api_key_here
Content-Type: application/x-www-form-urlencoded
```

Creates an on-chain withdrawal request routed through Binance to any external blockchain wallet address. The network fee is deducted from the withdrawal amount.

* **Method:** `POST`
* **Endpoint:** `https://app.0xprocessing.com/api/binancepayonchainwithdraw`

#### Request Body (x-www-form-urlencoded)

| Parameter      | Type   | Required | Description                                                                                          |
| -------------- | ------ | :------: | ---------------------------------------------------------------------------------------------------- |
| **Currency**   | string |    Yes   | Currency and network (e.g., `USDT (BEP20)`) — must match a name from `/BinanceOnchainWithdrawCoins`. |
| **ClientId**   | string |    Yes   | Client identifier in the merchant's system.                                                          |
| **ExternalId** | string |    Yes   | Unique transaction ID on the merchant side.                                                          |
| **Address**    | string |    Yes   | Recipient wallet address.                                                                            |
| **Amount**     | number |    Yes   | Withdrawal amount.                                                                                   |

#### Response Example

```json
{
    "id": 39212667,
    "type": "WithdrawOnchain",
    "destination": "0xaa15959c03bdeb35f8fa345f0055d9954dc806f6",
    "txId": null,
    "amount": 6.0,
    "fee": 0.12,
    "currency": "USDT (BEP20)",
    "date": "2026-06-01T11:32:09.7075739Z",
    "status": "pending",
    "clientId": "1234",
    "externalId": "3",
    "binanceId": null
}
```

#### Response Fields

| Field           | Type           | Description                                                    |
| --------------- | -------------- | -------------------------------------------------------------- |
| **id**          | integer        | Internal withdrawal ID in 0xProcessing.                        |
| **type**        | string         | Operation type: `WithdrawOnchain`.                             |
| **destination** | string         | Recipient's blockchain wallet address.                         |
| **txId**        | string \| null | Blockchain TX hash (null while pending).                       |
| **amount**      | number         | Withdrawal amount.                                             |
| **fee**         | number         | Network fee charged by Binance.                                |
| **currency**    | string         | Currency and network name.                                     |
| **date**        | string         | Creation timestamp in UTC (ISO format).                        |
| **status**      | string         | Status of the withdrawal (`pending` / `completed` / `failed`). |
| **clientId**    | string         | Merchant's client ID.                                          |
| **externalId**  | string         | Merchant's external transaction ID.                            |
| **binanceId**   | string \| null | Binance transaction ID (available after processing).           |

***

### Transaction Status Reference

The `status` field is present in all withdrawal responses.

| Status        | Description                                                           |
| ------------- | --------------------------------------------------------------------- |
| **pending**   | Request accepted and queued for processing.                           |
| **completed** | Transaction successfully executed.                                    |
| **failed**    | Transaction failed (e.g. invalid wallet address, insufficient funds). |


# Webhooks

Set the Webhook URL in the menu **Settings\API\Binance Pay webhooks  to receive a callback about payment status.** Required https (TLS/SSL)

**Webhook password** - password required to verify the payment signature

**Webhook URL** - the address in the system from which the payment is made. This address will be used to send updates on the status of payments:

**Request method:** POST

**Response Type:** JSON

### Deposit

Triggered when a customer successfully completes a deposit via Binance Pay and the funds are credited to the merchant account.

#### Event type

`Deposit`

#### Statuses

* `Success`
* `Canceled`

#### Payload

```json
{
  "Id": 123,
  "MerchantID": "0x...",
  "Date": "2025-06-16T14:30:00Z",
  "Amount": 150.75,
  "AmountUSD": 150.75,
  "Fee": 1.50,
  "Currency": "USDT",
  "Type": "Deposit",
  "Destination": "",
  "Status": "Success",
  "Signature": "a1b2c3d4e5f6...",
  "ExternalID": "EXT-987654",
  "ClientID": "CLIENT-001",
  "TxId": "123456789",
  "BinanceID": "987654321"
}
```

#### Description of fields

| Field       | Description                                      |
| ----------- | ------------------------------------------------ |
| ID          | Internal transaction identifier                  |
| MerchantID  | Merchant identifier                              |
| Date        | Transaction creation date (UTC)                  |
| Amount      | Deposit amount                                   |
| AmountUSD   | Amount converted to USD                          |
| Fee         | Processing fee                                   |
| Currency    | Transaction currency                             |
| Type        | Event type (`Deposit`)                           |
| Destination | Wallet address or Binance ID used for withdrawal |
| Status      | Transaction status                               |
| Signature   | Webhook signature                                |
| ExternalID  | Merchant's external transaction ID               |
| ClientID    | Merchant client identifier                       |
| TxId        | Internal Binance Pay transaction ID              |
| BinanceID   | Binance payment identifier                       |

***

### WithdrawBinanceId

Triggered when a withdrawal is successfully sent to a Binance Pay account using Binance ID.

#### Event type

`WithdrawBinanceId`

#### Statuses

* `Success`
* `Canceled`

#### Payload

```json
{
  "Id": 123,
  "MerchantID": "0x...",
  "Date": "2025-06-16T14:30:00Z",
  "Amount": 150.75,
  "AmountUSD": 150.75,
  "Fee": 1.50,
  "Currency": "USDT",
  "Type": "WithdrawBinanceId",
  "Destination": "",
  "Status": "Success",
  "Signature": "a1b2c3d4e5f6...",
  "ExternalID": "EXT-987654",
  "ClientID": "CLIENT-001",
  "TxId": "123456789",
  "BinanceID": "987654321"
}
```

#### Description

The webhook is sent after funds are successfully transferred to the recipient's Binance account using their Binance ID.

***

### WithdrawOnchain

Triggered when a withdrawal is processed and sent to a blockchain wallet address.

#### Event type

`WithdrawOnchain`

#### Statuses

* `Success`
* `Canceled`

#### Payload

```json
{
  "Id": 123,
  "MerchantID": "0x...",
  "Date": "2025-06-16T14:30:00Z",
  "Amount": 150.75,
  "AmountUSD": 150.75,
  "Fee": 1.50,
  "Currency": "USDT",
  "Type": "WithdrawOnchain",
  "Destination": "0x38f5...90F223",
  "Status": "Success",
  "Signature": "a1b2c3d4e5f6...",
  "ExternalID": "EXT-987654",
  "ClientID": "CLIENT-001",
  "TxId": "0x5fdb...85974a"
}
```

#### Description

The webhook is sent when a withdrawal transaction is broadcast to the blockchain and reaches its final status.

***

### Signature Validation

1. To verify the authenticity of a webhook, generate a signature using the following template:

```
{ID}:{MerchantID}:{ExternalID}:{Status}:{webhookPassword}
```

2. Encrypt the resulting string using MD5 algorithm

<https://emn178.github.io/online-tools/md5.html>

3. Compare the generated hash with the value received in the `signature` field. Only process the webhook if the signatures match.


# Informational Commands

Access balance requests, coin info, and other informational commands to manage your crypto payment operations effectively and efficiently.

{% content-ref url="/pages/IIaVJ1btoJFZZKQdzrcb" %}
[Request for balances](/0xprocessing-api/informational-commands/request-for-balances)
{% endcontent-ref %}

{% content-ref url="/pages/NqdRYjm7esbcVzumWhd6" %}
[Coin info](/0xprocessing-api/informational-commands/coin-info)
{% endcontent-ref %}


# Request for balances

Learn how to request and retrieve balances from the payment gateway with ease, ensuring transparency and efficient account management.

The **GetBalances** request is a type of API request that allows merchants to retrieve their current account balances for cryptocurrencies supported by 0xProcessing. This method provides merchants with a quick and easy way to check their account balances without having to log into their 0xProcessing dashboard.

**Request**\
**Request Type: GET**

**Endpoint:**

```
https://app.0xprocessing.com/Api/GetBalances
```

**Can be integrated by merchant's technical specialists for the following purposes:**

* to identify positive balances and conduct further withdrawal using the method for withdrawal of funds in automatic or semi-automatic mode;&#x20;
* to control sufficient liquidity on merchant's balances to ensure withdrawals of the merchant customers.

The request must contain an **APIKEY header with your API key.** The key can be generated in the menu **Merchant\API\General settings**

**Reply**

**Response Type:** JSON

The response will contain a list of positive balances.

**Parameters:**

| Name     | Description | Type   |
| -------- | ----------- | ------ |
| Currency | Currency    | String |
| Amount   | Balance     | Double |


# Coin info

Retrieve essential details about supported cryptocurrencies in your gateway, empowering informed decisions for payments and conversions.

**Coin Info** is a type of API request that allows merchants to retrieve information about specific cryptocurrencies supported by 0xProcessing. This method provides merchants with comprehensive information about the cryptocurrency, including the name, time needed to complete the transaction,  min-max payment amount and  min withdrawal amount.

**Request**\
**Request Type: GET**

**Endpoint:**

```
 https://app.0xprocessing.com/Api/CoinInfo/{id}
```

**This method can be useful for merchants who want:**

* provide their clients with detailed information about the cryptocurrencies they support and the associated fees.
* can be used to ensure that merchants are using the correct parameters when processing payments and withdrawals for specific cryptocurrencies.

**Parameters:**

<table><thead><tr><th width="120">Name</th><th width="548">Description</th><th>Type</th></tr></thead><tbody><tr><td>Id</td><td>Name of currency<br><a href="https://docs.0xprocessing.com/basic/general/available-assets#crypto-currencies">List of supported currencies</a></td><td>String</td></tr></tbody></table>

**Reply**

**Response Type: JSON**

**Parameters:**

<table><thead><tr><th width="222">Name</th><th width="429">Description</th><th>Type</th></tr></thead><tbody><tr><td>Currency</td><td>Name of currency</td><td>String</td></tr><tr><td>Waiting time</td><td>Time needed to complete the transaction (in minutes).<br>This parameter relates to deposit methods: <a href="/pages/AaQNZbJ5yNoGrakEHDKT">Payment form with fixed amount</a>, <a href="/pages/zj2TOQScSzZC3bQ7ZXsI">Payment without fixed amount</a></td><td>Integer</td></tr><tr><td>Min</td><td>Minimum payment amount, useful only for payment without a fixed amount</td><td>Double</td></tr><tr><td>Max</td><td>Maximum payment amount</td><td>Double</td></tr><tr><td>Active</td><td>Indicates whether the currency is enabled or disabled in your account</td><td>Boolean</td></tr><tr><td>MinimumWithdrawFee</td><td>Current minimum withdrawal amount</td><td>Double</td></tr><tr><td>ProcessingFee</td><td>Processing commission for payments<br>To get this parameter, you need to send header APIKEY with your API key</td><td>Double</td></tr><tr><td>NetworkFee</td><td>Network commission for transaction<br>To get this parameter, you need to send header APIKEY with your API key</td><td></td></tr><tr><td>contractAddress</td><td>Address of the token contract, avalible only for ERC20, BEP20, Polygon, AVAXC, ARB1 tokens </td><td></td></tr></tbody></table>

**Example response JSON:**

```javascript
                        {
                        "Currency": "USDT",
                        "WaitingTime": 60,
                        "Max": 1000000.0,
                        "Min": 10.0,
                        "Active": true,
                        "MinimumWithdrawFee" : 10.0,
                        "ProcessingFee" : 0.1,
                        "NetworkFee" : 1.80
                        "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7"
                        }
```

#### Coins

{% hint style="info" %}
To get a list of all available cryptocurrencies and information on them with a one request, you can use the **Coins** method
{% endhint %}

**Request**\
**Request Type: GET**

**Endpoint:**

```
https://app.0xprocessing.com/Api/Coins
```

The request must contain an **APIKEY header with your API key**. The key can be generated in the menu **Merchant\API\General settings**

**Response**

The response will be similar to the CoinInfo method, but in this case you will get information on all available currencies in the response


# Crypto or Fiat Equivalent

Convert between fiat currencies and cryptocurrencies seamlessly, enabling flexible and efficient financial operations with our payment gateway.

{% content-ref url="/pages/T4FKhQbYxbP6p53BsnKN" %}
[Fiat currency conversion](/0xprocessing-api/crypto-or-fiat-equivalent/fiat-currency-conversion)
{% endcontent-ref %}

{% content-ref url="/pages/sBnfhtUDZfLtPmhE9Q7T" %}
[Conversion of fiat currencies into cryptocurrency](/0xprocessing-api/crypto-or-fiat-equivalent/conversion-of-fiat-currencies-into-cryptocurrency)
{% endcontent-ref %}

{% content-ref url="/pages/5O9yFWYw2VTnDieM87rl" %}
[Conversion of cryptocurrencies into fiat currencies](/0xprocessing-api/crypto-or-fiat-equivalent/conversion-of-cryptocurrencies-into-fiat-currencies)
{% endcontent-ref %}

{% content-ref url="/pages/7RIIt6XW4jpkRSAkIiyu" %}
[List of supported fiat currencies for conversion](/0xprocessing-api/crypto-or-fiat-equivalent/list-of-supported-fiat-currencies-for-conversion)
{% endcontent-ref %}


# Fiat currency conversion

Implement fiat currency conversion in your storefront with 0xProcessing's API. Display accurate balances when clients deposit in various fiat currencies.​

Intended to display the equivalent currencies in the storefront interface. For example, if you deposit in cryptocurrency, your balance will be displayed in one of fiat currencies.

**Request**\
**Request Type: GET**

**Endpoint:**

```
https://app.0xprocessing.com/Api/Convert
```

**Parameters:**

<table><thead><tr><th width="143">Name</th><th width="529">Description</th><th>Type</th></tr></thead><tbody><tr><td>InCurrency</td><td><p>Source currency</p><p>List of supported currencies : AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYN, BYR, BZD, CAD, CDF, CHF, CLF, CLP, CNY, CNH, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRU, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLE, SLL, SOS, SRD, STD, STN, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VES, VND, VUV, WST, XAF, XAG, XAU, XCD, XCG, XDR, XOF, XPF, YER, ZAR, ZMK, ZMW, ZWL</p></td><td>String</td></tr><tr><td>OutCurrency</td><td><p>Currency in which you want to convert the amount</p><p>List of supported currencies: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYN, BYR, BZD, CAD, CDF, CHF, CLF, CLP, CNY, CNH, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRU, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLE, SLL, SOS, SRD, STD, STN, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VES, VND, VUV, WST, XAF, XAG, XAU, XCD, XCG, XDR, XOF, XPF, YER, ZAR, ZMK, ZMW, ZWL</p></td><td>String</td></tr><tr><td>InAmount</td><td>Amount in source currency</td><td>Double</td></tr></tbody></table>

**Reply**

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="154">Name</th><th width="304">Description</th><th>Type</th></tr></thead><tbody><tr><td>Result</td><td>Amount in OutCurrency</td><td>Double</td></tr></tbody></table>

{% hint style="info" %}
The rate limit is 500 ms/req, if you want to remove it, please contact support
{% endhint %}


# Conversion of fiat currencies into cryptocurrency

Optimize your payment interface by displaying required cryptocurrency amounts for desired fiat balances using 0xProcessing's conversion API.​

Intended to display the equivalent currencies in the storefront interface. For example, if you need to show the client how much cryptocurrency to send in payment form to get a certain amount of fiat.

**Request**\
**Request Type: GET**

**Endpoint:**

```
https://app.0xprocessing.com/Api/ConvertToCrypto
```

**Parameters:**

<table><thead><tr><th width="142">Name</th><th width="523">Description</th><th>Type</th></tr></thead><tbody><tr><td>InCurrency</td><td><p>Source currency</p><p>List of supported currencies : AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYN, BYR, BZD, CAD, CDF, CHF, CLF, CLP, CNY, CNH, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRU, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLE, SLL, SOS, SRD, STD, STN, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VES, VND, VUV, WST, XAF, XAG, XAU, XCD, XCG, XDR, XOF, XPF, YER, ZAR, ZMK, ZMW, ZWL</p></td><td>String</td></tr><tr><td>OutCurrency</td><td><p>Cryptocurrency in which you want to convert the amount</p><p><a href="https://docs.0xprocessing.com/basic/general/available-assets#crypto-currencies">List of supported currencies</a></p></td><td>String</td></tr><tr><td>InAmount</td><td>Amount in source currency</td><td>Double</td></tr></tbody></table>

**Reply**

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="154">Name</th><th width="304">Description</th><th>Type</th></tr></thead><tbody><tr><td>Result</td><td>Amount in OutCurrency</td><td>Double</td></tr></tbody></table>

{% hint style="info" %}
The rate limit is 500 ms/req, if you want to remove it, please contact support
{% endhint %}


# Conversion of cryptocurrencies into fiat currencies

Use 0xProcessing's API to convert cryptocurrencies to fiat currencies. Display accurate fiat equivalents for crypto deposits in your storefront interface.​

Intended to display the equivalent currencies in the storefront interface. For example, if you need to show a client how much fiat he will get on his balance when he deposits a certain amount of cryptocurrency.

**Request**\
**Request Type: GET**

**Endpoint:**

```
https://app.0xprocessing.com/Api/ConvertCryptoToFiat
```

**Parameters:**

<table><thead><tr><th width="133">Name</th><th width="542">Description</th><th>Type</th></tr></thead><tbody><tr><td>InCurrency</td><td><p>Source Cryptocurrency</p><p><a href="https://docs.0xprocessing.com/basic/general/available-assets#crypto-currencies">List of supported currencies</a></p></td><td>String</td></tr><tr><td>OutCurrency</td><td><p>Currency in which you want to convert the amount</p><p>List of supported currencies: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYN, BYR, BZD, CAD, CDF, CHF, CLF, CLP, CNY, CNH, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRU, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLE, SLL, SOS, SRD, STD, STN, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VES, VND, VUV, WST, XAF, XAG, XAU, XCD, XCG, XDR, XOF, XPF, YER, ZAR, ZMK, ZMW, ZWL</p></td><td>String</td></tr><tr><td>InAmount</td><td>Amount in source currency</td><td>Double</td></tr></tbody></table>

**Reply**

**Response Type:** JSON

**Parameters:**

<table><thead><tr><th width="154">Name</th><th width="304">Description</th><th>Type</th></tr></thead><tbody><tr><td>Result</td><td>Amount in OutCurrency</td><td>Double</td></tr></tbody></table>

{% hint style="info" %}
The rate limit is 500 ms/req, if you want to remove it, please contact support
{% endhint %}


# List of supported fiat currencies for conversion

Explore the list of all fiat currencies whose rates are supported in our crypto gateway, ensuring convenience and broad compatibility for users.

With this method you can get a list of supported fiat currencies for conversion.

**Request**\
**Request Type: GET**

**Endpoint:**

```
https://app.0xprocessing.com/Api/SupportedCurrencies
```

**Reply**

**Response Type:** JSON

**The response to the request will be a list of supported fiat currencies for conversion.**

> List of supported currencies: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYN, BYR, BZD, CAD, CDF, CHF, CLF, CLP, CNY, CNH, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRU, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLE, SLL, SOS, SRD, STD, STN, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VES, VND, VUV, WST, XAF, XAG, XAU, XCD, XCG, XDR, XOF, XPF, YER, ZAR, ZMK, ZMW, ZWL

{% hint style="info" %}
The rate limit is 500 ms/req, if you want to remove it, please contact support
{% endhint %}


# Errors

Troubleshoot common errors in crypto payment gateway integrations, with clear solutions to ensure smooth and uninterrupted operations.

**IncorrectModel -** Incorrect request model (also occurs if an incorrect Merchant ID is passed)

**MerchantIdRequired -** Merchant ID not specified

**Incorrect amount** - The request doesn't contain the amount or contains an error

**404** - The resource is not available, check your internet connection and if the endpoint is correct

**429 Too many requests** - exceeded number of requests from the same IP address or user within a certain period of time

**UnsupportedCurrency** - Unsupported currency

**InvalidUrl** - URL is specified incorrectly or there is no http

**ActivationRequired** - Merchant activation required

**EmailRequired** - Email required

**InvalidEmail** - Invalid email

**InvalidBillingIdLength** - Billing ID is too long, no more than 100 characters

**InvalidClientIdLength** - Client ID is too long, no more than 100 characters

**UnavailableCoin** - The coin is unavailable for payment

**ClientBlocked** - This client is blocked on 0xProcessing

**InsufficientBalance** - There’s no liquidity to withdraw in this currency

**InvalidDT** - Invalid destination tag

**InvalidAddress** - Invalid wallet address

**InsufficientBalanceForPayFee** - Insufficient balance to pay for the commission

**ExternalIdIsAlreadyUse** - This External ID is already used for withdrawal

**InvalidAgentId** - Invalid Agent ID

**InvalidClientId** - Invalid Client ID

**WalletIsAlreadyExist** - This wallet already exists


# Introduction

Explore how Web3 enhances security, decentralization, and efficiency in crypto payments, empowering modern businesses with cutting-edge technology.

With this tool a merchant can accept payments through a smart contract using liquidity pools. Smart contract for merchant creates 0xProcessing.&#x20;

Web3 processing allows clients to pay with Web3 wallets in any of the available iterations: either with a widget on the website or a mobile wallet.&#x20;

In this case, the size of the liquidity pool, the number of transactions and their volume, as well as any other necessary information that you would like to broadcast, can be available to users in real time through the blockchain browser or frontend of your website.&#x20;

In addition, the functionality of Web3 processing allows you to set up automatic payouts to your employees' Web3 wallets.

{% hint style="success" %}
**Before you start integrating the method, leave a support request to activate the appropriate functionality. This deposit method supports BNB chains.**
{% endhint %}

First, you need to contact technical support to connect your merchant to this feature. After receiving an answer from technical support about readiness, you can start the integration.

### **API endpoint: <https://web30.0xprocessing.com/>**

**Check** [**Web3 pool API for more details**](/web3-processing-api/web3-pool-api)

To authorize in the API you need to generate a token in your personal account under **"Settings - Merchant Management - Web3 API Token"**.

Requests must contain the APIKEY header with your API key.

### **The process of adding tokens to the whitelist**

In order for the liquidity pool to accept the tokens you want, you must add them to the whitelist of the smart contract.

First, you need to select from the available tokens the ones you need to work with.

You can see the list of supported tokens in the method **Info/SupportedTokens**.

You can add tokens in the method **ContractSettings/AddTokenToWhitelist**.

All methods of interaction with the contract return the id of the request, the status of which can be viewed in the method **Queue/Status/{requestId}**

After executing the request, be sure to verify that the request has been successfully executed.

### Depositing tokens into the pool by users

To deposit a token into the pool, you must create a "Deposit" button in the user environment.

**Example:**\
**token\_contract\_address** – token contract address (can be obtained from the method Info/SupportedTokens)\
**pool\_contract\_address** – address of the pool contract (can be obtained from the method Info/Contract)

**HTML:**

```html
<button id="0xWeb3PoolConnectButton">Connect MetaMask</button>
<div id="0xWeb3PoolDepositSection" style="display: none">
<input type="number" min="0" step="any" id="0xWeb3PoolDepositInput" placeholder="Amount" />
<button data-token="{token_contract_address}" data-pool="{pool_contract_address}" id="0xWeb3PoolDepositButton">Deposit</button>
</div>

```

**JS:**

```javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/web3/1.7.0-rc.0/web3.min.js"></script>
<script>
//Connect Metamask
    window.addEventListener('load',
    async () => {
    if (window.ethereum) {
    window.web3 = new window.Web3(window.ethereum);
    initConnectButton();
    } else if (window.web3) {
    window.web3 = new Web3(window.web3.currentProvider);
    initConnectButton();
    }
    });

    //Initializing the connection button
    const initConnectButton = async () => {
                                web3.eth.getAccounts(function(err, accounts) {
                                    if (err != null) {
                                        document.getElementById('0xWeb3PoolConnectButton').style.display = 'none';
                                    }
                                });

                                document.getElementById('0xWeb3PoolConnectButton').addEventListener('click',
                                    async () => {
                                        if (window.ethereum) {
                                            try {
                                                await window.ethereum.request({ method: 'eth_requestAccounts' });
                                                initPayButton();
                                            } catch (err) {
                                                console.log('User denied access', err);
                                            }
                                        } else if (window.web3) {
                                            window.web3 = new Web3(window.web3.currentProvider);
                                            initPayButton();
                                        }
                                    });
                            }

                            //Initialization of the payment button
                            const initPayButton = () => {
                                document.getElementById('0xWeb3PoolConnectButton').style.display = 'none';
                                document.getElementById('0xWeb3PoolDepositSection').style.display = 'block';

                                document.getElementById('0xWeb3PoolDepositButton').addEventListener('click',
                                    async () => {
                                        var accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
                                        web3.eth.defaultAccount = accounts[0];

                                        const contractAbi = JSON.parse('[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]');

                                        //Token contract address
                                        var tokenAddress = document.getElementById('0xWeb3PoolDepositButton').dataset.token;
                                        //Obtaining the object of the contract
                                        const contract = new web3.eth.Contract(contractAbi, tokenAddress);
                                        //Address of the pool for the deposit
                                        var to = document.getElementById('0xWeb3PoolDepositButton').dataset.pool;
                                        //Deposit amount
                                        var amount = document.getElementById('0xWeb3PoolDepositInput').value;
                                        const decimals = web3.utils.toBN(18);
                                        var value = amount * Math.pow(10, decimals);

                                        //Calling the transfer contract method
                                        contract.methods.transfer(to, web3.utils.toHex(value)).send({ from: accounts[0] },
                                            function(error, result) {
                                                if (!error) {
                                                    //Transaction result processing
                                                    console.log(result);
                                                } else {
                                                    //Transaction error processing
                                                    console.log(error);
                                                }
                                            });
                                    });
                            }
                        </script>

```

### Webhook

All deposits are tracked by the system and you can get a callback on a user's successful deposit into the pool.

The report of the deposit is implemented by means of webhooks.

You need to configure the webhook in your Merchant’s account in the section **"Merchant\ Web3 processing\Webhook URL"**. Required https (TLS/SSL)

**WebHook password** - password required to check the signature.

**Parameters:**

<table><thead><tr><th width="158">Name</th><th width="302">Description</th><th>Type</th></tr></thead><tbody><tr><td>Id</td><td>Transaction Id</td><td>integer</td></tr><tr><td>From</td><td>Sender's address</td><td>string</td></tr><tr><td>To</td><td>Recipient's address</td><td>string</td></tr><tr><td>Amount</td><td>Amount</td><td>double</td></tr><tr><td>Currency</td><td>Currency</td><td>string</td></tr><tr><td>Hash</td><td>Transaction Hash</td><td>string</td></tr><tr><td>Type</td><td>Transaction type: claim, deposit, withdraw</td><td>string</td></tr><tr><td>Signature</td><td>Checksum, to verify the authenticity of the request</td><td>string</td></tr></tbody></table>

**Signature Check:**   &#x20;

1\. A string of the following form must be generated: **"Id":"Currency":"Hash":"From":"Password"** (Without quotation marks through a colon)

2\. Encrypt the resulting string using the MD5 algorithm

<https://emn178.github.io/online-tools/md5.html>

3\. Compare the resulting string with the one that came through Webhook

4\. If the strings match, you should return HTTP Status 200 (Required)

**Example Webhook JSON:** &#x20;

```javascript
                        {
                        "Id":19851,
                        "From":"0x000000.....",
                        "To":"0x000000.....",
                        "Amount":10.00264765,
                        "Currency":"BNB",
                        "Hash":"0x000000.....",
                        "Type": "claim",
                        "Signature":"a5510c8c3e657ffd8229813749cd20ec"
                        }

```

### Claim

To allow a user to claim tokens from the pool (withdrawal), it is necessary to reserve an amount for that user in the contract, as well as provide the user with a Claim button.

To reserve the required amount for a certain user, you need to call the method [**Claim/AddUserClaimable**](/web3-processing-api/web3-pool-api#claim).

During the reservation, the commission of the pool will be withdrawn.You can find this information on the form [**Info/Contract**](/web3-processing-api/web3-pool-api#info).

&#x20;

After successfully reserving an amount, the user can "claim" it from the contract via claim.

In order for the user to pick up his tokens, it is necessary to call the method [**Claim**](/web3-processing-api/web3-pool-api#claim) of the contract.

**Example button:**\
**HTML:**

```html
                        <div id="0xWeb3PoolClaimSection" style="display: none">
                            <p>Available: <span id="0xWeb3PoolClaimAvailable"></span></p>
                            <input type="number" min="0" step="any" id="0xWeb3PoolClaimInput" placeholder="Amount" />
                            <button data-token="{token_contract_address}" data-pool="{pool_contract_address}" id="0xWeb3PoolClaimButton">Claim</button>
                        </div>

```

**JS:**

```javascript
                        <script src="https://cdnjs.cloudflare.com/ajax/libs/web3/1.7.0-rc.0/web3.min.js"></script>
                        <script>
                            window.addEventListener('load',
                                // Connecting Metamask
                                async () => {
                                    if (window.ethereum) {
                                        window.web3 = new window.Web3(window.ethereum);
                                        initConnectButton();
                                    } else if (window.web3) {
                                        window.web3 = new Web3(window.web3.currentProvider);
                                        initConnectButton();
                                    }
                                });


                            const initConnectButton = async () => {
                                web3.eth.getAccounts(function(err, accounts) {
                                    if (err != null) {
                                        document.getElementById('0xWeb3PoolConnectButton').style.display = 'none';
                                    }
                                });

                                document.getElementById('0xWeb3PoolConnectButton').addEventListener('click',
                                    async () => {
                                        if (window.ethereum) {
                                            try {
                                                await window.ethereum.request({ method: 'eth_requestAccounts' });
                                                    initClaimButton();
                                            } catch (err) {
                                                console.log('User denied access', err);
                                            }
                                        } else if (window.web3) {
                                            window.web3 = new Web3(window.web3.currentProvider);
                                                initClaimButton();
                                        }
                                    });
                            }

                            const initClaimButton = async () => {
                                document.getElementById('0xWeb3PoolConnectButton').style.display = 'none';
                                document.getElementById('0xWeb3PoolClaimSection').style.display = 'block';

                                const contractAbi = JSON.parse('[{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"inputs":[{"internalType":"address","name":"recepient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addUserClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"feePercentChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecepient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recepient","type":"address"}],"name":"feeRecepientChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"whitelistERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recepient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawalAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"}]');

                                var accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
                                web3.eth.defaultAccount = accounts[0];

                                var tokenAddress =  document.getElementById('0xWeb3PoolClaimButton').dataset.token;
                                var poolAddress = document.getElementById('0xWeb3PoolClaimButton').dataset.pool;
                                var contract = new web3.eth.Contract(contractAbi, poolAddress);
                                var decimals = web3.utils.toBN(18);

                                contract.methods.claimable(accounts[0], tokenAddress).call(function(error, result) {
                                    document.getElementById('0xWeb3PoolClaimAvailable').innerHTML = result / Math.pow(10, decimals);
                                });

                                document.getElementById('0xWeb3PoolClaimButton').addEventListener('click',
                                    async () => {
                                        var amount = document.getElementById('0xWeb3PoolClaimInput').value;
                                        var value = amount * Math.pow(10, decimals);

                                        console.log(value);

                                        contract.methods.claim(web3.utils.toHex(value), tokenAddress).send({ from: accounts[0] },
                                            function (error, result) {
                                                if (!error) {
                                                    console.log(result);
                                                } else {
                                                    console.log(error);
                                                }
                                            });
                                    });
                            }
                        </script>

```

{% hint style="success" %}
The result of the claim procedure, that is, when the user received tokens from the contract to his wallet can be received in the same way as a deposit.
{% endhint %}

### **Withdraw**

Withdraw the balance of tokens from the contract (except those reserved for users).

Withdrawal of free tokens is performed using the method [**/Withdraw**](/web3-processing-api/web3-pool-api#withdraw)

The number of available free tokens can be obtained by the method [**/Contract/Info**](/web3-processing-api/web3-pool-api#info)


# Web3 pool API

Learn to leverage our Web3 Pool API for secure and decentralized crypto payment solutions, streamlining your operations with advanced tools.

### Claim

## Add a balance to the specified wallet

<mark style="color:green;">`POST`</mark> `/Claim/AddUserClaimable`&#x20;

#### Request Body

| Name                                          | Type            | Description         |
| --------------------------------------------- | --------------- | ------------------- |
| userAddress<mark style="color:red;">\*</mark> | String          | User Wallet         |
| token<mark style="color:red;">\*</mark>       | String          | Withdrawal currency |
| amount<mark style="color:red;">\*</mark>      | Number($double) | Withdrawal amount   |

{% tabs %}
{% tab title="200: OK Success" %}

```json
{
  "requestId": 0
}
```

{% endtab %}

{% tab title="400: Bad Request Bad Request" %}

```json
{
  "errors": {
    "additionalProp1": [
      "string"
    ],
    "additionalProp2": [
      "string"
    ],
    "additionalProp3": [
      "string"
    ]
  }
}
```

{% endtab %}
{% endtabs %}

## Reduce balance to the specified purse

<mark style="color:green;">`POST`</mark> `/Claim/DecreaseUserClaimable`

#### Request Body

| Name                                          | Type            | Description         |
| --------------------------------------------- | --------------- | ------------------- |
| userAddress<mark style="color:red;">\*</mark> | String          | User Wallet         |
| token<mark style="color:red;">\*</mark>       | String          | Withdrawal currency |
| amount<mark style="color:red;">\*</mark>      | Number($double) | Withdrawal amount   |

{% tabs %}
{% tab title="200: OK Success" %}

```json
{
  "requestId": 0
}
```

{% endtab %}

{% tab title="400: Bad Request Bad Request" %}

```json
{
  "errors": {
    "additionalProp1": [
      "string"
    ],
    "additionalProp2": [
      "string"
    ],
    "additionalProp3": [
      "string"
    ]
  }
}
```

{% endtab %}
{% endtabs %}

### ContractSettings

## Add a token to the contract whitelist

<mark style="color:green;">`POST`</mark> `/ContractSettings/AddTokenToWhitelist`

#### Request Body

| Name                                    | Type   | Description                  |
| --------------------------------------- | ------ | ---------------------------- |
| token<mark style="color:red;">\*</mark> | String | Currency to add to whitelist |

{% tabs %}
{% tab title="200: OK Success" %}

```json
{
  "requestId": 0
}
```

{% endtab %}

{% tab title="400: Bad Request Bad Request" %}

```json
{
  "errors": {
    "additionalProp1": [
      "string"
    ],
    "additionalProp2": [
      "string"
    ],
    "additionalProp3": [
      "string"
    ]
  }
}
```

{% endtab %}
{% endtabs %}

### Info

## Get information about the contract

<mark style="color:blue;">`GET`</mark> `/Info/Contract`

{% tabs %}
{% tab title="200: OK Success" %}

```json
{
  "address": "string",
  "feePercent": 0,
  "whiteListedTokens": [
    "string"
  ],
  "balances": [
    {
      "currency": "string",
      "total": 0,
      "reserved": 0,
      "free": 0,
      "fee": 0
    }
  ]
}
```

{% endtab %}

{% tab title="400: Bad Request Bad Request" %}

```json
{
  "errors": {
    "additionalProp1": [
      "string"
    ],
    "additionalProp2": [
      "string"
    ],
    "additionalProp3": [
      "string"
    ]
  }
}
```

{% endtab %}
{% endtabs %}

## List of supported tokens

<mark style="color:blue;">`GET`</mark> `/Info/SupportedTokens`

{% tabs %}
{% tab title="200: OK Success" %}

```json
[
  {
    "name": "string",
    "contract": "string"
  }
]
```

{% endtab %}
{% endtabs %}

### Queue

## Get request status

<mark style="color:blue;">`GET`</mark> `/Queue/Status/{queueId}`

#### Path Parameters

| Name                                      | Type    | Description |
| ----------------------------------------- | ------- | ----------- |
| queueId<mark style="color:red;">\*</mark> | integer | queueId     |

{% tabs %}
{% tab title="200: OK Success" %}

```json
{
  "error": "string",
  "status": "string"
}
```

{% endtab %}

{% tab title="400: Bad Request Bad Request" %}

```json
{
  "errors": {
    "additionalProp1": [
      "string"
    ],
    "additionalProp2": [
      "string"
    ],
    "additionalProp3": [
      "string"
    ]
  }
}
```

{% endtab %}
{% endtabs %}

### Withdraw

## Withdrawing available funds

<mark style="color:green;">`POST`</mark> `/Withdraw`

#### Request Body

| Name                                     | Type            | Description         |
| ---------------------------------------- | --------------- | ------------------- |
| wallet<mark style="color:red;">\*</mark> | string          | Recipient's wallet  |
| token<mark style="color:red;">\*</mark>  | string          | Withdrawal currency |
| amount<mark style="color:red;">\*</mark> | number($double) | Withdrawal amount   |

{% tabs %}
{% tab title="200: OK Success" %}

```json
{
  "requestId": 0
}
```

{% endtab %}

{% tab title="400: Bad Request Bad Request" %}

```json
{
  "errors": {
    "additionalProp1": [
      "string"
    ],
    "additionalProp2": [
      "string"
    ],
    "additionalProp3": [
      "string"
    ]
  }
}
```

{% endtab %}
{% endtabs %}

## Schemas

<details>

<summary><strong>AddTokenToWhitelistModel</strong></summary>

```javascript
{
userAddress*	string
User Wallet

token*	string
Withdrawal currency

amount*	number($double)
Withdrawal amount

}
```

</details>

<details>

<summary>AddUserClaimbleModel</summary>

```javascript
{
userAddress*	string
User Wallet

token*	string
Withdrawal currency

amount*	number($double)
Withdrawal amount

}
```

</details>

<details>

<summary>ApiBadRequestResponse</summary>

```javascript
{
errors	{...}
nullable: true
}
```

</details>

<details>

<summary>Bep20Contract</summary>

```javascript
{
name	string
nullable: true
contract	string
nullable: true
}
```

</details>

<details>

<summary>ContractBalanceModel</summary>

```javascript
{
currency	string
nullable: true
Currency

total	number($double)
Total contract balance

reserved	number($double)
Reserved for users

free	number($double)
Available balance for withdrawal or reservation

fee	number($double)
Commission from free balance

}
```

</details>

<details>

<summary>ContractInfoModel</summary>

```javascript
{
address	string
nullable: true
Contract Address

feePercent	number($double)
Commission

whiteListedTokens	[...]
balances	[...]
}
```

</details>

<details>

<summary>QueryResult</summary>

```javascript
{
requestId	integer($int32)
Request Id

}
```

</details>

<details>

<summary>QueueResult</summary>

```javascript
{
error	string
nullable: true
Error description

status	string
nullable: true
Request Status

}
```

</details>

<details>

<summary>WithdrawModel</summary>

```javascript
{
wallet*	string
Recipient's wallet

token*	string
Withdrawal currency

amount*	number($double)
minimum: 0
Withdrawal amount

}
```

</details>


# Quick start

Start using our crypto payment gateway with a comprehensive guide to registration, API setup, webhooks, and other essential features.

**Here are the articles in this section:**

{% content-ref url="/pages/gakXi9OP8VHFGwtOResD" %}
[Account registration](/quick-start/account-registration)
{% endcontent-ref %}

{% content-ref url="/pages/WsMHPUMpZmBdVcdcLTH7" %}
[API set up](/quick-start/api-set-up)
{% endcontent-ref %}

{% content-ref url="/pages/m3zeShTcg22RhSKfIeaq" %}
[Setting up Webhooks](/quick-start/setting-up-webhooks)
{% endcontent-ref %}

{% content-ref url="/pages/Eqsgm6Vzcuy8Rtmo5GEH" %}
[Payment confirmation](/quick-start/payment-confirmation)
{% endcontent-ref %}

{% content-ref url="/pages/RGJHeTzISiBkVGfVEMKR" %}
[Managing withdrawals](/quick-start/managing-withdrawals)
{% endcontent-ref %}

{% content-ref url="/pages/H8SUskx7meqys2jZWZKO" %}
[Create a Manager role](/quick-start/create-a-manager-role)
{% endcontent-ref %}

{% content-ref url="/pages/2dveBFQD7kMh6dZiG3IX" %}
[Currency management](/quick-start/currency-management)
{% endcontent-ref %}

{% content-ref url="/pages/GR2pSW7oSJ2ixhyTLoiT" %}
[VRCS setup](/quick-start/vrcs-setup)
{% endcontent-ref %}

{% content-ref url="/pages/OTjeuBRjsbyy0FO1Jr2u" %}
[Balance management](/quick-start/balance-management)
{% endcontent-ref %}

{% content-ref url="/pages/irlmswhTwaLUDVlVML7T" %}
[Invoices](/quick-start/invoices)
{% endcontent-ref %}

{% content-ref url="/pages/BvHZ50mBrJXJVFvFszjE" %}
[Exchange](/quick-start/exchange)
{% endcontent-ref %}

{% content-ref url="/pages/T87zUOiriBsurIOTgmpR" %}
[Reports](/quick-start/reports)
{% endcontent-ref %}

{% content-ref url="/pages/dzEgKR71FHNK7N8ILeAM" %}
[Transactions and address tracking](/quick-start/transactions-and-address-tracking)
{% endcontent-ref %}

{% content-ref url="/pages/e0GdEIP9Oo8wdc7gMK4G" %}
[Notifications](/quick-start/notifications)
{% endcontent-ref %}

{% content-ref url="/pages/tN415ps5aneHcnWK156p" %}
[Account security](/quick-start/account-security)
{% endcontent-ref %}

{% content-ref url="/pages/YgimjJDXJnOzUH7XE4dO" %}
[Match Crypto Wallet Addresses](/quick-start/match-crypto-wallet-addresses)
{% endcontent-ref %}


# Account registration

A step-by-step guide to account registration for seamless integration with our crypto payment gateway, ensuring smooth onboarding and setup.

1. You need to fill out an form on our [website](https://0xprocessing.com/) at the end of the page

<div><figure><img src="/files/CJ815xSa0A3zh02ePzIn" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="/files/zu24kTnGfkXRdAwH7PSK" alt="" width="563"><figcaption></figcaption></figure></div>

2. You will be contacted by our manager to confirm the information on your application
3. After onboarding, you will receive the login details to your email account
4. Log in using your email and password. Now the status of your account is "active" and you can already start integration [**0xProcessing API**](/0xprocessing-api/obtaining-api-keys)


# API set up

Learn how to configure the API for our crypto payment gateway, enabling smooth integration and full utilization of its features for your business.

1. Navigate to the **Settings menu.**
2. Open the integrated method section API
3. Find the section called **“API key”** and click **"Generate key"**.

<figure><img src="/files/P0b3LjAsxf08jxbeul6g" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
**Please copy this key and save it somewhere safe. For security reasons, we cannot show it to you again. If you generate another key, the old one will no longer work.**
{% endhint %}

Use this API key for authorization when integrating one of their payment methods and withdrawals from the Merchant balance.&#x20;

API documentation: [0xProcessing API](/0xprocessing-api/obtaining-api-keys)


# Setting up Webhooks

Follow step-by-step instructions to set up webhooks for crypto payments, ensuring timely notifications and smooth transaction processes.

**To integrate a webhook (callback) for payments and withdrawals you need to follow these steps:**

1. Navigate to the Navigate to the **Settings \ API** section.
2. In **"Webhooks settings"** enter the URL in the **"Webhook URL"** field for a callback on the payment status or in a separate field for withdrawals. Required https (TLS/SSL)
3. In the **"Webhook password"** field enter the password, if you have one.
4. Click on **"Save"** to save your webhook settings.

Merchant can setup Webhook link in **Settings \ API** **menu**, and instantly start receiving data about incoming payments and withdrawals in JSON such as: amount, status, timestamp, etc.\
\
Every time new crypto payment gets deposited or funds have been withdrawn Merchant will receive webhook with transaction details:

* status
* currency
* amount
* USD amount
* blockchain transaction's hash
* address
* Merchants Client ID
* Merchants ID
* Signature
* ...and so on

{% hint style="warning" %}

#### Attention

Merchant should validate webhook's signature and values of known parameters in order to avoid fraudulent activity.
{% endhint %}

{% hint style="info" %}
After successful validation of webhook, Merchant should respond with **HTTP Code: 200 OK.** No additional parameters are required in the response body.&#x20;

Our server expects a response to the webhook within a **3-second** timeout period. If the response is not received within these 3 seconds, the system considers the delivery failed.

In case if Merchant will not validate callback System repeats it 31 times with an interval of 15 seconds. If Webhook still fails to be delivered, System sends notification to the Merchant's email indicating a problem with Webhook URL.
{% endhint %}

## Webhook's test

The following integration method is used to test webhooks for payments.

{% content-ref url="/pages/AaQNZbJ5yNoGrakEHDKT" %}
[Payment form with fixed amount](/0xprocessing-api/deposits/payment-form-with-fixed-amount)
{% endcontent-ref %}

To emulate test payments, the parameter Test=true must be transferred.

Link to the payment form for the test payment opens with buttons to emulate Successful Payment, Canceled Payment and Insufficient Payment. Test payment link must be opened in the same browser as the logged in merchant account.

<figure><img src="/files/FNTS4guPdFedKMwrYFYj" alt=""><figcaption></figcaption></figure>

In the case of successful validation of the callback, your system will respond with **HTTP Code: 200 OK.** No additional parameters are required in the response body.

To resend a non-test callback, you can use the menu **Transactions**

In the field of the transaction you need to press the button "Show webhooks"<br>

<figure><img src="/files/0TIvKKo74HMlWDARlZE8" alt=""><figcaption></figcaption></figure>

And then "Resend"<br>

<figure><img src="/files/Y9avQrfvoTPi9WSe51DY" alt="" width="304"><figcaption></figcaption></figure>

Learn more about integrating callbacks in API documentation: [0xProcessing API](/0xprocessing-api/obtaining-api-keys)


# Payment confirmation

A comprehensive guide to verifying and confirming crypto payment transactions securely, ensuring reliability and trust in your operations.

**When you integrate a payment method with a fixed amount**&#x20;

It is a type of payment where the client receives a payment form with a fixed amount. Payment of the exact amount specified in the form is considered to be successful. In case of underpayment the payment will be displayed as insufficient and must be confirmd by merchant.

* Merchants or [merchant's manager](/quick-start/create-a-manager-role) can confirm payments with insufficient status in the menu **Confirmations**

<figure><img src="/files/eTBvVs7vFJfs4SwfTFPJ" alt=""><figcaption></figcaption></figure>

* To automatically confirm insufficient payments, you need to enable the corresponding function in the Confirmation settings menu&#x20;

<figure><img src="/files/mxTK2bYaobZWJbkzE6q4" alt=""><figcaption></figcaption></figure>

With this feature enabled, all insufficient payments involving more than the minimum amount will be processed as successful after closing the payment window for 30-50 minutes.&#x20;

The merchant will receive the amount actually paid by the client reduced by a network fee and a processing fee.


# Managing withdrawals

Learn how to handle and manage withdrawals effectively, optimizing the crypto payment experience for your business and its customers.

1. Set the maximum amount for withdrawal of funds by the client without the approval of the merchant or [merchant's manager](/quick-start/create-a-manager-role)

**Menu Confirmations\Settings**

<figure><img src="/files/vilVQBhFRLLSxFSnkHA5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If it's set to "0", merchant or merchant's managers should confirm all client's withdrawals. If you want to accept any amount, you can set any big number for this limit
{% endhint %}

2. If you withdraw via API endpoint and amount is higher than max limit in merchant's settings (Settings\API) you need to confirm it or reject it.&#x20;

Merchants can confirm or reject withdrawals above the limit in the **Confirmations\Withdrawal** or with the help of the withdrawal [manager account](/quick-start/create-a-manager-role).<br>

<figure><img src="/files/NeW2TGDjS4Ey9fkjVdmJ" alt=""><figcaption></figcaption></figure>


# Create a Manager role

Set up a Manager role for secure and efficient crypto payment operations, enabling effective user management in our payment gateway.

Manager has functions that you can optionally enable for his account

* confirm insufficient payments&#x20;
* confirm withdrawals over the limit
* reject withdrawals over the limit
* view dashboard and top-up liquidity
* create invoices
* create exchange orders
* view static wallets
* edit static wallets
* liquidity withdrawals
* top-up liqudity
* data viewing and unloading mode (if all functions are disabled)

In section **Settings \ Managers** you can create manager accounts.&#x20;

{% hint style="info" %}
Managers are disabled by default.&#x20;

If you need to create a manager, please contact our support.
{% endhint %}

<figure><img src="/files/30dDNkQrOF4UMQdRe7Bu" alt=""><figcaption></figcaption></figure>

* The manager will receive an email notification and a password to access his personal account
* The manager logged into his personal account using this link: [https://0xprocessing.com](https://0xprocessing.com/auth/login/)


# Currency management

Configure and manage cryptocurrencies supported by the gateway, offering flexibility and enhanced control over your payment operations.

**"Activity"** section allows you to enable/disable the availability of receiving currencies, if the currency is disabled, the client will not be able to make a deposit in it.

**“Switch the fee ”** section allows you to switch the network fee to the merchant side. By default, the network commission is on client's side and is included in the amount of the payment form. Processing fee is always on the side of the merchant and is deducted from each amount when it reaches the balance of the merchant.

**"Volatility control"** section allows you to [enable/disable VRCS](/quick-start/vrcs-setup) (Volatility Risk Control System), which allows you to convert incoming cryptocurrencies to stable coins of your choice.

<figure><img src="/files/VY28858MKZnJn12YFIkW" alt=""><figcaption></figcaption></figure>

Сheck the minimum deposit amount and the current network fee in this currency

<figure><img src="/files/G3zSR0PYiRZ86hgkxZY8" alt=""><figcaption></figcaption></figure>


# VRCS setup

Set up VRCS for automatic stablecoin conversions in your gateway, providing a stable and reliable solution for crypto transactions.

To avoid cryptocurrency volatility, 0xProcessing has a feature of automatic conversion to stablecoins. When a merchant's client pays for one of the currencies with VRCS feature enabled, the received funds are automatically converted into one of the stablecoins supported by 0xProcessing.

Cryptocurrencies with available VRCS function:

**BTC, DASH, DOGE, ETH, LTC, XRP, TRX, BNB, ETH (BEP20), ADA (BEP20), AVAX, POL** *(prev. MATIC)* **, ETH (ARB1), BCH, SOL**

{% hint style="info" %}
The minimum amount for conversion is 10 USD. If the amount received is less, the conversion will be completed after receipt of additional funds.
{% endhint %}

Stablecoins to which conversion takes place:

**USDT (ERC20, TRC20, BEP20)**

#### 1. Activate VRCS&#x20;

You can activate your Volatility Risk Control System through the technical support service or inside the platform by filling out the form ( menu Settings \ Currency \ Enable VRCS).

<figure><img src="/files/iHu43661PEdOz3zZsac4" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
**As long as your VRCS is not activated, you are not insured against losing money due to the volatility of cryptocurrencies.**
{% endhint %}

2. **Set VRCS parameters**

Section for setting minimum withdrawal amount to be reached in VRCS before processing to the merchant balance. **Settings \ Currency**

<figure><img src="/files/AfhHRhBMPBW6IegumtuN" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The minimum amount of conversion from VRCS balance to Merchant's balance is 100 USDT. This limit is set in the Merchant account settings and as soon as this limit is reached the funds are transferred from VRCS balance to the main balance in the selected stablecoin.
{% endhint %}

Section to select in which stablecoin to hedge selected cryptocurrencies to avoid volatility risk.

<figure><img src="/files/gDkL5x1XNckYMSBYsYab" alt=""><figcaption></figcaption></figure>

3. Switch currencies

Enable and disable the function for each currency separately.

<figure><img src="/files/Vc86bFopOR0F9rwxe311" alt=""><figcaption></figcaption></figure>

4. Deposits sent for conversion are marked with a special status: **Sent to VRCS.**

<figure><img src="/files/5yROI5Vx2lwwebIFXiBX" alt=""><figcaption></figcaption></figure>

4. The amounts in stablecoins received to your balance from conversion can be viewed in the **Transactions\VRCS** section or in full balance history **Transactions\Balance**

<figure><img src="/files/fyCW5vC7Ti5aLojpl5AH" alt=""><figcaption></figcaption></figure>


# Balance management

Easily view and manage balances in your crypto payment gateway, ensuring transparency and efficient account operations for your business.

The “Balances” tab contains info about your crypto account balances&#x20;

This is a crucial section where you can find

* Your balances are in different currencies
* Balance of funds received in VRCS, but not yet credited to the main balance
* Total balance of available funds
* All the last transactions
* Functions for withdrawal and liquidity deposit

<figure><img src="/files/XGCV9u5qcAln2qFj7iAy" alt=""><figcaption></figcaption></figure>

### **Liquidity topup**

Adding liquidity without processing fee is possible only from trusted merchant addresses. To do this, when making a deposit, the merchant or[ merchant's manager](/quick-start/create-a-manager-role) must add his wallet address to the "white list".

1. Go to the menu Dashboard and click "Add liquidity".

<figure><img src="/files/2KIIVafgdQuPnxsbbi3j" alt=""><figcaption></figcaption></figure>

2. Choose the cryptocurrency you want to add liquidity.

<figure><img src="/files/jZmVhesIW1Du0hC5uvvt" alt=""><figcaption></figcaption></figure>

3. You can make a deposit of any amount in the selected currency from your wallet to the destination wallet address specified in the field below&#x20;

For liquidity deposits in each network, you will have your own personal permanent 0xprocessing address.

<figure><img src="/files/Xin1RjsKEgaPHWafwWy0" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Received funds will be credited to the merchant's balance immediately after the transaction is confirmed by the network. If you encounter any problems, please contact the support service.
{% endhint %}

### **Withdrawal of balances**

Withdrawal is possible only in the currencies of existing balances.

fter clicking on the "Withdraw" button you should confirm the withdrawal using verification code sent to your email bound to your processing account and [2fa code](/quick-start/account-security).

The minimum withdrawal amount is the equivalent of 10 USD

![](/files/reqlLDawaNYCLjrTtzBr)![](/files/ikdejn8FmePhdfhFX7Dk)

To withdraw funds in automatic or semi-automatic mode you can use integration through API. [Withdrawal by client](/0xprocessing-api/withdrawals/withdrawal-by-client)


# Static wallets

A static wallet is a permanently assigned cryptocurrency wallet address that can be reused to receive multiple payments and track incoming transactions.

The Static Wallets feature allows users to create dedicated cryptocurrency wallet addresses for receiving payments. Each static wallet remains permanently assigned and can be reused for multiple incoming transactions, making it ideal for merchant operations and customer deposits.

<figure><img src="/files/eiSh6kcDRQuv39AQ03Hi" alt=""><figcaption></figcaption></figure>

Merchants can create and manage static wallets directly through the platform interface (Settings\Static wallets) or automatically [via API methods](https://docs.0xprocessing.com/0xprocessing-api/deposits/static-wallet). The API integration enables businesses to generate wallet addresses programmatically and seamlessly incorporate them into their payment workflows.


# Invoices

The Invoices section allows Merchants and Managers to create payment requests for customers, track their statuses, and manage existing billing documents.

### 1. Overview

Within the Invoices menu, users with appropriate permissions can:

* Generate new invoices.
* Monitor the status of past transactions.
* Edit or delete current invoices.

<figure><img src="/files/d3IhgrVB7Pw2Agkauj13" alt=""><figcaption></figcaption></figure>

### 2. Creating an Invoice

<figure><img src="/files/ZZNiglhEAYi5L9HwNUVC" alt="" width="563"><figcaption></figcaption></figure>

To create a new invoice, click the "Add new +" button. You will need to fill in the following parameters:

* **Recipient Name (From):** Automatically populated with the Merchant's company name.

{% hint style="info" %}
*Note:* The company name can be modified by the Merchant in the Settings menu. Manager roles do not have permission to change the Merchant's name.
{% endhint %}

* **Payer Name (Billed to):** The name of the client receiving the invoice.
* **Payment Details:**
  * Line Items: Name of the product or service, quantity, and unit price.
  * Total Amount: Automatically calculated based on the quantity and price of each position.
  * Item Limit: You can add up to 20 positions per invoice.
* **Currency:** Select the payment currency.

{% hint style="info" %}
*Note:* Not all 0xProcessing supported currencies are available for invoices by default. If you need a specific currency that is missing, please contact your manager to request activation.
{% endhint %}

* **Theme:** Choose between a Dark or Light theme for the payment form.

<figure><img src="/files/ybMxqU03NLpQjbMEeJU5" alt="" width="563"><figcaption></figcaption></figure>

#### Real-time Preview

As you fill in the invoice data, a live preview of the payment form is available on the right side of the desktop screen, showing exactly how the customer will see it.

<figure><img src="/files/jnetz3rCgDiX4xfGzpYU" alt=""><figcaption></figcaption></figure>

### 3. Sharing the Invoice

Once created, a unique payment link is generated.

* **Validity:** The link is active for 14 days.
* **Sending:** You can copy the link manually or use the "Send via email" feature.

<figure><img src="/files/sMlO3mOwWD1zxInKoThJ" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/x136REG5UU2J3ieBpye9" alt="" width="563"><figcaption></figcaption></figure>

* **Notification:** The recipient will receive an email from 0xProcessing containing the invoice details and a direct button to the payment page.

<figure><img src="/files/Lbis9uxLXMy5zBkZPvXQ" alt="" width="563"><figcaption></figcaption></figure>

### 4. Payment Process

The customer payment form consists of three steps:

* **Preview:** The client reviews the items and the total amount.

<div align="center"><figure><img src="/files/gmOfJaSx0wrQ5Gj0JJNJ" alt="" width="563"><figcaption></figcaption></figure></div>

* **Payment Details:** The client selects their wallet (MetaMask, WalletConnect, or manual transfer) and sees the specific destination address and amount.

<div align="center"><figure><img src="/files/7X12cbobTDuT9Z00TWlZ" alt="" width="563"><figcaption></figcaption></figure></div>

* **Status/Success:** Once the transaction is confirmed, the status updates to "Successful payment." The client can then:

  * View the transaction on the blockchain explorer.
  * Download a PDF receipt for their records.

  <div align="center"><figure><img src="/files/EUt1hWnfBI1pZJwKVChD" alt="" width="563"><figcaption></figcaption></figure></div>

<figure><img src="/files/9lw1hLdx1Kz7zTJ5Wj7K" alt="" width="563"><figcaption><p>Example receipt</p></figcaption></figure>

### 5. Managing Invoices

#### Editing

You can modify an existing invoice after it has been created. The following fields are editable:

* Total payment amount.
* Names of the recipient and sender.
* Description of the payment and individual items.

{% hint style="info" icon="info" %}
**Important:** The currency cannot be changed in an existing invoice. If you need to change the currency, use the "**Duplicate**" function. This creates a new invoice with the same items, descriptions and amounts, allowing you to select a different currency.
{% endhint %}

<figure><img src="/files/Vli3GGGtmjqx08SNiwVh" alt="" width="563"><figcaption></figcaption></figure>

#### Deletion

Invoices can only be deleted if they are in "Unpaid" or "Expired" status. Paid invoices cannot be removed from the system for accounting and transparency purposes.


# Exchange

Learn how easy it is to exchange currencies within your personal account on 0xProcessing

Here you can exchange one cryptocurrency for another at any time with minimal fees.

What it is used for:

\- Managing balance liquidity for customer withdrawals

\- Locking deposits in stablecoins

\- Managing balances to profit from cryptocurrency growth

<figure><img src="/files/9HYyl1KasRd9dTYBJLTi" alt=""><figcaption></figcaption></figure>

<br>


# Reports

Learn how to download complete reports on operations performed in 0xProcessing.

To obtain a list of transactions or balance change history, use the export button next to the table.

<figure><img src="/files/p2a7fhvIQoOvY6MJyW9s" alt=""><figcaption></figcaption></figure>

After creating the report, it can be downloaded from the **Reports** menu.

All created reports are stored in the reports table and can be downloaded again at any time.

<figure><img src="/files/uFG6f1X4GT4iBokkcFUP" alt=""><figcaption></figcaption></figure>

To obtain data on transactions or balance changes via API methods, please contact your manager for additional information.


# Transactions and address tracking

Monitor transactions and track wallet addresses efficiently, ensuring reliability and accuracy in managing your crypto payment gateway.

### Payments

Here you will find all payments created by your clients and replenishments from agents.

**Payment status:**

* **Success -** payment successfully received
* **Canceled -** payment was canceled because funds were not received before the payment window was closed
* **Pending -** waits for confirmation in the blockchain network, can take from a few seconds to several minutes
* **Insufficient -** payment received is underpaid and requires confirmation in the [Confirmations menu](/quick-start/payment-confirmation)

<figure><img src="/files/adHCXgrZYR9R8BMQ33Iy" alt=""><figcaption></figcaption></figure>

**"Show webhooks"** button - can use it to view callbacks and resend them manually.

<figure><img src="/files/BGp6IU5815aq2aAcE6t1" alt="" width="375"><figcaption></figcaption></figure>

### Withdrawals

Here you will find all the withdrawals created by your clients and by you.

**Withdrawal status:**

* **Success -** withdrawal completed successfully
* **Pending -** waits for confirmation in the blockchain network, can take from a few seconds to several minutes
* **To confirm -** withdrawal above the limit specified in the settings awaits [**confirmation**](/quick-start/payment-confirmation) by the merchant or manager
* **Rejected -**  the withdrawal is rejected by the merchant or manager
* **Confirmed -** the withdrawal is confirmed by the merchant or manager

<figure><img src="/files/MrhBmHllLIUFKhnb7Nkn" alt=""><figcaption></figcaption></figure>


# Notifications

Set up notifications to stay updated on your crypto payment activities, ensuring timely insights and efficient management of transactions.

In the "Notifications" tab, you can configure notifications to simplify the work with balances. These notifications will help to keep your business operational.

Notifications will be sent to the email or to Telegram bot.

{% hint style="info" %}
Notifications are disabled by default.&#x20;

If you need to receive notifications, please contact our support.
{% endhint %}

You can receive notifications about new payment, confirmation payment, payment sent to vault and payments to VRCS.

<figure><img src="/files/T0WJhxltxlmsRm19kAqm" alt=""><figcaption></figcaption></figure>


# Account security

Discover tips and best practices for securing your crypto payment gateway account, ensuring protection and reliability for your operations.

### **2 factor authentication**

We use 2FA (two-factor authentication) for all activities and changes in our system. This gives you an additional layer of security.

Please enable 2FA as soon as possilble in menu **Settings\Serurity**&#x20;

<figure><img src="/files/aZDCYp2YUOz7jG5VpnI3" alt=""><figcaption></figcaption></figure>

Follow instructions to connect.

<figure><img src="/files/5lJbdO1VcRXYIXMWYTh3" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Please keep the access key securely. In case of loss we will not be able to restore it.
{% endhint %}

### **Address book**

The Address Book feature allows users to securely save and manage trusted cryptocurrency wallet addresses for future withdrawals. Before initiating a withdrawal, users can select a previously saved wallet from the Address Book instead of entering the address manually.

<figure><img src="/files/7Mxz9SsMQEmdXP9vEssc" alt=""><figcaption></figcaption></figure>

### **Sessions**&#x20;

The Session Management feature allows users to monitor and control all active account sessions across different devices and locations. Users can view details such as device type, browser, IP address, login time, and last activity for each session.

For security purposes, users can terminate individual sessions or log out from all devices except the current one. The system may also notify users about new logins, suspicious activity, or access from unknown devices.

<figure><img src="/files/ytsWxprqSkMfTvap1rGJ" alt=""><figcaption></figcaption></figure>


# Match Crypto Wallet Addresses

Verify and match wallet addresses for seamless crypto payment processing, enhancing security and reliability for your transactions.

The following information is provided on how to properly check the wallet address entered in the withdrawal form. In order to avoid receiving failed withdrawal requests, the merchant should check the wallet format of the selected currency. For example, you specified a Tron wallet address in the field, but the currency you selected for withdrawal is from the BNB chain network.

The following regular expressions are crafted to match **some** commonly used cryptocurrency wallet address types. This page details the Regex components and pattern tests to match Ethereum, Bitcoin, Dash, Tron, Dogecoin, Litecoin  and Solana addresses.

### Regular Expressions

**Ethereum (ETH)**

```
/^0x[a-fA-F0-9]{40}$/g
```

**Bitcoin (BTC)**

```
/^(?:[13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[ac-hj-np-z02-9]{39,87})$
```

<pre><code><strong>/^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$/g
</strong></code></pre>

**Bitcoin Cash (BCH)**

```
/^((bitcoincash:)?(q|p)[a-z0-9]{41})
```

**Dash (DASH)**

```
/X[1-9A-HJ-NP-Za-km-z]{33}$/g
```

**Tron (TRX)**

```
/T[A-Za-z1-9]{33}
```

**Dogecoin (DOGE)**

```
/^D{1}[5-9A-HJ-NP-U]{1}[1-9A-HJ-NP-Za-km-z]{32}$
```

**Litecoin (LTC)**

```
/^([LM3]{1}[a-km-zA-HJ-NP-Z1-9]{26,33}||ltc1[a-z0-9]{39,59})$/g
```

**Ripple (XRP)**

```
/^r[1-9A-HJ-NP-Za-km-z]{25,34}$
```

**Solana (SOL)**

```
/^[1-9A-HJ-NP-Za-km-z]{32,44}$
```

**The Open Network (TON)**

```
/^(EQ|UQ)[A-Za-z0-9_-]{46}$
```

**SUI network (SUI)**

```
/^0x[0-9a-fA-F]{64}$
```

**Monero (XMR)**

```
/^[48][0-9AB][1-9A-HJ-NP-Za-km-z]{93}$
```

### Regex Components

**Anchors**

<table data-header-hidden><thead><tr><th width="109"></th><th></th></tr></thead><tbody><tr><td>/</td><td><strong>Open</strong>. Indicates the start of a regular expression.</td></tr><tr><td>^</td><td><strong>Beginning</strong>. Matches the beginning of the string, or the beginning of a line if the multiline flag (<strong>m</strong>) is enabled.</td></tr><tr><td>$</td><td><strong>End</strong>. Matches the end of the string, or the end of a line if the multiline flag (<strong>m</strong>) is enabled.</td></tr><tr><td>/</td><td><strong>Close</strong>. Second "<strong>/</strong>" indicates the end of a regular expression and the start of expression flags.</td></tr></tbody></table>

**Quantifiers**

<table data-header-hidden><thead><tr><th width="164"></th><th></th></tr></thead><tbody><tr><td>{40}</td><td>Ethereum (ETH): Match 40 of the preceeding token.</td></tr><tr><td>{25,34}</td><td>Bitcoin (BTC): Match between 25 and 34 of the preceeding token.</td></tr><tr><td>{33}</td><td>Dash (DASH): Match between 33 of the preceeding token.</td></tr><tr><td>{33}</td><td>Tron (TRX): Match between 33 of the preceeding token.</td></tr><tr><td>{32}</td><td>Dogecoin (DOGE): Match between 32 of the preceeding token.</td></tr><tr><td>{39,59}</td><td>Litecoin (LTC): Match between 39 and 59 of the preceeding token.</td></tr><tr><td>{32,44}</td><td>Solana (SOL): Match between 32 and 44 of the preceeding token.</td></tr></tbody></table>

**OR Operator**

<table data-header-hidden><thead><tr><th width="120"></th><th></th></tr></thead><tbody><tr><td>|</td><td>Alternation acts like a boolean OR. Matches the expression before or after the "|".</td></tr></tbody></table>

**Character Classes**

*Ethereum (ETH)*:

<table data-header-hidden><thead><tr><th width="144"></th><th></th></tr></thead><tbody><tr><td>0</td><td><strong>Character</strong>. Matches a "0" character (char code 48).</td></tr><tr><td>x</td><td><strong>Character</strong>. Matches a "x" character (char code 120). Case sensitive.</td></tr><tr><td>[a-fA-F0-9]</td><td><strong>Character Set</strong>. Match any character in the set. <strong>a-f</strong> Range matches a character in the range "a" to "f" (char code 97 to 102). Case sensitive. <strong>A-F</strong> Range matches a character in the range "A" to "F" (char code 65 to 70). Case sensitive. <strong>0-9</strong> matches a character in the range of "0" to "9" (char code 48 to 57). Case sensitive.</td></tr></tbody></table>

*Bitcoin (BTC)*:

<table data-header-hidden><thead><tr><th width="197"></th><th></th></tr></thead><tbody><tr><td>[a-zA-HJ-NP-Z0-9]</td><td><strong>Character set</strong>. Match any character in the set. <strong>a-z</strong> Range matches a character in the range "a" to "z" (char code 97 to 122). Case sensitive. <strong>A-H</strong> Range matches a character in the range "A" to "H" (char code 65 to 72). Case sensitive. <strong>J-N</strong> Range matches a character in the range "J" to "N" (char code 74 to 78). Case sensitive. <strong>P-Z</strong> Range matches a character in the range "P" to "Z" (char code 80 to 90). Case sensitive. <strong>0-9</strong> Range matches a character in the range "0" to "9" (char code 48 to 57). Case sensitive.</td></tr></tbody></table>

*Dash (DASH)*:

<table data-header-hidden><thead><tr><th width="237"></th><th></th></tr></thead><tbody><tr><td>x</td><td><strong>Character</strong>. Matches a "X" character (char code 88). Case sensitive.</td></tr><tr><td>[1-9A-HJ-NP-Za-km-z]</td><td><strong>Character set</strong>. Match many character in the set. <strong>1-9</strong> Range matches a character in the range "1" to "9" (char code 49 to 57) Case sensitive. <strong>A-H</strong> Range matches a character in the range "A" to "H" (char code 65 to 72). <strong>J-N</strong> Range matches a character in the range "J" to "N" (char code 74 to 78). <strong>P-Z</strong> Range matches a character in the range "P" to "Z" (char code 80 to 90). Case sensitive. <strong>a-k</strong> Range matches a character in the range "a" to "k" (char code 97 to 107). Case sensitive. <strong>m-z</strong> Range matches a character in the range "m" to "z" (char code 109 to 122). Case sensitive.</td></tr></tbody></table>

*Tron (TRX)*:

<table data-header-hidden><thead><tr><th width="237"></th><th></th></tr></thead><tbody><tr><td>T</td><td><strong>Character</strong>. Matches the character "T". Case sensitive.</td></tr><tr><td>[A-Za-z1-9]</td><td><strong>Character set</strong>. Matches any uppercase letter, lowercase letter, or digit. Case sensitive.</td></tr></tbody></table>

*Dogecoin (DOGE)*:

<table data-header-hidden><thead><tr><th width="237"></th><th></th></tr></thead><tbody><tr><td>D{1}</td><td><strong>Character</strong>. Matches a single character that must be "D". Case sensitive.</td></tr><tr><td>[5-9A-HJ-NP-U]{1}</td><td><strong>Character set</strong>. Matches a single character that must be either a digit from 5 to 9 or a uppercase letter excluding I, O, and Q. Case sensitive.</td></tr><tr><td>[1-9A-HJ-NP-Za-km-z]{32}</td><td><strong>Character set</strong>. Matches a sequence of 32 characters that must be either an uppercase letter excluding I, O, and Q, a digit, or a lowercase letter excluding 'l' and 'o'. Case sensitive.</td></tr></tbody></table>

*Litecoin (LTC)*:

<table data-header-hidden><thead><tr><th width="237"></th><th></th></tr></thead><tbody><tr><td>[LM3]{1}</td><td><strong>Character</strong>. Matches a single character that must be either L, M, or 3.. Case sensitive.</td></tr><tr><td>[a-km-zA-HJ-NP-Z1-9]{26,33}</td><td><strong>Character set</strong>. Matches a sequence of 26 to 33 characters that must be either a lowercase letter (excluding 'l'), an uppercase letter (excluding 'I' and 'O'), or a digit (excluding '0') but cannot contain 'o'. Case sensitive.</td></tr><tr><td>ltc1</td><td><strong>Character</strong>. Matches the string "ltc1". Case sensitive.</td></tr><tr><td>[a-z0-9]{39,59}</td><td><strong>Character set</strong>. Matches a sequence of 39 to 59 characters that must be either a lowercase letter or a digit. Case sensitive.</td></tr></tbody></table>

*Solana (SOL)*:

<table data-header-hidden><thead><tr><th width="237"></th><th></th></tr></thead><tbody><tr><td>[1-9A-HJ-NP-Za-km-z]</td><td><strong>Character set</strong>. Match many character in the set. <strong>1-9</strong> Range matches a character in the range "1" to "9" (char code 49 to 57) Case sensitive. <strong>A-H</strong> Range matches a character in the range "A" to "H" (char code 65 to 72). <strong>J-N</strong> Range matches a character in the range "J" to "N" (char code 74 to 78). <strong>P-Z</strong> Range matches a character in the range "P" to "Z" (char code 80 to 90). Case sensitive. <strong>a-k</strong> Range matches a character in the range "a" to "k" (char code 97 to 107). Case sensitive. <strong>m-z</strong> Range matches a character in the range "m" to "z" (char code 109 to 122). Case sensitive.</td></tr></tbody></table>

**Flags**

<table data-header-hidden><thead><tr><th width="107"></th><th></th></tr></thead><tbody><tr><td>g</td><td><strong>Global search</strong>. Retain the index of the last match, allowing subsequent searches to start from the end of the previous match. Without the global flag, subsequent searches will return the same match.</td></tr></tbody></table>

**Grouping and Capturing**

<table data-header-hidden><thead><tr><th width="128"></th><th></th></tr></thead><tbody><tr><td>(bc1|[13])</td><td>Bitcoin (BTC): <strong>Capturing Group</strong>. Groups multiple tokens together and creates a capture group for extracting a substring or using a backreference. <strong>b</strong> Character matches a "b" character (char code 98). Case sensitive. <strong>c</strong> Character matches a "c" character (char code 99). Case sensitive. <strong>1</strong> Character matches a "1" character (char code 49). <strong>|</strong> Alternation acts like a boolean OR. Matches the expression before or after the "|". <strong>Character set</strong> Matches any character in the set; <strong>1</strong> character matches a "1" character (char code 49), <strong>3</strong> character matches a "3" character (char code 51).</td></tr></tbody></table>


# FAQ

Find answers to frequently asked questions about our crypto payment gateway, ensuring clarity and support for your integration and operations.

How do I connect to 0xProcessing?

1\. Click the link and fill out the form <https://0xprocessing.com/>\
2\. One of our managers will contact you, and once you have registered, you will be able to log in using the link <https://0xprocessing.com/auth/login/>\
3\. To activate your account after registration, navigate to your email and verify your account.\
4\. You integrate the payment system according to the [documentation](https://github.com/tehnobit/Docs0xProcessing/blob/doc/broken-reference/README.md)\
5\. Set the withdrawal limit (menu Confirmations \ Auto Confirm) and webhook URL in the personal account settings (menu Settings \ API).\
6\. After integration and testing of payments, we will set processing fee on merchant clients' deposit adjusted depending on the merchant's turnover.

### Who can connect 0xProcessing?

The platform for cryptocurrency payments can be connected to any individual or legal entity; the terms of connection can be clarified by our manager leaving contact information in the [feedback form](https://0xprocessing.com/).

### Are there deposit and withdrawal limits for 0xProcessing?

Through the API you can deposit or withdraw amounts equivalent to \~2 USD in all supported cryptocurrencies.

Withdrawal from the merchant's personal account is possible if the withdrawal amount exceeds 10 USD. Withdrawal is possible in the merchant's balance currency only.

In case of any questions or problems with deposits or withdrawals you can always contact technical support service <support@0xprocessing.com> or contact your personal manager.

### The required currency is not in the list of 0xProcessing supported, there is no functionality, how to add it?

We are constantly developing and adding the necessary currencies or functionality for our clients.

You can leave a request in the technical support at <support@0xprocessing.com> or inform your manager, we will try to implement the necessary functionality as soon as possible

### How do I contact technical support?

If a merchant has problems with transactions or connection of the payment system, you can always contact your manager or support by email <support@0xprocessing.com>

Don't forget to specify merchant ID or Email of your registered 0xProcessing account when contacting.

If you made the transaction through 0xProcessing as a merchant client, please contact 0xProcessing support first, so we can solve your problem faster.

### How can I add liquidity to my balance in 0xProcessing?

The add liquidity function is needed to allow merchant to top up cryptocurrencies balances when the minimum balance is reached to make withdrawals to clients.

When adding liquidity, only the network fee is charged.

A guide to adding liquidity: [Balance management](/quick-start/balance-management#liquidity-topup)

### Are there deposit and withdrawal limits for 0xProcessing?

You can deposit or withdraw an equivalent amount from \~3 USD in all supported cryptocurrencies.

### How quickly will the client's payment be credited to the merchant's account? What is the speed at which the merchant can withdraw funds from 0xProcessing?

If the client pays the merchant correctly. 0xProcessing awaits confirmation for a few seconds to a few minutes, according to the cryptocurrency network. Then it sends the amount to the merchant account balance and the payment status callback to the merchant's webhook URL. Funds received on balance are immediately available for withdrawal.

There is a manual withdrawal option in the merchant account (menu Dashboard\Withdraw) or you can set up automatic withdrawal of positive balances through API methods.

If VRCS is enabled, funds will be sent to VRCS, converted to stablecoin and automatically withdrawn to 0xProcessing merchant balance when the minimum amount is reached, set in merchant account settings (menu Settings \ Currency).

### What are the problems with transactions?

1. The amount has been credited to the wallet indicated on the payment form after the payment window is closed (payment window 30-50 min). The payment is considered to be unpaid, and the merchant receives a callback with **"Canceled"** status.
2. The amount has not been transferred to the wallet specified in the payment form. Payment is considered to be unpaid and the merchant receives a callback with the status **“Canceled”**.\
   Whenever a client contacts 0xProcessing, you can first of all verify the top-up wallet yourself using the data provided by the user, transaction hash and top-up wallet address. If the amount is credited to the wallet, but not sent to the 0xProcessing vault, you can contact 0xProcessing support.
3. When paying a fixed amount, the client has underpaid the amount:

* If the automatic underpayment function is disabled, the payment is considered to be underpaid and a callback is sent to the merchant with the status **“Insufficient”.** Merchants can see and confirm **"Insufficient"** transactions in the **Confirmations** menu;
* 0xProcessing waits until the payment window is closed (30 min) and automatically deducts the amount received from the balance; the payment is considered successful and the payment status "Insufficient" is sent to the merchant; another callback with the **"Success"** status and **insufficient=true** flag is sent to the merchant;
* If the deposit amount is less than the minimum, the payment is assigned the status **"Insufficient"**. You will not be able to confirm the payment data without an additional payment
* If the merchant's client pays an additional amount before the payment window closes, the amount is considered paid in full and held as successful until the payment window closes.

{% hint style="warning" %}
To avoid underpayment, inform clients that the platforms from which the client pays may charge an additional withdrawal percentage or deduct from the network fee.
{% endhint %}

4\. Client sent currency from other network or sent wrong currency.

{% hint style="info" %}
**For example:**

USDT (BEP20) instead of USDT (ERC20)

BNB (BEP20) instead of USDT (BEP20)
{% endhint %}

In this situation, you can request transaction verification through technical support and they will help you to change the currency of the payment.

5. If you send an amount to another network, e.g. BTC to ETH, the amount will be irrevocably lost.
6. When a client sends an amount less than the minimum payment limit. The amount will remain in the system wallet as long as the client is underpaying the amount exceeding the deposit limit.
7. When a client sends a liquid currency unsupported by 0xProcessing, but in one of the supported networks, it can be returned to the sender with a deduction of the network fee. If the amount does not cover the network fee, a refund is not possible or request an additional currency transfer from the client to pay the network fee (ETH, BNB, TRX). If the currency is sent to an unsupported 0xProcessing network, a refund is not possible.
8. If the merchant's client did not provide a Destination Tag (payment ID in Ripple and TON networks) when sending the XRP, GRAM, USDT (TON), NOT (TON) the payment was received, but processing will not be able to identify it. To search for the transaction in the admin panel, it is required to provide the transaction hash, Client ID or Client Email (if the without fixed amount deposit method is used).
9. Transactions take a long time to be processed by the network. This is because in some networks transaction processing can take up to several hours. For example, if you specify a very low commission for a transaction in the BTC network.
10. Payment is marked by merchant as test

{% hint style="info" %}
In the request to create a payment form, the parameter **Test=true**
{% endhint %}

Test payments are intended only for the emulation of different payment statuses. It is not paid in real cryptocurrency and is not displayed in merchant's account. However, when sending cryptocurrency for such payment, technical support can help to change its status and conduct payment as usual.

11. Double top-up. The client paid a second time to the wallet from the old payment form after closing the payment window. Technical support will help credit the funds received to the balance of the merchant's account. However, the system cannot send a callback for this transaction. The merchant has to credit the amount to its client on its own.

### What should I send to the 0xProcessing support service if there are problems with depositing/withdrawing funds?

#### Deposit:

1\. Txn Hash (required for XRP, GRAM, USDT (TON), NOT (TON) transactions) or Address (wallet the payment was made to);

2\. Payment ID payment identifier in 0x (required for XRP, GRAM, USDT (TON), NOT (TON) transactions);

3\. Billing ID (payment identifier in your system);

4\. Client ID (required for XRP, GRAM, USDT (TON), NOT (TON) transactions);

5\. Client Email (on request of 0xProcessing support).

#### Withdrawal:

1\. Withdrawal ID from your side;

2\. If the withdrawal ID is not shown, then you need to send a screenshot of the withdrawal from the 0xProcessing Client's Profile or withdrawal amount and date.

{% hint style="danger" %}
All data must be sent in text form.
{% endhint %}

**Where can I check the balance of the wallet your client has paid into?**

Special search engines network explorers are used to check transactions and balance of cryptocurrency wallets

**Tron:** [**https://tronscan.org/**](https://tronscan.org/)

TRX, USDT (TRC20), AXS (TRC20), ETH (TRC20)

**Binance Smart Chain:** [**https://bscscan.com/**<br>](https://bscscan.com/)\
BNB, USDT (BEP20), USDCOIN (BEP20), DAI (BEP20), BTCB (BEP20), ETH (BEP20), ADA (BEP20), DESU (BEP20), MDAO (BEP20), DOGE (BEP20), ZEC (BEP20), ASTER (BEP20), DOT (BEP20), USD1 (BEP20), BONK (BEP20)\
\
**Ethereum:** [**https://ethersecan.io/**<br>](https://ethersecan.io/)\
ETH, USDT (ERC20), USDC (ERC20), TUSD (ERC20), DAI (ERC20), AXS (ERC20), WEVER (ERC20), TRX (ERC20), PEPE (ERC20), APE (ERC20), SHIB (ERC20), LINK (ERC20), PYUSD (ERC20), XAUT (ERC20), BGB (ERC20), UNI (ERC20)\
\
**Dogecoin:** [**https://dogechain.info/**](https://dogechain.info/)

DOGE\
\
**Litecoin:** [**https://live.blockcypher.com/**](https://live.blockcypher.com/)

LTC\
\
**XRP:** [**https://xrpscan.com/**](https://xrpscan.com/)

XRP\
\
**Bitcoin:** [**https://blockchair.com/**](https://blockchair.com/)

BTC\
\
**Bitcoin Cash:** [**https://blockchair.com/**](https://blockchair.com/)

BCH

**Dashcoin:** [**https://explorer.dash.org/**](https://explorer.dash.org/)

DASH\
\
**Polygon:** [**https://polygonscan.com/**](https://polygonscan.com/)

POL *(prev. MATIC)*, USDT (POLYGON), USDCE (POLYGON) (PoS Bridge)*,* USDCOIN (POLYGON), WETH (POLYGON)\
\
**Arbitrum One:** [**https://arbiscan.io/**](https://arbiscan.io/)

ETH (ARB1), ARB (ARB1), USDT (ARB1), DAI (ARB1), USDCE (ARB1) *<mark style="color:blue;">(Bridged)</mark>*, USDCOIN (ARB1), PYUSD (ARB1), WBTC (ARB1)\
\
**Avalanche:** [**https://snowtrace.io/**](https://snowtrace.io/)

AVAX, USDT (AVAXC), TUSD (AVAXC), USDC (AVAXC)

**The Open Network:** [**https://tonviewer.com/**](https://tonviewer.com/) **,** [**https://tonscan.org/**](https://tonscan.org/)

GRAM, USDT (TON), NOT (TON)\
\
**Base Chain:** [**https://basescan.org/**](https://basescan.org/)

ETH (BASE), USDC (BASE)

**Solana:** [**https://explorer.solana.com/**](https://explorer.solana.com/)

SOL, USDT (SOL), USDC (SOL), USD1 (SOL), PYUSD (SOL), WBTC (SOL), SOETH (SOL), PUMP (SOL), TRUMP (SOL), JUP (SOL), BONK (SOL), PENGU (SOL), SPX (SOL), RAY (SOL), EURC (SOL), FARTCOIN (SOL), JTO (SOL), DBR (SOL)

**OpBNB:** [**https://opbnb.bscscan.com/**](https://opbnb.bscscan.com/)

BNB (OPBNB), USDT (OPBNB), ETH (OPBNB)

**Optimism:** [**https://optimistic.etherscan.io/**](https://optimistic.etherscan.io/)

USDT (OP), USDC (OP), USDCE (OP), OP (OP), ETH (OP), WLD (OP)

**Monero:** [**https://blockchair.com/**](https://blockchair.com/)

XMR

**SUI network:** [**https://suiscan.xyz/**](https://suiscan.xyz/)

SUI, ETH (SUI), WSOL (SUI), WBTC (SUI), USDT (SUI), USDC (SUI)

**1. If you only know the Txn Hash, then copy it, go to an explorer such as the TRON network** [**https://tronscan.org/**](https://tronscan.org/)**, paste in the Txn Hash and hit \[Search].**\\

<figure><img src="/files/E08puOJbtAblaPBcO62q" alt=""><figcaption></figcaption></figure>

The transaction data opens. Click on the wallet on the right-hand side.

<figure><img src="/files/HBM65XYVlClBlaEGJZXf" alt=""><figcaption></figcaption></figure>

Your wallet opens where you can see if a payment has been credited to your wallet. In addition, you can see if your client has sent an amount less than the minimum payment limit.

**Payment has been received on the wallet.**

<figure><img src="/files/ppFWWhZ1PFJHCuqZPfRo" alt=""><figcaption></figcaption></figure>

**Payment has not been received on the wallet.**

<figure><img src="/files/iMlKhdXH1uqzWgqZo6ms" alt=""><figcaption></figcaption></figure>

**2.If you only know the wallet your client paid for, copy it, navigate to the explorer, e.g. Ethereum network** [**https://ethersecan.io/**](https://ethersecan.io/) **, paste the wallet and hit \[Search].**

<figure><img src="/files/wzk62Hl4essE0FBCf7xm" alt=""><figcaption></figcaption></figure>

Your wallet opens where you can see if a payment has been credited to your wallet. This is because you can see whether your client has sent an amount less than the minimum payment limit and whether the deposit has passed through.

The wallet addresses used in the payment forms are always unique for each payment and contain a zero balance.

**Payment has arrived in the wallet.**

<figure><img src="/files/NWtYpujJ4q4x1pubppMA" alt=""><figcaption></figcaption></figure>

**Wallet is empty, payment has not been received.**

<figure><img src="/files/0KfKLyV7q8DsJqlBHBBS" alt=""><figcaption></figcaption></figure>

**Payment has been made. The wallet has a withdrawal transaction in the vault.**

<figure><img src="/files/dQaPpj5dbm3N5LZGQw3H" alt=""><figcaption></figcaption></figure>

### Examples of how hash and wallet networks look

<table><thead><tr><th width="210">Network</th><th width="228">Hash</th><th>Wallet address</th></tr></thead><tbody><tr><td>Bitcoin</td><td>f5c36d082cc958f0999cf0f7a5e5e9f465f18c346640626555f1129f02f4ce60</td><td>4LgYSPAtUFogixKgQzvaoXBERXZ16o2fKq</td></tr><tr><td>BNB chain / Ethereum</td><td>0xb4bc263278d3f77a652a8d73a6bfd8ec0ba1a63924bbb5f38147fb8a943da26d</td><td>0x4A084eF7EcFcf7af9E17d90C558Dc954DdB112eE</td></tr><tr><td>Tron</td><td>3497e6d1b0a5ffb788c20a8a4fc822d6faae340ecde45e81a4cf80afc495117c</td><td>TYhoLrdQej5mUEPcqYGeVxQCZyfowvq6hm</td></tr><tr><td>XRP (Ripple)</td><td>33048FC64DBF3260AECBC48B71CC5710201ACD9EDFB3442B1024E7575E40AEA2</td><td>rBYxNHGYggorQts4Z12rQDy8Ws61C10RtEb</td></tr><tr><td>Litecoin</td><td>23eb9d4a3c47f9a6844ed276513d1e05040a9b8af90ac05d4b206b3024f5f35a</td><td>MPGNSeMzD2zUy2Vh3wy5vN8Dcs42tTeyd9</td></tr><tr><td>Dogecoin</td><td>6f5449cab534994d0c72555be6e552b173cb384030f4f97c50864cb7cf9561b7</td><td>DDZkuCx1F4fUQAuJohkeyu3WDUbrz2m5oM</td></tr><tr><td><p>GRAM, USDT (TON),</p><p>NOT (TON)</p></td><td>a6068d69084f8ccb541e901d3a22197f0dce068749384e562b2732115e17660c</td><td>EQAFF6Tf_jAATTaj-hs1ireZOvfdP7bL8x4fHWmM32wvP-G5</td></tr></tbody></table>


