# Brand Kit

One website in, its brand out: colours, fonts, logo, voice, call to action, photos.

For any website: its brand colours, fonts (with the nearest Google Fonts pairing), logo, tone of voice with do's and don'ts, main call to action, About line and its own photos.

The read behind every piece Katalis designs for a member, as an API. Give it a website and it reads the brand the way a designer would: the colours from its own styles and logo, the fonts it loads (with the nearest Google Fonts pairing), its logo, how its copy sounds and what that copy avoids, its main call to action with the real link, its own About line, and the photos on its pages (no phone numbers or emails: on a sole trader's site those are a person's details). Everything comes from the site itself; anything it can't read comes back empty, never guessed.

- Price: 2 credits
- Page: https://meetkatalis.com/apis/brand-kit
- OpenAPI: https://meetkatalis.com/openapi.yaml

## Endpoints

- `GET /api/v1/brand-kit?website=…` — Any public website

## Call it

```bash
curl -H "x-api-key: $KATALIS_API_KEY" \
  "https://meetkatalis.com/api/v1/brand-kit?website=https://www.greggs.com"
```

```javascript
const res = await fetch("https://meetkatalis.com/api/v1/brand-kit?website=https://www.greggs.com", {
  headers: { "x-api-key": process.env.KATALIS_API_KEY },
});
if (!res.ok) throw new Error(`Katalis ${res.status}: ${await res.text()}`);
console.log(await res.json());
```

```python
import os, requests

r = requests.get(
    "https://meetkatalis.com/api/v1/brand-kit?website=https://www.greggs.com",
    headers={"x-api-key": os.environ["KATALIS_API_KEY"]},
    timeout=60,
)
r.raise_for_status()
print(r.json())
```

## Example response (a real reply)

```json
{
  "name": "Example Bakery",
  "colors": ["#0075ff", "#86b041", "#fdb71a", "#c12424"],
  "logo": "https://example.co.uk/logo.svg",
  "fonts": { "display": { "name": "Barlow Condensed", "style": "display" }, "body": { "name": "Barlow", "style": "sans" } },
  "voice": { "tone": "Casual and friendly, first-person plural, distinctly British.", "do": ["playful language"], "dont": ["formal language"] },
  "callToAction": { "label": "Order now", "href": "https://example.co.uk/order" },
  "photos": ["https://example.co.uk/images/counter.jpg"]
}
```

## What you'd build with it

- **Onboarding that already knows them.** A customer types their website and your app opens in their colours and fonts, with their logo in place.
- **On-brand generation.** Feed the colours, fonts and voice into whatever writes or designs for them, so the output sounds and looks like the business.
- **Agency and CRM enrichment.** Every lead's brand on file before the first call: what they look like and how they talk.

## Why this one

- **Read, not guessed.** Colours from the site's own CSS and logo, fonts it actually loads, a voice read from its own words. Empty stays empty.
- **Fonts you can use.** What the site declares, plus the nearest pairing from Google Fonts, so you can render with it straight away.
- **The voice, not just the look.** Tone plus what the copy leans on and what it avoids: ready for anything that writes for them.
- **Safe to point at anything.** Public addresses only, every stylesheet checked, nothing stored.

## Conventions

- Auth: `x-api-key: kat_live_…` on every request (free key at https://meetkatalis.com/developers: a verified email and mobile, 100 credits a month, no card).
- One credit balance across every API; each endpoint's price is on its page and in `x-credits` in https://meetkatalis.com/openapi.yaml.
- Keys are camelCase everywhere. A registered company is `company: { name, number, status, statusDetail?, filingsOverdue? }` on the register endpoints; the enrichment family (enrich, score, assess, brand-kit, ai-visibility, tender-match) keeps `business` / `profile` with `companyNumber`.
- Every error has `code` and `requestId`; every reply an `x-request-id` header; a charged reply `x-credits-remaining`; a reply that gave credits back `x-credits-refunded`. Missing = 404 with `query`.
- Burst ceiling 60 requests a minute per key (429, `Retry-After`, no credits used). A failure on our side (5xx) gives the call's credits back.
- Company data contains public sector information licensed under the Open Government Licence v3.0.

Provided "as is"; results come from public sources and, in places, AI, and may be inaccurate or out of date; not legal, professional or credit advice. Terms: https://meetkatalis.com/apis/terms