Ravencoin Explorer — API

Production‑ready endpoints to power explorers, bots and dashboards.

Online

Quickstart

Indexing note: the Ravencoin node is synced, but the database index is still catching up. Live endpoints work; historical coverage becomes complete once `/api/progress` reaches the node height.

Base URL

BASE https://api.ravencoinexplorer.com

Auth & Rate Limits

AUTH None (public)
RL Please keep ≤ ~3 req/sec while we scale

CORS

CORS Enabled for GET

Use with cURL

shell
curl -s https://api.ravencoinexplorer.com/api/ready | jq .
curl -s https://api.ravencoinexplorer.com/api/progress | jq .
curl -s 'https://api.ravencoinexplorer.com/api/blocks/recent?limit=5' | jq .

Use from JavaScript

browser
const BASE = 'https://api.ravencoinexplorer.com';

async function progress(){
  const r = await fetch(`${BASE}/api/progress`, {cache:'no-store'});
  if(!r.ok) throw new Error('HTTP '+r.status);
  return r.json();
}

progress().then(console.log).catch(console.error);

Use from Python

python
import requests
BASE = "https://api.ravencoinexplorer.com"

p = requests.get(f"{BASE}/api/progress", timeout=10).json()
print(p)

recent = requests.get(f"{BASE}/api/blocks/recent", params={"limit": 5}, timeout=10).json()
print(recent["items"][0])

Use from Node.js

node
import fetch from 'node-fetch';
const BASE = 'https://api.ravencoinexplorer.com';

const r = await fetch(`${BASE}/api/blocks/recent?limit=5`);
const data = await r.json();
console.log(data.items.map(b => ({height:b.height, hash:b.hash})));

Endpoints

System & Node

GET /status.jsonTry

Static status of the API frontend (ok/stage/message).

Response schema & example
{
  "ok": true,
  "service": "rvn-api",
  "stage": "live",
  "message": "Data endpoints active"
}
GET /metricsTry

Server + daemon metrics. Values may be approximate during initial sync.

Response schema & example
// Schema (types)
{
  ok: boolean,
  db_blocks: number,
  db_txs: number,
  db_utxo: number,
  rpc_blockcount: number,
  rpc_connections: number,
  rpc_mempool: number,
  // optional: cpu_percent, mem_percent, disk_percent, uptime_sec, net_bytes_sent, net_bytes_recv
}

// Example
{
  "ok": true,
  "db_blocks": 411400,
  "db_txs": 1616929,
  "db_utxo": 8816794,
  "rpc_blockcount": 3972652,
  "rpc_connections": 24,
  "rpc_mempool": 2
}
GET /nodeinfoTry

Ravencoin node state from RPC.

Response schema & example
// Schema (types)
{
  ok: boolean,
  chain: "main" | "test" | string,
  blocks: number,
  headers: number,
  difficulty: number,
  verificationprogress: number, // 0..1
  connections: number,
  version: number,
  subversion: string,
  mempool_tx: number
}

// Example
{
  "ok": true,
  "chain": "main",
  "blocks": 3972652,
  "headers": 3972652,
  "difficulty": 58499.30207850935,
  "verificationprogress": 0.9999964151,
  "connections": 24,
  "version": 4060100,
  "subversion": "/Ravencoin:4.6.1/",
  "mempool_tx": 2
}

Explorer API

GET /api/readyTry

Lightweight readiness ping.

Response schema & example
{
  "ok": true,
  "ready": true,
  "blocks": 414399
}
GET /api/progressTry

Indexing progress (DB vs last indexed height).

Response schema & example
{
  "ok": true,
  "last_indexed_height": 414399,
  "blocks_in_db": 414399
}
GET /api/blocks/recent?limit=10Try

Most recent blocks in the database.

Response schema & example
// Query params: limit (1..100), default 10
{
  ok: true,
  items: [{
    height: number,
    hash: string,      // hex
    time: string,      // UTC ISO or "YYYY-MM-DD HH:mm:ss"
    size: number,      // bytes
    difficulty: number
  }, ...]
}

// Example (truncated)
{
  "ok": true,
  "items": [
    { "height": 403599, "hash": "000000...8BB0D", "time": "2018-10-14 09:10:52", "size": 970, "difficulty": 41861.4569 }
  ]
}
PLANNED /api/stats/tx-per-day?days=30

Planned daily transaction counts; not live yet.

PLANNED /api/stats/addresses-per-day?days=30
PLANNED /api/stats/fees-per-day?days=30
PLANNED /api/stats/blocks-per-hour?hours=48
Response schema & example
// Query params: days (1..90), default 30
{
  ok: true,
  items: [{
    day: "YYYY-MM-DD",
    tx_count: number
  }, ...]
}

// Example (values illustrative)
{
  "ok": true,
  "items": [
    { "day": "2025-08-01", "tx_count": 1245 },
    { "day": "2025-08-02", "tx_count": 1311 }
  ]
}

Errors

We use standard HTTP codes. Body format:

{
  "ok": false,
  "error": "human-readable message",
  "code": "optional_machine_code"
}
  • 400 — bad request / invalid parameter
  • 404 — endpoint or record not found
  • 429 — too many requests
  • 500 — internal error

Pagination & Limits

For list endpoints we support simple limits now (e.g. ?limit=10). Cursor‑based pagination will follow for heavy lists.

Caching

Short‑lived caches may apply. Use cache: 'no-store' in browsers if you poll live.

Versioning

We add fields without breaking existing ones. If we deprecate, we’ll announce in advance.

Roadmap