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· AuthAuthorization: Bearer <JWT>(fromPOST /api/auth/token/) · 📄 Download the OpenAPI spec for Postman/Insomnia/Swagger · see the API overview for pagination, filtering, and errors.
GET /api/app-templates/Read-only catalog for the "New App" template gallery. Creation
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
search | query | no | string | A search term. |
Responses: 200 → AppTemplate[]
GET /api/app-templates/{id}/Read-only catalog for the "New App" template gallery. Creation
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this app template. |
Responses: 200 → AppTemplate
GET /api/apps/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
search | query | no | string | A 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.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
slug | path | yes | string |
Responses: 200
GET /api/apps/{app_pk}/versions/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedAppVersionList
POST /api/apps/{app_pk}/versions/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
Responses: 200 → AppVersion
PUT /api/apps/{app_pk}/versions/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
Responses: 204
DELETE /api/apps/{app_pk}/versions/{id}/discard/Permanently delete a draft version. Refuses published/rolled_back versions.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
Responses: 204
GET /api/apps/{app_pk}/versions/{id}/entitlement-options/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
Responses: 200 → AppVersion
GET /api/apps/{app_pk}/versions/{id}/entitlements/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
Responses: 200 → AppVersion
POST /api/apps/{app_pk}/versions/{id}/entitlements/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
ent_pk | path | yes | string | |
id | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
ent_pk | path | yes | string | |
id | path | yes | string |
Responses: 204
PATCH /api/apps/{app_pk}/versions/{id}/navigation/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
ordering | query | no | string | Which field to use when ordering the results. |
search | query | no | string | A search term. |
version_pk | path | yes | string |
Responses: 200 → FormDefinitionList[]
POST /api/apps/{app_pk}/versions/{version_pk}/forms/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
Responses: 200 → FormDefinition
PUT /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
Responses: 204
GET /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/binding/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
token_pk | path | yes | string | |
version_pk | path | yes | string |
Responses: 204
POST /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/fields/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
field_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
field_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
Responses: 200 → FormDefinition
POST /api/apps/{app_pk}/versions/{version_pk}/forms/{id}/reorder-fields/Accepts {order: [field_id, ...]} and updates positions.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
version_pk | path | yes | string |
Responses: 200 → PaginatedAppPageList
POST /api/apps/{app_pk}/versions/{version_pk}/pages/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
Responses: 200 → AppPage
PUT /api/apps/{app_pk}/versions/{version_pk}/pages/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
Responses: 204
POST /api/apps/{app_pk}/versions/{version_pk}/pages/{id}/publish/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
app_pk | path | yes | string | |
id | path | yes | string | |
version_pk | path | yes | string |
Request body (application/json): AppPageRequest
Responses: 200 → AppPage
GET /api/apps/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this versus app. |
Responses: 200 → VersusApp
PUT /api/apps/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A 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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A 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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A 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).
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A 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.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A 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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A 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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this versus app. |
Request body (application/json): PatchedVersusAppRequest
Responses: 200 → VersusApp
GET /api/components/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A 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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this app component. |
Responses: 200 → AppComponent
PUT /api/components/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A 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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A 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
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this app component. |
Responses: 204
GET /api/datasets/List datasets
Responses: 200
GET /api/datasets/{key}/data/Data: dataset
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
key | path | yes | string |
Responses: 200
Auto-generated from drf-spectacular OpenAPI. Endpoint descriptions come from viewset docstrings/serializers; enriching those improves this page on the next generation.