Skip to content
NovaroPayDocs
PSP-Version 2026-10-25.acacia
Theme
Merchant portal(opens in a new tab)

Settlements

A settlement withdraws money from your balance to your own wallet in USDT on TRON (TRC20), at the exchange rate and fee of your agreement.

  1. Your admin adds a USDT wallet in the merchant portal (Settings › Payout addresses). It becomes active 24 hours later: see Payout addresses.
  2. You request a settlement with POST /settlements, or with Request settlement in the merchant portal. Its amount is reserved from your available balance at once, and the settlement is pending.
  3. Our finance team sends the USDT to the settlement’s address and marks it paid with the TRON transaction’s hash. You get the webhook event settlement.paid, and an email.

Settlements are carried out by our team, not instantly: rely on settlement.paid, not on an expected time. Your account manager can also make a settlement for you; it then has origin novaropay, and GET /settlements lists it beside yours.

Settlements are live mode only: a test key’s request is 409 livemode_only, and the test environment has none to list.

Status
pending Requested: the amount is reserved from your available balance. Our team has not sent it yet.
paid The USDT was sent: tx_hash and tronscan_url show the transfer on TRON.
canceled Canceled by our team; cancel_reason says why. The amount is back in your available balance.
reversed Rare: a paid settlement that did not reach you, taken back after review. The amount is back in your available balance.

One request at a time. While a settlement you requested is pending on the market, a new request is 409 settlement_request_pending, and its message names the pending one. You cannot cancel a request yourself: ask your account manager, who cancels it with a reason.

The fee and the rate come from your agreement and are fixed on the settlement when you request it:

fee = round(amount × fee_percent) in INR
usdt_amount = floor6((amount − fee) / exchange_rate) − fee_fixed_usdt

For ₹98,000 at a 3% fee, a fixed fee of 1 USDT and 109.50 INR per USDT: ₹98,000 − ₹2,940 = ₹95,060, which is 868.127853 USDT, less 1: 867.127853 USDT. An amount that comes to zero USDT or less is 400 amount_too_small.

While a settlement is pending, our team may update its exchange rate to the current one before sending it; you then get settlement.updated with the new exchange_rate and usdt_amount. The amount and the address of your request never change.

Request a settlement
curl https://api.63-180-91-99.sslip.io/settlements \
-H "Authorization: Bearer sk_live_in_…" \
-H "Idempotency-Key: 0b7e5c1a-2f4d-4a9e-8c3b-6d5e4f3a2b1c" \
-H "Content-Type: application/json" \
-d '{
"amount": 9800000,
"currency": "INR",
"description": "October week 2"
}'

amount is what leaves your available balance, fee included; payout_address names an active address of yours, your default when you leave it out. Idempotency-Key is required: a retry with it answers the same settlement and reserves nothing more (see Idempotent requests). Nothing is made, and nothing reserved, when a request is refused:

Answer When
409 livemode_only A test key.
400 balance_insufficient amount is more than your available balance; the message names what is available.
409 settlement_request_pending A settlement you requested is still pending on the market.
409 payout_address_missing No payout_address, and you have no default address.
400 payout_address_not_active The address is still in its first 24 hours, or was blocked or deleted.
404 resource_missing payout_address names none of your addresses.
400 amount_too_small The amount comes to zero USDT or less.
503 temporarily_unavailable Your terms are being updated: retry in a moment with the same key.
409 idempotency_key_in_use Another settlement of yours was being made at the same moment: retry with the same key.
400 idempotency_error The key was used for another request: see Idempotent requests.
409 settlement_terms_missing Your agreement sets no settlement fee or rate on the market yet.
400 parameter_invalid currency is not your balance’s currency, or amount is too large to work out.
Field
id Unique id, st_<market>_….
status pending, paid, canceled or reversed. Treat a status you do not know as not paid.
origin merchant: you requested it, by API or in the merchant portal. novaropay: our team made it.
market The market it pays out of, e.g. IN.
amount, currency What leaves your balance, fee included, in the smallest unit.
fee The percentage fee, in the smallest unit.
fee_fixed_usdt The fixed fee in micro-USDT (6 decimal places): 1000000 is 1 USDT.
exchange_rate Units of the currency per 1 USDT, as a decimal string, e.g. "109.5000".
usdt_amount What your wallet receives, in micro-USDT: 867127853 is 867.127853 USDT.
payout_address A copy of the wallet it is sent to, taken when it was made: { id, network, asset, address }.
tx_hash, tronscan_url The TRON transfer once paid; null before.
cancel_reason Why our team canceled it; null otherwise.
description Your own words on your request, up to 100 characters; null when none.
created, paid_at, canceled_at, reversed_at In seconds since the Unix epoch; null until then.
livemode Always true.
version Grows with every change: of two copies, the higher is the newer.
rate, usdt, address The same as exchange_rate, usdt_amount and payout_address.address: their names in 2026-10-19.acacia, kept for integrations that read them.

The settlement.* webhook events carry the same object.

Endpoints

  • GET /settlementsListSettlements
  • POST /settlementsCreateSettlement
  • GET /settlements/{id}GetSettlement

Loading the reference…