Set the brand palette
Authorization
ApiKeyAuth API key from Settings → API Keys.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/api/v1/brand_kit" \ -H "Content-Type: application/json" \ -d '{ "colors": [ { "name": "Brand blue", "hex": "#085CC2" }, { "name": "Ink", "hex": "#0b1120" } ] }'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`. 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.
Upload a logo or image POST
Upload a logo or a shared image. `multipart/form-data` with a `file` part, or JSON with `filename` and `content_base64`. Optional `type`: `logo` (the default) or `image`. Brand kit images are team-level, so one upload serves every template. That is the difference from `POST /api/v1/templates/{id}/assets`, which attaches an image to a single template — use that for artwork belonging to one design, and this for the mark that appears on all of them. The response carries `key`, which is what belongs in a canvas image component's `src`. Prefer it over `url`: the key is resolved at render time, so the reference cannot rot, and re-uploading the same filename replaces the file while keeping the key, so every template pointing at it picks up the new artwork. png, jpg, webp, gif and svg, up to 10MB.