Ravencoin Explorer API Docs

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

Quickstart

Indexing note: the Ravencoin node and main block index are synced. Received address transaction history is available through the dedicated address_tx index. Outgoing/spent history remains unavailable until vin indexing/backfill exists.

Base URL

BASE https://api.ravencoinexplorer.com

Auth & Rate Limits

AUTH None (public)
RL Fair-use public access; slow down on 429

CORS

CORS Enabled for GET

Client Examples

Four basic examples, stacked vertically so they stay readable on desktop and mobile.

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/v1/blocks/latest?limit=5' | jq .
curl -s 'https://api.ravencoinexplorer.com/api/v1/address-tx/backfill-status' | 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/v1/blocks/latest", params={"limit": 5}, timeout=10).json()
print(recent["data"]["items"][0])

Use from Node.js

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

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

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 }
  ]
}

Explorer API v1

GET /api/v1/statusTry

Public chain/index status for explorer clients. This avoids server-admin details and focuses on Ravencoin chain state.

GET /api/v1/blocks/latest?limit=10Try

Latest indexed blocks with height, hash, time, size, difficulty and transaction count.

Response schema & example
{
  "ok": true,
  "data": {
    "items": [{
      "height": 4377000,
      "hash": "000000...",
      "time": 1779440000,
      "time_iso": "2026-05-22T09:46:40Z",
      "size": 770,
      "difficulty": 32301.72,
      "tx_count": 3
    }]
  },
  "meta": { "limit": 10 }
}
GET /api/v1/block/{height_or_hash}

Block detail by height or exact block hash.

GET /api/v1/block/{height_or_hash}/txs?limit=25&offset=0

Paged transaction list for a block. No total count is returned; has_more is determined with LIMIT + 1.

GET /api/v1/tx/{txid}?output_limit=10&output_offset=0

Transaction detail with paged outputs. Inputs currently report input_status: unavailable until vin indexing/backfill exists.

Output pagination
// Query params
output_limit: 1..500, default 25
output_offset: 0 or higher, default 0

// Meta fields
{
  "outputs_limit": 10,
  "outputs_offset": 0,
  "outputs_returned": 10,
  "outputs_has_more": true,
  "outputs_hard_limit": 10000
}
GET /api/v1/search?q=...

Exact search for block height, block hash, txid, or address. No wildcard or partial address search.

GET /api/v1/address/{address}?utxo_limit=0

Light address summary with balance. Use the separate UTXO endpoint for cursor-paged UTXO browsing.

Address summary meta
// Query params
utxo_limit: 0..100, default 25; use 0 for summary-only

// Meta fields
{
  "utxo_limit": 0,
  "utxo_offset": 0,
  "utxo_status": "available",
  "has_more": false,
  "history_status": "received_only",
  "asset_status": "unavailable"
}

For very large addresses, the summary can still return balance while reporting utxo_status: limited_query_timeout and an empty UTXO page.

GET /api/v1/address/{address}/utxos?limit=10&cursor=...

Cursor-paged UTXO list for an address. This keeps large wallets usable without deep offset pagination.

UTXO cursor pagination
// Query params
limit: 1..100, default 25
cursor: optional next_cursor from the previous response

// Meta fields
{
  "limit": 10,
  "next_cursor": "eyJibG9ja19oZWlnaHQi...",
  "has_more": true,
  "utxo_status": "available",
  "pagination": "cursor"
}
GET /api/v1/address/{address}/txs?limit=10&cursor=...

Received-only address transaction history from the dedicated address_tx index. Use next_cursor for pagination; outgoing/spent history remains unavailable until vin indexing/backfill exists.

Address history pagination
// Query params
limit: 1..100, default 25
cursor: optional next_cursor from the previous response

// Meta fields
{
  "limit": 10,
  "next_cursor": "eyJibG9ja19oZWlnaHQi...",
  "has_more": true,
  "history_status": "received_only",
  "pagination": "cursor",
  "direction_status": {
    "received": "available",
    "spent": "unavailable_needs_vin_index",
    "outgoing": "unavailable_needs_vin_index"
  }
}
GET /api/v1/address-tx/backfill-statusTry

Lightweight progress endpoint for the address history backfill job. It reads sync state only; it does not count heavy tables live.

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.

Fair Use

Public access is intended for normal explorer, wallet, bot and dashboard usage. Heavy scraping, brute-force probing and clients that ignore 429 responses may be slowed or blocked automatically. Contact us for community or extended access if you need higher sustained limits.

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