| title | Protocol |
|---|---|
| description | Protocol protocol schemas |
{/*
Response for GET /api/v1/automation/actions (ADR-0018).
Returns the live action/node registry — the platform's built-in actions plus
any plugin-contributed ones — backing the designer palette and flow
validation. Each entry is a canonical ActionDescriptorSchema.
import { AiAgentCapabilities, AiAgentChatRequest, AiAgentSummary, AiAgentsResponse, AiChatRequest, AiChatResponse, AiCompleteRequest, AiConversation, AiMessage, AiModelsResponse, AiPendingAction, AiPendingActionStatus, AiStreamChunk, ApproveAiPendingActionResponse, AutomationActionsResponse, AutomationTriggerRequest, AutomationTriggerResponse, BatchDataRequest, BatchDataResponse, CheckPermissionRequest, CheckPermissionResponse, CreateAiConversationRequest, CreateDataRequest, CreateDataResponse, CreateManyDataRequest, CreateManyDataResponse, CreateViewRequest, CreateViewResponse, DeleteDataRequest, DeleteDataResponse, DeleteManyDataRequest, DeleteManyDataResponse, DeleteMetaItemRequest, DeleteMetaItemResponse, DeleteViewRequest, DeleteViewResponse, FindDataRequest, FindDataResponse, GetDataRequest, GetDataResponse, GetDiscoveryRequest, GetDiscoveryResponse, GetEffectivePermissionsRequest, GetEffectivePermissionsResponse, GetFieldLabelsRequest, GetFieldLabelsResponse, GetLocalesRequest, GetLocalesResponse, GetMetaItemCachedRequest, GetMetaItemCachedResponse, GetMetaItemRequest, GetMetaItemResponse, GetMetaItemsRequest, GetMetaItemsResponse, GetMetaTypesRequest, GetMetaTypesResponse, GetNotificationPreferencesRequest, GetNotificationPreferencesResponse, GetObjectPermissionsRequest, GetObjectPermissionsResponse, GetPresenceRequest, GetPresenceResponse, GetTranslationsRequest, GetTranslationsResponse, GetUiViewRequest, GetUiViewResponse, GetViewRequest, GetViewResponse, GetWorkflowConfigRequest, GetWorkflowConfigResponse, GetWorkflowStateRequest, GetWorkflowStateResponse, HttpFindQueryParams, ListAiConversationsRequest, ListAiConversationsResponse, ListAiPendingActionsRequest, ListAiPendingActionsResponse, ListNotificationsRequest, ListNotificationsResponse, ListViewsRequest, ListViewsResponse, MarkAllNotificationsReadRequest, MarkAllNotificationsReadResponse, MarkNotificationsReadRequest, MarkNotificationsReadResponse, NotificationPreferences, RealtimeConnectRequest, RealtimeConnectResponse, RealtimeDisconnectRequest, RealtimeDisconnectResponse, RealtimeSubscribeRequest, RealtimeSubscribeResponse, RealtimeUnsubscribeRequest, RealtimeUnsubscribeResponse, RegisterDeviceRequest, RegisterDeviceResponse, RejectAiPendingActionResponse, SaveMetaItemRequest, SaveMetaItemResponse, SetPresenceRequest, SetPresenceResponse, UnregisterDeviceRequest, UnregisterDeviceResponse, UpdateAiConversationRequest, UpdateDataRequest, UpdateDataResponse, UpdateManyDataRequest, UpdateManyDataResponse, UpdateNotificationPreferencesRequest, UpdateNotificationPreferencesResponse, UpdateViewRequest, UpdateViewResponse, WorkflowState, WorkflowTransitionRequest, WorkflowTransitionResponse } from '@objectstack/spec/api';
import type { AiAgentCapabilities, AiAgentChatRequest, AiAgentSummary, AiAgentsResponse, AiChatRequest, AiChatResponse, AiCompleteRequest, AiConversation, AiMessage, AiModelsResponse, AiPendingAction, AiPendingActionStatus, AiStreamChunk, ApproveAiPendingActionResponse, AutomationActionsResponse, AutomationTriggerRequest, AutomationTriggerResponse, BatchDataRequest, BatchDataResponse, CheckPermissionRequest, CheckPermissionResponse, CreateAiConversationRequest, CreateDataRequest, CreateDataResponse, CreateManyDataRequest, CreateManyDataResponse, CreateViewRequest, CreateViewResponse, DeleteDataRequest, DeleteDataResponse, DeleteManyDataRequest, DeleteManyDataResponse, DeleteMetaItemRequest, DeleteMetaItemResponse, DeleteViewRequest, DeleteViewResponse, FindDataRequest, FindDataResponse, GetDataRequest, GetDataResponse, GetDiscoveryRequest, GetDiscoveryResponse, GetEffectivePermissionsRequest, GetEffectivePermissionsResponse, GetFieldLabelsRequest, GetFieldLabelsResponse, GetLocalesRequest, GetLocalesResponse, GetMetaItemCachedRequest, GetMetaItemCachedResponse, GetMetaItemRequest, GetMetaItemResponse, GetMetaItemsRequest, GetMetaItemsResponse, GetMetaTypesRequest, GetMetaTypesResponse, GetNotificationPreferencesRequest, GetNotificationPreferencesResponse, GetObjectPermissionsRequest, GetObjectPermissionsResponse, GetPresenceRequest, GetPresenceResponse, GetTranslationsRequest, GetTranslationsResponse, GetUiViewRequest, GetUiViewResponse, GetViewRequest, GetViewResponse, GetWorkflowConfigRequest, GetWorkflowConfigResponse, GetWorkflowStateRequest, GetWorkflowStateResponse, HttpFindQueryParams, ListAiConversationsRequest, ListAiConversationsResponse, ListAiPendingActionsRequest, ListAiPendingActionsResponse, ListNotificationsRequest, ListNotificationsResponse, ListViewsRequest, ListViewsResponse, MarkAllNotificationsReadRequest, MarkAllNotificationsReadResponse, MarkNotificationsReadRequest, MarkNotificationsReadResponse, NotificationPreferences, RealtimeConnectRequest, RealtimeConnectResponse, RealtimeDisconnectRequest, RealtimeDisconnectResponse, RealtimeSubscribeRequest, RealtimeSubscribeResponse, RealtimeUnsubscribeRequest, RealtimeUnsubscribeResponse, RegisterDeviceRequest, RegisterDeviceResponse, RejectAiPendingActionResponse, SaveMetaItemRequest, SaveMetaItemResponse, SetPresenceRequest, SetPresenceResponse, UnregisterDeviceRequest, UnregisterDeviceResponse, UpdateAiConversationRequest, UpdateDataRequest, UpdateDataResponse, UpdateManyDataRequest, UpdateManyDataResponse, UpdateNotificationPreferencesRequest, UpdateNotificationPreferencesResponse, UpdateViewRequest, UpdateViewResponse, WorkflowState, WorkflowTransitionRequest, WorkflowTransitionResponse } from '@objectstack/spec/api';
// Validate data
const result = AiAgentCapabilities.parse(data);| Property | Type | Required | Description |
|---|---|---|---|
| authoring | boolean |
✅ | Authors app metadata (objects/views/flows) |
| canvas | boolean |
✅ | Drives the Live Canvas split view (ADR-0037) |
| debug | boolean |
✅ | Exposes the build-doctor debug drawer |
| resume | boolean |
✅ | Turns resume durable multi-step runs (ADR-0013) |
| Property | Type | Required | Description |
|---|---|---|---|
| messages | Record<string, any>[] |
✅ | Conversation messages (at least one) |
| context | Record<string, any> |
optional | Agent context (app, object, record, …) |
| options | Record<string, any> |
optional | Request options (model, temperature, …) |
| Property | Type | Required | Description |
|---|---|---|---|
| name | string |
✅ | Agent name — the :agentName path segment |
| label | string |
✅ | Display label |
| role | string |
✅ | Agent role |
| capabilities | { authoring: boolean; canvas: boolean; debug: boolean; resume: boolean } |
✅ | Capability set implied by the agent surface |
| Property | Type | Required | Description |
|---|---|---|---|
| agents | { name: string; label: string; role: string; capabilities: object }[] |
✅ | Agents this caller may chat with |
| Property | Type | Required | Description |
|---|---|---|---|
| messages | Record<string, any>[] |
✅ | Conversation messages (at least one) |
| system | string |
optional | System prompt, prepended as a system message |
| model | string |
optional | Model id override |
| temperature | number |
optional | Sampling temperature |
| maxTokens | integer |
optional | Maximum tokens to generate |
| stream | boolean |
optional | false → JSON response; otherwise the UI Message Stream Protocol |
| conversationId | string |
optional | Conversation to persist this turn into (auto-created when omitted) |
| turnId | string |
optional | Stable per-turn idempotency key (ADR-0013 D1) |
| options | Record<string, any> |
optional | Legacy nested request options |
| Property | Type | Required | Description |
|---|---|---|---|
| content | string |
✅ | Generated text |
| model | string |
optional | Model that produced it |
| toolCalls | any[] |
optional | Tool calls the model requested (Vercel ToolCallPart) |
| usage | { promptTokens: number; completionTokens: number; totalTokens: number } |
optional | Token usage |
| conversationId | string |
optional | Conversation the turn was persisted into |
| Property | Type | Required | Description |
|---|---|---|---|
| prompt | string |
✅ | Prompt text |
| options | Record<string, any> |
optional | Request options (model, temperature, maxTokens, …) |
| Property | Type | Required | Description |
|---|---|---|---|
| id | string |
✅ | Conversation id |
| title | string |
optional | Title / summary |
| agentId | string |
optional | Agent this conversation is bound to |
| userId | string |
optional | Owning user |
| messages | Record<string, any>[] |
✅ | Message history |
| createdAt | string |
✅ | Creation timestamp (ISO 8601) |
| updatedAt | string |
✅ | Last update timestamp (ISO 8601) |
| metadata | Record<string, any> |
optional | Conversation metadata |
| Property | Type | Required | Description |
|---|---|---|---|
| role | Enum<'system' | 'user' | 'assistant' | 'tool'> |
✅ | Message role |
| content | any |
optional | Message content: a string, or an array of content parts |
| parts | any[] |
optional | Vercel AI SDK v6 message parts (alternative to content) |
| Property | Type | Required | Description |
|---|---|---|---|
| models | string | { id: string; label: string; default: boolean }[] |
✅ | Models this environment offers |
| defaultModel | string |
optional | Default model id, when the service reports one |
| Property | Type | Required | Description |
|---|---|---|---|
| id | string |
✅ | Pending action id |
| object_name | string |
✅ | Object the action targets |
| action_name | string |
✅ | Action name |
| tool_name | string |
✅ | Tool that would execute it |
| tool_input | string |
✅ | Serialized tool input |
| status | Enum<'pending' | 'approved' | 'executed' | 'failed' | 'rejected'> |
✅ | Lifecycle status |
| result | string |
optional | Serialized result, once executed |
| error | string |
optional | Failure message, when status is failed |
| rejection_reason | string |
optional | Reason given at rejection |
| conversation_id | string |
optional | Conversation that proposed it |
| message_id | string |
optional | Message that proposed it |
| proposed_by | string |
optional | Actor that proposed it |
| decided_by | string |
optional | Actor that approved or rejected it |
| proposed_at | string |
✅ | Proposal timestamp (ISO 8601) |
| decided_at | string |
optional | Decision timestamp (ISO 8601) |
pendingapprovedexecutedfailedrejected
| Property | Type | Required | Description |
|---|---|---|---|
| type | string |
✅ | Frame type (text-delta, tool-input-available, finish, error, …) |
| Property | Type | Required | Description |
|---|---|---|---|
| status | Enum<'executed' | 'failed'> |
✅ | Outcome of executing the approved action |
| result | any |
optional | Tool result, when executed |
| error | string |
optional | Failure reason, when failed |
| Property | Type | Required | Description |
|---|---|---|---|
| actions | { type: string; version: string; name: string; description?: string; … }[] |
✅ | Registered action descriptors (built-in + plugin) |
| total | integer |
✅ | Number of descriptors returned (after any filters) |
| Property | Type | Required | Description |
|---|---|---|---|
| trigger | string |
✅ | |
| payload | Record<string, any> |
✅ |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | |
| jobId | string |
optional | |
| result | any |
optional |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| request | { operation: Enum<'create' | 'update' | 'upsert' | 'delete'>; records: { id?: string; data?: Record<string, any>; externalId?: string }[]; options?: object } |
✅ | Batch operation request |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Operation success status |
| error | { code: Enum<'VALIDATION_ERROR' | 'INVALID_FIELD' | 'MISSING_REQUIRED_FIELD' | 'INVALID_FORMAT' | 'VALUE_TOO_LONG' | 'VALUE_TOO_SHORT' | 'VALUE_OUT_OF_RANGE' | 'INVALID_REFERENCE' | 'DUPLICATE_VALUE' | 'INVALID_QUERY' | 'INVALID_FILTER' | 'INVALID_SORT' | 'MAX_RECORDS_EXCEEDED' | 'UNAUTHENTICATED' | 'INVALID_CREDENTIALS' | 'EXPIRED_TOKEN' | 'INVALID_TOKEN' | 'SESSION_EXPIRED' | 'MFA_REQUIRED' | 'EMAIL_NOT_VERIFIED' | 'PERMISSION_DENIED' | 'INSUFFICIENT_PRIVILEGES' | 'FIELD_NOT_ACCESSIBLE' | 'RECORD_NOT_ACCESSIBLE' | 'LICENSE_REQUIRED' | 'IP_RESTRICTED' | 'TIME_RESTRICTED' | 'RESOURCE_NOT_FOUND' | 'OBJECT_NOT_FOUND' | 'RECORD_NOT_FOUND' | 'FIELD_NOT_FOUND' | 'ENDPOINT_NOT_FOUND' | 'RESOURCE_CONFLICT' | 'CONCURRENT_MODIFICATION' | 'DELETE_RESTRICTED' | 'DUPLICATE_RECORD' | 'LOCK_CONFLICT' | 'METHOD_NOT_ALLOWED' | 'PRECONDITION_REQUIRED' | 'RATE_LIMIT_EXCEEDED' | 'QUOTA_EXCEEDED' | 'CONCURRENT_LIMIT_EXCEEDED' | 'INTERNAL_ERROR' | 'DATABASE_ERROR' | 'TIMEOUT' | 'SERVICE_UNAVAILABLE' | 'NOT_IMPLEMENTED' | 'EXTERNAL_SERVICE_ERROR' | 'INTEGRATION_ERROR' | 'WEBHOOK_DELIVERY_FAILED' | 'BATCH_PARTIAL_FAILURE' | 'BATCH_COMPLETE_FAILURE' | 'TRANSACTION_FAILED' | 'ACCOUNT_LOCKED' | 'ALREADY_REVERTED' | 'AMBIGUOUS_MATCH' | 'ANALYTICS_QUERY_FAILED' | 'APPROVAL_ACTIONS_FAILED' | 'APPROVAL_RECALL_FAILED' | 'APPROVAL_REQUEST_GET_FAILED' | 'APPROVAL_REQUEST_LIST_FAILED' | 'ASYNC_NOT_SUPPORTED' | 'ATTACHMENT_DELETE_DENIED' | 'ATTACHMENT_DOWNLOAD_DENIED' | 'ATTACHMENT_PARENT_ACCESS' | 'AUDIENCE_NOT_ALLOWED' | 'AUTH_CONFIG_ERROR' | 'AUTH_REQUIRED' | 'AUTOMATION_UNSCOPED_RUN_DATA_ACCESS' | 'BATCH_ABORTED' | 'BATCH_NOT_ATOMIC' | 'BATCH_TOO_LARGE' | 'BATCH_UNRESOLVED_REF' | 'BLANK_MATCH_KEY' | 'CLONE_DISABLED' | 'CLOUD_FETCH_FAILED' | 'CLOUD_UNCONFIGURED' | 'COMMIT_NOT_FOUND' | 'CONCURRENT_UPDATE' | 'CONFLICTING_MAPPING' | 'CONNECTOR_UPSTREAM_UNAVAILABLE' | 'CREATE_FAILED' | 'CUBE_NOT_FOUND' | 'DATASET_INVALID' | 'DATASOURCE_ADMIN_ERROR' | 'DELEGABLE_SCOPE_FAILED' | 'DELIVERY_NOT_ELIGIBLE' | 'DESTRUCTIVE_CHANGE' | 'DEVICE_CODE_FAILED' | 'DOMAIN_VERIFICATION_DISABLED' | 'DOMAIN_VERIFICATION_FAILED' | 'DRIVER_UNAVAILABLE' | 'DUPLICATE_REQUEST' | 'EMAIL_SEND_FAILED' | 'EMAIL_SERVICE_REQUIRED' | 'ENQUEUE_FAILED' | 'ENVIRONMENT_BIND_FAILED' | 'ENVIRONMENT_NOT_FOUND' | 'ENV_ACCESS_DENIED' | 'ERR_BULK_RESULT_MISMATCH' | 'ERR_DATASOURCE_UNAVAILABLE' | 'ERR_DRIVER_CONNECT' | 'ERR_FILE_CONSTRAINT' | 'ERR_FILE_REFERENCE_COPY' | 'ERR_SUMMARY_RECOMPUTE' | 'EXECUTION_ERROR' | 'EXPIRED_OR_REVOKED' | 'EXPIRY_IN_PAST' | 'EXPIRY_TOO_LONG' | 'EXPLAIN_FAILED' | 'EXPORT_NOT_PERMITTED' | 'EXTERNAL_DATASOURCE_ERROR' | 'EXTERNAL_IMPORT_ERROR' | 'EXTERNAL_SCHEMA_MISMATCH' | 'EXTERNAL_SCHEMA_MODE_VIOLATION' | 'EXTERNAL_WRITE_FORBIDDEN' | 'FEEDS_DISABLED' | 'FILES_DISABLED' | 'FILE_DOWNLOAD_DENIED' | 'FILE_NOT_FOUND' | 'FILTER_TOKEN_UNKNOWN' | 'FILTER_TOKEN_UNRESOLVED' | 'FORBIDDEN' | 'FORM_NOT_FOUND' | 'FORM_RESOLVE_FAILED' | 'IMPORT_JOB_CREATE_FAILED' | 'IMPORT_ROW_FAILED' | 'INTERNAL' | 'INVALID_EMAIL' | 'INVALID_EXPIRY' | 'INVALID_METADATA' | 'INVALID_OR_EXPIRED' | 'INVALID_PHONE' | 'INVALID_REQUEST' | 'INVALID_RESUME_TOKEN' | 'INVALID_SIGNAL' | 'INVALID_SIGNATURE' | 'INVALID_STATE' | 'INVITE_EMAIL_FAILED' | 'INVITE_REQUIRES_EMAIL' | 'INVITE_SMS_FAILED' | 'IP_NOT_ALLOWED' | 'ITEM_LOCKED' | 'LAST_LOCAL_CREDENTIAL' | 'LOOKUP_NOT_PUBLIC' | 'LOOKUP_TARGET_MISSING' | 'MANIFEST_CONFLICT' | 'MAPPING_FORMAT_MISMATCH' | 'MAPPING_FORMAT_UNSUPPORTED' | 'MAPPING_NOT_FOUND' | 'MAPPING_TARGET_MISMATCH' | 'MARKETPLACE_PROXY_FAILED' | 'MARKETPLACE_STORAGE_FAILED' | 'MARKETPLACE_UNAVAILABLE' | 'METADATA_BRANCH' | 'METADATA_CONFLICT' | 'METADATA_NOT_FOUND' | 'METADATA_SCHEMA_INVALID' | 'MONGODB_MULTI_TENANT_UNSUPPORTED' | 'NAMESPACE_PREFIX' | 'NEEDS_PASSWORD' | 'NODE_FAILURE' | 'NOTHING_TO_PURGE' | 'NOT_CREATABLE' | 'NOT_FOUND' | 'NOT_OVERRIDABLE' | 'NOT_UNDOABLE' | 'NO_DRAFT' | 'NO_EXECUTOR' | 'NO_IDENTITY' | 'NO_MATCH' | 'NO_PENDING_VERIFICATION' | 'OAUTH_REGISTER_FAILED' | 'OBJECT_API_DISABLED' | 'OBJECT_API_METHOD_NOT_ALLOWED' | 'OPENAPI_UNAVAILABLE' | 'OS_PROTOCOL_INCOMPATIBLE' | 'OVERLAY_PERSISTENCE_FAILED' | 'PACKAGE_DELETE_FAILED' | 'PACKAGE_DELETE_PARTIAL' | 'PACKAGE_MANIFEST_INVALID' | 'PACKAGE_PUBLISH_FAILED' | 'PASSWORD_ALREADY_SET' | 'PASSWORD_EXPIRED' | 'PASSWORD_POLICY_VIOLATION' | 'PASSWORD_REUSE' | 'PAYLOAD_TOO_LARGE' | 'PERMISSION_NOT_ALLOWED' | 'PHONE_NOT_ENABLED' | 'PLUGIN_INSTALL_FAILED' | 'PLUGIN_MANIFEST_INVALID' | 'PLUGIN_REGISTER_FAILED' | 'PROJECT_MEMBERSHIP_REQUIRED' | 'PROJECT_NOT_FOUND' | 'PROJECT_PROVISIONING' | 'PROJECT_PROVISIONING_FAILED' | 'RAW_SQL_UNSUPPORTED' | 'RECORD_GONE' | 'RECORD_LOCKED' | 'REPORTS_LIST_FAILED' | 'REPORT_DELETE_FAILED' | 'REPORT_GET_FAILED' | 'REPORT_NOT_FOUND' | 'REPORT_RUN_FAILED' | 'REPORT_SAVE_FAILED' | 'REPORT_SCHEDULE_FAILED' | 'REQUEST_NOT_FOUND' | 'RESEED_NO_ROWS' | 'RESEED_SKIPPED' | 'ROUTE_NOT_FOUND' | 'RULE_DEFINE_FAILED' | 'RULE_DELETE_FAILED' | 'RULE_EVALUATE_FAILED' | 'RULE_GET_FAILED' | 'RULE_LIST_FAILED' | 'RULE_NOT_FOUND' | 'SAML_REGISTER_FAILED' | 'SCHEDULES_LIST_FAILED' | 'SCHEDULE_DELETE_FAILED' | 'SETTINGS_ACTION_FAILED' | 'SETTINGS_FORBIDDEN' | 'SETTINGS_LOCKED' | 'SETTINGS_UNKNOWN_KEY' | 'SETTINGS_UNKNOWN_NAMESPACE' | 'SETTINGS_VALIDATION' | 'SHARES_LIST_FAILED' | 'SHARE_GRANT_FAILED' | 'SHARE_REVOKE_FAILED' | 'SHARING_NOT_ENABLED' | 'SIGN_IN_REQUIRED' | 'SSO_REGISTER_FAILED' | 'SSO_REGISTER_FORBIDDEN' | 'SUGGESTION_CONFIRM_FAILED' | 'SUGGESTION_DISMISS_FAILED' | 'SUGGESTION_LIST_FAILED' | 'SUGGESTION_NOT_FOUND' | 'SUGGESTION_STATE' | 'SUMMARY_RECOMPUTE_FAILED' | 'UNAUTHORIZED' | 'UNIQUE_VIOLATION' | 'UNKNOWN_KEY' | 'UNKNOWN_NAMESPACE' | 'UNSUPPORTED' | 'UNSUPPORTED_QUERY_PARAM' | 'UNSUPPORTED_TRANSFORM' | 'UPLOAD_SESSION_NOT_FOUND' | 'USER_ALREADY_EXISTS' | 'VALIDATION_FAILED' | 'VERSION_NOT_FOUND' | 'VERSION_NOT_RESTORABLE' | 'WRITABLE_PACKAGE_REQUIRED' | 'WRONG_PASSWORD'>; message: string; category?: string; httpStatus?: integer; … } |
optional | Error details if success is false |
| meta | { timestamp: string; duration?: number; requestId?: string; traceId?: string } |
optional | Response metadata |
| operation | Enum<'create' | 'update' | 'upsert' | 'delete'> |
optional | Operation type that was performed |
| total | number |
✅ | Total number of records in the batch |
| succeeded | number |
✅ | Number of records that succeeded |
| failed | number |
✅ | Number of records that failed |
| results | { id?: string; success: boolean; errors?: { code: Enum<'VALIDATION_ERROR' | 'INVALID_FIELD' | 'MISSING_REQUIRED_FIELD' | 'INVALID_FORMAT' | 'VALUE_TOO_LONG' | 'VALUE_TOO_SHORT' | 'VALUE_OUT_OF_RANGE' | 'INVALID_REFERENCE' | 'DUPLICATE_VALUE' | 'INVALID_QUERY' | 'INVALID_FILTER' | 'INVALID_SORT' | 'MAX_RECORDS_EXCEEDED' | 'UNAUTHENTICATED' | 'INVALID_CREDENTIALS' | 'EXPIRED_TOKEN' | 'INVALID_TOKEN' | 'SESSION_EXPIRED' | 'MFA_REQUIRED' | 'EMAIL_NOT_VERIFIED' | 'PERMISSION_DENIED' | 'INSUFFICIENT_PRIVILEGES' | 'FIELD_NOT_ACCESSIBLE' | 'RECORD_NOT_ACCESSIBLE' | 'LICENSE_REQUIRED' | 'IP_RESTRICTED' | 'TIME_RESTRICTED' | 'RESOURCE_NOT_FOUND' | 'OBJECT_NOT_FOUND' | 'RECORD_NOT_FOUND' | 'FIELD_NOT_FOUND' | 'ENDPOINT_NOT_FOUND' | 'RESOURCE_CONFLICT' | 'CONCURRENT_MODIFICATION' | 'DELETE_RESTRICTED' | 'DUPLICATE_RECORD' | 'LOCK_CONFLICT' | 'METHOD_NOT_ALLOWED' | 'PRECONDITION_REQUIRED' | 'RATE_LIMIT_EXCEEDED' | 'QUOTA_EXCEEDED' | 'CONCURRENT_LIMIT_EXCEEDED' | 'INTERNAL_ERROR' | 'DATABASE_ERROR' | 'TIMEOUT' | 'SERVICE_UNAVAILABLE' | 'NOT_IMPLEMENTED' | 'EXTERNAL_SERVICE_ERROR' | 'INTEGRATION_ERROR' | 'WEBHOOK_DELIVERY_FAILED' | 'BATCH_PARTIAL_FAILURE' | 'BATCH_COMPLETE_FAILURE' | 'TRANSACTION_FAILED' | 'ACCOUNT_LOCKED' | 'ALREADY_REVERTED' | 'AMBIGUOUS_MATCH' | 'ANALYTICS_QUERY_FAILED' | 'APPROVAL_ACTIONS_FAILED' | 'APPROVAL_RECALL_FAILED' | 'APPROVAL_REQUEST_GET_FAILED' | 'APPROVAL_REQUEST_LIST_FAILED' | 'ASYNC_NOT_SUPPORTED' | 'ATTACHMENT_DELETE_DENIED' | 'ATTACHMENT_DOWNLOAD_DENIED' | 'ATTACHMENT_PARENT_ACCESS' | 'AUDIENCE_NOT_ALLOWED' | 'AUTH_CONFIG_ERROR' | 'AUTH_REQUIRED' | 'AUTOMATION_UNSCOPED_RUN_DATA_ACCESS' | 'BATCH_ABORTED' | 'BATCH_NOT_ATOMIC' | 'BATCH_TOO_LARGE' | 'BATCH_UNRESOLVED_REF' | 'BLANK_MATCH_KEY' | 'CLONE_DISABLED' | 'CLOUD_FETCH_FAILED' | 'CLOUD_UNCONFIGURED' | 'COMMIT_NOT_FOUND' | 'CONCURRENT_UPDATE' | 'CONFLICTING_MAPPING' | 'CONNECTOR_UPSTREAM_UNAVAILABLE' | 'CREATE_FAILED' | 'CUBE_NOT_FOUND' | 'DATASET_INVALID' | 'DATASOURCE_ADMIN_ERROR' | 'DELEGABLE_SCOPE_FAILED' | 'DELIVERY_NOT_ELIGIBLE' | 'DESTRUCTIVE_CHANGE' | 'DEVICE_CODE_FAILED' | 'DOMAIN_VERIFICATION_DISABLED' | 'DOMAIN_VERIFICATION_FAILED' | 'DRIVER_UNAVAILABLE' | 'DUPLICATE_REQUEST' | 'EMAIL_SEND_FAILED' | 'EMAIL_SERVICE_REQUIRED' | 'ENQUEUE_FAILED' | 'ENVIRONMENT_BIND_FAILED' | 'ENVIRONMENT_NOT_FOUND' | 'ENV_ACCESS_DENIED' | 'ERR_BULK_RESULT_MISMATCH' | 'ERR_DATASOURCE_UNAVAILABLE' | 'ERR_DRIVER_CONNECT' | 'ERR_FILE_CONSTRAINT' | 'ERR_FILE_REFERENCE_COPY' | 'ERR_SUMMARY_RECOMPUTE' | 'EXECUTION_ERROR' | 'EXPIRED_OR_REVOKED' | 'EXPIRY_IN_PAST' | 'EXPIRY_TOO_LONG' | 'EXPLAIN_FAILED' | 'EXPORT_NOT_PERMITTED' | 'EXTERNAL_DATASOURCE_ERROR' | 'EXTERNAL_IMPORT_ERROR' | 'EXTERNAL_SCHEMA_MISMATCH' | 'EXTERNAL_SCHEMA_MODE_VIOLATION' | 'EXTERNAL_WRITE_FORBIDDEN' | 'FEEDS_DISABLED' | 'FILES_DISABLED' | 'FILE_DOWNLOAD_DENIED' | 'FILE_NOT_FOUND' | 'FILTER_TOKEN_UNKNOWN' | 'FILTER_TOKEN_UNRESOLVED' | 'FORBIDDEN' | 'FORM_NOT_FOUND' | 'FORM_RESOLVE_FAILED' | 'IMPORT_JOB_CREATE_FAILED' | 'IMPORT_ROW_FAILED' | 'INTERNAL' | 'INVALID_EMAIL' | 'INVALID_EXPIRY' | 'INVALID_METADATA' | 'INVALID_OR_EXPIRED' | 'INVALID_PHONE' | 'INVALID_REQUEST' | 'INVALID_RESUME_TOKEN' | 'INVALID_SIGNAL' | 'INVALID_SIGNATURE' | 'INVALID_STATE' | 'INVITE_EMAIL_FAILED' | 'INVITE_REQUIRES_EMAIL' | 'INVITE_SMS_FAILED' | 'IP_NOT_ALLOWED' | 'ITEM_LOCKED' | 'LAST_LOCAL_CREDENTIAL' | 'LOOKUP_NOT_PUBLIC' | 'LOOKUP_TARGET_MISSING' | 'MANIFEST_CONFLICT' | 'MAPPING_FORMAT_MISMATCH' | 'MAPPING_FORMAT_UNSUPPORTED' | 'MAPPING_NOT_FOUND' | 'MAPPING_TARGET_MISMATCH' | 'MARKETPLACE_PROXY_FAILED' | 'MARKETPLACE_STORAGE_FAILED' | 'MARKETPLACE_UNAVAILABLE' | 'METADATA_BRANCH' | 'METADATA_CONFLICT' | 'METADATA_NOT_FOUND' | 'METADATA_SCHEMA_INVALID' | 'MONGODB_MULTI_TENANT_UNSUPPORTED' | 'NAMESPACE_PREFIX' | 'NEEDS_PASSWORD' | 'NODE_FAILURE' | 'NOTHING_TO_PURGE' | 'NOT_CREATABLE' | 'NOT_FOUND' | 'NOT_OVERRIDABLE' | 'NOT_UNDOABLE' | 'NO_DRAFT' | 'NO_EXECUTOR' | 'NO_IDENTITY' | 'NO_MATCH' | 'NO_PENDING_VERIFICATION' | 'OAUTH_REGISTER_FAILED' | 'OBJECT_API_DISABLED' | 'OBJECT_API_METHOD_NOT_ALLOWED' | 'OPENAPI_UNAVAILABLE' | 'OS_PROTOCOL_INCOMPATIBLE' | 'OVERLAY_PERSISTENCE_FAILED' | 'PACKAGE_DELETE_FAILED' | 'PACKAGE_DELETE_PARTIAL' | 'PACKAGE_MANIFEST_INVALID' | 'PACKAGE_PUBLISH_FAILED' | 'PASSWORD_ALREADY_SET' | 'PASSWORD_EXPIRED' | 'PASSWORD_POLICY_VIOLATION' | 'PASSWORD_REUSE' | 'PAYLOAD_TOO_LARGE' | 'PERMISSION_NOT_ALLOWED' | 'PHONE_NOT_ENABLED' | 'PLUGIN_INSTALL_FAILED' | 'PLUGIN_MANIFEST_INVALID' | 'PLUGIN_REGISTER_FAILED' | 'PROJECT_MEMBERSHIP_REQUIRED' | 'PROJECT_NOT_FOUND' | 'PROJECT_PROVISIONING' | 'PROJECT_PROVISIONING_FAILED' | 'RAW_SQL_UNSUPPORTED' | 'RECORD_GONE' | 'RECORD_LOCKED' | 'REPORTS_LIST_FAILED' | 'REPORT_DELETE_FAILED' | 'REPORT_GET_FAILED' | 'REPORT_NOT_FOUND' | 'REPORT_RUN_FAILED' | 'REPORT_SAVE_FAILED' | 'REPORT_SCHEDULE_FAILED' | 'REQUEST_NOT_FOUND' | 'RESEED_NO_ROWS' | 'RESEED_SKIPPED' | 'ROUTE_NOT_FOUND' | 'RULE_DEFINE_FAILED' | 'RULE_DELETE_FAILED' | 'RULE_EVALUATE_FAILED' | 'RULE_GET_FAILED' | 'RULE_LIST_FAILED' | 'RULE_NOT_FOUND' | 'SAML_REGISTER_FAILED' | 'SCHEDULES_LIST_FAILED' | 'SCHEDULE_DELETE_FAILED' | 'SETTINGS_ACTION_FAILED' | 'SETTINGS_FORBIDDEN' | 'SETTINGS_LOCKED' | 'SETTINGS_UNKNOWN_KEY' | 'SETTINGS_UNKNOWN_NAMESPACE' | 'SETTINGS_VALIDATION' | 'SHARES_LIST_FAILED' | 'SHARE_GRANT_FAILED' | 'SHARE_REVOKE_FAILED' | 'SHARING_NOT_ENABLED' | 'SIGN_IN_REQUIRED' | 'SSO_REGISTER_FAILED' | 'SSO_REGISTER_FORBIDDEN' | 'SUGGESTION_CONFIRM_FAILED' | 'SUGGESTION_DISMISS_FAILED' | 'SUGGESTION_LIST_FAILED' | 'SUGGESTION_NOT_FOUND' | 'SUGGESTION_STATE' | 'SUMMARY_RECOMPUTE_FAILED' | 'UNAUTHORIZED' | 'UNIQUE_VIOLATION' | 'UNKNOWN_KEY' | 'UNKNOWN_NAMESPACE' | 'UNSUPPORTED' | 'UNSUPPORTED_QUERY_PARAM' | 'UNSUPPORTED_TRANSFORM' | 'UPLOAD_SESSION_NOT_FOUND' | 'USER_ALREADY_EXISTS' | 'VALIDATION_FAILED' | 'VERSION_NOT_FOUND' | 'VERSION_NOT_RESTORABLE' | 'WRITABLE_PACKAGE_REQUIRED' | 'WRONG_PASSWORD'>; message: string; category?: string; httpStatus?: integer; … }[]; data?: Record<string, any>; … }[] |
✅ | Detailed results for each record |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name to check permissions for |
| action | Enum<'create' | 'read' | 'edit' | 'delete' | 'transfer' | 'restore' | 'purge'> |
✅ | Action to check |
| recordId | string |
optional | Specific record ID (for record-level checks) |
| field | string |
optional | Specific field name (for field-level checks) |
| Property | Type | Required | Description |
|---|---|---|---|
| allowed | boolean |
✅ | Whether the action is permitted |
| reason | string |
optional | Reason if denied |
| Property | Type | Required | Description |
|---|---|---|---|
| title | string |
optional | Initial title |
| agentId | string |
optional | Agent to bind the conversation to |
| metadata | Record<string, any> |
optional | Conversation metadata |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | The object name. |
| data | Record<string, any> |
✅ | The dictionary of field values to insert. |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | The object name. |
| id | string |
✅ | The ID of the newly created record. |
| record | Record<string, any> |
✅ | The created record, including server-generated fields (created_at, owner). |
| droppedFields | { object: string; fields: string[]; reason: Enum<'readonly' | 'readonly_when'> }[] |
optional | Write-observability (#3407/#3431): caller-supplied fields that were LEGALLY stripped before the record was written — a non-system create cannot seed a static readonly column (#3043 ingress strip), so those keys are dropped and the field re-derives its default. Present ONLY when ≥1 field was dropped; the create still succeeded without them (status/success semantics unchanged). REST additionally surfaces this as the X-ObjectStack-Dropped-Fields response header. Optional — omit-when-empty keeps the shape backward-compatible for existing clients. |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| records | Record<string, any>[] |
✅ | Array of records to create |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| records | Record<string, any>[] |
✅ | Created records |
| count | number |
✅ | Number of records created |
| droppedFields | { object: string; fields: string[]; reason: Enum<'readonly' | 'readonly_when'> }[] |
optional | Write-observability (#3407/#3431/#3455): caller-supplied readonly fields the #3043 create-ingress strip removed before the rows were written. AGGREGATED across the batch (one event per object/reason with the union of dropped field names) rather than per-row, because the insert-time strip is static-readonly only — schema-uniform, so every row drops the same set. Present ONLY when ≥1 field was dropped; the creates still succeeded without them (count/success unchanged). Optional — omit-when-empty keeps the shape backward-compatible. (The per-row insertMany/batch paths carry per-row droppedFields on each result instead — see BatchOperationResultSchema.) |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name (snake_case) |
| data | { list?: object; form?: object; listViews?: Record<string, { name?: string; label?: string; type?: Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>; data?: { provider: 'object'; object: string } | { provider: 'api'; read?: object; write?: object } | { provider: 'value'; items: any[] } | { provider: 'schema'; schemaId: string; schema?: Record<string, any> }; … }>; formViews?: Record<string, { type?: Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'>; layout?: Enum<'vertical' | 'horizontal' | 'inline' | 'grid'>; columns?: integer; title?: string; … }>; … } |
✅ | View definition to create |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| viewId | string |
✅ | Created view identifier |
| view | { list?: object; form?: object; listViews?: Record<string, { name?: string; label?: string; type?: Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>; data?: { provider: 'object'; object: string } | { provider: 'api'; read?: object; write?: object } | { provider: 'value'; items: any[] } | { provider: 'schema'; schemaId: string; schema?: Record<string, any> }; … }>; formViews?: Record<string, { type?: Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'>; layout?: Enum<'vertical' | 'horizontal' | 'inline' | 'grid'>; columns?: integer; title?: string; … }>; … } |
✅ | Created view definition |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| id | string |
✅ | Record ID to delete |
| expectedVersion | string |
optional | Optimistic concurrency token (typically the updated_at value the client read). When provided, the server compares it against the current record version and returns 409 CONCURRENT_UPDATE if they differ. Optional — omit to skip the check. |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| id | string |
✅ | Deleted record ID |
| success | boolean |
✅ | Whether deletion succeeded |
| Property | Type | Required | Description |
|---|---|---|---|
| ids | string[] |
✅ | Array of record IDs to delete (server caps the count — see batch.maxBatchSize) |
| options | { atomic: boolean; returnRecords: boolean; continueOnError: boolean; validateOnly?: any } |
optional | Delete options |
| object | string |
✅ | Object name |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Operation success status |
| error | { code: Enum<'VALIDATION_ERROR' | 'INVALID_FIELD' | 'MISSING_REQUIRED_FIELD' | 'INVALID_FORMAT' | 'VALUE_TOO_LONG' | 'VALUE_TOO_SHORT' | 'VALUE_OUT_OF_RANGE' | 'INVALID_REFERENCE' | 'DUPLICATE_VALUE' | 'INVALID_QUERY' | 'INVALID_FILTER' | 'INVALID_SORT' | 'MAX_RECORDS_EXCEEDED' | 'UNAUTHENTICATED' | 'INVALID_CREDENTIALS' | 'EXPIRED_TOKEN' | 'INVALID_TOKEN' | 'SESSION_EXPIRED' | 'MFA_REQUIRED' | 'EMAIL_NOT_VERIFIED' | 'PERMISSION_DENIED' | 'INSUFFICIENT_PRIVILEGES' | 'FIELD_NOT_ACCESSIBLE' | 'RECORD_NOT_ACCESSIBLE' | 'LICENSE_REQUIRED' | 'IP_RESTRICTED' | 'TIME_RESTRICTED' | 'RESOURCE_NOT_FOUND' | 'OBJECT_NOT_FOUND' | 'RECORD_NOT_FOUND' | 'FIELD_NOT_FOUND' | 'ENDPOINT_NOT_FOUND' | 'RESOURCE_CONFLICT' | 'CONCURRENT_MODIFICATION' | 'DELETE_RESTRICTED' | 'DUPLICATE_RECORD' | 'LOCK_CONFLICT' | 'METHOD_NOT_ALLOWED' | 'PRECONDITION_REQUIRED' | 'RATE_LIMIT_EXCEEDED' | 'QUOTA_EXCEEDED' | 'CONCURRENT_LIMIT_EXCEEDED' | 'INTERNAL_ERROR' | 'DATABASE_ERROR' | 'TIMEOUT' | 'SERVICE_UNAVAILABLE' | 'NOT_IMPLEMENTED' | 'EXTERNAL_SERVICE_ERROR' | 'INTEGRATION_ERROR' | 'WEBHOOK_DELIVERY_FAILED' | 'BATCH_PARTIAL_FAILURE' | 'BATCH_COMPLETE_FAILURE' | 'TRANSACTION_FAILED' | 'ACCOUNT_LOCKED' | 'ALREADY_REVERTED' | 'AMBIGUOUS_MATCH' | 'ANALYTICS_QUERY_FAILED' | 'APPROVAL_ACTIONS_FAILED' | 'APPROVAL_RECALL_FAILED' | 'APPROVAL_REQUEST_GET_FAILED' | 'APPROVAL_REQUEST_LIST_FAILED' | 'ASYNC_NOT_SUPPORTED' | 'ATTACHMENT_DELETE_DENIED' | 'ATTACHMENT_DOWNLOAD_DENIED' | 'ATTACHMENT_PARENT_ACCESS' | 'AUDIENCE_NOT_ALLOWED' | 'AUTH_CONFIG_ERROR' | 'AUTH_REQUIRED' | 'AUTOMATION_UNSCOPED_RUN_DATA_ACCESS' | 'BATCH_ABORTED' | 'BATCH_NOT_ATOMIC' | 'BATCH_TOO_LARGE' | 'BATCH_UNRESOLVED_REF' | 'BLANK_MATCH_KEY' | 'CLONE_DISABLED' | 'CLOUD_FETCH_FAILED' | 'CLOUD_UNCONFIGURED' | 'COMMIT_NOT_FOUND' | 'CONCURRENT_UPDATE' | 'CONFLICTING_MAPPING' | 'CONNECTOR_UPSTREAM_UNAVAILABLE' | 'CREATE_FAILED' | 'CUBE_NOT_FOUND' | 'DATASET_INVALID' | 'DATASOURCE_ADMIN_ERROR' | 'DELEGABLE_SCOPE_FAILED' | 'DELIVERY_NOT_ELIGIBLE' | 'DESTRUCTIVE_CHANGE' | 'DEVICE_CODE_FAILED' | 'DOMAIN_VERIFICATION_DISABLED' | 'DOMAIN_VERIFICATION_FAILED' | 'DRIVER_UNAVAILABLE' | 'DUPLICATE_REQUEST' | 'EMAIL_SEND_FAILED' | 'EMAIL_SERVICE_REQUIRED' | 'ENQUEUE_FAILED' | 'ENVIRONMENT_BIND_FAILED' | 'ENVIRONMENT_NOT_FOUND' | 'ENV_ACCESS_DENIED' | 'ERR_BULK_RESULT_MISMATCH' | 'ERR_DATASOURCE_UNAVAILABLE' | 'ERR_DRIVER_CONNECT' | 'ERR_FILE_CONSTRAINT' | 'ERR_FILE_REFERENCE_COPY' | 'ERR_SUMMARY_RECOMPUTE' | 'EXECUTION_ERROR' | 'EXPIRED_OR_REVOKED' | 'EXPIRY_IN_PAST' | 'EXPIRY_TOO_LONG' | 'EXPLAIN_FAILED' | 'EXPORT_NOT_PERMITTED' | 'EXTERNAL_DATASOURCE_ERROR' | 'EXTERNAL_IMPORT_ERROR' | 'EXTERNAL_SCHEMA_MISMATCH' | 'EXTERNAL_SCHEMA_MODE_VIOLATION' | 'EXTERNAL_WRITE_FORBIDDEN' | 'FEEDS_DISABLED' | 'FILES_DISABLED' | 'FILE_DOWNLOAD_DENIED' | 'FILE_NOT_FOUND' | 'FILTER_TOKEN_UNKNOWN' | 'FILTER_TOKEN_UNRESOLVED' | 'FORBIDDEN' | 'FORM_NOT_FOUND' | 'FORM_RESOLVE_FAILED' | 'IMPORT_JOB_CREATE_FAILED' | 'IMPORT_ROW_FAILED' | 'INTERNAL' | 'INVALID_EMAIL' | 'INVALID_EXPIRY' | 'INVALID_METADATA' | 'INVALID_OR_EXPIRED' | 'INVALID_PHONE' | 'INVALID_REQUEST' | 'INVALID_RESUME_TOKEN' | 'INVALID_SIGNAL' | 'INVALID_SIGNATURE' | 'INVALID_STATE' | 'INVITE_EMAIL_FAILED' | 'INVITE_REQUIRES_EMAIL' | 'INVITE_SMS_FAILED' | 'IP_NOT_ALLOWED' | 'ITEM_LOCKED' | 'LAST_LOCAL_CREDENTIAL' | 'LOOKUP_NOT_PUBLIC' | 'LOOKUP_TARGET_MISSING' | 'MANIFEST_CONFLICT' | 'MAPPING_FORMAT_MISMATCH' | 'MAPPING_FORMAT_UNSUPPORTED' | 'MAPPING_NOT_FOUND' | 'MAPPING_TARGET_MISMATCH' | 'MARKETPLACE_PROXY_FAILED' | 'MARKETPLACE_STORAGE_FAILED' | 'MARKETPLACE_UNAVAILABLE' | 'METADATA_BRANCH' | 'METADATA_CONFLICT' | 'METADATA_NOT_FOUND' | 'METADATA_SCHEMA_INVALID' | 'MONGODB_MULTI_TENANT_UNSUPPORTED' | 'NAMESPACE_PREFIX' | 'NEEDS_PASSWORD' | 'NODE_FAILURE' | 'NOTHING_TO_PURGE' | 'NOT_CREATABLE' | 'NOT_FOUND' | 'NOT_OVERRIDABLE' | 'NOT_UNDOABLE' | 'NO_DRAFT' | 'NO_EXECUTOR' | 'NO_IDENTITY' | 'NO_MATCH' | 'NO_PENDING_VERIFICATION' | 'OAUTH_REGISTER_FAILED' | 'OBJECT_API_DISABLED' | 'OBJECT_API_METHOD_NOT_ALLOWED' | 'OPENAPI_UNAVAILABLE' | 'OS_PROTOCOL_INCOMPATIBLE' | 'OVERLAY_PERSISTENCE_FAILED' | 'PACKAGE_DELETE_FAILED' | 'PACKAGE_DELETE_PARTIAL' | 'PACKAGE_MANIFEST_INVALID' | 'PACKAGE_PUBLISH_FAILED' | 'PASSWORD_ALREADY_SET' | 'PASSWORD_EXPIRED' | 'PASSWORD_POLICY_VIOLATION' | 'PASSWORD_REUSE' | 'PAYLOAD_TOO_LARGE' | 'PERMISSION_NOT_ALLOWED' | 'PHONE_NOT_ENABLED' | 'PLUGIN_INSTALL_FAILED' | 'PLUGIN_MANIFEST_INVALID' | 'PLUGIN_REGISTER_FAILED' | 'PROJECT_MEMBERSHIP_REQUIRED' | 'PROJECT_NOT_FOUND' | 'PROJECT_PROVISIONING' | 'PROJECT_PROVISIONING_FAILED' | 'RAW_SQL_UNSUPPORTED' | 'RECORD_GONE' | 'RECORD_LOCKED' | 'REPORTS_LIST_FAILED' | 'REPORT_DELETE_FAILED' | 'REPORT_GET_FAILED' | 'REPORT_NOT_FOUND' | 'REPORT_RUN_FAILED' | 'REPORT_SAVE_FAILED' | 'REPORT_SCHEDULE_FAILED' | 'REQUEST_NOT_FOUND' | 'RESEED_NO_ROWS' | 'RESEED_SKIPPED' | 'ROUTE_NOT_FOUND' | 'RULE_DEFINE_FAILED' | 'RULE_DELETE_FAILED' | 'RULE_EVALUATE_FAILED' | 'RULE_GET_FAILED' | 'RULE_LIST_FAILED' | 'RULE_NOT_FOUND' | 'SAML_REGISTER_FAILED' | 'SCHEDULES_LIST_FAILED' | 'SCHEDULE_DELETE_FAILED' | 'SETTINGS_ACTION_FAILED' | 'SETTINGS_FORBIDDEN' | 'SETTINGS_LOCKED' | 'SETTINGS_UNKNOWN_KEY' | 'SETTINGS_UNKNOWN_NAMESPACE' | 'SETTINGS_VALIDATION' | 'SHARES_LIST_FAILED' | 'SHARE_GRANT_FAILED' | 'SHARE_REVOKE_FAILED' | 'SHARING_NOT_ENABLED' | 'SIGN_IN_REQUIRED' | 'SSO_REGISTER_FAILED' | 'SSO_REGISTER_FORBIDDEN' | 'SUGGESTION_CONFIRM_FAILED' | 'SUGGESTION_DISMISS_FAILED' | 'SUGGESTION_LIST_FAILED' | 'SUGGESTION_NOT_FOUND' | 'SUGGESTION_STATE' | 'SUMMARY_RECOMPUTE_FAILED' | 'UNAUTHORIZED' | 'UNIQUE_VIOLATION' | 'UNKNOWN_KEY' | 'UNKNOWN_NAMESPACE' | 'UNSUPPORTED' | 'UNSUPPORTED_QUERY_PARAM' | 'UNSUPPORTED_TRANSFORM' | 'UPLOAD_SESSION_NOT_FOUND' | 'USER_ALREADY_EXISTS' | 'VALIDATION_FAILED' | 'VERSION_NOT_FOUND' | 'VERSION_NOT_RESTORABLE' | 'WRITABLE_PACKAGE_REQUIRED' | 'WRONG_PASSWORD'>; message: string; category?: string; httpStatus?: integer; … } |
optional | Error details if success is false |
| meta | { timestamp: string; duration?: number; requestId?: string; traceId?: string } |
optional | Response metadata |
| operation | Enum<'create' | 'update' | 'upsert' | 'delete'> |
optional | Operation type that was performed |
| total | number |
✅ | Total number of records in the batch |
| succeeded | number |
✅ | Number of records that succeeded |
| failed | number |
✅ | Number of records that failed |
| results | { id?: string; success: boolean; errors?: { code: Enum<'VALIDATION_ERROR' | 'INVALID_FIELD' | 'MISSING_REQUIRED_FIELD' | 'INVALID_FORMAT' | 'VALUE_TOO_LONG' | 'VALUE_TOO_SHORT' | 'VALUE_OUT_OF_RANGE' | 'INVALID_REFERENCE' | 'DUPLICATE_VALUE' | 'INVALID_QUERY' | 'INVALID_FILTER' | 'INVALID_SORT' | 'MAX_RECORDS_EXCEEDED' | 'UNAUTHENTICATED' | 'INVALID_CREDENTIALS' | 'EXPIRED_TOKEN' | 'INVALID_TOKEN' | 'SESSION_EXPIRED' | 'MFA_REQUIRED' | 'EMAIL_NOT_VERIFIED' | 'PERMISSION_DENIED' | 'INSUFFICIENT_PRIVILEGES' | 'FIELD_NOT_ACCESSIBLE' | 'RECORD_NOT_ACCESSIBLE' | 'LICENSE_REQUIRED' | 'IP_RESTRICTED' | 'TIME_RESTRICTED' | 'RESOURCE_NOT_FOUND' | 'OBJECT_NOT_FOUND' | 'RECORD_NOT_FOUND' | 'FIELD_NOT_FOUND' | 'ENDPOINT_NOT_FOUND' | 'RESOURCE_CONFLICT' | 'CONCURRENT_MODIFICATION' | 'DELETE_RESTRICTED' | 'DUPLICATE_RECORD' | 'LOCK_CONFLICT' | 'METHOD_NOT_ALLOWED' | 'PRECONDITION_REQUIRED' | 'RATE_LIMIT_EXCEEDED' | 'QUOTA_EXCEEDED' | 'CONCURRENT_LIMIT_EXCEEDED' | 'INTERNAL_ERROR' | 'DATABASE_ERROR' | 'TIMEOUT' | 'SERVICE_UNAVAILABLE' | 'NOT_IMPLEMENTED' | 'EXTERNAL_SERVICE_ERROR' | 'INTEGRATION_ERROR' | 'WEBHOOK_DELIVERY_FAILED' | 'BATCH_PARTIAL_FAILURE' | 'BATCH_COMPLETE_FAILURE' | 'TRANSACTION_FAILED' | 'ACCOUNT_LOCKED' | 'ALREADY_REVERTED' | 'AMBIGUOUS_MATCH' | 'ANALYTICS_QUERY_FAILED' | 'APPROVAL_ACTIONS_FAILED' | 'APPROVAL_RECALL_FAILED' | 'APPROVAL_REQUEST_GET_FAILED' | 'APPROVAL_REQUEST_LIST_FAILED' | 'ASYNC_NOT_SUPPORTED' | 'ATTACHMENT_DELETE_DENIED' | 'ATTACHMENT_DOWNLOAD_DENIED' | 'ATTACHMENT_PARENT_ACCESS' | 'AUDIENCE_NOT_ALLOWED' | 'AUTH_CONFIG_ERROR' | 'AUTH_REQUIRED' | 'AUTOMATION_UNSCOPED_RUN_DATA_ACCESS' | 'BATCH_ABORTED' | 'BATCH_NOT_ATOMIC' | 'BATCH_TOO_LARGE' | 'BATCH_UNRESOLVED_REF' | 'BLANK_MATCH_KEY' | 'CLONE_DISABLED' | 'CLOUD_FETCH_FAILED' | 'CLOUD_UNCONFIGURED' | 'COMMIT_NOT_FOUND' | 'CONCURRENT_UPDATE' | 'CONFLICTING_MAPPING' | 'CONNECTOR_UPSTREAM_UNAVAILABLE' | 'CREATE_FAILED' | 'CUBE_NOT_FOUND' | 'DATASET_INVALID' | 'DATASOURCE_ADMIN_ERROR' | 'DELEGABLE_SCOPE_FAILED' | 'DELIVERY_NOT_ELIGIBLE' | 'DESTRUCTIVE_CHANGE' | 'DEVICE_CODE_FAILED' | 'DOMAIN_VERIFICATION_DISABLED' | 'DOMAIN_VERIFICATION_FAILED' | 'DRIVER_UNAVAILABLE' | 'DUPLICATE_REQUEST' | 'EMAIL_SEND_FAILED' | 'EMAIL_SERVICE_REQUIRED' | 'ENQUEUE_FAILED' | 'ENVIRONMENT_BIND_FAILED' | 'ENVIRONMENT_NOT_FOUND' | 'ENV_ACCESS_DENIED' | 'ERR_BULK_RESULT_MISMATCH' | 'ERR_DATASOURCE_UNAVAILABLE' | 'ERR_DRIVER_CONNECT' | 'ERR_FILE_CONSTRAINT' | 'ERR_FILE_REFERENCE_COPY' | 'ERR_SUMMARY_RECOMPUTE' | 'EXECUTION_ERROR' | 'EXPIRED_OR_REVOKED' | 'EXPIRY_IN_PAST' | 'EXPIRY_TOO_LONG' | 'EXPLAIN_FAILED' | 'EXPORT_NOT_PERMITTED' | 'EXTERNAL_DATASOURCE_ERROR' | 'EXTERNAL_IMPORT_ERROR' | 'EXTERNAL_SCHEMA_MISMATCH' | 'EXTERNAL_SCHEMA_MODE_VIOLATION' | 'EXTERNAL_WRITE_FORBIDDEN' | 'FEEDS_DISABLED' | 'FILES_DISABLED' | 'FILE_DOWNLOAD_DENIED' | 'FILE_NOT_FOUND' | 'FILTER_TOKEN_UNKNOWN' | 'FILTER_TOKEN_UNRESOLVED' | 'FORBIDDEN' | 'FORM_NOT_FOUND' | 'FORM_RESOLVE_FAILED' | 'IMPORT_JOB_CREATE_FAILED' | 'IMPORT_ROW_FAILED' | 'INTERNAL' | 'INVALID_EMAIL' | 'INVALID_EXPIRY' | 'INVALID_METADATA' | 'INVALID_OR_EXPIRED' | 'INVALID_PHONE' | 'INVALID_REQUEST' | 'INVALID_RESUME_TOKEN' | 'INVALID_SIGNAL' | 'INVALID_SIGNATURE' | 'INVALID_STATE' | 'INVITE_EMAIL_FAILED' | 'INVITE_REQUIRES_EMAIL' | 'INVITE_SMS_FAILED' | 'IP_NOT_ALLOWED' | 'ITEM_LOCKED' | 'LAST_LOCAL_CREDENTIAL' | 'LOOKUP_NOT_PUBLIC' | 'LOOKUP_TARGET_MISSING' | 'MANIFEST_CONFLICT' | 'MAPPING_FORMAT_MISMATCH' | 'MAPPING_FORMAT_UNSUPPORTED' | 'MAPPING_NOT_FOUND' | 'MAPPING_TARGET_MISMATCH' | 'MARKETPLACE_PROXY_FAILED' | 'MARKETPLACE_STORAGE_FAILED' | 'MARKETPLACE_UNAVAILABLE' | 'METADATA_BRANCH' | 'METADATA_CONFLICT' | 'METADATA_NOT_FOUND' | 'METADATA_SCHEMA_INVALID' | 'MONGODB_MULTI_TENANT_UNSUPPORTED' | 'NAMESPACE_PREFIX' | 'NEEDS_PASSWORD' | 'NODE_FAILURE' | 'NOTHING_TO_PURGE' | 'NOT_CREATABLE' | 'NOT_FOUND' | 'NOT_OVERRIDABLE' | 'NOT_UNDOABLE' | 'NO_DRAFT' | 'NO_EXECUTOR' | 'NO_IDENTITY' | 'NO_MATCH' | 'NO_PENDING_VERIFICATION' | 'OAUTH_REGISTER_FAILED' | 'OBJECT_API_DISABLED' | 'OBJECT_API_METHOD_NOT_ALLOWED' | 'OPENAPI_UNAVAILABLE' | 'OS_PROTOCOL_INCOMPATIBLE' | 'OVERLAY_PERSISTENCE_FAILED' | 'PACKAGE_DELETE_FAILED' | 'PACKAGE_DELETE_PARTIAL' | 'PACKAGE_MANIFEST_INVALID' | 'PACKAGE_PUBLISH_FAILED' | 'PASSWORD_ALREADY_SET' | 'PASSWORD_EXPIRED' | 'PASSWORD_POLICY_VIOLATION' | 'PASSWORD_REUSE' | 'PAYLOAD_TOO_LARGE' | 'PERMISSION_NOT_ALLOWED' | 'PHONE_NOT_ENABLED' | 'PLUGIN_INSTALL_FAILED' | 'PLUGIN_MANIFEST_INVALID' | 'PLUGIN_REGISTER_FAILED' | 'PROJECT_MEMBERSHIP_REQUIRED' | 'PROJECT_NOT_FOUND' | 'PROJECT_PROVISIONING' | 'PROJECT_PROVISIONING_FAILED' | 'RAW_SQL_UNSUPPORTED' | 'RECORD_GONE' | 'RECORD_LOCKED' | 'REPORTS_LIST_FAILED' | 'REPORT_DELETE_FAILED' | 'REPORT_GET_FAILED' | 'REPORT_NOT_FOUND' | 'REPORT_RUN_FAILED' | 'REPORT_SAVE_FAILED' | 'REPORT_SCHEDULE_FAILED' | 'REQUEST_NOT_FOUND' | 'RESEED_NO_ROWS' | 'RESEED_SKIPPED' | 'ROUTE_NOT_FOUND' | 'RULE_DEFINE_FAILED' | 'RULE_DELETE_FAILED' | 'RULE_EVALUATE_FAILED' | 'RULE_GET_FAILED' | 'RULE_LIST_FAILED' | 'RULE_NOT_FOUND' | 'SAML_REGISTER_FAILED' | 'SCHEDULES_LIST_FAILED' | 'SCHEDULE_DELETE_FAILED' | 'SETTINGS_ACTION_FAILED' | 'SETTINGS_FORBIDDEN' | 'SETTINGS_LOCKED' | 'SETTINGS_UNKNOWN_KEY' | 'SETTINGS_UNKNOWN_NAMESPACE' | 'SETTINGS_VALIDATION' | 'SHARES_LIST_FAILED' | 'SHARE_GRANT_FAILED' | 'SHARE_REVOKE_FAILED' | 'SHARING_NOT_ENABLED' | 'SIGN_IN_REQUIRED' | 'SSO_REGISTER_FAILED' | 'SSO_REGISTER_FORBIDDEN' | 'SUGGESTION_CONFIRM_FAILED' | 'SUGGESTION_DISMISS_FAILED' | 'SUGGESTION_LIST_FAILED' | 'SUGGESTION_NOT_FOUND' | 'SUGGESTION_STATE' | 'SUMMARY_RECOMPUTE_FAILED' | 'UNAUTHORIZED' | 'UNIQUE_VIOLATION' | 'UNKNOWN_KEY' | 'UNKNOWN_NAMESPACE' | 'UNSUPPORTED' | 'UNSUPPORTED_QUERY_PARAM' | 'UNSUPPORTED_TRANSFORM' | 'UPLOAD_SESSION_NOT_FOUND' | 'USER_ALREADY_EXISTS' | 'VALIDATION_FAILED' | 'VERSION_NOT_FOUND' | 'VERSION_NOT_RESTORABLE' | 'WRITABLE_PACKAGE_REQUIRED' | 'WRONG_PASSWORD'>; message: string; category?: string; httpStatus?: integer; … }[]; data?: Record<string, any>; … }[] |
✅ | Detailed results for each record |
| Property | Type | Required | Description |
|---|---|---|---|
| type | string |
✅ | Metadata type name |
| name | string |
✅ | Item name |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | |
| reset | boolean |
optional | |
| message | string |
optional |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name (snake_case) |
| viewId | string |
✅ | View identifier to delete |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| viewId | string |
✅ | Deleted view identifier |
| success | boolean |
✅ | Whether deletion succeeded |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | The unique machine name of the object to query (e.g. "account"). |
| query | { object: string; fields?: string[]; where?: any; search?: string | { query: string; fields?: string[]; fuzzy: boolean; operator: Enum<'and' | 'or'>; … }; … } |
optional | Structured query definition (filter, sort, select, pagination). |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | The object name for the returned records. |
| records | Record<string, any>[] |
✅ | The list of matching records. |
| total | number |
optional | Total number of records matching the filter (if requested). |
| nextCursor | string |
optional | Cursor for the next page of results (cursor-based pagination). |
| hasMore | boolean |
optional | True if there are more records available (pagination). |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | The object name. |
| id | string |
✅ | The unique record identifier (primary key). |
| select | string[] |
optional | Fields to include in the response (allowlisted query param). |
| expand | string[] |
optional | Lookup/master_detail field names to expand. The engine resolves these via batch $in queries, replacing foreign key IDs with full objects. |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | The object name. |
| id | string |
✅ | The record ID. |
| record | Record<string, any> |
✅ | The complete record data. |
| Property | Type | Required | Description |
|---|
| Property | Type | Required | Description |
|---|---|---|---|
| name | string |
optional | |
| version | string |
✅ | |
| environment | Enum<'production' | 'sandbox' | 'development'> |
optional | |
| routes | { data: string; metadata: string; discovery?: string; ui?: string; … } |
optional | |
| locale | { default: string; supported: string[]; timezone: string } |
optional | |
| services | Record<string, { enabled: boolean; status: Enum<'available' | 'registered' | 'unavailable' | 'degraded' | 'stub'>; handlerReady?: boolean; route?: string; … }> |
optional | Per-service availability map keyed by CoreServiceName |
| capabilities | Record<string, { enabled: boolean; features?: Record<string, boolean>; description?: string }> |
optional | Hierarchical capability descriptors for frontend intelligent adaptation |
| schemaDiscovery | { openapi?: string; jsonSchema?: string } |
optional | Schema discovery endpoints for API toolchain integration |
| metadata | Record<string, any> |
optional | Custom metadata key-value pairs for extensibility |
| apiName | string |
optional | API name (deprecated — use name) |
| Property | Type | Required | Description |
|---|
| Property | Type | Required | Description |
|---|---|---|---|
| objects | Record<string, { allowCreate: boolean; allowRead: boolean; allowEdit: boolean; allowDelete: boolean; … }> |
✅ | Effective object permissions keyed by object name |
| systemPermissions | string[] |
✅ | Effective system-level permissions |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| locale | string |
✅ | BCP-47 locale code |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| locale | string |
✅ | Locale code |
| labels | Record<string, { label: string; help?: string; options?: Record<string, string> }> |
✅ | Field labels keyed by field name |
| Property | Type | Required | Description |
|---|
| Property | Type | Required | Description |
|---|---|---|---|
| locales | { code: string; label: string; isDefault: boolean }[] |
✅ | Available locales |
| Property | Type | Required | Description |
|---|---|---|---|
| type | string |
✅ | Metadata type name |
| name | string |
✅ | Item name |
| cacheRequest | { ifNoneMatch?: string; ifModifiedSince?: string; cacheControl?: object } |
optional | Cache validation parameters |
| locale | string |
optional | Resolved response locale. Folded into the ETag so a language switch never returns a stale-locale 304 — metadata is translated after the cache validator check (issue #1319). |
| Property | Type | Required | Description |
|---|---|---|---|
| data | any |
optional | Metadata payload (omitted for 304 Not Modified) |
| etag | { value: string; weak: boolean } |
optional | ETag for this resource version |
| lastModified | string |
optional | Last modification timestamp |
| cacheControl | { directives: Enum<'public' | 'private' | 'no-cache' | 'no-store' | 'must-revalidate' | 'max-age'>[]; maxAge?: number; staleWhileRevalidate?: number; staleIfError?: number } |
optional | Cache control directives |
| notModified | boolean |
✅ | True if resource has not been modified (304 response) |
| version | string |
optional | Metadata version identifier |
| Property | Type | Required | Description |
|---|---|---|---|
| type | string |
✅ | Metadata type name |
| name | string |
✅ | Item name (snake_case identifier) |
| packageId | string |
optional | Optional package ID to filter items by |
| Property | Type | Required | Description |
|---|---|---|---|
| type | string |
✅ | Metadata type name |
| name | string |
✅ | Item name |
| item | any |
✅ | Metadata item definition |
| Property | Type | Required | Description |
|---|---|---|---|
| type | string |
✅ | Metadata type name (e.g., "object", "plugin") |
| packageId | string |
optional | Optional package ID to filter items by |
| Property | Type | Required | Description |
|---|---|---|---|
| type | string |
✅ | Metadata type name |
| items | any[] |
✅ | Array of metadata items |
| Property | Type | Required | Description |
|---|
| Property | Type | Required | Description |
|---|---|---|---|
| types | string[] |
✅ | Available metadata type names (e.g., "object", "plugin", "view") |
| entries | { type: string; label: string; description?: string; filePatterns: string[]; … }[] |
optional | Enriched per-type registry entries (Phase 3a) |
| Property | Type | Required | Description |
|---|
| Property | Type | Required | Description |
|---|---|---|---|
| preferences | { email: boolean; push: boolean; inApp: boolean; digest: Enum<'none' | 'daily' | 'weekly'>; … } |
✅ | Current notification preferences |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name to get permissions for |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| permissions | { allowCreate: boolean; allowRead: boolean; allowEdit: boolean; allowDelete: boolean; … } |
✅ | Object-level permissions |
| fieldPermissions | Record<string, { readable: boolean; editable: boolean }> |
optional | Field-level permissions keyed by field name |
| Property | Type | Required | Description |
|---|---|---|---|
| channel | string |
✅ | Channel to get presence for |
| Property | Type | Required | Description |
|---|---|---|---|
| channel | string |
✅ | Channel name |
| members | { userId: string; status: Enum<'online' | 'away' | 'busy' | 'offline'>; lastSeen: string; metadata?: Record<string, any> }[] |
✅ | Active members and their presence state |
| Property | Type | Required | Description |
|---|---|---|---|
| locale | string |
✅ | BCP-47 locale code |
| Property | Type | Required | Description |
|---|---|---|---|
| locale | string |
✅ | Locale code |
| translations | { objects?: Record<string, { label?: string; pluralLabel?: string; description?: string; fields?: Record<string, { label?: string; help?: string; placeholder?: string; options?: Record<string, string> }>; … }>; apps?: Record<string, { label: string; description?: string; navigation?: Record<string, { label: string }> }>; messages?: Record<string, string>; validationMessages?: Record<string, string>; … } |
✅ | Translation data |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name (snake_case) |
| type | Enum<'list' | 'form'> |
✅ | View type |
| Property | Type | Required | Description |
|---|---|---|---|
| list | { name?: string; label?: string; type?: Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>; data?: { provider: 'object'; object: string } | { provider: 'api'; read?: object; write?: object } | { provider: 'value'; items: any[] } | { provider: 'schema'; schemaId: string; schema?: Record<string, any> }; … } |
optional | |
| form | { type?: Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'>; layout?: Enum<'vertical' | 'horizontal' | 'inline' | 'grid'>; columns?: integer; title?: string; … } |
optional | |
| listViews | Record<string, { name?: string; label?: string; type?: Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>; data?: { provider: 'object'; object: string } | { provider: 'api'; read?: object; write?: object } | { provider: 'value'; items: any[] } | { provider: 'schema'; schemaId: string; schema?: Record<string, any> }; … }> |
optional | Additional named list views (views mode — dropdown userFilters allowed, no tabs; ADR-0047) |
| formViews | Record<string, { type?: Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'>; layout?: Enum<'vertical' | 'horizontal' | 'inline' | 'grid'>; columns?: integer; title?: string; … }> |
optional | Additional named form views |
| protection | { lock: Enum<'none' | 'no-overlay' | 'no-delete' | 'full'>; reason: string; docsUrl?: string } |
optional | Package author protection block — lock policy for this view. |
| _lock | Enum<'none' | 'no-overlay' | 'no-delete' | 'full'> |
optional | Item-level lock — controls overlay & delete (ADR-0010). |
| _lockReason | string |
optional | Human-readable reason shown when a write is refused by _lock. |
| _lockSource | Enum<'artifact' | 'package' | 'env-forced'> |
optional | Layer that set _lock (artifact | package | env-forced). |
| _provenance | Enum<'package' | 'org' | 'env-forced'> |
optional | Origin of the item (package | org | env-forced). |
| _packageId | string |
optional | Owning package machine id. |
| _packageVersion | string |
optional | Owning package version. |
| _lockDocsUrl | string |
optional | Optional documentation link surfaced next to _lockReason. |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name (snake_case) |
| viewId | string |
✅ | View identifier |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| view | { list?: object; form?: object; listViews?: Record<string, { name?: string; label?: string; type?: Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>; data?: { provider: 'object'; object: string } | { provider: 'api'; read?: object; write?: object } | { provider: 'value'; items: any[] } | { provider: 'schema'; schemaId: string; schema?: Record<string, any> }; … }>; formViews?: Record<string, { type?: Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'>; layout?: Enum<'vertical' | 'horizontal' | 'inline' | 'grid'>; columns?: integer; title?: string; … }>; … } |
✅ | View definition |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name to get workflow config for |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| workflows | { id: string; description?: string; contextSchema?: Record<string, any>; initial: string; … }[] |
✅ | Active state-machine workflows for this object |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| recordId | string |
✅ | Record ID to get workflow state for |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| recordId | string |
✅ | Record ID |
| state | { currentState: string; availableTransitions: { name: string; targetState: string; label?: string; requiresApproval: boolean }[]; history?: { fromState: string; toState: string; action: string; userId: string; … }[] } |
✅ | Current workflow state and available transitions |
| Property | Type | Required | Description |
|---|---|---|---|
| filter | string |
optional | JSON-encoded filter expression (canonical, singular). |
| filters | string |
optional | JSON-encoded filter expression (deprecated plural alias). |
| select | string |
optional | Comma-separated list of fields to retrieve. |
| sort | string |
optional | Sort expression (e.g. "name asc,created_at desc" or "-created_at"). |
| orderBy | string |
optional | Alias for sort (OData compatibility). |
| top | number |
optional | Max records to return (limit). |
| skip | number |
optional | Records to skip (offset). |
| expand | string |
optional | Comma-separated list of lookup/master_detail field names to expand. Resolved to populate array and passed to the engine for batch $in expansion. |
| search | string |
optional | Full-text search query. |
| distinct | any |
optional | [REMOVED] query.distinct was removed in @objectstack/spec 17 (#4286, ADR-0049 / ADR-0078) — no driver ever rendered SELECT DISTINCT; the flag's only observable effect was MIS-WIRED: the REST list path treated a distinct query as not countable and silently degraded total/hasMore to a page-local estimate while still returning duplicate rows. Delete the key; QueryBuilder.distinct() was removed with it, and the count suppression is gone (total is truthful again). For unique values of one column use the SQL/memory drivers' distinct(object, field) door; for unique combinations, groupBy; for a deduplicated count, the count_distinct aggregation. |
| count | boolean |
optional | Include total count in response. |
| Property | Type | Required | Description |
|---|---|---|---|
| agentId | string |
optional | Filter by agent |
| limit | integer |
optional | Maximum conversations to return |
| cursor | string |
optional | Pagination cursor |
| Property | Type | Required | Description |
|---|---|---|---|
| conversations | { id: string; title?: string; agentId?: string; userId?: string; … }[] |
✅ | Matching conversations |
| Property | Type | Required | Description |
|---|---|---|---|
| status | Enum<'pending' | 'approved' | 'executed' | 'failed' | 'rejected'> |
optional | Filter by status |
| conversationId | string |
optional | Filter by proposing conversation |
| limit | integer |
optional | Max rows (server default 100) |
| Property | Type | Required | Description |
|---|---|---|---|
| items | { id: string; object_name: string; action_name: string; tool_name: string; … }[] |
✅ | Queued actions, newest first |
| total | number |
✅ | Number of rows returned (not a total across pages) |
| Property | Type | Required | Description |
|---|---|---|---|
| read | boolean |
optional | Filter by read status |
| type | string |
optional | Filter by notification type |
| limit | number |
✅ | Maximum number of notifications to return |
| cursor | string |
optional | Pagination cursor |
| Property | Type | Required | Description |
|---|---|---|---|
| notifications | { id: string; type: string; title: string; body: string; … }[] |
✅ | List of notifications |
| unreadCount | number |
✅ | Total number of unread notifications |
| cursor | string |
optional | Next page cursor |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name (snake_case) |
| type | Enum<'list' | 'form'> |
optional | Filter by view type |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| views | { list?: object; form?: object; listViews?: Record<string, { name?: string; label?: string; type?: Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>; data?: { provider: 'object'; object: string } | { provider: 'api'; read?: object; write?: object } | { provider: 'value'; items: any[] } | { provider: 'schema'; schemaId: string; schema?: Record<string, any> }; … }>; formViews?: Record<string, { type?: Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'>; layout?: Enum<'vertical' | 'horizontal' | 'inline' | 'grid'>; columns?: integer; title?: string; … }>; … }[] |
✅ | Array of view definitions |
| Property | Type | Required | Description |
|---|
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Whether the operation succeeded |
| readCount | number |
✅ | Number of notifications marked as read |
| Property | Type | Required | Description |
|---|---|---|---|
| ids | string[] |
✅ | Notification IDs to mark as read |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Whether the operation succeeded |
| readCount | number |
✅ | Number of notifications marked as read |
| Property | Type | Required | Description |
|---|---|---|---|
boolean |
✅ | Receive email notifications | |
| push | boolean |
✅ | Receive push notifications |
| inApp | boolean |
✅ | Receive in-app notifications |
| digest | Enum<'none' | 'daily' | 'weekly'> |
✅ | Email digest frequency |
| channels | Record<string, { enabled: boolean; email?: boolean; push?: boolean }> |
optional | Per-channel notification preferences |
| Property | Type | Required | Description |
|---|---|---|---|
| transport | Enum<'websocket' | 'sse' | 'polling'> |
optional | Preferred transport protocol |
| channels | string[] |
optional | Channels to subscribe to on connect |
| token | string |
optional | Authentication token |
| Property | Type | Required | Description |
|---|---|---|---|
| connectionId | string |
✅ | Unique connection identifier |
| transport | Enum<'websocket' | 'sse' | 'polling'> |
✅ | Negotiated transport protocol |
| url | string |
optional | WebSocket/SSE endpoint URL |
| Property | Type | Required | Description |
|---|---|---|---|
| connectionId | string |
optional | Connection ID to disconnect |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Whether disconnection succeeded |
| Property | Type | Required | Description |
|---|---|---|---|
| channel | string |
✅ | Channel name to subscribe to |
| events | string[] |
optional | Specific event types to listen for |
| filter | Record<string, any> |
optional | Event filter criteria |
| Property | Type | Required | Description |
|---|---|---|---|
| subscriptionId | string |
✅ | Unique subscription identifier |
| channel | string |
✅ | Subscribed channel name |
| Property | Type | Required | Description |
|---|---|---|---|
| subscriptionId | string |
✅ | Subscription ID to cancel |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Whether unsubscription succeeded |
| Property | Type | Required | Description |
|---|---|---|---|
| token | string |
✅ | Device push notification token |
| platform | Enum<'ios' | 'android' | 'web'> |
✅ | Device platform |
| deviceId | string |
optional | Unique device identifier |
| name | string |
optional | Device friendly name |
| Property | Type | Required | Description |
|---|---|---|---|
| deviceId | string |
✅ | Registered device ID |
| success | boolean |
✅ | Whether registration succeeded |
| Property | Type | Required | Description |
|---|---|---|---|
| status | 'rejected' |
✅ | Always "rejected" |
| id | string |
✅ | The rejected action id |
| Property | Type | Required | Description |
|---|---|---|---|
| type | string |
✅ | Metadata type name |
| name | string |
✅ | Item name |
| item | any |
✅ | Metadata item definition |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | |
| message | string |
optional |
| Property | Type | Required | Description |
|---|---|---|---|
| channel | string |
✅ | Channel to set presence in |
| state | { userId: string; status: Enum<'online' | 'away' | 'busy' | 'offline'>; lastSeen: string; metadata?: Record<string, any> } |
✅ | Presence state to set |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Whether presence was set |
| Property | Type | Required | Description |
|---|---|---|---|
| deviceId | string |
✅ | Device ID to unregister |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Whether unregistration succeeded |
| Property | Type | Required | Description |
|---|---|---|---|
| title | string |
optional | New title |
| metadata | Record<string, any> |
optional | New metadata |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | The object name. |
| id | string |
✅ | The ID of the record to update. |
| data | Record<string, any> |
✅ | The fields to update (partial update). |
| expectedVersion | string |
optional | Optimistic concurrency token (typically the updated_at value the client read). When provided, the server compares it against the current record version and returns 409 CONCURRENT_UPDATE if they differ. Optional — omit to skip the check. |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| id | string |
✅ | Updated record ID |
| record | Record<string, any> |
✅ | Updated record |
| droppedFields | { object: string; fields: string[]; reason: Enum<'readonly' | 'readonly_when'> }[] |
optional | Write-observability (#3407/#3431): caller-supplied fields the engine LEGALLY stripped from the write before persisting — static readonly (#2948) or a TRUE readonlyWhen predicate (#3042). Present ONLY when ≥1 field was dropped; the update still succeeded without them (status/success semantics unchanged — stripping is legitimate, not an error). REST additionally surfaces this as the X-ObjectStack-Dropped-Fields response header. Optional — omit-when-empty keeps the shape backward-compatible for existing clients that only read record. |
| Property | Type | Required | Description |
|---|---|---|---|
| records | { id: string; data: Record<string, any> }[] |
✅ | Array of records to update (server caps the count — see batch.maxBatchSize) |
| options | { atomic: boolean; returnRecords: boolean; continueOnError: boolean; validateOnly?: any } |
optional | Update options |
| object | string |
✅ | Object name |
| Property | Type | Required | Description |
|---|---|---|---|
| success | boolean |
✅ | Operation success status |
| error | { code: Enum<'VALIDATION_ERROR' | 'INVALID_FIELD' | 'MISSING_REQUIRED_FIELD' | 'INVALID_FORMAT' | 'VALUE_TOO_LONG' | 'VALUE_TOO_SHORT' | 'VALUE_OUT_OF_RANGE' | 'INVALID_REFERENCE' | 'DUPLICATE_VALUE' | 'INVALID_QUERY' | 'INVALID_FILTER' | 'INVALID_SORT' | 'MAX_RECORDS_EXCEEDED' | 'UNAUTHENTICATED' | 'INVALID_CREDENTIALS' | 'EXPIRED_TOKEN' | 'INVALID_TOKEN' | 'SESSION_EXPIRED' | 'MFA_REQUIRED' | 'EMAIL_NOT_VERIFIED' | 'PERMISSION_DENIED' | 'INSUFFICIENT_PRIVILEGES' | 'FIELD_NOT_ACCESSIBLE' | 'RECORD_NOT_ACCESSIBLE' | 'LICENSE_REQUIRED' | 'IP_RESTRICTED' | 'TIME_RESTRICTED' | 'RESOURCE_NOT_FOUND' | 'OBJECT_NOT_FOUND' | 'RECORD_NOT_FOUND' | 'FIELD_NOT_FOUND' | 'ENDPOINT_NOT_FOUND' | 'RESOURCE_CONFLICT' | 'CONCURRENT_MODIFICATION' | 'DELETE_RESTRICTED' | 'DUPLICATE_RECORD' | 'LOCK_CONFLICT' | 'METHOD_NOT_ALLOWED' | 'PRECONDITION_REQUIRED' | 'RATE_LIMIT_EXCEEDED' | 'QUOTA_EXCEEDED' | 'CONCURRENT_LIMIT_EXCEEDED' | 'INTERNAL_ERROR' | 'DATABASE_ERROR' | 'TIMEOUT' | 'SERVICE_UNAVAILABLE' | 'NOT_IMPLEMENTED' | 'EXTERNAL_SERVICE_ERROR' | 'INTEGRATION_ERROR' | 'WEBHOOK_DELIVERY_FAILED' | 'BATCH_PARTIAL_FAILURE' | 'BATCH_COMPLETE_FAILURE' | 'TRANSACTION_FAILED' | 'ACCOUNT_LOCKED' | 'ALREADY_REVERTED' | 'AMBIGUOUS_MATCH' | 'ANALYTICS_QUERY_FAILED' | 'APPROVAL_ACTIONS_FAILED' | 'APPROVAL_RECALL_FAILED' | 'APPROVAL_REQUEST_GET_FAILED' | 'APPROVAL_REQUEST_LIST_FAILED' | 'ASYNC_NOT_SUPPORTED' | 'ATTACHMENT_DELETE_DENIED' | 'ATTACHMENT_DOWNLOAD_DENIED' | 'ATTACHMENT_PARENT_ACCESS' | 'AUDIENCE_NOT_ALLOWED' | 'AUTH_CONFIG_ERROR' | 'AUTH_REQUIRED' | 'AUTOMATION_UNSCOPED_RUN_DATA_ACCESS' | 'BATCH_ABORTED' | 'BATCH_NOT_ATOMIC' | 'BATCH_TOO_LARGE' | 'BATCH_UNRESOLVED_REF' | 'BLANK_MATCH_KEY' | 'CLONE_DISABLED' | 'CLOUD_FETCH_FAILED' | 'CLOUD_UNCONFIGURED' | 'COMMIT_NOT_FOUND' | 'CONCURRENT_UPDATE' | 'CONFLICTING_MAPPING' | 'CONNECTOR_UPSTREAM_UNAVAILABLE' | 'CREATE_FAILED' | 'CUBE_NOT_FOUND' | 'DATASET_INVALID' | 'DATASOURCE_ADMIN_ERROR' | 'DELEGABLE_SCOPE_FAILED' | 'DELIVERY_NOT_ELIGIBLE' | 'DESTRUCTIVE_CHANGE' | 'DEVICE_CODE_FAILED' | 'DOMAIN_VERIFICATION_DISABLED' | 'DOMAIN_VERIFICATION_FAILED' | 'DRIVER_UNAVAILABLE' | 'DUPLICATE_REQUEST' | 'EMAIL_SEND_FAILED' | 'EMAIL_SERVICE_REQUIRED' | 'ENQUEUE_FAILED' | 'ENVIRONMENT_BIND_FAILED' | 'ENVIRONMENT_NOT_FOUND' | 'ENV_ACCESS_DENIED' | 'ERR_BULK_RESULT_MISMATCH' | 'ERR_DATASOURCE_UNAVAILABLE' | 'ERR_DRIVER_CONNECT' | 'ERR_FILE_CONSTRAINT' | 'ERR_FILE_REFERENCE_COPY' | 'ERR_SUMMARY_RECOMPUTE' | 'EXECUTION_ERROR' | 'EXPIRED_OR_REVOKED' | 'EXPIRY_IN_PAST' | 'EXPIRY_TOO_LONG' | 'EXPLAIN_FAILED' | 'EXPORT_NOT_PERMITTED' | 'EXTERNAL_DATASOURCE_ERROR' | 'EXTERNAL_IMPORT_ERROR' | 'EXTERNAL_SCHEMA_MISMATCH' | 'EXTERNAL_SCHEMA_MODE_VIOLATION' | 'EXTERNAL_WRITE_FORBIDDEN' | 'FEEDS_DISABLED' | 'FILES_DISABLED' | 'FILE_DOWNLOAD_DENIED' | 'FILE_NOT_FOUND' | 'FILTER_TOKEN_UNKNOWN' | 'FILTER_TOKEN_UNRESOLVED' | 'FORBIDDEN' | 'FORM_NOT_FOUND' | 'FORM_RESOLVE_FAILED' | 'IMPORT_JOB_CREATE_FAILED' | 'IMPORT_ROW_FAILED' | 'INTERNAL' | 'INVALID_EMAIL' | 'INVALID_EXPIRY' | 'INVALID_METADATA' | 'INVALID_OR_EXPIRED' | 'INVALID_PHONE' | 'INVALID_REQUEST' | 'INVALID_RESUME_TOKEN' | 'INVALID_SIGNAL' | 'INVALID_SIGNATURE' | 'INVALID_STATE' | 'INVITE_EMAIL_FAILED' | 'INVITE_REQUIRES_EMAIL' | 'INVITE_SMS_FAILED' | 'IP_NOT_ALLOWED' | 'ITEM_LOCKED' | 'LAST_LOCAL_CREDENTIAL' | 'LOOKUP_NOT_PUBLIC' | 'LOOKUP_TARGET_MISSING' | 'MANIFEST_CONFLICT' | 'MAPPING_FORMAT_MISMATCH' | 'MAPPING_FORMAT_UNSUPPORTED' | 'MAPPING_NOT_FOUND' | 'MAPPING_TARGET_MISMATCH' | 'MARKETPLACE_PROXY_FAILED' | 'MARKETPLACE_STORAGE_FAILED' | 'MARKETPLACE_UNAVAILABLE' | 'METADATA_BRANCH' | 'METADATA_CONFLICT' | 'METADATA_NOT_FOUND' | 'METADATA_SCHEMA_INVALID' | 'MONGODB_MULTI_TENANT_UNSUPPORTED' | 'NAMESPACE_PREFIX' | 'NEEDS_PASSWORD' | 'NODE_FAILURE' | 'NOTHING_TO_PURGE' | 'NOT_CREATABLE' | 'NOT_FOUND' | 'NOT_OVERRIDABLE' | 'NOT_UNDOABLE' | 'NO_DRAFT' | 'NO_EXECUTOR' | 'NO_IDENTITY' | 'NO_MATCH' | 'NO_PENDING_VERIFICATION' | 'OAUTH_REGISTER_FAILED' | 'OBJECT_API_DISABLED' | 'OBJECT_API_METHOD_NOT_ALLOWED' | 'OPENAPI_UNAVAILABLE' | 'OS_PROTOCOL_INCOMPATIBLE' | 'OVERLAY_PERSISTENCE_FAILED' | 'PACKAGE_DELETE_FAILED' | 'PACKAGE_DELETE_PARTIAL' | 'PACKAGE_MANIFEST_INVALID' | 'PACKAGE_PUBLISH_FAILED' | 'PASSWORD_ALREADY_SET' | 'PASSWORD_EXPIRED' | 'PASSWORD_POLICY_VIOLATION' | 'PASSWORD_REUSE' | 'PAYLOAD_TOO_LARGE' | 'PERMISSION_NOT_ALLOWED' | 'PHONE_NOT_ENABLED' | 'PLUGIN_INSTALL_FAILED' | 'PLUGIN_MANIFEST_INVALID' | 'PLUGIN_REGISTER_FAILED' | 'PROJECT_MEMBERSHIP_REQUIRED' | 'PROJECT_NOT_FOUND' | 'PROJECT_PROVISIONING' | 'PROJECT_PROVISIONING_FAILED' | 'RAW_SQL_UNSUPPORTED' | 'RECORD_GONE' | 'RECORD_LOCKED' | 'REPORTS_LIST_FAILED' | 'REPORT_DELETE_FAILED' | 'REPORT_GET_FAILED' | 'REPORT_NOT_FOUND' | 'REPORT_RUN_FAILED' | 'REPORT_SAVE_FAILED' | 'REPORT_SCHEDULE_FAILED' | 'REQUEST_NOT_FOUND' | 'RESEED_NO_ROWS' | 'RESEED_SKIPPED' | 'ROUTE_NOT_FOUND' | 'RULE_DEFINE_FAILED' | 'RULE_DELETE_FAILED' | 'RULE_EVALUATE_FAILED' | 'RULE_GET_FAILED' | 'RULE_LIST_FAILED' | 'RULE_NOT_FOUND' | 'SAML_REGISTER_FAILED' | 'SCHEDULES_LIST_FAILED' | 'SCHEDULE_DELETE_FAILED' | 'SETTINGS_ACTION_FAILED' | 'SETTINGS_FORBIDDEN' | 'SETTINGS_LOCKED' | 'SETTINGS_UNKNOWN_KEY' | 'SETTINGS_UNKNOWN_NAMESPACE' | 'SETTINGS_VALIDATION' | 'SHARES_LIST_FAILED' | 'SHARE_GRANT_FAILED' | 'SHARE_REVOKE_FAILED' | 'SHARING_NOT_ENABLED' | 'SIGN_IN_REQUIRED' | 'SSO_REGISTER_FAILED' | 'SSO_REGISTER_FORBIDDEN' | 'SUGGESTION_CONFIRM_FAILED' | 'SUGGESTION_DISMISS_FAILED' | 'SUGGESTION_LIST_FAILED' | 'SUGGESTION_NOT_FOUND' | 'SUGGESTION_STATE' | 'SUMMARY_RECOMPUTE_FAILED' | 'UNAUTHORIZED' | 'UNIQUE_VIOLATION' | 'UNKNOWN_KEY' | 'UNKNOWN_NAMESPACE' | 'UNSUPPORTED' | 'UNSUPPORTED_QUERY_PARAM' | 'UNSUPPORTED_TRANSFORM' | 'UPLOAD_SESSION_NOT_FOUND' | 'USER_ALREADY_EXISTS' | 'VALIDATION_FAILED' | 'VERSION_NOT_FOUND' | 'VERSION_NOT_RESTORABLE' | 'WRITABLE_PACKAGE_REQUIRED' | 'WRONG_PASSWORD'>; message: string; category?: string; httpStatus?: integer; … } |
optional | Error details if success is false |
| meta | { timestamp: string; duration?: number; requestId?: string; traceId?: string } |
optional | Response metadata |
| operation | Enum<'create' | 'update' | 'upsert' | 'delete'> |
optional | Operation type that was performed |
| total | number |
✅ | Total number of records in the batch |
| succeeded | number |
✅ | Number of records that succeeded |
| failed | number |
✅ | Number of records that failed |
| results | { id?: string; success: boolean; errors?: { code: Enum<'VALIDATION_ERROR' | 'INVALID_FIELD' | 'MISSING_REQUIRED_FIELD' | 'INVALID_FORMAT' | 'VALUE_TOO_LONG' | 'VALUE_TOO_SHORT' | 'VALUE_OUT_OF_RANGE' | 'INVALID_REFERENCE' | 'DUPLICATE_VALUE' | 'INVALID_QUERY' | 'INVALID_FILTER' | 'INVALID_SORT' | 'MAX_RECORDS_EXCEEDED' | 'UNAUTHENTICATED' | 'INVALID_CREDENTIALS' | 'EXPIRED_TOKEN' | 'INVALID_TOKEN' | 'SESSION_EXPIRED' | 'MFA_REQUIRED' | 'EMAIL_NOT_VERIFIED' | 'PERMISSION_DENIED' | 'INSUFFICIENT_PRIVILEGES' | 'FIELD_NOT_ACCESSIBLE' | 'RECORD_NOT_ACCESSIBLE' | 'LICENSE_REQUIRED' | 'IP_RESTRICTED' | 'TIME_RESTRICTED' | 'RESOURCE_NOT_FOUND' | 'OBJECT_NOT_FOUND' | 'RECORD_NOT_FOUND' | 'FIELD_NOT_FOUND' | 'ENDPOINT_NOT_FOUND' | 'RESOURCE_CONFLICT' | 'CONCURRENT_MODIFICATION' | 'DELETE_RESTRICTED' | 'DUPLICATE_RECORD' | 'LOCK_CONFLICT' | 'METHOD_NOT_ALLOWED' | 'PRECONDITION_REQUIRED' | 'RATE_LIMIT_EXCEEDED' | 'QUOTA_EXCEEDED' | 'CONCURRENT_LIMIT_EXCEEDED' | 'INTERNAL_ERROR' | 'DATABASE_ERROR' | 'TIMEOUT' | 'SERVICE_UNAVAILABLE' | 'NOT_IMPLEMENTED' | 'EXTERNAL_SERVICE_ERROR' | 'INTEGRATION_ERROR' | 'WEBHOOK_DELIVERY_FAILED' | 'BATCH_PARTIAL_FAILURE' | 'BATCH_COMPLETE_FAILURE' | 'TRANSACTION_FAILED' | 'ACCOUNT_LOCKED' | 'ALREADY_REVERTED' | 'AMBIGUOUS_MATCH' | 'ANALYTICS_QUERY_FAILED' | 'APPROVAL_ACTIONS_FAILED' | 'APPROVAL_RECALL_FAILED' | 'APPROVAL_REQUEST_GET_FAILED' | 'APPROVAL_REQUEST_LIST_FAILED' | 'ASYNC_NOT_SUPPORTED' | 'ATTACHMENT_DELETE_DENIED' | 'ATTACHMENT_DOWNLOAD_DENIED' | 'ATTACHMENT_PARENT_ACCESS' | 'AUDIENCE_NOT_ALLOWED' | 'AUTH_CONFIG_ERROR' | 'AUTH_REQUIRED' | 'AUTOMATION_UNSCOPED_RUN_DATA_ACCESS' | 'BATCH_ABORTED' | 'BATCH_NOT_ATOMIC' | 'BATCH_TOO_LARGE' | 'BATCH_UNRESOLVED_REF' | 'BLANK_MATCH_KEY' | 'CLONE_DISABLED' | 'CLOUD_FETCH_FAILED' | 'CLOUD_UNCONFIGURED' | 'COMMIT_NOT_FOUND' | 'CONCURRENT_UPDATE' | 'CONFLICTING_MAPPING' | 'CONNECTOR_UPSTREAM_UNAVAILABLE' | 'CREATE_FAILED' | 'CUBE_NOT_FOUND' | 'DATASET_INVALID' | 'DATASOURCE_ADMIN_ERROR' | 'DELEGABLE_SCOPE_FAILED' | 'DELIVERY_NOT_ELIGIBLE' | 'DESTRUCTIVE_CHANGE' | 'DEVICE_CODE_FAILED' | 'DOMAIN_VERIFICATION_DISABLED' | 'DOMAIN_VERIFICATION_FAILED' | 'DRIVER_UNAVAILABLE' | 'DUPLICATE_REQUEST' | 'EMAIL_SEND_FAILED' | 'EMAIL_SERVICE_REQUIRED' | 'ENQUEUE_FAILED' | 'ENVIRONMENT_BIND_FAILED' | 'ENVIRONMENT_NOT_FOUND' | 'ENV_ACCESS_DENIED' | 'ERR_BULK_RESULT_MISMATCH' | 'ERR_DATASOURCE_UNAVAILABLE' | 'ERR_DRIVER_CONNECT' | 'ERR_FILE_CONSTRAINT' | 'ERR_FILE_REFERENCE_COPY' | 'ERR_SUMMARY_RECOMPUTE' | 'EXECUTION_ERROR' | 'EXPIRED_OR_REVOKED' | 'EXPIRY_IN_PAST' | 'EXPIRY_TOO_LONG' | 'EXPLAIN_FAILED' | 'EXPORT_NOT_PERMITTED' | 'EXTERNAL_DATASOURCE_ERROR' | 'EXTERNAL_IMPORT_ERROR' | 'EXTERNAL_SCHEMA_MISMATCH' | 'EXTERNAL_SCHEMA_MODE_VIOLATION' | 'EXTERNAL_WRITE_FORBIDDEN' | 'FEEDS_DISABLED' | 'FILES_DISABLED' | 'FILE_DOWNLOAD_DENIED' | 'FILE_NOT_FOUND' | 'FILTER_TOKEN_UNKNOWN' | 'FILTER_TOKEN_UNRESOLVED' | 'FORBIDDEN' | 'FORM_NOT_FOUND' | 'FORM_RESOLVE_FAILED' | 'IMPORT_JOB_CREATE_FAILED' | 'IMPORT_ROW_FAILED' | 'INTERNAL' | 'INVALID_EMAIL' | 'INVALID_EXPIRY' | 'INVALID_METADATA' | 'INVALID_OR_EXPIRED' | 'INVALID_PHONE' | 'INVALID_REQUEST' | 'INVALID_RESUME_TOKEN' | 'INVALID_SIGNAL' | 'INVALID_SIGNATURE' | 'INVALID_STATE' | 'INVITE_EMAIL_FAILED' | 'INVITE_REQUIRES_EMAIL' | 'INVITE_SMS_FAILED' | 'IP_NOT_ALLOWED' | 'ITEM_LOCKED' | 'LAST_LOCAL_CREDENTIAL' | 'LOOKUP_NOT_PUBLIC' | 'LOOKUP_TARGET_MISSING' | 'MANIFEST_CONFLICT' | 'MAPPING_FORMAT_MISMATCH' | 'MAPPING_FORMAT_UNSUPPORTED' | 'MAPPING_NOT_FOUND' | 'MAPPING_TARGET_MISMATCH' | 'MARKETPLACE_PROXY_FAILED' | 'MARKETPLACE_STORAGE_FAILED' | 'MARKETPLACE_UNAVAILABLE' | 'METADATA_BRANCH' | 'METADATA_CONFLICT' | 'METADATA_NOT_FOUND' | 'METADATA_SCHEMA_INVALID' | 'MONGODB_MULTI_TENANT_UNSUPPORTED' | 'NAMESPACE_PREFIX' | 'NEEDS_PASSWORD' | 'NODE_FAILURE' | 'NOTHING_TO_PURGE' | 'NOT_CREATABLE' | 'NOT_FOUND' | 'NOT_OVERRIDABLE' | 'NOT_UNDOABLE' | 'NO_DRAFT' | 'NO_EXECUTOR' | 'NO_IDENTITY' | 'NO_MATCH' | 'NO_PENDING_VERIFICATION' | 'OAUTH_REGISTER_FAILED' | 'OBJECT_API_DISABLED' | 'OBJECT_API_METHOD_NOT_ALLOWED' | 'OPENAPI_UNAVAILABLE' | 'OS_PROTOCOL_INCOMPATIBLE' | 'OVERLAY_PERSISTENCE_FAILED' | 'PACKAGE_DELETE_FAILED' | 'PACKAGE_DELETE_PARTIAL' | 'PACKAGE_MANIFEST_INVALID' | 'PACKAGE_PUBLISH_FAILED' | 'PASSWORD_ALREADY_SET' | 'PASSWORD_EXPIRED' | 'PASSWORD_POLICY_VIOLATION' | 'PASSWORD_REUSE' | 'PAYLOAD_TOO_LARGE' | 'PERMISSION_NOT_ALLOWED' | 'PHONE_NOT_ENABLED' | 'PLUGIN_INSTALL_FAILED' | 'PLUGIN_MANIFEST_INVALID' | 'PLUGIN_REGISTER_FAILED' | 'PROJECT_MEMBERSHIP_REQUIRED' | 'PROJECT_NOT_FOUND' | 'PROJECT_PROVISIONING' | 'PROJECT_PROVISIONING_FAILED' | 'RAW_SQL_UNSUPPORTED' | 'RECORD_GONE' | 'RECORD_LOCKED' | 'REPORTS_LIST_FAILED' | 'REPORT_DELETE_FAILED' | 'REPORT_GET_FAILED' | 'REPORT_NOT_FOUND' | 'REPORT_RUN_FAILED' | 'REPORT_SAVE_FAILED' | 'REPORT_SCHEDULE_FAILED' | 'REQUEST_NOT_FOUND' | 'RESEED_NO_ROWS' | 'RESEED_SKIPPED' | 'ROUTE_NOT_FOUND' | 'RULE_DEFINE_FAILED' | 'RULE_DELETE_FAILED' | 'RULE_EVALUATE_FAILED' | 'RULE_GET_FAILED' | 'RULE_LIST_FAILED' | 'RULE_NOT_FOUND' | 'SAML_REGISTER_FAILED' | 'SCHEDULES_LIST_FAILED' | 'SCHEDULE_DELETE_FAILED' | 'SETTINGS_ACTION_FAILED' | 'SETTINGS_FORBIDDEN' | 'SETTINGS_LOCKED' | 'SETTINGS_UNKNOWN_KEY' | 'SETTINGS_UNKNOWN_NAMESPACE' | 'SETTINGS_VALIDATION' | 'SHARES_LIST_FAILED' | 'SHARE_GRANT_FAILED' | 'SHARE_REVOKE_FAILED' | 'SHARING_NOT_ENABLED' | 'SIGN_IN_REQUIRED' | 'SSO_REGISTER_FAILED' | 'SSO_REGISTER_FORBIDDEN' | 'SUGGESTION_CONFIRM_FAILED' | 'SUGGESTION_DISMISS_FAILED' | 'SUGGESTION_LIST_FAILED' | 'SUGGESTION_NOT_FOUND' | 'SUGGESTION_STATE' | 'SUMMARY_RECOMPUTE_FAILED' | 'UNAUTHORIZED' | 'UNIQUE_VIOLATION' | 'UNKNOWN_KEY' | 'UNKNOWN_NAMESPACE' | 'UNSUPPORTED' | 'UNSUPPORTED_QUERY_PARAM' | 'UNSUPPORTED_TRANSFORM' | 'UPLOAD_SESSION_NOT_FOUND' | 'USER_ALREADY_EXISTS' | 'VALIDATION_FAILED' | 'VERSION_NOT_FOUND' | 'VERSION_NOT_RESTORABLE' | 'WRITABLE_PACKAGE_REQUIRED' | 'WRONG_PASSWORD'>; message: string; category?: string; httpStatus?: integer; … }[]; data?: Record<string, any>; … }[] |
✅ | Detailed results for each record |
| Property | Type | Required | Description |
|---|---|---|---|
| preferences | { email?: boolean; push?: boolean; inApp?: boolean; digest?: Enum<'none' | 'daily' | 'weekly'>; … } |
✅ | Preferences to update |
| Property | Type | Required | Description |
|---|---|---|---|
| preferences | { email: boolean; push: boolean; inApp: boolean; digest: Enum<'none' | 'daily' | 'weekly'>; … } |
✅ | Updated notification preferences |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name (snake_case) |
| viewId | string |
✅ | View identifier |
| data | { list?: object; form?: object; listViews?: Record<string, { name?: string; label?: string; type?: Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>; data?: { provider: 'object'; object: string } | { provider: 'api'; read?: object; write?: object } | { provider: 'value'; items: any[] } | { provider: 'schema'; schemaId: string; schema?: Record<string, any> }; … }>; formViews?: Record<string, { type?: Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'>; layout?: Enum<'vertical' | 'horizontal' | 'inline' | 'grid'>; columns?: integer; title?: string; … }>; … } |
✅ | Partial view data to update |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| viewId | string |
✅ | Updated view identifier |
| view | { list?: object; form?: object; listViews?: Record<string, { name?: string; label?: string; type?: Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>; data?: { provider: 'object'; object: string } | { provider: 'api'; read?: object; write?: object } | { provider: 'value'; items: any[] } | { provider: 'schema'; schemaId: string; schema?: Record<string, any> }; … }>; formViews?: Record<string, { type?: Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'>; layout?: Enum<'vertical' | 'horizontal' | 'inline' | 'grid'>; columns?: integer; title?: string; … }>; … } |
✅ | Updated view definition |
| Property | Type | Required | Description |
|---|---|---|---|
| currentState | string |
✅ | Current workflow state name |
| availableTransitions | { name: string; targetState: string; label?: string; requiresApproval: boolean }[] |
✅ | Available transitions from current state |
| history | { fromState: string; toState: string; action: string; userId: string; … }[] |
optional | State transition history |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| recordId | string |
✅ | Record ID |
| transition | string |
✅ | Transition name to execute |
| comment | string |
optional | Optional comment for the transition |
| data | Record<string, any> |
optional | Additional data for the transition |
| Property | Type | Required | Description |
|---|---|---|---|
| object | string |
✅ | Object name |
| recordId | string |
✅ | Record ID |
| success | boolean |
✅ | Whether the transition succeeded |
| state | { currentState: string; availableTransitions: { name: string; targetState: string; label?: string; requiresApproval: boolean }[]; history?: { fromState: string; toState: string; action: string; userId: string; … }[] } |
✅ | New workflow state after transition |