API Documentation

Getting API keys

Payment API key

  • 1. Create a new Merchant account, or open the Merchant Setting tab in your existing merchant (skip to Step 5).
  • 2. After creating a new merchant, go to Setup, enter your Website URL and Description, then click Submit.
  • 3. Verify your domain using one of the available verification methods.
  • 4. Wait for merchant moderation and approval.
  • 5. Once approved, return to Merchant Setting to copy your Payment API Key and Merchant ID.

Payout API key

  • 1. Open the Security section of your personal account
  • 2. Bind two-factor authentication if you haven't already done it
  • 3. Go to API
  • 4. Generate - Payout key (Remember withdrawals will be temporarily blocked for 24 hour after generate new payout API key)
  • 5. Done!

Request format

ENDPOINT 
https://siteapi.firefox.vip/

All requests must be sent via POST method in JSON format.

Request must be signed

Authentication

The authentication process is carried out by sending 2 HTTP headers:

NameDefinition
merchant*The merchants id, which you can find in the merchants personal account in the settings section.
sign*The sign text is generated the SHA-256 HMAC hash for every request verification. Depending on the API method you are calling, you can use either the payment signature or the payout signature.
timestamp*Current timestamp (Example : round(microtime(true) * 1000))

Example of signature generation in php(for payment key):

$micro_time = round(microtime(true) * 1000); $merchant = 'merchant name'.$micro_time; $payment_key = 'Payment api key'; $hmac = hash_hmac('sha256', $merchant, $payment_key, true);

Example of signature generation in php (for payout key):

$micro_time = round(microtime(true) * 1000); $user_uid = 'user uid'.$micro_time; $payout_key = 'Payout api key'; $hmac = hash_hmac('sha256', $user_uid, $payout_key, true);

Request example

curl https://siteapi.firefox.vip/invoice-builder \
-X POST \
-H "merchant: 870b646d79ety663c8d66cc82c489738" \
-H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
-H "timestamp: 1771823631014" \
-H "Content-Type: application/json" \
-d '{ "invoice_type": "invoice", "item_amount": "0.01", "merchant_id": "870b646d79ety663c8d66cc82c489738", "client_payment_currency": "BTC", "client_payment_network": "BTC", "period": "3" }'

Getting started

Selecting the type of integration

There are 2 types of integration

1. Invoice

This payment method is suitable for paying for goods with a specific amount.

You can specify the currency, then the payer can select the cryptocurrency and network on the payment page.You can also specify the crypto-currency and network immediately, then a crypto-currency address will be generated and you can give it to the client.

Once the client has paid, you will receive a notification - a webhook, which indicates the status, the payment amount and hash, as well as additional data (more details - Link )

If the client didn't pay, you will receive the cancel status.

If the client sent the exact amount, you will receive a paid status.

If the client sent a lower amount, you will receive the wrong_amount status.

If the client sent a higher amount, you will receive the paid_over status.

To allow the client to pay the rest, pass the parameter is_payment_multiple = true

On the payment page, the client will be notified that there is a surcharge to be paid. If the client doesn't pay the rest of an amount, you will receive a webhook with the wrong_amount status, when the invoice expires.


2. Static wallet

Suitable for balance top-up

You can create a static address in a specific currency and network. The address will be attached to the order_id

All transactions sent to this address will be credited regardless of the amount.

Creating an invoice

POST 
https://siteapi.firefox.vip/invoice-builder

Request

Query parameters

NameParameter typeDefinition
invoice_type*stringSpecifies the type of invoice to be created. Currently, only invoice is supported.
item_amount*stringAmount to be paid.
If there are pennies in the amount, then send them with a separator. Example: 10.28
merchant_id*stringMerchant ID in your system
period*integerThe lifespan of the issued invoice
order_idstringOrder ID in your system
The parameter should be a string consisting of alphabetic characters, numbers, underscores, and dashes. It should not contain any spaces or special characters.

The order_id must be unique within the merchant invoices/static wallets

When we find an existing invoice with order_id, we return its details, a new invoice will not be created.
client_payment_currencystringCurrency Code
client_payment_networkstringBlockchain network code
fiat_currencystringSpecifies the fiat currency to be used for the payment. Supported values include currencies such as USD, EUR, etc.
url_callbackstring | urlURL, to which the webhook will be sent after each top-up of the wallet
url_successstring | urlAfter successful payment, the user can click on the button on the payment form and return to this URL.
url_returnstring | urlBefore paying, the user can click on the button on the payment form and return to the store page at this URL.
additional_datastring | max: 255Additional information for you (not shown to the client)
except_currenciesarrayList of excluded currencies for payment
course_sourcestring | Available values
  • Binance
  • If not passed, Firefox.VIP exchange rates are used. The service from which the exchange rates are taken for conversion in the invoice.
    discountintegerSpecifies the discount percentage applied to the payment. For example, passing 5 will apply a 5% discount to the invoice amount. The discount is applied only when a specific cryptocurrency is selected for the invoice.
    subtractintegerPercentage of the payment commission charged to the client. For example, if the commission is 1% and the invoice amount is 100 USDT, the client will pay 101 USDT when the commission is fully charged to the client.
    payment_accuracyintegerAcceptable payment inaccuracy percentage. If set (e.g., 5), the invoice will be marked as Paid even if the client pays at least 95% of the required amount. The actual paid amount will be credited to the balance.
    payer_emailstring | nullPayer's email

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/invoice-builder \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "invoice_type": "invoice", "item_amount": "0.01", "merchant_id": "870b646d79ety663c8d66cc82c489738", "client_payment_currency": "BTC", "client_payment_network": "BTC", "period": "3" }'

    Response example

    { "success": true, "message": "Invoice has been generated", "data": { "payment_id": "BGPTGWYGPWG4TBEDPBNVM5CUBVZ", "payment_address": "1GT5stn4....R3VA5gPN", "qrcode_url": "data:image/svg+xml;base64,PD94bWw........3ZnPgo=", "payment_type": "invoice", "order_id": "39422afd84af8fc", "status": "active", "period": "1", "period_start_at": "2026-02-05 07:43:18", "period_end_at": "2026-02-05 08:43:18", "amount": "0.9", "currency": "BTC", "network": "BTC", "url": "http://firefox.vip/pay/BGPTGWYGPWG4TBEDPBNVM5CUBVZ/payment" } }

    Possible errors

    Validation errors

    Example responses:

    If some parameter is required and not passed:

    Response example

    { "success": false, "data": { "item_amount": [ "The item amount field is required." ], "client_payment_currency": [ "The client payment currency field is required." ], "client_payment_network": [ "The client payment network field is required." ] }, "message": "Validation error" }

    Currency Not Available: Returned when the requested currency is not supported or not enabled for transactions.

    Response example

    { "success": false, "data": [], "message": "Currency not available." }

    Validation Error: Returned when the provided amount is invalid. The amount must be greater than zero.

    Response example

    { "success": false, "data": { "item_amount": [ "The item amount must be greater than 0." ] }, "message": "Validation error" }

    If technical work occurs and the payment is temporarily unavailable, you can receive this error messages:

    Response example

    { "success": false, "data": [], "message": "Gateway error" }

    Either fiat_currency or client_payment_currency must be provided. Both fields can be filled, but at least one is required.

    Response example

    { "success": false, "data": { "currencymode": [ "The currencymode field is required when client payment currency is not present." ], "client_payment_currency": [ "The client payment currency field is required when currencymode is not present." ] }, "message": "validation" }

    Returned when the provided payer_email is not a valid email address.

    Response example

    { "success": false, "data": { "payer_email": [ "Please enter a valid email address." ] }, "message": "validation" }

    Returned when the subtract value is outside the allowed range (1–100).

    Response example

    { "success": false, "data": { "subtract": [ "The subtract must be between 1 and 100." ] }, "message": "validation" }

    Returned when the payment_accuracy value is outside the allowed range (0–5).

    Response example

    { "success": false, "data": { "payment_accuracy": [ "The payment accuracy must be between 0 and 5." ] }, "message": "validation" }

    Generate a QR-code

    You can generate a QR-code for a static wallet address or for an invoice address. Scanning it, the user will receive the address for depositing funds.

    Generate a QR-code for the static wallet address

    POST 
    https://siteapi.firefox.vip/qrcode-payment

    Request

    Query parameters

    NameParameter typeDefinition
    payment_id*stringPayment ID in your system
    merchant_id*stringMerchant ID in your system

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/qrcode-payment \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "payment_id": "BGPTGWYZ7EUH2ZVSLMXHJ7TLV15", "merchant_id": "870b646d79ety663c8d66cc82c489738" }'

    Response example

    { "success": true, "message": "QR code has been generated", "data": { "qrcode_url": "data:image/svg+xml;base64,PD94bVEnKyW2lg5vZGQiIGQVaSaNfshgdfx....." } }

    Possible error

    This response is returned when the requested payment does not exist in the system.

    Response example

    { "success": false, "data": { "error": 400 }, "message": "Payment not found" }

    Payment information

    POST 
    https://siteapi.firefox.vip/get-payment-info

    Request

    Query parameters

    NameParameter typeDefinition
    payment_id*stringPayment ID in your system
    merchant_id*stringMerchant ID in your system

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/get-payment-info \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "payment_id": "BGPTGWYZ7EUH2ZVSLMXHJ7TLV15", "merchant_id": "870b646d79ety663c8d66cc82c489738" }'

    Response example

    { "success": true, "message": "Payment Information retrived", "data": { "transactions_count": 1 "transactions": { "payment_id": "BGPTGWYS57TJWBD2XKMLGZBJ9W8", "date_time": "2026-01-29T13:58:13.000000Z", "fee": "0.0561115224", "mark_as": "0", "receiving_address": "0x4838B8.....F73cE8B0BADhjie", "from_info": { "txid": "0xace368c40....4arkdncva0bb1ff09fa", "payment_id": "BGPTGWYS57TJWBD2XKMLGZBJ9W8", "from_addr": "0x0e.....d85653673ba2b71773", "to_addr": "0x4838bdfe9........bf73ce8b0bad5f97", "amount": 0.01307999 }, "all_txn": [ { "txid": "0xace368c4b.........6se69ca0bb1ff09fa", "payment_id": "BGPTGWYS57TJWBD2XKMLGZBJ9W8", "from_addr": "0x0easdkfa0924.........673ba2b71773", "to_addr": "0xff06fka........8b0bad5f97", "amount": 0.01307999, "created_at": "2026-02-02T02:55:35.000000Z", "cross_currency": "ETH", "cross": false } ], "valid": "expired", "payment_type": "invoice", "status": 3, "status_text": "overpaid", "original_amount": "0.98", "original_currency": "ETH", "selected_amount": "0", "selected_currency": "ETH", "network": "ETH", "buyer_email": "[email protected]", "invoice": "fb9298b7eb48270", "paid_amount": 2.74946226, "less_amount": "-1.76946227", "received_amount": "132.30023066", "item_name": "sds", "item_number": "0", "item_amount": 0.97999999 }, } }

    Possible error

    Validation errors

    If some parameter is required and not passed:

    Response example

    { "success": false, "data": { "payment_id": [ "The payment id field is required." ] }, "message": "Validation error" }

    Creating a Static wallet

    POST 
    https://siteapi.firefox.vip/static-wallet

    Request

    Query parameters

    NameParameter typeDefinition
    merchant_id*stringMerchant ID in your system
    client_payment_currency*stringCurrency Code
    client_payment_network*stringBlockchain network code
    order_idstringOrder ID in your system
    The parameter should be a string consisting of alphabetic characters, numbers, underscores, and dashes. It should not contain any spaces or special characters.

    The order_id must be unique within the merchant invoices/static wallets

    When we find an existing invoice with order_id, we return its details, a new invoice will not be created.
    url_callbackstring | urlURL, to which the webhook will be sent after each top-up of the wallet

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/static-wallet \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "merchant_id": "870b646d79ety663c8d66cc82c489738", "client_payment_currency": "BTC", "client_payment_network": "BTC" }'

    Response example

    { "success": true, "message": "Static wallet has been generated", "data": { "payment_id": "BGPTGWYMVS7XX5BK2CGZFZTSPSX", "payment_type": "static", "invoice": "94dcce41057363a", "amount": "10.8", "currency": "BTC", "network": "BTC", "payment_address": "13tk7jTr.......TP9u6DpY8JT7", "confirms_needed": 1, "url": "http://firefox.vip/pay/BGPTGWYMVS7XX5BK2CGZFZTSPSX/payment" } }

    Possible errors

    Returned when the client_payment_currency parameter is not provided in the request.

    Response example

    { "success": false, "data": { "client_payment_currency": [ "The client payment currency field is required." ] }, "message": "validation" }

    Currency Not Available: Returned when the requested currency is not supported or not enabled for transactions.

    Response example

    { "success": false, "data": [], "message": "Currency not available." }

    Invalid Merchant ID: Returned when the provided merchant ID does not exist or is incorrect.

    Response example

    { "success": false, "error": "Invalid merchant ID" }

    If technical work occurs and the payment is temporarily unavailable, you can receive this error messages:

    Response example

    { "success": false, "data": [], "message": "Gateway error" }

    Block static wallet

    When you need to block your clients static wallet, all the further payments will not be credited to his balance.

    POST 
    https://siteapi.firefox.vip/static-wallet-block

    Request

    Query parameters

    NameParameter typeDefinition
    payment_id*stringPayment ID in your system
    is_force_refund*boolean(1 = true / 0 = false)

    Request example

    curl https://siteapi.firefox.vip/static-wallet-block \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "payment_id": "BGPTGWYZ7EUH2ZVSLMXHJ7TLV15", "is_force_refund": "1" }'

    Response example

    { "success": true, "message": "Static wallet has been blocked successfully.", "data": { "payment_id": "BGPTGWYMVS7XX5BK2CGZFZTSPSX" } }

    Response example

    { "success": true, "message": "The static wallet status", "data": { "status": "block" } }

    Possible error

    Validation errors

    If some parameter is required and not passed:

    Response example

    { "success": false, "data": { "payment_id": [ "The payment id field is required." ], "is_force_refund": [ "The is force refund field is required." ] }, "message": "Validation failed" }

    Payment history

    Returns a list of invoices

    POST 
    https://siteapi.firefox.vip/get-payment-history

    Request

    Query parameters

    NameParameter typeDefinition
    merchant_id*stringMerchant ID in your system
    status_liststringUse the status_list parameter to filter transactions by their payment statuses

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/get-payment-history \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "merchant_id": "870b646d79ety663c8d66cc82c489738" }'

    Response example

    { "success": true, "message": "Payment history retrived", "data": { "transactions_count": 1 "transactions": [ { "payment_id": "BGPTGWYZFJJ7B34GWLVST79FGBI", "date_time": "2026-02-06T06:37:07.000000Z", "fee": null, "mark_as": "0", "receiving_address": "TRBcPdE......7LNFQUUvRP", "from_info": null, "valid": "active", "payment_type": "static", "mode_creation": "web", "status": 0, "status_text": "waiting", "original_amount": "0.126", "original_currency": "USDT", "selected_amount": "0", "selected_currency": "USDT", "network": "TRC20", "buyer_email": "[email protected]", "invoice": "8487205cf98ffcd", "paid_amount": null, "less_amount": "0.12600000", "received_amount": "0", "item_name": "sds", "item_number": "0", "item_amount": 0.12600000 } ], } }

    Possible error

    Validation errors

    If some parameter is missing and not passed:

    Response example

    { "success": false, "error": "Invalid merchant ID" }

    If an invalid value is provided for the status_list parameter

    Response example

    { "success": false, "data": [], "message": "Invalid status values " }

    Transfer to personal wallet

    Transfer funds from your business wallet to your personal wallet

    POST 
    https://siteapi.firefox.vip/fund-transfer

    Request

    Query parameters

    NameDefinition
    from_wallet*From currency (business)
    to_wallet*To currency (personal)
    amount*Amount to be transfer
    coin*Currency Code

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/fund-transfer \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "from_wallet": "business", "to_wallet": "personal", "amount": "1", "coin": "ETH" }'

    Response example

    { "success":true, "message":"Transfer has been successfully completed." }

    Possible error

    Validation errors

    If some parameter is required and not passed:

    Response example

    { "success": false, "message": "Validation error", "data": { "coin": [ "The coin field is required." ] } }

    Transfer to business wallet

    Transfer funds from your personal wallet to your business wallet

    POST 
    https://siteapi.firefox.vip/fund-transfer

    Request

    Query parameters

    NameDefinition
    from_wallet*From currency (personal)
    to_wallet*To currency (business)
    amount*Amount to be transfer
    coin*Currency Code

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/fund-transfer \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "from_wallet": "personal", "to_wallet": "business", "amount": "1", "coin": "ETH" }'

    Response example

    { "success":true, "message":"Transfer has been successfully completed." }

    Possible error

    Validation errors

    Returned when the amount value is zero or negative.

    Response example

    { "success": false, "message": "Validation error", "data": { "amount": [ "The amount must be greater than 0." ] } }

    Payout history

    POST 
    https://siteapi.firefox.vip/withdraw_history

    Request

    Query parameters

    No parameters

    Request example

    curl https://siteapi.firefox.vip/withdraw_history \
    -X GET \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \

    Response example

    { "success": true, "data": { "count": 1, "records": [ { "id": 146, "txid": "09ac77f2fb92314f0dcd", "coin": "BTC", "from_addr": "", "to_addr": "bc1qxy2........n3p83kkfjhx0wlh", "amount": "0.49999800", "fee": "0.00000200", "total": "0.50000000", "status": "Waiting for admin confirmation", "created_at": "19-09-2025 09:17:41", "network": "BTC" } ] }, "message": "coin withdraw history" }

    Possible error

    Missing Merchant Header: Returned when the required merchant authentication header is not included in the request.

    Response example

    { "success": false, "error": "Missing merchant header" }

    Creating a payout

    POST 
    https://siteapi.firefox.vip/payout_verification

    Request

    Query parameters

    NameParameter typeDefinition
    amount*stringPayout amount in currency
    coin*stringCurrency Code
    network*stringIf you select USDT as the token, you must also specify the network. For example, use network=ERC20 when selected_token=USDT.
    remarkstringDescripton
    save_securestringTrue / False
    tagstringThe destination tag
    to_address*stringTo Address

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/payout_verification \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "amount": "0.001", "coin": "BTC", "network": "BTC", "remark": "payout", "save_secure": "false", "tag": "payout", "to_address": "bc1qxy2kgdfsfhoht.....493p83kkfjhx0w" }'

    Response example

    { "success": true, "data": { "type": "Google", "secure_status": "Normal", "address": "1DMj1Qep......9mS5unpPY", "token": "BTC", "network": "BTC" }, "message": "Withdraw verfied." }

    Possible error

    Coin and Network Mismatch: Returned when the specified coin does not belong to the provided network.

    Response example

    { "success": false, "message": "Coin and Network is mismatch!" }

    Invalid Address: Returned when the provided withdrawal address is not a valid address format.

    Response example

    { "success": false, "message": "Validation error", "data": { "to_address": [ "The withdraw address is not a valid address." ] } }

    Payout confirmation

    POST 
    https://siteapi.firefox.vip/payout_confirmation

    Request

    Query parameters

    NameParameter typeDefinition
    coin*stringCurrency Code
    amount*stringPayout amount
    network*stringIf you select USDT as the token, you must also specify the network. For example, use network=ERC20 when selected_token=USDT.
    to_address*stringTo Address
    tagstringThe destination tag
    remarkstringDescription
    save_securestringTrue / False
    otp*stringOne Time Password

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/payout_confirmation \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "amount": "0.001", "coin": "BTC", "network": "BTC", "remark": "payout", "save_secure": "false", "tag": "payout", "to_address": "bc1qxy2kgdf.....q2n0yrf2493p83kkfjhx0w", "otp": "123456" }'

    Response example

    { "success": true, "data": "[]", "message": "Withdraw request sent successfully" }

    Possible error

    Coin and Network Mismatch: Returned when the specified coin does not belong to the provided network.

    Response example

    { "success": false, "message": "Coin and Network is mismatch!" }

    List of discounts & commission

    GET 
    https://siteapi.firefox.vip/discount-list

    Request

    Query parameters

    No parameters

    Request example

    curl https://siteapi.firefox.vip/discount-list \
    -X GET \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \

    Response

    Response parameters

    NameDefinition
    currencyCurrency Code
    networkBlockchain network code
    discountDiscount percent
    commissionCommission percent

    Response example

    { "success": true, "message": "Merchant discounts & commissions fetched successfully", "data": [ { "currency": "BTC", "network": "BTC", "discount": 0, "commission": 3.5 }, { "currency": "ETH", "network": "ETH", "discount": 0, "commission": 3.5 }, { "currency": "LTC", "network": "LTC", "discount": 0, "commission": 4 } ] }

    Exchange rates list

    POST 
    https://siteapi.firefox.vip/exchange-rate

    Request

    Query parameters

    NameDefinition
    currency*Currency Code

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/exchange-rate \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "currency": "ETH" }'

    Response

    Response parameters

    NameDefinition
    fromFrom currency
    toTo currency
    courseExchange rate

    Response example

    { "success": true, "message": "Exchange rate fetched successfully", "data": [ { "from": "BTC", "to": "USD", "course": "90689.84000000" } ] }

    Balance

    GET 
    https://siteapi.firefox.vip/balance

    Request

    Query parameters

    No parameters

    Response

    Response parameters

    NameDefinition
    balancemerchant / user

    Business:

    NameDefinition
    uidUser's unique id
    balanceBusiness wallet balance
    currencyWallet currency code

    Personal:

    NameDefinition
    uidUser's unique id
    balancePersonal wallet balance
    currencyWallet currency code

    Response example

    { "success": true, "message": "Balance fetched successfully", "data": [ { "balance": { "merchant": [ { "uid": "9e0e8e9fdfd1288", "balance": "30.00000000", "currency": "BTC" }, { "uid": "9e0e8e9fdfd1288", "balance": "31.20000000", "currency": "ETH" }, { "uid": "9e0e8e9fdfd1288", "balance": "32.00000000", "currency": "LTC" } ], "user": [ { "uid": "9e0e8e9fdfd1288", "balance": "10000.00000000", "currency": "BTC" }, { "uid": "9e0e8e9fdfd1288", "balance": "9992.00000000", "currency": "ETH" }, { "uid": "9e0e8e9fdfd1288", "balance": "3.00000000", "currency": "USDT" } ] } } ] }

    Calculation of the withdrawal amount

    POST 
    https://siteapi.firefox.vip/calc-withdraw

    Request

    Query parameters

    NameDefinition
    coin*Currency code for the payout
    network*If you select USDT as the token, you must also specify the network. For example, use network=ERC20 when selected_token=USDT.
    amount*Payout amount
    address*The address of the wallet to which the withdrawal will be made

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/calc-withdraw \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "coin": "BTC", "network": "BTC", "amount": "0.001", "address": "bc1qxy2kgdfsf....yrf2493p83kkfjhx0w" }'

    Response

    Response parameters

    NameDefinition
    commissionCommission amount
    merchant_amountThe amount to be removed from the merchant's balance
    payout_amountThe amount that was sent to the address.

    Response example

    { "success": true, "message": "Calculating the withdraw commission successfully", "data": [ { "commission": "0.00001000", "merchant_amount": "0.00100000", "payout_amount": "0.00099000" } ] }

    Possible error

    This response is returned when the provided coin symbol or network name does not match any supported coin-network pair in the system.

    Response example

    { "success": false, "data": [], "message": "Invalid coin or network" }

    Validation Error: Returned when the provided amount is invalid. The amount must be greater than zero.

    Response example

    { "success": false, "data": { "amount": [ "The amount must be greater than 0." ] }, "message": "Validation error" }

    List of services

    Returns a list of available payout services. Payout services store settings that are taken into account when creating a payout. For example. currencies, networks, minimum and maximum limits, commissions.

    GET 
    https://siteapi.firefox.vip/payout-services

    Request

    Query parameters

    No parameters

    Request example

    curl https://siteapi.firefox.vip/payout-services \
    -X GET \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \

    Response

    Response parameters

    NameDefinition
    networkBlockchain network code
    currencyCurrency Code
    is_availableWhether a payment service is available (true / false)

    Response example

    { "success": true, "message": "Services are fetched successfully", "data": [ { "network": "BTC", "currency": "BTC", "is_available": true, "limit": { "min_amount": "0.00100000", "max_amount": "1.00000000" }, "commission": { "fee_amount": "0.00000000", "percent": "0.00040000" } }, { "network": "ETH", "currency": "ETH", "is_available": true, "limit": { "min_amount": "0.01000000", "max_amount": "2.00000000" }, "commission": { "fee_amount": "0.00000000", "percent": "1.00000000" } }, { "network": "LTC", "currency": "LTC", "is_available": true, "limit": { "min_amount": "1.00000000", "max_amount": "10.00000000" }, "commission": { "fee_amount": "0.00000000", "percent": "2.00000000" } }, { "network": "TRX", "currency": "TRX", "is_available": true, "limit": { "min_amount": "0.00000000", "max_amount": "0.00000000" }, "commission": { "fee_amount": "0.00000000", "percent": "0.00000000" } } ] }

    Payout statuses

    NameDefinition
    ProcessThe payout is being processed
    CheckThe payout is under verification
    PendingThe payout is pending
    ApprovedThe payout has been approved
    RejectedThe payout has been rejected

    Reference

    Currency CodeNetwork codeDescription
    Loading...

    Set discount to payment method

    POST 
    https://siteapi.firefox.vip/discount-set

    Request

    Query parameters

    NameDefinition
    currency*Currency Code
    network*Blockchain network code
    discount_percent*Discount percent

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/discount-set \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "currency": "BTC", "network": "BTC", "discount_percent": "1" }'

    Response

    Response parameters

    NameDefinition
    currencyCurrency Code
    networkBlockchain network code
    discount_percentDiscount percent

    Response example

    { "success": true, "message": "Discount updated successfully", "data": { "currency": "ETH", "network": "ETH", "discount_percent": "1.00000000" } }

    Possible error

    Invalid Currency or Network: Returned when the provided currency or network is not supported by the system.

    Response example

    { "success": false, "data": [], "message": "Invalid currency or network" }

    Webhook

    Response

    Response parameters

    NameDefinition
    payment_idPayment ID in your system
    currencyCurrency Code
    networkBlockchain network code
    typeinvoice / static
    order_idOrder ID in your system
    requested_amountRequest amount of the invoice
    payment_amountAmount actually paid
    commissionCommission amount
    statusPayment status
    status_text
    • waiting
    • completed
    • partially completed
    • blocked
    • overpaid
    from_addressFrom Address
    to_addressTo Address
    txt_idTransaction hash on the blockchain.

    Response example

    { "success": true, "message": "Webhook data fetched successfully", "data": { 'payment_id' => 'BGPTGWYAFI5QNZY5XD6SD1ZGAD7', 'currency' => 'LTC', 'network' => 'LTC', 'type' => 'invoice', 'order_id' => 'sdwe2', 'requested_amount' => 1.0, 'payment_amount' => 1.0, 'commission' => '0', 'status' => 'completed', 'status_text' => 'completed', 'from_address' => 'bc1qxy2kg........gisdgshsig', 'to_address' => 'bc1qxy2.........3p83kkfjhx0wlh', 'txt_id' => 'kfdh.......ufghijhdfigudfiuguhu' } }

    Resend webhook

    Resend the webhook by invoice. You can resend the webhook only for finalized invoices, that is, invoices in statuses: partially completed, paid, overpaid.

    To resend the webhook on the invoice, theurl_callback must be specified at the time of invoice creation.

    POST 
    https://siteapi.firefox.vip/payment-resend

    Request

    Query parameters

    NameDefinition
    payment_id*Payment ID in your system
    merchant_id*Merchant ID in your system

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/payment-resend \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "payment_id": "BGPTGWYZ7EUH2ZVSLMXHJ7TLV15", "merchant_id": "870b646d79ety663c8d66cc82c489738" }'

    Response example

    { "success": true, "message": "Resend webhook initialized", "data": "Initialized" }

    Possible error

    Shown when the notification you are trying to access is no longer available.

    Response example

    { "success": false, "data": { "state": 1 }, "message": "Notification not found" }

    If the invoice is not found

    Response example

    { "success": false, "data": { "state": 1 }, "message": "Payment not found" }

    If you will not pass a uuid and payment_id, you will receive this message. It means that at least one of the parameters is required.

    Response example

    { "success": false, "data": { "payment_id": [ "The payment id field is required." ] }, "message": "validation error" }

    Getting started

    Payout API key

    Follow the instructions below to obtain an API key to work with payouts:

    1. Open the settings section of your account.

    2. Bind two-factor authentication if you haven't already done it.

    3. Go to the - API.

    nodata

    4. Generate - Payout key (Remember withdrawals will be temporarily blocked for 24 hour after generate new payout API key).

    5. Copy your payout API key.

    6. Done!

    Payment statuses

    Response

    Response parameters

    NameDefinition
    waitingPayment in processing.
    completedThe payment was successful and the client paid exactly as much as required.
    partially completedThe payment was received but the amount paid is less than the required amount.
    overpaidThe payment was successful and client paid more than required.
    blockThe payment cannot be processed because the wallet or transaction has been restricted.
    refundThis payment has been refunded and can no longer be processed.

    List of services

    Returns a list of available payment services. Payment services store settings that are taken into account when creating an invoice. For example. currencies, networks, minimum and maximum limits, commissions.

    POST 
    https://siteapi.firefox.vip/payment-services

    Request

    Query parameters

    No parameters

    Request example

    curl https://siteapi.firefox.vip/payment-services \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{}'

    Response

    Response parameters

    NameDefinition
    networkBlockchain network code
    currencyCurrency Code
    is_availableWhether a payment service is available (true / false)

    Response example

    { "success": true, "message": "Payment services fetched successfully", "data": [ { "currency": "BTC", "network": "BTC", "is_available": true, "limit": { "min_amount": "0.00000001", "max_amount": "100000000000.00000000" }, "commission": { "fee_amount": "2.00000000", "static_fee": "4.00000000", "percent": "0.00000000" } }, { "currency": "ETH", "network": "ETH", "is_available": true, "limit": { "min_amount": "0.00000000", "max_amount": "0.00000000" }, "commission": { "fee_amount": "2.00000000", "static_fee": "2.00000000", "percent": "0.00000000" } } ] }

    Refund

    POST 
    https://siteapi.firefox.vip/refund

    Request

    Query parameters

    NameDefinition
    address*The address of the wallet to which the refund will be made
    payment_id*Payment ID in your system

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/refund \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "address": "bc1qxy2.....2493p83kkfjhx0w", "payment_id": "BGPTGWY6PNH9M71XL93JVBM8AQR" }'

    Response example

    { "success": true, "message": "Refunded successfully.", "data": [] }

    Possible error

    Validation Error - Invalid Address: Returned when the provided address does not match the required format.

    Response example

    { "success": false, "data": { "address": [ "The address is not a valid address." ] }, "message": "Validation error" }

    Returned when the payment has already been refunded.

    Response example

    { "success": false, "data": [], "message": "Payment has already been refunded." }

    Missing Merchant Header: Returned when one or more required merchant headers are not included in the request.

    Response example

    { "success": false, "error": "Missing merchant header" }

    Refund payments on blocked address

    POST 
    https://siteapi.firefox.vip/blocked-address-refund

    You can make a refund only once.

    Request

    Query parameters

    NameDefinition
    address*Refund all blocked funds to this address
    payment_id*Payment ID in your system

    *- mandatory parameter

    Request example

    curl https://siteapi.firefox.vip/blocked-address-refund \
    -X POST \
    -H "merchant: 870b646d79ety663c8d66cc82c489738" \
    -H "sign: 60458ed7901293c6519e4b38c4f997b469167ad61b31346537155b6f5188b7239bdggd" \
    -H "timestamp: 1771823631014" \
    -H "Content-Type: application/json" \
    -d '{ "address": "bc1qxy2.....2493p83kkfjhx0w", "payment_id": "BGPTGWY6PNH9M71XL93JVBM8AQR" }'

    Response example

    { "success": true, "message": "Refunded successfully.", "data": [] }

    Possible error

    Validation Error - Invalid Address: Returned when the provided address does not match the required format.

    Response example

    { "success": false, "data": { "address": [ "The address is not a valid address." ] }, "message": "Validation error" }

    Returned when a refund is attempted again for a blocked static wallet that has already been refunded.

    Response example

    { "success": false, "data": [], "message": "Refund is only allowed once for the Block Static Wallet." }

    Missing Merchant Header: Returned when one or more required merchant headers are not included in the request.

    Response example

    { "success": false, "error": "Missing merchant header" }