Merchant API (v1)
Server-to-server surface for merchants. Authenticate every call with Authorization: Bearer <api-key>. API keys are stored hashed — treat the issued UUID as a password.
Endpoints
| Method | Path | Purpose |
|---|---|---|
| POST | /api/v1/wallets | Bind a wallet as a sponsorship target |
| POST | /api/v1/intents | Create a checkout intent (unique USDT address per order) |
| GET | /api/v1/intents?merchantOrderId= | Read intent status and bridge fee |
| POST | /api/v1/intents/:id/settle | Sweep merchant net to treasury after paid |
| — | intent.webhookUrl | Signed POST on status change (ship on paid) |
| — | Webhooks dashboard | Manage endpoints, event subscriptions, and deliveries |
| POST | /api/v1/sponsor | Queue (optionally execute) a chain sponsorship |
| GET | /api/v1/executions?idempotencyKey= | Poll execution status |
| GET | /api/v1/balance | Your sponsorship ledger (integrator-scoped) |
| GET | /api/v1/pricing | Public rate card |
POST /api/v1/sponsor
| Field | Type | Notes |
|---|---|---|
| idempotencyKey | string | Your unique key; divergent replays → 409 |
| walletAddress | string | Must be bound first |
| chainKey | bsc | tron | ton | |
| targetAddress | string | The wallet receiving gas/Energy |
| requestedAmount | integer string | BSC wei / TON nanoton / Tron Energy ≥ 60,000 |
| executeNow | boolean | true = execute synchronously |
json
{
"execution": { "id": "…", "status": "confirmed", "txHash": "0x…" },
"readiness": { "chainKey": "tron", "configured": true },
"billing": { "platformFeeUsd": "50000", "provisioningFeeUsd": "110000", "quoteId": "…" }
}Machine endpoints bypass the human login gate — the API key itself identifies your tenant.