API Reference

App Builder API

App Builder — custom apps, versions, templates, components, and datasets. Auto-generated from the platform OpenAPI schema so it matches the running API.

REST API for this feature — 62 operations across 35 resource paths, auto-generated from the platform's live OpenAPI schema (drf-spectacular).

Base URL https://<your-versus-host>/api · Auth Authorization: Bearer <JWT> (from POST /api/auth/token/) · 📄 Download the OpenAPI spec for Postman/Insomnia/Swagger · see the API overview for pagination, filtering, and errors.

App templates

GET /api/app-templates/

Read-only catalog for the "New App" template gallery. Creation

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → AppTemplate[]

GET /api/app-templates/{id}/

Read-only catalog for the "New App" template gallery. Creation

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this app template.

Responses: 200 → AppTemplate


Apps

GET /api/apps/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → VersusApp[]

POST /api/apps/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): VersusAppRequest

Responses: 201 → VersusApp

GET /api/apps/runtime/{slug}/

Public-facing endpoint that returns the published (or previewed) app config.

ParameterInRequiredTypeDescription
slugpathyesstring

Responses: 200

GET /api/apps/{app_pk}/versions/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedAppVersionList

POST /api/apps/{app_pk}/versions/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring

Request body (application/json): AppVersionRequest

Responses: 201 → AppVersion

GET /api/apps/{app_pk}/versions/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Responses: 200 → AppVersion

PUT /api/apps/{app_pk}/versions/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Request body (application/json): AppVersionRequest

Responses: 200 → AppVersion

PATCH /api/apps/{app_pk}/versions/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Request body (application/json): PatchedAppVersionRequest

Responses: 200 → AppVersion

DELETE /api/apps/{app_pk}/versions/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Responses: 204

DELETE /api/apps/{app_pk}/versions/{id}/discard/

Permanently delete a draft version. Refuses published/rolled_back versions.

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Responses: 204

GET /api/apps/{app_pk}/versions/{id}/entitlement-options/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Responses: 200 → AppVersion

GET /api/apps/{app_pk}/versions/{id}/entitlements/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Responses: 200 → AppVersion

POST /api/apps/{app_pk}/versions/{id}/entitlements/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Request body (application/json): AppVersionRequest

Responses: 200 → AppVersion

PATCH /api/apps/{app_pk}/versions/{id}/entitlements/{ent_pk}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
ent_pkpathyesstring
idpathyesstring

Request body (application/json): PatchedAppVersionRequest

Responses: 200 → AppVersion

DELETE /api/apps/{app_pk}/versions/{id}/entitlements/{ent_pk}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
ent_pkpathyesstring
idpathyesstring

Responses: 204

PATCH /api/apps/{app_pk}/versions/{id}/navigation/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Request body (application/json): PatchedAppVersionRequest

Responses: 200 → AppVersion

POST /api/apps/{app_pk}/versions/{id}/preview/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Request body (application/json): AppVersionRequest

Responses: 200 → AppVersion

POST /api/apps/{app_pk}/versions/{id}/publish/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Request body (application/json): AppVersionRequest

Responses: 200 → AppVersion

PATCH /api/apps/{app_pk}/versions/{id}/theme/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring

Request body (application/json): PatchedAppVersionRequest

Responses: 200 → AppVersion

GET /api/apps/{app_pk}/versions/{version_pk}/forms/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.
version_pkpathyesstring

Responses: 200 → FormDefinitionList[]

POST /api/apps/{app_pk}/versions/{version_pk}/forms/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
version_pkpathyesstring

Request body (application/json): FormDefinitionRequest

Responses: 201 → FormDefinition

GET /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Responses: 200 → FormDefinition

PUT /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): FormDefinitionRequest

Responses: 200 → FormDefinition

PATCH /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): PatchedFormDefinitionRequest

Responses: 200 → FormDefinition

DELETE /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Responses: 204

GET /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/binding/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Responses: 200 → FormDefinition

PUT /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/binding/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): FormDefinitionRequest

Responses: 200 → FormDefinition

PATCH /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/binding/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): PatchedFormDefinitionRequest

Responses: 200 → FormDefinition

GET /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/embed-tokens/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Responses: 200 → FormDefinition

POST /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/embed-tokens/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): FormDefinitionRequest

Responses: 200 → FormDefinition

DELETE /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/embed-tokens/{token_pk}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
token_pkpathyesstring
version_pkpathyesstring

Responses: 204

POST /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/fields/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): FormDefinitionRequest

Responses: 200 → FormDefinition

PATCH /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/fields/{field_pk}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
field_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): PatchedFormDefinitionRequest

Responses: 200 → FormDefinition

DELETE /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/fields/{field_pk}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
field_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Responses: 204

GET /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/render-schema/

Return the form's field list with conditional_logic pre-evaluated.

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Responses: 200 → FormDefinition

POST /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/reorder-fields/

Accepts {order: [field_id, ...]} and updates positions.

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): FormDefinitionRequest

Responses: 200 → FormDefinition

GET /api/apps/{app_pk}/versions/{version_pk}/pages/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.
version_pkpathyesstring

Responses: 200 → PaginatedAppPageList

POST /api/apps/{app_pk}/versions/{version_pk}/pages/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
version_pkpathyesstring

Request body (application/json): AppPageRequest

Responses: 201 → AppPage

GET /api/apps/{app_pk}/versions/{version_pk}/pages/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Responses: 200 → AppPage

PUT /api/apps/{app_pk}/versions/{version_pk}/pages/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): AppPageRequest

Responses: 200 → AppPage

PATCH /api/apps/{app_pk}/versions/{version_pk}/pages/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): PatchedAppPageRequest

Responses: 200 → AppPage

DELETE /api/apps/{app_pk}/versions/{version_pk}/pages/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Responses: 204

POST /api/apps/{app_pk}/versions/{version_pk}/pages/{id}/publish/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): AppPageRequest

Responses: 200 → AppPage

POST /api/apps/{app_pk}/versions/{version_pk}/pages/{id}/unpublish/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
app_pkpathyesstring
idpathyesstring
version_pkpathyesstring

Request body (application/json): AppPageRequest

Responses: 200 → AppPage

GET /api/apps/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this versus app.

Responses: 200 → VersusApp

PUT /api/apps/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this versus app.

Request body (application/json): VersusAppRequest

Responses: 200 → VersusApp

PATCH /api/apps/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this versus app.

Request body (application/json): PatchedVersusAppRequest

Responses: 200 → VersusApp

DELETE /api/apps/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this versus app.

Responses: 204

POST /api/apps/{id}/new_version/

Create a new draft AppVersion (clones from source_version_id or highest version).

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this versus app.

Request body (application/json): VersusAppRequest

Responses: 200 → VersusApp

POST /api/apps/{id}/rollback/

Re-point published_version to a prior published AppVersion.

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this versus app.

Request body (application/json): VersusAppRequest

Responses: 200 → VersusApp

GET /api/apps/{id}/sso/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this versus app.

Responses: 200 → VersusApp

PATCH /api/apps/{id}/sso/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this versus app.

Request body (application/json): PatchedVersusAppRequest

Responses: 200 → VersusApp


Components

GET /api/components/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedAppComponentList

POST /api/components/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): AppComponentRequest

Responses: 201 → AppComponent

GET /api/components/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this app component.

Responses: 200 → AppComponent

PUT /api/components/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this app component.

Request body (application/json): AppComponentRequest

Responses: 200 → AppComponent

PATCH /api/components/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this app component.

Request body (application/json): PatchedAppComponentRequest

Responses: 200 → AppComponent

DELETE /api/components/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this app component.

Responses: 204


Datasets

GET /api/datasets/

List datasets

Responses: 200

GET /api/datasets/{key}/data/

Data: dataset

ParameterInRequiredTypeDescription
keypathyesstring

Responses: 200


Auto-generated from drf-spectacular OpenAPI. Endpoint descriptions come from viewset docstrings/serializers; enriching those improves this page on the next generation.