dunops.com/Docsbeta

API reference

Rate limits

DunOps rate-limits API requests to ensure fair use across all workspaces. Limits vary by plan.

Limits by plan

PlanRequests / minuteBurst
HobbyNo API access
Pro60 req/min120
Pro 10×300 req/min600

Limits apply per workspace. Playbook runs triggered via API count against run quotas (set per plan), not the API rate limit.


Handling 429 Too Many Requests

429 response body
{
  "error": "rate_limit_exceeded",
  "message": "You have exceeded 60 requests per minute.",
  "retry_after": 12
}

The retry_after value is in seconds. The response also includes a Retry-After HTTP header with the same value. Back off for that duration before retrying.

Simple retry-after handler
async function fetchWithRetry(url: string, opts: RequestInit, retries = 3) {
  const res = await fetch(url, opts);
  if (res.status === 429 && retries > 0) {
    const wait = Number(res.headers.get("Retry-After") ?? 5) * 1000;
    await new Promise((r) => setTimeout(r, wait));
    return fetchWithRetry(url, opts, retries - 1);
  }
  return res;
}

Best practices

Cache list responses

Endpoints like GET /providers and GET /playbooks don't change often. Cache them locally for 60 seconds instead of fetching on every request.

If you need higher limits for an automation use case (e.g. a CI/CD pipeline that runs 50 deploys a minute), contact support — we can discuss enterprise limits.


Next steps