Base URL
All API requests use the following base URL:
https://api.rebelfi.io/v1
Authentication
Authenticate all requests with your API key in the x-api-key header:
curl -X GET "https://api.rebelfi.io/v1/venues" \
-H "x-api-key: your_api_key_here"
Keep your API key secure. Never expose it in client-side code or commit it to version control.
Success Responses
Successful responses return data directly (no envelope):
{
"venues": [...],
"count": 2,
"strategyCount": 4
}
HTTP status codes:
200 OK - Request succeeded
201 Created - Resource created
202 Accepted - Request accepted for processing
Error Responses
Error responses include a message and error code:
{
"statusCode": 400,
"message": "Insufficient balance for operation",
"code": "INSUFFICIENT_BALANCE",
"details": {
"required": "1000000000",
"available": "500000000"
}
}
HTTP status codes:
400 Bad Request - Invalid parameters
401 Unauthorized - Invalid or missing API key
403 Forbidden - API key disabled
404 Not Found - Resource not found
429 Too Many Requests - Rate limit exceeded
500 Internal Server Error - Server error
Error Codes
| Code | Description |
|---|
INVALID_AMOUNT | Amount is zero, negative, or malformed |
INVALID_ADDRESS | Wallet address format is invalid |
INVALID_TOKEN | Token address not recognized |
INSUFFICIENT_BALANCE | Wallet balance too low |
STRATEGY_NOT_ACTIVE | Strategy is paused |
ALLOCATION_NOT_FOUND | No position at this venue |
OPERATION_EXPIRED | Unsigned transaction expired |
OPERATION_ALREADY_SUBMITTED | Transaction already submitted |
TOKEN_MISMATCH | Token doesn’t match strategy |
INVALID_OPERATION_STATUS | Operation in wrong state for requested action |
OPERATION_IN_PROGRESS | Another operation is executing for this wallet |
VENUE_NOT_FOUND | Venue ID doesn’t exist |
STRATEGY_NOT_FOUND | Strategy ID doesn’t exist |
OPERATION_NOT_FOUND | Operation ID doesn’t exist |
TRANSACTION_NOT_FOUND | Transaction ID doesn’t exist |
WALLET_NOT_FOUND | Wallet not registered |
ORGANIZATION_NOT_FOUND | Organization not found for API key |
TOKEN_NOT_FOUND | Token not supported |
INSUFFICIENT_GAS | Not enough native token for fees (ETH, POL, or SOL) |
SIMULATION_FAILED | Transaction simulation failed |
INVALID_API_KEY | API key not recognized |
API_KEY_DISABLED | API key has been revoked |
RATE_LIMIT_EXCEEDED | Too many requests |
Rate Limits
API requests are rate limited per API key:
| Endpoint Type | Limit |
|---|
| Read (GET) | 100 requests/minute |
| Write (POST) | 20 requests/minute |
When rate limited, you’ll receive a 429 response with RATE_LIMIT_EXCEEDED code. Implement exponential backoff for retries.
Amount Convention
All monetary amounts in the API are represented as strings in base units (smallest denomination).
| Token | Decimals | 1 Token in Base Units | Example |
|---|
| USDC | 6 | "1000000" | "5000000" = 5 USDC |
| USDT | 6 | "1000000" | "10000000" = 10 USDT |
Amounts are always strings, never numbers, to preserve precision.
Transaction Submission
After signing a transaction, you have two options:
| Method | When to Use |
|---|
submit-signed | You want RebelFi to broadcast the transaction to the blockchain. Send the signed transaction bytes and RebelFi handles broadcasting and confirmation tracking. |
submit-hash | You broadcast the transaction yourself (e.g., via your own RPC node) and just send RebelFi the transaction hash so it can track confirmation. |
Most integrations should use submit-signed for simplicity. Use submit-hash if you need control over the broadcast (e.g., priority fees, custom RPC endpoints).
Sandbox Environment
For testing, use the sandbox base URL:
https://sandbox-api.rebelfi.io/v1
Sandbox API keys have the prefix rfk_sandbox_. See the Sandbox guide for details.
Supported Blockchains
| Blockchain | Token Support | Status |
|---|
| Solana | USDC, USDT | Live |
| Polygon | USDC, USDT | Live |
| Ethereum | USDC, USDT | Live |
| Base | USDC | Live |
| Arbitrum | USDC, USDT | Coming Soon |
Request Examples
cURL
# List venues (Ethereum)
curl -X GET "https://api.rebelfi.io/v1/venues?blockchain=ethereum&token=USDC" \
-H "x-api-key: your_api_key"
# Plan supply operation (Ethereum)
curl -X POST "https://api.rebelfi.io/v1/operations/supply" \
-H "x-api-key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"walletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18",
"strategyId": 5,
"amount": "1000000000",
"tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
}'
JavaScript (fetch)
const API_KEY = process.env.REBELFI_API_KEY;
const BASE_URL = 'https://api.rebelfi.io/v1';
async function listVenues(blockchain = 'ethereum') {
const response = await fetch(`${BASE_URL}/venues?blockchain=${blockchain}&token=USDC`, {
headers: { 'x-api-key': API_KEY }
});
if (!response.ok) {
const error = await response.json();
throw new Error(`${error.code}: ${error.message}`);
}
return response.json();
}
Python (requests)
import requests
import os
API_KEY = os.environ['REBELFI_API_KEY']
BASE_URL = 'https://api.rebelfi.io/v1'
def list_venues(blockchain='ethereum'):
response = requests.get(
f'{BASE_URL}/venues',
headers={'x-api-key': API_KEY},
params={'blockchain': blockchain, 'token': 'USDC'}
)
response.raise_for_status()
return response.json()
Available Resources
| Resource | Endpoints |
|---|
| Wallets | Register, list, get, update |
| Venues | List, get |
| Allocations | List, get by strategy, earnings |
| Operations | Supply, unwind, get, cancel |
| Transactions | Submit hash, submit signed, get, recover |
SDK Recommendation
For TypeScript/JavaScript projects, we recommend using the official SDK:
The SDK provides:
- Full TypeScript types
- Wallet registration and management
- Automatic error handling with
RebelfiError
- Flexible wallet identification (
walletId, walletAddress, or userId)
See the SDK documentation for details.