Registered components: list what a project has synced

View as Markdown
Last updated September 14, 2026

A read-only route on the managed Studio API service, alongside the composition endpoints. It reports the components a project has synced to Studio's component service, with their prop schemas. Same base URL, same authentication, same error envelope as the rest of the chapter.

Preview: not yet GA. As with every route in this chapter, paths and response shapes may still change, and the service may not be enabled on your region or tenant yet.

What this list actually contains

Three different things are easy to confuse. Only the third one is what this endpoint returns.

Where it livesHow it gets there
Registered in codeYour app's Studio registry, in the browserregisterComponent / registerComponents / registerLazyComponent at app boot. See Registering components
Visible in the paletteStudio's canvas UIRegistration runs before the canvas iframe loads
Synced to the service (what this endpoint returns)Studio's component servicecsdx studio:component:sync. See Studio CLI

A component registered in code but never synced does not appear here, and an empty list does not mean the palette is empty. Use this endpoint when a tool outside the browser (a Figma mapping flow, a script, an agent) needs to know what a project declares and what props each component takes.

List registered components

GET /v1/projects/{projectUid}/registered-components

ParamInRequiredNotes
projectUidpathyesUID of the Studio project. Must be a live project in the organization you authenticate with.
$CS_AUTHheaderyesYour credential: attempt OAuth first (authorization: Bearer <access_token>), with a session authtoken as the last rung. See Authentication and authorization.
organization_uidheaderyesOrganization the project belongs to.

No query parameters. The route returns every synced component for the project. There is no pagination, filtering, or sorting.

curl 'https://<host>/v1/projects/<projectUid>/registered-components' \
  -H "$CS_AUTH" -H 'organization_uid: <org-uid>'

Response: 200 OK

{
  "registered_components": [
    {
      "uid": "bd3c9c3c…",
      "organization_uid": "blt739e38d90d4fc4e6",
      "projectId": "69a541cc…",
      "componentName": "HeroBanner",
      "displayName": "Hero Banner",
      "description": "Full-width hero with a headline",
      "aiDescription": "",
      "version": "1.0.0",
      "importPath": "src/components/HeroBanner.tsx",
      "createdAt": "2026-08-24T09:46:25.440Z",
      "updatedAt": "2026-08-24T09:46:25.440Z",
      "props": [
        { "type": "string", "name": "title", "displayName": "Title" }
      ]
    }
  ],
  "meta": { "count": 1 }
}

meta.count is the number of components in this response. Since the route never paginates, it is also the project's total.

Component fields

FieldTypeNotes
uidstringComponent UID in the component service.
organization_uidstringOrganization that owns the record.
projectIdstringUID of the Studio project, matches the projectUid you requested.
componentNamestringThe component's name in code, e.g. HeroBanner. This is the identifier a composition's ui node references as its type.
displayNamestring, optionalHuman-readable label. Often absent. Fall back to componentName rather than assuming it is set.
descriptionstring, optionalAuthor-facing description.
aiDescriptionstring, optionalDescription used by AI-assisted flows.
versionstringVersion recorded at sync time.
importPathstringPath to the component source in the repo, e.g. src/components/HeroBanner.tsx.
propsarrayThe component's prop schema. See below.
createdAt / updatedAtstring, optionalISO 8601 timestamps.

Prop fields

FieldTypeNotes
typestringProp type as recorded at sync time, e.g. string, number. For the full set supported in a registry schema, see Component schema: prop types.
namestringProp name in code.
displayNamestring, optionalLabel for the prop.
descriptionstring, optionalHelp text.
placeholderstring, optionalPlaceholder for the input.
defaultValueany, optionalDefault recorded for the prop.

Only these fields are published. The service maps the component service's records onto this contract field by field, so storage internals never appear in the response.

Errors

The envelope is the same as everywhere else in this chapter. See Errors & validation for the shared shape.

Statuserror_codeWhen
40148Neither a session authtoken nor an OAuth Authorization: Bearer token reached the service. Both styles are accepted. This fires only when neither arrived.
4041No live project with that UID in this organization. A soft-deleted project reads the same as a missing one.
42221The caller has no read access to the project's connected stack.
50246The component service could not be reached, failed, or answered with something other than the documented array.
upstream status46A client error from the component service (for example 403) is passed through with its own status rather than masked as a 502.

An empty list is a 200, never a 404: a project with nothing synced returns {"registered_components": [], "meta": {"count": 0}}.

Scope

This route is read-only. The managed service has no create, update, or delete for registered components. Components enter the list through csdx studio:component:sync and are removed through the CLI. To change what a project can build with, change the registrations in your app and sync again.

Where to go next

  • Registering components: the three register APIs, and how components reach Studio's palette in the first place.
  • Studio CLI: studio:component:register and studio:component:sync.
  • Endpoint reference: all 16 routes on this service, and the envelope they share.
  • Compositions: the composition routes on this same service.
  • OpenAPI 3.1 spec. This route is included as operationId: listRegisteredComponents, with RegisteredComponent + RegisteredComponentProp component schemas.