Skip to main content

Users and groups

Manage application users and group membership within a workspace. Use developer credentials and include the workspace context required by each operation.

API conventions · All endpoints · Schemas

/e/v1/developer/groups/​

Manage application-user groups.

Authentication: X-Developer-Token with the scope shown below, an active SyAuth plan, and access to the resource. Dashboard requests use your signed-in account.

GET​

Required developer-token scope: read_groups.

Optional list filters workspace_id and oauth_client where shown below; detail routes check resource ownership.

Request / response schema: Group.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryoauth_clientnot supplied
queryworkspace_idnot supplied

Related schemas: Group.

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


[
{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example",
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"member_count": 1
}
]

200 — json


[]

403 — json


{
"error": "Workspace not found or access denied"
}

404 — json


{
"error": "Workspace not found"
}

500 — json


{
"error": "Failed to list groups from external database. Please check connection logs."
}

503 — json


{
"error": "Custom database connection is active but not healthy. Please check the connection status or deactivate it to use internal database."
}

POST​

Required developer-token scope: write_groups.

Supply workspace explicitly and the required fields in the linked schema. Plan features, quotas and resource ownership apply.

Request / response schema: Group.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryuser_plan_idnot supplied
bodyworkspacenot supplied
queryworkspace_idnot supplied

Related schemas: Group.

Example request body:


{
"name": "Developers",
"workspace": "11111111-1111-4111-8111-111111111111",
"description": "Test group"
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

201 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example",
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"member_count": 1
}

201 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example",
"description": "EXAMPLE_DESCRIPTION",
"is_active": true,
"created_at": "EXAMPLE_CREATED_AT",
"external_database": true
}

400 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

400 — json


{
"error": "workspace_id parameter is required"
}

403 — json


{
"error": "You do not have access to this workspace"
}

403 — json


{
"error": "Group creation limit exceeded",
"feature": "max_groups",
"current_count": 1,
"limit": 1,
"message": "EXAMPLE_MESSAGE",
"upgrade_message": "Please upgrade your Syauth plan to create more groups"
}

404 — json


{
"error": "Workspace not found"
}

500 — json


{
"error": "Failed to create group in external database. Please check connection logs."
}

503 — json


{
"error": "Custom database connection is active but not healthy. Please check the connection status or deactivate it to use internal database."
}

/e/v1/developer/groups/{group_id}/​

Manage application-user groups.

Authentication: X-Developer-Token with the scope shown below, an active SyAuth plan, and access to the resource. Dashboard requests use your signed-in account.

GET​

Required developer-token scope: read_groups.

Optional list filters workspace_id and oauth_client where shown below; detail routes check resource ownership.

Path parameters: group_id (uuid, required).

Request / response schema: Group.

Related schemas: Group.

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example",
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"member_count": 1
}

200 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

PATCH​

Required developer-token scope: write_groups.

Partial update using the linked schema; resource ownership applies.

Path parameters: group_id (uuid, required).

Request / response schema: Group.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
bodynamenot supplied
bodydescriptionnot supplied
queryuser_plan_idnot supplied

Related schemas: Group.

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example",
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"member_count": 1
}

200 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

400 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

DELETE​

Required developer-token scope: write_groups.

No body; resource ownership applies.

Path parameters: group_id (uuid, required).

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryuser_plan_idnot supplied
Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

204 — json

No response body.

500 — json


{
"error": "Failed to delete group from external database"
}

/e/v1/developer/groups/{group_id}/members/​

Read or modify a group’s application-user membership.

Authentication: X-Developer-Token with the scope shown below, an active SyAuth plan, and access to the resource. Dashboard requests use your signed-in account.

GET​

Required developer-token scope: read_groups.

Required query workspace_id (legacy user_plan_id alias).

Path parameters: group_id (uuid, required).

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryworkspace_idnot supplied
queryuser_plan_idnot supplied
Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


[]

200 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

POST​

Required developer-token scope: write_groups.

Required user_id in JSON and workspace_id query (body workspace_id also accepted in this method). User and group must belong to the workspace.

Path parameters: group_id (uuid, required).

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
bodyuser_idnot supplied
queryworkspace_idnot supplied
bodyworkspace_idnot supplied
queryuser_plan_idnot supplied

Example request body:


{
"user_id": "11111111-1111-4111-8111-111111111111"
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"message": "User added to group"
}

200 — json


{
"message": "User added to group",
"external_database": true
}

400 — json


{
"error": "workspace_id parameter is required"
}

400 — json


{
"error": "User ID is required"
}

403 — json


{
"error": "You do not have access to this workspace"
}

404 — json


{
"error": "Workspace not found"
}

404 — json


{
"error": "User not found or not created with this plan"
}

500 — json


{
"error": "EXAMPLE_ERROR"
}

DELETE​

Required developer-token scope: write_groups.

Same JSON user_id and workspace context as POST. This DELETE requires a JSON body; generic frontend DELETE proxies may not forward it.

Path parameters: group_id (uuid, required).

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
bodyuser_idnot supplied
queryworkspace_idnot supplied
bodyworkspace_idnot supplied
queryuser_plan_idnot supplied

Example request body:


{
"user_id": "11111111-1111-4111-8111-111111111111"
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"message": "User removed from group"
}

200 — json


{
"message": "User removed from group",
"external_database": true
}

400 — json


{
"error": "workspace_id parameter is required"
}

400 — json


{
"error": "User ID is required"
}

403 — json


{
"error": "You do not have access to this workspace"
}

404 — json


{
"error": "Workspace not found"
}

404 — json


{
"error": "User not found or not created with this plan"
}

500 — json


{
"error": "Failed to remove user from group in external database"
}

Search application users by email within a workspace.

Authentication: X-Developer-Token with the scope shown below, an active SyAuth plan, and access to the resource. Dashboard requests use your signed-in account.

GET​

Required developer-token scope: read_users.

Required query email and workspace_id (legacy alias user_plan_id). Returns matching user objects; requires workspace access.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryemailnot supplied
queryworkspace_idnot supplied
queryuser_plan_idnot supplied
Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


[]

400 — json


{
"error": "Email parameter is required"
}

400 — json


{
"error": "workspace_id parameter is required"
}

403 — json


{
"error": "You do not have access to this workspace"
}

404 — json


{
"error": "Workspace not found"
}

/e/v1/developer/users/​

List or create users within accessible workspaces.

Authentication: X-Developer-Token with the scope shown below, an active SyAuth plan, and access to the resource. Dashboard requests use your signed-in account.

GET​

Required developer-token scope: read_users.

Optional query workspace_id, oauth_client, email. Pagination: limit integer default 20, capped at 100; offset integer default 0. Response uses count/results and boolean-or-null next/previous markers, not URL links.

Request / response schema: User.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryworkspace_idnot supplied
queryoauth_clientnot supplied
queryemailnot supplied
queryoffset0
querylimit20
Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"count": 1,
"next": null,
"previous": null,
"results": []
}

200 — json


{
"count": 1,
"next": null,
"previous": null,
"results": [],
"source": "external_database"
}

400 — json


{
"error": "Invalid pagination parameters. 'limit' and 'offset' must be integers."
}

400 — json


{
"error": "Invalid pagination parameters."
}

403 — json


{
"error": "Workspace not found or access denied"
}

403 — json


{
"error": "OAuth client not found or access denied"
}

404 — json


{
"error": "Workspace not found"
}

500 — json


{
"error": "Failed to list users from external database. Please check connection logs."
}

503 — json


{
"error": "Custom database connection is active but not healthy. Please check the connection status or deactivate it to use internal database."
}

POST​

Required developer-token scope: write_users.

Required query workspace_id (legacy alias user_plan_id). JSON User schema; provide workspace, email, password, confirm_password and oauth_client for password-login users. Optional send_verification boolean defaults true. Checks workspace access and max_users quota.

Request / response schema: User.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryworkspace_idnot supplied
queryuser_plan_idnot supplied

Related schemas: User.

Example request body:


{
"workspace": "11111111-1111-4111-8111-111111111111",
"oauth_client": "PUBLIC_CLIENT_ID",
"email": "[email protected]",
"password": "ExamplePass!7264X",
"confirm_password": "ExamplePass!7264X",
"send_verification": true
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

201 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"email": "[email protected]",
"first_name": "Example",
"last_name": "Example",
"company": "EXAMPLE_COMPANY",
"website": "https://app.example.test/callback",
"country": "EXAMPLE_COUNTRY",
"job_title": "EXAMPLE_JOB_TITLE",
"phone_number": "EXAMPLE_PHONE_NUMBER",
"email_verified": true,
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"last_login": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"oauth_client": "11111111-1111-4111-8111-111111111111"
}

201 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"email": "[email protected]",
"first_name": "Example",
"last_name": "Example",
"email_verified": true,
"created_at": "EXAMPLE_CREATED_AT",
"external_database": true
}

400 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

400 — json


{
"error": "workspace_id parameter is required"
}

400 — json


{
"error": "Workspace is required. Please provide a workspace or create one first."
}

403 — json


{
"error": "You do not have access to this workspace"
}

403 — json


{
"error": "User creation limit exceeded",
"feature": "max_users",
"current_count": 1,
"limit": 1,
"message": "EXAMPLE_MESSAGE",
"upgrade_message": "Please upgrade your Syauth plan to create more users"
}

404 — json


{
"error": "Workspace not found"
}

500 — json


{
"error": "Failed to create user: EXAMPLE"
}

500 — json


{
"error": "Failed to create user in external database"
}

/e/v1/developer/users/{user_id}/​

Read, update or remove an application user.

Authentication: X-Developer-Token with the scope shown below, an active SyAuth plan, and access to the resource. Dashboard requests use your signed-in account.

GET​

Required developer-token scope: read_users.

Required workspace context via query workspace_id (legacy alias user_plan_id) for SyAuth-managed user lookup.

Path parameters: user_id (uuid, required).

Request / response schema: User.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryworkspace_idnot supplied
queryuser_plan_idnot supplied

Related schemas: User.

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"email": "[email protected]",
"first_name": "Example",
"last_name": "Example",
"company": "EXAMPLE_COMPANY",
"website": "https://app.example.test/callback",
"country": "EXAMPLE_COUNTRY",
"job_title": "EXAMPLE_JOB_TITLE",
"phone_number": "EXAMPLE_PHONE_NUMBER",
"email_verified": true,
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"last_login": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"oauth_client": "11111111-1111-4111-8111-111111111111"
}

200 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

PUT​

Required developer-token scope: write_users.

User schema update; external database branch updates first_name and last_name. Supply workspace query.

Path parameters: user_id (uuid, required).

Request / response schema: User.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
bodyfirst_namenot supplied
bodylast_namenot supplied
queryworkspace_idnot supplied
queryuser_plan_idnot supplied

Related schemas: User.

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"email": "[email protected]",
"first_name": "Example",
"last_name": "Example",
"company": "EXAMPLE_COMPANY",
"website": "https://app.example.test/callback",
"country": "EXAMPLE_COUNTRY",
"job_title": "EXAMPLE_JOB_TITLE",
"phone_number": "EXAMPLE_PHONE_NUMBER",
"email_verified": true,
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"last_login": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"oauth_client": "11111111-1111-4111-8111-111111111111"
}

200 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

400 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

PATCH​

Required developer-token scope: write_users.

Partial User schema; supply workspace query. Password updates are rejected by this endpoint.

Path parameters: user_id (uuid, required).

Request / response schema: User.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryworkspace_idnot supplied
queryuser_plan_idnot supplied

Related schemas: User.

Example request body:


{
"first_name": "Updated"
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"id": "11111111-1111-4111-8111-111111111111",
"email": "[email protected]",
"first_name": "Example",
"last_name": "Example",
"company": "EXAMPLE_COMPANY",
"website": "https://app.example.test/callback",
"country": "EXAMPLE_COUNTRY",
"job_title": "EXAMPLE_JOB_TITLE",
"phone_number": "EXAMPLE_PHONE_NUMBER",
"email_verified": true,
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"last_login": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"oauth_client": "11111111-1111-4111-8111-111111111111"
}

400 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

DELETE​

Required developer-token scope: write_users.

No body. Supply workspace query. External-store deletion can fail separately.

Path parameters: user_id (uuid, required).

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryworkspace_idnot supplied
queryuser_plan_idnot supplied
Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

204 — json

No response body.

500 — json


{
"error": "Failed to delete user from external database"
}

/e/v1/developer/user-group-assignments/​

Read a user’s groups or add/remove an assignment.

Authentication: X-Developer-Token with the scope shown below, an active SyAuth plan, and access to the resource. Dashboard requests use your signed-in account.

POST​

Required developer-token scope: write_groups.

Required query workspace_id and JSON user_id/group_id UUIDs.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
bodyuser_idnot supplied
bodygroup_idnot supplied
queryworkspace_idnot supplied
queryuser_plan_idnot supplied

Example request body:


{
"user_id": "11111111-1111-4111-8111-111111111111",
"group_id": "22222222-2222-4222-8222-222222222222"
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"message": "User successfully added to group"
}

200 — json


{
"message": "User successfully added to group",
"external_database": true
}

400 — json


{
"error": "user_id and group_id are required"
}

400 — json


{
"error": "workspace_id parameter is required"
}

400 — json


{
"error": "EXAMPLE_ERROR"
}

403 — json


{
"error": "You do not have access to this workspace"
}

404 — json


{
"error": "Workspace not found"
}

404 — json


{
"error": "User not found or not created under this plan"
}

404 — json


{
"error": "Group not found or not created under this plan"
}

DELETE​

Required developer-token scope: write_groups.

Required query workspace_id and JSON user_id/group_id UUIDs. Send directly to backend when a proxy drops DELETE bodies.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
bodyuser_idnot supplied
bodygroup_idnot supplied
queryworkspace_idnot supplied
queryuser_plan_idnot supplied

Example request body:


{
"user_id": "11111111-1111-4111-8111-111111111111",
"group_id": "22222222-2222-4222-8222-222222222222"
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"message": "User successfully removed from group"
}

200 — json


{
"message": "User successfully removed from group",
"external_database": true
}

400 — json


{
"error": "user_id and group_id are required"
}

400 — json


{
"error": "workspace_id parameter is required"
}

403 — json


{
"error": "You do not have access to this workspace"
}

404 — json


{
"error": "Workspace not found"
}

404 — json


{
"error": "User not found or not created under this plan"
}

404 — json


{
"error": "Group not found or not created under this plan"
}

500 — json


{
"error": "Failed to remove user from group in external database"
}

GET​

Required developer-token scope: read_groups.

Required query user_id, workspace_id (legacy user_plan_id alias).

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
queryuser_idnot supplied
queryworkspace_idnot supplied
queryuser_plan_idnot supplied
Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


[]

200 — json

JSON response varies with the request. See the operation requirements and linked schema; validation errors may be keyed by field name.

400 — json


{
"error": "user_id parameter is required"
}

400 — json


{
"error": "workspace_id parameter is required"
}

403 — json


{
"error": "You do not have access to this workspace"
}

404 — json


{
"error": "Workspace not found"
}

404 — json


{
"error": "User not found or not created under this plan"
}