FortiBlox LogoFortiBlox Docs
AXIO Block Engine

API Reference

Complete gRPC and REST API reference for the AXIO block engine — bundle submission, status, reputation, and analytics endpoints.

API Reference

AXIO exposes two APIs: a gRPC API (port 7440) for high-performance bundle submission, and a REST API (port 7435) for analytics, status, and staking data.

gRPC API (Searcher)

Endpoint: grpc://engine.axio.fortiblox.com:7440

Authentication

All RPC calls require an API key in the metadata:

x-api-key: <your-api-key>

SubmitBundle (Unary)

Submit a single bundle for auction.

service AXIOEngine {
  rpc SubmitBundle(BundleRequest) returns (BundleResponse);
}

message BundleRequest {
  repeated bytes transactions = 1;  // base64-encoded serialized transactions
  uint64 tip = 2;                   // tip in lamports
  string mev_type = 3;              // "sandwich" | "arbitrage" | "liquidation" | "jit" | "unknown"
  optional uint64 target_slot = 4;  // target slot (default: next available)
  optional bytes encrypted_payload = 5;  // X25519-encrypted bundle (optional)
}

message BundleResponse {
  string bundle_id = 1;
  string status = 2;                // "accepted" | "rejected"
  optional string reason = 3;       // rejection reason
  optional uint64 tip_floor = 4;    // current tip floor for reference
}

SubmitBundleStream (Bidirectional Streaming)

Maintain a persistent connection for high-frequency submission:

service AXIOEngine {
  rpc SubmitBundleStream(stream BundleRequest) returns (stream BundleConfirmation);
}

message BundleConfirmation {
  string bundle_id = 1;
  string status = 2;        // "accepted" | "included" | "dropped" | "expired"
  optional uint64 slot = 3;
  repeated string signatures = 4;
}

GetTipFloor (Unary)

service AXIOEngine {
  rpc GetTipFloor(Empty) returns (TipFloorResponse);
}

message TipFloorResponse {
  uint64 tip_floor = 1;         // current tip floor in lamports
  uint64 tip_floor_24h_avg = 2; // 24h average
  double utilization = 3;       // current block space utilization (0-1)
}

GetReputation (Unary)

service AXIOEngine {
  rpc GetReputation(Empty) returns (ReputationResponse);
}

message ReputationResponse {
  double score = 1;        // 0-100
  string tier = 2;         // "bronze" | "silver" | "gold" | "platinum"
  double landing_rate = 3;
  double sim_success = 4;
  uint64 bundles_submitted = 5;
  uint64 bundles_landed = 6;
}

REST API (Rewards & Analytics)

Base URL: https://axio.fortiblox.com/api/v1

GET /api/v1/status

Health check. No authentication required.

{
  "service": "axio-rewards-api",
  "version": "1.0.0",
  "status": "ok",
  "uptime": 86400
}

GET /api/v1/pool

Current stake pool state.

{
  "tvl": 1247832,
  "exchangeRate": 1.096,
  "apy": 12.4,
  "validatorCount": 47,
  "axntSupply": 84291,
  "baseApy": 7.2,
  "mevApy": 5.2
}

GET /api/v1/position/:wallet

User's staking position. Requires wallet address (base58).

{
  "axntBalance": 142.5,
  "valueInSol": 156.21,
  "unrealizedRewards": 3.24,
  "apyEarned": 12.4
}

GET /api/v1/validators

List of validators in the AXIO network.

[
  {
    "address": "7Np41oe...",
    "name": "FortiBlox #1",
    "stake": 245000,
    "apy": 13.2,
    "commission": 5,
    "mevScore": 98
  }
]

GET /api/v1/overview/:period

Overview metrics for a time period. Period: 1h, 24h, 7d, 30d.

{
  "period": "24h",
  "total_tips_earned": 12400000000,
  "total_bundles_landed": 1842,
  "avg_tip_per_bundle": 6731,
  "landing_rate": 94.7
}

GET /api/v1/apy

Current APY breakdown.

{
  "current_apy": 12.4,
  "base_apy": 7.2,
  "mev_apy": 5.2,
  "apy_7d_avg": 11.8,
  "apy_30d_avg": 10.9
}

GET /api/v1/exchange-rate

aXNT exchange rate and history.

{
  "rate": 1.096,
  "rate_change_24h": 0.12,
  "rate_change_7d": 0.84,
  "rate_change_30d": 3.41
}

GET /api/v1/mev/breakdown

MEV revenue breakdown by type.

[
  { "type": "Sandwich", "bundles": 312, "revenue": 5.8, "percentage": 46.8 },
  { "type": "Arbitrage", "bundles": 187, "revenue": 3.4, "percentage": 27.4 },
  { "type": "Liquidation", "bundles": 94, "revenue": 2.1, "percentage": 16.9 },
  { "type": "Other", "bundles": 49, "revenue": 1.1, "percentage": 8.9 }
]

GET /api/v1/charts/tvl?period=30d

TVL history for charting.

[
  { "timestamp": "2026-03-22", "value": 823000 },
  { "timestamp": "2026-03-23", "value": 841000 }
]

GET /api/v1/charts/apy?period=30d

APY history for charting.

[
  { "timestamp": "2026-03-22", "value": 11.2 },
  { "timestamp": "2026-03-23", "value": 11.8 }
]

GET /api/v1/dashboard

Aggregated dashboard metrics.

{
  "tvl": 1247832,
  "tvlChange24h": 3.2,
  "apy": 12.4,
  "baseApy": 7.2,
  "mevApy": 5.2,
  "bundlesLanded24h": 1842,
  "bundlesTotal": 527,
  "landingRate": 94.7,
  "mevRevenue24h": 12.4,
  "mevRevenueTotal": 847.3,
  "validatorCount": 47,
  "axntSupply": 84291,
  "exchangeRate": 1.096,
  "exchangeRateChange24h": 0.12
}

POST /api/v1/bundles

Submit a bundle via REST (lower performance than gRPC — use for low-frequency submission).

Request:

{
  "transactions": [
    {
      "data": "<base64-encoded-transaction>",
      "accounts": [
        { "pubkey": "So1...", "isWritable": true }
      ]
    }
  ],
  "tip": 500000,
  "mevType": "arbitrage"
}

Response 202:

{
  "bundleId": "d500d0bf-a73f-4a1b-a0ae-824d14e3ae45",
  "status": "accepted"
}

GET /api/v1/bundles/:id

Check bundle status.

{
  "bundleId": "d500d0bf-...",
  "status": "included",
  "slot": 149900001,
  "signatures": ["5K8rE..."]
}

GET /api/v1/pnl?strategy=sandwich&period=24h

P&L accounting per strategy.

{
  "strategy": "sandwich",
  "period": "24h",
  "totalRevenue": 5.8,
  "totalCost": 0.3,
  "netProfit": 5.5,
  "bundleCount": 312,
  "avgProfitPerBundle": 0.0176
}

Rate Limits

EndpointLimit
gRPC SubmitBundlePer-searcher token bucket (see Searcher Guide)
gRPC StreamingPer-searcher token bucket
REST /api/v1/*100 req/s per IP
REST /api/v1/bundles50 req/s per API key

Error Codes

CodeMeaning
400Invalid request (bad base64, too many txs, tip below floor)
401Missing API key
403Invalid API key or insufficient permissions
429Rate limited — back off and retry
500Internal server error
503Service unavailable (maintenance)