Stablecoins

Accept Stablecoin Payments

Kora's Stablecoin Wallets allow you to receive payments from your customers in digital currencies. Each wallet is assigned to a specific customer for a specific currency, and any payment made into that wallet is automatically linked to the customer.
You only need to create one wallet per customer per currency. Once created, the wallet can be reused for all subsequent payments from that customer.
The guide below will walk you through the process of successfully accepting stablecoin payments on Kora using our APIs.

Prerequisites

Before you begin:

  • Create an account on Kora and ensure that all necessary compliance details and documents have been approved.
  • Retrieve your API keys from the dashboard. See API Keys for more information.

Supported Stablecoins and Networks

We currently support two stablecoins. Each stablecoin is available on the following networks:

StablecoinSupported Networks
USDTSOL, ETH, TRX
USDCSOL, ETH, TRX
⚠️

A wallet is created for a single currency and network combination. Ensure your customers send funds on the same network as the wallet address; deposits sent on an unsupported or mismatched network may not be recoverable.

How It Works

There are three steps to accepting stablecoin payments from your customers:

  1. Create a stablecoin wallet for the customer.
  2. Set up webhooks to be notified when a deposit is completed.
  3. Verify the transaction using the Charge Query API.

Step 1: Create a Stablecoin Wallet

To create a wallet for a customer, make a request to the Create Customer Wallet API.
If the request is successful, you should receive a response containing the wallet address and its details:

{
    "status": true,
    "message": "Wallet created successfully.",
    "data": {
        "wallet_reference": "TRE_ee1a03f7-62c9-4f21-912c-ef10717b4a1e",
        "merchant_reference": "IHC_cc1144da-4906-4387-8b6d-1dd59f3229bc",
        "address": "y8yy56LDwkf4MF5KU1gAqWPSj26inaegYUMC9cXwGc",
        "network": "SOL",
        "currency": "USDT",
        "customer": {
            "name": "Casimer Kohler",
            "email": "[email protected]"
        },
        "status": "active"
    }
}

Retrieving a Wallet

To retrieve the details of an existing wallet, make a request to the Get Customer Wallet API.
A successful response from that endpoint will look like this:

{
    "status": true,
    "message": "Wallet fetched successfully.",
    "data": {
        "wallet_reference": "TRE_ee1a03f7-62c9-4f21-912c-ef10717b4a1e",
        "merchant_reference": "IHC_cc1144da-4906-4387-8b6d-1dd59f3229bc",
        "address": "y8yy56LDwkf4MF5KU1gAqWPSj26inaegYUMC9cXwGc",
        "network": "SOL",
        "currency": "USDT",
        "customer": {
            "name": "Casimer Kohler",
            "email": "[email protected]"
        },
        "status": "active"
    }
}

Step 2: Set Up Webhooks

Stablecoin payments are initiated outside of our system — your customer sends funds directly to the wallet address from their own wallet or exchange. As a result, we can only notify you once the payment has been completed on-chain.

If configured, notifications will be sent to your webhook URL when a deposit is completed. Please visit Webhooks for more information on how to set your webhook URL, and how to verify and handle webhook requests.

A sample notification for a successful stablecoin deposit looks like this:

{
    "event": "charge.success",
    "data": {
        "reference": "KPY-PAY-C3zmbxmZmyVaNIx",
        "payment_reference": "KPY-PAY-C3zmbxmZmyVaNIx",
        "currency": "USDT",
        "amount": 25,
        "fee": 1.5,
        "payment_method": "Stablecoin",
        "status": "success",
        "stablecoin_transaction": {
            "wallet_address": "fNvaRSgPXo5UvnhvkMEhFFSeunMpCgVBETSqk4NsTL",
            "transaction_hash": "0x6dd6f13a5f5546fe3d544d58fa95ec5e397e144ff1d26243c0959358bb1aff5a",
            "wallet_reference": "tre-cry-5e40474ae18934e0d4c6e9e65690ff32a1c1e711cf7d58da1dfc8376220dfcd1",
            "merchant_reference": "IHC_777539a5-8e46-48e2-a30c-d2aa4972d2fb",
            "network": "SOL"
        },
        "transaction_date": "2026-07-08T09:41:33.624Z"
    }
}

For more information, see here.

Step 3: Verify the Transaction

To get the full details of a transaction, make a request to the Charge Query API using the reference from the webhook notification payload.
A successful response from that endpoint will look like this:

{
    "status": true,
    "message": "Charge retrieved successfully",
    "data": {
        "reference": "KPY-PAY-eZ67TEK5LJarhyq",
        "status": "success",
        "amount": "25.00",
        "amount_paid": "25.00000000",
        "fee": 1.5,
        "currency": "USDT",
        "description": "Deposit of 23.5 USDT successful",
        "transaction_date": "2026-07-08T10:21:05.000Z",
        "customer": {
            "name": "Casimer Kohler",
            "email": "[email protected]"
        },
        "stablecoin_transaction": {
            "wallet_address": "fNvaRSgPXo5UvnhvkMEhFFSeunMpCgVBETSqk4NsTL",
            "transaction_hash": "0x6dd6f13a5f5546fe3d544d58fa95ec5e397e144ff1d26243c0959358bb1aff5a",
            "wallet_reference": "tre-cry-5e40474ae18934e0d4c6e9e65690ff32a1c1e711cf7d58da1dfc8376220dfcd1",
            "merchant_reference": "TWS-EXXWjjscclDyNIg6lwg3z",
            "network": "SOL"
        }
    }
}

Did this page help you?