Lists the ClientPortal apps in the sub-account, most recently active first. A sub-account token sees every app by default; view=mine limits the list to apps the caller created.
Authorizations
Authorizationstringheaderrequired
Bearer authentication header of the form Bearer <token>, where <token> is your access token.
Ownership scope within the authenticated caller's location.
mine returns only projects owned by the caller and requires
projects:read; all returns every project in the location and
requires projects:read_all. The location is always taken from
the authenticated session and cannot be overridden.
Available optionsmineall
Example:all
statusProjectStatus
Lifecycle filter: draft, archived or deleted. When omitted,
every project except deleted ones is returned. Results remain scoped
by view and the authenticated caller's location.
Available optionsdraftqueuedplanningbuildingpreviewingdeployingdeployedblockedarchiveddeleted
limitinteger
How many projects per page (default 50).
Possible values:>= 1 and <= 100
Default:50
Example:20
cursorstring
meta.nextCursor from the previous page.
Example:eyJpZCI6InByal8xMjMifQ
Response
application/json
Project page.
dataobject[]required
The projects on this page.
data[].idstringrequired
The project's id.
Example:prj_01HXQ8Z6J9K2
data[].namestringrequired
The app's name, shown to members.
Example:Client Booking Portal
data[].locationIdstringrequired
The sub-account the project belongs to.
Example:loc_01HXQ8Z6J9K2
data[].companyIdstringrequired
The agency the sub-account belongs to.
Example:cmp_01HXQ8Z6J9K2
data[].ownerUserIdstringrequired
The user who owns the project.
Example:usr_01HXQ8Z6J9K2
data[].createdByUserIdstringrequired
The user who created the project.
Example:usr_01HXQ8Z6J9K2
data[].visibilityProjectVisibilityrequired
Who in the sub-account can see the project.
Available optionsprivateshared
data[].slugstring
URL-safe form of the name.
Example:client-booking-portal
data[].statusProjectStatusrequired
Where the project is in its lifecycle: draft (in use), archived or deleted. A build's progress is its run's (latestRunId, then GET .../runs/{runId}), and whether the app is live is publicationStatus. The other values are no longer reported.
Available optionsdraftqueuedplanningbuildingpreviewingdeployingdeployedblockedarchiveddeleted
data[].publicationStatusProjectPublicationStatus
Stable publication state, independent from the mutable run/build status. published means a successful publish activated at least the managed platform hostname; later draft edits do not change it. Legacy records without this field are interpreted as draft unless productionUrl is present.
Available optionsdraftpublished
data[].stackTemplateStackTemplaterequired
The kernel the project is built on.
Available optionsreact_native_app_kernel_v1nuxt_clientportal_app_v1nuxt_clientportal_vibe_v1auto
data[].templateIdstring
Starter-template id (e.g. events-v1) the project was instantiated from.
Drives the scaffold overlay byte-copy and, on the first build run, the
instantiate workflow mode (scaffold + finished overlay, no codegen).
Absent for projects built from a bare prompt. Project-scoped — set at
creation, never accepted on the run submit body.
Example:events-v1
data[].mobileCreationobject
How a mobile project started: from scratch or from the CP Base App.
oneOf
object
object
data[].mobileCreation.startingPointstringrequired
Started from scratch.
Available optionsscratch
Example:scratch
data[].appModeAppMode
App branding mode persisted at project creation. cp_branded connects the app to the location's Client Portal modules.
Available optionsstandardcp_branded
data[].productTargetProductTargetrequired
What the project builds.
Available optionsfull_stackmobilelanding_page
data[].targetModesTargetMode[]required
Immutable surfaces owned by the project. New projects contain exactly one
value derived by the server from productTarget: full-stack and landing-page
projects resolve to web; native Expo/React Native projects resolve to
mobile. Existing combined Client Portal projects may contain both values.
Available optionswebmobile
Example:["web"]
data[].dataPlaneModeDataPlaneModerequired
Where the app's data lives.
Available optionsmanaged_mongo
data[].hostingModeHostingModerequired
Where the app is hosted.
Available optionsmanagedbyo_vercel
data[].apiContractVersionstring
The API contract version the project was created under.
Example:2026-04-27
data[].latestRunIdstring
The project's most recent run.
Example:run_01HXQ9ABCD12
data[].latestDeploymentIdstring
The project's most recent deployment.
Example:dep_01HXQ8Z6J9K2
data[].previewUrlstring<uri>
Where to preview the latest build.
Example:https://preview.example.com/my-portal
data[].productionUrlstring<uri>
Where the published app is served.
Example:https://my-portal.example.com
data[].thumbnailUrlstring<uri>
Screenshot of the app's home page, taken after its latest successful build. Absent until
a build has produced one; clients show their own placeholder then.
The user's last-selected run mode for this project. The composer's
3-way segmented control rehydrates from this value when the
project is opened so the user's preference survives reloads.
Updated server-side every time a new run is submitted with an
explicit mode value (or via PATCH /projects/{projectId}).
Available optionsautoplanbuild
Example:auto
data[].createdAtstring<date-time>required
When the project was created.
Example:2026-10-01T08:00:00.000Z
data[].updatedAtstring<date-time>required
When the project last changed.
Example:2026-10-15T09:41:12.000Z
data[].archivedAtstring<date-time>
When the project was archived, if it was.
Example:2026-10-20T12:00:00.000Z
data[].starredboolean
Pinned by its owner so it sorts to the top of their project list. Absent means not starred; there is no per-viewer state — a project is starred for the location, like its name.
Example:true
data[].hasMobileSourcesboolean
True when this project's current mobile revision carries generated source (documents.clientportal.mobile.sources on its app configuration), so its phone preview must be framed from the project's own sandbox rather than the shared stock host. Read from the authenticated location's revision only. Returned by GET /api/v1/projects/{projectId}; list, create and update responses omit it, and an absent value means false.
Example:false
data[].etagstringrequired
The project's version tag, for conditional updates.
Example:W/"project-12"
metaobjectrequired
Paging: send meta.nextCursor as cursor for the next page.
meta.nextCursorstring
Send as cursor for the next page; absent on the last page.