List brand kits (read-only)
Required permission: projects:read
API key auth. Prefix cf_live_ for production orgs, cf_test_ for sandbox.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/brand-kits"{ "data": [ { "id": "string", "name": "string", "description": "string", "tagline": "string", "colors": { "property1": "string", "property2": "string" }, "extraColors": [ { "name": "string", "value": "string" } ], "fonts": { "heading": { "family": "string", "weight": 0 }, "body": { "family": "string", "weight": 0 } }, "voiceGuidelines": "string", "captions": { "sync": true, "profile": { "property1": null, "property2": null } }, "motion": { "duration": 0, "easing": "linear", "entrance": "none", "staggerMs": 0, "exitMs": 0 }, "logo": { "src": "string", "alt": "string", "placement": "tl", "sizePct": 0 }, "intro": { "kind": "card", "src": "string", "title": "string", "subtitle": "string", "durationMs": 0 }, "outro": { "kind": "card", "src": "string", "title": "string", "subtitle": "string", "durationMs": 0 }, "watermark": { "src": "string", "opacity": 0, "placement": "tl" }, "spacing": { "base": 0, "lg": 0, "sm": 0 }, "sizing": { "fontSizeHeading": 0, "fontSizeBody": 0, "fontSizeLabel": 0, "borderRadius": 0 }, "audio": { "sfxIntensity": "off", "musicEnabled": true, "musicMood": "string", "sonicLogo": { "ref": "string", "placement": "intro", "offsetMs": 0 }, "uiSoundSet": { "tick": "string", "pop": "string", "impact": "string", "confirm": "string", "error": "string", "whoosh": "string", "riser": "string" }, "bedStyle": { "bedId": "string", "genre": "string", "bpmRange": { "min": 0, "max": 0 } }, "ambiencePreference": { "ref": "string" } }, "exemplarKeys": [ "string" ], "contactSheetKey": "string", "motifs": [ { "id": "string", "observed": "string", "body": { "kind": "card", "html": "string", "tokens": { "property1": "string", "property2": "string" } }, "motion": { "preset": "fade-up", "enterMs": 0, "exitMs": 0, "staggerMs": 0, "confidence": "high" }, "role": "title-card", "zone": { "x": 0, "y": 0, "w": 0, "h": 0 }, "evidence": [ 0 ], "diffScore": 0, "coverage": "reproduced", "skipReason": "string" } ], "styleRubric": "string", "density": { "graphicsPerMin": 0, "maxSimultaneous": 1 }, "inspiration": { "sources": [ "string" ], "extractedAt": 0, "extractionVersion": "string" }, "createdAt": "string", "updatedAt": "string" } ], "pagination": { "hasMore": true, "nextCursor": "string", "prevCursor": "string" }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "x402Version": 2, "accepts": [ {} ], "error": "string"}{ "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 } }}Presign a brand kit's inspiration exemplar frames POST
Returns short-lived URLs for the kit's exemplar frames (the pixels the maker and judge condition on). Filter to one motif's evidence frames with `motifId`. Vision-budget-bounded consumers should keep `limit` small (default 6).
Register a webhook endpoint POST
Register a webhook so long-running jobs (render/compose/media) notify you instead of blocking on wait_job. Body: `url` (https, must pass SSRF checks) + `events` (see the WebhookEvent enum). DELIVERY: each event is a POST with body `{ event, timestamp, projectId?, data }` and Standard-Webhooks headers `webhook-id`, `webhook-timestamp`, `webhook-signature: v1,<base64>` (+ `x-cueframe-event`). The `secret` (`whsec_<base64>`) is returned ONCE here — verify the raw body with `new Webhook(secret).verify(rawBody, headers)`. ACTIVATION (synchronous, no separate step): on create, CueFrame POSTs a signed `webhook.verify` challenge; your endpoint must reply 2xx echoing `data.token` (raw body === token, or JSON `{token}`/`{challenge}`). On success the response is `status:"active"`; otherwise `status:"pending"` with `verification.reason` and the webhook receives NO events until it verifies (recover with POST /webhooks/:id/verify — no delete/recreate). Full contract + per-event `data` shapes: GET /webhooks/events.