API Reference
The Automette REST API lets you render documents from your templates, retrieve renders, manage webhooks, and create Dynamic URLs.
Base URL
https://automette.comAll endpoints are versioned and live under /api/v1.
Conventions
- Content type: Request and response bodies are JSON. Send
Content-Type: application/jsonon everyPOST,PATCH, andDELETE. - Identifiers: resource IDs (templates, renders, jobs, webhook subscriptions, forms) are CUIDs, 25-character lowercase alphanumeric strings like
cm4rnd7qh0001jx04w8e2t5va. Treat them as opaque. The one exception is event IDs in webhook payloads, which are prefixedevt_. - Timestamps: ISO 8601 UTC strings (
2026-04-22T12:00:00.000Z). selfURL: List and single-resource responses include aselffield with the canonical URL of the resource. Always prefer followingselfover reconstructing URLs by hand.
Authentication
Every request must include an Authorization header with a team-scoped API key:
Authorization: Bearer dg_your_api_keySee Authentication for full details on creating and rotating keys.
Errors
The API returns standard HTTP status codes and a JSON body shaped like:
{ "error": "Human-readable message", "detail": "Optional extra context" }| Code | When |
|---|---|
400 | Invalid JSON body or missing required field |
401 | Missing, malformed, or unrecognized API key |
402 | Insufficient credits for this operation |
404 | Resource does not exist or is not visible to your team (including resources owned by other teams) |
422 | Validation failed (e.g. unknown event, bad URL format) |
425 | Render not yet ready for download |
500 | Server error: safe to retry |
Insufficient-credit errors (402) include extra fields so you can react programmatically:
{
"error": "Insufficient credits",
"required_credits": 1,
"available_credits": 0,
"credit_balance": 0,
"overage_limit": 0
}Rate limits
Each API key has two limits, counted per minute:
| Limit | Applies to |
|---|---|
| 600 requests | Every request with the key, including MCP |
| 120 renders | POST /api/v1/renders and the preview endpoints |
Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds until the minute ends). Over a limit, the request returns 429 with a Retry-After header:
{
"error": "Rate limit exceeded: 120 renders per minute for this API key. Try again in 25 seconds.",
"code": "rate_limited",
"limit": 120,
"retry_after": 25
}Wait retry_after seconds and send it again. Rendering is also limited by your credit balance. To learn when a render finishes, use a webhook instead of polling. If you need higher limits, contact us.
Idempotency
POST /api/v1/renders is not idempotent: retrying a failed POST will create a new render. To avoid duplicate work after a network error, use async mode and rely on the webhook_url field for completion notification, then dedupe on render_id in your handler.
MCP
Everything below is also reachable over MCP, at https://automette.com/api/mcp. The tools there are task-shaped rather than one per endpoint, and an API key authenticates them exactly as it does here.
Two endpoints exist mainly for callers that are not us: GET /api/v1/skills and GET /api/v1/skills/{id} serve the template-authoring reference our own editor runs on, so a model working against the REST API is as well informed as one working in the app.
Versioning
/api/v1 is the only supported version. Breaking changes will be released under a new path (/api/v2) with a deprecation window for v1.
Last updated on
How credits are used
What each kind of work costs in credits, with examples of whole jobs.
List templates GET
Returns all templates in your team, ordered by creation date ascending. Use the `engine` filter to narrow to a specific template type. Archived templates are not in this list. Pass `archived=true` for those instead: that is how you find one again to bring it back with `PATCH /api/v1/templates/{id}`. Trashed templates are in neither view: they are recoverable for 7 days from the dashboard, and no API reads or restores them.