Skip to main content

On-Ramp Integration Guide

This guide walks you through integrating the Zet On-Ramp API to let your users buy crypto with Nigerian Naira (NGN) via bank transfer.

Overview

Step 1: Get a quote

Before initiating a transaction, get a real-time quote that shows the user exactly what they’ll pay and receive.

Quote response

Quotes expire in ~5 minutes. If the user doesn’t proceed in time, request a new quote.

Fee breakdown

Buying CNGN directly? No swap fee — cheapest option.

Step 2: Initiate the on-ramp

Once the user confirms, initiate the transaction with the quoteId:

Response — display these bank details to the user

The user must transfer the exact amount shown (amount) to the deposit account. Partial or excess transfers may delay processing.

Step 3: Wait for completion

Register a webhook and listen for onramp.completed:

Option B: Polling

Poll the status endpoint every 30 seconds:

Step 4: Non-custodial flow

If you’re not using Zet-managed wallets, provide destinationAddress instead of walletId:
The flow is identical — crypto is delivered to the provided address once the bank deposit is confirmed.

Supported tokens

Best practices

  1. Always display the quote before initiating — show fees, rate, and estimated crypto amount
  2. Use idempotent references — if a user refreshes, use the same reference to avoid duplicate orders
  3. Set a reasonable expiry UI — quotes expire in ~5 minutes, deposit windows in ~30 minutes
  4. Prefer webhooks over polling — more efficient and real-time
  5. Handle the onramp.failed event — notify the user and offer to retry