Update an authored component
Every placed clip renders the exact version it pins. Send `projectId` (and optionally `compositionId`) to move that composition's placements to the new version in the same write; `repinned` reports them. Other placements keep rendering the previous version, and `placementsPinnedToPrevious` counts them across the org.
API key auth. Prefix cf_live_ for production orgs, cf_test_ for sandbox.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
PUT /components/:id body: every writable field, all optional; an omitted field is carried forward. Org/user are server-resolved; never accepted from the body.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/components/string" \ -H "Content-Type: application/json" \ -d '{}'{ "name": "string", "description": "string", "category": "text", "propSchema": { "property1": null, "property2": null }, "origin": "customer-owned", "ejectedFrom": "string", "tokens": { "property1": null, "property2": null }, "examples": [ { "property1": null, "property2": null } ], "durationInFrames": 1, "manifest": { "version": 2, "assets": { "property1": { "kind": "image", "required": true, "mimeTypes": [ "string" ], "mediaDemand": { "mode": "original" } }, "property2": { "kind": "image", "required": true, "mimeTypes": [ "string" ], "mediaDemand": { "mode": "original" } } }, "graphics": { "api": "canvas2d", "required": true, "accelerationPreference": "hardware-preferred" }, "alphaPolicy": "requires-transparency", "sceneShot": { "version": 2 } }, "id": "string", "source": "default", "kind": "component", "version": "string", "propDefaults": { "property1": null, "property2": null }, "textParam": "string", "subtextParam": "string", "format": { "aspectRatio": "16:9", "fps": 24, "resolution": "hd" }, "intent": "string", "useWhen": "string", "pairsWith": [ "string" ], "avoidWith": [ "string" ], "tags": [ "string" ], "mood": [ "string" ], "tier": "recommended", "useCase": [ "intro" ], "fixedCopy": [ "string" ], "brandBindings": [ { "param": "string", "brandToken": "string" } ], "placement": { "clipSourceKind": "overlay", "refField": "primitiveId" }, "warnings": [ "string" ], "repinned": { "compositionId": "string", "pins": 0, "etag": "string" }, "placementsPinnedToPrevious": 0}{ "error": { "code": "string", "message": "string", "contract": "string", "contractVersion": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "contract": "string", "contractVersion": "string", "details": { "property1": null, "property2": null } }}{ "x402Version": 2, "accepts": [ {} ], "error": "string"}{ "error": { "code": "string", "message": "string", "contract": "string", "contractVersion": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "contract": "string", "contractVersion": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "contract": "string", "contractVersion": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "contract": "string", "contractVersion": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "contract": "string", "contractVersion": "string", "details": { "property1": null, "property2": null } }}Patch an authored component PATCH
RFC 7396 merge patch: send only the fields you are changing. Every field you omit keeps the value it already had. Identical in effect to PUT, which merges the same way. Every placed clip renders the exact version it pins. Send `projectId` (and optionally `compositionId`) to move that composition's placements to the new version in the same write; `repinned` reports them. Other placements keep rendering the previous version, and `placementsPinnedToPrevious` counts them across the org.
Create (or upsert) a brand kit POST
Create or upsert a brand kit. Gated on the `brand_kits` boolean entitlement, which the FREE plan grants — brand-first authoring is deliberately never paywalled — so this is available to every account and costs no credits. A plan without it 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.