Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.linkio.world/llms.txt

Use this file to discover all available pages before exploring further.

Initiate a fiat → stablecoin conversion via LINK’s OTC desk. You provide the core transaction details plus your own banking details (the account you are paying from). Once a transaction (onramp) has been initiated, settlement account details are delivered to you through a banking_details_received webhook.

Endpoint

POST /otc/onramp

Request Body

FieldTypeRequiredDescription
customer_idstringYour platform’s customer ID for this transaction.
currencystringFiat currency being sent (e.g., NGN, USD, GBP). See Supported Currencies.
amountstringFiat amount being sent.
stablesstringStablecoin to receive: USDC or USDT.
wallet_addressstringDestination wallet address for the stablecoin.
networkstringBlockchain network (e.g., solana, polygon).
paymentDetailsobjectYour banking details — the account you are paying from. Required fields depend on your currency’s payment method (see table below).

Payment Method & paymentDetails Fields

Call GET /otc/rate_quote?currency={currency}&amount={amount}&trx_type=onramp first. The response includes a paymentMethod field that tells you which method applies to your currency.
Payment MethodCurrenciesRequired fields in paymentDetails
NIPNGN, GHSaccountNumber, accountName, bankName
ACHUSD, CNYaccountNumber, routingNumber, accountName
SEPAEURiban, beneficiaryName, bankName
PIXBRLpixKey, accountHolder
PESONetPHPaccountNumber, accountName, bankName
Mobile MoneySLE, SSP, TZS, UGX, XAF, XOFprovider, phoneNumber, accountName
SWIFTAED, AOA, CAD, CDF, DZD, EGP, GBP, HKD, IDR, LYD, MAD, MWK, MZN, SGD, TRYaccountName, bankName, accountNumber, swiftCode

JSON Request Examples

{
  "customer_id": "cut93498342",
  "currency": "NGN",
  "amount": "50000000",
  "stables": "USDC",
  "wallet_address": "YourSolanaWallet",
  "network": "solana",
  "paymentDetails": {
    "accountNumber": "0123456789",
    "accountName": "Acme Corp",
    "bankName": "Access Bank"
  }
}

Response (201)

{
  "code": "TXN_SUCCESSFUL",
  "status": "Success",
  "message": "Transaction request submitted. Banking details will be shared shortly.",
  "data": {
    "transaction_id": "6839f2a1c4e3b1000d5a9012",
    "reference": "link-otc-12345678",
    "type": "onramp",
    "currency": "NGN",
    "amount": "50000000 NGN",
    "stables": "USDC",
    "payout_amount": "25000 USDC",
    "rate": 2000,
    "transaction_status": "pending",
    "payment_method": "NIP",
    "date_created": "28/05/2026: 14:30"
  }
}

What Happens Next

  1. Banking details received — LINK shares the settlement account details with you. LINK fires a banking_details_received webhook to your registered URL:
{
  "event": "banking_details_received",
  "reference": "link-otc-12345678",
  "data": {
    "transaction_ref": "link-otc-12345678",
    "currency": "NGN",
    "amount": 50000000,
    "transaction_type": "onramp",
    "transaction_status": "processing",
    "banking_details": {
      "accountNumber": "0987654321",
      "accountName": "Partner Ltd",
      "bankName": "GTBank"
    }
  }
}
  1. Send funds — Transfer fiat to the account provided in the webhook.
  2. Completion — Once we confirm receipt, LINK fires a transaction_status_updated webhook with transaction_status: "completed".

Proof of Payment

After sending funds, upload your proof of payment via:
POST /otc/pop
Content-Type: multipart/form-data
Fields: reference (your link-otc-xxx ref) + file (JPEG, PNG, GIF, or PDF — max 3 MB).
OTC Offramp Webhooks