Skip to content

GET /v1/status

Updated
Reading time
2 min

The snapshot to check before sending a batch, and the first thing to look at when your jobs are queuing. It answers one question: can a given model take work right now? The capacity figures describe Revoye Cloud as a whole; the queue figures are yours alone.

curl $REVOYE_BASE_URL/v1/status \
  -H "Authorization: Bearer $REVOYE_API_KEY"
{
  "agents": { "total": 7, "idle": 3, "busy": 2, "error": 0, "offline": 2 },
  "providers": [
    {
      "kind": "chatgpt",
      "enabled": true,
      "agents_idle": 2,
      "rate_limit_per_hour": 60,
      "used_this_hour": 14
    },
    {
      "kind": "deepseek",
      "enabled": true,
      "agents_idle": 1,
      "rate_limit_per_hour": null,
      "used_this_hour": 3
    }
  ],
  "queue": { "depth": 4, "oldest_queued_at": "2026-09-18T09:12:00.000Z" }
}

Reading it

"Agents" are the processing capacity Revoye Cloud has for each model: each one works on one job at a time.

FieldMeans
agents.totalAll processing capacity across every model
agents.idle / busy / error / offlineHow much of it is free, working, unavailable because of an error, or not currently running. The four add up to total
providers[].kindThe model: chatgpt, claude, gemini, deepseek, qwen or perplexity
providers[].enabledWhether the model is accepting work at all. Disabled models are listed here but omitted from /v1/models
providers[].agents_idleCapacity that could start a job for this model right now. Narrower than agents.idle — it counts only capacity that is idle and ready to take work
providers[].rate_limit_per_hourHow many jobs the model can start per hour. null means no hourly limit
providers[].used_this_hourJobs already counted against that limit this hour
queue.depthYour jobs waiting to start
queue.oldest_queued_atWhen your oldest waiting job was submitted, or null. The single best signal that you are sending faster than capacity allows

agents_idle of zero is not an error. It is a description of capacity at this instant. Jobs sent now wait in the queue and start when capacity frees up or the hourly window resets.

Using it well

As a pre-flight check. Before a batch, confirm the model you want is enabled, has agents_idle > 0 or at least busy capacity, and has headroom between used_this_hour and rate_limit_per_hour. If it has none, either queue with a callback_url and let the work run when it can, or spread the batch across models by omitting provider.

As a capacity signal. A queue.depth that grows while oldest_queued_at gets older means you are submitting faster than the model can serve. Send less at once, or let Revoye Cloud choose the model — more retries will not help.

Not as a lock. The snapshot is true when it is generated and can be stale by the time you act on it — capacity idle a moment ago may already be busy. Treat it as a hint and handle NO_AGENT_AVAILABLE anyway.

Not in a tight loop. Polling status per request spends your read rate limit for nothing. Poll on a schedule you actually need — once a minute is plenty for a dashboard — and let the errors tell you the rest.

Requires status:read.