OnLink
API reference

Send USDT from your wallet to a registered destination

Validates the destination against your wallet allowlist (only an active wallet may receive value), checks the amount against our minimum and your caps, then writes the instruction and sends a confirmation code to your registered confirmation contact, or to your webhook as confirmation.code_issued if OnLink has switched your account to webhook delivery. Nothing reaches the chain until that code is verified via POST /v1/confirmations/:id, unless OnLink has enabled confirmation waiving for your account and, in production, the API key has an IP allowlist, in which case the send is returned already confirmed and is executed immediately.

POST
/v1/usdt/sends

Authorization

partner-key
X-OnLink-Key<token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/usdt/sends" \  -H "Content-Type: application/json" \  -d '{    "destinationWalletId": "fa9f1e6a-0000-4000-8000-000000000050",    "usdtAmount": "25.500000",    "idempotencyKey": "send-2026-09-16-000123"  }'
{  "id": "ed9f1e6a-0000-4000-8000-000000000040",  "status": "awaiting_confirmation",  "destinationWalletId": "fa9f1e6a-0000-4000-8000-000000000050",  "usdtAmount": "25.500000",  "partnerReference": "ACME-SEND-000123",  "failureReason": "USDT_SEND_INSUFFICIENT_LEDGER_BALANCE",  "createdAt": "2026-09-16T00:00:00.000Z",  "confirmedAt": "2026-09-16T00:02:00.000Z",  "confirmation": {    "id": "df9f1e6a-0000-4000-8000-000000000030",    "channel": "email",    "deliveredTo": "o***@partner.co.ke",    "expiresAt": "2026-09-11T00:15:00.000Z",    "resendAvailableAt": "2026-09-11T00:00:15.000Z",    "webhookDelivery": {      "status": "delivered",      "attempts": 1,      "lastAttemptAt": "2026-09-11T00:00:02.000Z"    },    "waiverNotApplied": "key_without_ip_allowlist"  }}