# Brand kits and logos

> Create versioned VectorFast Render brand kits with colors, fonts, and a logo, upload a PNG, JPEG, or SVG logo, and learn what logo vectorization does and does not do.

Canonical URL: https://vectorfast.ai/render/docs/brand-kits
Markdown URL: https://vectorfast.ai/render/docs/brand-kits.md
Last modified: 2026-10-30

**Short answer:** a brand kit holds six colors, a heading and a body font from Google Fonts, and a logo. Every change creates a new version, and renders, cache keys, and signed URLs all refer to a version. Upload a PNG or JPEG logo and it is traced into an SVG and a 2x PNG; upload an SVG and it is sanitized.

## What a brand kit contains [#what-a-brand-kit-contains]

| Field                                                                               | Format                                                                                 |
| ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| `name`                                                                              | 1–64 characters                                                                        |
| `colors.background`, `foreground`, `muted`, `accent`, `accentForeground`, `surface` | Hex colors such as `#111827`                                                           |
| `fonts.heading.family`, `fonts.body.family`                                         | A Google Fonts family name such as `Inter`. Custom font uploads are not available yet. |
| `logo`                                                                              | Set only through the logo endpoint below                                               |

Colors and fonts you leave out on create are taken from the built-in VectorFast kit. When you set a font, VectorFast checks that Google Fonts serves it at the weights templates use and rejects the request if not.

```bash
curl https://vectorfast.ai/v1/brand-kits \
  -H "Authorization: Bearer $VECTORFAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Northwind",
    "colors": { "background": "#0f172a", "foreground": "#f8fafc", "accent": "#22d3ee" },
    "fonts": { "heading": { "family": "Space Grotesk" }, "body": { "family": "Inter" } }
  }'
```

## Versions [#versions]

* `PUT /v1/brand-kits/{id}` creates version `n + 1`; fields you leave out keep their current values.
* Read a specific version with `GET /v1/brand-kits/bk_…@2`.
* Versions are never edited in place, so a render pinned to `bk_…@2` always looks the same.
* If two updates race, one returns `409 brand_kit_conflict`; read the kit and retry.
* `DELETE` removes the kit from your account. Images already cached at the edge may still be served for URLs that were issued before.

When a render omits `brand_kit`, VectorFast uses your oldest kit, or the read-only built-in `default` kit if you have none. Brand kit ids from another account always return `404`.

## Logo upload [#logo-upload]

```bash
curl https://vectorfast.ai/v1/brand-kits/bk_…/logo \
  -H "Authorization: Bearer $VECTORFAST_API_KEY" \
  -H "Content-Type: image/png" \
  --data-binary @logo.png
```

You can also send `multipart/form-data` with the image in a `file` field.

| Rule       | Value                                                      |
| ---------- | ---------------------------------------------------------- |
| Formats    | PNG, JPEG, or SVG; the bytes must match the `Content-Type` |
| Size       | Up to 5 MB and 4096×4096 pixels                            |
| Rate limit | 3 uploads a minute and 10 an hour per API key              |
| Result     | A new kit version with logo URLs for the SVG and a 2x PNG  |

### What happens to a raster logo [#what-happens-to-a-raster-logo]

1. The image is decoded; anything wider or taller than 1024 pixels is scaled down first.
2. It is traced into SVG paths with the same engine as the free browser vectorizer.
3. Cleanup removes tiny fragments, merges near-identical colors, and simplifies coordinates. The untouched trace is kept as well, so cleanup can be reviewed.
4. A 2x PNG is rendered from the SVG for templates and previews.

Tracing turns pixels into shapes. It does not recover the original vector file, rebuild live text, or separate a logo into meaningful layers. Flat, high-contrast logos trace cleanly; gradients, shadows, textures, and small lettering produce heavier SVGs that may need manual cleanup in a vector editor. Check the result before you use it in production.

SVG uploads are not traced. They are sanitized against an allowlist of static drawing elements; scripts, event handlers, external references, and animation are removed.

Logo files are served from signed `/brand-assets/…` URLs that only resolve while the kit exists.

## Limits per plan [#limits-per-plan]

| Plan    | Brand kits |
| ------- | ---------- |
| Free    | 1          |
| Starter | 3          |
| Growth  | 10         |
| Scale   | 30         |

Plans are not purchasable yet; during early access every account is on Free. Creating a kit past the limit returns `403 brand_kit_limit_reached`.

Brand kits are managed through the REST API. The MCP server can list and read kits but not change them.
