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.
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.
# 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:
Authorization: Bearer <token>
CLI overview
The CLI mirrors the API surface. The most common commands:
| Command | Description |
|---|---|
| reaver login | Authenticate with your wallet |
| reaver run | Submit a workload |
| reaver quote | Estimate cost for a spec |
| reaver jobs | List, inspect, and follow jobs |
| reaver stake | Delegate, claim, and unbond |
| reaver-node | Operator-side node management |
reaver run \ --image docker.io/myorg/job:latest \ --gpu h100 --region na --max-minutes 60
Jobs endpoints
| Method & path | Description |
|---|---|
| POST /v1/jobs | Submit a workload, escrow funds |
| GET /v1/jobs | List your jobs |
| GET /v1/jobs/:id | Status, cost, and node assignment |
| GET /v1/jobs/:id/logs | Stream container logs |
| POST /v1/jobs/:id/cancel | Stop the job, settle metered usage |
| POST /v1/quote | Estimate cost without submitting |
Submit a job
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 & path | Description |
|---|---|
| GET /v1/nodes | Browse available nodes by class/region |
| GET /v1/nodes/:id | Class, region, reputation, uptime |
| POST /v1/nodes/register | Register a node (operator, signed) |
| GET /v1/nodes/:id/earnings | Settled 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.
{
"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.
X-RateLimit-Limit: 120 X-RateLimit-Remaining: 118 X-RateLimit-Reset: 1717200000
--follow streams and webhooks over tight polling loops to stay well under the limit.
Reaver GPU