# Generative Art

22 art styles drawn in your colours: a crisp SVG cover for every post, product or page.

One of 22 generative art styles drawn in your colours as a standalone SVG, any size up to 4000px. Deterministic by seed. Our own code: no image model, no stock, no licensing.

The art behind every header on our own blog, as an API. Pick a style (Mondrian, Bauhaus, Topographic, Voronoi, Halftone, Isometric and 16 more), pass your brand colours and a seed, and get back a clean, scalable SVG. The same seed always draws the same piece, so a post's cover never changes when the page rebuilds; a new seed draws a new one. It's our own code end to end: no image model, no stock library, no licence to track, and nothing that looks like everyone else's AI art.

- Price: 1 credit
- Page: https://meetkatalis.com/apis/art
- OpenAPI: https://meetkatalis.com/openapi.yaml

## Endpoints

- `GET /api/v1/art?style=…&colors=…&seed=…&width=…&height=…` — Returns image/svg+xml
- `GET /api/v1/art?list=1` — The styles and named palettes (free)

## Call it

```bash
curl -H "x-api-key: $KATALIS_API_KEY" \
  "https://meetkatalis.com/api/v1/art?style=Topographic&colors=1f6fe5,57dbaa,ffc93c&seed=my-post&width=1600&height=900" \
  -o cover.svg
```

```javascript
import { writeFile } from "node:fs/promises";

const res = await fetch("https://meetkatalis.com/api/v1/art?style=Topographic&colors=1f6fe5,57dbaa,ffc93c&seed=my-post&width=1600&height=900", {
  headers: { "x-api-key": process.env.KATALIS_API_KEY },
});
if (!res.ok) throw new Error(`Katalis ${res.status}: ${await res.text()}`);
await writeFile("cover.svg", await res.text());
```

```python
import os, requests

r = requests.get(
    "https://meetkatalis.com/api/v1/art?style=Topographic&colors=1f6fe5,57dbaa,ffc93c&seed=my-post&width=1600&height=900",
    headers={"x-api-key": os.environ["KATALIS_API_KEY"]},
    timeout=60,
)
r.raise_for_status()
open("cover.svg", "w").write(r.text)
```

## Example response (a real reply)

```json
GET /api/v1/art?style=Topographic&colors=1f6fe5,57dbaa,ffc93c&seed=my-post&width=1600&height=900

<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 100 100" …>
  <rect width="100" height="100" fill="#0f1b33"/>
  <ellipse … stroke="#57dbaa" fill="none"/>
  …
</svg>
```

## What you'd build with it

- **Covers for every post.** Seed it with the post's slug and every article gets its own on-brand header, automatically and forever the same.
- **Placeholders that look designed.** Products, profiles or listings without a photo get art in the brand colours instead of a grey box.
- **Social and email headers.** Any size up to 4000px, vector-sharp, in the palette you pass.

## Why this one

- **Ours, so it's yours to use.** No model output, no stock licence: the images are drawn by our code, and you can use them commercially.
- **Deterministic.** Same style, colours and seed give the same image, byte for byte. Cache it, or regenerate it anywhere.
- **Vector, any size.** A true SVG: sharp at 4000px, small on the wire, easy to recolour.
- **Your brand, not ours.** Pass 2–6 hex colours; every style is drawn from them.

## 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