Appearance
Query execution and groups
Saved queries now return live records through POST /v1/organizations/{organizationId}/queries/{queryId}/execute. Send an object such as:
json
{"limit": 25, "sortFieldId": "<readable projected field ID>", "sortDirection": "asc"}The authenticated selected role must have source ObjectType read access. Every filter field must be readable; output projection is limited to readable saved outputs. Organization and relationship-record restrictions are injected by the server. Query-management permission alone does not grant data access.
Results contain objects, readable fields, query ID/version, hasMore, and nextCursor. Pass after with that cursor for the next page, keeping query and sort unchanged. Default page size is 50, maximum 100. There are no total counts. Field sorting uses ID tie-breakers. If a field-sort anchor is removed or no longer accessible, refresh after 409 CURSOR_CHANGED.
executable:true describes runtime capability; it is not an access grant or a tenant-writable setting. Execution accepts literal saved filters only. Raw filters, typed parameter bindings, arbitrary operators/search, and client-supplied organization scopes are rejected. Time and memory are bounded; no arbitrary pipeline is accepted. Query-backed record option validation remains unavailable.
Group endpoints
All paths start with /v1/organizations/{organizationId}:
| Method | Path | Purpose |
|---|---|---|
| GET | /groups | Owner preview directory; empty for non-Owners |
| GET | /groups?manage=1 | Owner-only configuration catalog |
| POST | /groups | Owner-only create/update/retire |
| GET | /groups/{groupId} | Authorized renderer metadata |
| GET | /groups/{groupId}/rows | Live query rows with limit/after/sortFieldId/sortDirection |
| POST | /groups/{groupId}/objects | Create a matching record through the group |
| POST | /groups/{groupId}/objects/{objectId} | Update or soft-delete through the group |
Definitions contain name/key, queryId, renderer, ordered fieldIds, createFieldIds, editableFieldIds, operations, and visible userTypeIds. Updates require id/version. Record writes also require groupVersion and queryVersion from the render definition, plus revision for existing records. Group and underlying permissions are intersected; existing rows must match the query and row policy. New records must satisfy the query. Field errors use the standard error.fields map.
See DynamicGroups, Records, and the endpoint reference.

