Solana
Solana On-Chain API
Self-hosted Solana blockchain API that replaces Helius ($49-999/mo) with free public RPC endpoints, edge caching, and load balancing. All endpoints are under /api/v1/solana/.
Architecture
Client → api.bitcain.net/api/v1/solana/* → Cloud Run Backend
→ solana-rpc.bitcain.net (CF Worker, RPC load balancer)
→ Free public Solana RPC endpoints (round-robin + failover)DEX data flows separately via cat-piss streaming:
Solana WebSocket → cat-piss (parse/detect) → AgentDB (RAG) → Supabase (storage)GET /api/v1/solana/health
Check Solana RPC proxy health and current network status.
Response:
{
"status": "healthy",
"rpc_health": "ok",
"current_slot": 312847562
}GET /api/v1/solana/wallet/{address}
Get complete wallet state: SOL balance + all SPL token holdings.
Parameters:
| Name | In | Type | Required | Description |
|---|---|---|---|---|
address | path | string | Yes | Solana wallet address (base58, 32-44 chars) |
Response:
{
"status": "success",
"data": {
"address": "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg",
"sol_balance": {
"address": "vines1vzr...",
"lamports": 1000000000,
"sol": "1.0"
},
"tokens": [
{
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"owner": "vines1vzr...",
"token_account": "...",
"amount": "100.50",
"raw_amount": "100500000",
"decimals": 6,
"symbol": null,
"name": null
}
],
"total_tokens": 1,
"fetched_at": "2026-03-22T12:00:00Z"
}
}GET /api/v1/solana/transactions/{address}
Get parsed transaction history for an address. Replaces Helius Enhanced Transactions API.
Parameters:
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
address | path | string | Yes | — | Solana wallet address |
limit | query | integer | No | 20 | Max transactions (1-100) |
before | query | string | No | — | Signature to paginate before |
Response:
{
"status": "success",
"data": [
{
"signature": "5abc...",
"block_time": "2026-03-22T12:00:00Z",
"slot": 312847562,
"fee_lamports": 5000,
"fee_sol": "0.000005",
"success": true,
"tx_type": "swap",
"description": "Swapped via Jupiter v6",
"source": "vines1vzr...",
"program_ids": ["JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"]
}
],
"count": 1
}Transaction Types: transfer, token_transfer, swap, stake, unstake, create_account, close_account, nft_mint, nft_transfer, program_interaction, unknown
GET /api/v1/solana/fees
Get priority fee estimates based on recent transactions. Replaces Helius Priority Fee API.
Parameters:
| Name | In | Type | Required | Description |
|---|---|---|---|---|
accounts | query | string | No | Comma-separated account addresses to scope fees |
Response:
{
"status": "success",
"data": {
"min_fee": 0,
"low_fee": 1000,
"medium_fee": 5000,
"high_fee": 25000,
"very_high_fee": 100000,
"max_fee": 500000,
"sample_count": 150,
"fetched_at": "2026-03-22T12:00:00Z"
}
}Fee values are in micro-lamports per compute unit.
| Tier | Percentile | Use Case |
|---|---|---|
low_fee | 25th | Economy — non-urgent transactions |
medium_fee | 50th | Standard — most transactions |
high_fee | 75th | Fast — time-sensitive trades |
very_high_fee | 95th | Urgent — competitive MEV scenarios |
POST /api/v1/solana/send
Send a signed transaction to the Solana network. Our RPC proxy fans out to multiple endpoints for better landing rates (replaces Helius Sender).
Request Body:
{
"signed_transaction": "base64-encoded-signed-transaction",
"skip_preflight": false
}Response:
{
"signature": "5abc...",
"status": "sent"
}Error Responses
All endpoints return errors in a consistent format:
{
"status": "error",
"error": "Invalid Solana address length: 10",
"code": "INVALID_ADDRESS"
}| Code | Description |
|---|---|
INVALID_ADDRESS | Malformed Solana address (not valid base58) |
SOLANA_ERROR | Generic RPC or processing error |
SEND_FAILED | Transaction sending failed on all endpoints |