Delete a brand image
Authorization
ApiKeyAuth API key from Settings → API Keys.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
curl -X DELETE "https://example.com/api/v1/brand_kit/images/string"{ "id": "cm4bki7f10001js04ha2p8w4n", "deleted": true}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.
Upload a font POST
Adds a font your templates can use. Send `multipart/form-data` with a `file` part, or JSON with `filename` and `content_base64`. Fonts are **team-level**: once uploaded, every template in the team can name it. Re-uploading the same filename replaces it. The response carries `family` — the name read out of the file itself, and **that exact string is what goes in `fontFamily` on a text component**. It is usually not the filename: `Anton-Regular.ttf` declares the family `Anton`. `.ttf` and `.otf` only, 10MB maximum. A variable font will not register — instance it to a static weight first. A file with no readable family name is rejected, because the renderer would never apply it.