Walk through the core integration loop — from creating a recipient to receiving funds.
Prerequisites
RebelFi account with ramping enabled
API key (from dashboard Settings )
Webhook endpoint URL configured in dashboard Settings
Step 1: Create a Recipient
Create a recipient to start the KYB process. Include an address if the recipient will use off-ramp accounts.
curl -X POST "https://api.rebelfi.io/v1/ramp/recipients" \
-H "x-api-key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "OnEdge",
"type": "business",
"external_id": "your-internal-ref-123",
"address": {
"street1": "123 Main St",
"city": "New York",
"region": "NY",
"postal_code": "10001",
"country": "US"
}
}'
Response:
{
"id" : 1 ,
"name" : "OnEdge" ,
"type" : "business" ,
"external_id" : "your-internal-ref-123" ,
"kyb_status" : "pending" ,
"kyb_url" : "https://kyb.provider.com/verify/abc123" ,
"created_at" : "2026-03-15T10:00:00Z"
}
The kyb_url in the response is the link you send to your recipient. They complete a short hosted verification form — takes a few minutes.
The address field is optional at creation time but required before creating off-ramp accounts . You can add it during recipient creation or update it later.
Step 2: Wait for KYB Approval
KYB is asynchronous. When approved, RebelFi fires a customer.approved webhook to your endpoint.
{
"event" : "customer.approved" ,
"timestamp" : "2026-03-15T12:00:00Z" ,
"data" : {
"customer_id" : 1 ,
"name" : "OnEdge"
}
}
If KYB is declined, you’ll receive a customer.declined event instead.
Step 3: Create Ramp Accounts
After KYB approval, create on-ramp and/or off-ramp accounts for the recipient.
On-Ramp Account (USD → USDC/USDT)
curl -X POST "https://api.rebelfi.io/v1/ramp/recipients/1/onramp-accounts" \
-H "x-api-key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"destination_wallet_id": 42,
"destination_asset": "USDC",
"rail": "ach"
}'
{
"id" : 1 ,
"account_number" : "12345678" ,
"routing_number" : "987654321" ,
"bank_name" : "Lead Bank" ,
"capabilities" : [ "ach" ],
"status" : "active" ,
"destination_asset" : "USDC" ,
"network_id" : "solana-mainnet"
}
Off-Ramp Account (USDC/USDT → USD)
curl -X POST "https://api.rebelfi.io/v1/ramp/recipients/1/offramp-accounts" \
-H "x-api-key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"org_wallet_id": 42,
"source_asset": "USDC",
"rail": "ach",
"bank_details": {
"routing_number": "021000021",
"account_number": "987654321",
"account_type": "checking",
"account_holder_name": "OnEdge Inc",
"bank_name": "Chase Bank"
}
}'
{
"id" : 1 ,
"source_crypto_address" : "0xABC123..." ,
"source_asset" : "USDC" ,
"destination_asset" : "USD" ,
"rail" : "ach" ,
"status" : "active" ,
"fiat_bank_name" : "Chase Bank"
}
Share the bank account details (on-ramp) or crypto deposit address (off-ramp) with your recipient.
Step 4: Receive Transaction Events
When funds flow through a ramp account, RebelFi fires webhook events:
On-ramp completed:
{
"event" : "transaction.completed" ,
"timestamp" : "2026-03-20T14:35:00Z" ,
"data" : {
"transaction_id" : 1 ,
"customer_id" : 1 ,
"type" : "onramp" ,
"usd_amount" : "50000" ,
"total_fee" : "125" ,
"delivered_amount" : "49875"
}
}
Off-ramp completed:
{
"event" : "offramp_transaction.completed" ,
"timestamp" : "2026-03-20T14:35:00Z" ,
"data" : {
"transaction_id" : 2 ,
"customer_id" : 1 ,
"type" : "offramp" ,
"usd_amount" : "25000" ,
"total_fee" : "62.50" ,
"delivered_amount" : "24937.50"
}
}
Step 5: Query Transactions
Pull transaction history anytime via the API:
curl "https://api.rebelfi.io/v1/ramp/transactions?customer_id=1&page=1" \
-H "x-api-key: your_api_key"
Next Steps
Webhooks Full webhook event reference
On-Ramp API Recipient and on-ramp account endpoints
Off-Ramp Off-ramp account setup and payouts