Meeg Pay System API (1.3.0)

Download OpenAPI specification:

Authorization

Token-based authentication is used for endpoints that require authorization.

The server provides a bearer token, which must be included in the Authorization HTTP header:

Authorization: Bearer <YOUR_TOKEN>

The token is obtained after logging in and remains valid until logging out.

Endpoints requiring authorization are intended for backend-to-backend integration only.

Endpoints under the public section do not require authorization and are intended for frontend-to-backend communication.

Receiving Payments

To receive cryptocurrency payments, a temporary address is generated for each invoice in the selected blockchain network. This address is used exclusively to identify the purpose of incoming payments.

Note: In some blockchain networks (e.g., TON, or when interacting with certain centralized exchanges), a unique address is not generated per invoice. Instead, a shared address is used along with a unique identifier such as a memo, tag, or destination ID to distinguish between payments. Make sure to always display the memo/tag to the user when required, and ensure they include it in the transaction. Failure to do so may result in an untracked or lost payment.

Creating invoices

Invoices can be created in either one-step or multi-step mode, depending on your business logic:

  • One-step: Provide the invoice currency and the customer's payment currency/network in a single request.
  • Multi-step: First, create the invoice with a currency and amount; then, in a separate request, specify the currency and network the user will use to pay.

Users can only pay invoices using cryptocurrencies that are allowed in the merchant’s settings, which are a subset of all supported tokens and networks.

Once the currency and network are selected, the payable amount is calculated using current exchange rates and fixed for a limited time (see expires_at).

Paying the Invoice

The customer must send funds to the generated pay_address.

  • If the payment is less than the required amount, the invoice enters status [2 - Partially Paid] and awaits additional transactions.
  • If the payment is equal to or greater, the invoice is marked as paid and:
    • Funds are transferred to the merchant’s wallet, or
    • AML checks are initiated, depending on the merchant's configuration.

⚠️ Important: If the user sends an unsupported token or uses the wrong blockchain network, the transaction will not be recognized as a payment! In some cases, such funds might be forwarded to the merchant’s wallet as unlinked external deposits. In other cases, the transaction may be completely ignored.

💡 Memo/Tag Requirement: For some networks, the pay_address must be accompanied by a memo, tag, or destination ID. This additional identifier is essential to correctly associate the transaction with the invoice. Always ensure the user is instructed to include the memo/tag where applicable.

If the invoice is not paid within a certain time, it will be marked [98 - Cancelled]. Any funds received after cancellation are likely to be lost.

The final status of the invoice is [99 - Successful]. It informs that the funds have been successfully transferred to merchant's wallet.

Invoice lifecycle

[0 New] -> [1 Awaiting payment] -> [2 Partially Paid] -> [3 Paid]
                   |                       |
                   +------ expired --------+--> [98 Cancelled]

[3 Paid] -- AML OFF --> [21 Transfer in progress] ----------------> [99 Successful]
[3 Paid] -- AML ON  --> [11 AML in progress] -> [12 AML finished]
                              low risk  -> [21 Transfer in progress] -> [99 Successful]
                              high risk -> [13 Awaiting AML decision]
                                               approve -> [21 Transfer in progress] -> [99 Successful]
                                               refund  -> [31 Refund in progress] -> [39 Refunded] / [38 Partially Refunded]

When can you treat the invoice as accepted?

Status [3 - Paid] means funds reached the temporary address but the invoice is not yet settled — it still has to be moved to your merchant wallet.

  • If AML is disabled for your account (the network/wallet has no AML action), [3 - Paid] is reliable: there is no AML hold and no refund branch in the normal flow, so the invoice is guaranteed to proceed to [99 - Successful]. You may safely accept the order on [3 - Paid] to speed up fulfilment, without waiting for [99 - Successful].
  • If AML is enabled, do not rely on [3 - Paid]: the invoice may go through an AML check and can stop at [13 - Awaiting AML decision] or be refunded. Use [21 - Transfer in progress] as the early "accepted" signal instead — it is only reached after the AML check has passed (or you approved a held invoice), so the payment will not be refunded by AML from this point. [99 - Successful] remains the final settlement confirmation, and you may still handle [13 - Awaiting AML decision] explicitly.

Withdrawal of Funds

⚠️ Withdrawals must be made to addresses on the same network as the source wallet. Sending to incorrect or non-existent addresses may result in permanent loss of funds.

💡 Security Tip: Do not store large balances on merchant wallets. Withdraw funds regularly to secure external wallets.

Withdrawals can be executed in:

  • Single-step mode (via skipConfirmation flag)
  • Multi-step mode: First, a withdrawal request is created and validated, then confirmed in a second request.

🔐 Request Signature (required)

All withdrawal requests must be signed using the merchant's secret key.

The following HTTP headers are required:

Header Required Description
X-Timestamp Unix timestamp in milliseconds (UTC)
X-Merchant-Signature HMAC SHA256 signature generated from request parameters

The server will reject requests if:

  • Timestamp is too far from current time (±30 seconds)
  • Signature is missing or invalid

📋 Parameters to sign

Parameter Description
timestamp Value from the X-Timestamp header
amount Value of amount
token Value of token
network Blockchain network name
to_address Destination wallet address

🧮 Signature Algorithm (PHP)

$params = [
    'timestamp'   => $timestamp,
    'amount'      => $amount,
    'token'       => $currency,
    'network'     => $network,
    'to_address'  => $to_address,
];

ksort($params);
$query = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
$signature = hash_hmac('sha256', $query, $merchant_secret);

The resulting signature must be sent in the X-Merchant-Signature header.

✅ Example

X-Timestamp: 1712990000000
X-Merchant-Signature: 3b2a1b7d9a8bdf12...

Payload:

{
  "amount": "100.00",
  "token": "USDT",
  "network": "TRON",
  "to_address": "TXYZabc..."
}

String to sign:

amount=100.00&network=TRON&timestamp=1712990000000&to_address=TXYZabc...&token=USDT

Fees

Service fee

A service fee is charged when funds are transferred from the temporary address to the merchant wallet. The amount depends on your subscription plan and is charged in the same token used for payment.

Fees can be accumulated in the merchant wallet (frozen_amount) and periodically transferred to the service when economically reasonable.

Blockchain Network Fees (BNF)

BNF is charged in the main coin of the blockchain (e.g., ETH for Ethereum).

It applies to:

  • Transfers from temporary to merchant wallets
  • Withdrawals
  • Refunds

Normally, BNF is deducted from the source wallet. If the source wallet lacks the required main coin, the service pays the fee and deducts its equivalent in the token used.

IPN (Instant Payment Notification)

If a webhook_url is set in the merchant's settings, the service will notify your server about updates to invoice and withdrawal statuses.

  • A webhook is considered delivered if your server responds with an HTTP status code 2xx.
  • Otherwise, it will retry using exponential backoff (up to 3 attempts).
  • The request timeout is 3 seconds.

Signature Verification

Each IPN includes a Sig header, which is an HMAC SHA256 signature of the payload, signed with the merchant's secret key.

To verify the signature, you need to:

  1. Extract the Sig header from the request.
  2. Sort the payload parameters by key in ascending order.
  3. Concatenate them as key=value pairs, separated by &.
  4. Calculate hash code for string from step3 using the SHA256 algorithm in hexadecimal encoding in lowercase with the NMAS method, signed with a secret key from your merchant's settings
  5. Compare hash code with the signature from step 1.

example (PHP)


// $payload - array of parameters from ipn
// $signFromSigHeader - server signature value from Sig header
// $secret - merchant's secret key

// Sorting the array by keys
ksort($payload);

// Combining key=value pairs with an ampersand as a separator
$sign_params_query = http_build_query($payload);

$calculatedSign = hash_hmac('sha256', $sign_params_query, $secret);

return $signFromSigHeader === $calculatedSign;

Invoice webhook payload

An invoice notification is sent whenever the invoice status changes and whenever paid_amount changes (so top-ups to a still Partially Paid invoice are delivered as separate notifications).

Field Type Description
type string Always invoice.
uuid string Invoice UUID.
merchant_uuid string Merchant UUID.
status integer Invoice status (see below).
pay_amount string Amount to pay, in the payment token. Decimal string.
paid_amount string Amount received so far, in the payment token. Decimal string.
pay_token string Payment token (e.g. USDT).
pay_network string Payment network (e.g. TRON).
order_num string Merchant order number. Empty string if not set.
final_amount string Amount actually received, expressed in the invoice currency, rounded to that currency precision.

All amount fields are decimal strings, status is an integer. Optional string fields (e.g. order_num) are sent as an empty string "" when absent — the payload never contains null.

status is one of the following values (other internal statuses are not delivered): 2 Partially Paid, 3 Paid, 13 Awaiting AML decision, 21 Transfer in progress, 38 Partially Refunded, 39 Refunded, 97 Error, 98 Cancelled, 99 Successful.

Note on 21 Transfer in progress — the payment is confirmed and (if AML is enabled) has passed the AML check; the funds are being swept to your wallet. It is not a terminal status: a successful sweep is followed by 99 Successful. Use it as an early "payment accepted" signal, but treat 99 as the final confirmation.

Invoice status updated Webhook

Request Body schema: application/json

Triggered when the status of an invoice changes. The notification is sent to the webhook_url provided during invoice creation. If not specified explicitly, the default webhook URL from the merchant settings is used.

merchant_uuid
required
string

merchant UUID

uuid
required
string

invoice UUID

type
required
string

notification type = 'invoice'

status
required
integer

invoice status

pay_amount
string

Amount to pay, in the payment token (decimal string)

paid_amount
string

Amount received so far, in the payment token (decimal string)

pay_token
string

Payment token (e.g. USDT)

pay_network
string

Payment network (e.g. TRON)

order_num
string

Merchant order number (empty string if not set)

final_amount
string

Amount actually received, expressed in the invoice currency (decimal string)

Responses

Request samples

Content type
application/json
{
  • "merchant_uuid": "1e8ae8ce-9e21-40ad-8182-9611f66983c1",
  • "uuid": "2e8ae8ce-9e21-40ad-8182-9611f66983c1",
  • "type": "invoice",
  • "status": 99,
  • "pay_amount": "100.000",
  • "paid_amount": "100.000",
  • "pay_token": "USDT",
  • "pay_network": "TRON",
  • "order_num": "ORDER-1100",
  • "final_amount": "100.00"
}

Withdrawal or refund status updated Webhook

Request Body schema: application/json

Triggered when the status of a withdrawal or refund changes.

merchant_uuid
required
string

merchant UUID

uuid
required
string

withdrawal UUID

type
required
string

notification type = 'payout'

payout_type
string
Enum: "wtd" "rfnd" "feewtd"

Payout type: wtd (withdrawal), rfnd (refund), feewtd (service fee)

status
required
integer

Withdrawal/refund status:

  • 0: Created
  • 1: Confirmed
  • 2: In progress
  • 6: Expired
  • 7: Error
  • 9: Successful
amount
string

Amount (decimal string)

token
string

Token

network
string

Network

fee
string

Fee (decimal string)

Responses

Request samples

Content type
application/json
{
  • "merchant_uuid": "1e8ae8ce-9e21-40ad-8182-9611f66983c1",
  • "uuid": "2e8ae8ce-9e21-40ad-8182-9611f66983c1",
  • "type": "payout",
  • "payout_type": "wtd",
  • "status": 9,
  • "amount": "0.600000",
  • "token": "USDT",
  • "network": "BSC",
  • "fee": "0.100000"
}

user

Login user

Request Body schema: application/json
required

Authentication data

email
required
string <email>

user email

password
required
string

user password

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Logout user

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": { }
}

merchant

Create new merchant

Authorizations:
bearerAuth
Request Body schema: application/json
required

Merchant object

title
required
string

Merchant title

website
required
string <url>

Merchant website

success_url
string <uri>

success URL

failed_url
string

fail URL

allowed_tokens
Array of integers unique

list of allowed tokens ids

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "website": "string",
  • "success_url": "http://example.com",
  • "failed_url": "string",
  • "allowed_tokens": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Get list of merchants for current user

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Get information about merchant

path Parameters
uuid
required
string <uuid>

UUID of merchant

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Update merchant data

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID торговой точки

Request Body schema: application/json
required
title
string

Merchant title

website
string <url>

website URL

success_url
string <uri>

success URL

failed_url
string

fail URL

allowed_tokens
Array of integers unique

list of allowed tokens

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "website": "string",
  • "success_url": "http://example.com",
  • "failed_url": "string",
  • "allowed_tokens": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Close merchant

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

Responses

Response samples

Content type
application/json
{
  • "success": true
}

Get list of merchant invoices

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

query Parameters
page
integer

page number

per_page
integer <int32> [ 1 .. 100 ]

number of items per page

include_archived
boolean
Default: false

When true, archived invoices (cancelled or expired/abandoned, normally hidden from the list) are included in the result alongside active ones.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Create new invoice

path Parameters
uuid
required
string <uuid>

UUID of merchant

Request Body schema: application/json
required

Invoice object

amount
required
number <double>

invoice amount

currency
required
string

invoice currency

network
string
Default: "FIAT"

invoice initial network

order_num
required
string

unique client order number

pay_token
string

token user chose to pay in

pay_network
string

network user chose to pay in

webhook_url
string <uri>

Optional webhook URL for this request. If provided, overrides the default webhook set in the merchant's settings. For requests sent via the public API (without authentication), the webhook domain must match the merchant's website domain or one of its subdomains.

Array of objects

a list of products

Responses

Request samples

Content type
application/json
{
  • "amount": 0.1,
  • "currency": "string",
  • "network": "FIAT",
  • "order_num": "string",
  • "pay_token": "string",
  • "pay_network": "string",
  • "webhook_url": "http://example.com",
  • "products": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Get list of merchant wallets

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Get list of merchant financial operations

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

query Parameters
page
integer

page number

per_page
integer <int32> [ 1 .. 100 ]

number of items per page

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Get list of webhooks sent

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

query Parameters
page
integer

page number

per_page
integer <int32> [ 1 .. 100 ]

number of items per page

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

invoices

Get list of merchant invoices

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

query Parameters
page
integer

page number

per_page
integer <int32> [ 1 .. 100 ]

number of items per page

include_archived
boolean
Default: false

When true, archived invoices (cancelled or expired/abandoned, normally hidden from the list) are included in the result alongside active ones.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Create new invoice

path Parameters
uuid
required
string <uuid>

UUID of merchant

Request Body schema: application/json
required

Invoice object

amount
required
number <double>

invoice amount

currency
required
string

invoice currency

network
string
Default: "FIAT"

invoice initial network

order_num
required
string

unique client order number

pay_token
string

token user chose to pay in

pay_network
string

network user chose to pay in

webhook_url
string <uri>

Optional webhook URL for this request. If provided, overrides the default webhook set in the merchant's settings. For requests sent via the public API (without authentication), the webhook domain must match the merchant's website domain or one of its subdomains.

Array of objects

a list of products

Responses

Request samples

Content type
application/json
{
  • "amount": 0.1,
  • "currency": "string",
  • "network": "FIAT",
  • "order_num": "string",
  • "pay_token": "string",
  • "pay_network": "string",
  • "webhook_url": "http://example.com",
  • "products": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Retrieve detailed information about a specific invoice by its UUID

Returns detailed information about an invoice, including its payment status, original and paid amounts, associated blockchain network and token, expiration date, and memo/tag if required. Use this endpoint to display invoice status to the user or to track its current state in the backend.

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Modify invoice parameters (amount, currency, metadata)

This endpoint allows modifying the invoice before payment has started. It is only available for invoices in status 0 - New or 1 - Awaiting payment.

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

invoice UUID

Request Body schema: application/json
required

Invoice object

amount
required
number <double>

invoice amount

currency
required
string

invoice currency

network
string
Default: "FIAT"

invoice initial network

order_num
required
string

unique client order number

pay_token
string

token user chose to pay in

pay_network
string

network user chose to pay in

webhook_url
string <uri>

Optional webhook URL for this request. If provided, overrides the default webhook set in the merchant's settings. For requests sent via the public API (without authentication), the webhook domain must match the merchant's website domain or one of its subdomains.

Array of objects

a list of products

Responses

Request samples

Content type
application/json
{
  • "amount": 0.1,
  • "currency": "string",
  • "network": "FIAT",
  • "order_num": "string",
  • "pay_token": "string",
  • "pay_network": "string",
  • "webhook_url": "http://example.com",
  • "products": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Cancel and delete an invoice before payment

Deletes an invoice that is no longer needed. Only applicable to invoices that have not received any payments. Once funds are received, the invoice cannot be deleted and must follow the refund process if needed.

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true
}

Set payment currency and blockchain network for an invoice

Sets the currency and network the user selected to pay in. Based on this, the amount to be paid is calculated using the current exchange rate.

path Parameters
uuid
required
string <uuid>

invoice UUID

query Parameters
token
required
string

Token, that user chose to pay in

network
required
string

Network, that user chose to pay in

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

The list of blockchain transactions for the invoice

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

AML report for invoice

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

Invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Approve AML waiting invoice and continue processing

Approves an invoice that is in AML waiting status and continues with transferring funds to merchant wallet. Only works for invoices in status 13 (Awaiting AML decision).

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

Invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Request for refund

Creates a refund for the invoice.

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

Invoice UUID

Request Body schema: application/json
required
refund_address
required
string

REQUIRED. Address where funds will be refunded.

amount
number <double>

The amount to refund. If not specified, the full amount will be refunded

token
string

Token to refund

network
string

Network to refund

Responses

Request samples

Content type
application/json
{
  • "refund_address": "TJRyWwFs9wTFGZg3JbrVriFbNfCug5tDeC",
  • "amount": 0.1,
  • "token": "string",
  • "network": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

wallets

Get list of merchant wallets

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Update wallet settings

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

wallet UUID

Request Body schema: application/json
aml_action
string
Default: "none"
Enum: "none" "wait"
aml_threshold
integer [ 0 .. 100 ]

Responses

Request samples

Content type
application/json
{
  • "aml_action": "none",
  • "aml_threshold": 100
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

balance

Get list of merchant wallets

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

operations

Get list of merchant financial operations

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

query Parameters
page
integer

page number

per_page
integer <int32> [ 1 .. 100 ]

number of items per page

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

webhook

Get list of webhooks sent

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

UUID of merchant

query Parameters
page
integer

page number

per_page
integer <int32> [ 1 .. 100 ]

number of items per page

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Resend webhook

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

webhook UUID

Responses

transactions

The list of blockchain transactions for the invoice

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

aml reports

AML report for invoice

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

Invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Approve AML waiting invoice and continue processing

Approves an invoice that is in AML waiting status and continues with transferring funds to merchant wallet. Only works for invoices in status 13 (Awaiting AML decision).

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

Invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

refund

Request for refund

Creates a refund for the invoice.

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

Invoice UUID

Request Body schema: application/json
required
refund_address
required
string

REQUIRED. Address where funds will be refunded.

amount
number <double>

The amount to refund. If not specified, the full amount will be refunded

token
string

Token to refund

network
string

Network to refund

Responses

Request samples

Content type
application/json
{
  • "refund_address": "TJRyWwFs9wTFGZg3JbrVriFbNfCug5tDeC",
  • "amount": 0.1,
  • "token": "string",
  • "network": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Confirm refund

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

Refund UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

withdraw

Create a new withdrawal request from the merchant’s wallet

Initiates a withdrawal of funds from the merchant’s wallet to an external wallet address.

🔐 To protect against spoofing and replay attacks, each request must be signed using the X-Merchant-Signature header and include a X-Timestamp.

⚠️ Make sure the target address belongs to the same blockchain network as the source wallet. Sending funds to a wrong or incompatible network can result in permanent loss.

💡 If a memo/tag is required for the target address (e.g., for centralized exchanges or specific networks like XRP or TON), it must be provided in the memo field.

Authorizations:
bearerAuth
path Parameters
merchant_uuid
required
string <uuid>

merchant UUID

header Parameters
X-Merchant-Signature
required
string
Example: 4fa2b3c9e5d1a2...

HMAC SHA256 request body signature

X-Timestamp
required
string
Example: 1712963910000

Unix timestamp in milliseconds. Used to protect against replay attacks. The server will reject the request if the difference between this timestamp and the current server time exceeds the allowed threshold (e.g., 30 seconds).

Request Body schema: application/json
amount
required
number <float>

Amount in token.

token
required
string
network
required
string
to_address
required
string
wallet_uuid
string <uuid>

Optional source wallet UUID. When omitted, funds are withdrawn from the merchant's current active wallet for the given network. Provide an explicit UUID to withdraw from a quarantine wallet (e.g. to drain a rotated legacy balance).

webhook_url
string

Optional webhook URL for this request. If provided, overrides the default webhook set in the merchant's settings.

external_id
string

external identifier. If specified should be unique

memo
string

tag / memo, if the deposit platform requires you to fill it (e.g. transfer to CEX in TON blockchain)

notes
string

comment for internal usage

skip_confirmation
number
Enum: 0 1

Skip confirmation step. If not specified or 0, then pre-flight request will be created and you should send confirmation request

Responses

Request samples

Content type
application/json
{
  • "amount": 0.1,
  • "token": "string",
  • "network": "string",
  • "to_address": "string",
  • "wallet_uuid": "ca93318c-b493-43b8-bb30-8d2bf6f4b3d1",
  • "webhook_url": "string",
  • "external_id": "string",
  • "memo": "string",
  • "notes": "string",
  • "skip_confirmation": 0
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Confirm a withdrawal request (multi-step process)

Confirms a previously created withdrawal request. This endpoint is used in multi-step withdrawal mode, when the initial request was created with skip_confirmation = 0.

Upon confirmation, the system will initiate the blockchain transaction.

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

withdraw UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Retrieve detailed information about a specific withdrawal

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

withdraw UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

directory

Get networks and tokens supported by the service

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Fees in different networks

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

public

Retrieve publicly available information about a merchant

Returns general merchant details (such as name, website, and payment URLs) that can be safely exposed to end users.

Intended for public use on payment pages or in merchant directories.

path Parameters
uuid
required
string <uuid>

merchant UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Retrieve public details of an invoice

path Parameters
uuid
required
string <uuid>

invoice UUID

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Set the payment currency and network chosen by the user

Specifies which token and network the user has selected to pay the invoice with.

The system will calculate the final payable amount and update the invoice accordingly.

path Parameters
uuid
required
string <uuid>

invoice UUID

query Parameters
token
required
string

Token, that user chose to pay in

network
required
string

Network, that user chose to pay in

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}