Partner API

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

Request

  • Base URL
    https://sandbox.onlink.africa
  • Auth
    API key in header X-OnLink-Key

Request body

destinationWalletIdstring required

The id of a registered, active destination wallet (see GET /v1/wallets).

usdtAmountstring required

Decimal string, USDT, up to 6 decimal places, GREATER than zero. Never a JSON number.

partnerReferencestring

Your own reference for this send, echoed back on every read.

idempotencyKeystring required

A key unique to your account. A retried create with the same key returns the original send rather than creating a second one.

Example request

{
  "destinationWalletId": "fa9f1e6a-0000-4000-8000-000000000050",
  "usdtAmount": "25.500000",
  "partnerReference": "ACME-SEND-000123",
  "idempotencyKey": "send-2026-09-16-000123"
}

Response

The instruction was created. Normally a confirmation code is sent and the response carries a confirmation object. When OnLink has enabled confirmation waiving for your account and, in production, the API key has an IP allowlist, the send is created already confirmed, executes immediately, and the response carries no confirmation object.

idstring required

The send id.

status'awaiting_confirmation' | 'confirmed' | 'processing' | 'settled' | 'failed' | 'expired' required

The send status.

destinationWalletIdstring required

The destination wallet id you registered.

usdtAmountstring required

The amount sent, in USDT.

partnerReferencestring

Your own reference, echoed back.

failureReasonstring

A classified failure code, present only once failed.

createdAtstring date-time required

ISO-8601 instant the send was created.

confirmedAtstring date-time

ISO-8601 instant the send was confirmed: when its confirmation code was verified, or, when confirmation is waived for your account, when the send was created already confirmed.

Example response

{
  "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"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.