Reaver GPUReaver GPU
API Launch App

Reference

API Reference

Everything in Reaver GPU is reachable through the REST API and the reaver CLI, which is a thin wrapper over it. Auth is wallet-based — no API keys.

Base URL & versioning

All endpoints are served under a versioned path. Breaking changes ship behind a new version; v1 is current.

text
https://api.reavergpu.io/v1

Authentication

Clients authenticate by signing a server-issued challenge with their Solana wallet, exchanging the signature for a short-lived bearer token. The CLI handles this for you via reaver login; for direct API use, request a challenge, sign it, and post it back.

bash
# 1. get a challenge
curl -s https://api.reavergpu.io/v1/auth/challenge?wallet=7xQs...4Fve

# 2. sign it in-wallet, then exchange for a token
curl -s -X POST https://api.reavergpu.io/v1/auth/verify \
  -H "Content-Type: application/json" \
  -d '{"wallet":"7xQs...4Fve","signature":"<base58-sig>"}'

# → { "token": "eyJ...", "expiresIn": 3600 }

Pass the token on every request:

text
Authorization: Bearer <token>

CLI overview

The CLI mirrors the API surface. The most common commands:

CommandDescription
reaver loginAuthenticate with your wallet
reaver runSubmit a workload
reaver quoteEstimate cost for a spec
reaver jobsList, inspect, and follow jobs
reaver stakeDelegate, claim, and unbond
reaver-nodeOperator-side node management
bash
reaver run \
  --image docker.io/myorg/job:latest \
  --gpu h100 --region na --max-minutes 60

Jobs endpoints

Method & pathDescription
POST /v1/jobsSubmit a workload, escrow funds
GET /v1/jobsList your jobs
GET /v1/jobs/:idStatus, cost, and node assignment
GET /v1/jobs/:id/logsStream container logs
POST /v1/jobs/:id/cancelStop the job, settle metered usage
POST /v1/quoteEstimate cost without submitting

Submit a job

bash
curl -s -X POST https://api.reavergpu.io/v1/jobs \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "docker.io/myorg/job:latest",
    "gpu": "a100",
    "region": "eu",
    "maxMinutes": 120
  }'

# → { "id": "job_3kPa...", "status": "queued" }

Nodes endpoints

Method & pathDescription
GET /v1/nodesBrowse available nodes by class/region
GET /v1/nodes/:idClass, region, reputation, uptime
POST /v1/nodes/registerRegister a node (operator, signed)
GET /v1/nodes/:id/earningsSettled earnings over a window

Errors

The API uses standard HTTP status codes with a structured body. Client errors are 4xx; transient network conditions are 503 with a Retry-After header.

json
{
  "error": "insufficient_escrow",
  "message": "wallet balance below rate × maxMinutes",
  "status": 402
}

Rate limits

Requests are rate-limited per wallet. Limits are returned on every response so clients can back off cleanly.

text
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118
X-RateLimit-Reset: 1717200000
Tip: for long-running automation, prefer the CLI's --follow streams and webhooks over tight polling loops to stay well under the limit.