Skip to main content

Overview

Thiqwave lets you receive value as fiat deposits or convert incoming fiat directly to stablecoins. Both flows start the same way — a pay-in request. Whether you’re collecting fiat deposits or on-ramping to stablecoins, the process begins with creating a pay-in request. From there, your customers deposit funds, and Thiqwave handles the rest.

Receiving Fiat Deposits

Accept incoming fiat payments and hold them as deposits in your Thiqwave account.
1

Create a pay-in request

Initiate a new pay-in to receive fiat from your customer.
2

Customer deposits funds

Your customer transfers funds to the bank account details provided in the pay-in response.
3

Funds credited

Once the transfer is confirmed, the funds appear in your Thiqwave balance.

Creating a Pay-In

To create a pay-in request, POST to the /v1/payins endpoint with the customer’s deposit amount and corridor.
curl -X POST https://api.thiqwave.com/v1/payins \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 50000,
    "currency": "AED",
    "corridor": "uae",
    "payment_method": "bank_transfer",
    "reference": "customer_001"
  }'

Pay-In Response

The API returns a pay-in object with bank details and a unique reference for the deposit:
{
  "id": "payin_abc123xyz",
  "status": "pending",
  "amount": 50000,
  "currency": "AED",
  "corridor": "uae",
  "payment_method": "bank_transfer",
  "payment_details": {
    "bank_name": "Thiqwave Bank Partner",
    "account_number": "1234567890",
    "iban": "AE070012345678901234567",
    "swift_code": "THIQAEXX",
    "reference": "payin_abc123xyz"
  },
  "created_at": "2026-04-10T14:30:00Z",
  "updated_at": "2026-04-10T14:30:00Z"
}
Share the payment_details with your customer so they can complete the bank transfer. They should include the reference in their payment memo.

On-Ramping: Fiat to Stablecoin

Convert incoming fiat deposits directly to stablecoins in a single integrated flow.
1

Get a quote

Request a conversion quote for your desired stablecoin and network.
2

Create an on-ramp

Initiate the on-ramp request with your quote and destination wallet address.
3

Customer deposits funds

Your customer transfers the fiat amount to the provided bank account.
4

Stablecoins delivered

Once the deposit confirms, stablecoins are automatically transferred to the destination wallet.

Getting a Quote

Start by fetching a quote for your on-ramp. Specify the source fiat currency, destination stablecoin, amount, and blockchain network.
curl -X POST https://api.thiqwave.com/v1/quotes \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_currency": "AED",
    "destination_currency": "USDC",
    "amount": 50000,
    "destination_network": "polygon",
    "corridor": "uae"
  }'

Quote Response

The quote returns the exact amount you’ll receive in stablecoins, along with a quote ID valid for a limited time:
{
  "id": "quote_xyz789abc",
  "source_currency": "AED",
  "destination_currency": "USDC",
  "source_amount": 50000,
  "destination_amount": "136.00",
  "destination_network": "polygon",
  "expires_at": "2026-04-10T15:30:00Z"
}
Quotes expire after 30 minutes. Use the quote_id in your on-ramp request before expiry.

Creating an On-Ramp

Once you have a valid quote, create an on-ramp request with the destination wallet address and network:
curl -X POST https://api.thiqwave.com/v1/bridging/onramp \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "quote_id": "quote_xyz789abc",
    "destination_address": "0x742d35Cc6634C0532925a3b844Bc2e7595f42aED",
    "destination_network": "polygon"
  }'

On-Ramp Response

The on-ramp object contains the fiat deposit details and stablecoin destination:
{
  "id": "bridge_def456ghi",
  "type": "onramp",
  "status": "pending",
  "source": {
    "amount": 50000,
    "currency": "AED"
  },
  "destination": {
    "amount": "136.00",
    "currency": "USDC",
    "network": "polygon",
    "address": "0x742d35Cc6634C0532925a3b844Bc2e7595f42aED"
  },
  "wallet_address": "0x742d35Cc6634C0532925a3b844Bc2e7595f42aED",
  "blockchain": "polygon",
  "payment_details": {
    "bank_name": "Thiqwave Bank Partner",
    "account_number": "1234567890",
    "iban": "AE070012345678901234567",
    "swift_code": "THIQAEXX",
    "reference": "bridge_def456ghi"
  },
  "created_at": "2026-04-10T14:30:00Z",
  "updated_at": "2026-04-10T14:30:00Z"
}
Share the payment_details with your customer. They deposit the fiat amount, and stablecoins automatically arrive at the destination address once confirmed.

Payment Methods

Available payment methods depend on your corridor and local regulations. Each corridor supports different deposit methods:
CorridorPayment Methods
UAEBank transfers, instant payment networks, mobile wallets
Saudi ArabiaBank transfers, instant payment networks
EgyptBank transfers, mobile money
Additional corridorsBank transfers (primary method)
Payment method support varies by corridor and may change based on local regulatory requirements. Check the corridor-specific documentation for the most current options.

Tracking Status

Monitor pay-ins and on-ramps throughout their lifecycle using status updates and webhooks.

Status Lifecycle

Both pay-ins and on-ramps progress through defined states:
StatusDescription
pendingRequest created, awaiting customer deposit
processingDeposit received and being verified
completedFiat credited (pay-in) or stablecoins delivered (on-ramp)
failedDeposit failed verification or transaction rejected

Webhook Events

Subscribe to webhooks to receive real-time status notifications:
  • payin.completed — Fiat deposit successfully credited
  • payin.failed — Pay-in request failed
  • bridge.completed — On-ramp stablecoins delivered
  • bridge.failed — On-ramp request failed
See the Webhooks guide for setup instructions.

Best Practices

Follow these recommendations to ensure smooth payment flows:
1

Use webhooks for notifications

Subscribe to webhook events instead of polling the API. This ensures you’re notified immediately when deposits arrive or on-ramps complete.
2

Implement idempotency keys

Include idempotency keys in pay-in and on-ramp requests to prevent duplicate transactions if requests are retried.
3

Validate amounts before submission

Check that the deposit amount meets your minimum requirements and doesn’t exceed any limits before creating a request.
4

Handle quote expiry

For on-ramps, create the on-ramp request promptly after receiving a quote. Quotes expire after 30 minutes.
5

Test in staging first

Always test your integration in the staging environment before going live.

Next Steps

Sending Payments

Send fiat transfers or bridge stablecoins to wallets.

Webhooks

Set up real-time event notifications.

Pay-ins API

Full API reference for pay-in requests.

Bridging API

Full API reference for on-ramp and bridge operations.