What is a Ramp?
A Ramp is a transaction that converts between fiat currency and cryptocurrency. KillB supports both on-ramps (fiat → crypto) and off-ramps (crypto → fiat).Think of ramps as the bridge between traditional banking and cryptocurrency. They handle the entire conversion process from quote to settlement.
Ramp Types
- On-Ramp
- Off-Ramp
Fiat → CryptocurrencyConvert local currency (COP, MXN, USD) into stablecoins (USDC, USDT).Flow:
- User gets a quote (e.g., 100,000 COP → 23.8 USDC)
- User creates ramp with wallet address
- User pays via PSE/SPEI/ACH
- KillB processes conversion
- USDC/USDT sent to user’s wallet
- Buying crypto with local currency
- Funding DeFi positions
- Cross-border remittances
- Crypto investing
Ramp Lifecycle
A ramp goes through multiple status stages during processing:Ramp Status
Processing Statuses
Processing Statuses
CREATED
- Ramp initialized, awaiting payment
- Payment instructions provided to user
- Payment request sent to provider
- Awaiting user payment
- Payment received, being verified
- Confirmation in progress
- Payment confirmed
- Ready for conversion
- Converting fiat ↔ crypto
- Executing trade
- Conversion finished
- Ready for disbursement
- Sending funds to destination
- Transaction in progress
- Funds sent to destination
- Awaiting final confirmation
Final Statuses
Final Statuses
COMPLETED ✅
- Transaction fully completed
- Funds delivered to user
- Receipt available
- Transaction failed at some stage
- Check
detailsfield for reason - May be eligible for retry
- Canceled by user or system
- No funds transferred
- Refund initiated if applicable
- Rejected by compliance or provider
- Check
notefor details - May require additional verification
- System error occurred
- Contact support with ramp ID
- Will be investigated and resolved
Creating a Ramp
Prerequisites
Before creating a ramp, you need:1
User
A verified user with appropriate KYC level
2
Account
An active account (bank or wallet) as destination
3
Quotation
A valid, non-expired quotation
Basic Ramp Creation
Multiple Destination Accounts
You can split a ramp across multiple destination accounts:Payment Information
Based on the payment method, different payment information is returned:- PSE (Colombia)
- SPEI (Mexico)
- Crypto Wallet
- Redirect user to the
url - User completes payment through PSE
- Webhook notifies of payment completion
Refund Instructions
For on-ramps, provide refund instructions in case of failure:External ID
UseexternalId to prevent duplicate ramps and track transactions:
- Prevent duplicate submissions
- Track ramps in your system
- Idempotency for retries
- Easier reconciliation
Monitoring Ramps
Get Ramp by ID
Query Ramps
id- Specific ramp IDexternalId- Your system IDstatus- Filter by statuslimit,page- Pagination
Status History
Track all status changes:Ramp Receipts
Get transaction receipts in multiple formats:- HTML Receipt
- JSON Receipt
- PDF Receipt
Pre-Funded Ramps
Pre-funded ramps execute instantly:PRE_FUND or PRE_FUND_* methods:
- No payment confirmation needed
- Instant execution
- Immediate status progression
- Faster completion (minutes vs hours)
CREATED → CONVERSION_PROCESSING → CASH_OUT_PROCESSING → COMPLETED
Handling Failures
Common Failure Reasons
| Reason | Description | Solution |
|---|---|---|
INSUFFICIENT_FUNDS | Not enough balance in source | User needs to fund account |
INVALID_ACCOUNT | Destination account invalid | Verify account details |
COMPLIANCE_HOLD | Compliance review required | Wait for manual review |
PROVIDER_ERROR | External provider issue | Retry or contact support |
EXPIRED_QUOTE | Quotation expired | Create new quotation |
Checking Failure Details
Error Handling Guide
Learn best practices for handling ramp failures
Webhooks for Ramps
Subscribe to ramp events for real-time updates: Event Type:RAMP
Actions:
CREATE- Ramp initializedUPDATE- Ramp status changed (includes all status transitions)DELETE- Ramp canceled (rare)
- Payment received (
CASH_IN_COMPLETED) - Conversion finished (
CONVERSION_COMPLETED) - Ramp fully completed (
COMPLETED) - Ramp failed (
FAILED) - Ramp canceled (
CANCELED)
Webhook Payload Example
Ramp Updates
Update ramp information (limited scenarios):- Destination accounts (before payment)
- Account amounts distribution
Performance Considerations
Transaction Times
| Method | Typical Time | Network Dependent |
|---|---|---|
| PSE | 5-30 minutes | ✅ Yes |
| SPEI | 10-60 minutes | ✅ Yes |
| ACH | 1-3 business days | ✅ Yes |
| Wire | 1 business day | ✅ Yes |
| Crypto (Polygon) | 2-5 minutes | ⛓️ Blockchain |
| Crypto (Solana) | 1-2 minutes | ⛓️ Blockchain |
| Pre-Funded | < 5 minutes | ❌ No |
Best Practices
Always Use Quotations
Always Use Quotations
- Never hardcode exchange rates
- Create fresh quotation for each ramp
- Respect quotation expiry (30 seconds)
- Show users the exact amounts
Implement Status Polling
Implement Status Polling
- Poll ramp status every 10-30 seconds
- Use webhooks as primary notification
- Polling as backup mechanism
- Show users current status
Handle Edge Cases
Handle Edge Cases
- Payment takes longer than expected
- User closes browser during payment
- Network connectivity issues
- Quotation expires before creation
- Insufficient funds scenarios
Use External IDs
Use External IDs
- Provide unique
externalIdper ramp - Prevents duplicate transactions
- Enables idempotent retries
- Simplifies reconciliation
Store Transaction Data
Store Transaction Data
- Save ramp ID immediately
- Store all response data
- Log status transitions
- Keep payment proofs
- Archive completed ramps
Testing Ramps
Sandbox Testing
In sandbox, use faker endpoints:Production Testing
Start with small amounts:- Test with minimum (50 equivalent)
- Verify complete flow end-to-end
- Check webhook delivery
- Confirm receipts generate
- Validate accounting
- Scale to larger amounts
Common Questions
Can I cancel a ramp after creation?
Can I cancel a ramp after creation?
Only if payment hasn’t been received yet. Once cash-in is completed, the ramp will process to completion.
What if the user doesn't pay?
What if the user doesn't pay?
Ramps expire after 24 hours if unpaid and move to EXPIRED status. No action needed from you.
How long are blockchain confirmations?
How long are blockchain confirmations?
- Polygon: 2-5 minutes (128 block confirmations)
- Solana: 1-2 minutes
- Ethereum: 10-15 minutes
- Tron: 1-3 minutes
Can I use the same quotation for multiple ramps?
Can I use the same quotation for multiple ramps?
No. Each ramp requires its own quotation. Quotations are single-use and expire after 30 seconds.
What happens if crypto price changes during processing?
What happens if crypto price changes during processing?
The rate is locked when you create the ramp using the quotation. Users receive the exact amount quoted.