Sogo Logo Developer
Get Started
Crypto Trading API

Sell Bitcoin, Ethereum,
USDT & 10+ coins
for instant Naira

Accept any major cryptocurrency from your users and convert to Nigerian Naira at live market rates. Supports TRC20, ERC20, BEP20 and more. Settlement confirmed by webhook.

create-deposit-address.http
Request
Response
POST https://api.sogo.africa/v1/crypto/deposit-address
Authorization:   Bearer sogo_sk_live_••••••••••••••••
Content-Type:    application/json
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000

{
  "asset":          "usdt",
  "network":        "trc20"
}
200 OK  87ms

{
  "message": "Deposit address retrieved successfully.",
  "data": {
    "asset":            "usdt",
    "network":          "trc20",
    "address":          "TQn9Y2khEsLJW1CpqjZ...",
    "destination_tag":  null,
    "is_active":        true,
    "created_at":       "2026-05-24T10:30:00Z"
  }
}
10+Crypto assets
8+Networks supported
5API endpoints
WebhookDriven settlement

10+ cryptocurrencies across multiple networks

All major assets your users trade, across the networks they already use. Live rates updated in real time.

Bitcoin
BTC
BTC
Ethereum
ETH
ERC20
Tether
USDT
TRC20ERC20
USD Coin
USDC
ERC20
BNB
BNB
BEP20
TRON
TRX
TRC20
Solana
SOL
SOL
Dogecoin
DOGE
DOGE
XRP
XRP
XRP
Litecoin
LTC
LTC

Network & destination tag details

AssetTickerNetworksDestination Tag
BitcoinBTCNative BTC networkNot required
EthereumETHERC20Not required
TetherUSDTTRC20, ERC20Not required
USD CoinUSDCERC20Not required
BNBBNBBEP20 (BSC)Not required
TRONTRXTRC20Not required
SolanaSOLSolanaNot required
DogecoinDOGENative DOGENot required
XRPXRPXRP LedgerRequired - included in response
LitecoinLTCNative LTCNot required

From deposit address to Naira in four steps

Webhook-driven settlement means you never have to poll. Your system is notified the moment funds are confirmed on-chain.

1

Fetch live rate

Call GET /v1/crypto/assets/{asset}/rate to get the current NGN market rate. Present this to your user before they deposit.

2

Create deposit address

Call POST /v1/crypto/deposit-address with the asset and network. Sogo provisions a unique deposit wallet for your user.

3

User sends crypto

Your user sends any amount to the returned address. Sogo monitors the blockchain and detects the deposit once it is confirmed.

4

Webhook + Naira settled

A transaction.completed webhook fires with the exact Naira payout. Funds are settled to your Sogo wallet instantly.

KYC & KYB requirements for Crypto API access

Sandbox environment: Crypto API access is available from Tier 2 (BVN or NIN verification).
Live environment: Crypto API requires Tier 3 KYC (identity document, address proof, selfie video) plus completed KYB (business verification) for your platform. These requirements ensure compliance with Nigerian financial regulations.

Crypto sell (your users sending crypto): Sogo notifies your admin team for any single settlement of ₦5 million or more.

Crypto API endpoints

Five endpoints cover the complete crypto settlement workflow - from asset discovery to deposit address provisioning.

GET
/v1/crypto/assets
Scope: crypto:read

Returns all supported crypto assets with their slugs, display names, supported networks, and whether they require a destination tag (memo). Use this to populate your UI dynamically without hardcoding asset lists.

assets.http
Request
Response
GET https://api.sogo.africa/v1/crypto/assets
Authorization: Bearer sogo_sk_live_••••••••••••••••
200 OK  62ms

{
  "data": [
    {
      "slug":              "usdt",
      "name":              "Tether USD",
      "ticker":            "USDT",
      "networks": [
        { "slug": "trc20", "label": "TRC-20 (TRON)",  "requires_tag": false },
        { "slug": "erc20", "label": "ERC-20 (Ethereum)", "requires_tag": false }
      ],
      "is_active":         true
    },
    // ... 9 more assets
  ]
}
GET
/v1/crypto/assets/{asset}/rate
Scope: crypto:read

Returns the estimated NGN payout for a given crypto amount, including the current exchange rate, platform fee, and net amount your wallet will receive. Pass ?amount= to estimate for a specific quantity (e.g. ?amount=0.5). Defaults to 1 if omitted. Rates are live and may change between fetch and deposit confirmation.

ParameterTypeRequiredDescription
assetstring (path)requiredAsset slug from /v1/crypto/assets (e.g. btc, usdt, eth).
amountnumeric (query)optionalCrypto amount to estimate (e.g. 0.01). Defaults to 1 if omitted.
rate.http
Request
Response
GET https://api.sogo.africa/v1/crypto/assets/usdt/rate
Authorization: Bearer sogo_sk_live_••••••••••••••••
200 OK  44ms

{
  "data": {
    "asset":              "usdt",
    "crypto_amount":      "1",
    "rate":               "1632.50",
    "usd_ngn_rate":      1500.00,
    "estimated_ngn":     1632.50,
    "fee_rate":          0.01,
    "fee_percent":       1.0,
    "fee_ngn":           16.33,
    "user_receives_ngn": 1616.17
  }
}
GET
/v1/crypto/deposit-address
Scope: crypto:read

Retrieves an existing deposit address for a specific asset and network combination. Use this to display a previously provisioned address to a returning user, or to check whether an address has already been created before calling the POST endpoint.

Query ParameterTypeRequiredDescription
assetstringrequiredAsset slug (e.g. btc, usdt).
networkstringoptionalNetwork slug (e.g. trc20, erc20). Defaults to the asset's default network if omitted.
POST
/v1/crypto/deposit-address
Scope: crypto:write  ·  Idempotency-Key required

Provisions a new deposit address for the specified asset and network. The same address is reused for subsequent deposits from the same user for that asset/network pair. Sogo monitors the address on-chain and fires settlement webhooks automatically.

ParameterTypeRequiredDescription
assetstringrequiredAsset slug from /v1/crypto/assets (e.g. usdt, btc).
networkstringoptionalNetwork slug (e.g. trc20, erc20, bep20). Defaults to the asset's default network if omitted. Must be a valid network for the asset.
deposit-address.http
Request
Response
PHP
Node
POST https://api.sogo.africa/v1/crypto/deposit-address
Authorization:   Bearer sogo_sk_live_••••••••••••••••
Content-Type:    application/json
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000

{
  "asset":          "usdt",
  "network":        "trc20"
}
200 OK  87ms

{
  "message": "Deposit address retrieved successfully.",
  "data": {
    "asset":            "usdt",
    "network":          "trc20",
    "address":          "TQn9Y2khEsLJW1CpqjZGMtwc...",
    "destination_tag":  null,
    "is_active":        true,
    "created_at":       "2026-05-24T10:30:00Z"
  }
}
// PHP - provision a USDT (TRC20) deposit address
$client = new \GuzzleHttp\Client;

$response = $client->post(
    'https://api.sogo.africa/v1/crypto/deposit-address',
    [
        'headers' => [
            'Authorization'   => 'Bearer ' . getenv('SOGO_SECRET_KEY'),
            'Content-Type'    => 'application/json',
            'Idempotency-Key' => \Ramsey\Uuid\Uuid::uuid4()->toString(),
        ],
        'json' => [
            'asset'          => 'usdt',
            'network'        => 'trc20',
        ],
    ]
);

$address = json_decode($response->getBody(), true)['data'];
// Display $address['address'] to user as QR code + text
// XRP requires $address['destination_tag'] - warn users if non-null
import { randomUUID } from 'crypto';

const res = await fetch(
  'https://api.sogo.africa/v1/crypto/deposit-address',
  {
    method: 'POST',
    headers: {
      Authorization:     `Bearer ${process.env.SOGO_SECRET_KEY}`,
      'Content-Type':   'application/json',
      'Idempotency-Key': randomUUID(),
    },
    body: JSON.stringify({
      asset:          'usdt',
      network:        'trc20',
    }),
  }
);

const { data } = await res.json();
// Render data.address as QR code for user to scan
POST
/v1/crypto/test-deposit
Sandbox only  ·  Scope: crypto:write

Simulates an incoming crypto deposit against a previously created sandbox deposit address. This fires the full webhook pipeline - identical to a real on-chain deposit - so you can test your integration end-to-end without real crypto. No Idempotency-Key required for this diagnostic endpoint.

ParameterTypeRequiredDescription
assetstringrequiredAsset symbol (e.g. btc, usdt).
networkstringoptionalNetwork slug (e.g. trc20, bitcoin).
crypto_amountnumericrequiredAmount of cryptocurrency to deposit (e.g. 100.0).
test_referencestringrequiredCustom reference for outcome control (e.g. ending in 0000, 9999, or other). Webhook event will include this reference.

Test the full crypto flow in sandbox

Create a test deposit address with your sogo_sk_test_ key against sandbox.sogo.africa, then call POST /v1/crypto/test-deposit to simulate a deposit and trigger the webhook pipeline. No real crypto, no real money.

Real-time settlement notifications

Sogo fires HMAC-signed webhook events as each crypto deposit progresses through the settlement pipeline.

transaction.completed

Fired when the crypto deposit is confirmed on-chain and Naira is successfully credited to your wallet. The payload confirms the exact NGN amount, the asset, the crypto amount, the rate at the time of settlement, and the blockchain transaction hash (tx_hash) for easy reconciliation.

Signature Verification

Each webhook delivery includes an X-Sogo-Signature-256 header. Securely verify this signature using your webhook secret key before processing:
hash_hmac('sha256', $rawBody, $secret)

Sandbox free, no approval to start

Accept crypto, pay out Naira

Get API keys in minutes. Test the full deposit flow - including webhooks - against our sandbox before any real crypto moves.