API reference
The Rundun REST API is a JSON REST API. All communication happens over HTTPS.
Base URL
https://api.rundun.app/v1
All endpoints are versioned under /v1/. Rundun increments to /v2/ only on breaking changes. Additive changes (new fields, new endpoints) do not require a version bump.
Authentication
Every request requires an API key passed as a Bearer token in the Authorization header:
Authorization: Bearer rdk_live_<your-api-key>
API keys are org-scoped. Every resource you create via a key belongs to that organization's quota and billing. You cannot access another org's resources with your key.
Getting an API key
- Sign in at my.rundun.app
- Go to Settings → API keys → New key
- Copy the key immediately — the plaintext is shown once and never again
Key format: rdk_live_ followed by 32 random characters. Example:
rdk_live_a3f9bc4d8e1f2a3b4c5d6e7f8a9b0c1d
Example authenticated request
curl https://api.rundun.app/v1/templates \
-H "Authorization: Bearer rdk_live_a3f9bc4d8e1f2a3b4c5d6e7f8a9b0c1d"
Key security
- Store keys as environment variables — never commit them to source control
- Revoke compromised keys immediately from the dashboard (Settings → API keys → Revoke)
- Each key has full org access — treat them like passwords
Rate limiting
All requests pass through a Rundun's edge layer that enforces rate limits before reaching the API. Rate-limited responses return 429 with a Retry-After header.
Rate limits are applied per API key. Contact support if you need higher limits for your use case.
Request format
Set Content-Type: application/json on all write requests and send a JSON body:
curl -X POST https://api.rundun.app/v1/runs \
-H "Authorization: Bearer rdk_live_..." \
-H "Content-Type: application/json" \
-d '{
"template_id": "t-550e8400-e29b-41d4-a716-446655440000",
"expires_in_hours": 24
}'
Response format
All responses are JSON. Successful responses return the relevant resource object directly for single resources, or a data array with pagination metadata for collections:
{
"data": [ ... ],
"pagination": {
"total": 142,
"page": 1,
"per_page": 50,
"next_page": 2
}
}
Errors
Errors return a JSON body with a machine-readable error code and human-readable message:
{
"error": "run_not_found",
"message": "No run with that ID exists in your organisation."
}
HTTP status codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 400 | Bad request — malformed JSON or missing required field |
| 401 | Missing or invalid API key |
| 402 | Quota exceeded — upgrade your plan or purchase run credits |
| 404 | Resource not found |
| 410 | Gone — run has expired |
| 422 | Validation error — request body failed schema validation |
| 429 | Rate limited — check Retry-After header |
| 500 | Server error — contact support if this persists |