On-Ramp & Off-Ramp
KORAMP's flagship guide: converting IDR to crypto (Top Up) and back (Sell) with the wallet-first model.
Introduction
This guide is for developers and product teams who want to understand and integrate IDR↔crypto ramps with KORAMP. KORAMP provides two directions:
- On-Ramp (Top Up): the user pays Indonesian Rupiah (IDR) and receives crypto to their wallet.
- Off-Ramp (Sell): the user sends crypto and receives IDR to their bank account.
KORAMP is wallet-first: no account required — a wallet address is the user's identity.
KORAMP privacy model
KORAMP uses public on-chain transfers. Sender, receiver, and amount are visible on the blockchain. KORAMP does not offer encrypted balances or private transfers. Privacy comes from the no-account model, wallet-as-identity, and masked display in the public ledger.
Field Visibility
The two tables below show the visibility level for each field in each direction.
| Field | Visibility | Reason |
|---|---|---|
| IDR Payment (QRIS) | Off-chain only | Fiat payment is processed by Xendit; not recorded on-chain. |
| Asset | Public on-chain | The crypto sent is recorded on the blockchain. |
| Amount | Public on-chain | On-chain transfers are public. |
| Sender | Public on-chain | Platform hot wallet address is publicly visible. |
| Recipient | Public on-chain | User wallet address is publicly visible. |
| Memo (optional) | Public on-chain if set | Only added when required. |
| Field | Visibility | Reason |
|---|---|---|
| IDR Payout (Bank) | Off-chain only | Bank payout is processed by Xendit; not recorded on-chain. |
| Asset | Public on-chain | Crypto sent by user is recorded on the blockchain. |
| Amount | Public on-chain | On-chain transfers are public. |
| Sender | Public on-chain | User wallet address is publicly visible. |
| Recipient | Public on-chain | Platform deposit address is publicly visible. |
| Memo (optional) | Public on-chain if set | Only added when required. |
Requirements
Before integrating, make sure you have:
- An EVM or Solana wallet for the user, matching the selected asset.
- A supported asset on a supported network (SOL, ETH, or BNB on testnet).
- An IDR amount within the minimum and maximum limits for that asset.
- The ability to sign messages to prove wallet ownership (EVM and Solana).
- A callback endpoint or webhook to receive payment status notifications from the provider.
Assets and Inventory
- SOL on Solana Devnet — Top Up and Sell ramp active. Account for the Associated Token Account (ATA) creation fee on recipient wallets that don't yet have an ATA.
- ETH on Base Sepolia (chain 84532) — ramp active. EVM wallets need to add the Base Sepolia network if not already known.
- BNB on BSC Testnet (chain 97) — ramp active. EVM wallets need to add the BSC Testnet network if not already known.
Testnet
The ramp currently runs on testnet networks. See the Assets & Networks page for chain IDs and explorers.
Compliance Considerations
Information You Can See
| Information | On-chain | Off-chain |
|---|---|---|
| Sender address | Yes, public | Yes, public |
| Recipient address | Yes, public | Yes, public |
| Amount | Yes, public | Yes, public |
| Bank payout details | No | Last 4 digits only displayed |
| Wallet address in public ledger | Masked | Masked |
Wallet Screening
KORAMP applies wallet screening as part of security operations. Current stance: screening focuses on abuse detection and rate limiting, not third-party compliance analytics. KORAMP does not claim coverage equivalent to dedicated compliance providers.
Travel Rule
KORAMP uses a KYC-less wallet-first model. As a result, classic Travel Rule mechanisms (collecting and exchanging sender/recipient data between institutions) are not available. This is adapted by maintaining an internal audit trail: no accounts, wallet-as-identity, and a publicly masked ledger.
Mapping Your Existing Flow
| Existing step | KORAMP step |
|---|---|
| Send fiat | Pay via Xendit QRIS (scan and pay) |
| Receive crypto | Crypto sent to destination wallet |
| Sell crypto | Send to platform deposit address |
| Withdraw IDR | Fiat payout to bank via Xendit Payout v3 |
Records and Audit
Every significant transaction is recorded in the double-entry ledger and audit log:
| Component | Function |
|---|---|
| AuditLog | Records important actions with actor and metadata. |
| LedgerEntry | Double-entry records (CREDIT/DEBIT) per wallet and asset. |
| XenditWebhook | Xendit webhook idempotency keyed on kind, event, paymentRequestId, and payoutId. |
Transaction Flow
1. On-Ramp
- User requests a TOP_UP quote.
- Create a Top Up order and obtain a Xendit QRIS payment payload.
- User scans the QRIS code and pays.
- Xendit webhook notifies the server that payment succeeded.
- Platform sends crypto to the destination wallet.
- Order is marked complete when
completedAtis set.
2. Off-Ramp
- User requests a SELL quote.
- Create a Sell order and obtain the platform deposit address.
- User sends crypto to the deposit address.
- Scheduler scans the deposit and tracks confirmations.
- Once confirmations are sufficient, fiat payout is sent via Xendit Payout v3.
- Order is marked complete when the payout succeeds.
Start Integrating
With an understanding of on-chain visibility and the flows above, you can start building a KORAMP ramp integration.
Next steps
Continue to Transaction Flow for the technical details of each step, or open API Reference for the endpoint list.