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
Render endpoints are gated by your monthly credit balance, not request rate. Most management endpoints (templates, webhooks) have no hard limit but should not be polled aggressively — use webhooks instead.
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
Billing
Plans, render quotas, and how usage is metered.
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.