Automette docs

API overview

The Automette REST API lets you render documents from your templates, retrieve renders, manage webhooks, and generate signed on-demand 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

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.

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.

On this page