Resources

Users & members

.md

List workspace members, add or remove them, send invitations and list workspaces.

These endpoints manage the team of the workspace the API key belongs to. Use GET /v1/users to populate assignment dropdowns or validate user IDs before assigning tickets, POST /v1/members to add someone directly, POST /v1/invitations to invite someone by email, and GET /v1/accounts to list the workspaces of the key owner.

Roles
Members created through the API get role member or viewer. Any role value other than "viewer" (for example "agent" or "admin") is stored as member. Owners cannot be created or removed through the API.

List membersGET/v1/users

Permission: read. Returns all workspace members ordered by join date (oldest first). No pagination: the full list is returned along with its count.

response.json
JSON
01{
02 "data": [
03 {
04 "id": "usr-xxxxxxxx",
05 "email": "agent@company.com",
06 "full_name": "John Smith",
07 "role": "member",
08 "joined_at": "2024-01-15T10:00:00Z"
09 }
10 ],
11 "count": 5
12}
UTF-8 · LF · JSONtickos.dev

Add a memberPOST/v1/members

Permission: write. Adds a user to the workspace directly, without an invitation flow. If no TickOS user exists with that email, one is created without a password (they can set one later with "Forgot password"). Any pending invitation for the same email in this workspace is marked as accepted. The email is trimmed and lowercased.

FieldTypeRequiredDescription
emailstringYesEmail of the user to add.
full_namestringNoName used only when a new user is created (defaults to the part of the email before @). Ignored for existing users.
rolestringNoviewer or member (default member). Any other value is stored as member.
terminal
Bash
01curl -X POST https://api.tickos.dev/v1/members \
02 -H 'Authorization: Bearer sk_your_api_key' \
03 -H 'Content-Type: application/json' \
04 -d '{ "email": "jane@company.com", "full_name": "Jane Doe", "role": "member" }'
UTF-8 · LF · Bashtickos.dev

Returns 201:

response.json
JSON
01{
02 "data": {
03 "id": "usr-xxxxxxxx",
04 "email": "jane@company.com",
05 "full_name": "Jane Doe",
06 "role": "member",
07 "status": "active"
08 }
09}
UTF-8 · LF · JSONtickos.dev
StatusWhen
400Missing or invalid email.
409The user is already a member of this workspace.
429The plan user limit has been reached. This check runs before the membership check.

Remove a memberDELETE/v1/members/{userId}

Permission: write. Removes the user from the workspace. The user account itself is not deleted. Returns { "success": true }.

StatusWhen
404The user is not a member of this workspace.
400The user is an owner of the workspace (owners cannot be removed).
terminal
Bash
01curl -X DELETE https://api.tickos.dev/v1/members/usr-xxxxxxxx \
02 -H 'Authorization: Bearer sk_your_api_key'
UTF-8 · LF · Bashtickos.dev

Invite a memberPOST/v1/invitations

Permission: write. Creates an invitation valid for 7 days and emails an invitation link to the address. The user joins the workspace when they accept it. Same body as POST /v1/members (email, full_name, role). The invitation is attributed to the owner of the API key. If the email cannot be sent, the invitation is still created.

terminal
Bash
01curl -X POST https://api.tickos.dev/v1/invitations \
02 -H 'Authorization: Bearer sk_your_api_key' \
03 -H 'Content-Type: application/json' \
04 -d '{ "email": "jane@company.com", "role": "viewer" }'
UTF-8 · LF · Bashtickos.dev

Returns 201:

response.json
JSON
01{
02 "data": { "id": "4f9c2a1e-7b3d-4c8e-9a6f-2d1e5b7c8a90", "email": "jane@company.com", "role": "viewer", "status": "pending" }
03}
UTF-8 · LF · JSONtickos.dev
StatusWhen
400Missing or invalid email.
409The user is already a member, or an invitation is already pending for this email.
429The plan user limit has been reached.

List workspacesGET/v1/accounts

Permission: read. Lists the active workspaces that the owner of the API key belongs to, ordered by creation date. is_current marks the workspace the API key belongs to; all other endpoints always operate on that workspace.

FieldTypeDescription
idstringWorkspace ID.
namestringWorkspace name.
slugstringWorkspace slug.
logo_urlstring | nullLogo URL.
timezonestringWorkspace timezone.
statusstringAlways active (inactive and deleted workspaces are excluded).
created_atstringCreation date (ISO 8601).
rolestringRole of the key owner in that workspace (owner, member or viewer).
joined_atstringWhen the key owner joined the workspace.
is_currentbooleantrue for the workspace the API key belongs to.
response.json
JSON
01{
02 "data": [
03 {
04 "id": "acc_xxxxxxxx",
05 "name": "Acme Support",
06 "slug": "acme",
07 "logo_url": null,
08 "timezone": "UTC",
09 "status": "active",
10 "created_at": "2025-03-01T10:00:00Z",
11 "role": "owner",
12 "joined_at": "2025-03-01T10:00:00Z",
13 "is_current": true
14 }
15 ],
16 "meta": { "total": 1, "current_account_id": "acc_xxxxxxxx" }
17}
UTF-8 · LF · JSONtickos.dev

If the key owner has no memberships, the response is { "data": [], "message": "No accounts found for this user" } without meta.