Skip to main content
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