Automette docs

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.com

All endpoints are versioned and live under /api/v1.

Conventions

  • Content type: Request and response bodies are JSON. Send Content-Type: application/json on every POST, PATCH, and DELETE.
  • 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 prefixed evt_.
  • Timestamps: ISO 8601 UTC strings (2026-04-22T12:00:00.000Z).
  • self URL: List and single-resource responses include a self field with the canonical URL of the resource. Always prefer following self over reconstructing URLs by hand.

Authentication

Every request must include an Authorization header with a team-scoped API key:

Authorization: Bearer dg_your_api_key

See 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" }
CodeWhen
400Invalid JSON body or missing required field
401Missing, malformed, or unrecognized API key
402Insufficient credits for this operation
404Resource does not exist or is not visible to your team (including resources owned by other teams)
422Validation failed (e.g. unknown event, bad URL format)
425Render not yet ready for download
500Server 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:

LimitApplies to
600 requestsEvery request with the key, including MCP
120 rendersPOST /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

On this page