Payments

Orders & reconciliation

Query orders, understand every field, and reconcile against your books.

Query an order

By HTP id:

http
GET /open/v1/orders/0b7a9c62-3f1e-4a2b-9d6c-5e4f3a2b1c0d

By your own number (order_type defaults to PAYMENT; use your out_refund_no with REFUND):

http
GET /open/v1/orders?out_order_no=A20261107-0001&order_type=PAYMENT

Remember to sign the path with its query string.

The order object

Field Type Description
id UUID HTP order ID
out_order_no string Your number (out_refund_no for refunds)
order_type enum PAYMENT, REFUND, PAYOUT
parent_id UUID Refunds only: the refunded payment
environment enum SANDBOX, PRODUCTION
status enum CREATED, PAID, CLOSED (payments); SUCCEEDED (refunds, payouts)
amount amount Order amount
refunded_amount amount Payments: total refunded so far
fee_amount amount Payments: platform fee. 0.00 for refunds and payouts
net_amount amount Payments: credited to you (amount − fee_amount). Others: amount
currency string USDT
description string Your description or refund reason
user_sub string Payer / payee sub. Empty on an unpaid payment created without payer_sub
checkout_url URL Only while a payment is CREATED and not expired
expires_at time Payments: checkout deadline
completed_at time When it was paid / succeeded
created_at time Creation time

Fields without a value may be omitted from the JSON. New fields can be added at any time — ignore unknown fields.

Reconciliation

Every day, compare your records with HTP:

  1. In the console open Orders → Statement and download the CSV for a date range (UTC dates, up to 31 days).
  2. Match each row to your order by out_order_no and order_type; compare status, amount, fee_amount and net_amount.
  3. For orders you still have as awaiting payment, call GET /open/v1/orders/{id}: PAID means you missed a callback; CLOSED means it expired.
  4. Your wallet balance change for the day should equal Σ net_amount(PAID payments) − Σ amount(refunds) − Σ amount(payouts), plus sandbox fee rebates if you test with the same wallet.

Sandbox fee rebates

Sandbox payments compute fee_amount and net_amount exactly like production, but the fee is credited back to your wallet as a separate sandbox fee rebate transaction, so testing costs nothing.