List component catalog (defaults + installed)
Discover the built-in primitive catalog (87 primitives + 7 scenes) plus your installed components. Narrow with facet filters (category, kind, tier, useCase, mood) or free-text (q / intent); when ANY filter is set, results are ordered recommended-tier-first. With NO `limit` the WHOLE (filtered) catalog returns in one page — pass `limit` only to page. Each entry carries a `placement` hint telling you exactly how to author it on the timeline.
API key auth. Prefix cf_live_ for production orgs, cf_test_ for sandbox.
In: header
Query Parameters
Filter to one category bucket (text|effects|transitions|layouts|backgrounds|ui-blocks|scenes).
Value in
- "text"
- "effects"
- "transitions"
- "layouts"
- "backgrounds"
- "ui-blocks"
- "scenes"
Filter by render kind (component|transition|scene).
Value in
- "component"
- "transition"
- "scene"
Filter by curation tier (recommended|standard|niche).
Value in
- "recommended"
- "standard"
- "niche"
Filter to entries whose useCase includes this edit role (e.g. intro, title-over-footage, grade).
Value in
- "intro"
- "outro"
- "full-scene"
- "title-over-footage"
- "transition"
- "background"
- "grade"
- "emphasis"
- "explainer"
- "social-cut"
Filter to entries whose mood tags include this value (e.g. cinematic, minimal).
Free-text match across id/name/description/intent/useWhen/tags/mood. Recommend-orders results.
Alias of q framed as recommend-by-intent (e.g. intent=intro). Recommend-orders results.
Page size (1..100). Omit to return the whole filtered catalog in one page.
1 <= value <= 100Opaque cursor from a previous page's nextCursor (forward-only).
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/components"{ "data": [ { "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" ] } ], "pagination": { "hasMore": true, "nextCursor": "string", "prevCursor": "string" }, "brandTokens": [ "string" ], "sfx": [ { "soundId": "string", "family": "tick", "envelopeClass": "transient", "intensity": "subtle", "durationSec": 0, "description": "string", "attribution": "string" } ], "audio": [ { "ref": "string", "role": "vo", "envelopeClass": "transient", "description": "string", "durationSec": 0, "evidence": { "envelopeClass": "transient", "attackMs": 0, "spectralCentroidHz": 0, "meanVolumeDb": 0, "maxVolumeDb": 0 }, "source": "pack", "license": "string", "provenance": "string", "bpm": 0, "mood": [ "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 } }}{ "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 } }}Get a component's source GET
Required permission: projects:read
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.