MQUAD Platform - Unified API Documentation
v2.0.0Contact: support@mquad.example.com
http://localhost:8000Backendhttp://localhost:8001Survey Servicehttp://localhost:8002Data Servicehttp://localhost:8003Sync Servicehttp://localhost:8004Analytics Servicehttp://localhost:8006Workspace Servicehttp://localhost:8007Webhook Servicehttp://localhost:8009ODK Bridgehttp://localhost:8010Form Servicehttp://localhost:8011Media Servicehttp://localhost:8012Notification Servicehttp://localhost:8013Audit Servicehttp://localhost:8014Feature Flags Servicehttp://localhost:6380Quota ServiceComplete API reference for all MQUAD microservices, consolidated from each service's live OpenAPI specification.
Every endpoint is tagged <Service> / <Topic> so the sidebar is grouped by service and then by functional area. Use the server selector on each endpoint to target the correct local service (all services run on localhost; see the Servers list). Microservice-to-microservice calls additionally require the X-Tenant-ID header.
Regenerate with: python3 scripts/merge_openapi_specs.py
Authentication
OAuth2PasswordBeareroauth2- Token URL
api/v1/account/login
JWThttpJWT Token Authentication
Scheme: bearer
HTTPBearerhttpScheme: bearer
Backend
Main orchestrator: authentication, users, roles, tenants, billing, app configuration
Backend / Health
Health — Backend
Backend / System Metrics
System Metrics — Backend
Get System Metrics
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Backend / Tenants
Tenants — Backend
List Tenants
Parameters
skipinteger0querylimitinteger10querysearchstring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create Tenant
Body
namestringrequiredsubdomainstringrequiredadmin_emailstring<email>requiredadmin_passwordstringrequiredfirst_namestringrequiredlast_namestring | nullResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Delete Tenant
Parameters
idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Search By Name
Parameters
namestringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Search By Subdomain
Parameters
subdomainstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Check Subdomain Availability
Parameters
subdomainstringrequiredpathResponse
Successful Response
Validation Error
Get Reserved Subdomains
Get list of reserved subdomains that cannot be used for tenant creation.
Response
Successful Response
Update Tenant Dns Record
When bringing your own domain you must map the DNS records for your custom domain to point to our main domain. You can do this by adding a CNAME record in your domain's DNS settings. Here is an example of how to set it up: Type: CNAME Name: app Value: mquad.local
Body
is_activeboolean | nullis_dormantboolean | nullcustom_domainstring | nullsubscription_idstring | nullplan_tierstring | nullcustom_domain_statusstring | nullbilling_individual_namestring | nullbilling_business_namestring | nullbilling_address_line1string | nullbilling_address_line2string | nullbilling_address_citystring | nullbilling_address_statestring | nullbilling_address_postal_codestring | nullbilling_address_countrystring | nulltax_idstring | nullParameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Check Dns Status
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Dns Details
Get detailed DNS information for a tenant.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Tenant
Body
is_activeboolean | nullis_dormantboolean | nullcustom_domainstring | nullsubscription_idstring | nullplan_tierstring | nullcustom_domain_statusstring | nullbilling_individual_namestring | nullbilling_business_namestring | nullbilling_address_line1string | nullbilling_address_line2string | nullbilling_address_citystring | nullbilling_address_statestring | nullbilling_address_postal_codestring | nullbilling_address_countrystring | nulltax_idstring | nullParameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Tenant Features
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Tenant Feature
Body
enabledbooleanrequiredParameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Activate Trial Plan
Activate a trial subscription by creating a real Stripe subscription.
Body
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Tenant Billing Address
Update tenant billing address and optionally tax ID.
Body
tax_idstring | nullParameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Tenant Plan Tier
Get the plan tier for a tenant.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Get Tenant Plan Context
Return tenant billing state used by feature-flags-service plan resolution.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Enterprise Signup
Submit an enterprise plan inquiry. Sends the inquiry to the sales team via notification-service using the enterprise_signup template. Uses tenant admin's name and tenant name as defaults.
Body
namestring | nullemailstring<email>requiredcompanystring | nullphonestring | nullmessagestring | nulltenant_idstring | nullParameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Cancel Tenant Subscription
Host admin endpoint to cancel a tenant's Stripe subscription. Downgrades the tenant to Free plan and clears dormant state.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Features
Features — Backend
List Features
List all available features. Requires HOST_MANAGE_TENANTS permission.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Backend / App Configuration
App Configuration — Backend
Get App Configuration
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Backend / Account
Account — Backend
Login New
New login endpoint - authenticate and return user info with tenant list. Does not require tenant selection. User selects tenant in separate step.
Body
grant_typestring | nullusernamestringrequiredpasswordstring<password>requiredscopestringclient_idstring | nullclient_secretstring | null<password>Response
Successful Response
Validation Error
Login Super Admin
Super admin login endpoint - authenticate and return tokens directly. Super admins have system-wide access without tenant selection.
Body
grant_typestring | nullusernamestringrequiredpasswordstring<password>requiredscopestringclient_idstring | nullclient_secretstring | null<password>Response
Successful Response
Validation Error
Login Host Admin
Host admin login endpoint - for users without a specific tenant (host-level access). Returns tokens for users who have access to the host system but no tenant.
Body
grant_typestring | nullusernamestringrequiredpasswordstring<password>requiredscopestringclient_idstring | nullclient_secretstring | null<password>Response
Successful Response
Validation Error
Select Tenant
After login, select a tenant and get access tokens. Super admins skip tenant selection.
Body
Request to select a tenant and get tokens
tenant_idstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Switch Tenant
Switch the user's active tenant mid-session. Requires a valid session token (not a pre-auth token). Issues entirely new access + refresh tokens scoped to the target tenant. The previous tenant_id comes from the current JWT's tenant_id claim.
Body
Request to switch active tenant
tenant_idstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Login
Body
grant_typestring | nullusernamestringrequiredpasswordstring<password>requiredscopestringclient_idstring | nullclient_secretstring | null<password>Response
Successful Response
Validation Error
Refresh Token
Parameters
refresh_tokenstring | nullcookieResponse
Successful Response
Validation Error
Logout
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Logout
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Register
Body
first_namestringrequiredlast_namestring | nullemailstring<email>requiredgenderBackend_Gender | nullprefer_not_to_saytenant_idstring | nullrole_idstring | nullpasswordstringrequiredsub_domainstring | nullagreed_to_termsbooleantrueResponse
Successful Response
Validation Error
Read Users Me
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Password Reset Request
Body
emailstring<email>requiredResponse
Successful Response
Validation Error
Password Reset Confirm
Body
new_passwordstringrequiredParameters
tokenstringrequiredqueryThe password reset token
user_idstringrequiredqueryThe user ID associated with the token
tenant_idstring | nullqueryThe tenant ID associated with the user, if applicable
Response
Successful Response
Validation Error
Resend Activation Email
Body
emailstring<email>requiredidstringrequiredfirst_namestringrequiredtenant_idstring | nullResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Resend Activation Email Public
Public resend of the account activation email, used by the account activation gate page for users whose accounts are inactive. Sending is refused for already-active accounts (InvalidOperationException).
Body
emailstring<email>requiredidstringrequiredfirst_namestringrequiredtenant_idstring | nullResponse
Successful Response
Validation Error
Activate Account
Body
tokenstringrequiredParameters
tenant_idstring | nullqueryThe tenant ID associated with the user, if applicable
Response
Successful Response
Validation Error
Change Email
Body
new_emailstring<email>requiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Change Email Confirmation
Body
tokenstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Passkey Register Options
Body
Response
Successful Response
Validation Error
Passkey Register
Body
emailstring<email>requiredcredentialobjectrequiredResponse
Successful Response
Validation Error
Passkey Login Options
Body
Response
Successful Response
Validation Error
Passkey Login
Body
emailstring<email>requiredcredentialobjectrequiredResponse
Successful Response
Validation Error
Has Passkeys
Body
Response
Successful Response
Validation Error
Email Magic Link Login
Body
Response
Successful Response
Validation Error
Email Magic Link Validate
Parameters
tokenstringrequiredqueryThe magic link token
user_idstringrequiredqueryThe user ID associated with the token
tenant_idstring | nullqueryThe tenant ID associated with the user, if applicable
Response
Successful Response
Validation Error
Backend / Manage Security
Manage Security — Backend
Get Registered Passkeys
Endpoint to retrieve registered passkeys for the current user.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Delete Registered Passkey
Endpoint to delete a registered passkey for the current user.
Parameters
credential_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Dashboard
Dashboard — Backend
Get Dashboard Metrics
Parameters
filterstringtodaythis_weeklast_3_monthsallallqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Superadmin
Superadmin — Backend
Get Superadmin Dashboard
Get superadmin dashboard with platform-wide metrics.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Backend / Users
Users — Backend
List Users
Parameters
skipinteger0querylimitinteger10querysearchstring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create User
Body
first_namestringrequiredlast_namestring | nullemailstring<email>requiredgenderBackend_Gender | nullprefer_not_to_saytenant_idstring | nullrole_idstring | nullpasswordstringrequiredsub_domainstring | nullagreed_to_termsbooleantrueResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Search User By Email
Search for a user by their email address within the current tenant context. Returns user details if found, useful for workspace member invitations.
Parameters
emailstringrequiredqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Search Users With Roles
Search users with role filtering.
Useful for form access management where you need to find Field Supervisors or Enumerators in the same tenant.
SECURITY: Form Builders and Field Supervisors can only search Field Supervisors and Enumerators. Admins and Survey Managers can search all users.
- role_ids: Comma-separated list of role UUIDs (e.g., "uuid1,uuid2")
- search: Search by first_name, last_name, email, or user_code
Parameters
skipinteger>= 00querylimitinteger[1, 100]20queryrole_idsstring | nullqueryComma-separated list of role IDs to filter by
searchstring | nullquerySearch by name, email, or user_code
Response
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Users Bulk
Fetch multiple users by their IDs in bulk, scoped to the current tenant. Prevents cross-tenant user enumeration.
Body
user_idsArray<string>requiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Provision User
Provision a user to the current tenant.
CASE A — New user: Creates the user and adds them to the tenant with the selected role. CASE B — Existing user: Adds the existing user to the tenant with the selected role. CASE C — Already a member: Returns a friendly message without creating duplicates.
Role selection is mandatory in all cases.
Body
DTO for provisioning a user to a tenant (create or invite)
emailstring<email>requiredrole_idstringrequiredpasswordstring | nullfirst_namestring | nulllast_namestring | nullgenderBackend_Gender | nullResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Available Roles
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Count Users
Count users in the current tenant, optionally filtered by account active status and/or role name (e.g. "Enumerator"). Super admins count across all tenants when no role filter is applied.
Parameters
is_activeboolean | nullqueryrole_namestring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get User
Get a single user by ID, scoped to the current tenant. Non-super-admin users can only retrieve users belonging to their active tenant.
Parameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update User
Body
first_namestring | nulllast_namestring | nullemailstring | nullgenderBackend_Gender | nullimage_urlstring | nullrole_idstring | nullis_activeboolean | nullactivated_atstring | nulltenant_idstring | nullpasswordstring | nullParameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Delete User
Parameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Profile Image
Parameters
image_keystringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update User Tenant Access
Activate or deactivate a user's membership in the active tenant.
Per-tenant activation: deactivating a membership in one tenant does NOT affect the user's access or login ability in other tenants, nor does it disable the global account (users.is_active). The active tenant is resolved from the X-Tenant-ID header, falling back to the actor's primary tenant.
Body
DTO for updating a user's per-tenant access (activate/deactivate in the active tenant)
is_activebooleanrequiredParameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Profile Picture
Body
filestring<binary>requiredParameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Delete Profile Picture
Parameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Patch User
Body
role_idstringrequiredParameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Remove User Role
Body
role_idstringrequiredParameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / User Tenants
User Tenants — Backend
Get My Tenants
Get all tenants for the currently authenticated user. This endpoint is accessible to all authenticated users.
Parameters
skipinteger0querylimitinteger100queryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get User Tenants
Get all tenants for a user. Users can view their own tenants. Platform admins can view any user's tenants. Tenant admins can only view memberships for their own authorized tenant(s).
Parameters
user_idstringrequiredpathskipinteger0querylimitinteger100queryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Add User To Tenant
Add a user to a tenant. Only users with USER_READ_AND_WRITE_ONLY permission can add users to tenants.
Body
DTO for creating user-tenant relationship
user_idstringrequiredtenant_idstringrequiredrole_idstring | nullis_primarybooleanfalseis_activebooleantrueParameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update User Tenant
Update a user-tenant relationship (change role or primary status). Only users with USER_READ_AND_WRITE_ONLY permission can update.
Body
DTO for updating user-tenant relationship
role_idstring | nullis_primaryboolean | nullis_activeboolean | nullParameters
user_idstringrequiredpathuser_tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Remove User From Tenant
Remove a user from a tenant. Only users with USER_DELETE_ONLY permission can remove users from tenants.
Parameters
user_idstringrequiredpathuser_tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Set Primary Tenant
Set a tenant as the primary tenant for a user. Users can set their own primary tenant. Admins can set for any user.
Body
DTO for setting primary tenant
tenant_idstringrequiredParameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Primary Tenant
Get the primary tenant for a user. Users can view their own primary tenant. Admins can view for any user.
Parameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Switch Primary Tenant
Switch the primary tenant for the currently authenticated user. The user must already be a member of the tenant.
Body
DTO for setting primary tenant
tenant_idstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Bulk Upload Users
Bulk upload users to a tenant from CSV or Excel file.
Expected CSV/Excel columns:
- email (required)
- first_name or firstName (required)
- last_name or lastName (optional)
- gender (optional: male, female, other, prefer_not_to_say)
- role_name or roleName (optional: e.g., 'Admin', 'User', 'Manager')
For existing users: They will be added to the tenant. For new users: They will be created and added to the tenant.
Note: Use role_name instead of role_id for easier file preparation. Get available role names from GET /api/v1/users/available-roles endpoint.
Body
tenant_idstringrequiredTenant ID to add users to
default_role_idstring | nullDefault role ID for new users
default_role_namestring | nullDefault role name for new users (e.g., 'Admin', 'User')
send_invitationbooleantrueWhether to send invitation emails
filestring<binary>requiredCSV or Excel file with user data
Response
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Roles
Roles — Backend
List Roles
Parameters
skipinteger>= 00querylimitinteger[1, 100]20querysearchstring | nullquerySearch by role name
Response
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create Role
Body
namestringrequireddescriptionstring | nulltenant_idstring | nullpermissionsArray<Backend_Permission>super:adminfull:accessuser:read_and_write_onlyuser:delete_onlyuser:self_read_and_write_onlyuser:role_assign_or_remove_onlyuser:view_onlyrole:view_onlyrole:read_and_write_onlyrole:delete_onlyrole:permission_read_and_write_onlyhost:manage_tenantsmanage:storage_settingsmanage:tenant_settingsmanage:billingmanage:payments_settingsmanage:products_and_pricingaudit_logs:view_onlyaudit_logs:downloadaudit_logs:writecompliance:manageforms:renderforms:previewforms:render_anonymousforms:submitforms:submit_anonymousforms:submit_offlineforms:draft_createforms:draft_readforms:draft_updateforms:draft_deleteforms:draft_read_allforms:session_createforms:session_readforms:session_deleteforms:session_read_allforms:config_readforms:config_writeforms:analytics_viewforms:analytics_exportforms:admindashboard:viewdashboard:readdashboard:createdashboard:updatedashboard:deletebilling:readconfig:readconfig:writesurvey:managesurvey:createsurvey:readsurvey:updatesurvey:deletesurvey:publishsurvey:unpublishsurvey:grant_accesssurvey:manage_accesssurvey:response_viewsurvey:response_downloadtemplate:readtemplate:createtemplate:updatetemplate:deletetemplate:managesubmission:createsubmission:readsubmission:updatesubmission:update_ownsubmission:deletesubmission:viewsubmission:exportsubmission:approvesubmission:assignworkspace:createworkspace:readworkspace:updateworkspace:deleteworkspace:manageworkspace:manage_membersproject:createproject:readproject:updateproject:deleteproject:manageanalytics:viewanalytics:exportanalytics:adminreport:viewreport:createexport:createexport:viewexport:downloadexport:cancelexport:template:createexport:template:viewwebhook:createwebhook:readwebhook:updatewebhook:deletewebhook:managesearch:executesearch:managenotification:sendnotification:viewnotification:read_allnotification:deletenotification:managenotification:template:viewnotification:template:createnotification:template:updatenotification:template:deletenotification:preferences:readnotification:preferences:writemedia:uploadmedia:readmedia:updatemedia:deletemedia:library_uploadmedia:library_readmedia:library_deletemedia:managefeature_flag:readfeature_flag:createfeature_flag:updatefeature_flag:deletefeature_flag:toggleresponse:createresponse:readresponse:updateresponse:deleteresponse:exportresponse:approveresponse:revise_ownattachment:createattachment:readattachment:deleteodk:viewodk:submitodk:manageis_immutablebooleanfalseResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Search Role By Name
Parameters
namestringrequiredqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Role Permissions
Update role permissions only (for inline editing in Role Details).
Body
permissionsArray<Backend_Permission>super:adminfull:accessuser:read_and_write_onlyuser:delete_onlyuser:self_read_and_write_onlyuser:role_assign_or_remove_onlyuser:view_onlyrole:view_onlyrole:read_and_write_onlyrole:delete_onlyrole:permission_read_and_write_onlyhost:manage_tenantsmanage:storage_settingsmanage:tenant_settingsmanage:billingmanage:payments_settingsmanage:products_and_pricingaudit_logs:view_onlyaudit_logs:downloadaudit_logs:writecompliance:manageforms:renderforms:previewforms:render_anonymousforms:submitforms:submit_anonymousforms:submit_offlineforms:draft_createforms:draft_readforms:draft_updateforms:draft_deleteforms:draft_read_allforms:session_createforms:session_readforms:session_deleteforms:session_read_allforms:config_readforms:config_writeforms:analytics_viewforms:analytics_exportforms:admindashboard:viewdashboard:readdashboard:createdashboard:updatedashboard:deletebilling:readconfig:readconfig:writesurvey:managesurvey:createsurvey:readsurvey:updatesurvey:deletesurvey:publishsurvey:unpublishsurvey:grant_accesssurvey:manage_accesssurvey:response_viewsurvey:response_downloadtemplate:readtemplate:createtemplate:updatetemplate:deletetemplate:managesubmission:createsubmission:readsubmission:updatesubmission:update_ownsubmission:deletesubmission:viewsubmission:exportsubmission:approvesubmission:assignworkspace:createworkspace:readworkspace:updateworkspace:deleteworkspace:manageworkspace:manage_membersproject:createproject:readproject:updateproject:deleteproject:manageanalytics:viewanalytics:exportanalytics:adminreport:viewreport:createexport:createexport:viewexport:downloadexport:cancelexport:template:createexport:template:viewwebhook:createwebhook:readwebhook:updatewebhook:deletewebhook:managesearch:executesearch:managenotification:sendnotification:viewnotification:read_allnotification:deletenotification:managenotification:template:viewnotification:template:createnotification:template:updatenotification:template:deletenotification:preferences:readnotification:preferences:writemedia:uploadmedia:readmedia:updatemedia:deletemedia:library_uploadmedia:library_readmedia:library_deletemedia:managefeature_flag:readfeature_flag:createfeature_flag:updatefeature_flag:deletefeature_flag:toggleresponse:createresponse:readresponse:updateresponse:deleteresponse:exportresponse:approveresponse:revise_ownattachment:createattachment:readattachment:deleteodk:viewodk:submitodk:manageParameters
role_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Role
Parameters
role_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Role
Body
namestringrequireddescriptionstring | nulltenant_idstring | nullpermissionsArray<Backend_Permission>super:adminfull:accessuser:read_and_write_onlyuser:delete_onlyuser:self_read_and_write_onlyuser:role_assign_or_remove_onlyuser:view_onlyrole:view_onlyrole:read_and_write_onlyrole:delete_onlyrole:permission_read_and_write_onlyhost:manage_tenantsmanage:storage_settingsmanage:tenant_settingsmanage:billingmanage:payments_settingsmanage:products_and_pricingaudit_logs:view_onlyaudit_logs:downloadaudit_logs:writecompliance:manageforms:renderforms:previewforms:render_anonymousforms:submitforms:submit_anonymousforms:submit_offlineforms:draft_createforms:draft_readforms:draft_updateforms:draft_deleteforms:draft_read_allforms:session_createforms:session_readforms:session_deleteforms:session_read_allforms:config_readforms:config_writeforms:analytics_viewforms:analytics_exportforms:admindashboard:viewdashboard:readdashboard:createdashboard:updatedashboard:deletebilling:readconfig:readconfig:writesurvey:managesurvey:createsurvey:readsurvey:updatesurvey:deletesurvey:publishsurvey:unpublishsurvey:grant_accesssurvey:manage_accesssurvey:response_viewsurvey:response_downloadtemplate:readtemplate:createtemplate:updatetemplate:deletetemplate:managesubmission:createsubmission:readsubmission:updatesubmission:update_ownsubmission:deletesubmission:viewsubmission:exportsubmission:approvesubmission:assignworkspace:createworkspace:readworkspace:updateworkspace:deleteworkspace:manageworkspace:manage_membersproject:createproject:readproject:updateproject:deleteproject:manageanalytics:viewanalytics:exportanalytics:adminreport:viewreport:createexport:createexport:viewexport:downloadexport:cancelexport:template:createexport:template:viewwebhook:createwebhook:readwebhook:updatewebhook:deletewebhook:managesearch:executesearch:managenotification:sendnotification:viewnotification:read_allnotification:deletenotification:managenotification:template:viewnotification:template:createnotification:template:updatenotification:template:deletenotification:preferences:readnotification:preferences:writemedia:uploadmedia:readmedia:updatemedia:deletemedia:library_uploadmedia:library_readmedia:library_deletemedia:managefeature_flag:readfeature_flag:createfeature_flag:updatefeature_flag:deletefeature_flag:toggleresponse:createresponse:readresponse:updateresponse:deleteresponse:exportresponse:approveresponse:revise_ownattachment:createattachment:readattachment:deleteodk:viewodk:submitodk:manageis_immutablebooleanfalseParameters
role_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Delete Role
Deletes a role if it is not assigned to any users.
Parameters
role_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Sync Admin Permissions
Sync ADMIN role permissions with the latest from seeder_utils. Use this after adding new permissions.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Sync User Permissions
Sync USER role permissions with the latest from seeder_utils. Use this after adding new permissions.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Get Grouped Permissions
Get permissions grouped by category for enterprise permission management UI
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Get Role Stats
Get role statistics including assigned users count
Parameters
role_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Role Users
List users assigned to a role (checks both users.role_id and user_tenants.role_id).
Parameters
role_idstringrequiredpathskipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Permissions
Permissions — Backend
Get Permissions
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Backend / Stripe - Products
Stripe - Products — Backend
List Products
Parameters
activeboolean | nullqueryFilter active products. None returns all.
Response
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create a Product
Body
namestringrequireddescriptionstring | nulltax_codestring | nullactivebooleantrueResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get Product by ID
Parameters
product_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Delete a Product
Parameters
product_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update a Product
Body
namestringrequireddescriptionstring | nulltax_codestring | nullactivebooleantrueParameters
product_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Stripe - Pricing
Stripe - Pricing — Backend
Get Pricing List
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Create Pricing
Body
currencystringusdCurrency code, e.g., 'usd'
unit_amountintegerrequiredA positive integer in cents (or 0 for a free price) representing how much to charge. One of unit_amount, unit_amount_decimal, or custom_unit_amount is required, unless billing_scheme=tiered.
productstringrequiredThe ID of the product this price is associated with
activebooleantrueWhether the price is active or not
Response
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Pricing
Body
activebooleanrequiredmetadataobject | nulltax_behaviorstring | nullParameters
price_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Stripe - Billing
Stripe - Billing — Backend
Get billing configuration
Returns the Stripe publishable key to the frontend.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2List available plans
Parameters
skipinteger0querylimitinteger10querysearchstring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create a new plan
Body
currencystringusdMust be a supported currency: https://docs.stripe.com/currencies
intervalstringmonthyearrequiredproduct_idstringrequiredThe product whose pricing the created plan will represent. This must be the ID of an existing product.
amountintegerrequiredtrial_period_daysinteger | nullNumber of days for the trial period. Set > 0 to enable trials.
Response
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get a plan details
Parameters
plan_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Delete existing plan
Parameters
plan_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update a existing plan
Body
trial_period_daysintegerrequiredactivebooleantruemetadataobject | nullParameters
plan_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create a Stripe SetupIntent for adding a payment method inline
Returns a Stripe SetupIntent client_secret. The frontend uses this with
Stripe.js confirmCardSetup() to save a card without charging it.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2List saved payment methods for the current tenant
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Remove a saved payment method
Parameters
payment_method_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Set a payment method as the default for the tenant
Parameters
payment_method_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Sync tenant subscription with Stripe
Sync tenant subscription with Stripe.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Create native subscription intent (compatibility endpoint)
Create native subscription for tenant using Stripe Elements.
Body
price_idstringrequiredtenant_idstringrequiredmodestringsubscriptionpaymentsubscriptionemailstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create native subscription intent with Stripe Elements
Create native subscription for tenant using Stripe Elements.
Body
price_idstringrequiredtenant_idstringrequiredmodestringsubscriptionpaymentsubscriptionemailstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Confirm native subscription (compatibility endpoint)
Confirm native subscription: update billing record and sync tenant subscription with Stripe.
Body
billing_record_idstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Confirm native subscription and sync tenant data
Confirm native subscription: update billing record and sync tenant subscription with Stripe.
Body
billing_record_idstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create payment intent for incomplete subscription
Create a payment intent for an incomplete subscription so the user can complete payment.
Body
subscription_idstringrequiredtenant_idstringrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get current tenant subscription status
Returns the current tenant's subscription status including dormant state.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Downgrade dormant tenant to Free plan
Downgrade a dormant/expired tenant to the Free plan. Cancels Stripe subscription but preserves all tenant data.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Backend / Webhooks - Stripe
Webhooks - Stripe — Backend
Stripe Webhook
Response
Successful Response
Backend / Stripe - Invoices
Stripe - Invoices — Backend
List invoices
Parameters
skipinteger0querylimitinteger10querysearchstring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2List subscription history
Parameters
skipinteger0querylimitinteger10querysearchstring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2List tenant invoices
List invoices for the current tenant only, filtered by date range and status.
Parameters
start_datestringqueryend_datestringquerystatusstringqueryskipinteger0querylimitinteger20querysearchstring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Export tenant invoices as CSV
Export all tenant invoices as CSV for tax filing purposes.
Parameters
start_datestringqueryend_datestringquerystatusstringqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Stripe - Checkout
Stripe - Checkout — Backend
Create Host Checkout Session
Body
price_idstringrequiredtenant_idstring | nullmodestringpaymentsubscriptionsetupsubscriptionemailstring<email>requiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create Tenant Subscription Checkout
Create a Stripe checkout session for tenant subscription. Uses host-level Stripe settings (NOT tenant-specific). Host charges tenants for their subscriptions.
Body
price_idstringrequiredtenant_idstring | nullmodestringpaymentsubscriptionsetupsubscriptionemailstring<email>requiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Host Checkout Success
Parameters
session_idstringrequiredquerytenant_idstringrequiredqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Host Checkout Canceled
Parameters
tenant_idstringrequiredqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Tenant Checkout Success
Handle successful tenant subscription checkout. Uses host-level Stripe settings.
Parameters
session_idstringrequiredqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Tenant Checkout Canceled
Handle cancelled tenant subscription checkout.
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2List Checkout Records
Parameters
skipinteger0querylimitinteger100querysearchstring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Notifications
Notifications — Backend
Backend / Audit Logs
Audit Logs — Backend
Download Audit Logs
Body
actionstring | nulltotal_recordsintegerrequiredResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Get User Activity Logs
Parameters
user_idstringrequiredpathlimitinteger10queryskipinteger0queryactionstring | nullquerycategorystring | nullquerysearchstring | nullquerydate_fromstring | nullquerydate_tostring | nullqueryResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Frontend Logs
Frontend Logs — Backend
Create Frontend Log
Receive frontend log entry and write to frontend/logs directory.
This endpoint accepts logs from the frontend and stores them in:
- frontend/logs/frontend-all.log (all logs)
- frontend/logs/frontend-errors.log (ERROR and FATAL only)
Logs are stored in JSON Lines format (one JSON object per line).
Body
Frontend log entry model
timestampstringrequiredlevelstringrequiredmessagestringrequiredcontextobject | nullstackstring | nulluserAgentstring | nullurlstring | nulluserIdstring | nulltenantIdstring | nullResponse
Successful Response
Validation Error
Health Check
Health check for frontend logging endpoint
Response
Successful Response
Backend / Frontend Audit
Frontend Audit — Backend
Ingest Audit Event
Relay a client-originated audit event to the centralized audit-service.
The browser cannot call the audit-service's internal-only ingest endpoint (service_only=True). This endpoint accepts authenticated user events and forwards them with the backend's service token, pinning the actor to the authenticated user so clients cannot forge audit entries.
Body
Client-originated audit event relayed to the centralized audit-service.
Mirrors the schema the browser sends via the generated AuditLogsService (createAuditLog). Unknown fields are preserved (extra="allow") so the relay forwards the payload faithfully to the audit-service, which owns validation.
event_idstring | nullevent_typestring | nulllog_schema_versionstring | null1.0service_namestringfrontendactionstringrequiredactor_typestring | nullactor_idstring | nullactor_emailstring | nulltenant_idstring | nullresource_typestring | nullresource_idstring | nullstatusstring | nullsuccessip_addressstring | nulluser_agentstring | nullrequest_idstring | nulltrace_idstring | nullparent_trace_idstring | nullhttp_methodstring | nullhttp_pathstring | nullhttp_statusinteger | nullduration_msinteger | nullmetadataobject | nullevent_idempotency_keystring | nulldata_classificationstring | nullResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Mobile Security Policies (DEPRECATED)
Mobile Security Policies (DEPRECATED) — Backend
Get Deprecated Mobile Security Policy
deprecatedDEPRECATED: Use GET /tenant-governance/{tenant_id} + GET /runtime-security-config/ instead.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Deprecated Mobile Security Policy
deprecatedDEPRECATED: Use PUT /runtime-security-config/ + PUT /tenant-governance/{tenant_id} instead.
Extracts runtime-global fields and updates runtime_security_config. Extracts tenant-scoped fields and updates tenant_data_governance.
Body
Backward-compatible adapter for old mobile clients.
Maps from RuntimeSecurityConfig + TenantDataGovernance into the old monolithic MobileSecurityPolicyDto format. This is TEMPORARY — remove after migration window.
DEPRECATED: Use RuntimeSecurityConfigDto + TenantDataGovernanceDto instead.
idstring | nulltenant_idstringrequiredglobal_modestringwarningscreenshot_prevention_modestringdisabledroot_detection_modestringwarningbiometric_required_modestringdisabledsession_timeout_minutesinteger0wifi_only_syncbooleanfalsebattery_aware_syncbooleanfalsebattery_low_threshold_percentinteger20block_sync_on_roamingbooleanfalsemax_offline_duration_hoursinteger0force_revalidation_hoursinteger0media_upload_max_size_mbinteger50media_upload_allowed_typesArray<any> | nulllocal_retention_daysinteger0remote_wipe_enabledbooleanfalseParameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Runtime Security Config
Runtime Security Config — Backend
Get Runtime Security Config
Response
Successful Response
Authorization
OAuth2PasswordBeareroauth2Update Runtime Security Config
Body
screenshot_prevention_modestring | nullroot_detection_modestring | nullbiometric_required_modestring | nullsession_timeout_minutesinteger | nullwifi_only_syncboolean | nullbattery_aware_syncboolean | nullbattery_low_threshold_percentinteger | nullblock_sync_on_roamingboolean | nullbackground_sync_enabledboolean | nullcrash_reporting_enabledboolean | nulltelemetry_enabledboolean | nullglobal_modestring | nullResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / Tenant Data Governance
Tenant Data Governance — Backend
Get Tenant Governance
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Update Tenant Governance
Body
max_offline_duration_hoursinteger | nullforce_revalidation_hoursinteger | nullmedia_upload_max_size_mbinteger | nullmedia_upload_allowed_typesArray<any> | nulllocal_retention_daysinteger | nullremote_wipe_enabledboolean | nullParameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Delete Tenant Governance
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Create Tenant Governance
Body
tenant_idstringrequiredmax_offline_duration_hoursinteger>= 00force_revalidation_hoursinteger>= 00media_upload_max_size_mbinteger[1, 500]50media_upload_allowed_typesArray<any> | nulllocal_retention_daysinteger>= 00remote_wipe_enabledbooleanfalseResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Issue Remote Wipe
Body
target_user_idstring | nullreasonstring | nullParameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Backend / App Version
App Version — Backend
Get App Version
Response
Successful Response
Survey Service
Survey design, publishing, versioning, templates, question bank, languages, lookups, access
Upload XLSForm as New Survey Version
Create a new version of an existing survey by uploading an XLSForm file.
This endpoint:
- Validates the uploaded file (size, extension)
- Parses the XLSForm using XLSFormImportService
- Validates schema using existing validators
- Creates a new version using VersionService (SAME logic as JSON endpoint)
- Returns standardized response
Body
filestringrequiredParameters
survey_idstring<uuid>requiredpathResponse
Created survey version
Validation Error
Download blank form as PDF
Generate and download a blank paper form PDF for a published survey.
Parameters
survey_idstring<uuid>requiredpathprimary_languagestringenqueryPrimary language code for labels
secondary_languagestringquerySecondary language code for bilingual mode
export_modestringsinglequeryExport mode: 'single' or 'bilingual'
langstringquery(Deprecated) Use primary_language instead
versionstringqueryVersion string (optional)
orgstringqueryOrganization name (optional)
Response
PDF file bytes
Validation Error
Survey Service / Languages
Languages — Survey Service
List Languages
List all languages for the tenant.
Parameters
include_inactivebooleanfalsequeryInclude inactive languages in the response
Response
Successful Response
Validation Error
Create Language
Create a new language for the tenant.
Body
codestringrequiredLanguage code (e.g., 'en', 'hi')
namestringrequiredLanguage name (e.g., 'English', 'Hindi')
flag_emojistring | nullFlag emoji (e.g., '🇺🇸')
is_activebooleantrueWhether language is active
display_orderinteger0Display order for sorting
Response
Successful Response
Validation Error
Reorder Languages
Reorder languages by updating display_order based on array position.
Body
language_idsArray<string>requiredList of language codes in desired order
Response
Successful Response
Validation Error
Update Language
Update an existing language.
Body
codestring | nullnamestring | nullflag_emojistring | nullis_activeboolean | nulldisplay_orderinteger | nullParameters
language_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Delete Language
Hard delete a language (remove from database).
Parameters
language_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Seed Default Languages
Seed default languages for the tenant (if none exist).
Response
Successful Response
Survey Service / Lookups
Lookups — Survey Service
Resolve lookup values
Resolve dependent field values based on a trigger question and value
Body
Request model for lookup resolution.
trigger_questionstringrequiredName of the trigger question
trigger_valuestringrequiredSelected value for the trigger question
current_valuesobject | nullCurrent values of all questions (for change detection)
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Validate lookup value
Validate that a lookup value exists in the lookup data
Body
Request model for lookup validation.
trigger_questionstringrequiredName of the trigger question
trigger_valuestringrequiredValue to validate
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get lookup configuration
Get structured lookup configuration for a survey
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get all lookup values
Get all valid values for a trigger question
Parameters
survey_idstring<uuid>requiredpathtrigger_questionstringrequiredpathResponse
Successful Response
Validation Error
Get lookup statistics
Get statistics about lookup data
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get available trigger values
Get trigger values with availability status for assignment UI
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Survey Service / Question Bank
Question Bank — Survey Service
List Categories
List question bank categories. Permission: template:read or template:manage
Parameters
skipinteger>= 00querylimitinteger[1, 100]20querysearchstring | nullquerySearch categories by name or description
Response
Successful Response
Validation Error
Create Category
Create category. Permission: template:create or template:manage
Body
namestringrequireddescriptionstring | nullcolorstring | nullResponse
Successful Response
Validation Error
Update Category
Update category. Permission: template:update or template:manage
Body
namestring | nulldescriptionstring | nullcolorstring | nullParameters
category_idstringrequiredpathResponse
Successful Response
Validation Error
Delete Category
Delete category. Permission: template:delete or template:manage
Parameters
category_idstringrequiredpathResponse
Successful Response
Validation Error
List Questions
List/search reusable questions. Permission: template:create or survey:create or template:manage or survey:manage
Parameters
skipinteger>= 00querylimitinteger[1, 100]20querycategory_idstring | nullqueryFilter questions by category
question_typestring | nullqueryFilter questions by type
searchstring | nullquerySearch questions by name or label
tagsstring | nullqueryFilter questions by tags
Response
Successful Response
Validation Error
Create Question
Create a reusable question. Permission: template:create or template:manage
Body
category_idstring | nullquestion_typestringrequirednamestringrequiredlabelstringlabel_translationsobjecthintstring | nullhint_translationsobjectrequiredbooleanfalsequestion_configobjecttagsArray<string>is_publicbooleanfalseResponse
Successful Response
Validation Error
Get Question
Get question details. Permission: template:create or survey:create or template:manage or survey:manage
Parameters
question_idstringrequiredpathResponse
Successful Response
Validation Error
Update Question
Update a reusable question. Permission: template:update or template:manage
Body
category_idstring | nulllabelstring | nulllabel_translationsobject | nullhintstring | nullhint_translationsobject | nullrequiredboolean | nullquestion_configobject | nulltagsArray<string> | nullis_publicboolean | nullParameters
question_idstringrequiredpathResponse
Successful Response
Validation Error
Delete Question
Delete a reusable question. Permission: template:delete or template:manage
Parameters
question_idstringrequiredpathResponse
Successful Response
Validation Error
Import Questions
Import multiple questions from a CSV file.
Expected header: type,name,label,hint,required,tags. Valid rows are
created and invalid rows are skipped with per-row errors (partial success).
Permission: template:create or template:manage
Body
filestringrequiredcategory_idstring | nullResponse
Successful Response
Validation Error
Add Question To Survey
Add a bank question to a survey's schema. Permission: survey:create or survey:manage
Returns the full question JSON object that the frontend can directly insert into the survey schema.
Body
question_idstringrequiredsurvey_idstringrequiredResponse
Successful Response
Validation Error
Survey Service / Surveys
Surveys — Survey Service
List Surveys
List surveys for the tenant.
- Admin users (with survey:manage/survey:read) see all surveys in the tenant
- Non-admin users only see surveys they have explicit access to via form_access table
- Internal callers (sync-service) can pass filter_user_id to force form_access filtering for a specific user, regardless of caller permissions
Parameters
skipinteger>= 00querylimitinteger[1, 100]20querystatus_filterSurveyService_SurveyStatus | nullqueryproject_idstring | nullqueryFilter surveys by project
searchstring | nullquerySearch surveys by name or description
tag_idstring | nullqueryFilter surveys by tag
workspace_idstring | nullqueryFilter surveys by workspace
updated_afterstring | nullqueryOnly surveys updated after this timezone-aware instant
filter_user_idstring | nullqueryFilter by user ID (forced form_access check for internal callers like sync-service)
Response
Successful Response
Validation Error
Create Survey
Create a new survey.
Requires project_id which must be verified against workspace-service. Enforces survey.max_surveys limit via plan-enforcement-sdk.
Body
namestringrequireddescriptionstring | nullworkspace_idstring | nullproject_idstring<uuid>requiredis_anonymousbooleanfalseallow_multiple_responsesbooleanfalseschemaSurveyService_SurveySchema | nullopen_atstring | nullclose_atstring | nullscheduling_enabledbooleanfalseResponse
Successful Response
Validation Error
Get Survey
Get a specific survey by ID.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Survey
Update survey metadata (not the schema).
Body
namestring | nulldescriptionstring | nullis_anonymousboolean | nullallow_multiple_responsesboolean | nullopen_atstring | nullclose_atstring | nullscheduling_enabledboolean | nullParameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Delete Survey
Soft delete a survey (sets status to DELETED).
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Survey Status
Update survey status (DRAFT, PUBLISHED, ARCHIVED).
Body
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Duplicate Survey
Duplicate an existing survey including schema, settings, and lookups.
- Creates a new survey with copied data (schema, settings, choices, lookups)
- Resets status to DRAFT for duplicated survey
- Generates new survey_code and RID counter
- Optionally copies form access rules if copy_access_settings=True
- Does NOT copy version history (starts fresh)
Parameters
survey_idstring<uuid>requiredpathnew_namestring | nullquerycopy_access_settingsbooleanfalsequeryResponse
Successful Response
Validation Error
Update Survey Schedule
Update survey open/close schedule.
Body
open_atstring | nullclose_atstring | nullscheduling_enabledbooleantrueParameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Survey Schema
Get the survey design schema (form builder data).
Enriched with media audio URLs/asset IDs (deep copy — the stored draft schema is never mutated) so the mobile fallback sync path (GET /surveys/{id}/schema) delivers human audio the same way published versions do.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Survey Schema
Update the survey design schema (form builder data).
Body
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get lookup data for auto-population
Returns lookup data for form auto-population. Used by form-service to cache lookup data.
Parameters
survey_idstring<uuid>requiredpathversion_idstring | nullquerySpecific version ID (optional)
filter_user_idstring | nullqueryFilter lookup data for specific user's assigned triggers
Response
Successful Response
Validation Error
Import Xlsform
Import a survey from an XLSForm Excel file (.xlsx).
The XLSForm file should contain the following worksheets:
- survey (required): Question definitions with columns: type, name, label, hint, required, etc.
- choices (optional): Choice lists for select_one/select_multiple questions
- settings (optional): Form metadata (form_title, form_id, version, etc.)
- lookups (optional, custom): External lookup data for cascading selects
Reference: https://xlsform.org/en/
The imported survey will be created in DRAFT status with the parsed schema.
Body
filestringrequiredXLSForm Excel file (.xlsx)
namestringrequiredSurvey name
descriptionstring | nullSurvey description
project_idstring<uuid>requiredProject ID from workspace-service
workspace_idstring<uuid>requiredWorkspace ID for the project
is_anonymousbooleanfalseWhether responses are anonymous
allow_multiple_responsesbooleanfalseAllow multiple responses per user
scheduling_enabledbooleanfalseEnable survey scheduling (auto open/close)
open_atstring | nullScheduled open timestamp (ISO 8601)
close_atstring | nullScheduled close timestamp (ISO 8601)
Response
Successful Response
Validation Error
Download a starter XLSForm template
Download a starter .xlsx XLSForm workbook that can be filled in and re-imported via POST /surveys/import-xlsform.
Response
Successful Response
Validate a single expression
Validate a skip logic, constraint, or calculation expression against available fields.
Body
Request body for expression validation endpoint.
expressionstringrequiredThe expression to validate (XPath format with ${field_name} references)
expression_typestringrelevantType of expression being validated
available_fieldsArray<string>List of available question/field names for reference validation
Response
Successful Response
Validation Error
List Survey Media
List all media assets for a survey.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Upload Survey Media
Upload media assets (images, videos, audio) for survey questions.
The uploaded file must be a ZIP containing media files referenced
in the survey schema's media_file field.
Media files are extracted and uploaded to the tenant's media library via the media-service.
Returns list of uploaded files and any missing files referenced in schema.
Body
filestringrequiredZIP file containing media assets
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Survey Service / Survey Versioning
Survey Versioning — Survey Service
List Versions
List all versions of a survey.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Create New Version
Create a new draft version of a survey.
- Clones schema from previous published version (if exists)
- Increments version number using semantic versioning (Major.Minor.Patch)
- Creates in DRAFT status only
- Sets is_immutable=False
Body
DTO for creating a new survey version
survey_idstring | nullschemaSurveyService_SurveySchema | nullversionstring | nullincrement_typestring | nullpatchParameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Version
Get a specific version of a survey.
Parameters
survey_idstring<uuid>requiredpathversion_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Version Schema
Update schema for a draft version.
- Only allowed for DRAFT versions
- Version must be immutable=False
Accepts schema in two formats:
- Direct format: { settings, choices, questions, ... }
- Wrapped format: { schema: { settings, choices, questions, ... } }
Body
DTO for updating a draft survey version (cannot update published).
Accepts schema in two formats:
- Direct format: { settings, choices, questions, ... }
- Wrapped format: { schema: { settings, choices, questions, ... } }
The 'schema' field (when present) may include additional metadata like 'title' and 'version' which are stripped during parsing.
schemaobject | nullsettingsany | nullchoicesany | nullquestionsany | nulllookupsany | nulllookup_dataany | nullParameters
survey_idstring<uuid>requiredpathversion_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Discard Version
Discard a draft version.
- Only allowed for DRAFT versions
- Published versions cannot be deleted (for audit trail)
Parameters
survey_idstring<uuid>requiredpathversion_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Clone Version To New Draft
Clone an existing version to a new draft.
- Creates a new version with incremented number using semantic versioning
- Copies schema from source version
- New version is in DRAFT status
Parameters
survey_idstring<uuid>requiredpathversion_idstring<uuid>requiredpathincrement_typestring | nullpatchquerymajor, minor, patch
Response
Successful Response
Validation Error
Get Latest Version
Get the latest version of a survey.
Returns the most recently created version (highest version number). Used by other services (form-service, data-service) to fetch current schema.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Fetch the content-addressed schema artifact for a version
Returns the governing schema artifact for a survey version: canonical_schema is the exact string whose UTF-8 bytes hash to schema_sha256. Unlike the render endpoints this performs no media-audio enrichment, so the served bytes and the declared digest always agree. A client verifies by hashing canonical_schema and comparing to schema_sha256; it must not re-serialize a parsed copy.
Parameters
survey_idstring<uuid>requiredpathversion_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Export survey version as XLSForm
Download a survey version as an XLSForm .xlsx file with optional language selection.
Parameters
survey_idstring<uuid>requiredpathversion_idstring<uuid>requiredpathsurvey_namestring | nullqueryOverride filename prefix
languagesstring | nullqueryComma-separated list of language codes to export (e.g., 'en,es,fr'). If not specified, exports all available languages from the schema.
Response
Successful Response
Validation Error
Survey Service / Survey Publishing
Survey Publishing — Survey Service
Publish Check
Check whether publishing a new version of this survey is safe.
Returns warnings if the survey has active data collection in progress. This is a pre-publish check — it does NOT block publishing, only warns.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Publish Survey
Publish a survey.
- Optional
version_idquery param to publish a specific version (e.g. republish an old one). - When omitted, the latest version is used.
- Validates schema using validation engine (first-time publishes only).
- Marks version as immutable and sets published_at timestamp.
- Updates survey status to PUBLISHED.
Parameters
survey_idstring<uuid>requiredpathversion_idstring | nullqueryResponse
Successful Response
Validation Error
Unpublish Survey
Unpublish a survey (set back to draft).
- Only allows unpublishing if survey is published
- Does NOT modify version (remains immutable for audit)
- Sets survey status back to DRAFT
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Archive Survey
Archive a survey permanently.
- Archived surveys cannot be unarchived or reactivated
- Form filling is blocked for archived surveys
- Data viewing and analytics remain functional
- Duplication is still allowed (creates a new DRAFT survey)
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Published Version
Get the currently published version of a survey.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
List Published Versions
List all published versions of a survey (for audit trail).
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Archive Version
Archive a published version.
- Only published versions can be archived
- Archived versions remain immutable for audit trail
Parameters
survey_idstring<uuid>requiredpathversion_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Survey Version
Get a specific version of a survey by ID.
Parameters
survey_idstring<uuid>requiredpathversion_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Survey Service / Form Access
Form Access — Survey Service
List Form Access
List all users who have access to a specific survey form.
Requires survey:grant_access or survey:manage permission.
Parameters
survey_idstring<uuid>requiredpathskipinteger>= 00querylimitinteger[1, 100]20querysearchstring | nullquerySearch by user name or email
include_revokedbooleanfalsequeryInclude soft-deleted tombstone assignments
Response
Successful Response
Validation Error
Grant Form Access
Grant a user access to fill a specific survey form.
Requires survey:grant_access or survey:manage permission.
Body
user_idstring<uuid>requiredaccess_levelSurveyService_FormAccessLevelfillview_onlyapproverfillexpires_atstring | nullassigned_triggersArray<SurveyService_LookupTriggerAssignment> | nullParameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Bulk Grant Form Access
Grant multiple users access to fill a specific survey form.
Requires survey:grant_access or survey:manage permission.
Body
user_idsArray<string>requiredaccess_levelSurveyService_FormAccessLevelfillview_onlyapproverfillexpires_atstring | nullassigned_triggersArray<SurveyService_LookupTriggerAssignment> | nullParameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
List User Form Access
List all surveys a specific user currently has access to within the authenticated tenant.
This is the admin-facing counterpart to /surveys/access/my: instead of resolving the requesting user, it resolves an arbitrary tenant member.
- tenant_id is always derived from the authenticated request; it is never accepted from the client, so cross-tenant assignments are never exposed.
- The target user must be a member of the current tenant (same check used by grant_form_access). A non-member is rejected with 403 before any assignment data is read.
Requires survey:manage_access, survey:grant_access, or survey:manage.
Parameters
user_idstring<uuid>requiredpathskipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Revoke Form Access
Revoke a user's access to a specific survey form as an auditable soft-delete tombstone (R17).
Requires survey:grant_access or survey:manage permission.
Body
reasonstring | nullAuditable reason for revocation
Parameters
survey_idstring<uuid>requiredpathtarget_user_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Form Access
Update a user's access level or expiry for a specific survey form.
Requires survey:grant_access or survey:manage permission.
Body
access_levelSurveyService_FormAccessLevel | nullexpires_atstring | nullassigned_triggersArray<SurveyService_LookupTriggerAssignment> | nullParameters
survey_idstring<uuid>requiredpathtarget_user_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Check Form Access
Check if the current user has access to a specific survey form.
This endpoint is public and doesn't require special permissions.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Check Historical Form Access
Check if a user was authorized to collect/fill a survey at a specific historical point in time (R17 & R22).
Used by data-service / sync-service to validate that offline responses collected prior to revocation are eligible for governed reconciliation.
Parameters
survey_idstring<uuid>requiredpathuser_idstring<uuid>requiredqueryUser ID to check historical authorization for
at_timestring<date-time>requiredqueryISO datetime at which access must have been valid
Response
Successful Response
Validation Error
Get My Accessible Surveys
Get all surveys that the current user has access to.
- When admin_access=true: Returns ALL published surveys in the tenant. The caller (mobile app) determines admin status from per-tenant role data received during login, and passes this flag accordingly.
- When admin_access=false (default): Returns ONLY surveys explicitly assigned via form_access that are PUBLISHED, in an ACTIVE project, and carry the write-to-fill capability (can_fill). Read-only/approve-only grants and unpublished surveys are never offered for collection.
Per-tenant admin status CANNOT be determined from JWT permissions alone, because multi-tenant JWTs carry the PRIMARY tenant's permissions, which may differ from the user's role in the X-Tenant-ID tenant.
Parameters
skipinteger>= 00querylimitinteger[1, 100]20queryadmin_accessbooleanfalsequeryIf true, return ALL published surveys (for admin users). The caller must determine admin status from per-tenant role data.
Response
Successful Response
Validation Error
Get Enumerators For Supervisor
Get all enumerator user IDs that were granted access by the current Field Supervisor.
This is used by data-service to filter responses that Field Supervisors can see.
Response
Successful Response
Survey Service / Project Lifecycle
Project Lifecycle — Survey Service
Relay Production Activity
Mark that production collection has begun for a survey's project (internal).
Fail-closed: if the project cannot begin production activity (DRAFT or closed) or workspace-service is unreachable, this returns the workspace error and the CALLER MUST NOT proceed with the collection event.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Issue Grant
Issue a durable collection grant (internal, service-auth only).
Called by sync-service (device_download on download acknowledgement) and form-service (interview_reservation at production interview creation). Grants are issued ONLY while the governing project is ACTIVE, and issuing one marks the project's monotonic production-activity invariant. The endpoint is idempotent — an existing identical binding is returned as-is, so re-acknowledgements after closure still resolve their original grant.
Body
kindstringrequireddevice_download | interview_reservation
user_idstring<uuid>requiredsurvey_version_idstring<uuid>requireddevice_idstring | nullinterview_idstring | nullschema_hashstring | nullParameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Validate Grant
Authoritatively validate a submission's collection provenance (internal).
Called by data-service (response submission/edit) and media-service (media upload) when a project is no longer ACTIVE. Returns valid=true only when a matching grant was issued while the project was ACTIVE. Forged client-supplied identifiers never match (grants are server-created rows).
Parameters
survey_idstring<uuid>requiredpathuser_idstring<uuid>requiredquerysurvey_version_idstring | nullquerydevice_idstring | nullqueryinterview_idstring | nullqueryResponse
Successful Response
Validation Error
Mark Late Arrival
Flag a grant whose data landed after project closure (internal).
Called by data-service when it accepts a response for a non-ACTIVE project via a valid grant. The flag surfaces in supervisor review as a late-arrival warning — collection stays preserved, but is auditable.
Parameters
grant_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Survey Service / Survey Name Lookup
Survey Name Lookup — Survey Service
Get Survey Name
Return the display name for an internal survey_id (service-auth only).
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Survey Service / Template Categories
Template Categories — Survey Service
List Template Categories
List all template categories for the tenant.
Parameters
skipinteger>= 00querylimitinteger[1, 100]20querysearchstring | nullquerySearch categories by name or description
Response
Successful Response
Validation Error
Create Template Category
Create a new template category.
Body
namestringrequireddescriptionstring | nullicon_namestring | nullResponse
Successful Response
Validation Error
Get Template Category
Get a specific template category by ID.
Parameters
category_idstringrequiredpathResponse
Successful Response
Validation Error
Update Template Category
Update a template category.
Body
namestring | nulldescriptionstring | nullicon_namestring | nullParameters
category_idstringrequiredpathResponse
Successful Response
Validation Error
Delete Template Category
Delete a template category.
Parameters
category_idstringrequiredpathResponse
Successful Response
Validation Error
Survey Service / Templates
Templates — Survey Service
List Templates
List all survey templates accessible for the tenant.
Parameters
skipinteger>= 00querylimitinteger[1, 100]20querycategory_idstring | nullqueryFilter templates by category
searchstring | nullquerySearch templates by name or description
Response
Successful Response
Validation Error
Create Template
Create a new survey template.
Body
namestringrequireddescriptionstring | nullschemaobject | nullis_publicbooleanfalsecategory_idstringrequiredID of the template category
tenant_idstring | nullTenant ID (null for global templates)
Response
Successful Response
Validation Error
List Templates Grouped
List all survey templates grouped by category.
Response
Successful Response
Get Template
Get a specific survey template by ID.
Parameters
template_idstringrequiredpathResponse
Successful Response
Validation Error
Update Template
Update a survey template.
Body
namestring | nulldescriptionstring | nullschemaobject | nullcategory_idstring | nullis_publicboolean | nullParameters
template_idstringrequiredpathResponse
Successful Response
Validation Error
Delete Template
Delete a survey template.
Parameters
template_idstringrequiredpathResponse
Successful Response
Validation Error
Import Template From Xlsform
Import a survey template from an XLSForm Excel file (.xlsx).
The XLSForm file should contain the following worksheets:
- survey (required): Question definitions with columns: type, name, label, hint, required, etc.
- choices (optional): Choice lists for select_one/select_multiple questions
- settings (optional): Form metadata (form_title, form_id, version, etc.)
Reference: https://xlsform.org/en/
Parses the uploaded file into a survey schema and persists it as a reusable template in the given category. The schema can later be used to create surveys via the create-from-template flow.
Body
filestringrequiredXLSForm Excel file (.xlsx)
namestringrequiredTemplate name
category_idstringrequiredTemplate category ID
descriptionstring | nullTemplate description
is_publicbooleanfalseWhether the template is public
Response
Successful Response
Validation Error
Download a starter XLSForm template
Download a starter .xlsx XLSForm workbook that can be filled in and re-imported via POST /templates/import-xlsform.
Response
Successful Response
Create Survey From Template
Create a new survey using a template's schema.
Body
template_idstringrequiredTemplate ID to create survey from
namestringrequireddescriptionstring | nullworkspace_idstringrequiredWorkspace ID for the new survey
project_idstringrequiredProject ID for the new survey
is_anonymousbooleanfalseallow_multiple_responsesbooleanfalsescheduling_enabledbooleanfalseopen_atstring | nullScheduled open timestamp
close_atstring | nullScheduled close timestamp
Response
Successful Response
Validation Error
Seed Default Templates
Seed default template categories and templates if none exist.
This endpoint is idempotent - safe to call multiple times. Default categories: Census, Health, Education, Agriculture Default templates: Standard Census Form, Community Health Assessment
Response
Successful Response
Survey Service / Health
Health — Survey Service
Check Survey Schedules
Manually trigger survey schedule check for the tenant.
Response
Successful Response
Data Service
Response storage, editing, approvals, exports, attachments, bulk operations, sampling
Data Service / Bulk Responses
Bulk Responses — Data Service
Ingest Bulk Responses
Ingest multiple survey responses in bulk.
- Idempotent: Same idempotency_key returns same response
- Max batch size: 100 responses per request
- Partial success: Failed items don't block successful ones
- Transactional: Each response created in own transaction
Body
Response
Successful Response
Validation Error
Bulk Delete Responses
Bulk delete survey responses.
Supports filtering by survey_id, status, date range, or specific response_ids. Max 10,000 responses per operation. Use dry_run=True to preview the count.
Body
survey_idstring | nullstatusArray<DataService_ResponseStatus> | nullstart_datestring | nullend_datestring | nullresponse_idsArray<string> | nulldry_runbooleanfalseResponse
Successful Response
Validation Error
Bulk Invalidate Responses
Bulk invalidate survey responses with a reason.
Supports filtering by survey_id, status, date range, or specific response_ids. Max 10,000 responses per operation. Use dry_run=True to preview the count.
Body
survey_idstring | nullstatusArray<DataService_ResponseStatus> | nullstart_datestring | nullend_datestring | nullresponse_idsArray<string> | nulldry_runbooleanfalsereasonstringrequiredResponse
Successful Response
Validation Error
Bulk Approve Responses
Bulk approve survey responses.
Supports filtering by survey_id, status, date range, or specific response_ids. Max 10,000 responses per operation. Use dry_run=True to preview the count.
Body
survey_idstring | nullstatusArray<DataService_ResponseStatus> | nullstart_datestring | nullend_datestring | nullresponse_idsArray<string> | nulldry_runbooleanfalsenotesstring | nullResponse
Successful Response
Validation Error
Bulk Update Status Responses
Bulk update status of survey responses.
Supports filtering by survey_id, status, date range, or specific response_ids. Max 10,000 responses per operation. Use dry_run=True to preview the count.
Body
survey_idstring | nullstatusArray<DataService_ResponseStatus> | nullstart_datestring | nullend_datestring | nullresponse_idsArray<string> | nulldry_runbooleanfalsenew_statusstringrequiredResponse
Successful Response
Validation Error
Data Service / Response Management
Response Management — Data Service
Search Similar
Find similar responses by survey_id + identifier fields
Body
survey_idstringrequiredSurvey ID to search for duplicates in
respondent_idstring | nullRespondent ID to match
respondent_fieldsobject | nullOther respondent fields for matching
gps_coordinatesobject | nullGPS coordinates for proximity match
Response
Successful Response
Validation Error
Get Duplicate Groups
List all duplicate groups (paginated, filterable)
Parameters
survey_idstring | nullqueryFilter by survey ID
statusstring | nullqueryFilter by status
skipinteger>= 00queryNumber of items to skip
limitinteger[1, 100]20queryNumber of items per page
Response
Successful Response
Validation Error
Merge
Merge response into another response
Body
target_response_idstring<uuid>requiredResponse ID to merge into (primary)
merge_notestring | nullNote about the merge
conflict_resolutionsobject | nullResolutions for conflicting fields (field name -> response ID to keep)
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Group Status
Update the status of a duplicate group
Parameters
group_idstring<uuid>requiredpathstatusstringrequiredqueryNew status (flagged, merged, discarded, kept_both)
Response
Successful Response
Validation Error
List Responses
List survey responses with filtering and pagination.
Supports filtering by:
- Survey ID
- Response status
- Respondent ID
- Date range
- Enumerator (submitted_by, enumerator_user_code)
- Device (device_id, sync_batch_id)
Parameters
survey_idstring | nullqueryFilter by survey ID
statusstring | nullqueryFilter by status (draft, submitted, completed, invalidated)
respondent_idstring | nullqueryFilter by respondent ID
from_datestring | nullqueryFilter responses from date (ISO 8601)
to_datestring | nullqueryFilter responses to date (ISO 8601)
submitted_bystring | nullqueryFilter by enumerator user ID
enumerator_user_codestring | nullqueryFilter by enumerator user code
device_idstring | nullqueryFilter by device ID
sync_batch_idstring | nullqueryFilter by sync batch ID
limitinteger[1, 100]20queryNumber of results per page
skipinteger>= 00queryNumber of results to skip for pagination
sort_bystringcreated_atquerySort field
sort_orderstringdescquerySort order (asc/desc)
Response
Successful Response
Validation Error
Submit Response
Submit a survey response.
- Checks if user has form access
- Validates survey is published
- Validates response against survey schema
- Creates response and answers in transaction
- Returns response ID and status
Body
survey_idstring<uuid>requiredSurvey ID
version_idstring | nullSurvey version ID
idempotency_keystring | nullUnique key for submission idempotency
respondent_idstring | nullRespondent identifier
answersobjectrequiredQuestion ID to answer mapping
metadataobject | nullAdditional metadata (clients send this under the 'metadata' key)
ip_addressstring | nullClient IP address
user_agentstring | nullClient user agent
device_idstring | nullDevice identifier (ODK Collect deviceID, CSPro device ID)
sync_batch_idstring | nullBatch ID for grouping offline sync submissions
submission_modestring | nullcompleteDomain-level intent: 'complete' or 'terminated_partial'
duration_secondsinteger | nullActive form filling duration in seconds, excluding paused time
interview_idstring | nullInterview execution ID — links this response to its interview lifecycle
interview_ridstring | nullResponse RID from interview (generated at interview creation, not at submission)
collected_atstring | nullDevice-reported capture time (ISO-8601). Source of truth for the schedule window on offline submissions — a response collected on-device before close_at syncs even after the survey is auto-archived server-side.
response_languagestring | nullLanguage code used for this submission (e.g., 'en', 'es', 'fr')
is_reconciliationbooleanfalseFlag indicating this submission is a server-authorized reconciliation of work predating revocation (R22)
reconciliation_grant_idstring | nullHistorical form access grant ID authorizing this reconciliation
Response
Successful Response
Validation error
Access denied
Survey not found
Duplicate response
Validation Error
Get RID sequential counter
Get the current sequential RID counter for a user + survey. Returns 0 when no RID has been generated yet. Clients increment the returned value locally to build the next RID.
Parameters
survey_idstring<uuid>requiredquerySurvey ID
user_codestringrequiredqueryEnumerator user code (6 chars)
Response
Successful Response
Validation Error
Get latest response by respondent ID
Get the latest submitted/completed response for a respondent in a survey.
Parameters
survey_idstring<uuid>requiredpathrespondent_idstringrequiredqueryRespondent identifier
Response
Successful Response
Validation Error
Get response by unique ID
Get a response matching the unique_id (uid) value for a survey.
Parameters
survey_idstring<uuid>requiredpathunique_idstringrequiredqueryUnique identifier value from uid column
Response
Successful Response
Validation Error
Get enumerator statistics for a survey
Get per-enumerator submission counts, rejection rates, and quality metrics.
Parameters
survey_idstring<uuid>requiredquerySurvey ID to get stats for
user_idstring | nullqueryFilter by specific enumerator
limitinteger[1, 100]20queryoffsetinteger>= 00queryResponse
Successful Response
Validation Error
List Response Changes
Durable, resumable feed of this enumerator's own response changes (E1b).
Scope is fixed to the caller's tenant and the caller as the original
submitting user (submitted_by == current_user.id). It deliberately does
NOT use resolve_response_scope and has no full:access bypass: even a
platform admin only ever sees changes for responses they personally
submitted.
Changes are logged transactionally by a DB trigger; the cursor is an
xid8 watermark with a snapshot horizon so pages never overlap and never
skip an in-flight transaction. No answer values are returned.
Parameters
sincestring0queryWatermark (transaction id, decimal text) from a previous page
limitinteger[1, 1000]100queryMaximum number of changes per page
Response
Successful Response
Validation Error
Get Response
Get a single response by ID with optional answer details.
Parameters
response_idstring<uuid>requiredpathinclude_answersbooleantruequeryInclude answer details
Response
Successful Response
Validation Error
Update Response
Update response metadata (only allowed for draft/submitted responses).
Cannot modify completed or invalidated responses.
Body
respondent_idstring | nullmetadataobject | nullAdditional metadata (clients send this under the 'metadata' key)
statusstring | nullParameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Delete Response
Delete a response and all its answers.
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Invalidate Response
Mark a response as invalidated with optional error messages.
Body
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Edit Response
Edit a submitted/completed response. Maintains full audit trail.
- Blocked for DRAFT responses (use PUT instead)
- Blocked for INVALIDATED responses
- Validates new answers against survey schema
- Saves previous answers to edit history
- Publishes response.edited event
Body
answersobjectrequiredQuestion ID to answer mapping
reasonstring | nullReason for edit
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Response Edits
Get edit history for a specific response.
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Submit Response For Approval
Submit a response for approval.
Transitions: SUBMITTED or REJECTED → PENDING_APPROVAL Permission: RESPONSE_READ_AND_WRITE_ONLY
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Approve Response
Approve a response that is pending approval.
Transitions: PENDING_APPROVAL → APPROVED Permission: RESPONSE_APPROVE
Sends approval notification to the respondent.
Body
notesstring | nullOptional approval notes
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Reject Response
Reject a response that is pending approval.
Transitions: PENDING_APPROVAL → REJECTED Permission: RESPONSE_APPROVE
Requires a reason for rejection. Sends rejection notification with reason to the respondent.
Body
reasonstringrequiredRequired rejection reason
flagsobjectrequiredRequired review flags to persist atomically with the rejection. At least one flag must have checked=true. There is no fallback to previously stored flags.
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Correct Response
Correct a rejected response and resubmit it for approval (E1a).
Correction actor is the ORIGINAL submitting enumerator only, enforced by an
unconditional submitted_by == current_user.id check that is independent
of (and cannot be bypassed by) permissions such as full:access.
Only supervisor-flagged (checked: true) questions may be changed; all
other answers are preserved. The whole flow runs in one transaction:
ownership → Idempotency-Key requirement → advisory lock → replay lookup →
status → flagged validation → schema validation → answer apply → edit
history → status transition (REJECTED → PENDING_APPROVAL) → durable
idempotency record. No webhook/outbox events are published in this phase.
Body
Enumerator correction of a rejected response.
answers must contain only questions the supervisor flagged as checked.
Supplying answers for unflagged questions is rejected with 422. Questions
omitted here are left unchanged.
answersobjectrequiredCorrected answers for flagged questions only
reasonstring | nullReason for correction
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Complete Response
Mark a response as completed.
Transitions: DRAFT, SUBMITTED, or APPROVED → COMPLETED Permission: RESPONSE_READ_AND_WRITE_ONLY
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Pending Approval Count
Get count of responses pending approval for a given survey.
Permission: RESPONSE_APPROVE
Parameters
survey_idstring<uuid>requiredquerySurvey ID
Response
Successful Response
Validation Error
Update Review Flags
Update review flags for a response pending approval.
Allows the reviewer to flag individual questions that need modification and add review notes. These flags are visible to the respondent when the response is rejected.
Body
flagsobjectQuestion ID to review flag mapping
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get response statistics for a survey (internal)
Return response counts grouped by status for a given survey. Used internally by survey-service for publish guardrails. Requires X-Tenant-ID header for multi-tenant routing.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Validate a list of response IDs (removes orphans)
Takes a list of response UUIDs and returns only those that exist and belong to the current survey/tenant. Used to identify orphaned media attachments.
Body
response_idsArray<string>requiredParameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Data Service / Data Export
Data Export — Data Service
Export Responses
Export survey responses in CSV, Excel, or JSON format. Returns a streaming response with the exported data.
Body
survey_idstring<uuid>requiredSurvey ID to export
formatstringcsvExport format: csv, xlsx, json, dta, sav
statusstring | nullFilter by response status
from_datestring | nullFilter from date
to_datestring | nullFilter to date
respondent_idstring | nullFilter by respondent
include_metadatabooleantrueInclude response metadata
include_answersbooleantrueInclude answer data
version_idstring | nullSurvey version ID for schema labels (uses latest if not set)
languagestring | nullLanguage code for translated labels (e.g., 'es', 'fr')
Response
Successful Response
Validation Error
Export Responses Stream
Stream export responses (GET version for simple downloads).
Parameters
survey_idstring<uuid>requiredquerySurvey ID
formatstringcsvqueryExport format
statusstring | nullqueryFilter by status
from_datestring | nullqueryFrom date
to_datestring | nullqueryTo date
include_metadatabooleantruequeryinclude_answersbooleantruequerylanguagestring | nullqueryLanguage code for translated labels
Response
Successful Response
Validation Error
Get Media Export Status
Poll the status of a background media export job.
Parameters
request_idstringrequiredpathResponse
Successful Response
Validation Error
Export Survey Csv
Quick CSV export for a survey.
Parameters
survey_idstring<uuid>requiredpathstatusstring | nullquerylanguagestring | nullqueryLanguage code for translated labels
Response
Successful Response
Validation Error
Export Survey Json
Quick JSON export for a survey.
Parameters
survey_idstring<uuid>requiredpathstatusstring | nullquerylanguagestring | nullqueryLanguage code for translated labels
Response
Successful Response
Validation Error
Export Survey Xlsx
Quick Excel export for a survey.
Parameters
survey_idstring<uuid>requiredpathstatusstring | nullquerylanguagestring | nullqueryLanguage code for translated labels
Response
Successful Response
Validation Error
Export Survey Stata
Quick STATA export for a survey.
Parameters
survey_idstring<uuid>requiredpathstatusstring | nullquerylanguagestring | nullqueryLanguage code for translated labels
Response
Successful Response
Validation Error
Export Survey Spss
Quick SPSS export for a survey.
Parameters
survey_idstring<uuid>requiredpathstatusstring | nullquerylanguagestring | nullqueryLanguage code for translated labels
Response
Successful Response
Validation Error
Data Service / Attachments
Attachments — Data Service
List Attachments
List attachments with filtering.
Parameters
entity_typestring | nullqueryFilter by entity type
entity_idstring | nullqueryFilter by entity ID
file_typestring | nullqueryFilter by file type (image, audio, video, document)
field_namestring | nullqueryFilter by question field name
limitinteger[1, 100]20queryoffsetinteger>= 00queryResponse
Successful Response
Validation Error
Upload Attachment
Upload a file attachment.
Supported file types:
- Images (jpg, png, gif)
- Audio (mp3, wav, ogg)
- Video (mp4, avi, mov)
- Documents (pdf, doc, docx, xls, xlsx)
Max file size: 50MB
Body
entity_typestringrequiredEntity type (response, survey, etc.)
entity_idstring<uuid>requiredEntity ID
descriptionstring | nullDescription
filestringrequiredFile to upload
Response
Successful Response
Validation Error
Create Attachment Record
Create an attachment record from provided metadata (file already uploaded via media-service).
This is used by the interview/attachment flow where the file is uploaded separately through media-service, and the data-service only stores the metadata record.
Body
entity_typestringrequiredType of entity (e.g., 'interview', 'response')
entity_idstring<uuid>requiredID of the associated entity
field_namestring | nullQuestion field name
filenamestringrequiredStored filename
original_filenamestringrequiredOriginal filename
file_typestring | nullFile category (image, audio, video, document)
mime_typestring | nullMIME type
file_sizeinteger0File size in bytes
checksumstring | nullSHA-256 checksum
storage_urlstring | nullURL to the uploaded file
captured_atstring | nullDevice capture timestamp
descriptionstring | nullNotes/description
Response
Successful Response
Validation Error
Get Attachment
Get attachment metadata by ID.
Parameters
attachment_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Delete Attachment
Delete an attachment.
Parameters
attachment_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Attachment
Update attachment metadata (notes/description and field_name).
Body
descriptionstring | nullUpdated notes/description
field_namestring | nullUpdated question field name
Parameters
attachment_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Download Attachment
Download attachment file.
Parameters
attachment_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Data Service / Data Analytics
Data Analytics — Data Service
Get Active Surveys
Get a list of all survey IDs for this tenant that have at least one response. Used by frontend to filter survey list in Data Viewer.
Response
Successful Response
Get Response Stats
Get comprehensive statistics for survey responses.
Returns counts by status, completion rate, and average duration.
Date-only from_date/to_date values are interpreted as local calendar days
in timezone_context; full datetimes are treated as instants. The end
boundary is exclusive.
Parameters
survey_idstring<uuid>requiredpathfrom_datestring | nullqueryStart date filter
to_datestring | nullqueryEnd date filter
timezone_contextstring | nullqueryIANA timezone for date-only boundaries
Response
Successful Response
Validation Error
Get Response Timeseries
Get time-series data for survey responses.
Buckets are the effective-IANA CALENDAR day (YYYY-MM-DD), never UTC
wall-clock days. timezone_context selects the zone; Postgres applies
its DST rules per timestamp via created_at AT TIME ZONE :tz. Date-only
from_date/to_date are interpreted as local calendar days; full datetimes
are instants. The end boundary is exclusive and daily series are
zero-filled so exactly the requested local calendar days are returned.
Parameters
survey_idstring<uuid>requiredpathgranularitystringdayqueryTime granularity: day, week, month
from_datestring | nullqueryStart date
to_datestring | nullqueryEnd date (exclusive)
statusstring | nullqueryFilter by response status
timezone_contextstring | nullqueryIANA timezone for calendar-day bucketing
Response
Successful Response
Validation Error
Get Question Stats
Get statistics for individual questions across all responses.
Shows answer counts, unique respondents, and most common values.
Parameters
survey_idstring<uuid>requiredpathlimitinteger[1, 50]10queryNumber of questions to return
Response
Successful Response
Validation Error
Get Answer Distribution
Get distribution of answers for a specific question.
Shows value counts and percentages - useful for multiple choice questions.
Parameters
survey_idstring<uuid>requiredpathquestion_idstringrequiredpathlimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Get Analytics Summary
Get a comprehensive analytics summary for a survey.
Combines multiple metrics: response counts, completion rates, question statistics, and respondent information.
Parameters
survey_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Dashboard Metrics
Get consolidated dashboard metrics for the Operations Center.
Returns:
- active_forms: count of published surveys visible to user (0 - use survey-service)
- active_enumerators: distinct users with successful submissions in last 24h
- submissions_today: count of submitted/completed responses today (effective-IANA local day)
- failed_submissions: count of failed push attempts today (0 - use sync-service)
- latest_submission_times: per-survey latest timestamps (for "Last Submission" column)
- timezone_context: timezone used for date calculations (UTC fallback)
Parameters
timezone_contextstring | nullqueryIANA timezone for calendar-day bucketing
Response
Successful Response
Validation Error
Get Dashboard Data
Get all analytics data for a dashboard view.
Combines stats, timeseries, and question data in one call.
Parameters
survey_idstring<uuid>requiredpathtimezone_contextstring | nullqueryIANA timezone for calendar-day bucketing
Response
Successful Response
Validation Error
Data Service / Random Sampling
Random Sampling — Data Service
Generate Random Sample
Generate a random sample from an uploaded CSV or Excel file.
- file: CSV or Excel file (.csv, .xlsx, .xls)
- sample_size: Number of rows to sample (must be <= total rows)
- output_format: Output format: csv (default), xlsx, or json
Body
filestringrequiredsample_sizeintegerrequiredoutput_formatstringcsvResponse
Successful Response
Validation Error
Generate Random Sample
Generate a random sample from an uploaded CSV or Excel file.
- file: CSV or Excel file (.csv, .xlsx, .xls)
- sample_size: Number of rows to sample (must be <= total rows)
- output_format: Output format: csv (default), xlsx, or json
Body
filestringrequiredsample_sizeintegerrequiredoutput_formatstringcsvResponse
Successful Response
Validation Error
Sync Service
Mobile/offline sync: pull, push, devices, conflicts, reconciliation
Sync Service / Health
Health — Sync Service
Health Check
Health check endpoint.
Response
Successful Response
Sync Service / Devices
Devices — Sync Service
List User Devices
List all devices registered for the current user.
Response
Successful Response
Authorization
JWThttp (bearer)JWT Token Authentication
Register Device
Register a new device for the current user.
- One device per user per platform
- If device already exists, updates registration
- Sets new device as primary
Body
Device registration request.
device_idstringrequiredUnique device identifier
platformstringrequiredDevice platform (ios, android, web, desktop)
device_namestring | nulldevice_modelstring | nullos_versionstring | nullapp_versionstring | nullpush_tokenstring | nullResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Get Device
Get device details by device ID.
Parameters
device_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Update Device
Update device information.
Body
Device update request.
device_namestring | nulldevice_modelstring | nullos_versionstring | nullapp_versionstring | nullpush_tokenstring | nullParameters
device_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Deregister Device
Deregister a device.
Parameters
device_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Update Push Token
Update device push token.
Body
Push token update request.
push_tokenstringrequiredParameters
device_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Set Primary Device
Set device as primary for the user.
Parameters
device_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Sync Service / Sync Pull
Sync Pull — Sync Service
Pull Sync
Pull synchronized data from the server.
- Delta-based: Only returns changes since last_sync_token / last checkpoint.
- Surveys: Fetched from survey-service, filtered by
updated_aftertimestamp. - Checkpoint updated:
last_survey_sync_atis advanced after a successful pull. - New sync_token returned for the device to use in the next call.
Body
Pull sync request.
device_idstringrequiredDevice identifier
last_sync_tokenstring | nullToken from previous sync
survey_versionstring | nullLast known survey version (semver string)
include_surveysbooleantrueInclude survey data
include_metadatabooleantrueInclude sync metadata
Response
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Acknowledge Form Download
Record a form download after the mobile client persisted its schema.
Body
Client acknowledgement emitted only after a schema is persisted locally.
survey_idstring<uuid>requiredsurvey_version_idstring<uuid>requiredsurvey_versionstringrequiredsurvey_titlestring | nullschema_hashstring | nulldevice_idstringrequireddownload_idstring<uuid>requiredplatformstring | nullapp_versionstring | nullapp_buildstring | nullos_versionstring | nullpersisted_atstring | nullResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Get Sync Status
Get sync status for all devices of the current user.
Response
Successful Response
Authorization
JWThttp (bearer)JWT Token Authentication
Get Device Sync Status
Get sync status for a specific device.
Parameters
device_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Initialize Sync
Initialize sync for a new device.
Body
Initial sync request.
device_idstringrequiredplatformstring | nullunknownDevice platform
Response
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Delete Device Sync
Delete sync record for a device.
Parameters
device_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Sync Service / Sync Push
Sync Push — Sync Service
Push Single Response
Push a single survey response to the server.
- Idempotent: Same idempotency_key returns same result
- Persists record before forwarding to data-service
- Returns push record ID for tracking
Body
Push sync request for single response.
idempotency_keystringrequiredUnique key for idempotency
survey_idstring<uuid>requiredSurvey ID
survey_version_idstring | nullSurvey version ID for version-pinned response
interview_idstring | nullInterview execution ID — links this response to its interview lifecycle (Track A)
interview_ridstring | nullResponse RID allocated for interview
respondent_idstring | nullRespondent identifier
Survey answers
metadataobject | nullAdditional metadata
device_idstringrequiredDevice that collected the response
collected_atstring | nullWhen response was collected on device
response_languagestring | nullLanguage code used for submission (e.g., 'en', 'es')
submission_modestring | nullSubmission mode: 'complete', 'terminated_partial', or 'draft'
Response
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Push Bulk Responses
Push multiple survey responses in a batch.
- Max 50 responses per batch
- Partial success: Failed items don't block successful ones
- Idempotent per item
- Persists each record
Body
Bulk push sync request.
Max 50 responses per batch
Response
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Get Push Status
Get status of a push operation.
Parameters
push_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Get Pending Pushes
Get all pending/failed push operations for retry.
Response
Successful Response
Authorization
JWThttp (bearer)JWT Token Authentication
Get Failed Submissions Today
Get count of failed submission attempts today.
Counts FAILED and CONFLICT status push records created on or after the
start of the effective-IANA local calendar day. timezone_context
selects the zone; invalid values fall back to UTC. This provides accurate
failed-submission metrics for the Operations Center dashboard.
Parameters
timezone_contextstring | nullqueryIANA timezone for the 'today' boundary
Response
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Sync Service / Sync Conflicts
Sync Conflicts — Sync Service
List Unresolved Conflicts
Get all unresolved sync conflicts for the tenant.
Response
Successful Response
Authorization
JWThttp (bearer)JWT Token Authentication
Get Conflict
Get a specific conflict by ID.
Parameters
conflict_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Resolve Conflict
Resolve a sync conflict using a specified strategy (server_wins, client_wins).
Body
Request to resolve a sync conflict.
strategystringrequiredResolution strategy: server_wins, client_wins, or manual
merged_dataobject | nullMerged data if manual strategy is used
Parameters
conflict_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Sync Service / Sync Response Changes
Sync Response Changes — Sync Service
List Response Changes
Discover response status/answer-schema changes since a client-held cursor.
Parameters
sincestring0queryWatermark returned by a previous page; held and resent by the client
limitinteger[1, 1000]100queryResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Correct Response
Resubmit a corrected (previously rejected) response against its existing ID.
Parameters
response_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Sync Service / Sync Reconciliation
Sync Reconciliation — Sync Service
Reconcile Revoked Work
Server-Authorized Reconciliation Endpoint (R17 & R22).
Validates that responses collected prior to access revocation are legitimate and eligible for governed ingestion. Rejects responses collected after revocation or collected without assignment with HTTP 403 Forbidden.
Body
Server-authorized reconciliation request for responses predating access revocation (R17 & R22).
intentstringrequiredExplicit intent: must be 'reconcile_revoked_work'
idempotency_keystringrequiredUnique key for idempotency
survey_idstring<uuid>requiredSurvey ID
survey_version_idstring | nullSurvey version ID for version pinning
device_idstringrequiredDevice that collected the response
collected_atstring<date-time>requiredDevice-reported capture timestamp (mandatory for reconciliation)
Survey answers
respondent_idstring | nullRespondent identifier
interview_idstring | nullInterview execution ID
interview_ridstring | nullAllocated RID
metadataobject | nullAdditional metadata
response_languagestring | nullLanguage code
submission_modestring | nullcompleteSubmission mode: 'complete' or 'terminated_partial'
duration_secondsinteger | nullDuration in seconds
sync_batch_idstring | nullBatch ID
Response
Successful Response
Validation Error
Authorization
JWThttp (bearer)JWT Token Authentication
Analytics Service
Dashboards, widgets, aggregate analytics over response data
Analytics Service / Health
Health — Analytics Service
Analytics Service / Dashboards
Dashboards — Analytics Service
Get Dashboard Summary
Get dashboard summary metrics for the tenant.
Cached for 5 minutes. Tenant-scoped.
Parameters
periodstring7dqueryResponse
Successful Response
Validation Error
Get Survey Performance
Get survey performance metrics.
Cached for 5 minutes. Tenant-scoped.
Parameters
limitinteger[1, 100]10queryperiodstring7dqueryResponse
Successful Response
Validation Error
Get Response Metrics
Get response metrics over time.
Cached for 5 minutes. Tenant-scoped.
Parameters
periodstring7dqueryResponse
Successful Response
Validation Error
Invalidate Dashboard Cache
Invalidate all dashboard cache for the tenant.
Useful after significant data changes.
Response
Successful Response
List Dashboards
List all dashboards for the tenant.
Parameters
skipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Create Dashboard
Create a new dashboard.
Body
Create dashboard request.
titlestringrequireddescriptionstring | nullis_defaultbooleanfalsesurvey_idstring | nulldashboard_typestring | nulllayout_configobject | nullResponse
Successful Response
Validation Error
Get Dashboard
Get a dashboard by ID with its widgets.
Parameters
dashboard_idstringrequiredpathResponse
Successful Response
Validation Error
Update Dashboard
Update a dashboard.
Body
Update dashboard request.
titlestring | nulldescriptionstring | nullis_defaultboolean | nulllayout_configobject | nullis_user_modifiedboolean | nullParameters
dashboard_idstringrequiredpathResponse
Successful Response
Validation Error
Delete Dashboard
Delete a dashboard and all its widgets.
Parameters
dashboard_idstringrequiredpathResponse
Successful Response
Validation Error
Create Widget
Add a widget to a dashboard.
Body
Create widget request.
widget_typestringrequiredtitlestringrequiredchart_typestringrequireddata_sourcestringsnapshotquery_configobject | nullposition_xinteger0position_yinteger0widthinteger4heightinteger3configobject | nullfiltersobject | nullrefresh_intervalinteger300Parameters
dashboard_idstringrequiredpathResponse
Successful Response
Validation Error
Update Widget
Update a widget.
Body
Update widget request.
titlestring | nullchart_typestring | nulldata_sourcestring | nullquery_configobject | nullposition_xinteger | nullposition_yinteger | nullwidthinteger | nullheightinteger | nullconfigobject | nullfiltersobject | nullrefresh_intervalinteger | nullParameters
dashboard_idstringrequiredpathwidget_idstringrequiredpathResponse
Successful Response
Validation Error
Delete Widget
Delete a widget.
Parameters
dashboard_idstringrequiredpathwidget_idstringrequiredpathResponse
Successful Response
Validation Error
Get Widget Data
Get data for a widget.
Routes to appropriate data source:
- snapshot: Query local analytics_snapshots table
- realtime: Proxy to data-service for live data
Parameters
dashboard_idstringrequiredpathwidget_idstringrequiredpathResponse
Successful Response
Validation Error
Generate Default Dashboard
Generate or regenerate a default dashboard for a published survey.
The generator decides whether to create, skip, or regenerate based on dashboard state and survey version. No force parameter needed.
Body
Request to generate a default dashboard for a survey.
survey_idstringrequiredResponse
Successful Response
Validation Error
Analytics Service / Analytics
Analytics — Analytics Service
Get Survey Analytics
Get analytics for a specific survey.
Parameters
survey_idstringrequiredpathstart_datestring | nullqueryend_datestring | nullqueryResponse
Successful Response
Validation Error
Get Analytics Summary
Get overall analytics summary for the tenant.
Parameters
start_datestring | nullqueryStart date for the period
end_datestring | nullqueryEnd date for the period
Response
Successful Response
Validation Error
Get Survey Responses
Get paginated responses for a survey.
Parameters
survey_idstringrequiredpathskipinteger>= 00querylimitinteger[1, 1000]100queryResponse
Successful Response
Validation Error
Get Survey Questions Analytics
Get analytics per question for a survey.
Parameters
survey_idstringrequiredpathResponse
Successful Response
Validation Error
Export Survey Analytics
Export survey analytics in the specified format.
Parameters
survey_idstringrequiredpathformatstringjsonqueryResponse
Successful Response
Validation Error
Aggregate Survey Data
Aggregate survey response data for chart visualisation.
Fetches raw responses from data-service, computes aggregation locally, and caches the result in Redis for 5 minutes.
Aggregation types:
- count / distribution → frequency per unique value
- average → numeric histogram with min/max/avg summary
- sum → single total value
Body
Request to aggregate survey response data for a chart panel.
survey_idstringrequiredquestion_idsArray<string>requiredchart_typestringrequiredaggregationstringrequiredfiltersobject | nullgroupingstring | nullvalue_modestring | nullResponse
Successful Response
Validation Error
Workspace Service
Workspaces, projects, and workspace members
Workspace Service / Workspaces
Workspaces — Workspace Service
List Workspaces
Parameters
skipinteger>= 00querylimitinteger[1, 100]20querystatus_filterWorkspaceService_WorkspaceStatus | nullquerysearchstring | nullqueryResponse
Successful Response
Validation Error
Create Workspace
Body
namestringrequireddescriptionstring | nullResponse
Successful Response
Validation Error
Get Workspace
Parameters
workspace_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Workspace
Body
namestring | nulldescriptionstring | nullstatusWorkspaceService_WorkspaceStatus | nullParameters
workspace_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Delete Workspace
Parameters
workspace_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Workspace Service / Workspace Members
Workspace Members — Workspace Service
List Members
Parameters
workspace_idstring<uuid>requiredpathskipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Add Member
Body
user_idstringrequiredroleWorkspaceService_WorkspaceMemberRoleowneradmineditorviewerresponderviewerParameters
workspace_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Member Role
Body
Parameters
workspace_idstring<uuid>requiredpathmember_user_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Remove Member
Parameters
workspace_idstring<uuid>requiredpathmember_user_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Member Usage
Return the tenant-scoped usage snapshot for the enforced member entitlement.
The current backend limit is membership-row based, not unique tenant seats. A user added to two workspaces consumes two memberships.
Response
Successful Response
Workspace Service / Projects
Projects — Workspace Service
List Projects
Parameters
workspace_idstring<uuid>requiredpathskipinteger>= 00querylimitinteger[1, 100]20querystatus_filterWorkspaceService_ProjectStatus | nullquerysearchstring | nullqueryResponse
Successful Response
Validation Error
Create Project
Body
namestringrequireddescriptionstring | nullParameters
workspace_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Project By Workspace
Parameters
workspace_idstring<uuid>requiredpathproject_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Update Project By Workspace
Body
namestring | nulldescriptionstring | nullstatusWorkspaceService_ProjectStatus | nullParameters
workspace_idstring<uuid>requiredpathproject_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Delete Project By Workspace
Parameters
workspace_idstring<uuid>requiredpathproject_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Get Project Lifecycle
Read the lifecycle state of a project (internal).
Returns status + the monotonic production-activity invariant WITHOUT any user-RBAC requirement, so peer services can gate production operations for enumerator-context callers (who lack PROJECT_READ). Service-token auth only.
Parameters
workspace_idstring<uuid>requiredpathproject_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Mark Production Activity
Mark that production collection has begun for a project (internal).
Sets the durable monotonic invariant has_production_activity — called by
peer services (via the survey-service broker) at the first production
interview/response/media event. Idempotent; set-only; never cleared.
- Project DRAFT -> 409 project_not_active (collection cannot begin)
- Project COMPLETED/ARCHIVED with invariant FALSE -> 409 collection_closed
- Project ACTIVE -> invariant set to TRUE (no-op if already set)
Parameters
workspace_idstring<uuid>requiredpathproject_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Webhook Service
Webhook subscriptions and delivery tracking
Webhook Service / Health
Health — Webhook Service
Webhook Service / Webhook Subscriptions
Webhook Subscriptions — Webhook Service
List Subscriptions
List all webhook subscriptions for the tenant.
Parameters
skipinteger>= 00querylimitinteger[1, 100]20queryis_activeboolean | nullqueryResponse
Successful Response
Validation Error
Create Subscription
Create a new webhook subscription.
Body
DTO for creating a webhook subscription.
namestringrequiredurlstringrequiredevent_typesArray<string>requiredsurvey_idstring | nullproject_idstring | nullworkspace_idstring | nullsecretstring | nullResponse
Successful Response
Validation Error
Get Subscription
Get a specific webhook subscription.
Parameters
subscription_idstringrequiredpathResponse
Successful Response
Validation Error
Update Subscription
Update a webhook subscription.
Body
DTO for updating a webhook subscription.
namestring | nullurlstring | nullevent_typesArray<string> | nullis_activeboolean | nullParameters
subscription_idstringrequiredpathResponse
Successful Response
Validation Error
Delete Subscription
Delete a webhook subscription.
Parameters
subscription_idstringrequiredpathResponse
Successful Response
Validation Error
Toggle Subscription
Toggle subscription active status.
Parameters
subscription_idstringrequiredpathResponse
Successful Response
Validation Error
Rotate Secret
Rotate the secret for a webhook subscription.
Parameters
subscription_idstringrequiredpathResponse
Successful Response
Validation Error
Test Webhook
Trigger a test event for a specific webhook subscription.
Parameters
subscription_idstringrequiredpathResponse
Successful Response
Validation Error
Webhook Service / Webhook Deliveries
Webhook Deliveries — Webhook Service
List Deliveries
List webhook deliveries for the tenant.
Parameters
subscription_idstring | nullquerystatusstring | nullqueryevent_typestring | nullqueryskipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Get Delivery
Get details of a specific webhook delivery.
Parameters
delivery_idstringrequiredpathResponse
Successful Response
Validation Error
Retry Delivery
Manually retry a failed webhook delivery.
Parameters
delivery_idstringrequiredpathResponse
Successful Response
Validation Error
Get Delivery Stats
Get delivery statistics for the tenant.
Response
Successful Response
ODK Bridge
ODK Aggregate-compatible endpoints: form list, form download, submissions
ODK Bridge / Health
Health — ODK Bridge
ODK Bridge / ODK Forms
ODK Forms — ODK Bridge
List Forms
OpenRosa Form List API Returns XML list of available forms for the device/user
Parameters
formIDstringqueryverbosebooleantruequeryResponse
Successful Response
Validation Error
Download Form
Download XForm definition (XML) Converts internal survey schema to ODK XForm format
Parameters
form_idstringrequiredpathResponse
Successful Response
Validation Error
ODK Bridge / ODK Submissions
ODK Submissions — ODK Bridge
Submit Form
OpenRosa Form Submission API Accepts XML submission with optional media attachments
Body
xml_submission_filestringrequiredattachmentsArray<string>Response
Successful Response
Validation Error
Pull From Central
Trigger a pull of new submissions from ODK Central.
- Connects to Central API
- Fetches new submissions since last sync
- Processes each and pushes to data-service
Parameters
form_idstring | nullqueryResponse
Successful Response
Validation Error
Form Service
Form rendering, sessions, drafts, interviews, notes, validation, RID blocks
Get Migration Version
Get current Alembic migration version for specific tenant.
Response
Successful Response
Run Cleanup
Run cleanup job to remove expired sessions and drafts.
Args: dry_run: If True, don't actually delete anything tenant_id: Optional specific tenant to cleanup (admin only)
Parameters
dry_runbooleanfalsequerytenant_idstring | nullqueryResponse
Successful Response
Validation Error
Form Service / Health
Health — Form Service
Form Service / Form Rendering
Form Rendering — Form Service
Render form for filling
Render a survey form for user to fill. Creates a new session or continues an existing interview session.
Parameters
survey_idstring<uuid>requiredpathversion_idstring | nullquerySpecific version to render
languagestringenqueryForm language
prefillstring | nullqueryJSON-encoded prefill data
prefill_respondent_idstring | nullqueryPre-fill from latest response by this respondent_id
prefill_unique_idstring | nullqueryPre-fill from response matching this unique_id
interview_idstring | nullqueryContinue an existing interview session
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get pre-fill data from previous response
Fetch pre-fill data from a previous response by respondent_id or unique_id.
Parameters
survey_idstring<uuid>requiredpathrespondent_idstring | nullqueryRespondent identifier for repeat respondent pre-fill
unique_idstring | nullqueryUnique ID value from previous response
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Preview form without session
Preview a form schema without creating a session.
Parameters
survey_idstring<uuid>requiredpathversion_idstring | nullquerylanguagestringenqueryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get offline manifest
Get manifest for offline form support (service worker).
Parameters
survey_idstring<uuid>requiredpathversion_idstring | nullqueryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Form Service / Form Submission
Form Submission — Form Service
Submit completed form
Submit a completed form response.
Body
Request to submit a completed form.
session_tokenstringrequiredform_dataobjectrequiredis_completebooleantruecurrent_pageinteger | nullclient_timestampstring | nullduration_secondsinteger | nullActive form filling duration in seconds, excluding paused time
offline_submissionbooleanfalseoffline_queued_atstring | nulledit_response_idstring | nullversion_idstring | nullinterview_idstring | nullInterview execution ID (cross-service correlation)
languagestring | nullLanguage code used for this submission (e.g., 'en', 'es', 'fr')
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Submit offline form
Submit a form that was filled offline.
Body
Request to submit a completed form.
session_tokenstringrequiredform_dataobjectrequiredis_completebooleantruecurrent_pageinteger | nullclient_timestampstring | nullduration_secondsinteger | nullActive form filling duration in seconds, excluding paused time
offline_submissionbooleanfalseoffline_queued_atstring | nulledit_response_idstring | nullversion_idstring | nullinterview_idstring | nullInterview execution ID (cross-service correlation)
languagestring | nullLanguage code used for this submission (e.g., 'en', 'es', 'fr')
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Validate form data
Validate form data without submitting.
Body
Request to validate form data without submitting.
session_tokenstringrequiredform_dataobjectrequiredvalidate_allbooleanfalsefields_to_validateArray<string> | nullResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Form Service / Draft Management
Draft Management — Form Service
List user's drafts
List all drafts for the current user.
Parameters
survey_idstring | nullqueryFilter by survey ID
statusstring | nullqueryFilter by status
skipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Create draft
Create a new draft with sync and idempotency support.
Body
Request to create a new draft.
idstring | nullsurvey_idstring<uuid>requiredsession_idstring | nullnamestring | nulldraft_dataobjectcurrent_pageinteger0survey_version_idstring | nullPinned immutable survey schema version ID
device_idstring | nullcontent_hashstring | nullidempotency_keystring | nullResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Delta sync drafts
Pull drafts updated since a given cursor timestamp or keyset cursor, including tombstones (Wave 9 / R24).
Parameters
cursorstring | nullqueryOpaque keyset cursor for delta pagination
updated_sincestring | nullqueryISO-8601 timestamp cursor (legacy fallback)
limitinteger[1, 100]50queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)List all drafts (admin)
List all drafts across users (admin only).
Parameters
survey_idstring | nullqueryuser_idstring | nullquerystatusstring | nullqueryskipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get draft
Get a specific draft by ID.
Parameters
draft_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Update draft
Update an existing draft with optimistic concurrency checks.
Body
Request to update an existing draft.
draft_dataobject | nullnamestring | nullcurrent_pageinteger | nullis_auto_savebooleanfalseversion_tokeninteger>= 11Expected current server version token
device_idstring | nullcontent_hashstring | nullidempotency_keystring | nullParameters
draft_idstring<uuid>requiredpathResponse
Successful Response
Optimistic concurrency conflict
Validation Error
Authorization
HTTPBearerhttp (bearer)Delete draft
Soft-delete a draft with tombstone so stale devices do not resurrect it.
Parameters
draft_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Drain and archive offline draft after authorization revocation
Validates pre-revocation editing timestamps against historical authorization, setting status to 'archived_revoked'.
Body
Request to drain an offline draft whose user's assignment was revoked.
idstring<uuid>requiredUnique draft identifier
survey_idstring<uuid>requiredSurvey identifier
survey_version_idstring | nullPinned survey schema version ID
namestring | nulldraft_dataobjectAnswers captured in draft
current_pageinteger0device_idstringrequiredAttribution device ID (must not be placeholder)
version_tokeninteger>= 11Client version token
content_hashstring | nullidempotency_keystring | nullreconciliation_grant_idstring | nullReconciliation grant ID
lastModifiedAtstring<date-time>requiredTimestamp of the last offline edit to the draft
reconciliation_reasonstring | nullOptional domain note or reason
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Form Service / Session Management
Session Management — Form Service
List user's sessions
List all form sessions for the current user.
Parameters
survey_idstring | nullqueryFilter by survey ID
statusstring | nullqueryFilter by status
skipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)List all sessions (admin)
List all form sessions across users (admin only).
Parameters
survey_idstring | nullqueryuser_idstring | nullquerystatusstring | nullqueryskipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get session
Get a specific session by ID.
Parameters
session_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Delete session
Delete/invalidate a session.
Parameters
session_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get session by token
Get a session by its token.
Parameters
session_tokenstringrequiredpathResponse
Successful Response
Validation Error
Form Service / Lookups
Lookups — Form Service
Resolve lookup values
Resolve referee question values from lookup data based on trigger question answer.
Parameters
session_tokenstringrequiredpathtrigger_questionstringrequiredqueryName of trigger question (e.g., 'uid')
trigger_valuestringrequiredqueryValue answered for trigger question
Response
Successful Response
Validation Error
Form Service / Validation
Validation — Form Service
Validate single field constraint
Validate a single field against its XPath constraint
Body
Request to validate a single field.
session_tokenstringrequiredForm session token
field_namestringrequiredName of the field to validate
field_valueanyrequiredCurrent value of the field
form_dataobjectComplete form data
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Validate entire form
Validate all field constraints in a form
Body
Request to validate entire form.
session_tokenstringrequiredForm session token
form_dataobjectrequiredForm data to validate
fields_to_validateArray<string> | nullOptional list of fields to validate (all if not specified)
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Evaluate XPath expression
Evaluate an XPath expression with form data context
Body
Request to evaluate an XPath expression.
session_tokenstringrequiredForm session token
expressionstringrequiredXPath expression to evaluate
form_dataobjectForm data for variable resolution
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)List available XPath functions
Get list of all available XPath/ODK functions
Response
Successful Response
Authorization
HTTPBearerhttp (bearer)Test constraint expression
Test a constraint expression with sample data
Body
Parameters
constraintstringrequiredqueryfield_namestringtest_fieldqueryfield_valueanyqueryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Form Service / RID Block Allocation
RID Block Allocation — Form Service
List RID block allocations
List RID block allocations for the tenant. Field users see their own blocks.
Parameters
survey_idstring | nullqueryFilter by survey ID
device_idstring | nullqueryFilter by device ID
limitinteger[1, 100]50queryoffsetinteger>= 00queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Allocate server-issued device-bound RID block
Allocate a non-overlapping block of RIDs bound to (tenant, survey, user, device) (R25 / AD-3).
Body
Request payload for server-allocated device-bound RID block (R25 / AD-3).
survey_idstring<uuid>requiredID of the survey for which RID block is requested
device_idstringrequiredUnique client device ID (non-placeholder)
block_sizeinteger[1, 200]50Number of sequential RIDs to allocate
idempotency_keystring | nullClient idempotency key for safe retries
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Form Service / Interview Management
Interview Management — Form Service
List interviews
Parameters
status_filterstring | nullqueryFilter by status
survey_idstring | nullqueryFilter by survey ID
interviewer_idstring | nullqueryFilter by interviewer
respondent_idstring | nullqueryFilter by respondent
searchstring | nullquerySearch by session token
sortstring | nullquerySort by: last_activity, started_at, completion, created_at
skipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Create interview
Body
survey_idstring<uuid>requiredrespondent_idstring | nullsession_tokenstringrequiredtotal_questionsinteger0languagestring | nullActive language code during interview (e.g., 'en', 'es', 'hi')
interview_metadataobject[object Object]survey_namestring | nullresponse_ridstring | nullDEPRECATED. The server allocates the permanent RID at interview creation. This field is ignored for NEW interviews and only used as a last-resort backfill for legacy interviews created before server-side allocation.
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Resolve interview by session token
Parameters
session_tokenstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get interview details
Parameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Soft-delete interview (only if status is created)
Parameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Update interview metadata
Body
respondent_idstring | nullcurrent_pageinteger | nullanswered_countinteger | nulltotal_questionsinteger | nullinterview_metadataobject | nullParameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Transition interview status
Body
to_statusstringrequiredtermination_reasonstring | nullexplanatory_textstring | nullform_dataobject | nullis_completeboolean | nullcurrent_pageinteger | nullversion_idstring | nulledit_response_idstring | nullduration_secondsinteger | nullquestion_paradataobject | nullPhase-1 question paradata (T). Additive — merged into InterviewExecution.interview_metadata.question_paradata before the transition, and forwarded to data-service response_metadata at completion/retained termination. Existing metadata keys are preserved.
Parameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get termination details for an interview
Parameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)List all termination reason options with policies
Response
Successful Response
Authorization
HTTPBearerhttp (bearer)Retry pending partial submission for terminated interview
Retry a pending partial submission for a terminated interview.
This is used when the initial submission failed and the user wants to manually retry, or when the sync engine automatically retries during crash recovery.
Parameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Heartbeat ping for active interview
Parameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)List interview events
Parameters
interview_idstring<uuid>requiredpathskipinteger>= 00querylimitinteger[1, 200]50queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Form Service / Interview Notes
Interview Notes — Form Service
List notes for an interview
Parameters
interview_idstring<uuid>requiredpathfield_namestring | nullqueryFilter by field/question name
categorystring | nullqueryFilter by note category
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Create a note for an interview
Body
field_namestring | nulltextstringrequiredcategorystringgeneralclient_created_atstring | nullParameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get a specific note
Parameters
interview_idstring<uuid>requiredpathnote_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Update a note
Body
textstring | nullcategorystring | nullpinnedboolean | nullfield_namestring | nullParameters
interview_idstring<uuid>requiredpathnote_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Delete a note
Parameters
interview_idstring<uuid>requiredpathnote_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Batch create notes
Body
Parameters
interview_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Media Service
Media upload, download, library, storage usage
Media Service / Health
Health — Media Service
Media Service / Upload
Upload — Media Service
Upload File
Upload a single file.
Args: file: The file to upload survey_id: Optional survey to associate with response_id: Optional response to associate with is_public: Whether the file is publicly accessible description: Optional file description survey_name: Optional survey name for custom renaming question_name: Optional question name for custom renaming user_name: Optional name of the user uploading the file checksum: Optional expected SHA-256 digest
Returns: Asset metadata including ID, filename, size, and type
Body
filestringrequiredsurvey_idstring | nullresponse_idstring | nullentity_typestring | nullentity_idstring | nullis_publicbooleanfalsedescriptionstring | nullsurvey_namestring | nullquestion_namestring | nulluser_namestring | nulldevice_idstring | nullDevice that recorded this media (used for post-closure grant validation)
checksumstring | nullExpected SHA-256 checksum of file
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Upload Batch
Upload multiple files at once.
Args: files: List of files to upload survey_id: Optional survey to associate with response_id: Optional response to associate with user_name: Optional name of the user uploading the files
Returns: Summary of uploaded files and any errors
Body
filesArray<string>requiredsurvey_idstring | nullresponse_idstring | nullentity_typestring | nullentity_idstring | nulluser_namestring | nulldevice_idstring | nullDevice that recorded this media (used for post-closure grant validation)
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Upload Chunk
Upload a single chunk of a large media file.
Mobile uploads files in 512KB chunks, posting each to this endpoint with
the same upload_id. Chunks are staged on disk; when the final chunk
(chunk_index == total_chunks - 1) arrives the full file is reassembled
and stored via the standard media pipeline (compression, checksum, DB
record).
survey_idis REQUIRED for production-bound uploads (project lifecycle gate; §5 row 11).response_idis client-local at upload time and is never the enforcement key.checksum(full-file SHA-256) is verified on the last chunk.
Body
filestringrequiredupload_idstringrequiredClient-generated stable upload ID (media local ID)
chunk_indexinteger>= 0requiredZero-based chunk index
total_chunksinteger[1, 100000]requiredTotal number of chunks
file_namestringrequiredmime_typestringrequiredsurvey_idstring | nullSurvey this media belongs to (REQUIRED for production-bound uploads)
response_idstring | nullClient-local response reference (metadata only — never the enforcement key)
checksumstring | nullExpected SHA-256 of the FULL assembled file
device_idstring | nullDevice that recorded this media (used for post-closure grant validation)
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Media Service / Download
Download — Media Service
Download File
Download a file by asset ID.
Parameters
asset_idstringrequiredpathtokenstring | nullqueryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Stream File
Stream a file inline (for images, audio, video).
Parameters
asset_idstringrequiredpathtokenstring | nullqueryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Stream Thumbnail
Stream an asset's thumbnail.
Parameters
asset_idstringrequiredpathtokenstring | nullqueryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get File By Name
Get a library file by its original filename. Used by form filler to display media files.
Parameters
filenamestringrequiredpathtokenstring | nullqueryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Media Service / Assets
Assets — Media Service
List Assets
List media assets with optional filters.
Parameters
survey_idstring | nullqueryresponse_idstring | nullqueryentity_typestring | nullqueryentity_idstring | nullqueryasset_typestring | nullqueryskipinteger0querylimitinteger20queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Asset
Get asset metadata.
Parameters
asset_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Update Asset
Update asset metadata.
Body
original_filenamestring | nulldescriptionstring | nullalt_textstring | nulltagsArray<string> | nullis_publicboolean | nullParameters
asset_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Delete Asset
Delete an asset and its stored files.
Parameters
asset_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Presigned Url
Get a proxy URL for direct file access.
Parameters
asset_idstringrequiredpathexpires_ininteger3600queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Link Asset To Response
Link an asset to a form response.
Body
Parameters
asset_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Assets For Response
Get all assets associated with a response.
Parameters
response_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Asset By Upload Id
Resolve a Media Track upload_id to its canonical MediaAsset.id.
This is the mobile half of the media identity map. A mobile answer carries
asset_ref="upload_id" while offline, so the canonical server identity is
reached through this endpoint rather than by assuming the client's id is a
MediaAsset.id.
Deliberately narrow, to match the frozen contract: one indexed lookup on
upload_id, tenant-scoped, at most one result. There is no fallback to a
MediaAsset.id lookup, no question-name lookup, and no response-id
lookup, so an unresolved reference stays unresolved instead of resolving to
something it was not.
Parameters
upload_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Media Service / Media Library
Media Library — Media Service
Upload Library File
Upload a file to the tenant's shared media library.
Uploaded files can then be referenced by filename in survey
question and choice media_file fields.
Allowed types: images (jpg, png, gif, webp), audio (mp3, wav, ogg), video (mp4, webm).
Body
filestringrequiredMedia file to add to the library
descriptionstring | nullOptional description
survey_namestring | nullOptional survey name for renaming
question_namestring | nullOptional question name for renaming
response_idstring | nullOptional response ID for renaming
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Upload Library Files Batch
Upload multiple files to the tenant's media library at once.
Body
filesArray<string>requiredMedia files to add to the library
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)List Library
List all files in the tenant's shared media library.
Supports filtering by asset_type (image, audio, video), filename search, and tags (comma-separated, returns assets with any matching tag).
Parameters
asset_typestring | nullqueryFilter by type: image, audio, video
searchstring | nullquerySearch by filename
tagsstring | nullqueryComma-separated tags to filter by (OR logic — assets with any matching tag)
skipinteger>= 00queryRow offset
limitinteger[1, 100]20queryItems per page
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Library Asset By Filename
Look up a library asset by its original filename.
Used by form-service during form rendering to resolve media_file values to actual stream URLs.
Parameters
filenamestringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Library Asset Url
Get the stream URL for a library asset.
Returns the URL to stream/display the file inline.
Parameters
asset_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Update Library Asset Status
Update a library asset's approval status (pending/approved/rejected).
Only users with the MEDIA_MANAGE permission can approve or reject media. Pending/rejected library assets are not usable in forms — the by-filename lookup, stream/download endpoints, and survey enrichment all block them.
Body
Parameters
asset_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Delete Library Asset
Delete a file from the tenant's media library.
Warning: This will remove the file from storage. Any surveys that reference this file by name will no longer be able to display it.
Parameters
asset_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Media Service / Storage Usage
Storage Usage — Media Service
Get Storage Usage
Response
Successful Response
Authorization
HTTPBearerhttp (bearer)Notification Service
Notification templates, sending, preferences, history
Notification Service / Health
Health — Notification Service
Notification Service / Send
Send — Notification Service
Send Notification
Body
channelstringemailsmsslackrequiredrecipientstringrequiredsubjectstring | nullbodystringrequiredtemplate_idstring | nulltemplate_varsobject | nulluser_idstring | nullnotification_typeNotificationService_NotificationType | string | nullmetadataobject | nullResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Send Batch
Body
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Notification Service / Templates
Templates — Notification Service
List Templates
Parameters
channelstring | nullqueryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Create Template
Body
namestringrequiredchannelstringrequiredsubject_templatestring | nullbody_templatestringrequiredvariablesArray<string> | nullResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Preview Template Live
Body
subject_templatestring | nullbody_templatestringrequiredvariablesobject[object Object]Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Template
Parameters
template_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Update Template
Body
namestring | nullsubject_templatestring | nullbody_templatestring | nullvariablesArray<string> | nullis_activeboolean | nullParameters
template_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Delete Template
Parameters
template_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Preview Template
Body
variablesobject[object Object]Parameters
template_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Notification Service / Preferences
Preferences — Notification Service
Get Preferences
Response
Successful Response
Authorization
HTTPBearerhttp (bearer)Set Preference
Body
channelstringrequiredis_enabledbooleantruequiet_hours_startstring | nullquiet_hours_endstring | nullfrequencystringimmediateResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Update Preference
Body
channelstringrequiredis_enabledbooleantruequiet_hours_startstring | nullquiet_hours_endstring | nullfrequencystringimmediateParameters
pref_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Delete Preference
Parameters
pref_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Notification Service / Settings
Settings — Notification Service
Get Settings
Response
Successful Response
Authorization
HTTPBearerhttp (bearer)Update Settings
Body
smtpNotificationService_SMTPConfig | nullsms_providerstringmockaws_end_user_messagingtwiliomsg91kaleyraafricas_talkinggeneric_httpmockawsNotificationService_AWSConfig | nulltwilioNotificationService_TwilioConfig | nullmsg91NotificationService_MSG91Config | nullkaleyraNotificationService_KaleyraConfig | nullafricas_talkingNotificationService_AfricasTalkingConfig | nullgeneric_httpNotificationService_GenericHttpConfig | nullslackNotificationService_SlackConfig | nullResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Send Test Notification
Body
channelstringemailsmsslackrequiredrecipientstringrequiredsubjectstring | nullTest NotificationbodystringThis is a test notification from MQUAD Notification Service.Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Notification Service / History
History — Notification Service
List Notifications
Parameters
user_idstring | nullquerynotification_statusstring | nullquerychannelstring | nullquerypageinteger1querypage_sizeinteger20queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Cancel Notifications
Body
recipientstring<email>requiredResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Notification
Parameters
notification_idstring<uuid>requiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Audit Service
Audit logs, compliance queries, export
Audit Service / Health
Health — Audit Service
Audit Service / Audit Logs
Audit Logs — Audit Service
Ingest Audit Log
Ingest a new audit log entry.
Body
event_idstring | nullUnique event ID for idempotency
event_typestring | nullType of event (e.g., user.created)
log_schema_versionstring | null1.0Schema version
service_namestringrequiredName of the service producing the event
actionstringrequiredAction performed (create, update, delete, read, login, etc.)
actor_typestring | nullType of actor
actor_idstring | nullID of the actor
actor_emailstring | nullEmail of the actor
actor_namestring | nullDisplay name of the actor
tenant_idstring | nullTenant ID
tenant_namestring | nullDisplay name of the tenant
resource_typestring | nullType of resource
resource_idstring | nullID of the resource
resource_namestring | nullDisplay name of the resource
statusstring | nullsuccessEvent status
categorystring | nullEvent category for filtering
severitystring | nullINFOEvent severity level
descriptionstring | nullHuman-readable event description
failure_reasonstring | nullReason for failure if status is failure/error
correlation_idstring | nullCross-service correlation ID
ip_addressstring | nullClient IP address
user_agentstring | nullClient user agent
request_idstring | nullRequest ID for correlation
trace_idstring | nullTrace ID for cross-service correlation
parent_trace_idstring | nullParent trace ID
http_methodstring | nullHTTP method
http_pathstring | nullHTTP path
http_statusinteger | nullHTTP status code
duration_msinteger | nullRequest duration in milliseconds
metadataobject | nullAdditional event metadata
event_idempotency_keystring | nullKey for deduplication
data_classificationstring | nullinternalData classification level
{
"action": "create",
"actor_email": "admin@acme.org",
"actor_id": "550e8400-e29b-41d4-a716-446655440001",
"actor_type": "admin",
"data_classification": "internal",
"duration_ms": 45,
"event_id": "550e8400-e29b-41d4-a716-446655440000",
"event_type": "user.created",
"http_method": "POST",
"http_path": "/api/v1/users",
"http_status": 201,
"ip_address": "192.168.1.1",
"log_schema_version": "1.0",
"metadata": {
"role": "viewer"
},
"request_id": "req-12345678",
"resource_id": "550e8400-e29b-41d4-a716-446655440003",
"resource_type": "User",
"service_name": "backend",
"status": "success",
"tenant_id": "550e8400-e29b-41d4-a716-446655440002",
"trace_id": "trace-12345678"
}Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)List System Audit Logs
System-wide audit logs - for super:admin and host admin only.
SECURITY: full:access (tenant admin) is explicitly excluded. Tenant admins must not access other tenants' audit logs. Only super:admin and host:manage_tenants are permitted. See common/rbac_helpers.py L44.
This endpoint bypasses tenant filtering and allows viewing logs across all tenants. Optional tenant_id_filter can be used to scope to a specific tenant.
Parameters
service_namestring | nullqueryFilter by service name
actionstring | nullqueryFilter by action
user_idstring | nullqueryFilter by user ID
searchstring | nullquerySearch activity text
resource_typestring | nullqueryFilter by resource type
tenant_id_filterstring | nullqueryFilter by specific tenant ID
categorystring | nullqueryFilter by event category
date_fromstring | nullqueryFilter from date (ISO format)
date_tostring | nullqueryFilter to date (ISO format)
skipinteger>= 00queryRow offset
limitinteger[1, 500]50queryPage size
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Audit Log
Get a specific audit log entry by ID.
Parameters
log_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Verify Chain Integrity
Verify the integrity of the audit log chain.
If resource_type and resource_id are provided, verify only events for that specific resource. Otherwise, verify the entire tenant's chain (existing behavior).
Parameters
limitinteger[1, 10000]1000queryNumber of logs to verify
resource_typestring | nullqueryFilter by resource type for targeted verification
resource_idstring | nullqueryFilter by resource ID for targeted verification
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Audit Service / Compliance
Compliance — Audit Service
Get Data Access Report
Get GDPR data access report for a specific user.
Parameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Record Consent
Record or update a consent decision for a user.
Body
user_idstringrequiredconsent_typestringrequiredis_grantedbooleanrequiredip_addressstring | nullmetadataobject | nullResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get User Consents
Get all consent records for a specific user.
Parameters
user_idstringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Audit Service / Export
Export — Audit Service
Export Audit Logs
Export audit logs in the specified format (json or csv).
Enforces a maximum of 50,000 records. Use date filtering to narrow the range when the export exceeds this limit.
Parameters
formatstringjsonqueryExport format: json or csv
service_namestring | nullqueryFilter by service name
actionstring | nullqueryFilter by action
user_idstring | nullqueryFilter by user ID
resource_typestring | nullqueryFilter by resource type
date_fromstring | nullqueryFilter from date (ISO format)
date_tostring | nullqueryFilter to date (ISO format)
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Feature Flags Service
Feature flags, plans, flag evaluation
Feature Flags Service / Internal
Internal — Feature Flags Service
Invalidate Tenant Plan Context
Internal endpoint: invalidate the cached plan context for a single tenant.
Used by backend service after Stripe webhook processing commits subscription state changes, ensuring entitlement propagation with minimal delay.
Authentication: X-Internal-Service header must equal "backend" and X-Service-Token must match the FEATURE_FLAGS_SERVICE_TOKEN.
Returns success even when no cache entry exists.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Feature Flags Service / Feature Flags
Feature Flags — Feature Flags Service
List Flags
List all feature flags with pagination. Requires feature_flag:read.
Parameters
skipinteger>= 00querylimitinteger[1, 100]20queryResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Create Flag
Create a new feature flag. Requires feature_flag:create.
Body
keystringrequirednamestringrequireddescriptionstring | nullflag_typestringbooleandefault_valueanyfalseis_enabledbooleantruetagsArray<string> | nullenvironmentstring | nullplan_tierstring | nullfeature_categorystring | nullResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Get Flag
Get a feature flag by key. Requires feature_flag:read.
Parameters
flag_keystringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Update Flag
Update a feature flag. Requires feature_flag:update.
Body
namestring | nulldescriptionstring | nulldefault_valueany | nullis_enabledboolean | nulltagsArray<string> | nullplan_tierstring | nullfeature_categorystring | nullParameters
flag_keystringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Delete Flag
Delete a feature flag and all associated rules/evaluations. Requires feature_flag:delete.
Parameters
flag_keystringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Toggle Flag
Toggle a feature flag's enabled state. Requires feature_flag:toggle.
Parameters
flag_keystringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Archive Flag
Archive a feature flag (disables and hides from list). Requires feature_flag:update.
Archive has no verb of its own in the catalog. It is mapped to update
rather than delete because it is reversible -- the flag row and its rules
survive, and only the archived state changes.
Parameters
flag_keystringrequiredpathResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Feature Flags Service / Flag Evaluation
Flag Evaluation — Feature Flags Service
Evaluate Flag
Evaluate a single feature flag against the provided context.
Body
flag_keystringrequiredcontextobject | nullResponse
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Evaluate Batch
Evaluate multiple feature flags in a single request.
Body
Response
Successful Response
Validation Error
Authorization
HTTPBearerhttp (bearer)Feature Flags Service / Health
Health — Feature Flags Service
Feature Flags Service / Plans
Plans — Feature Flags Service
List Plans
List all available subscription plans and their features.
Response
Successful Response
Get Entitlement Catalogue
Return the canonical Phase 2 entitlement catalogue metadata.
Response
Successful Response
Get Plan
Get details for a specific plan tier.
Parameters
tierstringrequiredpathResponse
Successful Response
Validation Error
Get Tenant Plan Tier
Get plan tier for a tenant. Looks up from backend API.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Get Tenant Limits
Get limits for a tenant.
Returns limit values based on tenant's plan tier. Used by quota-service and plan-enforcement-sdk.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Get Tenant Features
Get feature flags for a tenant.
Returns boolean feature flags based on tenant's plan tier. Used by plan-enforcement-sdk for feature gate checks.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Get Tenant Entitlements
Get normalized plan limits, feature entitlements, and subscription state.
Parameters
tenant_idstringrequiredpathResponse
Successful Response
Validation Error
Quota Service
Real-time quota check/consume/rollback for plan enforcement
Readiness Check
Readiness check endpoint.
Response
Successful Response
Quota Service / Quota
Quota — Quota Service
Check Limit
Check if quota is available.
For time-based limits (responses_per_month, exports_per_month, api_calls_per_minute): checks Redis counters with monthly window reset.
For absolute limits (surveys, storage_mb, etc.): returns limit from plan but does NOT check Redis — each consumer service self-enforces from its own DB.
Body
Request to check quota availability.
limit_typestringrequiredType of limit (e.g., 'surveys')
amountinteger>= 11Amount to check
Response
Successful Response
Validation Error
Consume Quota
Consume quota after successful operation.
For time-based limits: atomically increments the Redis counter. For absolute limits: no-op (services self-track from their own DB).
Body
Request to consume quota.
limit_typestringrequiredType of limit
amountinteger>= 11Amount to consume
idempotency_keystring | nullTenant-scoped usage idempotency key
Response
Successful Response
Validation Error
Rollback Quota
Rollback quota consumption.
For time-based limits: atomically decrements the Redis counter. For absolute limits: no-op (services self-track from their own DB).
Body
Request to rollback quota.
limit_typestringrequiredType of limit
amountinteger>= 11Amount to rollback
Response
Successful Response
Validation Error
Get Usage
Get current usage for a limit type.
For time-based limits: returns actual Redis counter. For absolute limits: returns limit from plan, current=0 (service self-reports).
Parameters
limit_typestringrequiredpathResponse
Successful Response
Validation Error
Get All Usage
Get all usage counters for tenant.
Response
Successful Response
Reset Tenant
Reset all counters for tenant (admin only).
Response
Successful Response
Platform Utilities / Health
Shared endpoints served by multiple services
Health Check
Also served by Survey Service at http://localhost:8001.
Also served by Data Service at http://localhost:8002.
Also served by Sync Service at http://localhost:8003.
Also served by Analytics Service at http://localhost:8004.
Also served by Workspace Service at http://localhost:8006.
Also served by Webhook Service at http://localhost:8007.
Also served by Form Service at http://localhost:8010.
Also served by Media Service at http://localhost:8011.
Also served by Notification Service at http://localhost:8012.
Also served by Audit Service at http://localhost:8013.
Also served by Feature Flags Service at http://localhost:8014.
Response
Successful Response
Health Check
Health check endpoint.
Also served by Quota Service at http://localhost:6380.
Response
Successful Response
Readiness Check
Readiness check for Kubernetes/container orchestration.
Returns 200 if the service is ready to accept traffic.
Also served by Media Service at http://localhost:8011.
Also served by Notification Service at http://localhost:8012.
Also served by Audit Service at http://localhost:8013.
Also served by Feature Flags Service at http://localhost:8014.
Response
Successful Response
Liveness Check
Liveness check for Kubernetes/container orchestration.
Returns 200 if the service is alive.
Also served by Media Service at http://localhost:8011.
Also served by Notification Service at http://localhost:8012.
Also served by Audit Service at http://localhost:8013.
Also served by Feature Flags Service at http://localhost:8014.
Response
Successful Response
Platform Utilities / Metrics
Shared endpoints served by multiple services
Metrics
Prometheus metrics endpoint
Also served by Data Service at http://localhost:8002.
Also served by Sync Service at http://localhost:8003.
Also served by Workspace Service at http://localhost:8006.
Also served by Media Service at http://localhost:8011.
Also served by Notification Service at http://localhost:8012.
Also served by Audit Service at http://localhost:8013.
Also served by Feature Flags Service at http://localhost:8014.
Response
Successful Response
Platform Utilities / Migrations
Shared endpoints served by multiple services
Run Migrations
Run database migrations for tenant
Also served by Data Service at http://localhost:8002.
Also served by Sync Service at http://localhost:8003.
Also served by Analytics Service at http://localhost:8004.
Also served by Workspace Service at http://localhost:8006.
Also served by Webhook Service at http://localhost:8007.
Also served by Form Service at http://localhost:8010.
Also served by Media Service at http://localhost:8011.
Also served by Notification Service at http://localhost:8012.
Also served by Audit Service at http://localhost:8013.
Also served by Feature Flags Service at http://localhost:8014.
Response
Successful Response
Platform Utilities / Audit Logs
Shared endpoints served by multiple services
List Audit Logs
Also served by Audit Service at http://localhost:8013.
Parameters
limitinteger10queryskipinteger0queryactionstring | nullquerysearchstring | nullqueryuser_idstring | nullqueryservice_namestring | nullqueryFilter by service name
resource_typestring | nullqueryFilter by resource type
categorystring | nullqueryFilter by event category
date_fromstring | nullqueryFilter from date (ISO format)
date_tostring | nullqueryFilter to date (ISO format)
Response
Successful Response
Validation Error
Authorization
OAuth2PasswordBeareroauth2Models
Backend_AppConfigurationDto
objectis_multi_tenant_enabledbooleanrequiredmulti_tenancy_strategystringrequiredhost_main_domainstringrequiredis_user_logged_inboolean | nullfalseuser_preferencesBackend_UserPreferenceDto | nullcurrent_tenantBackend_TenantDto | nullenvironmentstringrequiredruntime_security_configBackend_RuntimeSecurityConfigConfigDto | nulltenant_data_governancesArray<Backend_TenantDataGovernanceConfigDto> | nullmobile_security_policyBackend_DeprecatedMobileSecurityPolicyConfigDto | nullBackend_AppVersionCheckResponseDto
objectlatest_versionstringrequired2.1.0download_urlstring | nullchecksum_sha256string | nullmin_versionstring | nullrelease_notesstring | nullBackend_AuditEventIngestRequest
objectClient-originated audit event relayed to the centralized audit-service.
Mirrors the schema the browser sends via the generated AuditLogsService (createAuditLog). Unknown fields are preserved (extra="allow") so the relay forwards the payload faithfully to the audit-service, which owns validation.
event_idstring | nullevent_typestring | nulllog_schema_versionstring | null1.0service_namestringfrontendactionstringrequiredactor_typestring | nullactor_idstring | nullactor_emailstring | nulltenant_idstring | nullresource_typestring | nullresource_idstring | nullstatusstring | nullsuccessip_addressstring | nulluser_agentstring | nullrequest_idstring | nulltrace_idstring | nullparent_trace_idstring | nullhttp_methodstring | nullhttp_pathstring | nullhttp_statusinteger | nullduration_msinteger | nullmetadataobject | nullevent_idempotency_keystring | nulldata_classificationstring | nullBackend_AuditLogDto
objectidstring | nullentitystringrequiredservice_namestring | nullactionstringcreateupdatedeletereadloginlogouterrordownloadrequiredchangesobjectuser_idstring | nulltimestampstringtenant_idstring | nullactor_namestring | nullactor_emailstring | nullresource_idstring | nullresource_namestring | nullcategorystring | nullseveritystring | nulldescriptionstring | nullfailure_reasonstring | nullcorrelation_idstring | nullstatusstring | nullip_addressstring | nulluser_agentstring | nullevent_typestring | nullBackend_AuditLogListDto
objecttotalintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredlimitintegerrequiredskipintegerrequiredBackend_AuthenticatorTransport
stringHow an authenticator communicates to the client/browser.
Members:
USB: USB wired connection
NFC: Near Field Communication
BLE: Bluetooth Low Energy
INTERNAL: Direct connection (read: a platform authenticator)
CABLE: Cloud Assisted Bluetooth Low Energy
HYBRID: A combination of (often separate) data-transport and proximity mechanisms
Backend_BillingAddressDto
objectindividual_namestringrequiredbusiness_namestring | nullline1stringrequiredline2string | nullcitystringrequiredstatestringrequiredpostal_codestringrequiredcountrystringrequiredBackend_BillingRecordDto
objectidstringrequiredcreated_atstringrequiredscopestringhosttenantrequiredactorstringtenantend_userrequireduser_idstring | nulluser_namestring | nulluser_emailstring | nullpayment_typestringrequiredcurrencystringrequiredamountinteger | nullamount_formattedstring | nullstripe_customer_idstring | nullstripe_subscription_idstring | nullstripe_session_idstring | nullstripe_invoice_idstring | nullstripe_payment_intent_idstring | nullproduct_idstring | nullprice_idstring | nullstatusstringpendingrequires_payment_methodrequires_actionactivesucceededpayment_failedcanceledincompleterequiredcurrent_period_endstring | nullcanceled_atstring | nullcancellation_reasonstring | nullinvoice_urlstring | nullinvoice_pdf_urlstring | nullreceipt_urlstring | nullmetadataobject | nullBackend_BillingRecordListDto
objectskipintegerrequiredlimitintegerrequiredtotalintegerrequiredhas_previousbooleanrequiredhas_nextbooleanrequiredBackend_Body_bulk_upload_users_api_v1_users_bulk_upload_post
objecttenant_idstringrequiredTenant ID to add users to
default_role_idstring | nullDefault role ID for new users
default_role_namestring | nullDefault role name for new users (e.g., 'Admin', 'User')
send_invitationbooleantrueWhether to send invitation emails
filestring<binary>requiredCSV or Excel file with user data
Backend_Body_login_api_v1_account_login_post
objectgrant_typestring | nullusernamestringrequiredpasswordstring<password>requiredscopestringclient_idstring | nullclient_secretstring | null<password>Backend_Body_login_host_admin_api_v1_account_login_host_admin_post
objectgrant_typestring | nullusernamestringrequiredpasswordstring<password>requiredscopestringclient_idstring | nullclient_secretstring | null<password>Backend_Body_login_new_api_v1_account_login_new_post
objectgrant_typestring | nullusernamestringrequiredpasswordstring<password>requiredscopestringclient_idstring | nullclient_secretstring | null<password>Backend_Body_login_super_admin_api_v1_account_login_super_admin_post
objectgrant_typestring | nullusernamestringrequiredpasswordstring<password>requiredscopestringclient_idstring | nullclient_secretstring | null<password>Backend_Body_passkey_login_api_v1_account_passkey_login_post
objectemailstring<email>requiredcredentialobjectrequiredBackend_Body_passkey_register_api_v1_account_passkey_register_post
objectemailstring<email>requiredcredentialobjectrequiredBackend_Body_update_profile_picture_api_v1_users__user_id__update_profile_picture_put
objectfilestring<binary>requiredBackend_BulkUserUploadResponseDto
objectDTO for bulk user upload response
totalintegerrequiredsuccessintegerrequiredfailedintegerrequiredBackend_BulkUserUploadResultDto
objectDTO for individual user upload result
emailstringrequiredsuccessbooleanrequireduser_idstring | nullmessagestringrequirederrorstring | nullBackend_CeleryMetricsDto
objectworkers_onlineintegerrequiredactive_tasksintegerrequiredscheduled_tasksintegerrequiredreserved_tasksintegerrequiredworker_detailsobjectrequiredBackend_CheckoutRequestDto
objectprice_idstringrequiredtenant_idstring | nullmodestringpaymentsubscriptionsetupsubscriptionemailstring<email>requiredBackend_CompleteIncompletePaymentRequestDto
objectsubscription_idstringrequiredtenant_idstringrequiredBackend_CreateNativeSubscriptionRequestDto
objectprice_idstringrequiredtenant_idstringrequiredmodestringsubscriptionpaymentsubscriptionemailstringrequiredBackend_CreatePlanDto
objectcurrencystringusdMust be a supported currency: https://docs.stripe.com/currencies
intervalstringmonthyearrequiredproduct_idstringrequiredThe product whose pricing the created plan will represent. This must be the ID of an existing product.
amountintegerrequiredtrial_period_daysinteger | nullNumber of days for the trial period. Set > 0 to enable trials.
Backend_CreatePricingDto
objectcurrencystringusdCurrency code, e.g., 'usd'
unit_amountintegerrequiredA positive integer in cents (or 0 for a free price) representing how much to charge. One of unit_amount, unit_amount_decimal, or custom_unit_amount is required, unless billing_scheme=tiered.
productstringrequiredThe ID of the product this price is associated with
activebooleantrueWhether the price is active or not
Backend_CreateProductDto
objectnamestringrequireddescriptionstring | nulltax_codestring | nullactivebooleantrueBackend_CreateRoleDto
objectnamestringrequireddescriptionstring | nulltenant_idstring | nullpermissionsArray<Backend_Permission>super:adminfull:accessuser:read_and_write_onlyuser:delete_onlyuser:self_read_and_write_onlyuser:role_assign_or_remove_onlyuser:view_onlyrole:view_onlyrole:read_and_write_onlyrole:delete_onlyrole:permission_read_and_write_onlyhost:manage_tenantsmanage:storage_settingsmanage:tenant_settingsmanage:billingmanage:payments_settingsmanage:products_and_pricingaudit_logs:view_onlyaudit_logs:downloadaudit_logs:writecompliance:manageforms:renderforms:previewforms:render_anonymousforms:submitforms:submit_anonymousforms:submit_offlineforms:draft_createforms:draft_readforms:draft_updateforms:draft_deleteforms:draft_read_allforms:session_createforms:session_readforms:session_deleteforms:session_read_allforms:config_readforms:config_writeforms:analytics_viewforms:analytics_exportforms:admindashboard:viewdashboard:readdashboard:createdashboard:updatedashboard:deletebilling:readconfig:readconfig:writesurvey:managesurvey:createsurvey:readsurvey:updatesurvey:deletesurvey:publishsurvey:unpublishsurvey:grant_accesssurvey:manage_accesssurvey:response_viewsurvey:response_downloadtemplate:readtemplate:createtemplate:updatetemplate:deletetemplate:managesubmission:createsubmission:readsubmission:updatesubmission:update_ownsubmission:deletesubmission:viewsubmission:exportsubmission:approvesubmission:assignworkspace:createworkspace:readworkspace:updateworkspace:deleteworkspace:manageworkspace:manage_membersproject:createproject:readproject:updateproject:deleteproject:manageanalytics:viewanalytics:exportanalytics:adminreport:viewreport:createexport:createexport:viewexport:downloadexport:cancelexport:template:createexport:template:viewwebhook:createwebhook:readwebhook:updatewebhook:deletewebhook:managesearch:executesearch:managenotification:sendnotification:viewnotification:read_allnotification:deletenotification:managenotification:template:viewnotification:template:createnotification:template:updatenotification:template:deletenotification:preferences:readnotification:preferences:writemedia:uploadmedia:readmedia:updatemedia:deletemedia:library_uploadmedia:library_readmedia:library_deletemedia:managefeature_flag:readfeature_flag:createfeature_flag:updatefeature_flag:deletefeature_flag:toggleresponse:createresponse:readresponse:updateresponse:deleteresponse:exportresponse:approveresponse:revise_ownattachment:createattachment:readattachment:deleteodk:viewodk:submitodk:manageis_immutablebooleanfalseBackend_CreateTenantDataGovernanceDto
objecttenant_idstringrequiredmax_offline_duration_hoursinteger>= 00force_revalidation_hoursinteger>= 00media_upload_max_size_mbinteger[1, 500]50media_upload_allowed_typesArray<any> | nulllocal_retention_daysinteger>= 00remote_wipe_enabledbooleanfalseBackend_CreateTenantDto
objectnamestringrequiredsubdomainstringrequiredadmin_emailstring<email>requiredadmin_passwordstringrequiredfirst_namestringrequiredlast_namestring | nullBackend_CreateUserDto
objectfirst_namestringrequiredlast_namestring | nullemailstring<email>requiredgenderBackend_Gender | nullprefer_not_to_saytenant_idstring | nullrole_idstring | nullpasswordstringrequiredsub_domainstring | nullagreed_to_termsbooleantrueBackend_DashboardMetricsDto
objectfilterstringtodaythis_weeklast_3_monthsallrequiredjoined_usersintegerrequiredtotal_usersintegerrequiredBackend_DeprecatedMobileSecurityPolicyConfigDto
objectDEPRECATED: For old mobile clients. Remove after migration window.
global_modestringwarningscreenshot_prevention_modestringdisabledroot_detection_modestringwarningmax_offline_duration_hoursinteger0force_revalidation_hoursinteger0media_upload_max_size_mbinteger50media_upload_allowed_typesArray<any> | nullwifi_only_syncbooleanfalsebattery_aware_syncbooleanfalsebattery_low_threshold_percentinteger20block_sync_on_roamingbooleanfalselocal_retention_daysinteger0remote_wipe_enabledbooleanfalsebiometric_required_modestringdisabledsession_timeout_minutesinteger0Backend_DeprecatedMobileSecurityPolicyDto
objectBackward-compatible adapter for old mobile clients.
Maps from RuntimeSecurityConfig + TenantDataGovernance into the old monolithic MobileSecurityPolicyDto format. This is TEMPORARY — remove after migration window.
DEPRECATED: Use RuntimeSecurityConfigDto + TenantDataGovernanceDto instead.
idstring | nulltenant_idstringrequiredglobal_modestringwarningscreenshot_prevention_modestringdisabledroot_detection_modestringwarningbiometric_required_modestringdisabledsession_timeout_minutesinteger0wifi_only_syncbooleanfalsebattery_aware_syncbooleanfalsebattery_low_threshold_percentinteger20block_sync_on_roamingbooleanfalsemax_offline_duration_hoursinteger0force_revalidation_hoursinteger0media_upload_max_size_mbinteger50media_upload_allowed_typesArray<any> | nulllocal_retention_daysinteger0remote_wipe_enabledbooleanfalseBackend_EnterpriseSignupDto
objectnamestring | nullemailstring<email>requiredcompanystring | nullphonestring | nullmessagestring | nulltenant_idstring | nullBackend_FrontendLogEntry
objectFrontend log entry model
timestampstringrequiredlevelstringrequiredmessagestringrequiredcontextobject | nullstackstring | nulluserAgentstring | nullurlstring | nulluserIdstring | nulltenantIdstring | nullBackend_HealthCheckResponseDto
objectstatusstringrequiredOkpostgres_statusstring | nullredis_statusstring | nullBackend_IncidentDto
objectidstringrequiredtypestringrequiredseveritystringcriticalwarninginforequiredmessagestringrequiredtenant_idstring | nullrequiredcreated_atstring<date-time>requiredBackend_InfrastructureMetricsDto
objectcelery_queue_sizeintegerrequiredredis_memory_mbnumberrequireddb_connectionsintegerrequiredstorage_used_gbnumberrequiredwebhook_failuresintegerrequiredBackend_InvoiceDto
objectidstringrequiredamount_dueinteger0amount_paidinteger0amount_remaininginteger0amount_overpaidinteger0attempt_countinteger0attemptedbooleanfalseauto_advancebooleanfalsebilling_reasonstring | nullcollection_methodstring | nullcreatedintegerrequiredcurrencystringusdcustomerstring | nullcustomer_namestring | nullstatusstringopentotalinteger0receipt_numberstring | nullamount_countrystring | nullaccount_namestring | nullinvoice_pdfstring | nullhosted_invoice_urlstring | nullBackend_InvoiceListDto
objecttotalintegerrequiredskipinteger0limitinteger10has_nextbooleanfalsehas_previousbooleanfalseBackend_LoginResponseDto
objectResponse after successful login with tenant selection info
User information returned after login
requires_tenant_selectionbooleanrequiredis_super_adminbooleanrequiredmessagestringLogin successfultokenstring | nullrefresh_tokenstring | nullBackend_MeResponseDto
objectidstringrequiredfirst_namestringrequiredlast_namestring | nullemailstring<email>requiredrole_idstring | nullrole_namestring | nullis_activebooleanrequiredmember_activebooleantrueactivated_atstring | nullimage_urlstring | nulluser_codestring | nullcreated_atstringrequiredupdated_atstringrequiredtenant_idstring | nullpermissionsArray<string> | nullagreed_to_termsbooleanfalsesubscriptionBackend_SubscriptionPlanDto | nullrequiredBackend_NativeSubscriptionResponseDto
objectclient_secretstringrequiredsubscription_idstringrequiredcustomer_idstringrequiredbilling_record_idstringrequiredis_upgradebooleanfalserequires_confirmationbooleantrueBackend_OSMetricsDto
objectcpu_percentnumberrequiredmemory_percentnumberrequiredmemory_total_mbnumberrequiredmemory_used_mbnumberrequiredBackend_PaymentMethodCardDto
objectbrandstringrequiredlast4stringrequiredexp_monthintegerrequiredexp_yearintegerrequiredcountrystring | nullBackend_PaymentMethodDto
objectidstringrequiredtypestringrequiredcardBackend_PaymentMethodCardDto | nullcreatedintegerrequiredis_defaultbooleanfalseBackend_Permission
stringBackend_PermissionCategory
stringLogical grouping of permissions.
Backend_PermissionDangerLevel
stringCategorizes permissions by potential system impact.
Backend_PermissionDto
objectnamestringrequireddisplay_namestring | nulldescriptionstring | nullcategoryBackend_PermissionCategory | nulldanger_levelBackend_PermissionDangerLevellowmediumhighdangerouslowCategorizes permissions by potential system impact.
Backend_PermissionGroupedDto
objectcategoryBackend_PermissionCategoryUser ManagementRole ManagementSurvey ManagementForm ManagementResponse ManagementWorkspace ManagementAnalyticsReportingExportNotificationMediaSystemBillingFeature FlagsComplianceAuditPlatformrequiredLogical grouping of permissions.
Backend_PlanDto
objectidstringrequiredactivebooleanrequiredamountintegerrequiredamount_decimalstringrequiredbilling_schemestringrequiredcurrencystringusdintervalstringrequiredinterval_countintegerrequiredproductstringrequiredtrial_period_daysinteger | nullusage_typestringrequiredBackend_PlanListDto
objecttotalintegerrequiredskipinteger0limitinteger10has_nextbooleanfalsehas_previousbooleanfalseBackend_PlatformHealthDto
objectstatusstringhealthydegradeddownrequiredapi_uptime_secondsnumberrequiredlast_incident_atstring | nullrequiredactive_incidentsintegerrequiredBackend_PricingDto
objectidstringrequiredcurrencystringrequiredunit_amountintegerrequiredproductstringrequiredactivebooleanrequiredtax_behaviorstringrequiredtypestringrequiredunit_amount_decimalstringrequiredBackend_ProductDto
objectidstringrequirednamestringrequireddescriptionstring | nulltax_codestring | nullactivebooleanrequiredBackend_ProvisionUserDto
objectDTO for provisioning a user to a tenant (create or invite)
emailstring<email>requiredrole_idstringrequiredpasswordstring | nullfirst_namestring | nulllast_namestring | nullgenderBackend_Gender | nullBackend_ProvisionUserResponseDto
objectResponse DTO for user provisioning
idstringrequiredstatusstringrequiredmessagestringrequiredBackend_RecurringDto
objectintervalstringdayweekmonthyearmonthBilling interval, e.g., 'month'
interval_countinteger1Number of intervals between each billing cycle
usage_typestringlicensedmeteredlicensedConfigures how the quantity per period should be determined. Can be either metered or licensed. licensed automatically bills the quantity set when adding it to a subscription. metered aggregates the total usage based on usage records. Defaults to licensed.
Backend_RegisteredPasskeyCredentialsDto
objectcredential_idstringrequiredpublic_keystringrequiredsigin_countintegerrequiredtransportsArray<Backend_AuthenticatorTransport>usbnfcblesmart-cardinternalcablehybridcreated_atstring<date-time>requiredlast_used_atstring | nullBackend_RoleDto
objectidstringrequirednamestringrequireddescriptionstring | nullrequiredpermissionsArray<Backend_Permission>super:adminfull:accessuser:read_and_write_onlyuser:delete_onlyuser:self_read_and_write_onlyuser:role_assign_or_remove_onlyuser:view_onlyrole:view_onlyrole:read_and_write_onlyrole:delete_onlyrole:permission_read_and_write_onlyhost:manage_tenantsmanage:storage_settingsmanage:tenant_settingsmanage:billingmanage:payments_settingsmanage:products_and_pricingaudit_logs:view_onlyaudit_logs:downloadaudit_logs:writecompliance:manageforms:renderforms:previewforms:render_anonymousforms:submitforms:submit_anonymousforms:submit_offlineforms:draft_createforms:draft_readforms:draft_updateforms:draft_deleteforms:draft_read_allforms:session_createforms:session_readforms:session_deleteforms:session_read_allforms:config_readforms:config_writeforms:analytics_viewforms:analytics_exportforms:admindashboard:viewdashboard:readdashboard:createdashboard:updatedashboard:deletebilling:readconfig:readconfig:writesurvey:managesurvey:createsurvey:readsurvey:updatesurvey:deletesurvey:publishsurvey:unpublishsurvey:grant_accesssurvey:manage_accesssurvey:response_viewsurvey:response_downloadtemplate:readtemplate:createtemplate:updatetemplate:deletetemplate:managesubmission:createsubmission:readsubmission:updatesubmission:update_ownsubmission:deletesubmission:viewsubmission:exportsubmission:approvesubmission:assignworkspace:createworkspace:readworkspace:updateworkspace:deleteworkspace:manageworkspace:manage_membersproject:createproject:readproject:updateproject:deleteproject:manageanalytics:viewanalytics:exportanalytics:adminreport:viewreport:createexport:createexport:viewexport:downloadexport:cancelexport:template:createexport:template:viewwebhook:createwebhook:readwebhook:updatewebhook:deletewebhook:managesearch:executesearch:managenotification:sendnotification:viewnotification:read_allnotification:deletenotification:managenotification:template:viewnotification:template:createnotification:template:updatenotification:template:deletenotification:preferences:readnotification:preferences:writemedia:uploadmedia:readmedia:updatemedia:deletemedia:library_uploadmedia:library_readmedia:library_deletemedia:managefeature_flag:readfeature_flag:createfeature_flag:updatefeature_flag:deletefeature_flag:toggleresponse:createresponse:readresponse:updateresponse:deleteresponse:exportresponse:approveresponse:revise_ownattachment:createattachment:readattachment:deleteodk:viewodk:submitodk:manageis_immutablebooleanfalsecreated_atstring | nullupdated_atstring | nulltenant_idstring | nullscopeBackend_RoleScopeplatformsystemtenant_customtenant_customDefines where a role can be used.
users_countinteger0Backend_RoleListDto
objectskipintegerrequiredlimitintegerrequiredtotalintegerrequiredhas_previousbooleanrequiredhas_nextbooleanrequiredBackend_RuntimeSecurityConfigConfigDto
objectscreenshot_prevention_modestringdisabledroot_detection_modestringwarningbiometric_required_modestringdisabledsession_timeout_minutesinteger0wifi_only_syncbooleanfalsebattery_aware_syncbooleanfalsebattery_low_threshold_percentinteger20block_sync_on_roamingbooleanfalsebackground_sync_enabledbooleantruecrash_reporting_enabledbooleantruetelemetry_enabledbooleantrueglobal_modestringwarningversion_idstring | nullBackend_RuntimeSecurityConfigDto
objectidstringsystem_defaultscreenshot_prevention_modestringstrictwarningdisableddisabledroot_detection_modestringstrictwarningdisabledwarningbiometric_required_modestringstrictwarningdisableddisabledsession_timeout_minutesinteger0wifi_only_syncbooleanfalsebattery_aware_syncbooleanfalsebattery_low_threshold_percentinteger20block_sync_on_roamingbooleanfalsebackground_sync_enabledbooleantruecrash_reporting_enabledbooleantruetelemetry_enabledbooleantrueglobal_modestringstrictwarningdisabledwarningversion_idstring | nullupdated_atstring | nullupdated_bystring | nullBackend_SubmissionMetricsDto
objectsubmissions_todayintegerrequiredsubmissions_this_weekintegerrequiredsubmissions_this_monthintegerrequiredsubmissions_trendArray<object>requiredBackend_SubscriptionMetricsDto
objectmrrnumberrequiredactive_subscriptionsintegerrequiredtrials_runningintegerrequiredcancelled_this_monthintegerrequiredplans_breakdownobjectrequiredBackend_SubscriptionPlanDto
objectidstringrequiredplan_levelsobjectrequirede.g., {'basic': 0, 'pro': 1, 'enterprise': 2}
is_trialbooleanrequiredIndicates if the subscription is a trial
tenant_idstring | nullrequiredThe tenant who owns the subscription
actorstringrequiredwho it is applied to, If end_user, then user_id must be set
user_idstring | nullrequiredThe end user who has this subscription, if applicable
plan_idstringrequiredCorresponding Stripe Price ID
plan_namestring | nullPlan name like Free, Starter, Pro, Enterprise
stripe_subscription_statusstring | nullStripe subscription status: active, trialing, incomplete, past_due, etc.
trial_end_atstring | nullTrial end date if applicable
Backend_SwitchTenantResponseDto
objectResponse after switching tenant with new tokens and context
access_tokenstringrequiredtoken_typestringbearerexpires_inintegerrequiredrefresh_tokenstringrequiredrefresh_token_expires_inintegerrequiredUser information returned after login
Tenant information for selection
previous_tenant_idstring | nullmessagestringTenant switched successfullyBackend_TenantAccessUpdateDto
objectDTO for updating a user's per-tenant access (activate/deactivate in the active tenant)
is_activebooleanrequiredBackend_TenantActivityDto
objecttenant_idstringrequiredtenant_namestringrequiredsubdomainstringrequiredplanstringrequiredusers_countintegerrequiredsurveys_countintegerrequiredsubmissions_countintegerrequiredlast_activity_atstring | nullrequiredstatusstringactiveidlesuspendedemptyrequiredBackend_TenantDataGovernanceConfigDto
objecttenant_idstringrequiredmax_offline_duration_hoursinteger0force_revalidation_hoursinteger0media_upload_max_size_mbinteger50media_upload_allowed_typesArray<string> | nulllocal_retention_daysinteger0remote_wipe_enabledbooleanfalseversion_idstring | nullBackend_TenantDataGovernanceDto
objectidstring | nulltenant_idstringrequiredmax_offline_duration_hoursinteger0force_revalidation_hoursinteger0media_upload_max_size_mbinteger50media_upload_allowed_typesArray<any> | nulllocal_retention_daysinteger0remote_wipe_enabledbooleanfalseversion_idstring | nullBackend_TenantDataGovernanceResponseDto
objectmessagestringrequiredgovernanceBackend_TenantDataGovernanceDto | nullBackend_TenantDto
objectidstring | nullrequirednamestringrequiredsubdomainstring | nullrequiredis_activebooleanrequiredcustom_domainstring | nullrequiredcustom_domain_statusstringactivefailedactivation-progressfailedfeaturesArray<Backend_FeatureDto>subscription_idstring | nullrequiredplan_tierstringfreeis_trialbooleanfalsetrial_end_atstring | nullhas_had_trialbooleanfalseis_dormantbooleanfalsebilling_individual_namestring | nullbilling_business_namestring | nullbilling_address_line1string | nullbilling_address_line2string | nullbilling_address_citystring | nullbilling_address_statestring | nullbilling_address_postal_codestring | nullbilling_address_countrystring | nulltax_idstring | nullBackend_TenantInfoDto
objectTenant information for selection
idstringrequirednamestringrequiredsubdomainstring | nullcustom_domainstring | nulllogo_urlstring | nullroleBackend_RoleDto | nullBackend_TenantInvoiceExportDto
objectidstringrequiredinvoice_numberstring | nullcreatedintegerrequireddue_dateinteger | nullstatusstringopencurrencystringusdamount_dueinteger0amount_paidinteger0tax_amountinteger0totalinteger0billing_reasonstring | nullcustomer_namestring | nulltenant_namestring | nulltenant_tax_idstring | nullinvoice_pdfstring | nullhosted_invoice_urlstring | nullline_itemsArray<Backend_TenantInvoiceLineItemDto>Backend_TenantInvoiceLineItemDto
objectdescriptionstring | nullquantityinteger1unit_amountinteger0amountinteger0currencystringusdBackend_TenantInvoiceListDto
objecttotalintegerrequiredskipinteger0limitinteger10has_nextbooleanfalsehas_previousbooleanfalseBackend_TenantListDto
objectskipintegerrequiredlimitintegerrequiredtotalintegerrequiredhas_previousbooleanrequiredhas_nextbooleanrequiredBackend_TenantMetricsDto
objecttotal_tenantsintegerrequiredactive_tenants_30dintegerrequirednew_tenants_this_monthintegerrequiredsuspended_tenantsintegerrequiredBackend_TenantPlanContextResponseDto
objecttenant_idstringrequiredtierstringrequirednamestringrequiredsubscription_statusstringinactiveis_activebooleanfalseis_trialbooleanfalsetrial_end_atstring | nullis_dormantbooleanfalsefeaturesArray<object>Backend_TenantSelectionRequestDto
objectRequest to select a tenant and get tokens
tenant_idstringrequiredBackend_TenantSelectionResponseDto
objectResponse after tenant selection with tokens
access_tokenstringrequiredtoken_typestringbearerexpires_inintegerrequiredrefresh_tokenstringrequiredrefresh_token_expires_inintegerrequiredUser information returned after login
tenantBackend_TenantInfoDto | nullBackend_TokenSetDto
objectrefresh_tokenstringrequiredrefresh_token_expires_inintegerrequiredaccess_tokenstringrequiredtoken_typestringrequiredexpires_inintegerrequiredBackend_UpdateRoleDto
objectnamestringrequireddescriptionstring | nulltenant_idstring | nullpermissionsArray<Backend_Permission>super:adminfull:accessuser:read_and_write_onlyuser:delete_onlyuser:self_read_and_write_onlyuser:role_assign_or_remove_onlyuser:view_onlyrole:view_onlyrole:read_and_write_onlyrole:delete_onlyrole:permission_read_and_write_onlyhost:manage_tenantsmanage:storage_settingsmanage:tenant_settingsmanage:billingmanage:payments_settingsmanage:products_and_pricingaudit_logs:view_onlyaudit_logs:downloadaudit_logs:writecompliance:manageforms:renderforms:previewforms:render_anonymousforms:submitforms:submit_anonymousforms:submit_offlineforms:draft_createforms:draft_readforms:draft_updateforms:draft_deleteforms:draft_read_allforms:session_createforms:session_readforms:session_deleteforms:session_read_allforms:config_readforms:config_writeforms:analytics_viewforms:analytics_exportforms:admindashboard:viewdashboard:readdashboard:createdashboard:updatedashboard:deletebilling:readconfig:readconfig:writesurvey:managesurvey:createsurvey:readsurvey:updatesurvey:deletesurvey:publishsurvey:unpublishsurvey:grant_accesssurvey:manage_accesssurvey:response_viewsurvey:response_downloadtemplate:readtemplate:createtemplate:updatetemplate:deletetemplate:managesubmission:createsubmission:readsubmission:updatesubmission:update_ownsubmission:deletesubmission:viewsubmission:exportsubmission:approvesubmission:assignworkspace:createworkspace:readworkspace:updateworkspace:deleteworkspace:manageworkspace:manage_membersproject:createproject:readproject:updateproject:deleteproject:manageanalytics:viewanalytics:exportanalytics:adminreport:viewreport:createexport:createexport:viewexport:downloadexport:cancelexport:template:createexport:template:viewwebhook:createwebhook:readwebhook:updatewebhook:deletewebhook:managesearch:executesearch:managenotification:sendnotification:viewnotification:read_allnotification:deletenotification:managenotification:template:viewnotification:template:createnotification:template:updatenotification:template:deletenotification:preferences:readnotification:preferences:writemedia:uploadmedia:readmedia:updatemedia:deletemedia:library_uploadmedia:library_readmedia:library_deletemedia:managefeature_flag:readfeature_flag:createfeature_flag:updatefeature_flag:deletefeature_flag:toggleresponse:createresponse:readresponse:updateresponse:deleteresponse:exportresponse:approveresponse:revise_ownattachment:createattachment:readattachment:deleteodk:viewodk:submitodk:manageis_immutablebooleanfalseBackend_UpdateRolePermissionsDto
objectpermissionsArray<Backend_Permission>super:adminfull:accessuser:read_and_write_onlyuser:delete_onlyuser:self_read_and_write_onlyuser:role_assign_or_remove_onlyuser:view_onlyrole:view_onlyrole:read_and_write_onlyrole:delete_onlyrole:permission_read_and_write_onlyhost:manage_tenantsmanage:storage_settingsmanage:tenant_settingsmanage:billingmanage:payments_settingsmanage:products_and_pricingaudit_logs:view_onlyaudit_logs:downloadaudit_logs:writecompliance:manageforms:renderforms:previewforms:render_anonymousforms:submitforms:submit_anonymousforms:submit_offlineforms:draft_createforms:draft_readforms:draft_updateforms:draft_deleteforms:draft_read_allforms:session_createforms:session_readforms:session_deleteforms:session_read_allforms:config_readforms:config_writeforms:analytics_viewforms:analytics_exportforms:admindashboard:viewdashboard:readdashboard:createdashboard:updatedashboard:deletebilling:readconfig:readconfig:writesurvey:managesurvey:createsurvey:readsurvey:updatesurvey:deletesurvey:publishsurvey:unpublishsurvey:grant_accesssurvey:manage_accesssurvey:response_viewsurvey:response_downloadtemplate:readtemplate:createtemplate:updatetemplate:deletetemplate:managesubmission:createsubmission:readsubmission:updatesubmission:update_ownsubmission:deletesubmission:viewsubmission:exportsubmission:approvesubmission:assignworkspace:createworkspace:readworkspace:updateworkspace:deleteworkspace:manageworkspace:manage_membersproject:createproject:readproject:updateproject:deleteproject:manageanalytics:viewanalytics:exportanalytics:adminreport:viewreport:createexport:createexport:viewexport:downloadexport:cancelexport:template:createexport:template:viewwebhook:createwebhook:readwebhook:updatewebhook:deletewebhook:managesearch:executesearch:managenotification:sendnotification:viewnotification:read_allnotification:deletenotification:managenotification:template:viewnotification:template:createnotification:template:updatenotification:template:deletenotification:preferences:readnotification:preferences:writemedia:uploadmedia:readmedia:updatemedia:deletemedia:library_uploadmedia:library_readmedia:library_deletemedia:managefeature_flag:readfeature_flag:createfeature_flag:updatefeature_flag:deletefeature_flag:toggleresponse:createresponse:readresponse:updateresponse:deleteresponse:exportresponse:approveresponse:revise_ownattachment:createattachment:readattachment:deleteodk:viewodk:submitodk:manageBackend_UpdateRuntimeSecurityConfigDto
objectscreenshot_prevention_modestring | nullroot_detection_modestring | nullbiometric_required_modestring | nullsession_timeout_minutesinteger | nullwifi_only_syncboolean | nullbattery_aware_syncboolean | nullbattery_low_threshold_percentinteger | nullblock_sync_on_roamingboolean | nullbackground_sync_enabledboolean | nullcrash_reporting_enabledboolean | nulltelemetry_enabledboolean | nullglobal_modestring | nullBackend_UpdateTenantDataGovernanceDto
objectmax_offline_duration_hoursinteger | nullforce_revalidation_hoursinteger | nullmedia_upload_max_size_mbinteger | nullmedia_upload_allowed_typesArray<any> | nulllocal_retention_daysinteger | nullremote_wipe_enabledboolean | nullBackend_UpdateTenantDto
objectis_activeboolean | nullis_dormantboolean | nullcustom_domainstring | nullsubscription_idstring | nullplan_tierstring | nullcustom_domain_statusstring | nullbilling_individual_namestring | nullbilling_business_namestring | nullbilling_address_line1string | nullbilling_address_line2string | nullbilling_address_citystring | nullbilling_address_statestring | nullbilling_address_postal_codestring | nullbilling_address_countrystring | nulltax_idstring | nullBackend_UpdateUserDto
objectfirst_namestring | nulllast_namestring | nullemailstring | nullgenderBackend_Gender | nullimage_urlstring | nullrole_idstring | nullis_activeboolean | nullactivated_atstring | nulltenant_idstring | nullpasswordstring | nullBackend_UserDto
objectidstringrequiredfirst_namestringrequiredlast_namestring | nullemailstring<email>requiredrole_idstring | nullrole_namestring | nullis_activebooleanrequiredmember_activebooleantrueactivated_atstring | nullimage_urlstring | nulluser_codestring | nullcreated_atstringrequiredupdated_atstringrequiredtenant_idstring | nullpermissionsArray<string> | nullagreed_to_termsbooleanfalseBackend_UserInfoDto
objectUser information returned after login
idstringrequiredemailstringrequiredfirst_namestringrequiredlast_namestring | nullimage_urlstring | nullis_activebooleanrequiredactivated_atstring | nullroleBackend_RoleDto | nulluser_codestring | nullBackend_UserListDto
objectskipintegerrequiredlimitintegerrequiredtotalintegerrequiredhas_previousbooleanrequiredhas_nextbooleanrequiredBackend_UserMetricsDto
objecttotal_usersintegerrequiredactive_users_30dintegerrequirednew_users_this_monthintegerrequiredBackend_UserResendActivationEmailRequestDto
objectemailstring<email>requiredidstringrequiredfirst_namestringrequiredtenant_idstring | nullBackend_UserTenantCreateDto
objectDTO for creating user-tenant relationship
user_idstringrequiredtenant_idstringrequiredrole_idstring | nullis_primarybooleanfalseis_activebooleantrueBackend_UserTenantDto
objectDTO for user-tenant relationship
idstringrequireduser_idstringrequiredtenant_idstringrequiredtenant_namestring | nullrole_idstring | nullrole_namestring | nullpermissionsArray<string>is_primarybooleanrequiredis_activebooleantruejoined_atstringrequiredBackend_UserTenantListDto
objectDTO for listing user tenants
totalintegerrequiredskipinteger0limitinteger10has_nextbooleanfalsehas_previousbooleanfalseBackend_UserTenantUpdateDto
objectDTO for updating user-tenant relationship
role_idstring | nullis_primaryboolean | nullis_activeboolean | nullSurveyService_AddQuestionToSurveyResponse
objectsurvey_idstringrequiredquestion_idstringrequiredquestion_namestringrequiredquestionobjectrequiredSurveyService_AvailableTriggersResponse
objectResponse model for available trigger values with assignment info.
trigger_questionsArray<string>requiredavailable_valuesobjectrequiredassigned_valuesobjectrequiredSurveyService_BackfillAnchorSchema
objectAnchor configuration for timeline-aware backfill
typestringrequiredAnchor type
questionstring | nullQuestion name (for from_answer_month type)
rule_idstring | nullRule ID to anchor to (for before_rule/after_rule types)
SurveyService_Body_import_questions_api_v1_surveys_question_bank_questions_import_post
objectfilestringrequiredcategory_idstring | nullSurveyService_Body_import_template_from_xlsform_api_v1_templates_import_xlsform_post
objectfilestringrequiredXLSForm Excel file (.xlsx)
namestringrequiredTemplate name
category_idstringrequiredTemplate category ID
descriptionstring | nullTemplate description
is_publicbooleanfalseWhether the template is public
SurveyService_Body_import_xlsform_api_v1_surveys_import_xlsform_post
objectfilestringrequiredXLSForm Excel file (.xlsx)
namestringrequiredSurvey name
descriptionstring | nullSurvey description
project_idstring<uuid>requiredProject ID from workspace-service
workspace_idstring<uuid>requiredWorkspace ID for the project
is_anonymousbooleanfalseWhether responses are anonymous
allow_multiple_responsesbooleanfalseAllow multiple responses per user
scheduling_enabledbooleanfalseEnable survey scheduling (auto open/close)
open_atstring | nullScheduled open timestamp (ISO 8601)
close_atstring | nullScheduled close timestamp (ISO 8601)
SurveyService_Body_upload_survey_media_api_v1_surveys__survey_id__media_post
objectfilestringrequiredZIP file containing media assets
SurveyService_Body_upload_xlsform_as_new_version_api_v1_surveys__survey_id__versions_upload_post
objectfilestringrequiredSurveyService_CalendarColumnSchema
objectColumn definition for calendar_grid question type
keystringrequiredtypestringselect_onelabelstringlabel_translationsobject | nullchoicesArray<object> | nullChoices for select_one type - name must be exactly 1 character
relevantstring | nullSurveyService_CalendarConfigSchema
objectConfiguration for calendar_grid question type
modestringmonthlymonths_backinteger[1, 120]12start_fromstringtodayallow_futurebooleanfalseSurveyService_CalendarRuleSchema
objectRule for auto-prefilling calendar column values
idstring | nullUnique rule ID
trigger_questionstringrequiredQuestion name that triggers this rule
target_columnstringrequiredCalendar column key to fill
value_sourcestringconstantWhere to get the value: constant, lookup, or xpath expression
source_valuestring | nullConstant value to fill (for constant source)
backfill_monthsinteger | null1How many months to backfill from anchor
backfill_anchorstring | SurveyService_BackfillAnchorSchema | nullcurrent_monthAnchor for backfill: 'current_month', or anchor config object
map_valuesobject | nullMap trigger values to calendar values (e.g., {'yes': 'Y', 'no': 'N'})
xpath_expressionstring | nullXPath expression to calculate value (for xpath source)
enabledbooleantrueWhether rule is active
conditionsArray<object> | nullConditions for when the rule applies (Visual Rule Builder)
months_scopeobject | nullMonths scope configuration for the rule
SurveyService_ChoiceSchema
objectChoice list item (XLSForm choices sheet)
list_namestringrequirednamestringrequiredlabelstringrequiredlabelTranslationsobject | nullmedia_filestring | nullconstraintstring | nullSurveyService_CollectionGrantResponse
objectidstringrequiredkindstringrequiredsurvey_idstringrequiredsurvey_version_idstringrequireduser_idstringrequireddevice_idstring | nullinterview_idstring | nullproject_status_at_issuestringrequiredgranted_atstring | nullproject_boundbooleantrueSurveyService_CreateSurveyFromTemplateRequest
objecttemplate_idstringrequiredTemplate ID to create survey from
namestringrequireddescriptionstring | nullworkspace_idstringrequiredWorkspace ID for the new survey
project_idstringrequiredProject ID for the new survey
is_anonymousbooleanfalseallow_multiple_responsesbooleanfalsescheduling_enabledbooleanfalseopen_atstring | nullScheduled open timestamp
close_atstring | nullScheduled close timestamp
SurveyService_CreateSurveyFromTemplateResponse
objectsurvey_idstringrequirednamestringrequiredtemplate_idstringrequiredcreated_atstring<date-time>requiredSurveyService_ExpressionValidationError
objectA single validation error for expression validation.
fieldstringrequiredmessagestringrequiredcodestringrequiredcontextobject | nullSurveyService_ExpressionValidationRequest
objectRequest body for expression validation endpoint.
expressionstringrequiredThe expression to validate (XPath format with ${field_name} references)
expression_typestringrelevantType of expression being validated
available_fieldsArray<string>List of available question/field names for reference validation
SurveyService_ExpressionValidationResponse
objectResponse from expression validation endpoint.
is_validbooleanrequiredexpressionstringrequiredexpression_typestringrequiredSurveyService_FormAccessBulkCreate
objectuser_idsArray<string>requiredaccess_levelSurveyService_FormAccessLevelfillview_onlyapproverfillexpires_atstring | nullassigned_triggersArray<SurveyService_LookupTriggerAssignment> | nullSurveyService_FormAccessCheckResponse
objecthas_accessbooleanrequiredaccess_levelstring | nullcan_fillbooleanfalsecan_viewbooleanfalsecan_approvebooleanfalseexpires_atstring | nullis_openbooleantrueopen_atstring | nullclose_atstring | nullscheduling_blocked_reasonstring | nullSurveyService_FormAccessCreate
objectuser_idstring<uuid>requiredaccess_levelSurveyService_FormAccessLevelfillview_onlyapproverfillexpires_atstring | nullassigned_triggersArray<SurveyService_LookupTriggerAssignment> | nullSurveyService_FormAccessListResponse
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredSurveyService_FormAccessResponse
objectidstring<uuid>requiredtenant_idstring<uuid>requiredsurvey_idstring<uuid>requireduser_idstring<uuid>requiredgranted_bystring<uuid>requiredaccess_levelstringrequiredexpires_atstring | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredrevoked_atstring | nullrevoked_bystring | nullrevocation_reasonstring | nullSurveyService_FormAccessRevokeResponse
objectmessagestringrequireduser_idstring<uuid>requiredsurvey_idstring<uuid>requiredgrant_idstring<uuid>requiredrevoked_atstring<date-time>requiredrevoked_bystring<uuid>requiredrevocation_reasonstring | nullSurveyService_FormAccessUpdate
objectaccess_levelSurveyService_FormAccessLevel | nullexpires_atstring | nullassigned_triggersArray<SurveyService_LookupTriggerAssignment> | nullSurveyService_FormAccessWithUserResponse
objectidstring<uuid>requiredtenant_idstring<uuid>requiredsurvey_idstring<uuid>requireduser_idstring<uuid>requiredgranted_bystring<uuid>requiredaccess_levelstringrequiredexpires_atstring | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredrevoked_atstring | nullrevoked_bystring | nullrevocation_reasonstring | nulluser_emailstring | nulluser_first_namestring | nulluser_last_namestring | nulluser_codestring | nulluser_rolestring | nullassigned_triggersArray<SurveyService_LookupTriggerAssignment> | nullSurveyService_HealthResponseDTO
objectHealth check response model.
statusstringrequiredservicestringrequiredversionstringrequiredtimestampstring<date-time>requiredSurveyService_HistoricalAccessCheckResponse
objecthas_accessbooleanrequiredgrant_idstring | nullaccess_levelstring | nullcreated_atstring | nullrevoked_atstring | nullrevocation_reasonstring | nullis_revokedbooleanfalseSurveyService_IssueCollectionGrantRequest
objectkindstringrequireddevice_download | interview_reservation
user_idstring<uuid>requiredsurvey_version_idstring<uuid>requireddevice_idstring | nullinterview_idstring | nullschema_hashstring | nullSurveyService_LanguageCreate
objectcodestringrequiredLanguage code (e.g., 'en', 'hi')
namestringrequiredLanguage name (e.g., 'English', 'Hindi')
flag_emojistring | nullFlag emoji (e.g., '🇺🇸')
is_activebooleantrueWhether language is active
display_orderinteger0Display order for sorting
SurveyService_LanguageReorderRequest
objectlanguage_idsArray<string>requiredList of language codes in desired order
SurveyService_LanguageResponse
objectidstring<uuid>requiredtenant_idstring<uuid>requiredcodestringrequirednamestringrequiredflag_emojistring | nullrequiredis_activebooleanrequireddisplay_orderintegerrequiredSurveyService_LanguageUpdate
objectcodestring | nullnamestring | nullflag_emojistring | nullis_activeboolean | nulldisplay_orderinteger | nullSurveyService_LimitSchema
objectLimit configuration for text/number fields. For text: min/max character count For integer/decimal: min/max value
mininteger | nullmaxinteger | nullSurveyService_LookupConfigResponse
objectResponse model for lookup configuration.
has_lookupsbooleanrequiredlookup_keysArray<object>requiredtrigger_questionsArray<string>requiredreferee_questionsobjectrequiredSurveyService_LookupResolveRequest
objectRequest model for lookup resolution.
trigger_questionstringrequiredName of the trigger question
trigger_valuestringrequiredSelected value for the trigger question
current_valuesobject | nullCurrent values of all questions (for change detection)
SurveyService_LookupResolveResponse
objectResponse model for lookup resolution.
trigger_questionstringrequiredtrigger_valuestringrequiredresolved_valuesobjectrequiredfields_to_clearArray<string>is_validbooleantrueerror_messagestring | nullSurveyService_LookupResponse
objectResponse model for lookup data
lookup_namestringrequiredkeystringrequiredvaluestringrequiredparent_keystring | nullextra_dataobject | nullSurveyService_LookupSchema
objectLookup data item (custom lookups worksheet). Used for cascading selects and external data lookups.
Example:
- lookup_name: "countries" or "states"
- key: "us" or "ny"
- value: "United States" or "New York"
- parent_key: None for countries, "us" for states (cascading)
- extra_data: {"code": "USA", "region": "north_america"}
lookup_namestringrequiredkeystringrequiredvaluestringrequiredparent_keystring | nullextra_dataobject | nullSurveyService_LookupStatisticsResponse
objectResponse model for lookup statistics.
trigger_questionsintegerrequiredtotal_valuesintegerrequiredtrigger_detailsobjectrequiredSurveyService_LookupTriggerAssignment
objectA single trigger value assignment for an enumerator.
trigger_questionstringrequiredName of the trigger question, e.g., 's_state'
trigger_valuestringrequiredValue of the trigger, e.g., 'rajasthan'
SurveyService_LookupValidateRequest
objectRequest model for lookup validation.
trigger_questionstringrequiredName of the trigger question
trigger_valuestringrequiredValue to validate
SurveyService_LookupValidateResponse
objectResponse model for lookup validation.
is_validbooleanrequiredtrigger_questionstringrequiredtrigger_valuestringrequirederror_messagestring | nullavailable_valuesArray<string> | nullSurveyService_QuestionBankCategoryCreate
objectnamestringrequireddescriptionstring | nullcolorstring | nullSurveyService_QuestionBankCategoryListResponse
objecttotalintegerrequiredlimitintegerrequiredskipintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredSurveyService_QuestionBankCategoryResponse
objectidstringrequiredtenant_idstringrequirednamestringrequireddescriptionstring | nullcolorstring | nullquestion_countinteger0created_atstring<date-time>requiredupdated_atstring<date-time>requiredSurveyService_QuestionBankCategoryUpdate
objectnamestring | nulldescriptionstring | nullcolorstring | nullSurveyService_QuestionBulkImportResponse
objecttotalintegerrequiredcreatedintegerrequiredfailedintegerrequiredSurveyService_QuestionCreate
objectcategory_idstring | nullquestion_typestringrequirednamestringrequiredlabelstringlabel_translationsobjecthintstring | nullhint_translationsobjectrequiredbooleanfalsequestion_configobjecttagsArray<string>is_publicbooleanfalseSurveyService_QuestionImportRowError
objectrowintegerrequiredfieldstringcodestringrequiredmessagestringrequiredSurveyService_QuestionListResponse
objecttotalintegerrequiredlimitintegerrequiredskipintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredSurveyService_QuestionResponse
objectidstringrequiredtenant_idstringrequiredcategory_idstring | nullquestion_typestringrequirednamestringrequiredlabelstringrequiredlabel_translationsobjectrequiredhintstring | nullhint_translationsobjectrequiredrequiredbooleanrequiredquestion_configobjectrequiredtagsArray<string>requiredusage_countintegerrequiredis_publicbooleanrequiredcreated_bystringrequiredupdated_bystring | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredcategorySurveyService_QuestionBankCategoryResponse | nullSurveyService_QuestionUpdate
objectcategory_idstring | nulllabelstring | nulllabel_translationsobject | nullhintstring | nullhint_translationsobject | nullrequiredboolean | nullquestion_configobject | nulltagsArray<string> | nullis_publicboolean | nullSurveyService_SettingsSchema
objectSurvey-level settings (XLSForm settings sheet)
form_titlestringrequiredform_idstring | nullversionstring | nulldefaultLanguagestring | nullenlanguagesArray<string> | nullavailableLanguagesArray<string> | nullinstanceNamestring | nullsubmissionUrlstring | nullSurveyService_SurveyAccessListResponse
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredSurveyService_SurveyCreate
objectnamestringrequireddescriptionstring | nullworkspace_idstring | nullproject_idstring<uuid>requiredis_anonymousbooleanfalseallow_multiple_responsesbooleanfalseschemaSurveyService_SurveySchema | nullopen_atstring | nullclose_atstring | nullscheduling_enabledbooleanfalseSurveyService_SurveyListResponse
objecttotalintegerrequiredlimitintegerrequiredskipintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredSurveyService_SurveyQuestionResponse
objectResponse model for question (mirrors SurveyQuestionSchema)
typestringrequirednamestringrequiredlabelstringrequiredlabel_translationsobject | nullrequiredbooleanfalsehintstring | nullhint_translationsobject | nulldefaultstring | nullorder_indexinteger0additional_valuesArray<string> | nullread_onlybooleanfalseappearancestring | nullrelevantstring | nullconstraintstring | nullconstraint_messagestring | nullconstraint_message_translationsobject | nullcalculationstring | nullchoicesstring | Array<object> | nullchoice_filterstring | nullchoice_relationstring | nullrepeat_countstring | nullquestionsArray<SurveyService_SurveyQuestionResponse> | nulllimitobject | nullparadataArray<string> | nullmedia_filestring | nulldeidentifybooleanfalseunique_idbooleanfalselookupsstring | nullcalendar_configobject | nullcalendar_rulesArray<object> | nullcolumnsArray<object> | nullSurveyService_SurveyQuestionSchema
objectXLSForm-compatible question schema. Supports all 22 question types with recursive nesting for groups/repeats.
typeSurveyService_SurveyQuestionTypetextintegerdecimalrangeselect_oneselect_multiplerankdatetimedatetimegeopointgeotracegeoshapeimageaudiovideofilebarcodesignaturecalculatenotehiddenacknowledgetriggerurlphonestartendtodaydeviceidphonenumberusernameemailsimserialsubscriberidauditxml-externalcsv-externalbegin_groupend_groupbegin_repeatend_repeatcalendar_gridrequiredComplete XLSForm-compatible question types (KoboToolbox standard). Reference: https://xlsform.org/en/#question-types
namestringrequiredlabelstringrequiredbooleanfalsehintstring | nulllabelTranslationsobject | nullhintTranslationsobject | nulldefaultstring | nullorder_indexinteger0additional_valuesArray<string> | nullread_onlybooleanfalseappearancestring | nullrelevantstring | nullconstraintstring | nullconstraint_messagestring | nullconstraintMessageTranslationsobject | nullcalculationstring | nullchoicesstring | nullchoice_filterstring | nullchoice_relationstring | nullrepeat_countstring | nullquestionsArray<SurveyService_SurveyQuestionSchema> | nullcalendar_configSurveyService_CalendarConfigSchema | nullcalendar_rulesArray<SurveyService_CalendarRuleSchema> | nullAuto-prefill rules for calendar columns
columnsArray<SurveyService_CalendarColumnSchema> | nulllimitSurveyService_LimitSchema | nullparadataArray<string> | nullmedia_filestring | nullmediaAudiostring | nullmediaAudioSchemaobject | nullmediaAudioUrlstring | nullmediaAudioAssetIdstring | nullmediaAudioUrlSchemaobject | nullmediaAudioAssetIdSchemaobject | nulldeidentifybooleanfalseunique_idbooleanfalselookupsstring | nullSurveyService_SurveyQuestionType
stringComplete XLSForm-compatible question types (KoboToolbox standard). Reference: https://xlsform.org/en/#question-types
SurveyService_SurveyResponse
objectidstring<uuid>requiredtenant_idstring<uuid>requiredworkspace_idstring | nullproject_idstring<uuid>requirednamestringrequireddescriptionstring | nullstatusstringrequiredis_anonymousbooleanrequiredallow_multiple_responsesbooleanrequiredsurvey_codeinteger | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredcreated_bystring<uuid>requiredclosed_atstring | nullopen_atstring | nullclose_atstring | nullscheduling_enabledbooleanfalseis_openbooleanfalseschemaSurveyService_SurveySchemaResponse | nullproject_statusstring | nullproject_has_production_activityboolean | nullproject_production_activity_atstring | nullSurveyService_SurveyScheduleRequest
objectopen_atstring | nullclose_atstring | nullscheduling_enabledbooleantrueSurveyService_SurveySchema
objectComplete XLSForm-compatible survey schema. Stored in JSONB column in survey_versions table. Includes support for custom lookups worksheet for cascading selects.
Note: 'title', 'version', 'description' and 'id' fields are accepted for backwards compatibility with frontend schema transformations but are not required for storage (they're derived from the survey/version metadata).
Survey-level settings (XLSForm settings sheet)
lookup_dataArray<object> | nullSurveyService_SurveySchemaResponse
objectResponse model for survey schema
settingsobjectrequiredchoicesArray<object>lookup_dataArray<object> | nullSurveyService_SurveyTemplateCreate
objectnamestringrequireddescriptionstring | nullschemaobject | nullis_publicbooleanfalsecategory_idstringrequiredID of the template category
tenant_idstring | nullTenant ID (null for global templates)
SurveyService_SurveyTemplateDetailResponse
objectidstringrequiredtenant_idstring | nullcategory_idstringrequirednamestringrequireddescriptionstring | nullschemaobject | nullis_publicbooleanrequiredcreated_bystringrequiredcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredSurveyService_SurveyTemplateListResponse
objecttotalintegerrequiredlimitintegerrequiredskipintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredSurveyService_SurveyTemplateResponse
objectidstringrequiredtenant_idstring | nullcategory_idstringrequirednamestringrequireddescriptionstring | nullschemaobject | nullis_publicbooleanrequiredcreated_bystringrequiredcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredcategorySurveyService_TemplateCategoryResponse | nullSurveyService_SurveyTemplateUpdate
objectnamestring | nulldescriptionstring | nullschemaobject | nullcategory_idstring | nullis_publicboolean | nullSurveyService_SurveyUpdate
objectnamestring | nulldescriptionstring | nullis_anonymousboolean | nullallow_multiple_responsesboolean | nullopen_atstring | nullclose_atstring | nullscheduling_enabledboolean | nullSurveyService_SurveyVersionCreate
objectDTO for creating a new survey version
survey_idstring | nullschemaSurveyService_SurveySchema | nullversionstring | nullincrement_typestring | nullpatchSurveyService_SurveyVersionUpdate
objectDTO for updating a draft survey version (cannot update published).
Accepts schema in two formats:
- Direct format: { settings, choices, questions, ... }
- Wrapped format: { schema: { settings, choices, questions, ... } }
The 'schema' field (when present) may include additional metadata like 'title' and 'version' which are stripped during parsing.
schemaobject | nullsettingsany | nullchoicesany | nullquestionsany | nulllookupsany | nulllookup_dataany | nullSurveyService_SurveyWithAccessResponse
objectidstring<uuid>requiredtenant_idstring<uuid>requirednamestringrequiredstatusstringrequiredsurvey_codeinteger | nullversionstring | nullaccess_levelstringrequiredcan_fillbooleanrequiredcan_viewbooleanrequiredcan_approvebooleanfalsecreated_atstring<date-time>requiredupdated_atstring | nullSurveyService_TagResponse
objectidstring<uuid>requiredtenant_idstring<uuid>requirednamestringrequiredcolorstring | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredcreated_bystring<uuid>requiredSurveyService_TemplateCategoryCreate
objectnamestringrequireddescriptionstring | nullicon_namestring | nullSurveyService_TemplateCategoryListResponse
objecttotalintegerrequiredlimitintegerrequiredskipintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredSurveyService_TemplateCategoryResponse
objectidstringrequiredtenant_idstringrequirednamestringrequireddescriptionstring | nullicon_namestring | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredSurveyService_TemplateCategoryUpdate
objectnamestring | nulldescriptionstring | nullicon_namestring | nullSurveyService_TemplateImportResponse
objectidstringrequiredtenant_idstring | nullcategory_idstringrequirednamestringrequireddescriptionstring | nullschemaobject | nullis_publicbooleanrequiredcreated_bystringrequiredcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredcategorySurveyService_TemplateCategoryResponse | nullimport_warningsArray<object>SurveyService_ValidateCollectionGrantResponse
objectvalidbooleanrequiredproject_boundbooleanrequiredgrant_idstring | nullkindstring | nullsurvey_version_idstring | nullgranted_atstring | nullproject_status_at_issuestring | nulllate_arrival_flaggedbooleanfalseSurveyService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectDataService_AnalyticsSummaryDTO
objectsurvey_idstringrequiredtotal_responsesintegerrequiredunique_respondentsintegerrequiredresponse_ratenumber | nullrequiredaverage_completion_time_secondsnumber | nullrequiredquestions_analyzedintegerrequiredDataService_AnswerDistributionDTO
objectquestion_idstringrequiredvaluestringrequiredcountintegerrequiredpercentagenumberrequiredDataService_AttachmentRecordDTO
objectentity_typestringrequiredType of entity (e.g., 'interview', 'response')
entity_idstring<uuid>requiredID of the associated entity
field_namestring | nullQuestion field name
filenamestringrequiredStored filename
original_filenamestringrequiredOriginal filename
file_typestring | nullFile category (image, audio, video, document)
mime_typestring | nullMIME type
file_sizeinteger0File size in bytes
checksumstring | nullSHA-256 checksum
storage_urlstring | nullURL to the uploaded file
captured_atstring | nullDevice capture timestamp
descriptionstring | nullNotes/description
DataService_AttachmentResponseDTO
objectidstringrequiredentity_typestringrequiredentity_idstringrequiredfilenamestringrequiredoriginal_filenamestringrequiredfile_typestring | nullrequiredmime_typestring | nullrequiredfile_sizeintegerrequireddescriptionstring | nullrequireduploaded_bystring | nullrequiredchecksumstring | nullrequiredis_publicbooleanrequiredfield_namestring | nullcaptured_atstring | nullstatusstringrequiredcreated_atstringrequireddownload_urlstring | nullDataService_Body_generate_random_sample_api_v1_data_sampling_generate_post
objectfilestringrequiredsample_sizeintegerrequiredoutput_formatstringcsvDataService_Body_generate_random_sample_api_v1_sampling_generate_post
objectfilestringrequiredsample_sizeintegerrequiredoutput_formatstringcsvDataService_Body_upload_attachment_api_v1_attachments__post
objectentity_typestringrequiredEntity type (response, survey, etc.)
entity_idstring<uuid>requiredEntity ID
descriptionstring | nullDescription
filestringrequiredFile to upload
DataService_BulkApproveRequest
objectsurvey_idstring | nullstatusArray<DataService_ResponseStatus> | nullstart_datestring | nullend_datestring | nullresponse_idsArray<string> | nulldry_runbooleanfalsenotesstring | nullDataService_BulkDeleteRequest
objectsurvey_idstring | nullstatusArray<DataService_ResponseStatus> | nullstart_datestring | nullend_datestring | nullresponse_idsArray<string> | nulldry_runbooleanfalseDataService_BulkInvalidateRequest
objectsurvey_idstring | nullstatusArray<DataService_ResponseStatus> | nullstart_datestring | nullend_datestring | nullresponse_idsArray<string> | nulldry_runbooleanfalsereasonstringrequiredDataService_BulkOperationResponseDTO
objectsuccess_countinteger0failure_countinteger0skipped_countinteger0errorsArray<object>dry_runbooleanfalseDataService_BulkResponseItemDTO
objectidempotency_keystringrequiredUnique key for idempotency
survey_idstring<uuid>requiredSurvey ID
version_idstring | nullSurvey version ID
respondent_idstring | nullanswersobjectrequiredQuestion ID to answer mapping
metadataobject | nullAdditional metadata (clients send this under the 'metadata' key)
submitted_atstring | nullDataService_BulkResponseResultDTO
objecttotalintegerrequiredsuccessfulintegerrequiredfailedintegerrequiredDataService_BulkResponseResultItemDTO
objectidempotency_keystringrequiredresponse_idstring | nullstatusstringrequirederrorstring | nullsubmitted_atstring | nullDataService_BulkUpdateStatusRequest
objectsurvey_idstring | nullstatusArray<DataService_ResponseStatus> | nullstart_datestring | nullend_datestring | nullresponse_idsArray<string> | nulldry_runbooleanfalsenew_statusstringrequiredDataService_DashboardMetricsDTO
objectactive_formsintegerrequiredactive_enumeratorsintegerrequiredsubmissions_todayintegerrequiredfailed_submissionsintegerrequiredtimezone_contextstringrequiredDataService_DuplicateGroupDto
objectidstring<uuid>requiredDuplicate group ID
primary_response_idstring<uuid>requiredPrimary response ID
duplicate_response_idstring<uuid>requiredDuplicate response ID
survey_idstring<uuid>requiredSurvey ID
confidence_scorenumberrequiredConfidence score
criteria_breakdownobjectrequiredBreakdown of scores per criterion
statusstringrequiredStatus of the duplicate group (flagged, merged, discarded, kept_both)
merged_bystring | nullUser who performed the merge
merged_atstring | nullWhen the merge was performed
created_atstring<date-time>requiredWhen the duplicate was detected
DataService_DuplicateGroupListDto
objectList of duplicate groups
totalintegerrequiredTotal number of duplicate groups
skipintegerrequiredNumber of items skipped
limitintegerrequiredNumber of items per page
has_nextbooleanrequiredWhether there are more items
has_previousbooleanrequiredWhether there are previous items
DataService_EnrichedAnswerDTO
objectquestion_idstringrequiredquestion_typestringrequiredvaluestring | nullvalue_jsonany | nullpresigned_urlstring | nullDataService_EnumeratorStatsDTO
objectuser_idstringrequiredsurvey_idstringrequiredtotal_submissionsintegerrequiredtotal_rejectedintegerrequiredrejection_ratenumberrequiredavg_duration_secondsnumber | nullduration_countinteger0avg_quality_scorenumber | nulllast_submission_atstring | nullenumerator_namestring | nullenumerator_user_codestring | nullenumerator_emailstring | nullDataService_ExportRequestDTO
objectsurvey_idstring<uuid>requiredSurvey ID to export
formatstringcsvExport format: csv, xlsx, json, dta, sav
statusstring | nullFilter by response status
from_datestring | nullFilter from date
to_datestring | nullFilter to date
respondent_idstring | nullFilter by respondent
include_metadatabooleantrueInclude response metadata
include_answersbooleantrueInclude answer data
version_idstring | nullSurvey version ID for schema labels (uses latest if not set)
languagestring | nullLanguage code for translated labels (e.g., 'es', 'fr')
DataService_MediaExportStatusDTO
objectrequest_idstringrequiredtask_statusstringrequiredresultobject | nullerrorstring | nullDataService_MergeRequestDto
objecttarget_response_idstring<uuid>requiredResponse ID to merge into (primary)
merge_notestring | nullNote about the merge
conflict_resolutionsobject | nullResolutions for conflicting fields (field name -> response ID to keep)
DataService_MergeResponseDto
objectsuccessbooleanrequiredWhether the merge was successful
primary_response_idstring<uuid>requiredPrimary response ID after merge
merged_response_idstring<uuid>requiredResponse ID that was merged
messagestringrequiredStatus message
DataService_QuestionStatsDTO
objectquestion_idstringrequiredquestion_typestringrequiredtotal_answersintegerrequiredunique_respondentsintegerrequiredmost_common_valuestring | nullrequiredmost_common_countintegerrequiredDataService_ResponseChangeDTO
objectA single response change. Deliberately carries no answer values.
response_idstringrequiredsurvey_idstring | nullchange_typestringrequiredchanged_fieldsArray<string> | nullchanged_atstringrequiredDataService_ResponseCorrectionRequest
objectEnumerator correction of a rejected response.
answers must contain only questions the supervisor flagged as checked.
Supplying answers for unflagged questions is rejected with 422. Questions
omitted here are left unchanged.
answersobjectrequiredCorrected answers for flagged questions only
reasonstring | nullReason for correction
DataService_ResponseCorrectionResponse
objectsuccessbooleantruereplayedbooleanfalseresponse_idstring<uuid>requiredstatusstringrequirededit_idstring | nulledit_countintegerrequiredchanged_questionsArray<string>requiredupdated_atstring | nullDataService_ResponseDTO
objectidstringrequiredsurvey_idstringrequiredtenant_idstringrequiredversion_idstring | nullidempotency_keystring | nullinterview_idstring | nullrespondent_idstring | nullridstring | nulluidstring | nullstatusstringrequiredanswersintegerrequiredcompleted_answersintegerrequiredprogress_percentageintegerrequiredstarted_atstring | nullsubmitted_atstring | nullcompleted_atstring | nullduration_secondsinteger | nullip_addressstring | nulluser_agentstring | nullmetadataobject | nullis_validbooleanrequiredsubmitted_bystring | nullenumerator_user_codestring | nullenumerator_emailstring | nullenumerator_namestring | nullrespondent_namestring | nullrespondent_user_codestring | nulldevice_idstring | nullsync_batch_idstring | nullsynced_atstring | nullapproved_bystring | nullapproved_atstring | nullapproval_notesstring | nullrejected_bystring | nullrejected_atstring | nullrejection_reasonstring | nullreview_flagsobject | nullresponse_languagestring | nullis_reconciledbooleanfalsereconciled_atstring | nullreconciliation_grant_idstring | nullcreated_atstringrequiredupdated_atstringrequiredDataService_ResponseDetailDTO
objectidstringrequiredsurvey_idstringrequiredtenant_idstringrequiredversion_idstring | nullidempotency_keystring | nullinterview_idstring | nullrespondent_idstring | nullridstring | nulluidstring | nullstatusstringrequiredanswersintegerrequiredcompleted_answersintegerrequiredprogress_percentageintegerrequiredstarted_atstring | nullsubmitted_atstring | nullcompleted_atstring | nullduration_secondsinteger | nullip_addressstring | nulluser_agentstring | nullmetadataobject | nullis_validbooleanrequiredsubmitted_bystring | nullenumerator_user_codestring | nullenumerator_emailstring | nullenumerator_namestring | nullrespondent_namestring | nullrespondent_user_codestring | nulldevice_idstring | nullsync_batch_idstring | nullsynced_atstring | nullapproved_bystring | nullapproved_atstring | nullapproval_notesstring | nullrejected_bystring | nullrejected_atstring | nullrejection_reasonstring | nullreview_flagsobject | nullresponse_languagestring | nullis_reconciledbooleanfalsereconciled_atstring | nullreconciliation_grant_idstring | nullcreated_atstringrequiredupdated_atstringrequiredanswers_listArray<DataService_EnrichedAnswerDTO>DataService_ResponseEditHistoryDTO
objectidstring<uuid>requirededited_atstring<date-time>requirededited_bystring<uuid>requiredreasonstring | nullchanges_countintegerrequiredDataService_ResponseEditRequest
objectanswersobjectrequiredQuestion ID to answer mapping
reasonstring | nullReason for edit
DataService_ResponseEditResponse
objectsuccessbooleanrequirededit_idstring<uuid>requiredchanges_countintegerrequiredDataService_ResponseListDTO
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredDataService_ResponseRejectionRequest
objectreasonstringrequiredRequired rejection reason
flagsobjectrequiredRequired review flags to persist atomically with the rejection. At least one flag must have checked=true. There is no fallback to previously stored flags.
DataService_ResponseStatsDTO
objectsurvey_idstringrequiredtotal_responsesintegerrequireddraft_countintegerrequiredsubmitted_countintegerrequiredcompleted_countintegerrequiredinvalidated_countintegerrequiredcompletion_ratenumberrequiredaverage_duration_secondsnumber | nullrequireddate_fromstringrequireddate_tostringrequiredDataService_ResponseStatus
stringDataService_ResponseValidationErrorDTO
objecterrorstringrequiredvalidation_errorsArray<object>requiredDataService_SimilarityMatch
objectresponse_idstring<uuid>requiredID of the potentially duplicate response
confidencenumberrequiredConfidence score (0-1)
criteria_breakdownobjectrequiredBreakdown of scores per criterion
response_detailsobject | nullAdditional details about the matched response
DataService_SimilaritySearchRequest
objectsurvey_idstringrequiredSurvey ID to search for duplicates in
respondent_idstring | nullRespondent ID to match
respondent_fieldsobject | nullOther respondent fields for matching
gps_coordinatesobject | nullGPS coordinates for proximity match
DataService_SimilaritySearchResponse
objectList of potential duplicates
totalintegerrequiredTotal number of matches found
DataService_SubmitResponseDTO
objectsurvey_idstring<uuid>requiredSurvey ID
version_idstring | nullSurvey version ID
idempotency_keystring | nullUnique key for submission idempotency
respondent_idstring | nullRespondent identifier
answersobjectrequiredQuestion ID to answer mapping
metadataobject | nullAdditional metadata (clients send this under the 'metadata' key)
ip_addressstring | nullClient IP address
user_agentstring | nullClient user agent
device_idstring | nullDevice identifier (ODK Collect deviceID, CSPro device ID)
sync_batch_idstring | nullBatch ID for grouping offline sync submissions
submission_modestring | nullcompleteDomain-level intent: 'complete' or 'terminated_partial'
duration_secondsinteger | nullActive form filling duration in seconds, excluding paused time
interview_idstring | nullInterview execution ID — links this response to its interview lifecycle
interview_ridstring | nullResponse RID from interview (generated at interview creation, not at submission)
collected_atstring | nullDevice-reported capture time (ISO-8601). Source of truth for the schedule window on offline submissions — a response collected on-device before close_at syncs even after the survey is auto-archived server-side.
response_languagestring | nullLanguage code used for this submission (e.g., 'en', 'es', 'fr')
is_reconciliationbooleanfalseFlag indicating this submission is a server-authorized reconciliation of work predating revocation (R22)
reconciliation_grant_idstring | nullHistorical form access grant ID authorizing this reconciliation
DataService_SurveyLatestSubmissionDTO
objectsurvey_idstringrequiredlatest_submitted_atstring | nullrequiredlatest_completed_atstring | nullrequiredDataService_UpdateAttachmentDTO
objectdescriptionstring | nullUpdated notes/description
field_namestring | nullUpdated question field name
DataService_UpdateResponseDTO
objectrespondent_idstring | nullmetadataobject | nullAdditional metadata (clients send this under the 'metadata' key)
statusstring | nullDataService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectSyncService_BulkSyncPushResponseDTO
objectBulk push sync response.
totalintegerrequiredacceptedintegerrequiredrejectedintegerrequiredSyncService_ConflictDTO
objectSync conflict information.
idstring<uuid>requiredtenant_idstring<uuid>requireddevice_idstringrequiredresponse_idstringrequiredconflict_typestringrequiredserver_versionobject | nullclient_versionobject | nullresolutionstring | nullresolved_atstring | nullresolved_bystring | nullcreated_atstring<date-time>requiredSyncService_ConflictListDTO
objectList of sync conflicts.
totalintegerrequiredskipinteger0limitinteger100has_nextbooleanfalsehas_previousbooleanfalseSyncService_ConflictResolutionRequestDTO
objectRequest to resolve a sync conflict.
strategystringrequiredResolution strategy: server_wins, client_wins, or manual
merged_dataobject | nullMerged data if manual strategy is used
SyncService_DeviceListDTO
objectList of devices response.
totalintegerrequiredskipinteger0limitinteger100has_nextbooleanfalsehas_previousbooleanfalseSyncService_DeviceRegistrationDTO
objectDevice registration request.
device_idstringrequiredUnique device identifier
platformstringrequiredDevice platform (ios, android, web, desktop)
device_namestring | nulldevice_modelstring | nullos_versionstring | nullapp_versionstring | nullpush_tokenstring | nullSyncService_DeviceResponseDTO
objectDevice response.
idstringrequireddevice_idstringrequiredplatformstringrequireddevice_namestring | nulldevice_modelstring | nullos_versionstring | nullapp_versionstring | nullstatusstringrequiredis_primarybooleanrequiredlast_active_atstring | nullcreated_atstring | nullSyncService_DeviceUpdateDTO
objectDevice update request.
device_namestring | nulldevice_modelstring | nullos_versionstring | nullapp_versionstring | nullpush_tokenstring | nullSyncService_FormDownloadAcknowledgementDTO
objectClient acknowledgement emitted only after a schema is persisted locally.
survey_idstring<uuid>requiredsurvey_version_idstring<uuid>requiredsurvey_versionstringrequiredsurvey_titlestring | nullschema_hashstring | nulldevice_idstringrequireddownload_idstring<uuid>requiredplatformstring | nullapp_versionstring | nullapp_buildstring | nullos_versionstring | nullpersisted_atstring | nullSyncService_HealthResponseDTO
objectstatusstringrequiredservicestringrequiredversionstringrequiredtimestampstring<date-time>requireddatabasestring | nullSyncService_InitialSyncRequestDTO
objectInitial sync request.
device_idstringrequiredplatformstring | nullunknownDevice platform
SyncService_RoleSyncDTO
objectRole and permissions descriptor for sync pull response.
idstringrequirednamestringrequiredpermissionsArray<string>SyncService_SurveySyncDTO
objectSurvey sync data — a descriptor, not a content channel (D-11).
schema_hash is the server's persisted content address for this
version's canonical schema artifact: a 64-character lowercase SHA-256 over
the canonical UTF-8 JSON bytes. It is forwarded verbatim from survey-service
and is the value a client verifies against. It is nullable only because a
legacy version published before the integrity backfill may have none; a
client must treat a missing value as "cannot be verified", never as
"trust me".
questions and settings remain as a legacy schema fragment. They are
not a verifiable artifact (no digest covers them) and mobile ignores them;
they exist so an older client does not hard-fail on a schema shape it knows.
Content is fetched from the version's artifact endpoint, not from here.
survey_idstringrequiredversion_idstringrequiredversionstringrequiredtitlestringrequireddescriptionstring | nullstatusstringrequiredschema_hashstring | nullis_deletedbooleanfalsehas_lookupsbooleanfalsequestionsArray<object>settingsobject | nullSyncService_SyncMetadataDTO
objectSync metadata response.
surveys_modifiedintegerrequiredsurveys_deletedintegerrequiredresponses_modifiedintegerrequiredresponses_newintegerrequiredserver_timestampstringrequirednext_sync_tokenstringrequiredSyncService_SyncPullRequestDTO
objectPull sync request.
device_idstringrequiredDevice identifier
last_sync_tokenstring | nullToken from previous sync
survey_versionstring | nullLast known survey version (semver string)
include_surveysbooleantrueInclude survey data
include_metadatabooleantrueInclude sync metadata
SyncService_SyncPullResponseDTO
objectPull sync response.
sync_tokenstringrequiredSync metadata response.
server_timestampstringrequiredroleSyncService_RoleSyncDTO | nullSyncService_SyncPushRequestDTO
objectPush sync request for single response.
idempotency_keystringrequiredUnique key for idempotency
survey_idstring<uuid>requiredSurvey ID
survey_version_idstring | nullSurvey version ID for version-pinned response
interview_idstring | nullInterview execution ID — links this response to its interview lifecycle (Track A)
interview_ridstring | nullResponse RID allocated for interview
respondent_idstring | nullRespondent identifier
Survey answers
metadataobject | nullAdditional metadata
device_idstringrequiredDevice that collected the response
collected_atstring | nullWhen response was collected on device
response_languagestring | nullLanguage code used for submission (e.g., 'en', 'es')
submission_modestring | nullSubmission mode: 'complete', 'terminated_partial', or 'draft'
SyncService_SyncPushResponseDTO
objectPush sync response.
idstringrequiredidempotency_keystringrequiredstatusstringrequiredresponse_idstring | nullcreated_atstring | nulllifecycle_codestring | nullSyncService_SyncReconciliationRequestDTO
objectServer-authorized reconciliation request for responses predating access revocation (R17 & R22).
intentstringrequiredExplicit intent: must be 'reconcile_revoked_work'
idempotency_keystringrequiredUnique key for idempotency
survey_idstring<uuid>requiredSurvey ID
survey_version_idstring | nullSurvey version ID for version pinning
device_idstringrequiredDevice that collected the response
collected_atstring<date-time>requiredDevice-reported capture timestamp (mandatory for reconciliation)
Survey answers
respondent_idstring | nullRespondent identifier
interview_idstring | nullInterview execution ID
interview_ridstring | nullAllocated RID
metadataobject | nullAdditional metadata
response_languagestring | nullLanguage code
submission_modestring | nullcompleteSubmission mode: 'complete' or 'terminated_partial'
duration_secondsinteger | nullDuration in seconds
sync_batch_idstring | nullBatch ID
SyncService_SyncReconciliationResponseDTO
objectServer-authorized reconciliation response.
statusstringrequired'reconciled', 'duplicate', or 'rejected'
response_idstring | nullPersisted SurveyResponse ID in data-service
reconciliation_grant_idstring | nullHistorical grant UUID that authorized this work
reconciled_atstring | nullISO timestamp when reconciliation completed
reasonstring | nullReason code if rejected (e.g. 'work_postdates_revocation', 'user_never_assigned')
messagestringrequiredHuman-readable status summary
SyncService_SyncStatusDTO
objectSync status response.
device_idstringrequiredlast_sync_atstring | nullsync_statusstringrequiredlast_survey_sync_atstring | nulllast_response_sync_atstring | nullsync_tokenstring | nullsurveys_syncedinteger0responses_syncedinteger0server_timestring | nullserver_time_offsetinteger | null0rid_blocksArray<object>SyncService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectAnalyticsService_AggregateDataPointDTO
objectSingle data point in aggregated results.
labelstringrequiredvaluenumberrequiredcountinteger | nullextraobject | nullAnalyticsService_AggregateRequestDTO
objectRequest to aggregate survey response data for a chart panel.
survey_idstringrequiredquestion_idsArray<string>requiredchart_typestringrequiredaggregationstringrequiredfiltersobject | nullgroupingstring | nullvalue_modestring | nullAnalyticsService_AggregateResponseDTO
objectAggregated chart data response.
survey_idstringrequiredquestion_idsArray<string>requiredchart_typestringrequiredaggregationstringrequiredsummaryobject | nullcachedbooleanfalsegenerated_atstring<date-time>requiredAnalyticsService_AnalyticsResponseListDTO
objectPaginated list of survey responses for analytics.
itemsArray<object>requiredtotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredAnalyticsService_AnalyticsSummaryDTO
objectAnalytics summary.
total_surveysintegerrequiredtotal_responsesintegerrequiredactive_surveysintegerrequiredcompletion_rate_avgnumberrequiredperiod_startstring<date-time>requiredperiod_endstring<date-time>requiredAnalyticsService_CreateDashboardDTO
objectCreate dashboard request.
titlestringrequireddescriptionstring | nullis_defaultbooleanfalsesurvey_idstring | nulldashboard_typestring | nulllayout_configobject | nullAnalyticsService_CreateWidgetDTO
objectCreate widget request.
widget_typestringrequiredtitlestringrequiredchart_typestringrequireddata_sourcestringsnapshotquery_configobject | nullposition_xinteger0position_yinteger0widthinteger4heightinteger3configobject | nullfiltersobject | nullrefresh_intervalinteger300AnalyticsService_DashboardListDTO
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredAnalyticsService_DashboardResponseDTO
objectDashboard response.
idstringrequiredtitlestringrequireddescriptionstring | nullrequiredis_defaultbooleanrequiredlayout_configobject | nullrequiredcreated_bystringrequiredcreated_atstring<date-time>requiredupdated_atstring | nullrequiredwidgetsArray<AnalyticsService_WidgetResponseDTO> | nullsurvey_idstring | nulldashboard_typestring | nullis_user_modifiedboolean | nullgenerated_by_systemboolean | nullsource_survey_versionstring | nullgenerator_versionstring | nullAnalyticsService_DashboardSummaryDTO
objectDashboard summary metrics.
tenant_idstringrequiredperiod_startstring<date-time>requiredperiod_endstring<date-time>requiredtotal_surveysintegerrequiredactive_surveysintegerrequiredtotal_responsesintegerrequiredcompletion_rate_avgnumberrequiredaverage_response_timenumber | nullrequiredresponses_trendArray<object>requiredtop_surveysArray<object>requiredgenerated_atstring<date-time>requiredAnalyticsService_GenerateDashboardRequestDTO
objectRequest to generate a default dashboard for a survey.
survey_idstringrequiredAnalyticsService_GenerateDashboardResponseDTO
objectResponse from dashboard generation.
dashboard_idstringrequiredstatusstringrequiredwidget_countintegerrequiredmessagestringrequiredAnalyticsService_ResponseMetricsDTO
objectResponse metrics for a date range.
datestringrequiredtotal_responsesintegerrequiredcompleted_responsesintegerrequiredcompletion_ratenumberrequiredaverage_duration_secondsnumber | nullrequiredAnalyticsService_SurveyAnalyticsDTO
objectSurvey analytics.
survey_idstringrequiredtotal_responsesintegerrequiredcompletion_ratenumberrequiredaverage_timenumber | nullrequiredquestions_countintegerrequiredresponses_by_dateArray<object>requiredAnalyticsService_SurveyPerformanceDTO
objectSurvey performance metrics.
survey_idstringrequiredsurvey_namestringrequiredtotal_responsesintegerrequiredcompletion_ratenumberrequiredaverage_time_secondsnumber | nullrequiredtrendstringrequiredtrend_percentagenumberrequiredAnalyticsService_UpdateDashboardDTO
objectUpdate dashboard request.
titlestring | nulldescriptionstring | nullis_defaultboolean | nulllayout_configobject | nullis_user_modifiedboolean | nullAnalyticsService_UpdateWidgetDTO
objectUpdate widget request.
titlestring | nullchart_typestring | nulldata_sourcestring | nullquery_configobject | nullposition_xinteger | nullposition_yinteger | nullwidthinteger | nullheightinteger | nullconfigobject | nullfiltersobject | nullrefresh_intervalinteger | nullAnalyticsService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectAnalyticsService_WidgetDataDTO
objectWidget data response.
widget_idstringrequireddata_sourcestringrequireddataanyrequiredcachedbooleanfalsegenerated_atstring<date-time>requiredAnalyticsService_WidgetResponseDTO
objectWidget response.
idstringrequireddashboard_idstringrequiredwidget_typestringrequiredtitlestringrequiredtitle_keystring | nullchart_typestring | nullrequireddata_sourcestring | nullrequiredquery_configobject | nullrequiredposition_xintegerrequiredposition_yintegerrequiredwidthintegerrequiredheightintegerrequiredconfigobject | nullrequiredfiltersobject | nullrequiredrefresh_intervalintegerrequiredcreated_atstring<date-time>requiredupdated_atstring | nullrequiredWorkspaceService_HealthResponseDTO
objectstatusstringrequiredservicestringrequiredversionstringrequiredtimestampstring<date-time>requiredWorkspaceService_MemberAddDTO
objectuser_idstringrequiredroleWorkspaceService_WorkspaceMemberRoleowneradmineditorviewerresponderviewerWorkspaceService_MemberListDTO
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredWorkspaceService_MemberResponseDTO
objectidstring<uuid>requiredworkspace_idstring<uuid>requireduser_idstring<uuid>requiredtenant_idstring<uuid>requiredrolestringrequiredinvited_bystring | nullrequiredjoined_atstring<date-time>requiredcreated_atstring<date-time>requiredupdated_atstring<date-time>requireduser_emailstring | nulluser_namestring | nullWorkspaceService_ProjectListDTO
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredWorkspaceService_ProjectResponseDTO
objectidstring<uuid>requiredworkspace_idstring<uuid>requiredtenant_idstring<uuid>requirednamestringrequireddescriptionstring | nullrequiredstatusstringrequiredhas_production_activitybooleanfalseproduction_activity_atstring | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredcreated_bystring<uuid>requiredWorkspaceService_ProjectStatus
stringWorkspaceService_ProjectUpdateDTO
objectnamestring | nulldescriptionstring | nullstatusWorkspaceService_ProjectStatus | nullWorkspaceService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectWorkspaceService_WorkspaceListDTO
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredWorkspaceService_WorkspaceMemberRole
stringWorkspaceService_WorkspaceResponseDTO
objectidstring<uuid>requiredtenant_idstring<uuid>requirednamestringrequireddescriptionstring | nullrequiredstatusstringrequiredcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredcreated_bystring<uuid>requiredWorkspaceService_WorkspaceStatus
stringWorkspaceService_WorkspaceUpdateDTO
objectnamestring | nulldescriptionstring | nullstatusWorkspaceService_WorkspaceStatus | nullWebhookService_CreateSubscriptionDTO
objectDTO for creating a webhook subscription.
namestringrequiredurlstringrequiredevent_typesArray<string>requiredsurvey_idstring | nullproject_idstring | nullworkspace_idstring | nullsecretstring | nullWebhookService_DeliveryListDTO
objectDTO for list of webhook deliveries.
totalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredWebhookService_DeliveryResponseDTO
objectDTO for webhook delivery response.
idstringrequiredsubscription_idstringrequiredevent_idstringrequiredevent_typestringrequiredstatusstringrequiredhttp_statusinteger | nullrequiredretry_countintegerrequiredattempted_atstring | nullrequireddelivered_atstring | nullrequirederror_messagestring | nullrequiredcreated_atstring<date-time>requiredWebhookService_SubscriptionListDTO
objectDTO for list of webhook subscriptions.
totalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredWebhookService_SubscriptionResponseDTO
objectDTO for webhook subscription response.
idstringrequirednamestringrequiredurlstringrequiredevent_typesArray<string>requiredsurvey_idstring | nullrequiredproject_idstring | nullrequiredworkspace_idstring | nullrequiredis_activebooleanrequiredcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredWebhookService_UpdateSubscriptionDTO
objectDTO for updating a webhook subscription.
namestring | nullurlstring | nullevent_typesArray<string> | nullis_activeboolean | nullWebhookService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectOdkBridge_Body_submit_form_submission_post
objectxml_submission_filestringrequiredattachmentsArray<string>OdkBridge_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectFormService_CreateInterviewDto
objectsurvey_idstring<uuid>requiredrespondent_idstring | nullsession_tokenstringrequiredtotal_questionsinteger0languagestring | nullActive language code during interview (e.g., 'en', 'es', 'hi')
interview_metadataobject[object Object]survey_namestring | nullresponse_ridstring | nullDEPRECATED. The server allocates the permanent RID at interview creation. This field is ignored for NEW interviews and only used as a last-resort backfill for legacy interviews created before server-side allocation.
FormService_DraftConflictResponse
objectResponse returned upon an optimistic concurrency conflict (HTTP 409).
errorstringDRAFT_CONFLICTmessagestringrequireddraft_idstring<uuid>requiredserver_version_tokenintegerrequiredclient_version_tokeninteger | nullserver_content_hashstring | nullclient_content_hashstring | nullserver_device_idstring | nullserver_updated_atstringrequiredserver_draft_dataobjectrequiredFormService_DraftCreateRequest
objectRequest to create a new draft.
idstring | nullsurvey_idstring<uuid>requiredsession_idstring | nullnamestring | nulldraft_dataobjectcurrent_pageinteger0survey_version_idstring | nullPinned immutable survey schema version ID
device_idstring | nullcontent_hashstring | nullidempotency_keystring | nullFormService_DraftDeltaResponse
objectResponse containing delta sync drafts since cursor.
server_timestampstringrequiredtotalintegerrequiredhas_nextbooleanrequirednext_cursorstring | nullFormService_DraftDrainRevokedRequest
objectRequest to drain an offline draft whose user's assignment was revoked.
idstring<uuid>requiredUnique draft identifier
survey_idstring<uuid>requiredSurvey identifier
survey_version_idstring | nullPinned survey schema version ID
namestring | nulldraft_dataobjectAnswers captured in draft
current_pageinteger0device_idstringrequiredAttribution device ID (must not be placeholder)
version_tokeninteger>= 11Client version token
content_hashstring | nullidempotency_keystring | nullreconciliation_grant_idstring | nullReconciliation grant ID
lastModifiedAtstring<date-time>requiredTimestamp of the last offline edit to the draft
reconciliation_reasonstring | nullOptional domain note or reason
FormService_DraftListResponse
objectResponse containing list of drafts.
totalintegerrequiredskipinteger0limitinteger20has_nextbooleanrequiredhas_previousbooleanrequiredFormService_DraftResponse
objectResponse containing draft information.
idstring<uuid>requiredtenant_idstring | nulluser_idstring | nulldevice_idstring | nullsurvey_idstring<uuid>requiredsession_idstring | nullsurvey_version_idstring | nullnamestring | nulldraft_dataobjectrequiredcurrent_pageintegerrequiredcompleted_fields_countintegerrequiredtotal_fields_countinteger | nullcompletion_percentageintegerrequiredstatusstringrequiredversion_tokeninteger1content_hashstring | nullidempotency_keystring | nullis_deletedbooleanfalsedeleted_atstring | nullvalidation_errorsArray<object>is_auto_savedbooleanfalsereconciliation_grant_idstring | nullreconciled_atstring | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredexpires_atstring | nullFormService_DraftUpdateRequest
objectRequest to update an existing draft.
draft_dataobject | nullnamestring | nullcurrent_pageinteger | nullis_auto_savebooleanfalseversion_tokeninteger>= 11Expected current server version token
device_idstring | nullcontent_hashstring | nullidempotency_keystring | nullFormService_EvaluateExpressionRequest
objectRequest to evaluate an XPath expression.
session_tokenstringrequiredForm session token
expressionstringrequiredXPath expression to evaluate
form_dataobjectForm data for variable resolution
FormService_EvaluateExpressionResponse
objectResponse for expression evaluation.
successbooleanrequiredresultanyerrorstring | nullFormService_FormManifestResponse
objectResponse for offline form manifest.
survey_idstring<uuid>requiredversion_idstring | nullmanifest_versionstringrequiredform_filesArray<object>requiredmedia_filesArray<object>requiredlast_updatedstring<date-time>requiredFormService_FormRenderResponse
objectResponse containing rendered form data.
session_idstring<uuid>requiredsession_tokenstringrequiredsurvey_idstring<uuid>requiredsurvey_version_idstring | nullform_schemaobjectrequiredform_htmlstring | nullprefill_dataobject | nulltotal_pagesintegerrequiredcurrent_pageinteger0expires_atstring<date-time>requiredsupports_offlinebooleanfalselookup_dataobject | nulltrigger_questionsArray<string>referee_questionsobject[object Object]FormService_FormSubmitRequest
objectRequest to submit a completed form.
session_tokenstringrequiredform_dataobjectrequiredis_completebooleantruecurrent_pageinteger | nullclient_timestampstring | nullduration_secondsinteger | nullActive form filling duration in seconds, excluding paused time
offline_submissionbooleanfalseoffline_queued_atstring | nulledit_response_idstring | nullversion_idstring | nullinterview_idstring | nullInterview execution ID (cross-service correlation)
languagestring | nullLanguage code used for this submission (e.g., 'en', 'es', 'fr')
FormService_FormSubmitResponse
objectResponse after form submission.
successbooleanrequiredresponse_idstring | nullsession_idstring<uuid>requiredversion_idstring | nullsubmitted_atstring<date-time>requiredvalidation_errorsArray<object>messagestring | nullresponse_languagestring | nullFormService_FormValidateRequest
objectRequest to validate form data without submitting.
session_tokenstringrequiredform_dataobjectrequiredvalidate_allbooleanfalsefields_to_validateArray<string> | nullFormService_FormValidateResponse
objectResponse with validation results.
is_validbooleanrequirederrorsArray<object>warningsArray<object>completion_percentageinteger0FormService_InterviewDto
objectidstring<uuid>requiredtenant_idstring | nullsurvey_idstring<uuid>requiredrespondent_idstring | nullinterviewer_idstring | nullsession_idstring | nullsession_tokenstringrequiredstatusstringrequiredstarted_atstring | nullpaused_atstring | nullcompleted_atstring | nullterminated_atstring | nulltermination_reasonstring | nulllast_heartbeat_atstring | nulllanguagestring | nullinterview_metadataobject[object Object]current_pageinteger0answered_countinteger0total_questionsinteger0survey_namestring | nullresponse_ridstring | nullresponse_uidstring | nullcurrent_response_idstring | nullcreated_atstring<date-time>requiredupdated_atstring<date-time>requiredFormService_InterviewEventDto
objectidstring<uuid>requiredinterview_idstring<uuid>requiredtenant_idstring | nullfrom_statusstring | nullto_statusstringrequiredtriggered_bystring | nullevent_metadataobject[object Object]created_atstring<date-time>requiredFormService_InterviewListResponse
objecttotalintegerrequiredskipinteger0limitinteger20has_nextbooleanfalsehas_previousbooleanfalseFormService_NoteCreateDto
objectfield_namestring | nulltextstringrequiredcategorystringgeneralclient_created_atstring | nullFormService_NoteResponseDto
objectidstring<uuid>requiredinterview_idstring<uuid>requiredtenant_idstring | nullfield_namestring | nulltextstringrequiredcategorystringrequiredauthor_idstring | nullpinnedbooleanfalsecreated_atstring<date-time>requiredupdated_atstring<date-time>requiredclient_created_atstring | nullFormService_NoteUpdateDto
objecttextstring | nullcategorystring | nullpinnedboolean | nullfield_namestring | nullFormService_PrefillResponse
objectResponse containing pre-fill data from a previous response.
prefill_dataobjectField name to value mapping for pre-fill
source_response_idstringrequiredID of the source response
source_submitted_atstring | nullWhen the source response was submitted
prefill_fieldsArray<string>List of field names that were pre-filled
FormService_RidBlockAllocationRequest
objectRequest payload for server-allocated device-bound RID block (R25 / AD-3).
survey_idstring<uuid>requiredID of the survey for which RID block is requested
device_idstringrequiredUnique client device ID (non-placeholder)
block_sizeinteger[1, 200]50Number of sequential RIDs to allocate
idempotency_keystring | nullClient idempotency key for safe retries
FormService_RidBlockResponse
objectServer-allocated device-bound RID block response (matches mobile RidBlockDto).
idstring<uuid>requiredtenant_idstring<uuid>requiredsurvey_idstring<uuid>requireduser_idstring<uuid>requireduser_codestringrequireddevice_idstringrequiredstart_seqintegerrequiredend_seqintegerrequiredcurrent_seqintegerrequiredis_exhaustedbooleanfalseidempotency_keystring | nullcreated_atstringrequiredFormService_SessionListResponse
objectResponse containing list of sessions.
totalintegerrequiredskipinteger0limitinteger20has_nextbooleanrequiredhas_previousbooleanrequiredFormService_SessionResponse
objectResponse containing session information.
idstring<uuid>requiredsurvey_idstring<uuid>requiredsurvey_version_idstring | nullsession_tokenstringrequiredstatusstringrequiredcurrent_pageintegerrequiredtotal_pagesinteger | nullprogress_percentageintegerrequiredis_offlinebooleanrequiredstarted_atstring<date-time>requiredlast_activity_atstring<date-time>requiredexpires_atstring<date-time>requiredcompleted_atstring | nullresponse_idstring | nullmetadataobject[object Object]FormService_TerminationDto
objectidstring<uuid>requiredinterview_idstring<uuid>requiredtenant_idstring | nulltermination_reasonstringrequiredexplanatory_textstring | nullretain_partial_databooleanrequireddiscard_databooleanrequirednotify_supervisorbooleanrequiredsupervisor_notifiedbooleanrequiredsupervisor_notified_atstring | nulldata_action_takenstring | nullterminated_bystring<uuid>requiredcreated_atstring<date-time>requiredFormService_TerminationPolicyDto
objectretain_partial_databooleanrequireddiscard_databooleanrequirednotify_supervisorbooleanrequiredrequires_explanatory_textbooleanrequiredFormService_TransitionInterviewDto
objectto_statusstringrequiredtermination_reasonstring | nullexplanatory_textstring | nullform_dataobject | nullis_completeboolean | nullcurrent_pageinteger | nullversion_idstring | nulledit_response_idstring | nullduration_secondsinteger | nullquestion_paradataobject | nullPhase-1 question paradata (T). Additive — merged into InterviewExecution.interview_metadata.question_paradata before the transition, and forwarded to data-service response_metadata at completion/retained termination. Existing metadata keys are preserved.
FormService_UpdateInterviewDto
objectrespondent_idstring | nullcurrent_pageinteger | nullanswered_countinteger | nulltotal_questionsinteger | nullinterview_metadataobject | nullFormService_ValidateFieldRequest
objectRequest to validate a single field.
session_tokenstringrequiredForm session token
field_namestringrequiredName of the field to validate
field_valueanyrequiredCurrent value of the field
form_dataobjectComplete form data
FormService_ValidateFieldResponse
objectResponse for single field validation.
is_validbooleanrequiredfieldstringrequirederrorsArray<object>FormService_ValidateFormRequest
objectRequest to validate entire form.
session_tokenstringrequiredForm session token
form_dataobjectrequiredForm data to validate
fields_to_validateArray<string> | nullOptional list of fields to validate (all if not specified)
FormService_ValidateFormResponse
objectResponse for form validation.
is_validbooleanrequirederrorsArray<object>total_fieldsintegerrequiredvalid_fieldsintegerrequiredinvalid_fieldsintegerrequiredFormService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectMediaService_AssetUpdateRequest
objectoriginal_filenamestring | nulldescriptionstring | nullalt_textstring | nulltagsArray<string> | nullis_publicboolean | nullMediaService_Body_upload_batch_api_v1_media_upload_batch_post
objectfilesArray<string>requiredsurvey_idstring | nullresponse_idstring | nullentity_typestring | nullentity_idstring | nulluser_namestring | nulldevice_idstring | nullDevice that recorded this media (used for post-closure grant validation)
MediaService_Body_upload_chunk_api_v1_media_upload_chunk_post
objectfilestringrequiredupload_idstringrequiredClient-generated stable upload ID (media local ID)
chunk_indexinteger>= 0requiredZero-based chunk index
total_chunksinteger[1, 100000]requiredTotal number of chunks
file_namestringrequiredmime_typestringrequiredsurvey_idstring | nullSurvey this media belongs to (REQUIRED for production-bound uploads)
response_idstring | nullClient-local response reference (metadata only — never the enforcement key)
checksumstring | nullExpected SHA-256 of the FULL assembled file
device_idstring | nullDevice that recorded this media (used for post-closure grant validation)
MediaService_Body_upload_file_api_v1_media_upload_post
objectfilestringrequiredsurvey_idstring | nullresponse_idstring | nullentity_typestring | nullentity_idstring | nullis_publicbooleanfalsedescriptionstring | nullsurvey_namestring | nullquestion_namestring | nulluser_namestring | nulldevice_idstring | nullDevice that recorded this media (used for post-closure grant validation)
checksumstring | nullExpected SHA-256 checksum of file
MediaService_Body_upload_library_file_api_v1_media_library_upload_post
objectfilestringrequiredMedia file to add to the library
descriptionstring | nullOptional description
survey_namestring | nullOptional survey name for renaming
question_namestring | nullOptional question name for renaming
response_idstring | nullOptional response ID for renaming
MediaService_Body_upload_library_files_batch_api_v1_media_library_upload_batch_post
objectfilesArray<string>requiredMedia files to add to the library
MediaService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectNotificationService_AWSConfig
objectaws_regionstring | nullaws_access_key_idstring | nullaws_secret_access_keystring | nullaws_origination_numberstring | nullNotificationService_AWSConfigResponse
objectaws_regionstring | nullaws_access_key_idstring | null••••••••aws_secret_access_keystring | null••••••••aws_origination_numberstring | nullNotificationService_AfricasTalkingConfig
objectafricas_talking_usernamestring | nullafricas_talking_api_keystring | nullafricas_talking_shortcodestring | nullNotificationService_AfricasTalkingConfigResponse
objectafricas_talking_usernamestring | nullafricas_talking_api_keystring | null••••••••africas_talking_shortcodestring | nullNotificationService_GenericHttpConfig
objectgeneric_sms_endpointstring | nullgeneric_sms_methodstringPOSTGETPOSTgeneric_sms_auth_header_namestring | nullgeneric_sms_auth_header_valuestring | nullgeneric_sms_body_templatestring | nullNotificationService_GenericHttpConfigResponse
objectgeneric_sms_endpointstring | nullgeneric_sms_methodstring | nullgeneric_sms_auth_header_namestring | nullgeneric_sms_auth_header_valuestring | null••••••••generic_sms_body_templatestring | nullNotificationService_KaleyraConfig
objectkaleyra_api_keystring | nullkaleyra_account_sidstring | nullkaleyra_sender_idstring | nullNotificationService_KaleyraConfigResponse
objectkaleyra_api_keystring | null••••••••kaleyra_account_sidstring | nullkaleyra_sender_idstring | nullNotificationService_MSG91Config
objectmsg91_api_keystring | nullmsg91_sender_idstring | nullmsg91_flow_idstring | nullmsg91_routestring144NotificationService_MSG91ConfigResponse
objectmsg91_api_keystring | null••••••••msg91_sender_idstring | nullmsg91_flow_idstring | nullmsg91_routestring | nullNotificationService_NotificationSettingsRequest
objectsmtpNotificationService_SMTPConfig | nullsms_providerstringmockaws_end_user_messagingtwiliomsg91kaleyraafricas_talkinggeneric_httpmockawsNotificationService_AWSConfig | nulltwilioNotificationService_TwilioConfig | nullmsg91NotificationService_MSG91Config | nullkaleyraNotificationService_KaleyraConfig | nullafricas_talkingNotificationService_AfricasTalkingConfig | nullgeneric_httpNotificationService_GenericHttpConfig | nullslackNotificationService_SlackConfig | nullNotificationService_NotificationSettingsResponse
objectsms_providerstringrequiredawsNotificationService_AWSConfigResponse | nulltwilioNotificationService_TwilioConfigResponse | nullmsg91NotificationService_MSG91ConfigResponse | nullkaleyraNotificationService_KaleyraConfigResponse | nullafricas_talkingNotificationService_AfricasTalkingConfigResponse | nullgeneric_httpNotificationService_GenericHttpConfigResponse | nullslackNotificationService_SlackConfigResponse | nullis_activebooleanrequiredcreated_atstringrequiredupdated_atstringrequiredNotificationService_NotificationType
stringNotificationService_SMTPConfig
objectsmtp_hoststring | nullsmtp_portinteger | null587smtp_usernamestring | nullsmtp_passwordstring | nullsmtp_from_emailstring | nullsmtp_from_namestring | nullsmtp_use_tlsbooleantrueNotificationService_SMTPConfigResponse
objectsmtp_hoststring | nullsmtp_portinteger | nullsmtp_usernamestring | nullsmtp_passwordstring | null••••••••smtp_from_emailstring | nullsmtp_from_namestring | nullsmtp_use_tlsboolean | nullNotificationService_SendNotificationRequest
objectchannelstringemailsmsslackrequiredrecipientstringrequiredsubjectstring | nullbodystringrequiredtemplate_idstring | nulltemplate_varsobject | nulluser_idstring | nullnotification_typeNotificationService_NotificationType | string | nullmetadataobject | nullNotificationService_TemplateCreateRequest
objectnamestringrequiredchannelstringrequiredsubject_templatestring | nullbody_templatestringrequiredvariablesArray<string> | nullNotificationService_TemplateLivePreviewRequest
objectsubject_templatestring | nullbody_templatestringrequiredvariablesobject[object Object]NotificationService_TemplateUpdateRequest
objectnamestring | nullsubject_templatestring | nullbody_templatestring | nullvariablesArray<string> | nullis_activeboolean | nullNotificationService_TestNotificationRequest
objectchannelstringemailsmsslackrequiredrecipientstringrequiredsubjectstring | nullTest NotificationbodystringThis is a test notification from MQUAD Notification Service.NotificationService_TwilioConfig
objecttwilio_account_sidstring | nulltwilio_auth_tokenstring | nulltwilio_from_numberstring | nullNotificationService_TwilioConfigResponse
objecttwilio_account_sidstring | nulltwilio_auth_tokenstring | null••••••••twilio_from_numberstring | nullNotificationService_UserPreferenceRequest
objectchannelstringrequiredis_enabledbooleantruequiet_hours_startstring | nullquiet_hours_endstring | nullfrequencystringimmediateNotificationService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectAuditService_AuditLogCreateRequest
objectevent_idstring | nullUnique event ID for idempotency
event_typestring | nullType of event (e.g., user.created)
log_schema_versionstring | null1.0Schema version
service_namestringrequiredName of the service producing the event
actionstringrequiredAction performed (create, update, delete, read, login, etc.)
actor_typestring | nullType of actor
actor_idstring | nullID of the actor
actor_emailstring | nullEmail of the actor
actor_namestring | nullDisplay name of the actor
tenant_idstring | nullTenant ID
tenant_namestring | nullDisplay name of the tenant
resource_typestring | nullType of resource
resource_idstring | nullID of the resource
resource_namestring | nullDisplay name of the resource
statusstring | nullsuccessEvent status
categorystring | nullEvent category for filtering
severitystring | nullINFOEvent severity level
descriptionstring | nullHuman-readable event description
failure_reasonstring | nullReason for failure if status is failure/error
correlation_idstring | nullCross-service correlation ID
ip_addressstring | nullClient IP address
user_agentstring | nullClient user agent
request_idstring | nullRequest ID for correlation
trace_idstring | nullTrace ID for cross-service correlation
parent_trace_idstring | nullParent trace ID
http_methodstring | nullHTTP method
http_pathstring | nullHTTP path
http_statusinteger | nullHTTP status code
duration_msinteger | nullRequest duration in milliseconds
metadataobject | nullAdditional event metadata
event_idempotency_keystring | nullKey for deduplication
data_classificationstring | nullinternalData classification level
{
"action": "create",
"actor_email": "admin@acme.org",
"actor_id": "550e8400-e29b-41d4-a716-446655440001",
"actor_type": "admin",
"data_classification": "internal",
"duration_ms": 45,
"event_id": "550e8400-e29b-41d4-a716-446655440000",
"event_type": "user.created",
"http_method": "POST",
"http_path": "/api/v1/users",
"http_status": 201,
"ip_address": "192.168.1.1",
"log_schema_version": "1.0",
"metadata": {
"role": "viewer"
},
"request_id": "req-12345678",
"resource_id": "550e8400-e29b-41d4-a716-446655440003",
"resource_type": "User",
"service_name": "backend",
"status": "success",
"tenant_id": "550e8400-e29b-41d4-a716-446655440002",
"trace_id": "trace-12345678"
}AuditService_AuditLogListResponse
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredAuditService_AuditLogResponse
objectidstringrequiredevent_idstring | nullevent_typestring | nulllog_schema_versionstring | nullservice_namestringrequiredactionstringrequiredactor_typestring | nullactor_idstring | nullactor_emailstring | nullactor_namestring | nulltenant_idstring | nulltenant_namestring | nullresource_typestring | nullresource_idstring | nullresource_namestring | nullstatusstring | nullcategorystring | nullseveritystring | nulldescriptionstring | nullfailure_reasonstring | nullcorrelation_idstring | nullip_addressstring | nulluser_agentstring | nullrequest_idstring | nulltrace_idstring | nullparent_trace_idstring | nullhttp_methodstring | nullhttp_pathstring | nullhttp_statusinteger | nullduration_msinteger | nullmetadataobject | nulldata_classificationstring | nullchecksumstringrequiredcreated_atstringrequiredAuditService_ConsentRecordRequest
objectuser_idstringrequiredconsent_typestringrequiredis_grantedbooleanrequiredip_addressstring | nullmetadataobject | nullAuditService_ConsentRecordResponse
objectidstringrequireduser_idstringrequiredconsent_typestringrequiredis_grantedbooleanrequiredgranted_atstring | nullrevoked_atstring | nullcreated_atstringrequiredAuditService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectFeatureFlagsService_EntitlementCatalogueItem
objectkeystringrequiredsource_keystringrequirednamestringrequiredtypestringrequiredunitstring | nullcategorystringrequiredscopestringtenantreset_periodstring | nullcounting_rulestringrequiredui_labelstringrequiredupgrade_messagestringrequirederror_codestringrequiredoverride_allowedbooleantruestale_acceptablebooleanfalserequires_role_permissionbooleantruedowngrade_policystringrequiredapplicable_servicesArray<string>requiredFeatureFlagsService_EvaluateResponse
objectflag_keystringrequiredvalueanyrequiredis_enabledbooleanrequiredmatched_rulestring | nullFeatureFlagsService_FlagCreateRequest
objectkeystringrequirednamestringrequireddescriptionstring | nullflag_typestringbooleandefault_valueanyfalseis_enabledbooleantruetagsArray<string> | nullenvironmentstring | nullplan_tierstring | nullfeature_categorystring | nullFeatureFlagsService_FlagListResponse
objecttotalintegerrequiredskipintegerrequiredlimitintegerrequiredhas_nextbooleanrequiredhas_previousbooleanrequiredFeatureFlagsService_FlagResponse
objectidstringrequiredkeystringrequirednamestringrequireddescriptionstring | nullflag_typestringrequireddefault_valueanyrequiredis_enabledbooleanrequiredis_archivedbooleanrequiredtagsArray<string>requiredevaluation_countintegerrequiredlast_evaluated_atstring | nullcreated_atstringrequiredupdated_atstringrequiredplan_tierstring | nullfeature_categorystring | nullFeatureFlagsService_FlagUpdateRequest
objectnamestring | nulldescriptionstring | nulldefault_valueany | nullis_enabledboolean | nulltagsArray<string> | nullplan_tierstring | nullfeature_categorystring | nullFeatureFlagsService_HealthResponseDTO
objectHealth check response model.
statusstringrequiredservicestringrequiredversionstringrequiredtimestampstring<date-time>requiredFeatureFlagsService_InvalidateResponse
objecttenant_idstringrequiredinvalidatedbooleanrequiredmessagestringrequiredFeatureFlagsService_LimitItem
objectkeystringrequiredcanonical_keystring | nullnamestringrequiredvalueintegerrequiredcategorystringresourcescopestringtenantreset_periodstring | nullunlimitedbooleanfalsecustom_overridebooleanfalseFeatureFlagsService_PlanDto
objectidstringrequirednamestringrequireddescriptionstringrequiredprice_idstringrequiredamountnumberrequiredcurrencystringrequiredintervalstringrequiredFeatureFlagsService_PlanFeatureDto
objectkeystringrequiredcanonical_keystring | nullnamestringrequireddescriptionstringrequiredflag_typestringrequiredvalueboolean | integer | stringrequiredcategorystringrequiredunitstring | nullui_labelstring | nullupgrade_messagestring | nullerror_codestring | nulloverride_allowedbooleantrueFeatureFlagsService_PlanLimitDto
objectkeystringrequiredcanonical_keystring | nullnamestringrequiredvalueintegerrequiredcategorystringrequiredscopestringrequiredreset_periodstring | nullunlimitedbooleanfalsecustom_overridebooleanfalseunitstring | nullui_labelstring | nullcounting_rulestring | nullupgrade_messagestring | nullerror_codestring | nulloverride_allowedbooleantrueFeatureFlagsService_TenantEntitlementsResponse
objecttenant_idstringrequiredtierstringrequiredsubscription_statusstringrequiredactivebooleanrequiredtrialbooleanrequiredtrial_end_atstring | nulldormantbooleanrequiredfeaturesArray<object>requiredFeatureFlagsService_TenantLimitsResponse
objectitemsArray<object>requiredtierstringrequiredtenant_idstringrequiredFeatureFlagsService_ValidationError
objectlocArray<string | integer>requiredmsgstringrequiredtypestringrequiredinputanyctxobjectQuotaService_CheckLimitRequest
objectRequest to check quota availability.
limit_typestringrequiredType of limit (e.g., 'surveys')
amountinteger>= 11Amount to check
QuotaService_ConsumeQuotaRequest
objectRequest to consume quota.
limit_typestringrequiredType of limit
amountinteger>= 11Amount to consume
idempotency_keystring | nullTenant-scoped usage idempotency key
QuotaService_QuotaResponse
objectResponse from quota operations.
successbooleanrequiredallowedbooleanrequiredcurrentintegerrequiredlimitintegerrequiredremainingintegerrequiredreset_atstring | nullunlimitedbooleanfalse