> ## 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.

# Off-Ramp

> POST /otc/offramp — Stablecoin → Fiat

Initiate a stablecoin → fiat payout via LINK's B2b API. You provide the core transaction details plus your settlement banking details (the account you want to receive fiat **into**).

***

#### Endpoint

```
POST /otc/offramp
```

***

#### Request Body

| Field            | Type   | Required | Description                                                                                                                                                  |
| ---------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `customer_id`    | string | ✓        | Your platform's customer ID for this transaction.                                                                                                            |
| `currency`       | string | ✓        | Fiat currency to receive (e.g., `NGN`, `USD`, `EUR`). See [Supported Currencies](/docs/otc-service).                                                         |
| `amount`         | string | ✓        | Stablecoin amount being sent.                                                                                                                                |
| `stables`        | string | ✓        | Stablecoin being sent: `USDC` or `USDT`.                                                                                                                     |
| `wallet_address` | string | ✓        | Wallet address sending the stablecoin.                                                                                                                       |
| `network`        | string | ✓        | Blockchain network. USDT: `TRON`, `POLYGON`, `SOLANA`. USDC: `ETHEREUM`, `BSC`, `POLYGON`, `BASE`, `SOLANA`, `STELLAR`.                                      |
| `paymentDetails` | object | ✓        | Your settlement banking details — the account you want to receive fiat **into**. Required fields depend on your currency's payment method (see table below). |

***

#### Stablecoin & Network Compatibility

| Stablecoin | Supported Networks                            |
| ---------- | --------------------------------------------- |
| USDT       | TRON, POLYGON, SOLANA                         |
| USDC       | ETHEREUM, BSC, POLYGON, BASE, SOLANA, STELLAR |

***

#### Payment Method & `paymentDetails` Fields

Call `GET /otc/rate_quote?currency={currency}&amount={amount}&trx_type=offramp` first — the response includes a `paymentMethod` field that tells you which method applies to your currency.

| Payment Method          | Currencies                                                                     | Required fields in `paymentDetails`             |
| ----------------------- | ------------------------------------------------------------------------------ | ----------------------------------------------- |
| **ACH**                 | USD                                                                            | `accountNumber`, `routingNumber`, `accountName` |
| **Local Bank Transfer** | NGN, BIF, CDF, DZD, ETB, GBP, GHS, LYD, MUR, MWK, MZN, SGD, SLE, SSP, TZS, UGX | `accountNumber`, `accountName`, `bankName`      |
| **IBAN**                | AED, AOA, EGP, EUR, TRY                                                        | `iban`, `accountName`, `bankName`               |
| **RIB**                 | MAD, XAF, XOF                                                                  | `rib`, `accountName`, `bankName`                |

> **GBP** also accepts IBAN format — use Local Bank Transfer (`accountNumber`) or IBAN (`iban`) depending on your bank.

***

#### JSON Request Examples

<CodeGroup>
  ```json NGN — Local Bank Transfer theme={null}
  {
    "customer_id": "cut93498342",
    "currency": "NGN",
    "amount": "25000",
    "stables": "USDC",
    "wallet_address": "0xYourEthWallet",
    "network": "ETHEREUM",
    "paymentDetails": {
      "accountNumber": "0123456789",
      "accountName": "Acme Corp",
      "bankName": "GTBank"
    }
  }
  ```

  ```json USD — ACH theme={null}
  {
    "customer_id": "cut93498342",
    "currency": "USD",
    "amount": "25000",
    "stables": "USDT",
    "wallet_address": "TYourTronWallet",
    "network": "TRON",
    "paymentDetails": {
      "accountNumber": "875104368977",
      "routingNumber": "026073150",
      "accountName": "Acme Corp"
    }
  }
  ```

  ```json EUR — IBAN theme={null}
  {
    "customer_id": "cut93498342",
    "currency": "EUR",
    "amount": "20000",
    "stables": "USDC",
    "wallet_address": "0xYourBscWallet",
    "network": "BSC",
    "paymentDetails": {
      "iban": "DE89370400440532013000",
      "accountName": "Acme Corp",
      "bankName": "Deutsche Bank"
    }
  }
  ```

  ```json XOF — RIB theme={null}
  {
    "customer_id": "cut93498342",
    "currency": "XOF",
    "amount": "25000",
    "stables": "USDC",
    "wallet_address": "0xYourEthWallet",
    "network": "ETHEREUM",
    "paymentDetails": {
      "rib": "CI1234567890123456789012",
      "accountName": "Acme Corp",
      "bankName": "Ecobank"
    }
  }
  ```
</CodeGroup>

***

#### Response (201)

```json theme={null}
{
  "code": "TXN_SUCCESSFUL",
  "status": "Success",
  "message": "Transaction request submitted. Partners have been notified.",
  "data": {
    "transaction_id": "6839f2a1c4e3b1000d5a9012",
    "reference": "link-otc-87654321",
    "type": "offramp",
    "stables": "USDC",
    "amount": "25000 USDC",
    "currency": "NGN",
    "payout_amount": "50000000 NGN",
    "rate": 2000,
    "transaction_status": "pending",
    "payment_method": "LOCAL_BANK_TRANSFER",
    "date_created": "28/05/2026: 14:30"
  }
}
```

***

#### What Happens Next

1. **Send stablecoin** — Transfer the stablecoin from `wallet_address` to the LINK-provided address.
2. **Status updates** — LINK fires a `transaction_status_updated` webhook as we process the payout:

```json theme={null}
{
  "event": "transaction_status_updated",
  "reference": "link-otc-87654321",
  "data": {
    "transaction_ref": "link-otc-87654321",
    "currency": "NGN",
    "transaction_type": "offramp",
    "transaction_status": "completed"
  }
}
```

**`transaction_status` values:**

| Value        | Meaning                               | Internal status |
| ------------ | ------------------------------------- | --------------- |
| `pending`    | Awaiting partner action               | `pending`       |
| `processing` | Partner is processing the payout      | `processing`    |
| `rfi`        | Partner needs additional information  | `processing`    |
| `completed`  | Fiat payout delivered to your account | `completed`     |
| `failed`     | Payout could not be completed         | `failed`        |

***

[B2B Onramp](/docs/business-onramp)

[Cross-Border FX](/docs/cross-border-fx)
