Task Schemas
Filter fields, sort options and the status transition graph. None of it varies by page or caller, so the client fetches it once per session rather than on every board refresh.
Only filter_schema touches the database — the other two are module constants.
Cached under one key for everyone: the answer depends on the collection, never on the
caller. Deliberately no lock=True, though the two DISTINCT scans are the expensive
part: cashews already collapses concurrent identical calls within a process, so a cold
cache costs one pair of scans per replica. The distributed lock would be taken on every
hit, waits on a busy loop, and outlives a SIGKILLed holder by the full TTL.
GET
/api/v1/tasks/schemaAuthorization
AuthorizationBearer token · headerrequiredor
AuthorizationOAuth2 access token · headerrequiredResponses
200Successful Response
successbooleandefault: true
dataTaskSchemas | anyShow propertiesHide properties
Any of:
TaskSchemas
filter_schemaobjectrequiredsort_schemaobjectrequiredstatus_schemaobjectrequiredfield_policyobjectrequiredany
anymessagestring | anyShow propertiesHide properties
Any of:
string
stringany
anyerrorsstring[] | anyShow propertiesHide properties
Any of:
string[]
Array of
stringstringany
anyRequest
curl -X GET "/api/v1/tasks/schema" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("/api/v1/tasks/schema", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"/api/v1/tasks/schema",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
)Response
{
"success": true,
"data": {
"filter_schema": {},
"sort_schema": {},
"status_schema": {},
"field_policy": {}
},
"message": "string",
"errors": [
"string"
]
}