User Options
Assignee-picker autocomplete: id + display label only, no directory metadata.
The TTL can be long where the task autocomplete’s cannot: every writer of the users
mirror drops the tag — this router, the Clerk webhook, kumquat-cli sync-users — so it
is only the backstop for a mirror edited outside all three. assignable and groups are
in the key because they change the answer, and search is bounded because it goes in
verbatim; groups is sorted into the key so the same pair picked in either order is one
entry rather than two.
GET
/api/v1/users/optionsAuthorization
AuthorizationBearer token · headerrequiredor
AuthorizationOAuth2 access token · headerrequiredQuery parameters
searchstring | anycase-insensitive match on name / email
limitintegermin 1 · max 50 · default: 10
assignablebooleanonly users who can hold work (creator/admin)
default: false
groupsUserGroup[] | anyin any of these groups; repeat the param
Responses
200Successful Response
successbooleandefault: true
dataUserOption[] | anyShow propertiesHide properties
Any of:
UserOption[]
Array of
UserOptionidstringrequiredlabelstringrequiredimage_urlstring | anyShow propertiesHide properties
Any of:
string
stringany
anygroupsstring[]any
anymessagestring | anyShow propertiesHide properties
Any of:
string
stringany
anyerrorsstring[] | anyShow propertiesHide properties
Any of:
string[]
Array of
stringstringany
any422Validation Error
detailValidationError[]Show propertiesHide properties
Array of
ValidationErrorlocstring | integer[]requiredShow propertiesHide properties
Array of
string | integerAny of:
string
stringinteger
integermsgstringrequiredtypestringrequiredinputanyctxobjectRequest
curl -X GET "/api/v1/users/options" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("/api/v1/users/options", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"/api/v1/users/options",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
)Response
{
"success": true,
"data": [
{
"id": "string",
"label": "string",
"image_url": "string",
"groups": [
"string"
]
}
],
"message": "string",
"errors": [
"string"
]
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}