Where to start
Authorization
ApiKeyAuth API key from Settings → API Keys.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1"{ "name": "Automette API", "description": "Turn a template plus data into a document — PDF, PNG, JPG, WebP or Word.", "start_here": "https://automette.com/api/v1/skills/recipes", "skills": [ { "id": "recipes", "title": "What you can do, and how", "engine": "both", "kind": "skill", "summary": "Every task this API supports and the route to it.", "self": "https://automette.com/api/v1/skills/recipes" } ], "engines": { "canvas": "JSON layouts of positioned components. Authorable over the API.", "typst": "Markup compiled to PDF. Authorable over the API.", "docx": "Uploaded Word files. Renderable over the API, authored in the dashboard." }, "resources": { "templates": "https://automette.com/api/v1/templates", "renders": "https://automette.com/api/v1/renders" }, "openapi": "https://automette.com/openapi.yaml", "docs": "https://automette.com/docs"}Read a reference page GET
One page in full, as Markdown in the `content` field. Send `Accept: text/markdown` to get the body on its own with no JSON envelope, which is usually what you want to drop into a model's context. Only fonts we ship can be used, and only assets uploaded to the template resolve — both are covered here, and both are the most common way a first render fails.
Get the team's brand kit GET
Your team's colours, logos and uploaded fonts. Read this before authoring a template that should be on-brand: the hex values here are the ones to put in a component's `fill`, `fonts[].family` is the exact string to put in `fontFamily`, and `images[].key` is what goes in an image component's `src` — or in a Typst `#image("...")`, since the file is staged at that path. A font carries `problem` only when it cannot be used — no readable family name, or a family the product already ships, where the built-in face wins the name and the uploaded file is never drawn. Fonts uploaded before that was refused are still stored; this is where they say so. Use `images[].key`, not `images[].url`. The key is resolved against storage at render time, so a template that names it keeps working and picks up a replaced logo. A URL written into a document is a copy of a decision made once. A team can keep more than one kit. `fonts` and `images` cover all of them, because that is the scope a render resolves them in — a family or a key from any kit works in any template — and each entry carries `kit_id`/`kit_name`. `kits[]` lists the kits with their own palettes; the top-level `id`, `name` and `colors` are the default kit's, and an upload with no kit named goes there.