API reference
Public API endpoints, errors, idempotency, and machine-readable schemas.
The public API base URL is:
https://api.cronbolt.com/api/v1
Send X-API-Key on every request.
Public endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /context | Check key access and plan limits |
POST | /jobs/preview | Preview a recurring schedule |
GET | /jobs | List jobs |
POST | /jobs | Create a recurring or one-time job |
GET | /jobs/{job_id} | Get one job |
PATCH | /jobs/{job_id} | Update supplied fields |
DELETE | /jobs/{job_id} | Delete a job |
POST | /jobs/{job_id}/pause | Pause a recurring job |
POST | /jobs/{job_id}/resume | Resume a recurring job |
POST | /jobs/{job_id}/run-now | Queue a manual run |
GET | /jobs/{job_id}/runs | List run history |
GET | /jobs/{job_id}/runs/{run_id} | Get run attempts |
POST | /jobs/{job_id}/runs/{run_id}/retry | Retry an eligible recurring run |
Browser auth, projects, API-key administration, Paddle webhooks, and billing are internal app APIs. They are intentionally excluded from the public schema.
OpenAPI
Django Ninja generates the public schema from the same request and response types used by the API.
Errors
Public API errors use one envelope:
{
"code": "validation_error",
"message": "Request validation failed.",
"request_id": "req_123",
"action_url": null,
"retry_after_seconds": null,
"errors": [
{
"field": "body.url",
"message": "Field required",
"type": "missing"
}
]
}Log the request_id when reporting a problem. If action_url is present, give it to the person who owns the account. Respect HTTP 429 and Retry-After.
Idempotency
Send Idempotency-Key when creating a job, starting a manual run, or retrying a run.
- Repeating the same request with the same key returns the original resource.
- Reusing the key with different input returns a conflict.
- Use a stable key for one intended operation, not a random key for every network retry.