Extract brand tokens from a website URL
Queue brand-token extraction from a website URL — ASYNC: returns a 202 job receipt; poll GET /v1/jobs/{jobId} (or MCP wait_job kind=brand_kit_extract) for the tokens (colors, fonts, title, description) on the succeeded result. The executor fetches the site's HTML/CSS (20s cap) and regex-parses tokens — NOT a screenshot/vision pipeline; it does NOT persist a kit (pass the result to POST /brand-kits). A blocked (SSRF/private), non-2xx, non-HTML, or slow URL degrades to EMPTY token arrays on a SUCCEEDED terminal rather than erroring; succeeded extractions are reused for 5 minutes per URL.
API key auth. Prefix cf_live_ for production orgs, cf_test_ for sandbox.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
POST /brand-kits/extract body — the website URL to extract brand tokens from.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/brand-kits/extract" \ -H "Content-Type: application/json" \ -d '{ "url": "http://example.com" }'{ "jobId": "string", "jobKey": "string", "kind": "string", "status": "running"}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}Create (or upsert) a brand kit POST
Create or upsert a brand kit. Brand kits are a PLAN-GATED capability (Pro+ — the `brand_kits` boolean entitlement): on a plan without it this returns 402 billing_required (`details.featureId: "brand_kits"`). Discover the gate WITHOUT a failed round-trip via GET /v1/me — its `entitlements.brand_kits.included` tells you up front whether your plan allows it.
Get a brand kit by id GET
Required permission: projects:read