Overview
GatePay provides multiple reconciliation tools to ensure account accuracy:- Balance Query: Real-time available balance by currency
- Order Fee Query: Verify fees and settlement amounts at the order level
- Funds Ledger Query: Track all fund movements by transaction
Balance Query
The balance query API retrieves the available balance of a merchant payment account by currency. For settlement, payout, and risk decisions, real-time query results must be used.Common Use Cases
- Pre-settlement validation: Confirm available balance before initiating settlement
- Period-end snapshots: Capture balance at close of business for accounting
- Operational monitoring: Real-time balance alerts and thresholds
- Multi-currency management: Track balances across different currencies
API Reference
Endpoint:GET /v1/pay/balance/query
Institutional Endpoint: POST /payment/open/institution/v1/balance
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
currencies | array | No | List of currency codes to query (e.g., [“USDT”, “BTC”, “USD”]) |
Response Fields
| Field | Type | Description |
|---|---|---|
currency | string | Currency code |
available | string | Balance available for immediate use |
hold | string | Amount held by pending orders or payouts |
total | string | Total balance (available + hold) |
last_updated | timestamp | Timestamp of last balance update |
Example Request
Example Response
Integration Steps
- Call the balance query API using
GET /v1/pay/balance/querywith desired currencies - Store balances by currency in your merchant’s local accounting system
- Compare with local records to identify discrepancies
- Alert on thresholds if balance falls below operational minimums
Order Fee Query
The order fee query API provides detailed fee breakdown and settlement amounts at the individual order level. Use this for financial reconciliation and exception investigation.Common Use Cases
- Financial reconciliation: Verify fees match merchant expectations
- Multiple or partial payments: Reconcile complex order scenarios
- Exception investigation: Identify fee anomalies or discrepancies
- Settlement confirmation: Confirm amounts before initiating payout
API Reference
Endpoint:GET /api/open/v1/pay/order/fee/query
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
orderId | string | Conditional | GatePay order ID |
merchant_order_no | string | Conditional | Merchant-generated order number |
orderId or merchant_order_no (at least one required).
Response Fields
| Field | Type | Description |
|---|---|---|
orderId | string | GatePay order ID |
merchant_order_no | string | Merchant order number |
orderAmount | string | Original order amount |
payAmount | string | Amount customer paid |
settlementAmount | string | Amount credited to merchant account |
gatewayFee | string | GatePay processing fee |
networkFee | string | Blockchain network fee (if applicable) |
discountAmount | string | Discounts or rebates applied |
currency | string | Settlement currency |
status | string | Order status |
created_at | timestamp | Order creation time |
settled_at | timestamp | Settlement completion time |
Example Request
Example Response
Integration Steps
- Call the order fee query API using
GET /api/open/v1/pay/order/fee/querywith order identifier - Store the query result alongside your local order master data
- Compare settlement amounts with expected values
- Flag discrepancies for manual review if fee structure differs
Funds Ledger Query
The funds ledger query provides a complete transaction history of all fund movements in and out of the merchant account. This is essential for audit trails and comprehensive reconciliation.Common Use Cases
- End-of-day reconciliation: Aggregate all fund movements for the day
- Audit tracing: Track fund origins and destinations for compliance
- Exception investigation: Identify timing issues or missing transactions
- Financial reporting: Generate detailed movement reports by type and currency
API Reference
Endpoint:GET /v1/pay/bill/orderlist
Institutional Endpoint: GET /payment/open/institution/v1/pay/bill/orderlist
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
start_time | timestamp | No | Start of time range (UTC milliseconds) |
end_time | timestamp | No | End of time range (UTC milliseconds) |
page | integer | No | Page number for pagination (1-indexed, default 1) |
limit | integer | No | Records per page (default 20, max 100) |
currency | string | No | Filter by currency code |
type | string | No | Filter by transaction type (see enumeration below) |
order_id | string | No | Filter by related order ID |
Response Fields
| Field | Type | Description |
|---|---|---|
ledger_id | string | Unique ledger entry identifier (use as deduplication key) |
type | string | Transaction type (see enumeration below) |
currency | string | Currency of transaction |
amount | string | Transaction amount (positive or negative) |
balance_before | string | Balance before transaction |
balance_after | string | Balance after transaction |
business_id | string | Related order, refund, transfer, or payout ID |
description | string | Human-readable description |
created_at | timestamp | Transaction timestamp (UTC milliseconds) |
metadata | object | Additional context (e.g., fee breakdown) |
Transaction Type Enumeration
| Type | Direction | Description |
|---|---|---|
PAYMENT | Inbound | Customer payment received |
PAYOUT | Outbound | Settlement to merchant’s bank account |
REFUND | Outbound | Refund issued to customer |
TRANSFER_IN | Inbound | Funds transferred from institution master account |
TRANSFER_OUT | Outbound | Funds transferred to sub-account or peer account |
CHARGE | Outbound | Platform commission or fee deduction |
SWAP | Neutral | Currency conversion (may show as two entries) |
ADJUSTMENT | Variable | Manual adjustment (credit or debit) |
DEPOSIT | Inbound | Direct deposit by merchant |
Example Request
Example Response
Integration Steps
- Pull funds ledger records by time range with pagination using
GET /v1/pay/bill/orderlist - Persist ledger records in your database using
ledger_idas the primary deduplication key - Associate ledger records with business orders using
business_idand metadata - Generate reconciliation summaries aggregated by:
- Currency
- Transaction type
- Date or time bucket
- Related business entity (order, refund, transfer, etc.)
- Compare with local records to identify discrepancies
- Flag unmatched records for investigation
Recommended End-of-Day Reconciliation Flow
Follow this step-by-step process for comprehensive daily reconciliation:Step 1: Capture Account Balance Snapshot
- Available balance
- Hold amount
- Total balance
- Snapshot timestamp
Step 2: Pull Funds Ledger Records
ledger_id.
Step 3: Pull Order Fees and Settlement Amounts
For each order settled during the day:Step 4: Match and Reconcile Records
Create a reconciliation table with the following structure:| Ledger ID | Type | Currency | Amount | Business ID | Matched | Notes |
|---|---|---|---|---|---|---|
| LED_001 | PAYMENT | USDT | +500 | ORD_123 | ✓ | Matched with order |
| LED_002 | REFUND | USDT | -100 | REF_456 | ✓ | Matched with refund |
| LED_003 | TRANSFER_OUT | USDT | -1000 | TRN_789 | ✓ | Institution transfer |
- Match PAYMENT ledger entries to your order system using
business_id - Match REFUND entries to your refund system
- Match TRANSFER_OUT/IN entries to your transfer records
- Match PAYOUT entries to your settlement records
Step 5: Generate Discrepancy Report
Identify records that do not match:| Category | Count | Details |
|---|---|---|
| Missing ledger entries | 0 | Orders with no corresponding ledger entry |
| Extra ledger entries | 1 | Ledger entries with no corresponding order |
| Amount mismatches | 0 | Matched records with different amounts |
| Timing discrepancies | 2 | Entries recorded on different dates |
Step 6: Perform Manual Review
For each discrepancy:- Review the ledger entry description and metadata
- Correlate with business records (orders, refunds, transfers)
- Investigate timing (same-day vs. next-day settlement)
- Document resolution (matched, explained, or escalated)
Step 7: Output Reconciliation Result
Generate a formal reconciliation statement:Error Handling and Troubleshooting
Common Issues
| Issue | Cause | Resolution |
|---|---|---|
| Balance differs from local records | Timing of settlement or fee posting | Query again after 5-10 minutes; check for pending transactions |
| Missing ledger entries | Delayed posting or query time range misalignment | Expand time range by 1-2 hours; retry query |
| Duplicate ledger entries | Database deduplication failure | Use ledger_id as primary key to prevent duplicates |
| Fee discrepancies | Promotion, rebate, or rate change | Compare with current rate table; check for adjustments |
Best Practices
Data Persistence
- Primary Key: Use
ledger_idfor ledger entries to ensure idempotency - Unique Constraints: Enforce unique constraints on (ledger_id) to prevent duplicates
- Indexing: Index by (
created_at,currency,type) for fast reconciliation queries
Query Optimization
- Time ranges: Query in 24-hour buckets for faster response times
- Pagination: Use
limit=100and iterate through pages to avoid timeout - Filters: Use
currencyandtypefilters to reduce result sets
Alerting and Monitoring
- Threshold alerts: Alert when available balance falls below operational minimum
- Discrepancy alerts: Alert immediately when reconciliation identifies unmatched records
- Timing alerts: Alert if ledger entries are delayed by more than 2 hours
- Callback failure alerts: Alert if expected callbacks are not received within SLA
Documentation and Audit
- Reconciliation logs: Store reconciliation results with timestamp and user ID
- Discrepancy tracking: Maintain audit trail of identified and resolved discrepancies
- Rate cards: Document fee structure and any promotional adjustments
- Settlement terms: Document when and how funds are settled to merchant accounts

