{"openapi":"3.1.0","info":{"title":"Patricia API","version":"0.1.0"},"paths":{"/v1/actor-preferences":{"get":{"tags":["actor-preferences"],"summary":"List employee preferences","description":"List preferences for an actor (your own, or anyone's if you are an admin).","operationId":"list_actor_preferences_v1_actor_preferences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/models__preference__ActorPreference__FullValidator"},"title":"Response List Actor Preferences V1 Actor Preferences Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["actor-preferences"],"summary":"Set an employee preference","description":"Upsert one preference key for an actor (overwrites if the key exists).","operationId":"set_actor_preference_v1_actor_preferences_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__preference__ActorPreference__CreateValidator"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__preference__ActorPreference__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/actor-preferences/approval-policy":{"get":{"tags":["actor-preferences"],"summary":"Get the tool-approval policy","description":"Read an actor's tool-approval policy (your own, or anyone's if you are an admin).","operationId":"get_approval_policy_v1_actor_preferences_approval_policy_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalPolicyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["actor-preferences"],"summary":"Set the tool-approval policy","description":"Set an actor's tool-approval policy (your own, or anyone's if you are an admin).","operationId":"set_approval_policy_v1_actor_preferences_approval_policy_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalPolicyBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalPolicyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/actor-preferences/{preference_id}":{"get":{"tags":["actor-preferences"],"summary":"Get an employee preference","operationId":"get_actor_preference_v1_actor_preferences__preference_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preference_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preference Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__preference__ActorPreference__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["actor-preferences"],"summary":"Update an employee preference","operationId":"update_actor_preference_v1_actor_preferences__preference_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preference_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preference Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__preference__ActorPreference__MergeValidator"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__preference__ActorPreference__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["actor-preferences"],"summary":"Remove an employee preference","operationId":"delete_actor_preference_v1_actor_preferences__preference_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preference_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preference Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/actors":{"get":{"tags":["actors","actors"],"summary":"Search actors","description":"List actors with filtering, sorting, and pagination.","operationId":"list_items_v1_actors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated actor list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["actors","actors"],"summary":"Create actor","description":"Create a new actor.","operationId":"create_item_v1_actors_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__CreateValidator"}}}},"responses":{"201":{"description":"The created actor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/actors/actor-directory":{"get":{"tags":["actors"],"summary":"Search the actor directory","description":"Read-only directory view backed by a SearchQuery (QueryProxy).","operationId":"list_actor_directory_v1_actors_actor_directory_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/queries__actor_directory__ActorDirectoryQuery__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/actors/{id}":{"get":{"tags":["actors","actors"],"summary":"Get actor","description":"Retrieve a single actor by ID.","operationId":"get_item_v1_actors__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested actor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["actors","actors"],"summary":"Update actor","description":"Full update (PUT) of a actor.","operationId":"update_item_v1_actors__id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__UpdateValidator"}}}},"responses":{"200":{"description":"The updated actor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["actors","actors"],"summary":"Partial update actor","description":"Partial update (PATCH) of a actor.","operationId":"merge_item_v1_actors__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__MergeValidator"}}}},"responses":{"200":{"description":"The updated actor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["actors","actors"],"summary":"Delete actor","description":"Soft-delete a actor by ID.","operationId":"delete_item_v1_actors__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/actor-preferences":{"get":{"tags":["admin"],"summary":"Search actor preferences","description":"List actor preferences with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_actor_preferences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated actor preference list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__preference__ActorPreference__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/actor-preferences/{id}":{"get":{"tags":["admin"],"summary":"Get actor preference","description":"Retrieve a single actor preference by ID.","operationId":"get_item_v1_admin_actor_preferences__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested actor preference.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__preference__ActorPreference__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/actors":{"get":{"tags":["admin"],"summary":"Search actors","description":"List actors with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_actors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated actor list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/actors/{id}":{"get":{"tags":["admin"],"summary":"Get actor","description":"Retrieve a single actor by ID.","operationId":"get_item_v1_admin_actors__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested actor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Actor__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/admin-credit-adjustments":{"get":{"tags":["admin"],"summary":"Search admin credit adjustments","description":"List admin credit adjustments with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_admin_credit_adjustments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated admin credit adjustment list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__AdminCreditAdjustment__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/admin-credit-adjustments/{id}":{"get":{"tags":["admin"],"summary":"Get admin credit adjustment","description":"Retrieve a single admin credit adjustment by ID.","operationId":"get_item_v1_admin_admin_credit_adjustments__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested admin credit adjustment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__AdminCreditAdjustment__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/agent-runs":{"get":{"tags":["admin"],"summary":"Search agent runs","description":"List agent runs with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_agent_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated agent run list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__AgentRun__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/agent-runs/{id}":{"get":{"tags":["admin"],"summary":"Get agent run","description":"Retrieve a single agent run by ID.","operationId":"get_item_v1_admin_agent_runs__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested agent run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__AgentRun__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/api-keys":{"get":{"tags":["admin"],"summary":"Search api keys","description":"List api keys with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated api key list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__api_key__ApiKey__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/api-keys/{id}":{"get":{"tags":["admin"],"summary":"Get api key","description":"Retrieve a single api key by ID.","operationId":"get_item_v1_admin_api_keys__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested api key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__api_key__ApiKey__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/audit-logs":{"get":{"tags":["admin"],"summary":"Search audit logs","description":"List audit logs with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_audit_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated audit log list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__audit__AuditLog__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/audit-logs/{id}":{"get":{"tags":["admin"],"summary":"Get audit log","description":"Retrieve a single audit log by ID.","operationId":"get_item_v1_admin_audit_logs__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested audit log.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__audit__AuditLog__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/bootstrap":{"get":{"tags":["admin"],"summary":"Bootstrap the admin shell","description":"Return the current staff identity and API environment.","operationId":"get_admin_bootstrap_v1_admin_bootstrap_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBootstrapResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/brain-doc-revisions":{"get":{"tags":["admin"],"summary":"Search brain doc revisions","description":"List brain doc revisions with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_brain_doc_revisions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated brain doc revision list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDocRevision__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/brain-doc-revisions/{id}":{"get":{"tags":["admin"],"summary":"Get brain doc revision","description":"Retrieve a single brain doc revision by ID.","operationId":"get_item_v1_admin_brain_doc_revisions__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested brain doc revision.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDocRevision__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/brain-docs":{"get":{"tags":["admin"],"summary":"Search brain docs","description":"List brain docs with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_brain_docs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated brain doc list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/brain-docs/{doc_id}/pin":{"post":{"tags":["admin"],"summary":"Admin Pin Doc","operationId":"admin_pin_doc_v1_admin_brain_docs__doc_id__pin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/brain-docs/{doc_id}/restore":{"post":{"tags":["admin"],"summary":"Admin Restore Doc","operationId":"admin_restore_doc_v1_admin_brain_docs__doc_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/brain-docs/{doc_id}/unpin":{"post":{"tags":["admin"],"summary":"Admin Unpin Doc","operationId":"admin_unpin_doc_v1_admin_brain_docs__doc_id__unpin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/brain-docs/{id}":{"get":{"tags":["admin"],"summary":"Get brain doc","description":"Retrieve a single brain doc by ID.","operationId":"get_item_v1_admin_brain_docs__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested brain doc.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/brain/remediate-salience":{"get":{"tags":["admin"],"summary":"Whether the one-time salience remediation is armed","description":"Reports whether API_BRAIN_SALIENCE_REMEDIATION_ENABLED is set. Read-only. The repair is a deliberate one-time act, so the console needs to know it is disarmed before offering it.","operationId":"salience_remediation_status_v1_admin_brain_remediate_salience_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationStatus"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin"],"summary":"Trigger the one-time salience-remediation fan-out (all tenants)","description":"Repairs the compounding-decay damage: restores over-decayed salience + un-prunes reversibly across every active tenant. Idempotent (raise-only). GUARDED: returns 409 unless API_BRAIN_SALIENCE_REMEDIATION_ENABLED is set, so the one-time repair is a deliberate act.","operationId":"trigger_salience_remediation_v1_admin_brain_remediate_salience_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationTriggerResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/cockpit/people":{"get":{"tags":["admin"],"summary":"Cross-team people directory (one card per person)","operationId":"list_people_v1_admin_cockpit_people_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPersonList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cockpit/people/detail":{"get":{"tags":["admin"],"summary":"One person across all their teams, with recent activity","operationId":"person_detail_v1_admin_cockpit_people_detail_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":320,"description":"The person's email (case-insensitive).","title":"Email"},"description":"The person's email (case-insensitive)."},{"name":"runs_limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Runs Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPersonDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cockpit/search":{"get":{"tags":["admin"],"summary":"One-box cockpit search across teams and people","description":"Case-insensitive partial match over team names, chat workspace names, member emails/names, and exact ids, grouped into teams and people. Admin only.","operationId":"cockpit_search_v1_admin_cockpit_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Name, email, workspace, or id fragment.","title":"Q"},"description":"Name, email, workspace, or id fragment."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSearchResults"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cockpit/teams":{"get":{"tags":["admin"],"summary":"Enriched team list (plan, balance, members, recent activity)","operationId":"list_teams_v1_admin_cockpit_teams_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Status"}},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["display_name","created_at","credit_balance","last_run_at","runs_30d","member_count"],"type":"string","default":"last_run_at","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTeamList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cockpit/teams/{tenant_id}":{"get":{"tags":["admin"],"summary":"One team's enriched summary","operationId":"get_team_v1_admin_cockpit_teams__tenant_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTeamSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cockpit/teams/{tenant_id}/credit-adjustments":{"post":{"tags":["admin"],"summary":"Add or subtract prepaid credits for a team (audited, idempotent)","description":"Moves credits through the existing ledger primitives only (atomic grant / clamped FOR-UPDATE drawdown, so a balance can never go negative), writes the money-trail row and the tenant audit entry in the SAME transaction, and claims the client-supplied idempotency key so a retried submit replays the stored outcome instead of moving credits twice. Requires a human reason. Admin only.","operationId":"create_credit_adjustment_v1_admin_cockpit_teams__tenant_id__credit_adjustments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAdjustmentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreditAdjustmentRead"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: inspect ``errors[0].type`` for the specific case (``idempotency_key_reused``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["admin"],"summary":"A team's staff credit-adjustment history, newest first","operationId":"list_credit_adjustments_v1_admin_cockpit_teams__tenant_id__credit_adjustments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreditAdjustmentList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cockpit/teams/{tenant_id}/members":{"get":{"tags":["admin"],"summary":"A team's member roster, resolved to names and emails","operationId":"list_team_members_v1_admin_cockpit_teams__tenant_id__members_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTeamMemberList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cockpit/teams/{tenant_id}/usage":{"get":{"tags":["admin"],"summary":"A team's daily credit usage plus its most recent runs","operationId":"team_usage_v1_admin_cockpit_teams__tenant_id__usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Days"}},{"name":"runs_limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Runs Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTeamUsage"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cockpit/teams/{tenant_id}/usage/export":{"get":{"tags":["admin"],"summary":"The daily usage table as a CSV download","operationId":"team_usage_export_v1_admin_cockpit_teams__tenant_id__usage_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"The daily usage table as CSV, newest window first.","content":{"application/json":{"schema":{}},"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/conversations":{"get":{"tags":["admin"],"summary":"Search conversations","description":"List conversations with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated conversation list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Conversation__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/conversations/{id}":{"get":{"tags":["admin"],"summary":"Get conversation","description":"Retrieve a single conversation by ID.","operationId":"get_item_v1_admin_conversations__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested conversation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Conversation__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cron-jobs":{"get":{"tags":["admin"],"summary":"Search cron jobs","description":"List cron jobs with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_cron_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated cron job list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/cron-jobs/{id}":{"get":{"tags":["admin"],"summary":"Get cron job","description":"Retrieve a single cron job by ID.","operationId":"get_item_v1_admin_cron_jobs__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested cron job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/email-simulate":{"post":{"tags":["admin"],"summary":"Email Simulate","description":"Dry-run the REAL two-phase evaluator for one (tenant, recipient, email): the explainability\nsurface for everything that never entered the pipeline (persisted decisions cover everything that did).\n\nRead-only by construction: it evaluates predicates, consent, caps, and quiet hours against current\nstate and reports every blocker; nothing is enqueued, sent, or recorded.","operationId":"email_simulate_v1_admin_email_simulate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSimulateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSimulateResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/email-test-send":{"post":{"tags":["admin"],"summary":"Email Test Send","description":"Render one catalog email with sample values and send it directly (admin verification only).\n\nThe audit row is written and COMMITTED BEFORE the provider call, not queued afterwards. This\nroute puts real mail into a real mailbox, at a caller-chosen address, from a caller-chosen\nsender, so \"we emailed someone and there is no record\" must be unreachable. The post-commit\nside-effect dispatcher cannot promise that: it runs after the transaction closes, writes in its\nown session, and logs its failures instead of raising (``dependencies/audit.py``), so a queued\nrow can silently never land.\n\nOrdering it before the send trades one honest failure mode for an unacceptable one. A row can\nnow exist for a send the provider then refused (over-recording, visible and harmless); a send\ncan never exist without a row (under-recording, the state the approval was about). It records\nthe REQUEST for that reason, and says so in its action name: ``platform_audit_logs`` is\nappend-only behind a ``prevent_mutation()`` trigger, so the row cannot be updated afterwards\nwith the delivery outcome. That outcome stays in the structured log below and in the response.","operationId":"email_test_send_v1_admin_email_test_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTestSendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTestSendResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/emails":{"get":{"tags":["admin"],"summary":"List the lifecycle email catalog","description":"Every lifecycle email with the routing metadata a staff operator needs to pick one, so the admin console offers a picker instead of asking for a typed id. Read-only. Internal admin users only, since only the console needs it.","operationId":"list_email_catalog_v1_admin_emails_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCatalogList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/feature-flags":{"get":{"tags":["admin"],"summary":"Effective feature-flag state (this process)","description":"Platform-admin view of every governed backend feature gate: intended home, loaded value, effective state, and why. Reports the api tier's own state; the worker reports its own at startup. Values only, no secrets.","operationId":"get_feature_flag_state_v1_admin_feature_flags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlagState"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/group-channels":{"get":{"tags":["admin"],"summary":"Search group channels","description":"List group channels with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_group_channels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated group channel list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__GroupChannel__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/group-channels/{id}":{"get":{"tags":["admin"],"summary":"Get group channel","description":"Retrieve a single group channel by ID.","operationId":"get_item_v1_admin_group_channels__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested group channel.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__GroupChannel__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/group-suggestions":{"get":{"tags":["admin"],"summary":"Search group suggestions","description":"List group suggestions with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_group_suggestions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated group suggestion list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__GroupSuggestion__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/group-suggestions/{id}":{"get":{"tags":["admin"],"summary":"Get group suggestion","description":"Retrieve a single group suggestion by ID.","operationId":"get_item_v1_admin_group_suggestions__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested group suggestion.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__GroupSuggestion__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/groups":{"get":{"tags":["admin"],"summary":"Search groups","description":"List groups with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_groups_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated group list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/groups/{id}":{"get":{"tags":["admin"],"summary":"Get group","description":"Retrieve a single group by ID.","operationId":"get_item_v1_admin_groups__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/identity-cases":{"get":{"tags":["admin"],"summary":"List Identity Cases","description":"The collision queue: cases waiting on a human decision, oldest first.\n\n``status`` is the ENUM, so a value outside it is a 422 rather than an empty page. Typed as a\nfree string this filter answered a misspelling with \"no cases\", which on a queue reads as \"the\nqueue is clear\" — the one wrong answer an operator has no reason to question.","operationId":"list_identity_cases_v1_admin_identity_cases_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IdentityBindingCaseStatus"},{"type":"null"}],"description":"Filter to one status; default is the open queue.","title":"Status"},"description":"Filter to one status; default is the open queue."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CaseRow"},"title":"Response List Identity Cases V1 Admin Identity Cases Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/identity-cases/{case_id}/approve":{"post":{"tags":["admin"],"summary":"Approve Identity Case","description":"Record the decision and its server-computed digest, moving the case to ready.\n\nThe digest is computed here, from the document the approver submitted. Accepting one from the\ncaller would authenticate nothing — the same request supplies the document it summarizes.","operationId":"approve_identity_case_v1_admin_identity_cases__case_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Case Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/identity-cases/{case_id}/commit":{"post":{"tags":["admin"],"summary":"Commit Identity Case","description":"Execute the approved decision. Takes NO manifest — the stored document is the only input.\n\nEverything below happens in one transaction, so a recovery either moves every row it named or\nmoves none. There is no half-applied state worth keeping: each one leaves somebody holding\nauthority the decision took away.","operationId":"commit_identity_case_v1_admin_identity_cases__case_id__commit_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/identity-cases/{case_id}/deny":{"post":{"tags":["admin"],"summary":"Deny Identity Case","description":"Refuse the collision. The person stays blocked, which is the safe outcome of a real conflict.","operationId":"deny_identity_case_v1_admin_identity_cases__case_id__deny_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/ingress/reopen":{"post":{"tags":["admin"],"summary":"Reopen an ingress event's processing state","description":"Reset retry and park processing state for an ingress event. Existing terminal and outage-note notification tombstones remain immutable. Events with a durable inbound election are rejected. Admin only.","operationId":"reopen_ingress_event_v1_admin_ingress_reopen_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngressReopenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngressReopenResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: inspect ``errors[0].type`` for the specific case (``run_backed``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/ingress/stuck":{"get":{"tags":["admin"],"summary":"List open ingress recovery events","description":"Return bounded recovery metadata without saved message payloads. Admin only.","operationId":"list_stuck_ingress_events_v1_admin_ingress_stuck_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"platform_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z0-9_-]+$"},{"type":"null"}],"title":"Platform Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StuckIngressResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integration-accounts":{"get":{"tags":["admin"],"summary":"Search integration accounts","description":"List integration accounts with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_integration_accounts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated integration account list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__integration__IntegrationAccount__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integration-accounts/{id}":{"get":{"tags":["admin"],"summary":"Get integration account","description":"Retrieve a single integration account by ID.","operationId":"get_item_v1_admin_integration_accounts__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested integration account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__integration__IntegrationAccount__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integration-content":{"get":{"tags":["admin"],"summary":"List authored integration content","description":"Every app that has Connect-sheet content authored, newest-edited first.","operationId":"list_integration_content_v1_admin_integration_content_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IntegrationContentListItem"},"type":"array","title":"Response List Integration Content V1 Admin Integration Content Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/integration-content/{app_slug}":{"get":{"tags":["admin"],"summary":"Get one app's authored content","description":"The full authored row for the editor to prefill. 404 when no content exists yet.","operationId":"get_integration_content_v1_admin_integration_content__app_slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_slug","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","description":"The catalog app slug.","title":"App Slug"},"description":"The catalog app slug."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationContentResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["admin"],"summary":"Create or replace one app's content","description":"Upsert the full Connect-sheet content for one app. Em dashes are rejected (422).","operationId":"upsert_integration_content_v1_admin_integration_content__app_slug__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_slug","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","description":"The catalog app slug.","title":"App Slug"},"description":"The catalog app slug."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationContentUpsertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationContentResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["admin"],"summary":"Delete one app's content","description":"Remove the Connect-sheet content for one app. The sheet still opens for it, but the authored sections go with the row and it falls back to what the catalog knows.","operationId":"delete_integration_content_v1_admin_integration_content__app_slug__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_slug","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","description":"The catalog app slug.","title":"App Slug"},"description":"The catalog app slug."}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integrations/accounts/{account_id}/abandoned-revoke-clearances":{"post":{"tags":["admin"],"summary":"Record a confirmed kill on an abandoned upstream revoke","description":"Takes an account off the COGS orphan report when its upstream revoke was never attempted and nothing owns a retry. That is the crash-window row a disconnect leaves if the process dies between the local commit and the provider call, which the leak report shows as retry_ownership 'unowned'. Operator-only and deliberately manual: the route performs NO provider call, it writes down the answer you give it, so answering true without having killed the credential removes a live charge from the one report that would have shown it. Matches only a soft-deleted, revoked, attempt_pending row that is owed no live outbox debt and is older than the abandonment floor. That floor bounds an ordinary in-flight disconnect; it does NOT bound a tenant offboard, whose serial provider loop grows with the account count, so wait for a known offboard to finish before acting on its accounts. It never writes status_code or deleted_at, so it cannot reactivate an account or lift a reconnect fence, and a late disconnect still completes over it. Internal admin users only.","operationId":"clear_abandoned_revoke_v1_admin_integrations_accounts__account_id__abandoned_revoke_clearances_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Connected account abandoned at attempt_pending.","title":"Account Id"},"description":"Connected account abandoned at attempt_pending."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AbandonedRevokeClearance"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AbandonedRevokeClearanceResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integrations/accounts/{account_id}/revoke-failure-clearances":{"post":{"tags":["admin"],"summary":"Release a connected account stuck at revoke_failed","description":"Clears the fence on an account whose upstream revoke exhausted its retries, returning it to revoked so the member can connect that app again. Operator-only and deliberately manual: attempts are exhausted, so somebody has to have confirmed the kill in the provider's own console, or accepted the leak. The body says which — only a confirmed kill takes the account off the COGS orphan report, because an accepted leak may still be billing. Matches only a revoke_failed row, so it can neither reactivate a live account nor short-circuit a revocation still in flight. Internal admin users only.","operationId":"clear_revoke_failure_v1_admin_integrations_accounts__account_id__revoke_failure_clearances_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Connected account stuck at revoke_failed.","title":"Account Id"},"description":"Connected account stuck at revoke_failed."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeFailureClearance"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeFailureClearanceResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integrations/accounts/{account_id}/syncs":{"post":{"tags":["admin"],"summary":"Force a tool-catalog sync for one connected account","description":"Queues a background tool-catalog sync for one connected integration account. The account's owning tenant is resolved from the account record. Answers 503 when the queue broker will not take the work, so a dropped dispatch is never reported as queued. Internal admin users only.","operationId":"sync_integration_account_v1_admin_integrations_accounts__account_id__syncs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Connected integration account to sync.","title":"Account Id"},"description":"Connected integration account to sync."}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAccountSyncResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable: the task queue could not accept the sync.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integrations/connected-accounts":{"get":{"tags":["admin"],"summary":"Connected-account counts by provider (COGS driver)","description":"Active connected-account counts per provider. Pass ``tenant_id`` for one tenant's ``by_provider`` map, or omit it for the cross-tenant overview (``rows``). Read-only. Admin only.","operationId":"connected_account_counts_v1_admin_integrations_connected_accounts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Scope to one tenant; omit for the platform overview.","title":"Tenant Id"},"description":"Scope to one tenant; omit for the platform overview."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountCounts"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integrations/orphaned-upstream":{"get":{"tags":["admin"],"summary":"Accounts deactivated locally but not confirmed revoked upstream","description":"Soft-deleted connected accounts whose upstream revoke is unconfirmed: deactivated in Patricia but possibly still live at the provider, so they may still be billing. Pass ``tenant_id`` to scope. Read-only. Admin only. Read ``retry_ownership`` before acting on a row: appearing here does not mean retries have stopped, and cleaning up at the provider while a drainer still owns the credential races it.","operationId":"orphaned_upstream_v1_admin_integrations_orphaned_upstream_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Scope to one tenant; omit for the platform report.","title":"Tenant Id"},"description":"Scope to one tenant; omit for the platform report."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrphanedUpstreamReport"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/integrations/wire-contract-digests":{"get":{"tags":["admin"],"summary":"Whether every approval-mandatory tool row records a valid wire contract","description":"Audits every enabled tool row backed by an ACTIVE account of a human-approval-mandatory provider: it must record a wire-contract digest that still matches its own stored schema and the live adapter contract. ``ok`` is false while any row is missing, mismatched, or unverifiable. Re-running the backfill clears ``missing`` and ``mismatched``; ``unverifiable`` it cannot: the provider will not answer for that ref, so read ``blocked_by`` first. Note ``ok: true`` with ``checked: 0`` means the scan matched no rows, not that the fleet is verified. Read-only. Internal admin users only.","operationId":"wire_contract_digest_report_v1_admin_integrations_wire_contract_digests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WireContractDigestReport"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/integrations/wire-contract-digests/backfills":{"post":{"tags":["admin"],"summary":"Re-sync every approval-mandatory account so its tool rows record a wire contract","description":"Queues the one-off fleet sweep that re-syncs every connected account of a human-approval-mandatory provider, so each of its enabled tool rows records the digest of the wire contract it dispatches. Idempotent and re-runnable: each account commits on its own, so a partial run keeps everything it finished. Poll ``GET /v1/admin/integrations/wire-contract-digests`` for the verdict. Internal admin users only.","operationId":"backfill_wire_contract_digests_endpoint_v1_admin_integrations_wire_contract_digests_backfills_post","responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WireContractBackfillResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/integrations/{tenant_id}/connected-accounts":{"delete":{"tags":["admin"],"summary":"Offboard cleanup: disconnect all of a tenant's connected accounts","description":"Locally disconnect every connected account for the tenant AND best-effort revoke each at its provider, so offboarding actually stops per-account upstream charges. Idempotent. Anything not confirmed revoked upstream is flagged for the orphaned-upstream report. Admin only.","operationId":"disconnect_all_v1_admin_integrations__tenant_id__connected_accounts_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Tenant to offboard-clean.","title":"Tenant Id"},"description":"Tenant to offboard-clean."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffboardCleanupResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/invoice-lines":{"get":{"tags":["admin"],"summary":"Search invoice lines","description":"List invoice lines with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_invoice_lines_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated invoice line list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__InvoiceLine__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/invoice-lines/{id}":{"get":{"tags":["admin"],"summary":"Get invoice line","description":"Retrieve a single invoice line by ID.","operationId":"get_item_v1_admin_invoice_lines__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested invoice line.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__InvoiceLine__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/invoices":{"get":{"tags":["admin"],"summary":"Search invoices","description":"List invoices with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_invoices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"embed","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Relation embedding. Available values: lines. Use a comma-separated list to request multiple embeds.","title":"Embed"},"description":"Relation embedding. Available values: lines. Use a comma-separated list to request multiple embeds.","examples":{"single":{"summary":"Single embed","value":"lines"}}},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated invoice list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__Invoice__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/invoices/{id}":{"get":{"tags":["admin"],"summary":"Get invoice","description":"Retrieve a single invoice by ID.","operationId":"get_item_v1_admin_invoices__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"embed","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Relation embedding. Available values: lines. Use a comma-separated list to request multiple embeds.","title":"Embed"},"description":"Relation embedding. Available values: lines. Use a comma-separated list to request multiple embeds.","examples":{"single":{"summary":"Single embed","value":"lines"}}}],"responses":{"200":{"description":"The requested invoice.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__Invoice__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/lessons":{"get":{"tags":["admin"],"summary":"Search lessons","description":"List lessons with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_lessons_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated lesson list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Lesson__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/lessons/{id}":{"get":{"tags":["admin"],"summary":"Get lesson","description":"Retrieve a single lesson by ID.","operationId":"get_item_v1_admin_lessons__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested lesson.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Lesson__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/memberships":{"get":{"tags":["admin"],"summary":"Search memberships","description":"List memberships with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_memberships_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated membership list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__rbac__Membership__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/memberships/{id}":{"get":{"tags":["admin"],"summary":"Get membership","description":"Retrieve a single membership by ID.","operationId":"get_item_v1_admin_memberships__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested membership.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__rbac__Membership__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/memory-items":{"get":{"tags":["admin"],"summary":"Search memory items","description":"List memory items with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_memory_items_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated memory item list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/memory-items/{id}":{"get":{"tags":["admin"],"summary":"Get memory item","description":"Retrieve a single memory item by ID.","operationId":"get_item_v1_admin_memory_items__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested memory item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/memory-items/{item_id}/pin":{"post":{"tags":["admin"],"summary":"Admin Pin Memory","operationId":"admin_pin_memory_v1_admin_memory_items__item_id__pin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/memory-items/{item_id}/restore":{"post":{"tags":["admin"],"summary":"Admin Restore Memory","operationId":"admin_restore_memory_v1_admin_memory_items__item_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/memory-items/{item_id}/unpin":{"post":{"tags":["admin"],"summary":"Admin Unpin Memory","operationId":"admin_unpin_memory_v1_admin_memory_items__item_id__unpin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/messages":{"get":{"tags":["admin"],"summary":"Search messages","description":"List messages with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated message list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Message__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/messages/{id}":{"get":{"tags":["admin"],"summary":"Get message","description":"Retrieve a single message by ID.","operationId":"get_item_v1_admin_messages__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Message__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/onboarding-flow":{"get":{"tags":["admin"],"summary":"The Slack and Microsoft Teams onboarding message flow, read live","description":"Step order and platform coverage read from ``ONBOARDING_SEQUENCE``; message wording read from the real production builders through the Slack preview catalog. Internal admin users only. No database session, no Slack or Teams call.","operationId":"get_onboarding_flow_v1_admin_onboarding_flow_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingFlowResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/permission-requests":{"get":{"tags":["admin"],"summary":"Search permission requests","description":"List permission requests with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_permission_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated permission request list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__PermissionRequest__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/permission-requests/{id}":{"get":{"tags":["admin"],"summary":"Get permission request","description":"Retrieve a single permission request by ID.","operationId":"get_item_v1_admin_permission_requests__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested permission request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__PermissionRequest__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/platform-audit-logs":{"get":{"tags":["admin"],"summary":"Search the platform-scope (tenantless) audit trail","description":"Staff actions that no single team owns: platform-admin grants, service-key mint and revoke, skill-catalog publishing, and the audited email test send. Narrow it with the typed filters below, which are the ONLY query surface; the free-form change and metadata bags are readable in a row but can never be sorted or filtered on. Every search records its own read-audit row. Internal admin users only.","operationId":"search_platform_audit_logs_v1_admin_platform_audit_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"description":"Exact action name.","title":"Action"},"description":"Exact action name."},{"name":"principal_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Who acted.","title":"Principal Id"},"description":"Who acted."},{"name":"principal_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(user|service_key)$"},{"type":"null"}],"description":"user | service_key","title":"Principal Type"},"description":"user | service_key"},{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"The team the action targeted.","title":"Tenant Id"},"description":"The team the action targeted."},{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"description":"e.g. user, skill, tenant.","title":"Resource Type"},"description":"e.g. user, skill, tenant."},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive lower bound.","title":"Created After"},"description":"Inclusive lower bound."},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive upper bound.","title":"Created Before"},"description":"Inclusive upper bound."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformAuditPageResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/platform-audit-logs/actions":{"get":{"tags":["admin"],"summary":"Distinct platform-audit action names","description":"The vocabulary present in the trail, so the console offers a picker. Internal admin users only.","operationId":"list_platform_audit_actions_v1_admin_platform_audit_logs_actions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformAuditActions"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/platform-installations":{"get":{"tags":["admin"],"summary":"Search platform installations","description":"List platform installations with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_platform_installations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated platform installation list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__PlatformInstallation__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/platform-installations/{id}":{"get":{"tags":["admin"],"summary":"Get platform installation","description":"Retrieve a single platform installation by ID.","operationId":"get_item_v1_admin_platform_installations__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested platform installation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__PlatformInstallation__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/reply-quality":{"get":{"tags":["admin"],"summary":"List the lowest-scored replies","description":"The worst replies first, for internal QA inspection (scores are never tenant-facing).\n\n``dimension`` is validated against the known score columns (fail-closed to ``overall``), so\nit can't be an injection vector. ``scorer_version`` defaults to the current generation so the\ndefault view never mixes non-comparable versions; ``all`` lifts the filter. Cross-tenant by\ndefault; pass ``tenant_id`` to drill in.","operationId":"list_lowest_scored_replies_v1_admin_reply_quality_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Drill into one workspace; omit for the fleet view.","title":"Tenant Id"},"description":"Drill into one workspace; omit for the fleet view."},{"name":"dimension","in":"query","required":false,"schema":{"type":"string","description":"Sort worst-first by this dimension.","default":"overall","title":"Dimension"},"description":"Sort worst-first by this dimension."},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only replies scored at/after this time (UTC).","title":"Since"},"description":"Only replies scored at/after this time (UTC)."},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only replies scored before this time (UTC).","title":"Until"},"description":"Only replies scored before this time (UTC)."},{"name":"scorer_version","in":"query","required":false,"schema":{"type":"string","description":"Which grading generation to show. Defaults to the current scorer version, because scores from different versions are NOT comparable, so mixing them (old low rows dominating the worst-first list) is misleading. Pass 'all' to inspect every version.","default":"m0.5","title":"Scorer Version"},"description":"Which grading generation to show. Defaults to the current scorer version, because scores from different versions are NOT comparable, so mixing them (old low rows dominating the worst-first list) is misleading. Pass 'all' to inspect every version."},{"name":"review_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Triage state. A reply nobody has reviewed counts as 'open'.","title":"Review Status"},"description":"Triage state. A reply nobody has reviewed counts as 'open'."},{"name":"outcome_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Judge-classified outcome of the reply.","title":"Outcome Code"},"description":"Judge-classified outcome of the reply."},{"name":"reply_type_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Judge-classified kind of reply.","title":"Reply Type Code"},"description":"Judge-classified kind of reply."},{"name":"max_overall","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"minimum":1},{"type":"null"}],"description":"Only replies at or below this overall score.","title":"Max Overall"},"description":"Only replies at or below this overall score."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReplyQualityRow"},"title":"Response List Lowest Scored Replies V1 Admin Reply Quality Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/reply-quality/count":{"get":{"tags":["admin"],"summary":"Count the replies matching the current filters","description":"How much work the current filter actually holds, so a page can say \"of N\".","operationId":"count_lowest_scored_replies_v1_admin_reply_quality_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"scorer_version","in":"query","required":false,"schema":{"type":"string","default":"m0.5","title":"Scorer Version"}},{"name":"review_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Status"}},{"name":"outcome_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome Code"}},{"name":"reply_type_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply Type Code"}},{"name":"max_overall","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"minimum":1},{"type":"null"}],"title":"Max Overall"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyQualityCount"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/reply-quality/options":{"get":{"tags":["admin"],"summary":"The closed vocabularies the console renders as pickers","description":"Served from the backend so a vocabulary can never drift out of sync with the console.\n\nA hard-coded copy in the client is how a filter starts offering a value the server has\nstopped accepting, which shows up as an empty page rather than an error.","operationId":"get_reply_quality_options_v1_admin_reply_quality_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyQualityOptions"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/reply-quality/reviews/bulk":{"post":{"tags":["admin"],"summary":"Move several replies to one triage state","description":"Apply a triage state to a selection of scored replies in one step. Each card keeps any verdict, label and note it already had; a sweep only changes where things sit in the queue. Admin users only.","operationId":"bulk_triage_reply_scores_v1_admin_reply_quality_reviews_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTriageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTriageResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/reply-quality/summary":{"get":{"tags":["admin"],"summary":"Volume, quality, triage backlog and judge↔human agreement","description":"One round trip for the whole console header, so its numbers share one instant.","operationId":"get_reply_quality_summary_v1_admin_reply_quality_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Drill into one workspace; omit for the fleet view.","title":"Tenant Id"},"description":"Drill into one workspace; omit for the fleet view."},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"scorer_version","in":"query","required":false,"schema":{"type":"string","default":"m0.5","title":"Scorer Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyQualitySummaryResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/reply-quality/{score_id}/review":{"put":{"tags":["admin"],"summary":"Record a reviewer's triage decision and judge verdict","description":"Save the human read of one scored reply: where it belongs in the queue, whether the judge was right about it, what went wrong, and an optional note. Saving again replaces the previous review. Admin users only.","operationId":"review_reply_score_v1_admin_reply_quality__score_id__review_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"score_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Score Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__reply_review__ReplyScoreReview__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/requests":{"get":{"tags":["admin"],"summary":"Cross-tenant Request ledger","operationId":"list_requests_v1_admin_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Team Id"}},{"name":"reporter_actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reporter Actor Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/BugReportSource"},{"type":"null"}],"title":"Source"}},{"name":"intake_kind","in":"query","required":false,"schema":{"anyOf":[{"enum":["bug","feature"],"type":"string"},{"type":"null"}],"title":"Intake Kind"}},{"name":"status_code","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/BugReportStatus"},{"type":"null"}],"title":"Status Code"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/RequestSeverity"},{"type":"null"}],"title":"Severity"}},{"name":"area","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"title":"Area"}},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":4,"minimum":0},{"type":"null"}],"title":"Priority"}},{"name":"confidence_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Confidence Min"}},{"name":"confidence_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Confidence Max"}},{"name":"linear_state_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/LinearStateType"},{"type":"null"}],"title":"Linear State Type"}},{"name":"duplicate_state","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DuplicateState","default":"any"}},{"name":"related_run_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Related Run Id"}},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created After"}},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Before"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"sort_by","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RequestSort","default":"created_at:desc"}},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Pq"}},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"From Prev"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRequestListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/requests/stats":{"get":{"tags":["admin"],"summary":"Request pipeline totals","operationId":"request_stats_v1_admin_requests_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Team Id"}},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created After"}},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Before"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRequestStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/requests/{request_id}":{"get":{"tags":["admin"],"summary":"Request pipeline detail","operationId":"get_request_v1_admin_requests__request_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRequestDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/runs":{"get":{"tags":["admin"],"summary":"Cross-tenant Run ledger","operationId":"list_runs_v1_admin_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Team Id"}},{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"}},{"name":"conversation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"}},{"name":"parent_run_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Run Id"}},{"name":"status_code","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/RunStatus"},{"type":"null"}],"title":"Status Code"}},{"name":"trigger_code","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/RunTrigger"},{"type":"null"}],"title":"Trigger Code"}},{"name":"source_kind","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ClassASourceKind"},{"type":"null"}],"title":"Source Kind"}},{"name":"source_ref","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}],"title":"Source Ref"}},{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}],"title":"Model"}},{"name":"cost_micro_usd_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cost Micro Usd Min"}},{"name":"cost_micro_usd_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cost Micro Usd Max"}},{"name":"duration_ms_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Duration Ms Min"}},{"name":"duration_ms_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Duration Ms Max"}},{"name":"started_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started After"}},{"name":"started_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started Before"}},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created After"}},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Before"}},{"name":"truncated","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Truncated"}},{"name":"no_result","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"No Result"}},{"name":"silent","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Silent"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"sort_by","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RunSort","default":"created_at:desc"}},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Pq"}},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"From Prev"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRunListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/runs/stats":{"get":{"tags":["admin"],"summary":"Run totals and metering","operationId":"run_stats_v1_admin_runs_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRunStats"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/runs/{run_id}":{"get":{"tags":["admin"],"summary":"Run detail","operationId":"get_run_v1_admin_runs__run_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRunDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/runs/{run_id}/artifacts":{"get":{"tags":["admin"],"summary":"Run scratch metadata","operationId":"get_run_artifacts_v1_admin_runs__run_id__artifacts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Pq"}},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"From Prev"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRunArtifactList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/runs/{run_id}/messages":{"get":{"tags":["admin"],"summary":"Audited message metadata","operationId":"get_run_messages_v1_admin_runs__run_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Pq"}},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"From Prev"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMessageList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/runs/{run_id}/permission-requests":{"get":{"tags":["admin"],"summary":"Masked permission requests","operationId":"get_run_permission_requests_v1_admin_runs__run_id__permission_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Pq"}},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"From Prev"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPermissionRequestList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/runs/{run_id}/timeline":{"get":{"tags":["admin"],"summary":"Run timeline","operationId":"get_run_timeline_v1_admin_runs__run_id__timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Pq"}},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"From Prev"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRunTimeline"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/runs/{run_id}/tool-calls":{"get":{"tags":["admin"],"summary":"Masked tool calls","operationId":"get_run_tool_calls_v1_admin_runs__run_id__tool_calls_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Pq"}},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"From Prev"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminToolCallList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/service-keys":{"post":{"tags":["admin"],"summary":"Create service API key","description":"Mint a platform-level service API key. The plaintext key is returned once and cannot be retrieved again. ``expires_at`` is required (service credentials must expire). Admin-user only: a service key cannot mint service keys.","operationId":"create_service_api_key_v1_admin_service_keys_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__service_api_key__ServiceApiKey__CreateValidator"}}}},"responses":{"201":{"description":"The created key, including the one-time plaintext.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__service_api_key__ServiceApiKey__CreatedValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["admin","admin"],"summary":"Search service api keys","description":"List service api keys with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_service_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated service api key list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__service_api_key__ServiceApiKey__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/service-keys/{id}":{"delete":{"tags":["admin"],"summary":"Revoke service API key","description":"Revoke a service API key by setting ``disabled_at``. Soft revoke: the row is kept for audit and the key stops authenticating. Idempotent. Admin-user only.","operationId":"revoke_service_api_key_v1_admin_service_keys__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["admin","admin"],"summary":"Get service api key","description":"Retrieve a single service api key by ID.","operationId":"get_item_v1_admin_service_keys__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested service api key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__service_api_key__ServiceApiKey__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog":{"get":{"tags":["admin"],"summary":"List global skills","description":"Every global skill (git-catalog + admin-authored) with its active version, counts, listing, packs. Soft-archived skills are hidden by default; pass ``include_archived=true`` to include them.","operationId":"list_skills_v1_admin_skill_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include soft-archived skills in the list.","default":false,"title":"Include Archived"},"description":"Include soft-archived skills in the list."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SkillListItemResponse"},"title":"Response List Skills V1 Admin Skill Catalog Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["admin"],"summary":"Create a skill","description":"Create a new global platform-admin skill and publish its first (proposed) version.","operationId":"create_skill_v1_admin_skill_catalog_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSkillRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDetailResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/validate":{"post":{"tags":["admin"],"summary":"Validate a manifest","description":"Compile-only validation of a manifest (no persistence) for the editor's live feedback. When ``files`` is sent (even empty), the manifest's declared bundle files are also checked for presence + size caps with the same rules create/publish enforce; send null (or omit) to validate the manifest alone.","operationId":"validate_manifest_v1_admin_skill_catalog_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateManifestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateManifestResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/skill-catalog/{skill_id}":{"get":{"tags":["admin"],"summary":"Skill detail","description":"A skill's identity, its version timeline, install count, and pack membership.","operationId":"get_skill_v1_admin_skill_catalog__skill_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDetailResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/adopt":{"post":{"tags":["admin"],"summary":"Adopt a git-catalog skill","description":"Take over a git-catalog skill for admin editing: clones its active version byte-identically into a new platform_admin version (patch-bumped semver, born proposed) and flips the definition's provenance. The skill's git-catalog folder stops applying from the next deploy on.","operationId":"adopt_skill_v1_admin_skill_catalog__skill_id__adopt_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDetailResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/archived":{"put":{"tags":["admin"],"summary":"Soft-archive a skill","description":"Soft-archive (or restore) a skill created by mistake. An archived skill is hidden from the default catalog list (pass ``include_archived=true`` on the list route to see it) and blocked from NEW installs (tenant + admin test-install), while every version and existing install stays intact. Reversible and never re-hashes a version (archive is admin metadata, not the manifest).","operationId":"set_archived_v1_admin_skill_catalog__skill_id__archived_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetArchivedRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillListItemResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/installs":{"get":{"tags":["admin"],"summary":"List installs across tenants","description":"Every tenant's install of a skill, with its pinned version and whether it is on the active one.","operationId":"list_installs_v1_admin_skill_catalog__skill_id__installs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstallResponse"},"title":"Response List Installs V1 Admin Skill Catalog  Skill Id  Installs Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["admin"],"summary":"Test-install a skill into a tenant","description":"Install a skill (listed OR unlisted) into a named tenant for live testing, the supported way to test a dark skill without touching the DB. Pins to the skill's ACTIVE version, born paused with a seeded config (the same shared sequence a real install uses). ``activate=true`` immediately flips a PORTABLE (no-delivery) skill live; a ``sans`` skill cannot be pre-activated here (complete its settings + run activation review in the tenant first). Archived skills are blocked; a second install of the same skill in the tenant is a 409.","operationId":"install_skill_into_tenant_v1_admin_skill_catalog__skill_id__installs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminInstallSkillRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/installs/{installation_id}":{"delete":{"tags":["admin"],"summary":"Uninstall a test install","description":"Hard-delete a test install (cross-tenant, staff-only), the cleanup path for admin test-installs. Its config + occurrence rows cascade. The install must belong to this skill (a foreign id 404s).","operationId":"uninstall_skill_from_tenant_v1_admin_skill_catalog__skill_id__installs__installation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/installs/{installation_id}/repin":{"post":{"tags":["admin"],"summary":"Re-pin an install","description":"Move one tenant's install pin forward (defaults to the active version) and bump the generation.","operationId":"repin_install_v1_admin_skill_catalog__skill_id__installs__installation_id__repin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepinInstallRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/listed":{"put":{"tags":["admin"],"summary":"Set catalog listing","description":"Flip a skill's catalog listing flag (listed vs unlisted).","operationId":"set_listed_v1_admin_skill_catalog__skill_id__listed_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetListedRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillListItemResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/release":{"post":{"tags":["admin"],"summary":"Release an admin-managed skill","description":"Return an adopted skill to git ownership without changing its identity or versions. The request body pins the approved preflight outcome and repo manifest hash to this locked call. Nothing pins this call to the later deploy that applies the catalog sync.","operationId":"release_skill_v1_admin_skill_catalog__skill_id__release_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseSkillRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDetailResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/release-preflight":{"get":{"tags":["admin"],"summary":"Preview a skill release","description":"Describe what the next git catalog sync will do before ownership changes.","operationId":"release_skill_preflight_v1_admin_skill_catalog__skill_id__release_preflight_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleasePreflightResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/versions":{"post":{"tags":["admin"],"summary":"Publish a new version","description":"Publish a new immutable version of a platform-admin skill (semver must strictly increase, born proposed). The version body is frozen. The skill's tenant-visible identity (title + description) is NOT changed here: it is refreshed from a version's manifest only when that version is ACTIVATED (the human review gate), so a merely-published proposed version never alters what tenants see. There is no separate title/description PATCH: identity lives in the manifest (single source of truth), and only versions are immutable.","operationId":"publish_version_v1_admin_skill_catalog__skill_id__versions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishVersionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/versions/{version_id}/activate":{"post":{"tags":["admin"],"summary":"Activate a version","description":"Activate a proposed version (retiring prior actives) and refresh the skill's tenant-visible title/description from that version's manifest (identity changes only at this human review gate, never at publish). A direct_public_post version requires a second approver (approver != author, both is_internal).","operationId":"activate_version_v1_admin_skill_catalog__skill_id__versions__version_id__activate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/versions/{version_id}/deprecate":{"post":{"tags":["admin"],"summary":"Deprecate a version","description":"Retire a version so it leaves the active offer (existing install pins keep loading it).","operationId":"deprecate_version_v1_admin_skill_catalog__skill_id__versions__version_id__deprecate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-catalog/{skill_id}/versions/{version_id}/files":{"get":{"tags":["admin"],"summary":"Version files + manifest","description":"A version's stored bundle files (decoded), its manifest, and the projected settings schema.","operationId":"get_version_files_v1_admin_skill_catalog__skill_id__versions__version_id__files_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionFilesResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skill-packs":{"get":{"tags":["admin"],"summary":"List packs","description":"Every active skill pack (a light, versioned grouping of member skill slugs).","operationId":"list_packs_v1_admin_skill_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PackResponse"},"type":"array","title":"Response List Packs V1 Admin Skill Packs Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin"],"summary":"Create a pack","description":"Create a new active pack (members must be existing global skill slugs). Admin-user only: a service key cannot create a pack (a new active pack reaches every tenant's pack catalog, so it needs a human, like activating a skill version).","operationId":"create_pack_v1_admin_skill_packs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePackRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/skill-packs/{slug}":{"put":{"tags":["admin"],"summary":"Edit a pack","description":"Edit a pack by publishing a new active version (patch bump), retiring the prior one. Admin-user only: a service key cannot edit a pack (the new active version reaches every tenant's pack catalog, so it needs a human, like activating a skill version).","operationId":"edit_pack_v1_admin_skill_packs__slug__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditPackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skills":{"get":{"tags":["admin"],"summary":"Search skills","description":"List skills with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_skills_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated skill list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/skills/{id}":{"get":{"tags":["admin"],"summary":"Get skill","description":"Retrieve a single skill by ID.","operationId":"get_item_v1_admin_skills__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested skill.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/slack-preview-channels":{"get":{"tags":["admin"],"summary":"List the channels a preview may be sent to","description":"Public, unarchived, non-shared channels of the allowlisted workspace that Patricia is already in. ``auth.test`` anchors the token to that workspace BEFORE the listing runs, so a mis-stored token cannot answer with another workspace's channel names. A convenience only: the send re-attests whatever channel id it is given. ``truncated`` says whether the list is complete.","operationId":"list_preview_channels_v1_admin_slack_preview_channels_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackPreviewChannelList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: ``errors[0].type`` is ``wrong_workspace``. The stored Slack credential is live but answers for a different workspace than the one previews may be posted into.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Preview sending is unavailable in this environment (no active Slack install for the allowlisted workspace), or Slack did not answer before anything was posted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/slack-preview-messages":{"get":{"tags":["admin"],"summary":"List the Slack message preview catalog","description":"Every catalogued Patricia message with the metadata the console needs to pick and explain one, plus whether this environment holds a credential for the one workspace a preview may be posted into. Reads the database only; makes no Slack call. Internal admin users only.","operationId":"list_preview_messages_v1_admin_slack_preview_messages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackPreviewMessageList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/slack-preview-messages/{message_id}/render":{"get":{"tags":["admin"],"summary":"Render one catalogued Slack message","description":"Builds the entry from its dummy data through the REAL production builder and returns the frames: the notification line, a plain-text transcript, the control labels, and the raw Block Kit. Read-only: no Slack call, no database write. Works for render-only entries too.","operationId":"render_preview_message_v1_admin_slack_preview_messages__message_id__render_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackPreviewRender"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/slack-preview-send":{"post":{"tags":["admin"],"summary":"Send one catalogued Slack message as Patricia","description":"Posts one catalogued message, built from dummy data, into a public channel of the ONE allowlisted workspace. Nothing in it is clickable and every link in its text is defused. The request cannot name a workspace. Inspect ``errors[0].type`` on a 409 for the specific refusal (``wrong_workspace``, ``not_public``, ``shared``, ``archived``, ``is_dm``, ``mismatched_record``, ``not_in_channel``, ``partial_send``, ``delivery_unknown``); ``delivery_unknown`` means Slack may already have accepted the post, so look at the channel before sending again rather than retrying.","operationId":"send_preview_message_v1_admin_slack_preview_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackPreviewSendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackPreviewSendResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: inspect ``errors[0].type`` for the specific refusal (``wrong_workspace``, ``not_public``, ``shared``, ``archived``, ``is_dm``, ``mismatched_record``, ``not_in_channel``, ``partial_send``, ``delivery_unknown``). ``delivery_unknown`` means Slack may already have accepted the post: look at the channel rather than retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Preview sending is unavailable in this environment (no active Slack install for the allowlisted workspace), or Slack did not answer before anything was posted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited: more than 10 sends a minute from one staff principal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/staff":{"get":{"tags":["admin"],"summary":"List staff","description":"Every live user, for granting or revoking platform-admin (is_internal) access.","operationId":"list_staff_v1_admin_staff_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StaffUserResponse"},"title":"Response List Staff V1 Admin Staff Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/staff/{user_id}/internal":{"put":{"tags":["admin"],"summary":"Grant/revoke platform admin","description":"Grant or revoke a user's is_internal flag. Admin-user only: a service key cannot change staff access (that would let a leaked key mint a permanent human admin). You cannot revoke your own access.","operationId":"set_internal_v1_admin_staff__user_id__internal_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetInternalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StaffUserResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: admin write rejected on a state invariant. Inspect ``errors[0].type`` for the specific case (for example: ``self_action_forbidden``, ``already_disabled``, ``not_disabled``, ``last_internal_admin``, ``value_error``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/subscriptions":{"get":{"tags":["admin"],"summary":"Search subscriptions","description":"List subscriptions with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_subscriptions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated subscription list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__Subscription__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/subscriptions/{id}":{"get":{"tags":["admin"],"summary":"Get subscription","description":"Retrieve a single subscription by ID.","operationId":"get_item_v1_admin_subscriptions__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__Subscription__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants":{"get":{"tags":["admin"],"summary":"Search tenants","description":"List tenants with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_tenants_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated tenant list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Tenant__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{id}":{"get":{"tags":["admin"],"summary":"Get tenant","description":"Retrieve a single tenant by ID.","operationId":"get_item_v1_admin_tenants__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested tenant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Tenant__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{tenant_id}/brain/stats":{"get":{"tags":["admin"],"summary":"Brain memory-structure stats for a tenant","description":"Scope×kind counts, salience histogram, totals, per-group + top docs.","operationId":"get_brain_stats_v1_admin_tenants__tenant_id__brain_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrainStats"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{tenant_id}/curator/affected":{"get":{"tags":["admin"],"summary":"Recently pruned memories + archived docs (restorable)","operationId":"list_curator_affected_v1_admin_tenants__tenant_id__curator_affected_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CuratorAffected"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{tenant_id}/curator/config":{"get":{"tags":["admin"],"summary":"Effective Curator config for a tenant","operationId":"get_curator_config_v1_admin_tenants__tenant_id__curator_config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CuratorConfigResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["admin"],"summary":"Override Curator config for a tenant","description":"Persist per-tenant half-life / salience-floor / stale-doc-days into Tenant.settings.","operationId":"put_curator_config_v1_admin_tenants__tenant_id__curator_config_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CuratorConfigBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CuratorConfigResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{tenant_id}/curator/sweep":{"post":{"tags":["admin"],"summary":"Run (or preview) a Curator sweep for a tenant","description":"``dry_run=true`` (default) computes the would-do counts WITHOUT mutating; ``dry_run=false`` applies the sweep (prunes/archives + writes an audit row).","operationId":"run_curator_sweep_v1_admin_tenants__tenant_id__curator_sweep_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Dry Run"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CuratorSweepResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{tenant_id}/curator/sweeps":{"get":{"tags":["admin"],"summary":"Recent Curator sweep decisions for a tenant","operationId":"list_curator_sweeps_v1_admin_tenants__tenant_id__curator_sweeps_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/models__audit__AuditLog__FullValidator"},"title":"Response List Curator Sweeps V1 Admin Tenants  Tenant Id  Curator Sweeps Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{tenant_id}/meeting-limits":{"get":{"tags":["admin"],"summary":"Meeting-recording limits for a tenant","operationId":"get_meeting_limits_v1_admin_tenants__tenant_id__meeting_limits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMeetingLimitsView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["admin"],"summary":"Set or clear a tenant's meeting-recording limits","description":"Platform-admin only. An omitted field is left unchanged; an explicit null clears the override so the tenant inherits the fleet default again.","operationId":"put_meeting_limits_v1_admin_tenants__tenant_id__meeting_limits_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMeetingLimitsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMeetingLimitsView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tool-calls":{"get":{"tags":["admin"],"summary":"Search tool calls","description":"List tool calls with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_tool_calls_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated tool call list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__ToolCall__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tool-calls/{id}":{"get":{"tags":["admin"],"summary":"Get tool call","description":"Retrieve a single tool call by ID.","operationId":"get_item_v1_admin_tool_calls__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested tool call.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__ToolCall__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tool-definitions":{"get":{"tags":["admin"],"summary":"Search tool definitions","description":"List tool definitions with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_tool_definitions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated tool definition list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__tool__ToolDefinition__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tool-definitions/{id}":{"get":{"tags":["admin"],"summary":"Get tool definition","description":"Retrieve a single tool definition by ID.","operationId":"get_item_v1_admin_tool_definitions__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested tool definition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__tool__ToolDefinition__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/usage-records":{"get":{"tags":["admin"],"summary":"Search usage records","description":"List usage records with filtering, sorting, and pagination.","operationId":"list_items_v1_admin_usage_records_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated usage record list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__UsageRecord__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/usage-records/daily":{"get":{"tags":["admin"],"summary":"Tenant Daily Usage","description":"Per-day usage TOTALS for one workspace, newest first.\n\nSince per-run sharding stores one ``usage_records`` row per run, a raw list would return\nshards, not days. This aggregates (``SUM ... GROUP BY date``) so the admin daily table shows\nreal per-day figures.","operationId":"tenant_daily_usage_v1_admin_usage_records_daily_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"The workspace whose daily usage to total.","title":"Tenant Id"},"description":"The workspace whose daily usage to total."},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"How many most-recent days to return.","default":14,"title":"Days"},"description":"How many most-recent days to return."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DailyAggregate"},"title":"Response Tenant Daily Usage V1 Admin Usage Records Daily Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/usage-records/{id}":{"get":{"tags":["admin"],"summary":"Get usage record","description":"Retrieve a single usage record by ID.","operationId":"get_item_v1_admin_usage_records__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"The requested usage record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__billing__UsageRecord__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{tenant_id}/proactive-programs":{"get":{"tags":["admin-proactive-programs"],"summary":"List a tenant's proactive programs","description":"Every live Heartbeat / Workflow Discovery row for one workspace, with the mode that decides whether it may speak, the fire cursor that decides whether it runs at all, and any auto-pause label. An empty `scope` denies channel posts but allows DMs, so it is returned alongside.","operationId":"list_proactive_programs_v1_admin_tenants__tenant_id__proactive_programs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProactiveProgramListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/admin/tenants/{tenant_id}/proactive-programs/{program_id}/mode":{"patch":{"tags":["admin-proactive-programs"],"summary":"Change a proactive program's mode","description":"Set how much one program may do: `observe` (runs, never sends), `dm_only` (DMs and reactions), `full` (also channel posts), or `disabled` (does not run). Widening past `observe` permits unprompted messages, so the change is recorded durably against the acting admin. The fire cursor is reconciled in the same transaction: a program that becomes runnable gets one, a program that stops being runnable gives up its cursor and lease.","operationId":"set_proactive_program_mode_v1_admin_tenants__tenant_id__proactive_programs__program_id__mode_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"program_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Program Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetProactiveProgramModeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProactiveProgramResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/api-keys":{"post":{"tags":["api-keys"],"summary":"Create API key","description":"Mint a tenant API key. The plaintext key is returned once and cannot be retrieved again.","operationId":"create_api_key_v1_api_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__api_key__ApiKey__CreateValidator"}}}},"responses":{"201":{"description":"The created key, including the one-time plaintext.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__api_key__ApiKey__CreatedValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["api-keys","api-keys"],"summary":"Search api keys","description":"List api keys with filtering, sorting, and pagination.","operationId":"list_items_v1_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated api key list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__api_key__ApiKey__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/api-keys/{id}":{"delete":{"tags":["api-keys"],"summary":"Revoke API key","description":"Revoke a tenant API key. Soft revoke: the row is kept for audit and the key stops authenticating.","operationId":"revoke_api_key_v1_api_keys__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["api-keys","api-keys"],"summary":"Get api key","description":"Retrieve a single api key by ID.","operationId":"get_item_v1_api_keys__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested api key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__api_key__ApiKey__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/approvals":{"get":{"tags":["approvals"],"summary":"List everything awaiting a human decision","description":"One cursor-paginated feed over both approval kinds, newest first: tool-approval requests (kind=tool) and skill share requests (kind=skill_share). Each caller sees only the rows they are in the audience of: their own tool-approval audience, plus share requests they can decide (skills:edit) or raised themselves. Tool-argument values are sanitized and visible only to callers who can decide requests (runs:execute); read-only callers receive a value-free input_summary instead.","operationId":"list_approvals_v1_approvals_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/queries__approvals_feed__ApprovalsFeedQuery__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets":{"get":{"tags":["assets"],"summary":"List the workspace's files","description":"One page of live assets, most recently changed first. Narrow with `category` (document | media), `kind` (pdf, image, …) and `search` (case-insensitive substring of the name). `total` is the true number of matches across all pages, not the number returned, so a truncated page can never read as a complete library. Deleted files are never listed.","operationId":"list_assets_v1_assets_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Narrow to 'document' or 'media'.","title":"Category"},"description":"Narrow to 'document' or 'media'."},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Narrow to one kind, e.g. 'pdf' or 'image'.","title":"Kind"},"description":"Narrow to one kind, e.g. 'pdf' or 'image'."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Case-insensitive name substring.","title":"Search"},"description":"Case-insensitive name substring."},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Narrow to one folder. Omit for every file, filed or not — the rail's 'All files'.","title":"Folder Id"},"description":"Narrow to one folder. Omit for every file, filed or not — the rail's 'All files'."},{"name":"author_actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Narrow to files one workspace member is credited with.","title":"Author Actor Id"},"description":"Narrow to files one workspace member is credited with."},{"name":"favorite","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"True narrows to favourites (the Liked filter). False and unset both mean all.","title":"Favorite"},"description":"True narrows to favourites (the Liked filter). False and unset both mean all."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Offset"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetPage"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["assets"],"summary":"Add a file to the workspace","description":"Store a new file at version 1. Send text kinds (markdown, html) as `content`, everything else base64-encoded as `content_base64`. The name must be free among the workspace's live files — a deleted file frees its name. Send `folder_id` to file it as it is created; the whole request is refused when that folder is not this workspace's, so a file is never stored somewhere nobody asked for. The new file is readable by the workspace (`team`); this route does not itself mint a public link, EXCEPT when `folder_id` names a folder that is already shared — filing into a shared folder publishes the file at once, and needs the same authority sharing does. Answers 404 for an unknown folder, 409 when the name is taken, 413 when the body is over the size cap, and 422 for an unknown kind or a mismatched content type.","operationId":"create_asset_v1_assets_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"An asset with that name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such folder in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The request body exceeds the per-version size cap. Refused at the platform body ceiling, which equals this cap, so the message is the generic 'That request is too large.'","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The file exists, but the store holding its bytes cannot be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/folders":{"get":{"tags":["assets"],"summary":"List the workspace's folders","description":"Every folder in the workspace, in alphabetical order. Each carries its `parent_id` and its full `path`, the number of live files filed directly in it, and the number in its whole branch. Folders nest, so two folders can share a name in different parents and the `path` is what tells them apart. `total` is the true number, so a capped list can never read as the whole set.","operationId":"list_asset_folders_v1_assets_folders_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["assets"],"summary":"Make a folder","description":"Create an empty folder. Send `parent_id` to make it INSIDE another folder, or omit it for a top-level one. Names are unique per parent ignoring letter case, so 'Q3' and 'q3' cannot both sit in one folder while '2026/Q3' and '2027/Q3' can both exist — answers 409 when the name is in use there, and 404 when the parent is not this workspace's.","operationId":"create_asset_folder_v1_assets_folders_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A folder with that name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such folder in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/folders/{folder_id}":{"patch":{"tags":["assets"],"summary":"Rename a folder","description":"Give a folder a different name. The files in it and the folders inside it are untouched. Answers 404 when the folder does not exist or belongs to another workspace, and 409 when a folder in the SAME parent already holds the name. Changing only the capitalisation of its own name is allowed.","operationId":"rename_asset_folder_v1_assets_folders__folder_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The folder's id.","title":"Folder Id"},"description":"The folder's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderRename"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such folder in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A folder with that name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["assets"],"summary":"Remove a folder","description":"Remove a folder. **Nothing inside it is deleted** — every file goes back to being unfiled and stays in the library, and every folder inside it moves up one level to where this folder was. The response says how many of each moved. Answers 404 when the folder does not exist or belongs to another workspace, and 409 when lifting one of its folders would collide with a name already at that level.","operationId":"delete_asset_folder_v1_assets_folders__folder_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The folder's id.","title":"Folder Id"},"description":"The folder's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderRemoved"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such folder in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A folder with that name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/folders/{folder_id}/parent":{"put":{"tags":["assets"],"summary":"Move a folder","description":"Move a folder into another folder, or send `parent_id: null` to move it to the top level. The files in it and the folders inside it move with it. Sending the same body twice leaves the same state. Answers 404 when the folder or the destination does not exist or belongs to another workspace, 409 when the destination already has a folder with this name, and 400 when the move would put a folder inside itself or nest folders too deeply.","operationId":"move_asset_folder_v1_assets_folders__folder_id__parent_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The folder to move.","title":"Folder Id"},"description":"The folder to move."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderReparent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such folder in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A folder with that name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/folders/{folder_id}/share-links":{"post":{"tags":["assets"],"summary":"Create a public link that opens every file in a folder","description":"Mint a folder link: every LIVE file in it becomes readable through the link, and every file filed into it afterward joins automatically. Needs the same authority as publishing each file in it today (its author, or an admin) — refused with no count and no names when the caller cannot publish every file. Behind the asset_folder_sharing_enabled kill switch.","operationId":"create_asset_folder_share_link_v1_assets_folders__folder_id__share_links_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The folder's id.","title":"Folder Id"},"description":"The folder's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetShareLinkCreate"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderShareLinkCreated"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["assets"],"summary":"List a folder's share links","description":"Every share link minted for this folder, newest first, revoked ones included.","operationId":"list_asset_folder_share_links_v1_assets_folders__folder_id__share_links_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The folder's id.","title":"Folder Id"},"description":"The folder's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetFolderShareLinkInfo"},"title":"Response List Asset Folder Share Links V1 Assets Folders  Folder Id  Share Links Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/folders/{folder_id}/share-links/revoke-all":{"post":{"tags":["assets"],"summary":"Turn folder sharing off","description":"Revoke every not-yet-revoked link on this folder — the folder's own off switch. Re-sharing mints a new URL; the old one never revives. Needs only assets:edit.","operationId":"revoke_all_asset_folder_share_links_v1_assets_folders__folder_id__share_links_revoke_all_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The folder's id.","title":"Folder Id"},"description":"The folder's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderShareLinksRevoked"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/folders/{folder_id}/share-links/{link_id}":{"patch":{"tags":["assets"],"summary":"Change when a folder link stops working","description":"Set a working folder link's expiry, or send `expires_in_days: null` to remove its deadline. Needs the same authority as sharing — publishing every live file in the folder as it stands now, because prolonging a publication is publishing.","operationId":"extend_asset_folder_share_link_v1_assets_folders__folder_id__share_links__link_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The folder's id.","title":"Folder Id"},"description":"The folder's id."},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The share link's id.","title":"Link Id"},"description":"The share link's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetShareLinkExtend"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderShareLinkInfo"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["assets"],"summary":"Revoke a folder share link","description":"Shut one folder link off. Takes effect on the next request. Needs only assets:edit.","operationId":"revoke_asset_folder_share_link_v1_assets_folders__folder_id__share_links__link_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The folder's id.","title":"Folder Id"},"description":"The folder's id."},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The share link's id.","title":"Link Id"},"description":"The share link's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderShareLinkInfo"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/stats":{"get":{"tags":["assets"],"summary":"Count the workspace's files by type","description":"How many live files of each kind the workspace holds and how much space they take. Backs the type filter's counts and the library's footprint line.","operationId":"get_asset_stats_v1_assets_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetLibraryStats"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/trash":{"get":{"tags":["assets"],"summary":"List the trash","description":"Files removed in the last 30 days, most recently removed first, with when each stops being restorable. Older removals never appear. Requires the same permission as removing a file: the trash is a management surface, and it is the one place a removal's reason is readable.","operationId":"list_trash_v1_assets_trash_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Offset"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrashPage"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}":{"get":{"tags":["assets"],"summary":"Read one file and its version history","description":"One live asset plus every version stored for it, newest first. Answers 404 when the file does not exist, has been deleted, or belongs to another workspace.","operationId":"get_asset_v1_assets__asset_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["assets"],"summary":"Move a file to the trash","description":"Remove a file from the workspace. It stays restorable from the trash for 30 days (`GET /assets/trash`, `POST /assets/{id}/restore`); every other read of it fails from here on (older versions included), and the name becomes free for reuse. Its open share links are revoked for good, so restoring the file does not re-open them — share it again with a new link. The reason travels in the request BODY, not the query string, so a person's words about why a file went away never land in an access log. Answers 404 when the file does not exist, has already been removed, or belongs to another workspace.","operationId":"delete_asset_v1_assets__asset_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDelete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["assets"],"summary":"Rename a file or mark it a favourite","description":"Change a file's name and/or its favourite mark. The name must be free among the workspace's live files (409 otherwise); favouriting is idempotent. Content, kind and versions never change here. Answers 404 when the file does not exist, has been deleted, or belongs to another workspace.","operationId":"update_asset_v1_assets__asset_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"An asset with that name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/canva-design":{"post":{"tags":["assets"],"summary":"Open a media file as a Canva design","description":"Create an editable Canva design from the current version of a supported media image. Answers 404 when the file is not visible to this caller.","operationId":"create_asset_canva_design_v1_assets__asset_id__canva_design_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetCanvaDesign"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Canva or file storage is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/content":{"get":{"tags":["assets"],"summary":"Download a file","description":"The current version's bytes, always as an attachment. Answers 404 when the file does not exist, has been deleted, or belongs to another workspace.","operationId":"get_asset_content_v1_assets__asset_id__content_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The stored bytes, as an attachment.","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The file exists, but the store holding its bytes cannot be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/folder":{"put":{"tags":["assets"],"summary":"Put a file in a folder","description":"File this asset into a folder, or send `folder_id: null` to take it out of the one it is in. Sending the same body twice leaves the same state. Answers 404 when the file or the folder does not exist, has been deleted, or belongs to another workspace.","operationId":"set_asset_folder_v1_assets__asset_id__folder_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetFolderAssign"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such file or folder here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/restore":{"post":{"tags":["assets"],"summary":"Bring a deleted file back","description":"Restore a file from the trash: it rejoins the live library with every version intact, under its original name. It does NOT come back shared — the removal revoked its links, and sharing it again is a fresh, deliberate act. Answers 404 when there is no restorable file with that id (never removed, past the restore window, or another workspace's) and 409 when a live file has taken the name in the meantime — rename that file first.","operationId":"restore_asset_v1_assets__asset_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A live file has taken this file's name in the meantime; rename it first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No restorable file with that id: unknown, still live, past the window, or another workspace's.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/share-links":{"post":{"tags":["assets"],"summary":"Create a public download link for a file","description":"Mint a share link: anyone holding its URL can open a page showing the file's CURRENT version and download it, no sign-in, until the link EXPIRES, is revoked, or the file is deleted (deleting revokes it, so a restore does not bring it back). A new link lasts 30 days unless the body says otherwise. Send `expires_in_days: null` for a link with NO end date, for something meant to stay published (a report linked from a website, a deck in a proposal); it still stops the moment anyone revokes it, deletes the file, or sets the file to 'Only me', and a revoked link never comes back. Re-sharing the file needs a new link. The token appears in this response once and is never retrievable again — the server keeps only a hash. Minting a link for a file that is not already 'Anyone with the link' also SETS it to that level, because publishing the file is what decides its audience; that raise takes the file author's (or an admin's) authority, so this answers 403 for anybody else. Answers 404 when the file does not exist, has been deleted, or belongs to another workspace.","operationId":"create_asset_share_link_v1_assets__asset_id__share_links_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetShareLinkCreate"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetShareLinkCreated"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["assets"],"summary":"List a file's share links","description":"Every share link minted for this file, newest first, revoked ones included — who can reach the file right now, and what has been shut off. Tokens are never included: they are shown once, at creation. Answers 404 when the file does not exist, has been deleted, or belongs to another workspace.","operationId":"list_asset_share_links_v1_assets__asset_id__share_links_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetShareLinkInfo"},"title":"Response List Asset Share Links V1 Assets  Asset Id  Share Links Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/share-links/{link_id}":{"patch":{"tags":["assets"],"summary":"Change when a share link stops working","description":"Set a working link's expiry, counted from now rather than added to what is left, or send `expires_in_days: null` to take its end date away so it works until somebody turns it off. Only a link that still works can be changed: a revoked or already-expired one is refused, because its URL has been out of use and handing that same URL back is not an edit to a date. Share the file again with a new link instead. A file set to `private` is refused too, since no end date would make its links open anything. Answers 404 when the file or the link does not exist, has been deleted, or belongs to another workspace.","operationId":"extend_asset_share_link_v1_assets__asset_id__share_links__link_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The share link's id.","title":"Link Id"},"description":"The share link's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetShareLinkExtend"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetShareLinkInfo"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["assets"],"summary":"Revoke a share link","description":"Shut one share link off. Takes effect immediately: the public URL answers 404 from the next request on. Revoking an already-revoked link is a no-op that returns it unchanged. It answers for a deleted file too, where removing the file already closed every open link. Answers 404 when the link does not exist or belongs to another workspace.","operationId":"revoke_asset_share_link_v1_assets__asset_id__share_links__link_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The share link's id.","title":"Link Id"},"description":"The share link's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetShareLinkInfo"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/thumbnail":{"get":{"tags":["assets"],"summary":"Fetch a file's grid preview","description":"A small server-generated WebP preview of the file's current version, for the library grids. Answers 202 while a preview is being prepared (requesting one that is missing queues its generation), and 404 when the file does not exist, has been deleted, belongs to another workspace, or will never have a preview — the type icon is the fallback either way. Supports `If-None-Match` with the returned ETag.","operationId":"get_asset_thumbnail_v1_assets__asset_id__thumbnail_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The server-generated preview image.","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"202":{"description":"No preview yet; generation is queued. Ask again shortly."},"304":{"description":"Unchanged — the ETag the client holds is still current."}}}},"/v1/assets/{asset_id}/versions":{"post":{"tags":["assets"],"summary":"Save a new version of a file","description":"Append the next version of an existing file. The kind never changes; omitting `content_type` keeps the file's current one. Older versions stay downloadable. Answers 404 when the file does not exist, has been deleted, or belongs to another workspace, and 409 when someone else saved a version while this one was being prepared.","operationId":"create_asset_version_v1_assets__asset_id__versions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetVersionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A newer version was stored while this one was being prepared; read it again and retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such file in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The request body exceeds the per-version size cap. Refused at the platform body ceiling, which equals this cap, so the message is the generic 'That request is too large.'","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The file exists, but the store holding its bytes cannot be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/versions/{version}/content":{"get":{"tags":["assets"],"summary":"Download one version of a file","description":"An older version's bytes, always as an attachment. Older versions stay downloadable until the file is deleted. Answers 404 for an unknown version as well as an unknown file.","operationId":"get_asset_version_content_v1_assets__asset_id__versions__version__content_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"version","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"The version number to download.","title":"Version"},"description":"The version number to download."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The stored bytes, as an attachment.","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The file exists, but the store holding its bytes cannot be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/versions/{version}/restore":{"post":{"tags":["assets"],"summary":"Bring an older version back","description":"Make an older version the current one again. The older version is copied forward as a NEW version rather than the file being rewound, so nothing is lost and the restore can itself be undone. Answers 404 when the file or that version does not exist, has been deleted, or belongs to another workspace.","operationId":"restore_asset_version_v1_assets__asset_id__versions__version__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"version","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"The version to bring back.","title":"Version"},"description":"The version to bring back."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A newer version was stored while this one was being prepared; read it again and retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such file, or no such version of it, in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The file exists, but the store holding its bytes cannot be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/assets/{asset_id}/visibility":{"put":{"tags":["assets"],"summary":"Change who can read a file","description":"Set who this file is shared with: `private` (only the person who added it, plus workspace admins), `team` (everyone in the workspace, the default), or `external` (the workspace, and it may also be shared outside through a link). Sending the same level twice leaves the same state.\n\nOnly the person who ADDED the file may change this, plus workspace admins — everyone else gets a 403 saying so, not a 404: they can already see the file, so pretending it is missing would be the confusing answer. A 404 here means the file does not exist, has been removed, belongs to another workspace, or is somebody else's private file.\n\nSetting a file to `private` also REVOKES every share link whose `revoked_at` is still empty, including a link that already expired, and refuses new ones. A public link runs as nobody, and nobody may read a private file. Revoking rather than pausing is deliberate — 'Only me' is the off-switch people reach for, so widening the file again must not re-arm a URL somebody believed they had killed. Share the file again with a new link instead. Read `GET /assets/{id}/share-links` first if you need to tell somebody what they are about to switch off.","operationId":"set_asset_visibility_v1_assets__asset_id__visibility_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's id.","title":"Asset Id"},"description":"The asset's id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetVisibilityUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You can see this file, but only the person who added it (or an admin) can re-share it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such file in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/audit-log":{"get":{"tags":["audit"],"summary":"Search audit logs","description":"List audit logs with filtering, sorting, and pagination.","operationId":"list_items_v1_audit_log_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated audit log list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__audit__AuditLog__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/audit-log/{id}":{"get":{"tags":["audit"],"summary":"Get audit log","description":"Retrieve a single audit log by ID.","operationId":"get_item_v1_audit_log__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested audit log.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__audit__AuditLog__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/auth/email-verifications":{"post":{"tags":["auth"],"summary":"Complete signup","description":"Step two of email signup. Redeems the emailed token, chooses the password, and creates the verified account. The caller then signs in normally.","operationId":"complete_email_verification_v1_auth_email_verifications_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerificationRequest"}}},"required":true},"responses":{"201":{"description":"The verified address; the account now exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerificationResponse"}}}},"400":{"description":"The link is not valid — expired, already used, or unrecognized (``INVALID_AUTH_ACTION``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests from this client (``RATE_LIMITED``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The address was claimed while this link was outstanding","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/login":{"post":{"tags":["auth"],"summary":"Login","description":"Authenticate with email and password and receive a token pair scoped to one tenant.","operationId":"login_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Access and refresh tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"401":{"description":"Invalid credentials or token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not a member of the requested tenant","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Captcha required or rejected — see ``code`` (``CAPTCHA_REQUIRED`` / ``CAPTCHA_REJECTED``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Captcha verification unavailable (``CAPTCHA_ERROR``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many attempts against this address (``TOO_MANY_REQUESTS``), or too many requests from this client (``RATE_LIMITED``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","description":"Revoke a refresh session. Silent on unknown or invalid tokens.","operationId":"logout_v1_auth_logout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutRequest"}}},"required":true},"responses":{"204":{"description":"No content."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/me":{"get":{"tags":["auth"],"summary":"Get current user","description":"Return the authenticated user, their active tenant, and all tenant memberships.","operationId":"me_v1_auth_me_get","responses":{"200":{"description":"The authenticated user's profile + memberships.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"401":{"description":"Invalid credentials or token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/auth/password-reset-requests":{"post":{"tags":["auth"],"summary":"Request a set/reset password link","description":"Sends a link that lets the holder of the mailbox choose a password. Answers 202 whether or not the address has an account.","operationId":"request_password_link_v1_auth_password_reset_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordLinkRequest"}}},"required":true},"responses":{"202":{"description":"Always the same acknowledgement.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthEmailAcceptedResponse"}}}},"400":{"description":"Captcha required or rejected — see ``code`` (``CAPTCHA_REQUIRED`` / ``CAPTCHA_REJECTED``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Captcha verification unavailable (``CAPTCHA_ERROR``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many attempts against this address (``TOO_MANY_REQUESTS``), or too many requests from this client (``RATE_LIMITED``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/password-resets":{"post":{"tags":["auth"],"summary":"Set or reset a password","description":"Redeems a set/reset link, writes the new password, and invalidates every session and access token the old credential could still reach. The caller then signs in normally.","operationId":"complete_password_reset_v1_auth_password_resets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequest"}}},"required":true},"responses":{"200":{"description":"Acknowledgement; the password is now set.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthEmailAcceptedResponse"}}}},"400":{"description":"The link is not valid — expired, already used, or unrecognized (``INVALID_AUTH_ACTION``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests from this client (``RATE_LIMITED``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh token","description":"Exchange a valid refresh token for a rotated token pair.","operationId":"refresh_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Rotated access and refresh tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"401":{"description":"Invalid credentials or token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/register":{"post":{"tags":["auth"],"summary":"Request a signup link","description":"Step one of email signup. Sends a verification link to the address and creates nothing. Answers 202 whether or not the address can be registered.","operationId":"register_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"202":{"description":"Always the same acknowledgement.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthEmailAcceptedResponse"}}}},"400":{"description":"Captcha required or rejected — see ``code`` (``CAPTCHA_REQUIRED`` / ``CAPTCHA_REJECTED``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Captcha verification unavailable (``CAPTCHA_ERROR``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many attempts against this address (``TOO_MANY_REQUESTS``), or too many requests from this client (``RATE_LIMITED``)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/slack/callback":{"get":{"tags":["auth"],"summary":"Slack Callback","description":"Exchange the code, issue the session, and hand tokens to the originating SPA.\n\nOne callback path serves two purposes, dispatched by the VERIFIED contents of the signed state.\nSharing the path is deliberate: a second callback would need a second ``redirect_uri``, which is\na change to the live Slack app.\n\nThe connect-redemption purpose is checked first and is a strictly separate branch — it never\nreaches ``service.complete`` and therefore never reaches ``AuthService.login_with_identity``,\nwhich creates a ``User`` and activates a pending membership. Proving who asked for a connect\nlink must do neither.","operationId":"slack_callback_v1_auth_slack_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/slack/login":{"get":{"tags":["auth"],"summary":"Slack Login","description":"Redirect to \"Sign in with Slack\" (OIDC) with a signed, short-TTL state.","operationId":"slack_login_v1_auth_slack_login_get","parameters":[{"name":"redirect","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"App-relative path to return to after sign-in.","title":"Redirect"},"description":"App-relative path to return to after sign-in."},{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Which first-party app the sign-in started from.","title":"Surface"},"description":"Which first-party app the sign-in started from."}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/authored-skills":{"post":{"tags":["authored-skills"],"summary":"Author a skill from a manifest (manual editor)","description":"Create or update a tenant skill from a manifest object. An owner or admin author's version activates immediately and can be installed. A version authored without that authority stays PROPOSED until an owner or admin approves it. Immutable per version: a changed body needs a new version number. Draft-only delivery means a tenant skill can never post to a channel on its own.","operationId":"author_skill_v1_authored_skills_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["authored-skills"],"summary":"List this workspace's authored skills","description":"The tenant's OWN authored skills (never git-catalog or another tenant's). ``in_use`` says a skill is enabled somewhere in the workspace, whoever holds it, so the page can offer Enable only where it would actually succeed. ``authored_by_caller`` says the caller wrote at least one version — the My skills tab's question, never an authority one (see ``can_manage``).","operationId":"list_authored_skills_v1_authored_skills_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuthoredSkillSummary"},"title":"Response List Authored Skills V1 Authored Skills Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/files":{"post":{"tags":["authored-skills"],"summary":"Create an authored skill from editable files","description":"Create a tenant-authored skill from the complete manifest and file set held by the editor. The server stores the first version as 1.0.0 and refuses an existing tenant slug.","operationId":"create_authored_skill_files_v1_authored_skills_files_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAuthoredSkillFilesRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/from-github":{"post":{"tags":["authored-skills"],"summary":"Autodetect skills in a public GitHub repo","description":"Point at a PUBLIC github.com repo to autodetect every manifest.yaml in it. Patricia downloads the repo tarball over an SSRF-hardened, size-capped fetch (github hosts only, no redirects, private/internal addresses blocked, DNS-rebind-proof IP pinning), reads it safely in memory, and returns the skills it found with friendly validation results. No skill is created: pick a valid one and author it via /authored-skills/from-github/author.","operationId":"autodetect_from_github_v1_authored_skills_from_github_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubAutodetectResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/from-github/author":{"post":{"tags":["authored-skills"],"summary":"Author a chosen GitHub-autodetected skill","description":"Author a candidate returned by /authored-skills/from-github. The manifest is re-validated + re-compiled through the same platform gates, so nothing from the preview is trusted. An owner or admin author's version activates immediately; a version authored without that authority needs an owner or admin's approval. It remains draft-only, tenant-scoped, and recorded as source_kind='github'.","operationId":"author_from_github_v1_authored_skills_from_github_author_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubAuthorRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/health":{"post":{"tags":["authored-skills"],"summary":"Check an authored skill's health","description":"Inspect unsaved manifest and file bytes without persistence. Broken skills return 200 with specific blockers and warnings in the response. A blocker names something that will fail or cannot run. Health does not stop saving, enabling, or upgrading today.","operationId":"check_authored_skill_health_v1_authored_skills_health_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillHealthRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillHealthReport"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/instructions":{"post":{"tags":["authored-skills"],"summary":"Author an instruction skill (simple editor)","description":"Create or update an instruction skill from the simple form: a name, a short description, and plain-markdown instructions. An owner or admin author's version is ready to enable immediately. A version authored without that authority needs an owner or admin to approve it first. The version is managed automatically, so you never type a version.","operationId":"author_instruction_v1_authored_skills_instructions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstructionSkillBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/instructions/markdown":{"post":{"tags":["authored-skills"],"summary":"Author an instruction skill from a pasted SKILL.md (default editor)","description":"Create or update an instruction skill from a single pasted (or imported) SKILL.md: optional YAML front matter (name, description) then plain-markdown instructions. Parsed server-side into the SAME 'instructions' archetype as the typed path. An owner or admin author's version is ready to enable immediately; a version authored without that authority needs an owner or admin's approval first. The version is managed automatically. The raw markdown is preserved verbatim for later editing.","operationId":"author_markdown_instruction_v1_authored_skills_instructions_markdown_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkdownInstructionSkillBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/instructions/markdown/validate":{"post":{"tags":["authored-skills"],"summary":"Validate a pasted SKILL.md (live editor validation)","description":"Validate the DEFAULT paste-a-SKILL.md form WITHOUT saving. Parses the markdown (optional front matter → name + description, a leading '# H1' as the name fallback, the rest as the instruction body), then compiles it through the platform gates. Returns the parsed name + description plus friendly, non-technical errors for the editor's live preview. Always 200 (the result is in the body).","operationId":"validate_markdown_instruction_skill_v1_authored_skills_instructions_markdown_validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkdownInstructionSkillBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/instructions/validate":{"post":{"tags":["authored-skills"],"summary":"Validate an instruction skill (live editor validation)","description":"Validate the simple instruction-skill form (name + description + plain-markdown instructions) WITHOUT saving. Returns friendly, non-technical errors for the editor to show inline. Always 200.","operationId":"validate_instruction_skill_v1_authored_skills_instructions_validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstructionSkillBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/upload":{"post":{"tags":["authored-skills"],"summary":"Author a skill from an uploaded ZIP package","description":"Upload a .zip containing a manifest.yaml (+ optional SKILL.md). The archive is read safely in memory (no extraction, hard size/bomb/traversal caps); the manifest is validated + compiled like the manual path. Send the raw .zip as the request body. An owner or admin author's version activates immediately; a version authored without that authority needs an owner or admin's approval. Tenant-authored delivery remains draft-only.","operationId":"upload_skill_zip_v1_authored_skills_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/validate":{"post":{"tags":["authored-skills"],"summary":"Validate a skill manifest (live editor validation)","description":"Validate + compile a manifest through the platform gates WITHOUT saving. Returns friendly, non-technical errors for the editor to show inline. Always 200 (the result is in the body).","operationId":"validate_manifest_v1_authored_skills_validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/{manifest_version_id}/approve":{"post":{"tags":["authored-skills"],"summary":"Approve a proposed tenant skill version","description":"Activate a proposed tenant version. Owners and admins may approve their own authored versions. A version authored without that authority must be approved by a different owner or admin.","operationId":"approve_authored_version_v1_authored_skills__manifest_version_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"manifest_version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Manifest Version Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/{skill_id}":{"get":{"tags":["authored-skills"],"summary":"Get one authored skill + its versions + editable manifest","description":"One authored skill scoped to the caller's tenant (foreign/global id → 404). ``in_use`` says the skill is enabled somewhere in the workspace; ``installation`` carries the install itself only when this caller may see it, so a teammate's personal install reads as in use with no install to open.","operationId":"get_authored_skill_v1_authored_skills__skill_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthoredSkillDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["authored-skills"],"summary":"Delete an authored skill (DSAR hard-delete)","description":"Hard-delete the skill + its versions, compiled rows, files, installs, and occurrences. A skills:delete holder (owner/admin, or a delete-scoped API key) removes ANY authored skill, installed or not. Without that authority, only the skill's own author may delete it, and only once it has NO install left, whatever its scope and whoever owns it — including the author's own. Uninstall first (a route the author already has), then delete.","operationId":"delete_authored_skill_v1_authored_skills__skill_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/{skill_id}/files":{"get":{"tags":["authored-skills"],"summary":"Get an authored skill's editable files","description":"Return the newest tenant-authored version as editable YAML and bundle files. Foreign and global skill ids return 404. A blocker names something that will fail or cannot run. Health does not stop saving, enabling, or upgrading today.","operationId":"get_authored_skill_files_v1_authored_skills__skill_id__files_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthoredSkillFilesResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["authored-skills"],"summary":"Replace an authored skill's editable files","description":"Replace the newest tenant-authored skill with the complete manifest and file set held by the editor. An unchanged save reuses the current version. A changed save creates the next patch version. A blocker names something that will fail or cannot run. Health does not stop saving, enabling, or upgrading today.","operationId":"save_authored_skill_files_v1_authored_skills__skill_id__files_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthoredSkillFilesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/{skill_id}/install":{"post":{"tags":["authored-skills"],"summary":"Enable an authored skill in this workspace","description":"Enable the tenant skill's active (approved) version. An INSTRUCTION skill is enabled immediately (its guidance reaches Patricia through the prompt, so there is nothing to schedule); the response lists any recommended integrations the workspace hasn't connected yet, to nudge the teammate. A SANS (scheduled) skill is born PAUSED + a default config, exactly like a catalog skill: the admin completes settings + runs activation review before delivery.\n\nThe optional body chooses how widely to enable it. Omit it (or send `team`) for the whole workspace, exactly as before, when the caller holds skills:install. Without skills:install, an absent body enables it for yourself alone instead; an EXPLICIT `team` is refused (403) rather than silently narrowed. Send `personal` to enable it for yourself alone: only your conversations carry the skill's guidance. Personal needs an INSTRUCTION skill (400 otherwise) and a caller whose membership links to a chat profile (400 otherwise, so an API key can never own one). Either way the workspace holds ONE install of a skill, so a second Enable is a 409.","operationId":"install_authored_skill_v1_authored_skills__skill_id__install_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/InstallAuthoredSkillRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthoredInstallResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/authored-skills/{skill_id}/installation/kill":{"patch":{"tags":["authored-skills"],"summary":"Emergency stop: halt (or resume) this workspace's install of an authored skill","description":"Break-glass for a skill of this workspace's own: set or clear the kill switch on whichever install the workspace holds of it, whoever took it. A killed instruction skill's guidance stops reaching prompts immediately, including its owner's.\n\nThis exists because a PERSONAL install is invisible to everyone but its owner, and so is its installation id, which left the per-install kill switch at ``PATCH /skill-installations/{id}/kill`` unreachable for exactly the untrusted prose it matters most for. Use that route whenever you can see the install; use this one when the workspace needs to stop a skill it cannot open. It answers 204 and nothing else: no installation id, no owner, no scope, no current state, so it restores the stop without disclosing anything the privacy fence protects. 404 only when this workspace has no install of the skill at all. Requires skills:edit.","operationId":"kill_authored_skill_installation_v1_authored_skills__skill_id__installation_kill_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KillRequest"}}}},"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/actor-preferences/auto-approve":{"get":{"tags":["auto-approve"],"summary":"Get an actor's auto-approve settings","description":"Read an actor's durable auto-approve grants + the tenant master state (your own, or anyone's if you are an admin).","operationId":"get_auto_approve_v1_actor_preferences_auto_approve_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoApproveActorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/actor-preferences/auto-approve/tools/{tool_ref}":{"delete":{"tags":["auto-approve"],"summary":"Revoke a durable auto-approve grant for one tool","description":"Remove the actor's 'auto-approve this tool going forward' grant (your own, or anyone's if you are an admin).","operationId":"revoke_auto_approve_tool_v1_actor_preferences_auto_approve_tools__tool_ref__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tool_ref","in":"path","required":true,"schema":{"type":"string","description":"The canonical tool ref of the durable grant to revoke.","title":"Tool Ref"},"description":"The canonical tool ref of the durable grant to revoke."},{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoApproveActorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/auto-approve/tenant":{"get":{"tags":["auto-approve"],"summary":"Get the tenant auto-approve controls","description":"Read the workspace master switch, kill-switch epoch, and allowlist (admin).","operationId":"get_tenant_auto_approve_v1_auto_approve_tenant_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantAutoApproveResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["auto-approve"],"summary":"Set the tenant auto-approve controls","description":"Set the workspace master switch + allowlist; ``bump_epoch`` fires the kill switch (invalidates every durable + in-flight grant). Admin only.","operationId":"set_tenant_auto_approve_v1_auto_approve_tenant_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantAutoApproveBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantAutoApproveResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing":{"get":{"tags":["billing"],"summary":"Get the workspace billing summary","description":"The caller's subscription tier/status, seats, remaining credits, and the Stripe publishable key.","operationId":"get_billing_v1_billing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/auto-refill":{"get":{"tags":["billing"],"summary":"Get the workspace auto-refill settings","description":"The tenant's auto-refill config (enable/threshold/amount/cap), or null if never set.","operationId":"get_auto_refill_v1_billing_auto_refill_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AutoRefillConfigView"},{"type":"null"}],"title":"Response Get Auto Refill V1 Billing Auto Refill Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["billing"],"summary":"Set the workspace auto-refill settings","description":"Create or replace the tenant's auto-refill config (enable/threshold/amount/cap).","operationId":"set_auto_refill_v1_billing_auto_refill_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRefillConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRefillConfigView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Malformed request (unknown plan, or no billing account yet).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"The payment provider call failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/bill-to":{"get":{"tags":["billing"],"summary":"Get the billing details","description":"The workspace's billing details (company name, address, tax id) shown on its invoices.","operationId":"get_bill_to_v1_billing_bill_to_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillToView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["billing"],"summary":"Update the billing details","description":"Replace the billing details snapshotted onto future invoices (existing invoices keep theirs).","operationId":"set_bill_to_v1_billing_bill_to_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillToUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillToView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/checkout":{"post":{"tags":["billing"],"summary":"Start a Stripe Checkout Session","description":"Create a hosted Checkout Session for a seat subscription or a credit pack; returns its URL.","operationId":"start_checkout_v1_billing_checkout_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Malformed request (unknown plan, or no billing account yet).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"The payment provider call failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/invoices":{"get":{"tags":["billing"],"summary":"List invoices","description":"The tenant's invoices, newest first (totals only; line items via the single-invoice read).","operationId":"list_invoices_v1_billing_invoices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/invoices/{invoice_id}":{"get":{"tags":["billing"],"summary":"Get one invoice (with line items)","description":"A single invoice and its line items: the structured source for the client-side PDF.","operationId":"get_invoice_v1_billing_invoices__invoice_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invoice Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/payment-methods":{"get":{"tags":["billing"],"summary":"List saved payment methods","description":"The tenant's saved cards (brand/last4/expiry), default first.","operationId":"list_payment_methods_v1_billing_payment_methods_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/payment-methods/setup-session":{"post":{"tags":["billing"],"summary":"Start adding a payment method","description":"Create a Stripe Checkout session (setup mode) to save a card; returns its URL.","operationId":"create_setup_session_v1_billing_payment_methods_setup_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupSessionResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Malformed request (unknown plan, or no billing account yet).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"The payment provider call failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/payment-methods/sync":{"post":{"tags":["billing"],"summary":"Refresh saved payment methods from Stripe","description":"Re-sync the saved-card list from Stripe (self-heal), then return it with ``refreshed`` saying whether Stripe was actually read. A false ``refreshed`` means the list is the last state we saved, not the current one.","operationId":"sync_payment_methods_v1_billing_payment_methods_sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodSyncResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Malformed request (unknown plan, or no billing account yet).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"The payment provider call failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/payment-methods/{payment_method_id}":{"delete":{"tags":["billing"],"summary":"Remove a payment method","description":"Detach the card from Stripe and delete the local record. Does not disable auto-refill.","operationId":"delete_payment_method_v1_billing_payment_methods__payment_method_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Payment Method Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Malformed request (unknown plan, or no billing account yet).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"The payment provider call failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such payment method for this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/payment-methods/{payment_method_id}/default":{"post":{"tags":["billing"],"summary":"Set a payment method as default","description":"Make a saved card the customer's default for off-session (auto-refill) charges.","operationId":"set_default_payment_method_v1_billing_payment_methods__payment_method_id__default_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Payment Method Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Malformed request (unknown plan, or no billing account yet).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"The payment provider call failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such payment method for this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/portal":{"post":{"tags":["billing"],"summary":"Open the Stripe Billing Portal","description":"Create a Billing Portal session so the tenant can manage its subscription; returns its URL.","operationId":"open_portal_v1_billing_portal_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Malformed request (unknown plan, or no billing account yet).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"The payment provider call failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/starter-verification":{"post":{"tags":["billing"],"summary":"Start the $1 starter card verification","description":"Create a Stripe Checkout Session that authorizes (never charges) $1 to verify a card and unlock a held workspace's starter credits; returns its URL.","operationId":"start_starter_verification_v1_billing_starter_verification_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Malformed request (unknown plan, or no billing account yet).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"This workspace has no starter card verification pending.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"The payment provider call failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/brain-docs":{"get":{"tags":["brain-docs","brain-docs"],"summary":"Search brain docs","description":"List brain docs with filtering, sorting, and pagination.","operationId":"list_items_v1_brain_docs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated brain doc list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["brain-docs","brain-docs"],"summary":"Create brain doc","description":"Create a new brain doc.","operationId":"create_item_v1_brain_docs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__CreateValidator"}}}},"responses":{"201":{"description":"The created brain doc.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/brain-docs/{id}":{"get":{"tags":["brain-docs","brain-docs"],"summary":"Get brain doc","description":"Retrieve a single brain doc by ID.","operationId":"get_item_v1_brain_docs__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested brain doc.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["brain-docs","brain-docs"],"summary":"Update brain doc","description":"Full update (PUT) of a brain doc.","operationId":"update_item_v1_brain_docs__id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__UpdateValidator"}}}},"responses":{"200":{"description":"The updated brain doc.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["brain-docs","brain-docs"],"summary":"Partial update brain doc","description":"Partial update (PATCH) of a brain doc.","operationId":"merge_item_v1_brain_docs__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__MergeValidator"}}}},"responses":{"200":{"description":"The updated brain doc.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["brain-docs","brain-docs"],"summary":"Delete brain doc","description":"Soft-delete a brain doc by ID.","operationId":"delete_item_v1_brain_docs__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/brain-docs/{doc_id}/pin":{"post":{"tags":["brain-overrides"],"summary":"Pin a brain doc","description":"Protect a doc from Curator archival and consolidation.","operationId":"pin_brain_doc_v1_brain_docs__doc_id__pin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/brain-docs/{doc_id}/restore":{"post":{"tags":["brain-overrides"],"summary":"Restore a brain doc","description":"Un-archive (and un-soft-delete) a doc, returning it to the active set.","operationId":"restore_brain_doc_v1_brain_docs__doc_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/brain-docs/{doc_id}/unpin":{"post":{"tags":["brain-overrides"],"summary":"Unpin a brain doc","operationId":"unpin_brain_doc_v1_brain_docs__doc_id__unpin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory-items/{item_id}/pin":{"post":{"tags":["brain-overrides"],"summary":"Pin a memory item","description":"Protect a memory from Curator decay, prune, and consolidation.","operationId":"pin_memory_item_v1_memory_items__item_id__pin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory-items/{item_id}/restore":{"post":{"tags":["brain-overrides"],"summary":"Restore a memory item","description":"Bring a pruned or soft-deleted memory back into the live recall set.","operationId":"restore_memory_item_v1_memory_items__item_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory-items/{item_id}/unpin":{"post":{"tags":["brain-overrides"],"summary":"Unpin a memory item","operationId":"unpin_memory_item_v1_memory_items__item_id__unpin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds":{"get":{"tags":["channel-feeds"],"summary":"List the workspace's channel triggers","description":"List active triggers by default, stopped triggers, or all visible triggers.","operationId":"list_channel_feeds_v1_channel_feeds_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"enum":["active","stopped","all"],"type":"string","default":"active","title":"Status"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["channel-feeds"],"summary":"Create a channel trigger","operationId":"create_channel_feed_v1_channel_feeds_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds/catalog":{"get":{"tags":["channel-feeds"],"summary":"List trigger sources and events","operationId":"get_channel_feed_catalog_v1_channel_feeds_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerCatalogResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds/channels":{"get":{"tags":["channel-feeds"],"summary":"List deliverable Slack channels for triggers","operationId":"list_channel_feed_channels_v1_channel_feeds_channels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerChannelsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds/people":{"get":{"tags":["channel-feeds"],"summary":"List teammates for trigger conditions","operationId":"list_channel_feed_people_v1_channel_feeds_people_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerPeopleResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds/{feed_id}":{"patch":{"tags":["channel-feeds"],"summary":"Update a channel trigger","operationId":"update_channel_feed_v1_channel_feeds__feed_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feed Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerPatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["channel-feeds"],"summary":"Delete a channel trigger","operationId":"delete_channel_feed_v1_channel_feeds__feed_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feed Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds/{feed_id}/fires":{"get":{"tags":["channel-feeds"],"summary":"List a channel trigger's recent fires","operationId":"list_channel_feed_fires_v1_channel_feeds__feed_id__fires_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feed Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":20,"title":"Limit"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerFireListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds/{feed_id}/preview":{"post":{"tags":["channel-feeds"],"summary":"Preview a channel trigger","operationId":"preview_channel_feed_v1_channel_feeds__feed_id__preview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feed Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerPreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerPreviewResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds/{feed_id}/resume":{"post":{"tags":["channel-feeds"],"summary":"Resume a stopped channel trigger","description":"Resumes one stopped trigger. Repeating the request is a successful no-op.","operationId":"resume_channel_feed_v1_channel_feeds__feed_id__resume_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feed Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/channel-feeds/{feed_id}/stop":{"post":{"tags":["channel-feeds"],"summary":"Stop a channel trigger","description":"Stops one trigger. Repeating the request is a successful no-op.","operationId":"stop_channel_feed_v1_channel_feeds__feed_id__stop_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feed Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/company-assets/{public_token}":{"get":{"tags":["company-assets"],"summary":"Serve a self-hosted brand asset (public, by capability token)","description":"Returns the raster logo bytes for the given capability token. Public + cacheable.","operationId":"get_company_asset_v1_company_assets__public_token__get","parameters":[{"name":"public_token","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The asset's random capability token.","title":"Public Token"},"description":"The asset's random capability token."}],"responses":{"200":{"description":"The asset bytes.","content":{"application/json":{"schema":{}},"image/*":{}}},"404":{"description":"No asset for that token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/company-profile":{"get":{"tags":["company-profile"],"summary":"Get the workspace company profile","description":"The onboarding company profile for the caller's workspace (empty shape if unset).","operationId":"get_company_profile_v1_company_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["company-profile"],"summary":"Update the workspace company profile","description":"Partial update of company-profile fields (only provided fields are written).","operationId":"update_company_profile_v1_company_profile_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/company-profile/analysis-progress":{"get":{"tags":["company-profile"],"summary":"Live progress of the website analysis","description":"What the website read currently running for the caller's workspace has done so far. Returns an idle, empty result whenever nothing is running.","operationId":"get_analysis_progress_v1_company_profile_analysis_progress_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisProgressResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/company-profile/analyze":{"post":{"tags":["company-profile"],"summary":"Analyze the company website","description":"Read the given site, extract the company profile (LLM, structured), self-host the brand marks (primary logo + icon), and persist. The response carries how every step of the read finished.","operationId":"analyze_company_website_v1_company_profile_analyze_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeWebsiteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeWebsiteResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The site could not be analyzed (unreachable/blocked/unreadable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Workspace is over its monthly spend cap.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"An analysis is already in progress for this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited: too many analyses; retry after a moment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/company-profile/complete-onboarding":{"post":{"tags":["company-profile"],"summary":"Mark onboarding complete","description":"Flip the workspace's onboarding gate (idempotent).","operationId":"complete_onboarding_v1_company_profile_complete_onboarding_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingCompleteResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/company-profile/confirm":{"post":{"tags":["company-profile"],"summary":"Confirm suggested brand kit fields","description":"Confirm suggested fields that already have values. Repeated confirmations are safe.","operationId":"confirm_company_profile_fields_v1_company_profile_confirm_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmFieldsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/company-profile/logo":{"put":{"tags":["company-profile"],"summary":"Replace the workspace brand logo","description":"Self-host an uploaded brand logo, replacing any existing one. Send the raw image bytes as the request body with a Content-Type naming the type (PNG/JPEG/GIF/WEBP/ICO; max 2 MiB). Returns the updated profile.","operationId":"replace_company_logo_v1_company_profile_logo_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Missing or empty logo body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The logo exceeds the maximum size.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Unsupported logo media type (raster image required).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"required":true,"content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/gif":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}},"image/x-icon":{"schema":{"type":"string","format":"binary"}},"image/vnd.microsoft.icon":{"schema":{"type":"string","format":"binary"}}}}},"delete":{"tags":["company-profile"],"summary":"Remove the workspace brand logo","description":"Unlink and delete the self-hosted brand logo (idempotent). Returns the updated profile.","operationId":"remove_company_logo_v1_company_profile_logo_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/company-profile/logos/{slot}/{mode}":{"put":{"tags":["company-profile"],"summary":"Replace a workspace brand logo slot","description":"Self-host an uploaded logo for one slot and mode. Send raw image bytes with a supported Content-Type (PNG/JPEG/GIF/WEBP/ICO; max 2 MiB). Returns the updated profile.","operationId":"replace_company_logo_slot_v1_company_profile_logos__slot___mode__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slot","in":"path","required":true,"schema":{"type":"string","title":"Slot"}},{"name":"mode","in":"path","required":true,"schema":{"type":"string","title":"Mode"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Missing or empty logo body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The logo exceeds the maximum size.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Unsupported logo media type (raster image required).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"required":true,"content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/gif":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}},"image/x-icon":{"schema":{"type":"string","format":"binary"}},"image/vnd.microsoft.icon":{"schema":{"type":"string","format":"binary"}}}}},"delete":{"tags":["company-profile"],"summary":"Remove a workspace brand logo slot","description":"Unlink one logo slot and delete its asset when no other slot uses it. Returns the updated profile.","operationId":"remove_company_logo_slot_v1_company_profile_logos__slot___mode__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slot","in":"path","required":true,"schema":{"type":"string","title":"Slot"}},{"name":"mode","in":"path","required":true,"schema":{"type":"string","title":"Mode"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfileResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/console-chat/conversations":{"get":{"tags":["console-chat"],"summary":"List console chat conversations","operationId":"list_console_conversations_v1_console_chat_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsoleConversationListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["console-chat"],"summary":"Create a console chat conversation","operationId":"create_console_conversation_v1_console_chat_conversations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsoleConversationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/console-chat/conversations/{conversation_id}":{"get":{"tags":["console-chat"],"summary":"Get a console chat conversation","operationId":"get_console_conversation_v1_console_chat_conversations__conversation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsoleThreadResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["console-chat"],"summary":"Rename a console chat conversation","operationId":"rename_console_conversation_v1_console_chat_conversations__conversation_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsoleConversationRenameRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsoleConversationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["console-chat"],"summary":"Delete a console chat conversation","operationId":"delete_console_conversation_v1_console_chat_conversations__conversation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/console-chat/messages":{"post":{"tags":["console-chat"],"summary":"Start a console chat turn","description":"Start a Patricia run in the authenticated member's private console thread.","operationId":"create_console_message_v1_console_chat_messages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":255,"title":"Idempotency-Key"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsoleMessageRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsoleMessageResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Console chat or the task queue is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/console-chat/thread":{"get":{"tags":["console-chat"],"summary":"Get the console chat thread","description":"Get the authenticated member's private console thread and live run progress.","operationId":"get_console_thread_v1_console_chat_thread_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsoleThreadResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Console chat is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/conversations":{"get":{"tags":["conversations","conversations"],"summary":"Search conversations","description":"List conversations with filtering, sorting, and pagination.","operationId":"list_items_v1_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated conversation list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Conversation__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/conversations/conversation-directory":{"get":{"tags":["conversations"],"summary":"Search the conversation directory","description":"Read-only directory view backed by a SearchQuery (QueryProxy).","operationId":"list_conversation_directory_v1_conversations_conversation_directory_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/queries__conversation_directory__ConversationDirectoryQuery__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/conversations/{conversation_id}/messages":{"get":{"tags":["conversations"],"summary":"Search messages","description":"List messages with filtering, sorting, and pagination. Use 'any' as conversation_id to search across all parents in the tenant.","operationId":"list_messages_v1_conversations__conversation_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","description":"Conversation ID. Use 'any' to search across all parents.","title":"Conversation Id"},"description":"Conversation ID. Use 'any' to search across all parents."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated message list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Message__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/conversations/{conversation_id}/messages/{id}":{"get":{"tags":["conversations"],"summary":"Get message","description":"Retrieve a single message by ID. Use 'any' as conversation_id to skip parent validation.","operationId":"get_message_v1_conversations__conversation_id__messages__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","description":"Conversation ID. Use 'any' to search across all parents.","title":"Conversation Id"},"description":"Conversation ID. Use 'any' to search across all parents."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Message__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/conversations/{conversation_id}/proactive-mode":{"get":{"tags":["conversations"],"summary":"Get whether Patricia replies on her own in this conversation","description":"How freely Patricia replies in one conversation: whether she stays out, answers only when asked, or joins in on her own. Also reports where the setting comes from, so a conversation nobody has configured says it is following the workspace setting (or Patricia's standard one) instead of coming back empty. Read-only.","operationId":"get_conversation_proactive_mode_v1_conversations__conversation_id__proactive_mode_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationProactiveModeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/conversations/{id}":{"get":{"tags":["conversations","conversations"],"summary":"Get conversation","description":"Retrieve a single conversation by ID.","operationId":"get_item_v1_conversations__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested conversation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Conversation__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["conversations","conversations"],"summary":"Update conversation","description":"Full update (PUT) of a conversation.","operationId":"update_item_v1_conversations__id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Conversation__UpdateValidator"}}}},"responses":{"200":{"description":"The updated conversation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Conversation__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["conversations","conversations"],"summary":"Partial update conversation","description":"Partial update (PATCH) of a conversation.","operationId":"merge_item_v1_conversations__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Conversation__MergeValidator"}}}},"responses":{"200":{"description":"The updated conversation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Conversation__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["conversations","conversations"],"summary":"Delete conversation","description":"Soft-delete a conversation by ID.","operationId":"delete_item_v1_conversations__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/cron-jobs":{"post":{"tags":["cron-jobs"],"summary":"Create cron job","description":"Create a new scheduled job, attributed to the requesting actor.","operationId":"create_cron_job_v1_cron_jobs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CronJobCreateRequest"}}}},"responses":{"201":{"description":"The created cron job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["cron-jobs","cron-jobs"],"summary":"Search cron jobs","description":"List cron jobs with filtering, sorting, and pagination.","operationId":"list_items_v1_cron_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"mine","in":"query","required":false,"schema":{"type":"boolean","description":"When true (default) list only the caller's OWN scheduled jobs. Set false for the team/all view (admins/owners only). That view also includes jobs with no resolved creator.","default":true,"title":"Mine"},"description":"When true (default) list only the caller's OWN scheduled jobs. Set false for the team/all view (admins/owners only). That view also includes jobs with no resolved creator."},{"name":"created_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter to one creator actor id (admins/owners only; others are always scoped to self).","title":"Created By"},"description":"Filter to one creator actor id (admins/owners only; others are always scoped to self)."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated cron job list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/cron-jobs/deliverable-channels":{"get":{"tags":["cron-jobs"],"summary":"List deliverable Slack channels","description":"List Slack channels available to the scheduled-delivery picker.","operationId":"list_deliverable_channels_v1_cron_jobs_deliverable_channels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The caller's best-effort channel choices.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverableChannelsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/cron-jobs/usage":{"get":{"tags":["cron-jobs"],"summary":"List scheduled-task credit usage","description":"Accumulated credits consumed by every run each scheduled task has fired. Creator scoping matches the list route: your own tasks by default, the team view (`mine=false`) for admins. Unlike the list, this is not paginated - it returns one row per visible task.","operationId":"read_cron_job_usage_v1_cron_jobs_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"mine","in":"query","required":false,"schema":{"type":"boolean","description":"When true (default) list only the caller's OWN scheduled jobs. Set false for the team/all view (admins/owners only). That view also includes jobs with no resolved creator.","default":true,"title":"Mine"},"description":"When true (default) list only the caller's OWN scheduled jobs. Set false for the team/all view (admins/owners only). That view also includes jobs with no resolved creator."},{"name":"created_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter to one creator actor id (admins/owners only; others are always scoped to self).","title":"Created By"},"description":"Filter to one creator actor id (admins/owners only; others are always scoped to self)."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"One row per visible scheduled task, including tasks that never fired (0).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CronJobUsageResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/cron-jobs/{cron_job_id}/delivery-channel":{"put":{"tags":["cron-jobs"],"summary":"Update cron job delivery channel","description":"Passing null clears the explicit channel marker; a job that had an explicit channel reverts to headless, while a job that never had one keeps its origin delivery.","operationId":"update_cron_job_delivery_channel_v1_cron_jobs__cron_job_id__delivery_channel_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cron_job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Cron Job Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryChannelUpdateRequest"}}}},"responses":{"200":{"description":"The updated cron job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/cron-jobs/{id}":{"get":{"tags":["cron-jobs","cron-jobs"],"summary":"Get cron job","description":"Retrieve a single cron job by ID.","operationId":"get_item_v1_cron_jobs__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested cron job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["cron-jobs","cron-jobs"],"summary":"Update cron job","description":"Full update (PUT) of a cron job.","operationId":"update_item_v1_cron_jobs__id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__UpdateValidator"}}}},"responses":{"200":{"description":"The updated cron job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["cron-jobs","cron-jobs"],"summary":"Partial update cron job","description":"Partial update (PATCH) of a cron job.","operationId":"merge_item_v1_cron_jobs__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__MergeValidator"}}}},"responses":{"200":{"description":"The updated cron job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__cron__CronJob__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["cron-jobs","cron-jobs"],"summary":"Delete cron job","description":"Soft-delete a cron job by ID.","operationId":"delete_item_v1_cron_jobs__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/data-deletion/requests":{"post":{"tags":["data-deletion"],"summary":"Request deletion of a connected account","operationId":"create_data_deletion_request_v1_data_deletion_requests_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataDeletionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataDeletionCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/data-deletion/status/{token}":{"get":{"tags":["data-deletion"],"summary":"Get a data-deletion request status","operationId":"get_data_deletion_status_v1_data_deletion_status__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"description":"The request status capability token.","title":"Token"},"description":"The request status capability token."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataDeletionStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/data-privacy":{"get":{"tags":["data-privacy"],"summary":"Get the workspace data & privacy settings","description":"The workspace's data-retention window (90 / 365 days, or unlimited), whether Patricia may learn from the workspace's data to improve, and the topics she must never repeat. Defaults: 365-day retention, learning on, no forbidden topics.","operationId":"get_data_privacy_v1_data_privacy_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataPrivacyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["data-privacy"],"summary":"Update the workspace data & privacy settings","description":"Set the data-retention window (90 or 365 days, or 0 for unlimited), whether Patricia may learn from the workspace's data, and/or the topics she must never repeat. Retention drives the deletion sweeps; turning learning off stops Patricia learning from this workspace's activity; the topic list is replaced whole, so an empty list turns the filter off. Only the fields provided are changed.","operationId":"update_data_privacy_v1_data_privacy_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataPrivacyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataPrivacyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/email/unsubscribe/{token}":{"get":{"tags":["email"],"summary":"Unsubscribe Page","description":"The footer link's preference page. Shows unsubscribe or (once opted out) resubscribe, so the\nresubscribe path is reachable by a human instead of being an API-only dead end.","operationId":"unsubscribe_page_v1_email_unsubscribe__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["email"],"summary":"Unsubscribe","description":"RFC 8058 one-click unsubscribe (also the preference page's form target). Idempotent, empty 200.\n\nAny POST to this URL is an unsubscribe: the mail client's one-click body\n(``List-Unsubscribe=One-Click``) and the page form both land here, and the body is deliberately\nignored: fail toward honoring the opt-out.","operationId":"unsubscribe_v1_email_unsubscribe__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/email/unsubscribe/{token}/resubscribe":{"post":{"tags":["email"],"summary":"Resubscribe","description":"Undo an opt-out from the preference page (never called by mail clients).","operationId":"resubscribe_v1_email_unsubscribe__token__resubscribe_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/event-sources":{"get":{"tags":["event-sources"],"summary":"List the workspace's connected event sources","description":"The outside systems this workspace has connected so their events can drive an armed channel action, plus the ones it could connect. Shows whether each one's signing secret is in place and when an event last arrived. Never returns a secret or an endpoint URL.","operationId":"list_event_sources_v1_event_sources_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/event-sources/{source}":{"post":{"tags":["event-sources"],"summary":"Connect an event source and mint its endpoint","description":"Creates the workspace's endpoint for one outside system and returns the URL to paste into that system's dashboard. **The URL is returned once and cannot be read again** — only its digest is stored. Re-connecting an already-connected source mints a NEW URL and clears the stored signing secret, which is what makes this the remedy if a URL leaks.","operationId":"connect_event_source_v1_event_sources__source__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceCreated"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["event-sources"],"summary":"Disconnect an event source","description":"Turns the endpoint off and forgets its signing secret. Events sent to the old URL are refused from then on. Feeds following this source stay armed but go quiet, so reconnecting resumes them without anybody re-arming a channel.","operationId":"disconnect_event_source_v1_event_sources__source__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/event-sources/{source}/signing-secret":{"put":{"tags":["event-sources"],"summary":"Store the event source's signing secret","description":"Saves the signing secret from the outside system's dashboard, encrypted at rest. Until it is set, the endpoint refuses every event: a payload we cannot verify is one we must not act on. The secret is never returned by any endpoint.","operationId":"set_event_source_secret_v1_event_sources__source__signing_secret_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceSecretUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/events":{"post":{"tags":["events"],"summary":"Ingest a batch of first-party product events","description":"Validate + persist a batch of dashboard events for the authenticated tenant.","operationId":"ingest_v1_events_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestEventsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestEventsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/group-suggestions":{"get":{"tags":["group-suggestions","group-suggestions"],"summary":"Search group suggestions","description":"List group suggestions with filtering, sorting, and pagination.","operationId":"list_items_v1_group_suggestions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated group suggestion list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__GroupSuggestion__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/group-suggestions/{id}":{"get":{"tags":["group-suggestions","group-suggestions"],"summary":"Get group suggestion","description":"Retrieve a single group suggestion by ID.","operationId":"get_item_v1_group_suggestions__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested group suggestion.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__GroupSuggestion__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/group-suggestions/{suggestion_id}/accept":{"post":{"tags":["group-suggestions"],"summary":"Accept a group suggestion","description":"Create or link the proposed group and its channels, then mark the suggestion accepted.","operationId":"accept_group_suggestion_v1_group_suggestions__suggestion_id__accept_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"suggestion_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Suggestion Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/group-suggestions/{suggestion_id}/dismiss":{"post":{"tags":["group-suggestions"],"summary":"Dismiss a group suggestion","description":"Mark a suggestion dismissed. No workspace state changes.","operationId":"dismiss_group_suggestion_v1_group_suggestions__suggestion_id__dismiss_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"suggestion_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Suggestion Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__GroupSuggestion__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/groups":{"get":{"tags":["groups","groups"],"summary":"Search groups","description":"List groups with filtering, sorting, and pagination.","operationId":"list_items_v1_groups_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated group list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["groups","groups"],"summary":"Create group","description":"Create a new group.","operationId":"create_item_v1_groups_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__CreateValidator"}}}},"responses":{"201":{"description":"The created group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/groups/{group_id}/channels":{"get":{"tags":["groups"],"summary":"List a group's channels","description":"List the channels (conversations) linked to a group.","operationId":"list_group_channels_v1_groups__group_id__channels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/models__group__GroupChannel__FullValidator"},"title":"Response List Group Channels V1 Groups  Group Id  Channels Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["groups"],"summary":"Link a channel to a group","description":"Add a channel (conversation) to a group. Idempotent: re-linking returns the existing link.","operationId":"link_group_channel_v1_groups__group_id__channels_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkChannelBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__GroupChannel__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/groups/{group_id}/channels/{conversation_id}":{"delete":{"tags":["groups"],"summary":"Unlink a channel from a group","description":"Remove a channel (conversation) from a group.","operationId":"unlink_group_channel_v1_groups__group_id__channels__conversation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/groups/{id}":{"get":{"tags":["groups","groups"],"summary":"Get group","description":"Retrieve a single group by ID.","operationId":"get_item_v1_groups__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["groups","groups"],"summary":"Update group","description":"Full update (PUT) of a group.","operationId":"update_item_v1_groups__id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__UpdateValidator"}}}},"responses":{"200":{"description":"The updated group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["groups","groups"],"summary":"Partial update group","description":"Partial update (PATCH) of a group.","operationId":"merge_item_v1_groups__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__MergeValidator"}}}},"responses":{"200":{"description":"The updated group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__group__Group__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["groups","groups"],"summary":"Delete group","description":"Soft-delete a group by ID.","operationId":"delete_item_v1_groups__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/health":{"get":{"tags":["health"],"summary":"Health","description":"Lightweight liveness probe: no I/O, always fast.","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health V1 Health Get"}}}}}}},"/v1/readiness":{"get":{"tags":["health"],"summary":"Readiness","description":"Readiness probe: the database is the ONLY hard dependency on the web tier.\n\nDELIBERATELY DIVERGES from Runflow: Runflow's readiness returns 503 when Redis\nis ``disabled`` (its workers self-replace when they lose Redis). Patricia's\nRedis is OPTIONAL on the web path (the engine degrades to ``NullCacheService``),\nso a Redis outage must NEVER 503 the web tier. Doing so would restart-loop\nthe API during an ordinary Redis blip even though it can still serve traffic.\n\nRedis and the TaskIQ broker are still probed and surfaced in ``checks`` for\nobservability (``connected`` / ``degraded`` / ``disabled``), but ONLY a failing\nDB ``SELECT 1`` sets the status code to 503. Worker liveness is handled\nseparately by the worker heartbeat (``tasks/broker.py``), not by this endpoint.\n\nPREVIEW CARVE-OUT: in a preview the DB probe is not run and the endpoint cannot\n503; see :func:`_database_check`. Consumers gating on ``checks.database.status``\nmust accept ``skipped`` alongside ``connected`` (``preview-login.yml`` does).\n\n``checks.model_provider`` is reported for the same reason and goes one step further:\nit moves neither the status code NOR ``status``, because the web tier serves its\nwhole non-agent surface without a model key.\n\nManages its own DB session (not ``Depends(get_db)``) so a DB outage surfaces as\na 503 here instead of the ``get_db`` teardown turning it into a 500. A registered\nmanager alone does not prove the connection is live, so we issue a real query.","operationId":"readiness_v1_readiness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Readiness V1 Readiness Get"}}}}}}},"/v1/integration-accounts":{"get":{"tags":["integration-accounts","integration-accounts"],"summary":"Search integration accounts","description":"List integration accounts with filtering, sorting, and pagination.","operationId":"list_items_v1_integration_accounts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated integration account list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__integration__IntegrationAccount__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/integration-accounts/{id}":{"get":{"tags":["integration-accounts","integration-accounts"],"summary":"Get integration account","description":"Retrieve a single integration account by ID.","operationId":"get_item_v1_integration_accounts__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested integration account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__integration__IntegrationAccount__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/actor-preferences/tool-overrides":{"get":{"tags":["integrations"],"summary":"List the actions set to run without asking","description":"Every per-tool consent this member holds, with the connection it belongs to, its computed state and when it last waived a call. Rendered from the stored consents rather than from the live tool list, so a consent whose action the provider stopped publishing is still here to revoke. ``actor_id`` reads another member's list and is admin-only; it never permits minting or revoking for them.","operationId":"list_tool_overrides_v1_actor_preferences_tool_overrides_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolOverrideInventoryResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Refused because the caller has no personal settings to change. ``code`` is one of ``no_caller_actor``.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/integrations/accounts":{"get":{"tags":["integrations"],"summary":"List connected accounts","description":"The tenant's connected accounts with status, sharing scope, and connector. Filter by scope.","operationId":"list_connected_accounts_v1_integrations_accounts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|team|mine)$","default":"all","title":"Scope"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}":{"delete":{"tags":["integrations"],"summary":"Disconnect a connected account","description":"Soft-deletes the account and disables its tools, then best-effort revokes it at the provider. The response reports what the PROVIDER did (``upstream``/``upstream_confirmed``): the local disconnect always succeeds, so only ``upstream_confirmed`` may be shown as access removed. Requires either account-delete authority (owner/admin, which may disconnect ANY account) or the connect authority a member holds, which disconnects only a PERSONAL account they own. A Patricia-managed account is a 400. A foreign/unknown account, and any account the caller cannot see, both 404, so the route is never an existence oracle for another member's private connection; an account the caller CAN see but may not disconnect is a 403. An account that is visible AND the caller's own is also a 404 whenever its status is not ACTIVE (for example after a token failure parked it at `error`): there is no live access left to revoke, and reconnecting is the only route back to a disconnectable state. So a 404 here does not always mean the account is absent or foreign.","operationId":"disconnect_account_v1_integrations_accounts__account_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisconnectAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/google-ads/customer":{"patch":{"tags":["integrations"],"summary":"Pick which Google Ads customer Patricia uses","description":"Pins a Google Ads connection to one discovered advertising customer. The route refuses an unknown customer and a manager account. Tenant- and owner-scoped: a foreign, unknown, non-Google-Ads, or not-visible account id returns 404.","operationId":"select_google_ads_customer_v1_integrations_accounts__account_id__google_ads_customer_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAdsCustomerBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAdsCustomersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/google-ads/customers":{"get":{"tags":["integrations"],"summary":"List a Google Ads connection's customers","description":"Every customer the Google Ads connection discovered at connect time, plus the pinned customer. The route reads stored discovery and does not call Google Ads. Tenant- and owner-scoped: a foreign, unknown, non-Google-Ads, or not-visible account id returns 404.","operationId":"list_google_ads_customers_v1_integrations_accounts__account_id__google_ads_customers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAdsCustomersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/label":{"patch":{"tags":["integrations"],"summary":"Set or clear a connected account's nickname","description":"Sets a human nickname on a connected account (e.g. 'Stripe US') so a tenant can tell multiple accounts of the same app apart; the agent uses it to route to the right one. Send an empty/null label to clear it. Tenant-scoped: a foreign/unknown account id 404s.","operationId":"set_account_label_v1_integrations_accounts__account_id__label_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/meta-ads/ad-account":{"patch":{"tags":["integrations"],"summary":"Pick the Meta ad account Patricia uses by default","description":"Makes one of a Meta Ads connection's discovered ad accounts its default, which is what an unqualified question resolves to when several are switched on. Naming an ad account this connection never discovered, one Meta reports as closed, or one that is switched off, is refused rather than stored. Tenant- AND owner-scoped: a foreign, unknown, non-Meta or not-visible account id 404s.","operationId":"select_meta_ad_account_v1_integrations_accounts__account_id__meta_ads_ad_account_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaAdAccountBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaAdAccountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/meta-ads/ad-accounts":{"get":{"tags":["integrations"],"summary":"List a Meta Ads connection's ad accounts","description":"Every ad account the Meta connection discovered at connect time, plus the one it is pinned to. Reads the connection's stored discovery rather than calling Meta, so opening the picker costs nothing against the shared rate-limit budget. Tenant- AND owner-scoped, like the account-tools read: a foreign, unknown, non-Meta or not-visible account id 404s, so another member's PERSONAL connection never discloses the ad accounts it can reach.","operationId":"list_meta_ad_accounts_v1_integrations_accounts__account_id__meta_ads_ad_accounts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaAdAccountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/meta-ads/enabled-ad-accounts":{"patch":{"tags":["integrations"],"summary":"Choose which Meta ad accounts Patricia may use","description":"Sets the whole enabled set for a Meta Ads connection. Every discovered active ad account is switched on at connect, so this is how a person switches one off: an agency connection can reach a former client's account, and taking it out of range should not mean disconnecting the integration. An id this connection never discovered, or one Meta reports as anything but active, is refused rather than stored. An empty list is allowed and parks the connection. Tenant- AND owner-scoped: a foreign, unknown, non-Meta or not-visible account id 404s.","operationId":"set_meta_enabled_ad_accounts_v1_integrations_accounts__account_id__meta_ads_enabled_ad_accounts_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaEnabledAdAccountsBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaAdAccountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/syncs":{"post":{"tags":["integrations"],"summary":"Start a tool-catalog sync for a connected account","description":"Creates a background sync of the account's provider actions into the tenant tool catalog. Answers 503 when the queue broker will not take the work, so a stale catalog is never answered with a 202 the caller would wait on forever.","operationId":"integration_account_sync_v1_integrations_accounts__account_id__syncs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"503":{"description":"Service unavailable: the task queue could not accept the sync.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/tool-overrides":{"post":{"tags":["integrations"],"summary":"Let one action on this connection run without asking","description":"Record the CALLING member's consent to run one named provider action through this connection without an approval card. Strictly self-serve: it always applies to the caller, never to another member. Every safety floor still applies on top of it — a CRITICAL action, an action that reaches a person, and a mandatory-approval connection keep asking — and it only ever applies to a run a human asked for and is watching. A foreign/unknown or not-visible account id 404s, so it is never an existence oracle for another member's private connection.","operationId":"create_tool_override_v1_integrations_accounts__account_id__tool_overrides_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolOverrideCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolOverrideResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Refused because the caller has no personal settings to change. ``code`` is one of ``no_caller_actor``.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Refused for a state the member can change. ``code`` is one of ``policy_always``, ``stale_tool_state``, ``tenant_master_disabled``, ``tool_disabled``.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Refused for a property of the tool or the connection the member cannot change. ``code`` is one of ``audience_reaching``, ``critical_tier``, ``managed_account``, ``mandatory_call``, ``no_tool_ref``. ``VALIDATION_ERROR`` is the ordinary boundary refusal for a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/integrations/accounts/{account_id}/tool-overrides/{override_id}":{"delete":{"tags":["integrations"],"summary":"Make one action ask again","description":"Remove the calling member's consent for one action. Idempotent: revoking a consent that is already gone returns 204, so a double-click never surfaces an error. Only the member's own consent can be revoked here — another member's id behaves exactly like an id that does not exist, so this is never an existence oracle for other people's settings.","operationId":"revoke_tool_override_v1_integrations_accounts__account_id__tool_overrides__override_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"override_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Override Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Refused because the caller has no personal settings to change. ``code`` is one of ``no_caller_actor``.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/integrations/accounts/{account_id}/tools":{"get":{"tags":["integrations"],"summary":"List a connected account's tools and their approval behavior","description":"The read-only list of provider actions Patricia can take through one connected account, each with its risk tier and what a new directed call would do FOR THE CALLING MEMBER (``auto`` runs without asking, ``ask`` asks first). ``gate`` is per-viewer — it reflects that member's own approval policy and per-tool overrides, so two members can see different values on the same row of a shared connection — while ``locked`` stays account-level and marks a CRITICAL action or a mandatory-approval provider that no personal setting can relax. It is the STANDING behavior, before any per-run or per-argument downgrade: a static read has no run, conversation or arguments. Only enabled tools are listed. Tenant- and owner-scoped: a foreign/unknown or not-visible account id 404s, so it is never an existence oracle for another member's private account.","operationId":"list_account_tools_v1_integrations_accounts__account_id__tools_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountToolsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/tools/{tool_ref}":{"patch":{"tags":["integrations"],"summary":"Enable or disable one of a connected account's tools","description":"Turns a single provider action ON or OFF for the whole connection. A disabled action is neither offered to Patricia nor dispatchable, and the choice SURVIVES re-sync; it still appears in the tools list (greyed, switch off). ``tool_ref`` is the stable provider-action id from the tools list. A member (``integrations:create``) may toggle only a PERSONAL account they connected themselves; full account-edit authority (``integrations:edit``) toggles any. Tenant- and owner-scoped: a foreign/unknown or not-visible account, or an unknown tool, 404s.","operationId":"set_account_tool_enabled_v1_integrations_accounts__account_id__tools__tool_ref__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"tool_ref","in":"path","required":true,"schema":{"type":"string","title":"Tool Ref"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolEnabledBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/accounts/{account_id}/visibility":{"patch":{"tags":["integrations"],"summary":"Change a connected account's sharing scope","description":"Switches a connected account between PERSONAL (private to the person who connected it) and TEAM (usable by the whole company). Requires account-edit authority; the service enforces the per-account fence (only the owner can share their own account; a team account can only be made private when it has a single coherent owner) and never discloses another member's private account (a foreign/unknown id 404s). ``expected_current`` is a compare-and-set guard: a concurrent flip 409s.","operationId":"change_account_visibility_v1_integrations_accounts__account_id__visibility_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/callback/{provider}":{"post":{"tags":["integrations"],"summary":"Complete a connect flow","description":"Records the connected account (bound to the verified tenant) and enqueues a tool sync.","operationId":"integration_callback_v1_integrations_callback__provider__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteConnectBody"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/canva/oauth/callback":{"get":{"tags":["integrations"],"summary":"Canva Oauth Callback","description":"Exchange Canva's authorization code and bind it through the matching pending intent.","operationId":"canva_oauth_callback_v1_integrations_canva_oauth_callback_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/canva/return":{"post":{"tags":["integrations"],"summary":"Resolve Canva Return","description":"Resolve Canva's signed correlation state under the authenticated caller's tenant.","operationId":"resolve_canva_return_v1_integrations_canva_return_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanvaReturnRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanvaReturnResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/catalog":{"get":{"tags":["integrations"],"summary":"Browse / search connectable apps","description":"A page of the FULL provider catalog (thousands of apps), served from an in-process cache so search stays fast. Browses everything by default; ``q`` searches name/category/description and ``category`` narrows to one category across the whole catalog. Paginate with ``cursor``. ``featured``, ``managed``, and ``categories`` accompany the first page only. Each app includes its routing provider, pricing hint, and caller-visible connection count.","operationId":"integration_catalog_v1_integrations_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search over name / category / description (whole catalog).","title":"Q"},"description":"Search over name / category / description (whole catalog)."},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Narrow to one category (whole catalog).","title":"Category"},"description":"Narrow to one category (whole catalog)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque page cursor from a prior response's next_cursor.","title":"Cursor"},"description":"Opaque page cursor from a prior response's next_cursor."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/catalog/{app_slug}/details":{"get":{"tags":["integrations"],"summary":"Connect-sheet content for one app","description":"The staff-authored detail-sheet content (what Patricia can do, data it can access, what you need to connect) for one app. Returns ``has_content=false`` with empty sections when no content has been authored yet, and the sheet then stands on what the catalog knows about the app.","operationId":"integration_app_details_v1_integrations_catalog__app_slug__details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_slug","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","description":"The catalog app slug to describe.","title":"App Slug"},"description":"The catalog app slug to describe."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationAppDetailsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/connect-fields":{"get":{"tags":["integrations"],"summary":"Describe how an app connects (OAuth vs. key-entry form)","description":"Returns whether an app uses the OAuth redirect flow or a credential form. For a non-OAuth app (API key / bearer / basic) it returns the fields the dashboard must collect, so the connect form renders dynamically for whatever the toolkit requires (e.g. an API key + region).","operationId":"integration_connect_fields_v1_integrations_connect_fields_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_slug","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","description":"The catalog app slug to describe the connect flow for.","title":"App Slug"},"description":"The catalog app slug to describe the connect flow for."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectFieldsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/connect-key":{"post":{"tags":["integrations"],"summary":"Connect a non-OAuth app with user-supplied credentials","description":"Connects an API-key/non-OAuth app: the submitted credentials are handed to the provider's vault (never persisted or logged here), and the resulting account is recorded per-actor and its tools synced in the same way as the OAuth callback. Returns the recorded account.","operationId":"integration_connect_key_v1_integrations_connect_key_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectKeyBody"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/connect-session":{"post":{"tags":["integrations"],"summary":"Start an OAuth connect flow","description":"Returns a provider connect URL/token the dashboard opens to authorize an app.","operationId":"integration_connect_session_v1_integrations_connect_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectSessionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectSessionResponse"}}}},"409":{"description":"Conflict: a connect for this app is already in flight and cannot be reused yet, so this ask is refused rather than served. Always TEMPORARY — the in-flight request finishes or ages out and the next ask succeeds, which is why the client should say \"wait a moment\" and never \"refresh and retry\". Inspect ``errors[0].type`` for the case: ``connect_route_changed`` (the app now routes to a different provider than the live request was minted against), ``connect_completing`` (a completion is vaulting a credential), ``connect_compensating`` (a failed attempt is being cleaned up), or ``connect_not_reusable`` (any other non-reusable live state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/connect/personal":{"get":{"tags":["integrations"],"summary":"Connect Personal Entry","description":"Serve the bootstrap page. Reads nothing, writes nothing, consumes nothing.\n\nThe path is fixed and carries no token, so this handler cannot tell one visitor from another —\nwhich is precisely why a link scanner, a prefetch or a crawler following the URL is harmless.\nThey fetch this page and stop; without running the script there is no token to present.","operationId":"connect_personal_entry_v1_integrations_connect_personal_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/v1/integrations/connect/personal/start":{"post":{"tags":["integrations"],"summary":"Start Personal Connect","description":"Resolve the token and send the browser to Slack to prove who is holding it.\n\nNothing is consumed. A successful answer is only a redirect to Slack; the token is burned in the\ncallback, after Slack has said who the browser belongs to.","operationId":"start_personal_connect_v1_integrations_connect_personal_start_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"properties":{"token":{"type":"string","description":"The single-use connect token, read from the link's URL fragment. The whole body is capped at 4096 bytes; this is not a limit on the token itself."}},"type":"object","required":["token"]}}},"required":true},"responses":{"303":{"description":"Successful Response"},"404":{"description":"The link cannot be used. One generic answer for every reason."}}}},"/v1/integrations/connections/{connected_account_id}":{"get":{"tags":["integrations"],"summary":"Poll a pending connection's status","description":"The connect-flow poller waits for `active` (OAuth completed) before recording the account.","operationId":"connection_status_v1_integrations_connections__connected_account_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","title":"Connected Account Id"}},{"name":"provider","in":"query","required":false,"schema":{"type":"string","default":"composio","title":"Provider"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/googleads/oauth/callback":{"get":{"tags":["integrations"],"summary":"Google Ads Oauth Callback","description":"Exchange Google's authorization code and bind it through the matching pending intent.","operationId":"google_ads_oauth_callback_v1_integrations_googleads_oauth_callback_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/oauth/meta/callback":{"get":{"tags":["integrations"],"summary":"Complete a Meta Ads connection","description":"Exchange Meta's authorization code and bind it through the matching pending intent.","operationId":"meta_ads_oauth_callback_v1_integrations_oauth_meta_callback_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/pending/{pending_id}":{"delete":{"tags":["integrations"],"summary":"Dismiss a failed connect chip","description":"Removes one of the requester's own failed/expired connect intents from the Connected tab. Only a non-live intent can be dismissed (a connect still in flight is never removed); tenant- and owner-scoped, so a foreign/unknown id or another member's chip 404s.","operationId":"dismiss_pending_connection_v1_integrations_pending__pending_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pending_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pending Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/slack/channel-joins":{"post":{"tags":["integrations"],"summary":"Join Patricia to public Slack channels","operationId":"slack_channel_joins_v1_integrations_slack_channel_joins_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelJoinRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelJoinResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/integrations/slack/install-url":{"post":{"tags":["integrations"],"summary":"Slack Install Url","description":"Return a Slack authorize URL with an HMAC-signed, short-TTL state.\n\nThe signed state carries the authenticated principal's ``tenant_id`` so\nthe OAuth callback can attach the Slack workspace to the correct tenant.\nCallers cannot influence which tenant the state targets: only members\nholding ``integrations:edit`` on a tenant can initiate the install for\nthat tenant, and the tenant identity comes exclusively from the bearer token.\n\n``return_path`` is the dashboard page the user clicked Connect from; the callback\nsends the browser back there with the outcome flag. The body is optional so a\nbodyless POST still mints a URL.\n\nTwo different limits apply, deliberately. The schema's 2048 ``max_length`` is a\npayload guard only: it 422s a body no real dashboard route could produce. The limit\nthat decides where the user lands is the much shorter\n``core.redirects.MAX_RETURN_PATH_LENGTH``, applied during sanitization. A path that\nis off-origin or longer than that is silently dropped and the callback falls back to\nits default landing page, never a 422, because a bad return page must not be the\nthing that blocks someone from connecting Slack.","operationId":"slack_install_url_v1_integrations_slack_install_url_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SlackInstallUrlRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/slack/joinable-channels":{"get":{"tags":["integrations"],"summary":"Public Slack channels Patricia can still join","description":"The public channels Patricia has not joined yet, with member counts and the workspace name.\n\nA tenant with no active Slack install answers ``connected: false`` with empty, zeroed fields\nrather than an error. A Slack read that fails raises 503, never an empty channel list: that\nwould tell a user their workspace has none when it is really that Slack could not be read.","operationId":"slack_joinable_channels_v1_integrations_slack_joinable_channels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackJoinableChannelsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Slack could not be read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/integrations/slack/status":{"get":{"tags":["integrations"],"summary":"Slack Status","description":"Whether this tenant has a Slack installation. Drives the connected/disconnected UI.\n\nReads the chat-platform install (the Slack bot / PlatformInstallation), NOT a Slack\n*tool* integration account: those are different things, and the Channels card means\nthe former.\n\nThe response carries the workspace (team) id and Patricia's own bot user id, the pair a\nclient needs to deep-link into the direct message with her. The bot user id is null on an\ninstall recorded before it was stored, so a client must have a workspace-level fallback.","operationId":"slack_status_v1_integrations_slack_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/teams/app-package":{"get":{"tags":["integrations"],"summary":"Teams App Package","description":"Download the Teams app package configured for this deployment.","operationId":"teams_app_package_v1_integrations_teams_app_package_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The deployment-specific Teams app package.","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/teams/connection":{"delete":{"tags":["integrations"],"summary":"Teams Disconnect","description":"Disconnect this tenant's Teams workspace and free the Teams slot for a different one.\n\nScoped to the bearer principal's tenant, so a caller can only ever disconnect their own\nworkspace. Idempotent: a tenant with no Teams rows gets ``{\"disconnected\": false}`` and a 200,\nbecause \"there is nothing to disconnect\" is the outcome the caller asked for, not an error.\n\nWhat this removes is Patricia's side of the connection: the workspace identity and the\ninstallation, including the encrypted bot credentials. It does NOT uninstall the Patricia app\nfrom Microsoft Teams and it cannot — that is an action inside the customer's Microsoft 365\ntenant. The dashboard copy says so, because an admin who expects the app to vanish from Teams\nand finds it still there will assume the disconnect failed.\n\nReturns 409 when an armed autonomous grant still references the installation\n(``WorkspaceSlotReleaseBlocked``); nothing is removed in that case.","operationId":"teams_disconnect_v1_integrations_teams_connection_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Teams Disconnect V1 Integrations Teams Connection Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/teams/install-url":{"post":{"tags":["integrations"],"summary":"Teams Install Url","description":"Return an Azure AD admin-consent URL with an HMAC-signed, short-TTL state.\n\nThe tenant identity comes exclusively from the bearer token. Only a caller\nwith account-edit authority can attach the whole Teams workspace. Fails closed\n(400) when Teams is not configured.\n\nAn optional ``return_path`` is narrowed to an exact destination allowlist during minting and\nnever 422s, so an unrecognised one cannot block the connect.","operationId":"teams_install_url_v1_integrations_teams_install_url_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TeamsInstallUrlRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsInstallUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/teams/status":{"get":{"tags":["integrations"],"summary":"Teams Status","description":"Return the tenant's consent, reachability, and slot state.\n\nScoped to the bearer principal's tenant; reads the tenant's own installation (if any).\n\n``teams_configured`` means this deployment has the required Microsoft credentials.\n``consent_granted`` means an ACTIVE installation exists. ``app_reachable`` means that\ninstallation carries an allowed Bot Connector service URL. Teams supplies that URL only with a\nreal inbound activity from the workspace, so it proves the app package is installed and Patricia\nhas been reached there. ``connected`` requires all three conditions because a stored reply\naddress cannot make Patricia usable after those credentials are removed. The other booleans\nreport only their observed state. ``slot_held`` means a new Teams workspace cannot connect. It\nremains true for a CANCELLED installation as well.","operationId":"teams_status_v1_integrations_teams_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/invitations/{token}/accept":{"post":{"tags":["invitations"],"summary":"Accept an invitation","description":"Accept a workspace invitation token and receive a session token pair.\n\nThe raw token from the invitation email is the credential for the ordinary\ncase: an invitee with no existing account accepts anonymously and lands\nlogged in (access + refresh tokens) scoped to the invitation's tenant with\nthe invited role. An ``Authorization`` header is optional, and needed only\nto complete the one case below that a token alone cannot: POST anonymously\nfirst, and send the bearer only if this endpoint asks for it.\n\nErrors:\n- **404**: unknown token.\n- **400**: expired or revoked invitation.\n- **409**: invitation already accepted, or the workspace membership could not be\n  linked to the account that accepted it. The second is not retryable by the\n  invitee: the acceptance is rolled back and an admin has to sort the membership\n  out, most often because that person already belongs to this workspace under\n  another address.\n- **401** ``INVITATION_SIGN_IN_REQUIRED``: the invited address already has an\n  account. Sign in, then POST this endpoint again with the bearer token; the\n  invitation is untouched and still usable.\n- **403** ``INVITATION_WRONG_ACCOUNT``: a bearer was sent, but it is signed in\n  as somebody other than the invited address's owner — most often a forwarded\n  link. Sign in as the invited address and retry. The invitation is untouched,\n  and the message deliberately does not say who it was for.\n- **403** ``FORBIDDEN``: every other refusal on this route — the account needs\n  recovery, the account can no longer be used, the invitation went to a secondary\n  address rather than the account's main one, the two identity planes disagree\n  about who is joining, or the membership did not come out active. The invitation\n  stays pending in all of them. They share the generic code on purpose: the\n  dashboard shows the message, and there is no action the invitee can take that a\n  distinct code would unlock. Deliberately not enumerated in the response\n  description — a count there goes stale the first time one is added.","operationId":"accept_invitation_v1_invitations__token__accept_post","security":[{"HTTPBearer":[]},{}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","description":"The raw invitation token received via email","title":"Token"},"description":"The raw invitation token received via email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"401":{"description":"`INVITATION_SIGN_IN_REQUIRED` — the invited address already has an account. Sign in and POST this endpoint again with the bearer token; nothing was consumed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"`INVITATION_WRONG_ACCOUNT` — a bearer was sent, but it belongs to someone other than the invited address's owner. Sign in as the invited address and retry; nothing was consumed. Every OTHER 403 on this route carries the generic `FORBIDDEN` code, is not retryable by the invitee, and needs an admin; the message says which case it is. The invitation stays pending in all of them.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`CONFLICT` — either the invitation was already accepted, or the workspace membership could not be linked to the account that accepted it. The second is not retryable: the acceptance is rolled back and an admin has to sort the membership out, most often because that person already belongs to this workspace under another address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/mcp-coverage/check":{"post":{"tags":["mcp-coverage"],"summary":"Which apps cover the servers in a configuration","description":"Answers for servers the team has not connected. Send only a name, a hostname and a package id per server: the request has no field for a token, and the endpoint stores and logs nothing.","operationId":"check_coverage_v1_mcp_coverage_check_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverageCheckBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverageResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/mcp-coverage/connected":{"get":{"tags":["mcp-coverage"],"summary":"Which apps cover the MCP servers this team already connected","description":"Reads the team's own connected MCP servers and names the Patricia app that covers each one. Stores nothing and changes nothing.","operationId":"coverage_for_connected_servers_v1_mcp_coverage_connected_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverageResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/mcp-servers":{"post":{"tags":["mcp-servers"],"summary":"Connect an MCP server","description":"Validates and probes the server, then registers it. The connection is shared with the whole workspace unless the caller asks for a personal one, which only its owner can use.","operationId":"register_mcp_server_v1_mcp_servers_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/mcp-servers/oauth/client-metadata":{"get":{"tags":["mcp-servers"],"summary":"Patricia's OAuth client-id metadata document","description":"The public client-id metadata document authorization servers fetch to learn who Patricia is. Its `client_id` is this URL, which is what makes the identifier verifiable.","operationId":"read_cimd_document_v1_mcp_servers_oauth_client_metadata_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Read Cimd Document V1 Mcp Servers Oauth Client Metadata Get"}}}}}}},"/v1/mcp-servers/oauth/client-metadata/jwks.json":{"get":{"tags":["mcp-servers"],"summary":"Patricia's OAuth client-assertion public keys","description":"The JWKS the client-metadata document points at. Publishes the public half of every signing key still in rotation, so a server holding either cached copy can verify.","operationId":"read_signing_jwks_v1_mcp_servers_oauth_client_metadata_jwks_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Read Signing Jwks V1 Mcp Servers Oauth Client Metadata Jwks Json Get"}}}}}}},"/v1/mcp-servers/oauth/finalize":{"post":{"tags":["mcp-servers"],"summary":"Finish an OAuth connect (hop 2)","description":"Redeems the one-time capability from the callback, exchanges the authorization code, and installs the server. Requires the same admin who started the ceremony.","operationId":"finalize_mcp_oauth_v1_mcp_servers_oauth_finalize_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthFinalizeBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/mcp-servers/oauth/start":{"post":{"tags":["mcp-servers"],"summary":"Begin an OAuth connect for an MCP server","description":"Discovers the server's authorization service, registers a client if one is needed, and returns the URL to send the admin to. Nothing is connected until the ceremony completes.","operationId":"start_mcp_oauth_v1_mcp_servers_oauth_start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthStartBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/mcp-servers/{account_id}":{"get":{"tags":["mcp-servers"],"summary":"Read one connected MCP server's dial state","description":"The address, auth mode, header name and refresh state, plus the last catalog reading — what the server offered and how much of it Patricia could accept. NEVER the token: it is stored sealed and is not readable by any route.","operationId":"read_mcp_server_v1_mcp_servers__account_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["mcp-servers"],"summary":"Change an MCP server's address, token or header","description":"Applies the change in place, bumps the connection generation and disables the server's tools until a same-generation sync succeeds.","operationId":"update_mcp_server_v1_mcp_servers__account_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/mcp-servers/{account_id}/syncs":{"post":{"tags":["mcp-servers"],"summary":"Refresh an MCP server's tool catalog","description":"Re-fetches the server's tools. Also the manual retry after a refused reconcile.","operationId":"refresh_mcp_server_v1_mcp_servers__account_id__syncs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncQueuedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/mcp-tokens":{"get":{"tags":["mcp-tokens"],"summary":"List personal MCP tokens","description":"List the signed-in teammate's personal MCP tokens in this workspace.","operationId":"list_mcp_tokens_v1_mcp_tokens_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["mcp-tokens"],"summary":"Create personal MCP token","description":"Create a personal MCP token for the signed-in teammate.","operationId":"create_mcp_token_v1_mcp_tokens_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__mcp_personal_token__McpPersonalToken__CreateValidator"}}}},"responses":{"201":{"description":"The created token, including its one-time plaintext.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__mcp_personal_token__McpPersonalToken__CreatedValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["mcp-tokens"],"summary":"Revoke all personal MCP tokens","description":"Revoke every personal MCP token owned by the signed-in teammate.","operationId":"revoke_all_mcp_tokens_v1_mcp_tokens_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/mcp-tokens/{id}":{"delete":{"tags":["mcp-tokens"],"summary":"Revoke personal MCP token","description":"Revoke one personal MCP token. A teammate can revoke their own token. An owner or admin can revoke any token in the workspace.","operationId":"revoke_mcp_token_v1_mcp_tokens__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/meetings/recap-channel-options":{"get":{"tags":["meetings"],"summary":"List channels that can receive meeting recaps","description":"Named Slack and Microsoft Teams channels available to the Meetings recap setting. The result is tenant-scoped and returns Slack channels first.","operationId":"list_recap_channel_options_v1_meetings_recap_channel_options_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RecapChannelOption"},"title":"Response List Recap Channel Options V1 Meetings Recap Channel Options Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/meetings/recordings":{"get":{"tags":["meetings"],"summary":"List recent meeting recordings","description":"The workspace's most recent meeting recordings, newest first: title, platform, when they were requested, their lifecycle status, and whether the recap was posted.","operationId":"list_meeting_recordings_v1_meetings_recordings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"How many recordings to return (newest first).","default":20,"title":"Limit"},"description":"How many recordings to return (newest first)."},{"name":"owner_actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only recordings belonging to this person (from GET /meetings/recordings/people).","title":"Owner Actor Id"},"description":"Only recordings belonging to this person (from GET /meetings/recordings/people)."},{"name":"participant","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"description":"Only recordings whose transcript has this speaker (from GET /meetings/recordings/people).","title":"Participant"},"description":"Only recordings whose transcript has this speaker (from GET /meetings/recordings/people)."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingRecordingHistoryResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/meetings/recordings/people":{"get":{"tags":["meetings"],"summary":"List the people the recordings list can be filtered by","description":"The owner and participant options for the Meetings filters, so the dashboard offers real names instead of asking anyone to type an id. Owners come from the recording's own owner; participants are the speaker labels on the transcripts. Both are scoped to the recordings this caller can see.","operationId":"list_meeting_filter_people_v1_meetings_recordings_people_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingFilterPeopleResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/meetings/recordings/{recording_id}":{"get":{"tags":["meetings"],"summary":"Get one meeting recording","description":"One recording with its transcript-derived extras: who spoke (attendees) and roughly how long it ran. Attendees appear once the meeting's notes are ready.","operationId":"get_meeting_recording_v1_meetings_recordings__recording_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recording_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The recording id.","title":"Recording Id"},"description":"The recording id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingRecordingDetailView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["meetings"],"summary":"Erase a meeting recording","description":"Permanently erase a meeting recording: its transcript, its recap, the calendar invite list stored with it, everything Patricia remembered from it, its recap emails, the cached copy of the recap posted into Slack, and the copy Recall holds. This cannot be undone and it is not a hide: nothing is kept back for later recovery. The response says what was removed, and names the places it does not reach. Admin/owner only.","operationId":"erase_meeting_recording_route_v1_meetings_recordings__recording_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recording_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The recording id.","title":"Recording Id"},"description":"The recording id."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingErasureReceiptView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/meetings/recordings/{recording_id}/transcript":{"get":{"tags":["meetings"],"summary":"Get a meeting recording transcript","description":"A stable offset page over readable, speaker-labeled transcript turns.","operationId":"get_meeting_recording_transcript_v1_meetings_recordings__recording_id__transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recording_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"The recording id.","title":"Recording Id"},"description":"The recording id."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"How many merged turns to skip.","default":0,"title":"Offset"},"description":"How many merged turns to skip."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"How many merged turns to return.","default":100,"title":"Limit"},"description":"How many merged turns to return."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTranscriptPage"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/meetings/settings":{"get":{"tags":["meetings"],"summary":"Get the Meetings settings","description":"The Meetings view read-model: the workspace's recap and auto-join settings, the caller's own auto-join opt-in, whether a Google Calendar is connected (personally and for the team), and the resolved auto-join state with the exact blockers.","operationId":"get_meetings_settings_v1_meetings_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingsSettingsView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["meetings"],"summary":"Update the workspace Meetings settings","description":"Change the team-level meeting settings: auto-join arming, the recap toggle, where recaps go when there is no asking thread, and the pre-share recap instructions. Only the fields provided are changed. Admin/owner only.","operationId":"update_meetings_settings_v1_meetings_settings_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingsTeamSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingsSettingsView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/meetings/settings/personal":{"put":{"tags":["meetings"],"summary":"Set your own meeting auto-join opt-in","description":"Turn auto-join on or off for YOUR calendar meetings. This only ever changes the caller's own preference; auto-join additionally needs the workspace toggle and a connected calendar.","operationId":"update_personal_meetings_settings_v1_meetings_settings_personal_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingsPersonalSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingsSettingsView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/meetings/usage":{"get":{"tags":["meetings"],"summary":"Get the workspace meeting-recording usage","description":"Concurrent recording slots in use vs the cap, monthly recorded minutes, and active recordings.","operationId":"get_meeting_usage_v1_meetings_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingUsageView"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/members":{"get":{"tags":["members"],"summary":"List members","description":"Return the tenant's member roster, lifecycle facts, and adoption counts.","operationId":"list_members_v1_members_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/deactivations":{"post":{"tags":["members"],"summary":"Deactivate selected members","description":"Soft-deactivate each eligible selected member.","operationId":"deactivate_members_v1_members_deactivations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberDeactivationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberDeactivationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/invite":{"post":{"tags":["members"],"summary":"Invite a new member","description":"Send a workspace invitation email to the given address.\n\nCreates a pending invitation and dispatches the invitation email.\nAny existing pending invite for the same email in this tenant is\nreplaced (the old one is revoked, a new one is issued).\n\nReturns the invitation record. The raw token is NOT included.","operationId":"invite_member_v1_members_invite_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/outreach":{"post":{"tags":["members"],"summary":"Invite or remind selected members","description":"Invite or remind each selected member through their eligible delivery lane.","operationId":"outreach_members_v1_members_outreach_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberOutreachRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberOutreachResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/sync":{"post":{"tags":["members"],"summary":"Sync Slack roster","description":"Trigger a Slack workspace roster sync for the authenticated tenant.\n\nDelegates to ``MembershipSyncService.sync_slack_members`` with ``enroll_new_members=True`` —\nthis is the only path that adds new people to the team list; the background roster mirror\nnever does. Returns counters. A missing or unconfigured installation returns zeros (no-op).","operationId":"sync_members_v1_members_sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/welcome-preview":{"get":{"tags":["members"],"summary":"Preview the member welcome message","description":"Render the workspace's real welcome DM without sending or storing it.","operationId":"welcome_preview_v1_members_welcome_preview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WelcomePreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{membership_id}":{"patch":{"tags":["members"],"summary":"Change a member's role","description":"Change a member's role within the authenticated tenant.\n\nSafety rules:\n- ``role_code`` must be a valid role.\n- Only principals with ``role_code == 'owner'`` may grant or revoke the\n  ``owner`` role (admins cannot create or demote owners).\n- Demoting the last owner is rejected with a 409.","operationId":"update_member_role_v1_members__membership_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Membership Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoleBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["members"],"summary":"Deactivate a member","description":"Soft-deactivate a member (sets ``status_code`` to ``'deactivated'``) and disconnect the\nPERSONAL MCP servers they connected.\n\nAnswers a body rather than the 204 it used to, because the second half of that sentence has a\nconsequence the caller must see: what was disconnected, and how much of it Patricia could\nactually take back. See :class:`MemberRemovalResponse`.\n\nSafety rules:\n- Cannot deactivate a member whose ``role_code`` is ``'owner'``.\n- Cannot deactivate your own account (JWT users only; API keys have no\n  email identity and bypass this check).","operationId":"deactivate_member_v1_members__membership_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Membership Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberRemovalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{membership_id}/email":{"patch":{"tags":["members"],"summary":"Enable or disable all email to a member","description":"Flip a member's email kill switch: ``disabled=true`` stops ALL email to that address (marketing AND\ntransactional: billing, security, account), ``disabled=false`` restores it.\n\nThis is an all-category suppression keyed on the member's address, so it holds no matter which trigger\nfires and survives a Slack roster re-sync (the suppression store is not touched by sync). It is\nreversible only here (an admin action). Idempotent: re-disabling an already-disabled member (or\nre-enabling an already-enabled one) is a no-op that still returns the current state.\n\nA re-enable removes ONLY this admin kill switch; if the address also hard-bounced, that separate\nsuppression stays in force and the member remains unreachable until the bounce is resolved.\n\nKnown limit: the switch is ADDRESS-scoped. If a member's platform email changes (roster sync retires\nthe old membership and creates a new one), the suppression stays on the old address and the new row\nshows email enabled, and the admin must re-flip it there. Person-scoped enforcement is a follow-up owned\nby the roster-sync policy.","operationId":"set_member_email_disabled_v1_members__membership_id__email_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Membership Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDisableBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{membership_id}/next-step":{"post":{"tags":["members"],"summary":"Perform a member's next step","description":"Perform the next action derived from current member state.","operationId":"perform_member_next_step_v1_members__membership_id__next_step_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Membership Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberNextStepResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{membership_id}/reactivate":{"post":{"tags":["members"],"summary":"Re-add a removed member","description":"Re-add a removed member unless a security action holds the row.","operationId":"reactivate_member_v1_members__membership_id__reactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Membership Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{membership_id}/resend":{"post":{"tags":["members"],"summary":"Resend activation outreach","description":"Re-enqueue activation outreach for a pending (or active) member.\n\nIdempotent: if a ``pending`` or ``sent`` row already exists for a channel,\nno duplicate is created (the outbox idempotency backstop applies). Deactivated\nmembers are rejected, because a removed member cannot receive an activation nudge.\n\nOnce-ever: the welcome is one hello per membership across BOTH channels, not one per\nchannel. Whichever lane says it first spends the claim (the DM lane before it posts, the\nemail lane once the provider accepts), so a member whose claim is already spent gets nothing\non either channel. This refuses with ``skipped_reason=\"member_already_welcomed\"`` rather than\nminting a row the drainer would terminally skip moments later.\n\nPermission-gated, with two independent sources. Activation outreach is a per-tenant switch, on\nfor a newly created workspace and off for any row without the stored block; separately, a\nworkspace owner can authorize one named person's hello from Slack. A member with neither gets no\nrows and the response carries an empty ``channels`` with\n``skipped_reason=\"activation_outreach_disabled\"`` — turn the switch on in workspace settings.\n\nThe switch is not the whole rule. Nothing is minted until somebody in the workspace has given\nPatricia a task in chat, so a workspace whose switch is already on can still get an empty\n``channels`` with ``skipped_reason=\"workspace_has_not_used_patricia\"``. That is a different\nremedy from the one above, which is why it is a different reason: telling an admin to turn on a\nswitch that is already on is the misdirection this reason exists to prevent.\n\nAttempt-bounded: a member whose welcome DM has already failed its allowance is refused with\n``skipped_reason=\"welcome_dm_attempts_exhausted\"`` rather than queueing another attempt Slack\nhas already refused three times.\n\nA created ``email`` row is delivered by its own background task. A created ``slack_dm`` row\nis NOT: it is picked up by the paced welcome DM drainer, so \"created\" here means queued for\ndelivery within the next few minutes, not sent.\n\nReturns the channels for which new outreach rows were created. Empty channels means the tenant\nis opted out, the workspace has not used Patricia yet, the member has already been welcomed\n(see ``skipped_reason`` for all three), or the applicable channel already had a pending/sent row.","operationId":"resend_activation_v1_members__membership_id__resend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Membership Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/memory-items":{"get":{"tags":["memory-items","memory-items"],"summary":"Search memory items","description":"List memory items with filtering, sorting, and pagination.","operationId":"list_items_v1_memory_items_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated memory item list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["memory-items","memory-items"],"summary":"Create memory item","description":"Create a new memory item.","operationId":"create_item_v1_memory_items_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__CreateValidator"}}}},"responses":{"201":{"description":"The created memory item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory-items/{id}":{"get":{"tags":["memory-items","memory-items"],"summary":"Get memory item","description":"Retrieve a single memory item by ID.","operationId":"get_item_v1_memory_items__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested memory item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["memory-items","memory-items"],"summary":"Update memory item","description":"Full update (PUT) of a memory item.","operationId":"update_item_v1_memory_items__id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__UpdateValidator"}}}},"responses":{"200":{"description":"The updated memory item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["memory-items","memory-items"],"summary":"Partial update memory item","description":"Partial update (PATCH) of a memory item.","operationId":"merge_item_v1_memory_items__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__MergeValidator"}}}},"responses":{"200":{"description":"The updated memory item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["memory-items","memory-items"],"summary":"Delete memory item","description":"Soft-delete a memory item by ID.","operationId":"delete_item_v1_memory_items__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory/beliefs":{"get":{"tags":["memory-viewer"],"summary":"List what Patricia believes for this tenant","description":"Unified, source-labeled list of recallable memories, promoted lessons, and company facts.","operationId":"list_beliefs_v1_memory_beliefs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Case-insensitive substring filter.","title":"Search"},"description":"Case-insensitive substring filter."},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one of: memory | lesson | fact.","title":"Kind"},"description":"Filter to one of: memory | lesson | fact."},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one provenance family.","title":"Group"},"description":"Filter to one provenance family."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeliefList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory/company-facts":{"patch":{"tags":["memory-viewer"],"summary":"Edit a company fact","description":"Update one whitelisted company/brand-profile field.","operationId":"edit_company_fact_v1_memory_company_facts_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyFactUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeliefItem"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory/lessons/{lesson_id}/forget":{"post":{"tags":["memory-viewer"],"summary":"Forget a lesson","description":"Retire a promoted lesson AND soft-delete its recallable memory row, so it leaves recall.","operationId":"forget_lesson_v1_memory_lessons__lesson_id__forget_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lesson_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lesson Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgetResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory/map":{"get":{"tags":["memory-viewer"],"summary":"The projected picture of what Patricia remembers","description":"Every memory this person may read, placed in three dimensions by a nightly projection of its embedding. A picture of the memory space, never the basis of an answer: search, neighbours and every count read the real vectors.","operationId":"read_memory_map_v1_memory_map_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryMap"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory/map/search":{"get":{"tags":["memory-viewer"],"summary":"Which drawn memories a search matched","description":"The ids of the points to light up for a search, matched against the whole memory rather than the preview a point carries. Returns ids only: the caller already holds the map.","operationId":"search_memory_map_v1_memory_map_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Case-insensitive substring of a memory.","title":"Q"},"description":"Case-insensitive substring of a memory."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryMapMatches"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/memory/memories/{item_id}/forget":{"post":{"tags":["memory-viewer"],"summary":"Forget a memory","description":"Soft-delete a recallable memory so it leaves recall (reversible via the admin restore).","operationId":"forget_memory_v1_memory_memories__item_id__forget_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgetResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/message-action-policy/tenant":{"get":{"tags":["message-action-policy"],"summary":"Get the workspace message-action policy","description":"Read the emoji allowlist, proactive toggles, and per-channel/hour caps that govern Patricia's reactions and targeted replies (admin). A workspace that has configured nothing reads back the shipped defaults, which allow her to react on her own and to answer in an existing message's thread on her own, but not to start a new top-level message.","operationId":"get_message_action_policy_v1_message_action_policy_tenant_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageActionPolicyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["message-action-policy"],"summary":"Set the workspace message-action policy","description":"Replace the emoji allowlist, proactive toggles, and per-channel/hour caps. Admin only. Patricia may react ONLY with an allowlisted emoji. She adds one on her own, and answers in an existing message's thread on her own, unless this workspace turns those toggles off; she only starts a NEW top-level message on her own if this workspace turns that one on. Every cap is the most a channel may receive in an hour, counting both the ones she is asked for and the ones she does on her own. For REACTIONS and REPLIES the unprompted ones stop short of the cap, keeping a slice back so a directed request still has room, and at a cap of 1 the unprompted lane gets none. New top-level messages have no such split: unprompted ones can use the whole cap, so at a cap of 1 an unprompted post can take the only slot. This REPLACES the whole policy, so EVERY POLICY FIELD IS REQUIRED: an omitted field is a 422 naming it, never a silent write of some default. Read the current policy with GET, change what you want, and send the whole thing back — the GET response is accepted as-is, so there is no need to strip the read-only fields it carries. One exception: an echoed stored_policy_unreadable=true is refused. That flag means the stored policy could not be read and the GET showed the fail-closed fallback, so saving it back would record the fallback as a deliberate choice and erase the only signal that anything was wrong — decide what the policy should be and send that.","operationId":"set_message_action_policy_v1_message_action_policy_tenant_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageActionPolicyBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageActionPolicyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/model-settings":{"get":{"tags":["model-settings"],"summary":"Get the workspace intelligence levels","description":"Show each intelligence level, the model and thinking setup it resolves to for this workspace, which level regular work uses, what each level is used for, and the models the workspace can build its own setup from.","operationId":"get_model_settings_v1_model_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSettingsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["model-settings"],"summary":"Set the workspace intelligence level","description":"Choose one intelligence level for regular workspace work, save your own model and thinking choice, or restore Patricia's recommended levels. Quick checks and messages that ask Patricia to take more time keep their separate levels. Changes take effect on the next run.","operationId":"update_model_settings_v1_model_settings_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSettingsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/onboarding-progress":{"get":{"tags":["onboarding"],"summary":"Onboarding checklist progress","description":"Tenant-scoped per-step completion for the Home onboarding checklist: whether Slack is connected, the company profile is set up, Patricia is in a channel, the user connected a non-Slack tool, the user gave Patricia a task, and the team was grown, plus `all_done`. Each step is derived truthfully from stored data and is only `true` from a real signal. Requires `tenant:read`.","operationId":"get_onboarding_progress_v1_onboarding_progress_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingProgressResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/onboarding-skips":{"post":{"tags":["onboarding"],"summary":"Skip an onboarding step","description":"Record a workspace onboarding step as skipped. Requires `tenant:read`.","operationId":"create_onboarding_skip_v1_onboarding_skips_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingSkipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingSkipResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/outreach-settings":{"get":{"tags":["outreach-settings"],"summary":"Get the workspace outreach settings","description":"Whether Patricia may introduce herself to teammates she meets in Slack. This one workspace setting is the opt-in; teammates are not asked separately. When on, each full teammate gets one welcome DM in Slack, a single hello she never repeats, and teammates she cannot reach in Slack get onboarding email instead. Slack guests get nothing. New workspaces start with this on. Nothing is sent until somebody in the workspace has given Patricia a task in chat.","operationId":"get_outreach_settings_v1_outreach_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachSettingsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["outreach-settings"],"summary":"Update the workspace outreach settings","description":"Turn teammate onboarding outreach on or off for the workspace. This workspace setting is the opt-in for everyone on your team list; teammates are not asked separately. Turning it on queues one welcome DM for each eligible full teammate on your team list, once ever, delivered at a paced rate over the following minutes; teammates Patricia cannot DM get onboarding email instead, and Slack guests get nothing. People in your Slack workspace who are not on your team list get nothing; add them with Sync in Settings, Team first. When off, Patricia sends teammates no welcome DM and no onboarding email at all. New workspaces start with this on. Turning it back off stops anything not yet delivered; teammates already welcomed are never welcomed again. Turning it on needs somebody in the workspace to have given Patricia a task in chat first; until then this returns a conflict.","operationId":"update_outreach_settings_v1_outreach_settings_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachSettingsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/permission-requests":{"get":{"tags":["permission-requests"],"summary":"List tool-approval requests","description":"Tenant-scoped human-in-the-loop approval queue (read-only SearchQuery view). Argument values are sanitized and visible only to callers who can decide requests (runs:execute); read-only callers receive a value-free input_summary instead.","operationId":"list_permission_requests_v1_permission_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/queries__permission_request_queue__PermissionRequestQueueQuery__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/permission-requests/{permission_request_id}":{"get":{"tags":["permission-requests"],"summary":"Get a tool-approval request","description":"Fetch a single approval request by id, scoped to the caller's tenant. Argument values are sanitized and visible only to callers who can decide requests (runs:execute) and are rendered in FULL on this detail view, so an approver can review everything the tool will run with; read-only callers receive a value-free input_summary instead.","operationId":"get_permission_request_v1_permission_requests__permission_request_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"permission_request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Permission Request Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionRequestRow"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/permission-requests/{permission_request_id}/approve":{"post":{"tags":["permission-requests"],"summary":"Approve a tool-approval request","description":"Approve a pending request and resume its suspended run (async).","operationId":"approve_permission_request_v1_permission_requests__permission_request_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"permission_request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Permission Request Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalDecisionResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: the request has already been resolved (error_type already_resolved), or the run's actor is not the owner of the personal connection it would spend (error_type run_actor_not_connection_owner), which dispatch would refuse.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable: the task queue could not accept the decision.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/permission-requests/{permission_request_id}/deny":{"post":{"tags":["permission-requests"],"summary":"Deny a tool-approval request","description":"Deny a pending request; its run resolves without running the tool (async).","operationId":"deny_permission_request_v1_permission_requests__permission_request_id__deny_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"permission_request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Permission Request Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalDecisionResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: the request has already been resolved (error_type already_resolved).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable: the task queue could not accept the decision.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/person-facts":{"put":{"tags":["person-facts"],"summary":"Set a person's birthday or work anniversary (admin data entry)","description":"The admin data-entry collection mode (the fillable fact_entry_table surface). An admin sets a person's fact: month+day for a birthday (recurring_date, NO year) or an ISO date for a work anniversary. Tenant-scoped; PII-safe (no raw value logged; audit stores a hash). Honors the fact's allowed_sources allowlist when set. Bumps fact_revision so an in-flight occurrence rechecks.","operationId":"set_person_fact_v1_person_facts_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPersonFactRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonFactSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/person-facts/opt-out":{"post":{"tags":["person-facts"],"summary":"Opt a subject out of a celebration fact (subject-global)","description":"Opt a subject out of a canonical fact. GLOBAL to the subject: shared by every skill that references the fact (one skill can't leak what another suppressed). Purges the stored value + projection columns so the projector can never mint an occurrence for the subject; bumps fact_revision so any in-flight occurrence skips at the pre-send re-check.","operationId":"opt_out_person_fact_v1_person_facts_opt_out_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptOutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonFactSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/person-facts/self":{"post":{"tags":["person-facts"],"summary":"Submit your OWN birthday or work anniversary (employee self-submission)","description":"The employee self-submission collection mode: the target of a solicit_fact notify. A member submits their OWN fact (source=self, the highest-trust source): month+day for a birthday (recurring_date, NO year) or an ISO date for a work anniversary. The subject is ALWAYS the caller's own actor (resolved from the verified JWT email), so a member can never write another person's fact. Tenant-scoped; PII-safe (no raw value logged; audit stores a hash); honors the fact's allowed_sources allowlist when set.","operationId":"submit_own_fact_v1_person_facts_self_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitOwnFactRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonFactSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/proactive-limits":{"get":{"tags":["proactive-limits"],"summary":"Get the workspace proactive-reply limits","description":"How often Patricia replies on her own in the caller's workspace: the per-channel daily reply cap and the quiet period between unprompted replies, each labelled as Patricia's recommended default or a workspace override. Defaults: 8 replies per channel a day, a 30-minute quiet period.","operationId":"get_proactive_limits_v1_proactive_limits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProactiveLimitsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["proactive-limits"],"summary":"Update the workspace proactive-reply limits","description":"Set the per-channel daily reply cap and/or the quiet period between unprompted replies, or reset both to Patricia's recommended settings. Changes take effect on the workspace's next proactive evaluation. Only the fields provided are changed.","operationId":"update_proactive_limits_v1_proactive_limits_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProactiveLimitsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProactiveLimitsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/actor-kinds":{"get":{"tags":["reference"],"summary":"List Actor Kind Refs","description":"Return all Actor Kind Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_actor_kinds_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Actor Kind Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_ActorKindRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/actor-kinds/{code}":{"get":{"tags":["reference"],"summary":"Get Actor Kind Ref","description":"Return a single Actor Kind Ref record by its primary key.","operationId":"_get_detail_v1_reference_actor_kinds__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Actor Kind Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorKindRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/brain-doc-scopes":{"get":{"tags":["reference"],"summary":"List Brain Doc Scope Refs","description":"Return all Brain Doc Scope Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_brain_doc_scopes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Brain Doc Scope Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_BrainDocScopeRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/brain-doc-scopes/{code}":{"get":{"tags":["reference"],"summary":"Get Brain Doc Scope Ref","description":"Return a single Brain Doc Scope Ref record by its primary key.","operationId":"_get_detail_v1_reference_brain_doc_scopes__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Brain Doc Scope Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrainDocScopeRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/conversation-kinds":{"get":{"tags":["reference"],"summary":"List Conversation Kind Refs","description":"Return all Conversation Kind Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_conversation_kinds_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Conversation Kind Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_ConversationKindRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/conversation-kinds/{code}":{"get":{"tags":["reference"],"summary":"Get Conversation Kind Ref","description":"Return a single Conversation Kind Ref record by its primary key.","operationId":"_get_detail_v1_reference_conversation_kinds__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Conversation Kind Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationKindRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/cron-kinds":{"get":{"tags":["reference"],"summary":"List Cron Kind Refs","description":"Return all Cron Kind Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_cron_kinds_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Cron Kind Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_CronKindRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/cron-kinds/{code}":{"get":{"tags":["reference"],"summary":"Get Cron Kind Ref","description":"Return a single Cron Kind Ref record by its primary key.","operationId":"_get_detail_v1_reference_cron_kinds__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Cron Kind Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CronKindRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/doc-statuses":{"get":{"tags":["reference"],"summary":"List Doc Status Refs","description":"Return all Doc Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_doc_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Doc Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_DocStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/doc-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Doc Status Ref","description":"Return a single Doc Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_doc_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Doc Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/group-statuses":{"get":{"tags":["reference"],"summary":"List Group Status Refs","description":"Return all Group Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_group_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Group Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_GroupStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/group-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Group Status Ref","description":"Return a single Group Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_group_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Group Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/group-suggestion-statuses":{"get":{"tags":["reference"],"summary":"List Group Suggestion Status Refs","description":"Return all Group Suggestion Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_group_suggestion_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Group Suggestion Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_GroupSuggestionStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/group-suggestion-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Group Suggestion Status Ref","description":"Return a single Group Suggestion Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_group_suggestion_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Group Suggestion Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSuggestionStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/integration-statuses":{"get":{"tags":["reference"],"summary":"List Integration Status Refs","description":"Return all Integration Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_integration_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Integration Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_IntegrationStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/integration-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Integration Status Ref","description":"Return a single Integration Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_integration_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Integration Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/integration-visibilities":{"get":{"tags":["reference"],"summary":"List Integration Visibility Refs","description":"Return all Integration Visibility Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_integration_visibilities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Integration Visibility Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_IntegrationVisibilityRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/integration-visibilities/{code}":{"get":{"tags":["reference"],"summary":"Get Integration Visibility Ref","description":"Return a single Integration Visibility Ref record by its primary key.","operationId":"_get_detail_v1_reference_integration_visibilities__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Integration Visibility Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationVisibilityRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/invitation-statuses":{"get":{"tags":["reference"],"summary":"List Invitation Status Refs","description":"Return all Invitation Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_invitation_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Invitation Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_InvitationStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/invitation-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Invitation Status Ref","description":"Return a single Invitation Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_invitation_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Invitation Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/lesson-statuses":{"get":{"tags":["reference"],"summary":"List Lesson Status Refs","description":"Return all Lesson Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_lesson_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Lesson Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_LessonStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/lesson-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Lesson Status Ref","description":"Return a single Lesson Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_lesson_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Lesson Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LessonStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/member-sources":{"get":{"tags":["reference"],"summary":"List Member Source Refs","description":"Return all Member Source Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_member_sources_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Member Source Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_MemberSourceRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/member-sources/{code}":{"get":{"tags":["reference"],"summary":"Get Member Source Ref","description":"Return a single Member Source Ref record by its primary key.","operationId":"_get_detail_v1_reference_member_sources__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Member Source Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberSourceRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/membership-statuses":{"get":{"tags":["reference"],"summary":"List Membership Status Refs","description":"Return all Membership Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_membership_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Membership Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_MembershipStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/membership-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Membership Status Ref","description":"Return a single Membership Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_membership_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Membership Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/memory-kinds":{"get":{"tags":["reference"],"summary":"List Memory Kind Refs","description":"Return all Memory Kind Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_memory_kinds_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Memory Kind Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_MemoryKindRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/memory-kinds/{code}":{"get":{"tags":["reference"],"summary":"Get Memory Kind Ref","description":"Return a single Memory Kind Ref record by its primary key.","operationId":"_get_detail_v1_reference_memory_kinds__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Memory Kind Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryKindRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/memory-scopes":{"get":{"tags":["reference"],"summary":"List Memory Scope Refs","description":"Return all Memory Scope Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_memory_scopes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Memory Scope Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_MemoryScopeRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/memory-scopes/{code}":{"get":{"tags":["reference"],"summary":"Get Memory Scope Ref","description":"Return a single Memory Scope Ref record by its primary key.","operationId":"_get_detail_v1_reference_memory_scopes__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Memory Scope Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryScopeRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/outreach-channels":{"get":{"tags":["reference"],"summary":"List Outreach Channel Refs","description":"Return all Outreach Channel Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_outreach_channels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Outreach Channel Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_OutreachChannelRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/outreach-channels/{code}":{"get":{"tags":["reference"],"summary":"Get Outreach Channel Ref","description":"Return a single Outreach Channel Ref record by its primary key.","operationId":"_get_detail_v1_reference_outreach_channels__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Outreach Channel Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachChannelRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/outreach-personalizations":{"get":{"tags":["reference"],"summary":"List Outreach Personalization Refs","description":"Return all Outreach Personalization Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_outreach_personalizations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Outreach Personalization Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_OutreachPersonalizationRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/outreach-personalizations/{code}":{"get":{"tags":["reference"],"summary":"Get Outreach Personalization Ref","description":"Return a single Outreach Personalization Ref record by its primary key.","operationId":"_get_detail_v1_reference_outreach_personalizations__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Outreach Personalization Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachPersonalizationRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/outreach-statuses":{"get":{"tags":["reference"],"summary":"List Outreach Status Refs","description":"Return all Outreach Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_outreach_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Outreach Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_OutreachStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/outreach-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Outreach Status Ref","description":"Return a single Outreach Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_outreach_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Outreach Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/permission-statuses":{"get":{"tags":["reference"],"summary":"List Permission Status Refs","description":"Return all Permission Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_permission_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Permission Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_PermissionStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/permission-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Permission Status Ref","description":"Return a single Permission Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_permission_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Permission Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/platforms":{"get":{"tags":["reference"],"summary":"List Platform Refs","description":"Return all Platform Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_platforms_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Platform Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_PlatformRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/platforms/{code}":{"get":{"tags":["reference"],"summary":"Get Platform Ref","description":"Return a single Platform Ref record by its primary key.","operationId":"_get_detail_v1_reference_platforms__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Platform Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/preference-sources":{"get":{"tags":["reference"],"summary":"List Preference Source Refs","description":"Return all Preference Source Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_preference_sources_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Preference Source Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_PreferenceSourceRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/preference-sources/{code}":{"get":{"tags":["reference"],"summary":"Get Preference Source Ref","description":"Return a single Preference Source Ref record by its primary key.","operationId":"_get_detail_v1_reference_preference_sources__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Preference Source Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferenceSourceRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/proactive-candidate-statuses":{"get":{"tags":["reference"],"summary":"List Proactive Candidate Status Refs","description":"Return all Proactive Candidate Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_proactive_candidate_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Proactive Candidate Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_ProactiveCandidateStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/proactive-candidate-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Proactive Candidate Status Ref","description":"Return a single Proactive Candidate Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_proactive_candidate_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Proactive Candidate Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProactiveCandidateStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/risk-tiers":{"get":{"tags":["reference"],"summary":"List Risk Tier Refs","description":"Return all Risk Tier Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_risk_tiers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Risk Tier Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_RiskTierRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/risk-tiers/{code}":{"get":{"tags":["reference"],"summary":"Get Risk Tier Ref","description":"Return a single Risk Tier Ref record by its primary key.","operationId":"_get_detail_v1_reference_risk_tiers__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Risk Tier Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskTierRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/roles":{"get":{"tags":["reference"],"summary":"List Role Refs","description":"Return all Role Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_roles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Role Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_RoleRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/roles/{code}":{"get":{"tags":["reference"],"summary":"Get Role Ref","description":"Return a single Role Ref record by its primary key.","operationId":"_get_detail_v1_reference_roles__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Role Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/run-statuses":{"get":{"tags":["reference"],"summary":"List Run Status Refs","description":"Return all Run Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_run_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Run Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_RunStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/run-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Run Status Ref","description":"Return a single Run Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_run_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Run Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/run-triggers":{"get":{"tags":["reference"],"summary":"List Run Trigger Refs","description":"Return all Run Trigger Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_run_triggers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Run Trigger Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_RunTriggerRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/run-triggers/{code}":{"get":{"tags":["reference"],"summary":"Get Run Trigger Ref","description":"Return a single Run Trigger Ref record by its primary key.","operationId":"_get_detail_v1_reference_run_triggers__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Run Trigger Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunTriggerRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/tenant-statuses":{"get":{"tags":["reference"],"summary":"List Tenant Status Refs","description":"Return all Tenant Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_tenant_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Tenant Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_TenantStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/tenant-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Tenant Status Ref","description":"Return a single Tenant Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_tenant_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Tenant Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/tool-call-statuses":{"get":{"tags":["reference"],"summary":"List Tool Call Status Refs","description":"Return all Tool Call Status Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_tool_call_statuses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Tool Call Status Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_ToolCallStatusRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/tool-call-statuses/{code}":{"get":{"tags":["reference"],"summary":"Get Tool Call Status Ref","description":"Return a single Tool Call Status Ref record by its primary key.","operationId":"_get_detail_v1_reference_tool_call_statuses__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Tool Call Status Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolCallStatusRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/tool-kinds":{"get":{"tags":["reference"],"summary":"List Tool Kind Refs","description":"Return all Tool Kind Ref reference records with optional filtering and sorting.","operationId":"list_reference_v1_reference_tool_kinds_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter (ANTLR syntax)","title":"Q"},"description":"Search filter (ANTLR syntax)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. 'name:asc')","title":"Sort By"},"description":"Sort expression (e.g. 'name:asc')"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection","title":"Fields"},"description":"Field projection"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Previous-page query","title":"Pq"},"description":"Previous-page query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"}],"responses":{"200":{"description":"Paginated list of Tool Kind Ref records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse_ToolKindRefReferenceFullValidator_"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/reference/tool-kinds/{code}":{"get":{"tags":["reference"],"summary":"Get Tool Kind Ref","description":"Return a single Tool Kind Ref record by its primary key.","operationId":"_get_detail_v1_reference_tool_kinds__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Tool Kind Ref record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolKindRefReferenceFullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/roster-sync-policy":{"get":{"tags":["roster-sync-policy"],"summary":"Get the roster-sync policy (who joins from Slack)","description":"Which tiers of Slack member join Patricia when the workspace roster syncs: full workspace members and, only if enabled, guests (single and multi-channel). Guests are excluded by default. Any workspace member may read it.","operationId":"get_roster_sync_policy_v1_roster_sync_policy_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterSyncPolicyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["roster-sync-policy"],"summary":"Set the roster-sync policy (who joins from Slack)","description":"Set which Slack member tiers join Patricia on roster sync. Turning guests off (the default) means no single- or multi-channel guest is ever added, and any guest added by an earlier sync is deactivated on the next sync. Admin only.","operationId":"set_roster_sync_policy_v1_roster_sync_policy_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterSyncPolicyBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterSyncPolicyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs":{"get":{"tags":["runs","runs"],"summary":"Search agent runs","description":"List agent runs with filtering, sorting, and pagination.","operationId":"list_items_v1_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"mine","in":"query","required":false,"schema":{"type":"boolean","description":"When true, list only the runs that ran as the caller: the fires of the scheduled tasks they created, and the runs their own messages started. Defaults to false, the whole audience the caller can already read.","default":false,"title":"Mine"},"description":"When true, list only the runs that ran as the caller: the fires of the scheduled tasks they created, and the runs their own messages started. Defaults to false, the whole audience the caller can already read."},{"name":"task_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"List only the runs fired by this scheduled task (a cron-jobs row id).","title":"Task Id"},"description":"List only the runs fired by this scheduled task (a cron-jobs row id)."},{"name":"trigger_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"List only the runs fired by this event trigger (a channel-feeds row id).","title":"Trigger Id"},"description":"List only the runs fired by this event trigger (a channel-feeds row id)."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated agent run list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__AgentRun__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs/run-history":{"get":{"tags":["runs"],"summary":"Search the run history","description":"Read-only run-history view backed by a SearchQuery (QueryProxy).","operationId":"list_run_history_v1_runs_run_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/queries__run_history__RunHistoryQuery__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs/{id}":{"get":{"tags":["runs"],"summary":"Get run","description":"Retrieve a single run by ID, its live progress, and its available skill details.","operationId":"get_item_v1_runs__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested agent run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunDetailResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs/{run_id}/messages":{"get":{"tags":["runs"],"summary":"Search messages","description":"List messages with filtering, sorting, and pagination. Use 'any' as run_id to search across all parents in the tenant.","operationId":"list_messages_v1_runs__run_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","description":"Agent Run ID. Use 'any' to search across all parents.","title":"Run Id"},"description":"Agent Run ID. Use 'any' to search across all parents."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated message list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Message__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs/{run_id}/messages/{id}":{"get":{"tags":["runs"],"summary":"Get message","description":"Retrieve a single message by ID. Use 'any' as run_id to skip parent validation.","operationId":"get_message_v1_runs__run_id__messages__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","description":"Agent Run ID. Use 'any' to search across all parents.","title":"Run Id"},"description":"Agent Run ID. Use 'any' to search across all parents."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__conversation__Message__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs/{run_id}/tool-calls":{"get":{"tags":["runs"],"summary":"Search tool calls","description":"List tool calls with filtering, sorting, and pagination. Use 'any' as run_id to search across all parents in the tenant.","operationId":"list_tool_calls_v1_runs__run_id__tool_calls_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","description":"Agent Run ID. Use 'any' to search across all parents.","title":"Run Id"},"description":"Agent Run ID. Use 'any' to search across all parents."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated tool call list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__ToolCall__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs/{run_id}/tool-calls/{id}":{"get":{"tags":["runs"],"summary":"Get tool call","description":"Retrieve a single tool call by ID. Use 'any' as run_id to skip parent validation.","operationId":"get_tool_call_v1_runs__run_id__tool_calls__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","description":"Agent Run ID. Use 'any' to search across all parents.","title":"Run Id"},"description":"Agent Run ID. Use 'any' to search across all parents."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested tool call.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__run__ToolCall__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/shared-assets/{token}":{"get":{"tags":["shared-assets"],"summary":"Download a shared file (public, by capability token)","description":"The file behind one share link, as an attachment. No sign-in. Answers 404 for an unknown or revoked link and for a deleted file — indistinguishably.","operationId":"download_shared_asset_v1_shared_assets__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"description":"The share link's capability token.","title":"Token"},"description":"The share link's capability token."}],"responses":{"200":{"description":"The stored bytes, as an attachment.","content":{"application/json":{"schema":{}},"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"No shared file for that link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The file exists, but the store holding its bytes cannot be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/shared-assets/{token}/meta":{"get":{"tags":["shared-assets"],"summary":"What one share link opens (public, by capability token)","description":"The facts about the file behind one share link: its name, type, size, when it was made, who made it, and when the link stops working. No sign-in. Carries nothing about the workspace the file came from and nothing about any other file. Answers 404 for an unknown, revoked or expired link and for a deleted file, indistinguishably.","operationId":"get_shared_asset_meta_v1_shared_assets__token__meta_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"description":"The share link's capability token.","title":"Token"},"description":"The share link's capability token."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedAssetView"}}}},"404":{"description":"No shared file for that link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/shared-assets/{token}/thumbnail":{"get":{"tags":["shared-assets"],"summary":"A shared file's preview image (public, by capability token)","description":"A small server-generated WebP preview of the file behind one share link, for the page the link opens. No sign-in. Answers 202 while a preview is being prepared, and 404 when the link is unknown, revoked or expired, when the file was deleted, or when this file will never have a preview. Supports `If-None-Match` with the returned ETag.","operationId":"get_shared_asset_thumbnail_v1_shared_assets__token__thumbnail_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"description":"The share link's capability token.","title":"Token"},"description":"The share link's capability token."}],"responses":{"200":{"description":"The server-generated preview image.","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}},"202":{"description":"No preview yet; generation is queued. Ask again shortly."},"304":{"description":"Unchanged — the ETag the client holds is still current."},"404":{"description":"No shared file for that link, or it will never have a preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/shared-folders/{token}":{"get":{"tags":["shared-assets"],"summary":"What one folder link opens (public, by capability token)","description":"The folder's name and how many live files it holds. No sign-in, no workspace name, no ids. Answers 404 for an unknown, revoked or expired link. Behind the asset_folder_sharing_enabled kill switch.","operationId":"get_shared_folder_meta_v1_shared_folders__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"description":"The share link's capability token.","title":"Token"},"description":"The share link's capability token."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedFolderFacts"}}}},"404":{"description":"No shared folder for that link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/shared-folders/{token}/files":{"get":{"tags":["shared-assets"],"summary":"One page of a shared folder's files (public, by capability token)","description":"The folder's live files, oldest-filed first, paged. Each entry carries an opaque locator — pass it to the thumbnail and download routes below. No sign-in.","operationId":"list_shared_folder_files_v1_shared_folders__token__files_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"description":"The share link's capability token.","title":"Token"},"description":"The share link's capability token."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"description":"From a previous page's next_cursor.","title":"Cursor"},"description":"From a previous page's next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedFolderPage"}}}},"404":{"description":"No shared folder for that link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/shared-folders/{token}/files/download":{"get":{"tags":["shared-assets"],"summary":"Download a shared folder's file (public, by capability token + locator)","description":"One file in a shared folder, as an attachment. No sign-in.","operationId":"download_shared_folder_file_v1_shared_folders__token__files_download_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"description":"The share link's capability token.","title":"Token"},"description":"The share link's capability token."},{"name":"locator","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"A file's opaque locator.","title":"Locator"},"description":"A file's opaque locator."}],"responses":{"200":{"description":"The stored bytes, as an attachment.","content":{"application/json":{"schema":{}},"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"No shared folder for that link, or locator.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The file exists, but the store holding its bytes cannot be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/shared-folders/{token}/files/thumbnail":{"get":{"tags":["shared-assets"],"summary":"A shared folder file's preview image (public, by capability token + locator)","description":"OUR re-encoded preview of one file in a shared folder. Supports If-None-Match.","operationId":"get_shared_folder_file_thumbnail_v1_shared_folders__token__files_thumbnail_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"description":"The share link's capability token.","title":"Token"},"description":"The share link's capability token."},{"name":"locator","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"A file's opaque locator.","title":"Locator"},"description":"A file's opaque locator."}],"responses":{"200":{"description":"The server-generated preview image.","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}},"202":{"description":"No preview yet; generation is queued. Ask again shortly."},"304":{"description":"Unchanged — the ETag the client holds is still current."},"404":{"description":"No shared file for that link, or it will never have a preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/skill-drafts":{"post":{"tags":["skill-drafts"],"summary":"Open a skill draft","description":"Start editing a skill without creating a version. Send `skill_id` to edit an EXISTING skill — its active version's manifest and files are copied in and the version number is patch-bumped — or omit it to start a new one, optionally with a starting `manifest` (for example a candidate returned by the GitHub autodetect route). Nothing here is installed, compiled into runtime rows, or visible to anyone else: a draft belongs to the person who opened it until they publish it.","operationId":"create_draft_v1_skill_drafts_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDraftRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDraftDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["skill-drafts"],"summary":"List your own skill drafts","description":"The drafts YOU opened, most recently touched first. A draft is private to its author, so this never shows a teammate's work in progress. `validation_errors` is the cached result of the last validate — a hint for the list, never a gate on publishing.","operationId":"list_my_drafts_v1_skill_drafts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SkillDraftSummary"},"title":"Response List My Drafts V1 Skill Drafts Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-drafts/upload":{"post":{"tags":["skill-drafts"],"summary":"Open a skill draft from an uploaded ZIP package","description":"Upload a .zip containing a manifest.yaml (+ optional SKILL.md and reference/script files) and get an EDITABLE draft rather than a finished version. The archive is read safely in memory (no extraction, hard size/bomb/traversal caps) and every member it carries becomes a draft file you can change one at a time. Send the raw .zip as the request body.","operationId":"upload_draft_zip_v1_skill_drafts_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source_ref","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"description":"The uploaded filename, for the record.","title":"Source Ref"},"description":"The uploaded filename, for the record."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDraftDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-drafts/workspace":{"get":{"tags":["skill-drafts"],"summary":"List every draft in the workspace (metadata only)","description":"For cleanup. Returns WHAT drafts exist and who owns them — never a manifest, a file path, or any file content, because a draft is its author's unreviewed prose and this route exists to remove an abandoned one, not to read it. Pair it with DELETE /skill-drafts/{id}. Requires skills:delete.","operationId":"list_workspace_drafts_v1_skill_drafts_workspace_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SkillDraftMetadata"},"title":"Response List Workspace Drafts V1 Skill Drafts Workspace Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-drafts/{draft_id}":{"get":{"tags":["skill-drafts"],"summary":"Get one of your drafts","description":"Your draft in full: the working manifest plus the list of files it carries. Somebody else's draft is a 404, in your workspace or any other. `base_version_stale` means the skill you are editing has been published again since you started — see POST /skill-drafts/{id}/rebase.","operationId":"get_draft_v1_skill_drafts__draft_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDraftDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["skill-drafts"],"summary":"Update a draft's manifest or title","description":"Replace the working manifest and/or the draft's name. Nothing is validated on save — a draft is allowed to be broken while you work on it — so the cached validation result is cleared and POST /skill-drafts/{id}/validate re-checks it whenever you want.","operationId":"update_draft_v1_skill_drafts__draft_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDraftRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDraftDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["skill-drafts"],"summary":"Delete a draft","description":"Delete your own draft and every file in it. A skills:delete holder may also delete a teammate's abandoned draft — deleting one is not the same as reading one, and they never gain the second.","operationId":"delete_draft_v1_skill_drafts__draft_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-drafts/{draft_id}/files":{"put":{"tags":["skill-drafts"],"summary":"Write one file into a draft","description":"Create or replace ONE file by its bundle-relative path — this is the route that makes editing a skill cost one file instead of a whole re-upload. Returns the draft's file list. The same per-file and per-skill size caps a published skill obeys apply here, so a draft can never grow into something publishing would refuse.","operationId":"put_draft_file_v1_skill_drafts__draft_id__files_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutDraftFileRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DraftFileSummary"},"title":"Response Put Draft File V1 Skill Drafts  Draft Id  Files Put"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["skill-drafts"],"summary":"Remove one file from a draft","description":"Remove one file from the caller's own draft (author-fenced).","operationId":"delete_draft_file_v1_skill_drafts__draft_id__files_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":512,"title":"Path"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-drafts/{draft_id}/files/content":{"get":{"tags":["skill-drafts"],"summary":"Read one file from a draft","description":"The text of one file in your own draft, addressed by its exact bundle-relative path. A file whose bytes are not text (a binary asset from an uploaded package) is refused rather than mangled — download the original package for those.","operationId":"get_draft_file_v1_skill_drafts__draft_id__files_content_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":512,"title":"Path"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftFileContent"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-drafts/{draft_id}/publish":{"post":{"tags":["skill-drafts"],"summary":"Publish a draft as a new skill version","description":"Compile the draft into ONE immutable version. The version is created exactly as the direct authoring routes create it: an owner or admin author's version is ready to enable immediately, and a version authored without that authority stays PROPOSED until an owner or admin approves it. Publishing does NOT enable the skill — enabling is a separate step with its own permission, so publishing from a draft is never a way around who may give a skill to the whole workspace.\n\nA skill that has been published again by someone else since you started editing is refused until you review what changed (POST /skill-drafts/{id}/rebase).","operationId":"publish_draft_v1_skill_drafts__draft_id__publish_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-drafts/{draft_id}/rebase":{"post":{"tags":["skill-drafts"],"summary":"Carry on from the skill's latest published version","description":"Acknowledge that somebody published a new version of this skill while you were editing, and accept publishing on top of it. This is an ACKNOWLEDGEMENT, not a merge: your manifest and files are left exactly as they are. Review what changed first — whatever the newer version added is not in your draft and will not be in what you publish.","operationId":"rebase_draft_v1_skill_drafts__draft_id__rebase_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillDraftDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-drafts/{draft_id}/validate":{"post":{"tags":["skill-drafts"],"summary":"Check a draft without publishing it","description":"Compile the draft through the same platform gates a real save runs, and additionally check the manifest against the files this draft actually carries — so a reference or script you declared but never added is caught here rather than at publish. Writes no version. Always 200 (the result is in the body).","operationId":"validate_draft_v1_skill_drafts__draft_id__validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Draft Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftValidationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-catalog":{"get":{"tags":["skill-hub"],"summary":"The installable skill catalog with this workspace's install state","description":"Every skill this workspace can install right now (the released platform catalog), overlaid with which ones are already installed here, so the dashboard can offer Install or link straight to the installed skill.","operationId":"list_catalog_v1_skill_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CatalogSkillSummary"},"title":"Response List Catalog V1 Skill Catalog Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-catalog/taxonomy":{"get":{"tags":["skill-hub"],"summary":"The skill taxonomy tree, in the order the console must render it","description":"Every node of the skill taxonomy in tree order, so the catalog rail can be drawn without a second copy of the tree in the client. Counts are NOT here: they belong to whichever set of skills the caller is looking at, and the catalog listing already carries each skill's path.","operationId":"list_taxonomy_v1_skill_catalog_taxonomy_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TaxonomyNode"},"title":"Response List Taxonomy V1 Skill Catalog Taxonomy Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-catalog/{slug}":{"get":{"tags":["skill-hub"],"summary":"One skill's title + rendered guide, for the run-timeline peek","description":"Resolves a slug to a skill this caller may read: the listed global catalog first, else an unlisted (dark) global this workspace has installed and the runtime would actually load, else the workspace's own skill (fenced by the same occupancy rule every installation-id route uses). A slug the platform owns falls through to a same-slug tenant skill UNLESS this workspace has an installed, active, non-killed install of that global row — the same shadow rule the runtime resolves a run's skills by — in which case the GLOBAL is served instead of a 404, on the version the runtime actually runs. Every refusal — unknown, a dark global this workspace never installed shadowing an installed tenant skill's slug, an installed global the runtime would not admit (wrong archetype/provenance, archived, paused, or killed), another member's personal skill, or another tenant's — answers with the same 404, so the response never discloses which one it was.","operationId":"get_catalog_skill_v1_skill_catalog__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","maxLength":255,"title":"Slug"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogSkillDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-catalog/{slug}/workspace-default":{"put":{"tags":["skill-hub"],"summary":"Turn a default-on catalog skill off for this workspace, or back on","description":"A trusted, listed, portable catalog skill runs for every workspace with NO install row at all. This is how a workspace stops one, and how it gives it back.\n\n`enabled: false` writes the suppressing row (creating the install if there is none) and stamps the pause in ONE transaction. That is why this is a route rather than two client calls: an install row alone does not suppress anything (a never-activated row reads as an unfinished install, deliberately), so a client that installed and then failed the second call would leave the skill running behind a switch drawn as off. The activation route cannot do the second half anyway — a portable skill compiles no activate action.\n\n`enabled: true` DELETES the suppressing row, returning the skill to the exact state a workspace that never touched it is in: running on the catalog's active version.\n\nBoth directions are idempotent. Both require skills:install, because this changes what the whole team runs.","operationId":"set_workspace_default_v1_skill_catalog__slug__workspace_default_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","maxLength":255,"description":"The catalog slug, e.g. `competitor-scan`.","title":"Slug"},"description":"The catalog slug, e.g. `competitor-scan`."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceDefaultRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceDefaultState"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-config-options/channels":{"get":{"tags":["skill-hub"],"summary":"Workspace channels for the settings channel picker","description":"The friendly channel picker's options: the chat channels Patricia can see in this workspace (public + private), so an admin picks a channel by name instead of pasting a raw channel id. Best-effort: an empty list (workspace not connected, or discovery unavailable) tells the picker to fall back to manual entry. Tenant-scoped.","operationId":"list_channel_options_v1_skill_config_options_channels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChannelOptionSummary"},"title":"Response List Channel Options V1 Skill Config Options Channels Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations":{"get":{"tags":["skill-hub"],"summary":"List the tenant's skill installations","description":"The Hub cards: every skill this workspace has installed (tenant-scoped).","operationId":"list_installations_v1_skill_installations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstallationSummary"},"title":"Response List Installations V1 Skill Installations Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["skill-hub"],"summary":"Install a skill-platform skill into the tenant","description":"Install a git-catalog skill by its catalog ``slug`` (e.g. ``celebrations``), pinned to the skill's active manifest version with a default config seeded from the manifest's config_fields. A portable skill (which already runs by default from the trusted catalog) comes up ACTIVE — the install is how a workspace customizes or later turns it off, never a prerequisite. A delivery (``sans``) skill is born PAUSED: the admin completes required settings + runs activation review before any delivery. Idempotent per skill: a second install of the same skill is a 409.\n\nEvery install here reaches the whole workspace (there is no personal catalog install), so this route additionally requires skills:install, not just skills:create.","operationId":"install_skill_v1_skill_installations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallSkillRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}":{"get":{"tags":["skill-hub"],"summary":"Get one skill installation","description":"One installation's status header plus the pinned manifest's plain-language overview (what the skill does, the phrases that reach it, what it wants connected, whether it has settings). Tenant-scoped; foreign 404.","operationId":"get_installation_v1_skill_installations__installation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["skill-hub"],"summary":"Remove an installed skill from the workspace","description":"Uninstall ONE skill. A skills:delete holder (owner/admin, or a delete-scoped API key) removes ANY install; anyone else may remove only their OWN personal install — a TEAM install answers 403, and another member's personal install already 404s like a missing one (the same fence every installation-id route applies). A hard delete: the install's settings and its occurrence history cascade away with it, and it cannot be undone. The skill can be installed again from the catalog, but it comes back unconfigured. For a skill the trusted catalog enables by default, removing the install discards the workspace's override, so the skill returns to running with catalog defaults — to keep it OFF, pause the install instead of deleting it. Refused with a 409 while another installed skill declares this one as a dependency, so removing it can never leave a kept skill broken.","operationId":"uninstall_installation_v1_skill_installations__installation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/activation":{"patch":{"tags":["skill-hub"],"summary":"Activation review: start posting from now","description":"Flip the installation live: sets activated_at/first_live_at, status active, and bumps the projection generation. Past dates will NOT back-send (occurrences before activation are skipped).","operationId":"set_activation_v1_skill_installations__installation_id__activation_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/agenda":{"get":{"tags":["skill-hub"],"summary":"The Hub's upcoming scheduled-posts surface","description":"The occurrences that can STILL fire for this installation, by delivery date. Excludes terminal rows (sent/superseded/skipped/dead_letter/delivery_unknown) and past-dated ones, so a fired post never lingers as 'upcoming'. PII-safe (no dates-as-PII).","operationId":"get_installation_agenda_v1_skill_installations__installation_id__agenda_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OccurrenceSummary"},"title":"Response Get Installation Agenda V1 Skill Installations  Installation Id  Agenda Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/config":{"get":{"tags":["skill-hub"],"summary":"The manifest-driven settings form (schema + current values)","description":"The generic settings surface for one installation: the field schema projected from the pinned manifest's config_fields (what to render) + the install's active typed values (what to pre-fill). The dashboard renders friendly non-technical controls from this: no per-skill settings UI.","operationId":"get_installation_config_v1_skill_installations__installation_id__config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillConfigResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["skill-hub"],"summary":"Save an installation's settings (append a new config version)","description":"Validate + persist the settings an admin set in the form. Only declared config_fields are kept (unknown keys dropped); an invalid value returns a per-field 422. Appends a new config version (append-only history) and bumps the projection generation so the next sweep re-projects. A partial save is allowed (untouched fields keep their value); go-live completeness is enforced on activation. A LIVE delivery skill can't be saved into an undeliverable state (422).","operationId":"update_installation_config_v1_skill_installations__installation_id__config_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillConfigUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillConfigResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/fact-solicitations":{"post":{"tags":["skill-hub"],"summary":"Notify selected members to submit their own bound fact (data collection)","description":"The employee data-collection mode (the solicit_fact action). Admin-triggered (skills:edit), selected-members-only: pass an EXPLICIT list of subject actor ids. There is no notify-everyone path and an empty list is a no-op (never an unsolicited blast). The fact must be bound by the installation and accept self-submission. A real Slack DM is attempted for every eligible target; if the tenant's Slack credential is unavailable, the target is 'would_notify' (nothing sent).","operationId":"solicit_fact_v1_skill_installations__installation_id__fact_solicitations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolicitFactRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolicitationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/kill":{"patch":{"tags":["skill-hub"],"summary":"Kill switch: halt (or resume) this installation's delivery","description":"Set/clear the installation kill switch; the drainer's pre-send re-check skips a killed install. Another member's personal install is not reachable here: it 404s like a missing one, admins included. The workspace's break-glass for one of its OWN authored skills is ``PATCH /authored-skills/{skill_id}/installation/kill``, which stops the skill without disclosing whose install it is.","operationId":"set_kill_v1_skill_installations__installation_id__kill_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KillRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/people":{"get":{"tags":["skill-hub"],"summary":"The people-table rows for the people_table surface","description":"The Hub's people table: every subject Patricia looks after (the tenant member roster for a person-fact skill, unioned with any subject that already has a resolved fact), pivoted so each bound fact is a column (a 'Sep 6' month/day label when present, empty when awaiting/opted-out) plus a rollup status pill and the next delivery date. COMPLETE (not paginated), bounded by the tenant's headcount, so a member awaiting a date is always present to fill. Generic: the columns come from the installation's compiled fact bindings (person facts for Celebrations, client facts for renewal-reminder). PII-safe: display handles + month/day + status only, never a birth year.","operationId":"get_installation_people_v1_skill_installations__installation_id__people_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeopleTableResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/preview":{"get":{"tags":["skill-hub"],"summary":"Explainable dry-run preview: why each celebration will / won't fire","description":"The arm-but-don't-fire cockpit: for each subject, whether Patricia WOULD post, the exact deterministic message she WOULD post (display handle only, never a birth date), the local delivery date, and a human-readable reason when it WON'T fire. Computed with the SAME deterministic built-ins the projector uses, so the preview matches what the drainer would do. Posts nothing by construction. PII-safe.","operationId":"preview_installation_v1_skill_installations__installation_id__preview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationPreviewSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/reconcile-queue":{"get":{"tags":["skill-hub"],"summary":"The delivery_unknown reconcile cockpit","description":"Occurrences whose send was ambiguous (crash-after-send), awaiting admin reconciliation.","operationId":"get_reconcile_queue_v1_skill_installations__installation_id__reconcile_queue_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OccurrenceSummary"},"title":"Response Get Reconcile Queue V1 Skill Installations  Installation Id  Reconcile Queue Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/stat-cards":{"get":{"tags":["skill-hub"],"summary":"The coverage KPI tiles for the stat_cards surface","description":"The Hub's KPI row VALUES: team-member count + one 'on file' tile per bound fact (with an 'N still to collect' hint) + a 'Next up' tile. Generic: the fact tiles come from the installation's compiled fact bindings, so any skill renders its own facts. PII-safe (counts + a display handle only).","operationId":"get_installation_stat_cards_v1_skill_installations__installation_id__stat_cards_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StatCardSummary"},"title":"Response Get Installation Stat Cards V1 Skill Installations  Installation Id  Stat Cards Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/surfaces":{"get":{"tags":["skill-hub"],"summary":"The compiled feature bundle that renders this installation","description":"The compiled feature-contract rows the dashboard renders generically: surfaces (keyed by surface_kind_code), their read-model descriptors, the bound actions, and the delivery policy. Proves 'no per-skill UI': the same bundle shape renders every skill.","operationId":"get_installation_surfaces_v1_skill_installations__installation_id__surfaces_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillSurfaceBundle"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/upgrade":{"post":{"tags":["skill-hub"],"summary":"Update an installed skill to its newest published version","description":"Move one installed skill onto the newest published version of that same skill, carrying its settings forward. The install itself is untouched: same skill, same sharing scope, same owner, and a skill that was running stays running while a paused one stays paused. There is no version to pick — the newest published one is the only destination, and going back to an older one is not offered here. ``expected_version_id`` is an optional compare-and-set guard: send back the ``available_version_id`` the page showed, and a version published in the meantime returns 409 rather than applying a different update. A skill that is already up to date is a 409. A LIVE delivery skill whose settings would not carry onto the newer version is a 409 that says so, rather than an upgrade that silently stops it posting.","operationId":"upgrade_installation_route_v1_skill_installations__installation_id__upgrade_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeInstallationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-installations/{installation_id}/visibility":{"patch":{"tags":["skill-hub"],"summary":"Change an installed skill's sharing scope","description":"Move one installed skill between TEAM (everyone in the workspace can use it) and PERSONAL (only the person who took it). Requires skills:install. ``expected_current`` is a compare-and-set guard: a change that landed first returns 409 instead of clobbering it, and a request whose two scopes are equal is refused (422) rather than silently reassigning ownership. Only an install whose runtime readers enforce ownership can be personal: an ``instructions`` install of any provenance, or a ``skill`` one whose provenance a run can load (git-catalog, platform-admin, or a skill this workspace wrote itself); a ``sans`` install stays shared (400), and so does an install that came from a bundle (400). Sharing a personal install back with the team is always accepted, so read ``can_change_visibility`` on the install rather than deriving either rule again. Another member's personal install is never disclosed: it 404s like a missing one, for admins too. One exception, and it is a DISCLOSURE rule rather than a move rule: an install whose personal owner can no longer reach it is shown to a skills:edit holder so the workspace can recover it, so a caller who may install but not edit gets the same 404 for those rows that everyone else does.","operationId":"set_installation_visibility_v1_skill_installations__installation_id__visibility_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Installation Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationVisibilityBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-occurrences/{occurrence_id}/attempts":{"get":{"tags":["skill-hub"],"summary":"An occurrence's delivery attempts","description":"The append-only attempt history (template + receipt ids only, never rendered text).","operationId":"list_occurrence_attempts_v1_skill_occurrences__occurrence_id__attempts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"occurrence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Occurrence Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeliveryAttemptSummary"},"title":"Response List Occurrence Attempts V1 Skill Occurrences  Occurrence Id  Attempts Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-occurrences/{occurrence_id}/reconcile":{"post":{"tags":["skill-hub"],"summary":"Reconcile an ambiguous (delivery_unknown) occurrence","description":"Confirm whether the ambiguous post was made: posted → sent; not posted → pending (re-attempt).","operationId":"reconcile_occurrence_v1_skill_occurrences__occurrence_id__reconcile_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"occurrence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Occurrence Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReconcileRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OccurrenceSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-reasons":{"get":{"tags":["skill-hub"],"summary":"The platform reason catalog","description":"The shared worker/UI 'why will / won't fire' vocabulary (platform-owned; not tenant data).","operationId":"list_reasons_v1_skill_reasons_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReasonSummary"},"title":"Response List Reasons V1 Skill Reasons Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-packs":{"get":{"tags":["skill-packs"],"summary":"List the available skill packs","description":"The catalog of skill packs a workspace can install. A pack bundles several skills; installing it installs each one (plus any skills they depend on). Members that are not yet released to the catalog are not shown. Each pack says whether this workspace already has it.","operationId":"list_skill_packs_v1_skill_packs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SkillPackSummary"},"title":"Response List Skill Packs V1 Skill Packs Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-packs/{pack_slug}/install":{"post":{"tags":["skill-packs"],"summary":"Install a skill pack into the workspace","description":"Install every skill in a pack, plus any skills those skills need. Each one arrives paused and pinned to its released version, with default settings, so nothing sends until it is set up and switched on. Skills this workspace already has are left exactly as they are. Installing the same pack twice is safe.\n\nEvery skill a pack installs is TEAM-wide, so this route requires skills:install, not just skills:create.","operationId":"install_skill_pack_v1_skill_packs__pack_slug__install_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pack_slug","in":"path","required":true,"schema":{"type":"string","description":"The pack's slug.","title":"Pack Slug"},"description":"The pack's slug."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillPackInstallResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["skill-packs"],"summary":"Uninstall a skill pack from the workspace","description":"Remove a pack and the skills it brought in. A skill stays if this workspace installed it separately, if another installed pack includes it too, or if a skill that stays needs it. Removing a skill also removes its settings and its history, and cannot be undone.","operationId":"uninstall_skill_pack_v1_skill_packs__pack_slug__install_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pack_slug","in":"path","required":true,"schema":{"type":"string","description":"The pack's slug.","title":"Pack Slug"},"description":"The pack's slug."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillPackUninstallResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-share-requests":{"post":{"tags":["skill-share-requests"],"summary":"Ask to share your personal skill with the team","description":"Raise a request for one of YOUR OWN personal installs to become team-visible, for someone with skills:edit to approve. Refused with 422 when the skill is already shared with the team, 409 when you already have an open request for it or a decline is still inside its cooldown, and 400 when your account is not matched to a chat profile. An install that is not yours (and another member's private install, which is never disclosed) answers 404.","operationId":"create_skill_share_request_v1_skill_share_requests_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareRequestCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareRequestSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-share-requests/{share_request_id}/approve":{"post":{"tags":["skill-share-requests"],"summary":"Approve a skill share request","description":"Approve a pending request: the installation becomes team-visible and loses its personal owner, and the decision is recorded, in one transaction. This is the same move PATCH /skill-installations/{id}/visibility performs directly, so it demands the same authority: skills:install and a signed-in person (API keys are refused). Answers 409 when the request was already decided, when the skill has since been removed, or when it is no longer held by the person who asked, and 404 when the request does not exist or belongs to another workspace.","operationId":"approve_skill_share_request_v1_skill_share_requests__share_request_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"share_request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Request Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareRequestSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-share-requests/{share_request_id}/deny":{"post":{"tags":["skill-share-requests"],"summary":"Decline a skill share request","description":"Decline a pending request. The skill stays personal and nothing about the install changes; the requester can ask again after the cooldown. Requires skills:edit and a signed-in person. Answers 409 when the request was already decided, and 404 when the request does not exist or belongs to another workspace.","operationId":"deny_skill_share_request_v1_skill_share_requests__share_request_id__deny_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"share_request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Request Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareRequestSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skill-share-requests/{share_request_id}/review":{"get":{"tags":["skill-share-requests"],"summary":"Read the exact skill version a share request would share","description":"Read what an open request would hand to the workspace, taken from the installation's PINNED manifest version rather than the skill's newest one, so the content shown is the content that would run even when the author has saved a newer version since asking. Title, semver and description are that pinned version's own, and description is null when the pinned manifest carries none rather than falling back to the skill's current summary. instructions_body is the pinned manifest's markdown body for an instructions skill, and null for a portable skill, whose prose lives in its file bundle rather than its manifest. Includes a renamed_since_pin flag when the skill has been renamed since. Requires skills:edit and a signed-in person (API keys are refused). Answers 404 when the request does not exist, belongs to another workspace, or has already been decided, and 409 when the skill has since been removed or is no longer held by the person who asked.","operationId":"review_skill_share_request_v1_skill_share_requests__share_request_id__review_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"share_request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Request Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareRequestReview"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skills":{"get":{"tags":["skills","skills"],"summary":"Search skills","description":"List skills with filtering, sorting, and pagination.","operationId":"list_items_v1_skills_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated skill list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["skills"],"summary":"Create skill","description":"Create a new skill directly. Requires skills:install, not skills:create: the body accepts a caller-chosen status_code, and an active skill is presented workspace-wide on the dashboard, so a caller who holds only skills:create no longer reaches this route at all. That caller's own no-approval lane is /authored-skills/instructions, which is personal until an admin shares it.","operationId":"create_skill_v1_skills_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__CreateValidator"}}}},"responses":{"201":{"description":"The created skill.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skills/{id}":{"get":{"tags":["skills","skills"],"summary":"Get skill","description":"Retrieve a single skill by ID.","operationId":"get_item_v1_skills__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested skill.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["skills","skills"],"summary":"Update skill","description":"Full update (PUT) of a skill.","operationId":"update_item_v1_skills__id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__UpdateValidator"}}}},"responses":{"200":{"description":"The updated skill.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["skills","skills"],"summary":"Partial update skill","description":"Partial update (PATCH) of a skill.","operationId":"merge_item_v1_skills__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__MergeValidator"}}}},"responses":{"200":{"description":"The updated skill.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["skills","skills"],"summary":"Delete skill","description":"Soft-delete a skill by ID.","operationId":"delete_item_v1_skills__id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skills/{skill_id}/disable":{"post":{"tags":["skills"],"summary":"Disable a skill","description":"Retire a tenant skill so Patricia stops using it (keeps the row; reversible via enable).","operationId":"disable_skill_v1_skills__skill_id__disable_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skills/{skill_id}/enable":{"post":{"tags":["skills"],"summary":"Enable a skill","description":"Mark a tenant skill active so Patricia can use it (promotes a proposed/retired skill to active).","operationId":"enable_skill_v1_skills__skill_id__enable_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skills/{skill_id}/files":{"get":{"tags":["skills"],"summary":"List a skill's files","description":"The SKILL.md and any reference/template/script files for a skill (tenant-owned or global/builtin).","operationId":"list_skill_files_v1_skills__skill_id__files_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/models__brain__SkillFile__FullValidator"},"title":"Response List Skill Files V1 Skills  Skill Id  Files Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/skills/{skill_id}/install":{"post":{"tags":["skills"],"summary":"Install a catalog skill","description":"Copy a global/builtin catalog skill into the tenant as an active, tenant-owned skill (plus its files). The global catalog row is never mutated. Idempotent per name: re-installing returns the existing tenant skill.\n\nThe copy is born active and TEAM-wide (there is no personal lane here), so this route additionally requires skills:install, not just skills:create.","operationId":"install_skill_v1_skills__skill_id__install_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/spending-limits":{"get":{"tags":["spending-limits"],"summary":"Get the workspace spending limits","description":"Effective per-run budgets (grouped) plus the monthly cap for the caller's workspace, labelling each value as Patricia's recommended default or a workspace override.","operationId":"get_spending_limits_v1_spending_limits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpendingLimitsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["spending-limits"],"summary":"Update the workspace spending limits","description":"Set the monthly cap and/or per-group per-run limits (a group applies to all its underlying triggers), choose what happens when a run reaches its limit (warn and keep going, the default, or stop the task), or reset everything to Patricia's recommended settings. A reset removes a custom monthly cap; while a cap is active, no per-run limit may exceed it. Changes take effect on the workspace's next run.","operationId":"update_spending_limits_v1_spending_limits_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpendingLimitsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpendingLimitsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/team-introductions":{"get":{"tags":["team-introductions"],"summary":"List teammates Patricia can introduce herself to","description":"The workspace's Slack roster with a per-person answer: who Patricia can say hello to, and who she cannot and why. Guests and teammates she has already met are listed but cannot be chosen. Reading this sends nothing.","operationId":"list_team_introductions_v1_team_introductions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamIntroductionListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["team-introductions"],"summary":"Introduce Patricia to selected teammates","description":"Authorize one welcome DM for each explicitly selected teammate who still passes the live workspace, identity, guest, and delivery checks. Refused teammates receive a reason and are not authorized.","operationId":"introduce_team_v1_team_introductions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamIntroductionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamIntroductionResult"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/team-requests":{"get":{"tags":["team-requests"],"summary":"List my team's submitted requests","description":"Tenant-scoped, sanitized, read-only list of bug reports and feature requests from every origin, including Slack channels, Slack DMs, Microsoft Teams, web, email, and system reports. Privacy comes from the tenant-safe title and description contract plus the explicit response whitelist.","operationId":"list_team_requests_v1_team_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamRequestListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/tenants":{"get":{"tags":["tenants","tenants"],"summary":"Search tenants","description":"List tenants with filtering, sorting, and pagination.","operationId":"list_items_v1_tenants_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated tenant list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Tenant__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["tenants","tenants"],"summary":"Create Workspace","description":"Create a new, separate workspace for the authenticated user and return a session scoped to it.\n\nThe deliberate way to a second workspace now that the returning-user guard no longer mints one from an\nunknown Slack. JWT-only (``require_user``) so it works even from a tenant-less pending session; it never\nselects among existing memberships, so it is not the tenant chooser. The required ``Idempotency-Key``\nheader makes a retry safe: the same key returns the SAME workspace (never a duplicate), and reusing a\nkey with a different body is a 409. Adopt the returned token pair to enter the new workspace.","operationId":"create_workspace_v1_tenants_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":255,"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWorkspaceRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Email verification required (EMAIL_NOT_VERIFIED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/tenants/{id}":{"get":{"tags":["tenants","tenants"],"summary":"Get tenant","description":"Retrieve a single tenant by ID.","operationId":"get_item_v1_tenants__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested tenant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Tenant__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["tenants","tenants"],"summary":"Update tenant","description":"Full update (PUT) of a tenant.","operationId":"update_item_v1_tenants__id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Tenant__UpdateValidator"}}}},"responses":{"200":{"description":"The updated tenant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Tenant__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["tenants","tenants"],"summary":"Partial update tenant","description":"Partial update (PATCH) of a tenant.","operationId":"merge_item_v1_tenants__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Tenant__MergeValidator"}}}},"responses":{"200":{"description":"The updated tenant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__identity__Tenant__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/tool-definitions":{"get":{"tags":["tool-definitions","tool-definitions"],"summary":"Search tool definitions","description":"List tool definitions with filtering, sorting, and pagination.","operationId":"list_items_v1_tool_definitions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ANTLR filter expression","title":"Q"},"description":"ANTLR filter expression"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size","title":"Limit"},"description":"Page size"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort expression (e.g. created_at:desc)","title":"Sort By"},"description":"Sort expression (e.g. created_at:desc)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field projection (e.g. id,name)","title":"Fields"},"description":"Field projection (e.g. id,name)"},{"name":"pq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor query","title":"Pq"},"description":"Pagination cursor query"},{"name":"from_prev","in":"query","required":false,"schema":{"type":"boolean","description":"Backward pagination flag","default":false,"title":"From Prev"},"description":"Backward pagination flag"},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Paginated tool definition list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__tool__ToolDefinition__SearchValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/tool-definitions/{id}":{"get":{"tags":["tool-definitions","tool-definitions"],"summary":"Get tool definition","description":"Retrieve a single tool definition by ID.","operationId":"get_item_v1_tool_definitions__id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"The requested tool definition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models__tool__ToolDefinition__FullValidator"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs-stats":{"get":{"tags":["usage"],"summary":"Aggregate run/usage stats","description":"Tenant-scoped run/usage aggregate over a UTC window: a zero-filled timeline, window totals (runs, credits, terminal-only success rate; tokens for internal callers), a by-source split, and, when `compare` is set, the prior window's totals. Usage is reported in credits (metered COGS → whole credits); the raw dollar figure is never surfaced. `start` and `end` are required, timezone-aware ISO-8601 (normalized to UTC); `end` must be after `start` and the window must not exceed 366 days (else 422). Requires `usage:read`.","operationId":"get_runs_stats_v1_runs_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Window start (inclusive). Required, timezone-aware ISO-8601; normalized to UTC.","title":"Start"},"description":"Window start (inclusive). Required, timezone-aware ISO-8601; normalized to UTC."},{"name":"end","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Window end (exclusive). Required, timezone-aware ISO-8601; normalized to UTC.","title":"End"},"description":"Window end (exclusive). Required, timezone-aware ISO-8601; normalized to UTC."},{"name":"granularity","in":"query","required":false,"schema":{"$ref":"#/components/schemas/StatsGranularity","description":"Timeline bucket size: day (default) / week / month.","default":"day"},"description":"Timeline bucket size: day (default) / week / month."},{"name":"compare","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/StatsCompare"},{"type":"null"}],"description":"Prior-window selector that populates `previous_totals` (omit for none).","title":"Compare"},"description":"Prior-window selector that populates `previous_totals` (omit for none)."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/runs-stats/by-member":{"get":{"tags":["usage"],"summary":"Per-member run/usage breakdown","description":"Tenant-scoped per-member usage over a UTC window: runs and credits (metered COGS → whole credits, never dollars; tokens carried for internal callers) attributed per teammate by the run's actor, most credits first. Runs with no actor (scheduled / system work) collapse into a single null-actor slice the dashboard labels 'Automated'; members with no runs in the window are omitted. `start` and `end` are required, timezone-aware ISO-8601 (normalized to UTC); `end` must be after `start` and the window must not exceed 366 days (else 422). Requires `usage:read`.","operationId":"get_runs_stats_by_member_v1_runs_stats_by_member_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Window start (inclusive). Required, timezone-aware ISO-8601; normalized to UTC.","title":"Start"},"description":"Window start (inclusive). Required, timezone-aware ISO-8601; normalized to UTC."},{"name":"end","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Window end (exclusive). Required, timezone-aware ISO-8601; normalized to UTC.","title":"End"},"description":"Window end (exclusive). Required, timezone-aware ISO-8601; normalized to UTC."},{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatsByMemberResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/usage-limits":{"get":{"tags":["usage-limits"],"summary":"Get the workspace usage against every limit","description":"Every limit the caller's workspace has, with current usage where one applies: monthly spend and per-run budgets, credits, meeting-recording slots and minutes, proactive-reply caps, the bug-report filing cap, the data-retention window, and the reasoning posture. Read-only; each limit is changed on its own settings surface.","operationId":"get_usage_limits_v1_usage_limits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Tenant-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageLimitsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/webhooks/attio":{"post":{"tags":["webhooks"],"summary":"Attio Webhook","description":"Verify the Attio signature, enqueue the deal mirror for any Deals ``record.updated``, ACK fast.","operationId":"attio_webhook_v1_webhooks_attio_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Attio Webhook V1 Webhooks Attio Post"}}}}}}},"/v1/webhooks/calcom":{"post":{"tags":["webhooks"],"summary":"Calcom Webhook","description":"Verify the Cal signature, enqueue the booking ingest for a subscribed trigger, ACK fast.","operationId":"calcom_webhook_v1_webhooks_calcom_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Calcom Webhook V1 Webhooks Calcom Post"}}}}}}},"/v1/webhooks/inbound/{capability}":{"post":{"tags":["webhooks"],"summary":"Inbound Event Webhook","description":"Admit one signed event from a workspace's own system, or refuse it.\n\nA followed event commits before its critical broker publish. A broker failure therefore leaves\na durable pending row and returns 503. The sender's retry reaches the tenant/source/event\nconflict and does not publish a second task.","operationId":"inbound_event_webhook_v1_webhooks_inbound__capability__post","parameters":[{"name":"capability","in":"path","required":true,"schema":{"type":"string","title":"Capability"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Inbound Event Webhook V1 Webhooks Inbound  Capability  Post"}}}},"400":{"description":"The JSON payload is invalid or exceeds the body-size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The capability or event-source signature is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The event source has no verifier or usable signing secret, or the task broker is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"requestBody":{"required":true,"description":"The raw event JSON. Signature verification uses these exact request bytes.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"/v1/webhooks/meta/data-deletion":{"post":{"tags":["webhooks"],"summary":"Meta Data Deletion Webhook","description":"Accept one verified Meta deletion request and return its public status capability.","operationId":"meta_data_deletion_webhook_v1_webhooks_meta_data_deletion_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Meta Data Deletion Webhook V1 Webhooks Meta Data Deletion Post"}}}}}}},"/v1/webhooks/pipedream/{capability}":{"post":{"tags":["webhooks"],"summary":"Pipedream Webhook","description":"Authenticate by capability, then record the connected account against its pending intent.","operationId":"pipedream_webhook_v1_webhooks_pipedream__capability__post","parameters":[{"name":"capability","in":"path","required":true,"schema":{"type":"string","title":"Capability"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pipedream Webhook V1 Webhooks Pipedream  Capability  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/recall":{"post":{"tags":["webhooks"],"summary":"Recall Webhook","description":"Verify the Recall (Svix) signature, enqueue transcript ingest on a ready event, ACK fast.","operationId":"recall_webhook_v1_webhooks_recall_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Recall Webhook V1 Webhooks Recall Post"}}}}}}},"/v1/webhooks/resend":{"post":{"tags":["webhooks"],"summary":"Resend Webhook","description":"Verify, parse, enqueue the deliverability event, ACK.","operationId":"resend_webhook_v1_webhooks_resend_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Response Resend Webhook V1 Webhooks Resend Post"}}}}}}},"/v1/webhooks/slack/events":{"post":{"tags":["webhooks"],"summary":"Slack Events","description":"Verify + ACK (<3s); enqueue normalized events; answer the URL challenge.","operationId":"slack_events_v1_webhooks_slack_events_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Slack Events V1 Webhooks Slack Events Post"}}}}}}},"/v1/webhooks/slack/interactions":{"post":{"tags":["webhooks"],"summary":"Slack Interactions","description":"Verify + ACK (<3s); enqueue an approval resume for button clicks.\n\nThree answer shapes, because Slack reads them differently. A ``block_actions`` click is happy\nwith any 2xx and keeps the ``{\"ok\": true}`` body it has always had. A ``view_submission`` is\nnot: Slack closes the modal only on a 200 with an EMPTY body, and treats a JSON body as a\n``response_action`` instruction, and ``{\"ok\": true}`` names none, so the modal would sit there\nlooking broken. And a submission the service could not carry out answers with a real\n``response_action`` — without one the modal closes as though it had worked.\n\nThe service decides all three and this route only relays them, INCLUDING the body: composing a\n``response_action`` here would put user-facing copy in a transport.","operationId":"slack_interactions_v1_webhooks_slack_interactions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/webhooks/slack/oauth/callback":{"get":{"tags":["webhooks"],"summary":"Slack Oauth Callback","description":"Verify state (+ browser-binding nonce), exchange the code, persist the install, then\nbounce the browser back to the dashboard page the install started from.\n\nSlack hands the user's browser to this route as a top-level navigation, so both exits\nare redirects: the installer lands back in-app on the page they clicked Connect from,\nflagged ``?slack=connected`` or ``?slack=error``, never on a raw JSON body. The return\npage rides in the signed state (the SPA fetches the install URL over XHR, so a cookie\nset at mint time would never come back), and is resolved BEFORE the exchange so a\nfailure returns to the same page a success would.\n\nThe generic error flag is deliberate: the reason for a failure (an already-claimed\nworkspace, a stale state) never leaks into the URL, matching the Teams callback.\n\nThe installer's IP rides along because the starter-verification gate checks it against our\ncached Tor exit-node list for a multi-member workspace, the only shape a clean verdict can\nwaive. It comes from ``provable_client_ip``, so only a proxy-written forwarded entry is ever\nbelieved: a chain too short to prove one yields no address, which reads as unknown at the\ngate and holds the grant.\n\nThe binder cookie is single-use: it is cleared on the returned response whatever the\noutcome, including a rejection. We build the response explicitly (rather than letting\nan exception propagate) so the ``Set-Cookie`` deletion survives the error path: a\nraised ``AppException`` is rendered by the global handler into a *fresh* response that\nwould not carry a header set on an injected ``Response``.","operationId":"slack_oauth_callback_v1_webhooks_slack_oauth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/slack/oauth/install":{"get":{"tags":["webhooks"],"summary":"Slack Oauth Install","description":"Redirect to Slack's authorize URL with an HMAC-signed, short-TTL marketing state.\n\nThis is the public \"Add to Slack\" entry point for the marketing site. The\nsigned state carries NO ``tenant_id`` so the OAuth callback routes through the\nmarketing-site resolver (``resolve_or_create_workspace``) instead of the\ntenant-attach path. A fresh nonce is sealed into the state AND dropped as an\nHttpOnly cookie; the callback requires the two to match, binding the round-trip\nto this browser (OAuth-CSRF defense). Dashboard-initiated installs (where the\nworkspace must be bound to an existing tenant) use the authenticated\n``POST /v1/integrations/slack/install-url`` endpoint instead, which requires\n``integrations:edit`` and takes the tenant from the bearer token.\n\nThe ad click ids (appended by the marketing site from its stored copies, one\nper major platform, see ``AdClickIdsProps``) are sealed into the signed state\nso the callback can stamp them on the ``platform_installed`` /\n``workspace_created`` funnel events. They are NORMALIZED, never validated:\n``normalize_click_id`` strips and truncates so a junk or over-long value is\ndropped or trimmed. Rejecting one would let an attribution artifact 422 the\npublic install entry point, which must always reach Slack.","operationId":"slack_oauth_install_v1_webhooks_slack_oauth_install_get","parameters":[{"name":"gclid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gclid"}},{"name":"fbclid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbclid"}},{"name":"ttclid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ttclid"}},{"name":"li_fat_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Fat Id"}},{"name":"msclkid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msclkid"}},{"name":"epik","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Epik"}},{"name":"twclid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twclid"}},{"name":"sccid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sccid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/stripe":{"post":{"tags":["webhooks"],"summary":"Stripe Webhook","description":"Verify the Stripe signature, enqueue the event sync, and ACK fast.","operationId":"stripe_webhook_v1_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stripe Webhook V1 Webhooks Stripe Post"}}}}}}},"/v1/webhooks/teams/messages":{"post":{"tags":["webhooks"],"summary":"Teams Messages","description":"Verify the Connector JWT + ACK; enqueue a run (message) or resume (card submit).","operationId":"teams_messages_v1_webhooks_teams_messages_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Teams Messages V1 Webhooks Teams Messages Post"}}}}}}},"/v1/webhooks/teams/oauth/callback":{"get":{"tags":["webhooks"],"summary":"Teams Oauth Callback","description":"Azure AD consent redirect: verify state, redeem the code, persist the install, then\nbounce the browser back to the dashboard with a success/error flag (so the admin lands\nin-app, not on raw JSON).\n\nThe page it bounces to rides in the signed state, narrowed to an exact allowlist, and falls\nback to workspace settings.\n\nAzure also sends ``tenant`` / ``admin_consent`` query params; they are intentionally not\nconsumed: the tenant is taken from the verified code exchange, not the redirect.","operationId":"teams_oauth_callback_v1_webhooks_teams_oauth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AbandonedRevokeClearance":{"properties":{"upstream_confirmed_revoked":{"type":"boolean","title":"Upstream Confirmed Revoked","description":"True when the operator verified in the provider's own console that the credential is gone. False records nothing and clears nothing, because an unconfirmed abandoned row already reports itself: kill the credential first, then call this."}},"type":"object","required":["upstream_confirmed_revoked"],"title":"AbandonedRevokeClearance","description":"The one fact this route records: the operator watched the credential die at the provider.\n\nRequired rather than defaulted, and the only accepted answer is ``true``. This route writes a\nmoney statement and nothing else, so a default would answer that question on the operator's\nbehalf, and ``false`` asks it to record a confirmation nobody made.\n\nThere is deliberately no \"I accept this leak\" arm, unlike the dead-letter clearance. That route\noffers one because it must lift an access fence either way; here the row is already exactly what\nan accepted leak looks like, so accepting one is the act of doing nothing."},"AbandonedRevokeClearanceRefusal":{"type":"string","enum":["upstream_not_confirmed","not_abandoned","live_debt_exists","too_recent"],"title":"AbandonedRevokeClearanceRefusal","description":"Why an abandoned-revoke clearance did not take. DERIVED at the point of refusal, never stored.\n\n- ``UPSTREAM_NOT_CONFIRMED``: the request itself declined to confirm the kill. This route only\n  records a confirmation, so there was nothing to write. Kill the credential in the provider's\n  own console first, then call again.\n- ``NOT_ABANDONED``: the row is not an abandoned revoke. It is live, or it already carries an\n  outcome, or an earlier clearance already recorded one. Nothing to do.\n- ``LIVE_DEBT_EXISTS``: a non-terminal outbox debt is still owed on the credential, so a worker\n  may yet kill it. The leak report shows this account as ``owned``. Wait for that debt to settle.\n- ``TOO_RECENT``: the row is abandoned in shape but too young to be treated as abandoned in fact.\n  A disconnect commits this exact marker BEFORE it calls the provider, so a call that is still\n  running looks identical. Wait, then re-run the leak report."},"AbandonedRevokeClearanceResult":{"properties":{"account":{"type":"string","title":"Account"},"tenant_id":{"type":"string","title":"Tenant Id"},"cleared":{"type":"boolean","title":"Cleared","description":"False when the clearance did not take; see ``refusal`` for why."},"refusal":{"anyOf":[{"$ref":"#/components/schemas/AbandonedRevokeClearanceRefusal"},{"type":"null"}],"description":"Why the clearance did not take. Null when ``cleared`` is true. The values are described on the AbandonedRevokeClearanceRefusal schema. Read as a hint, not a verdict: every value except ``upstream_not_confirmed`` is measured just after the write rather than inside it, so a debt that settles in that instant can shift which one is reported. ``cleared`` is the record of what happened."},"still_reported_as_orphaned":{"type":"boolean","title":"Still Reported As Orphaned","description":"True when the account remains on the COGS orphan report, either because the row was not this route's to clear or because it never reached the write."}},"type":"object","required":["account","tenant_id","cleared","still_reported_as_orphaned"],"title":"AbandonedRevokeClearanceResult","description":"What the operator's clearance did.\n\n``cleared`` is exact. ``refusal`` says which of four conditions stopped it, and each one is a\ndifferent next action: nothing to do, kill it at the provider first, wait for a worker, or wait\nfor a disconnect. Reported rather than raised, so a double-click is an honest no-op."},"AcceptResponse":{"properties":{"suggestion_id":{"type":"string","format":"uuid","title":"Suggestion Id"},"group_id":{"type":"string","format":"uuid","title":"Group Id"},"status":{"type":"string","title":"Status"},"linked_count":{"type":"integer","title":"Linked Count"}},"type":"object","required":["suggestion_id","group_id","status","linked_count"],"title":"AcceptResponse","description":"Result of accepting a suggestion."},"AccountToolSummary":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"risk_tier_code":{"type":"string","title":"Risk Tier Code"},"gate":{"type":"string","enum":["auto","ask"],"title":"Gate"},"locked":{"type":"boolean","title":"Locked"},"enabled":{"type":"boolean","title":"Enabled"},"tool_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Ref"},"override_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Override Id"},"override_eligible":{"type":"boolean","title":"Override Eligible","default":false},"override_ineligible_reason":{"anyOf":[{"$ref":"#/components/schemas/OverrideIneligibleReason"},{"type":"null"}]},"override_needs_reconfirmation":{"type":"boolean","title":"Override Needs Reconfirmation","default":false},"override_granted_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override Granted Tier"},"override_stored_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Override Stored Id"},"consent_token":{"type":"string","title":"Consent Token"}},"type":"object","required":["name","display_name","risk_tier_code","gate","locked","enabled","consent_token"],"title":"AccountToolSummary","description":"One tool (provider action) Patricia can take through a connected account, with its behavior FOR YOU.\n\nRead-only projection, and deliberately PER-VIEWER: two members of the same workspace can see\ndifferent values on the same row of a shared connection, because each one's own approval policy\nand per-tool overrides shape it. ``locked`` is the exception and stays account-level — it marks a\nfloor no personal setting reaches."},"AccountToolsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AccountToolSummary"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AccountToolsResponse"},"ActivationRequest":{"properties":{"activated":{"type":"boolean","title":"Activated","default":true}},"type":"object","title":"ActivationRequest","description":"Activation review: flip the installation live from now (past dates won't back-send)."},"ActiveRecordingView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"The meeting's title, when one was given."},"platform":{"type":"string","title":"Platform","description":"The meeting platform (e.g. 'Zoom', 'Google Meet'), or 'the meeting'."},"status":{"type":"string","title":"Status","description":"Lifecycle status: 'requested' (joining) or 'recording' (in the call)."},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When the recording was requested (bot dispatched)."},"requested_by_run":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Requested By Run","description":"The agent run that requested this recording, when known."}},"type":"object","required":["id","platform","status","started_at"],"title":"ActiveRecordingView","description":"One in-flight recording (bot dispatched or recording) shown in the usage surface."},"ActorDirectoryRow":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"platform_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Code"},"kind_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind Code"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","title":"ActorDirectoryRow","description":"Row shape returned by the directory query.\n\nAll fields optional so ``fields=`` projection validates (runflow pattern)."},"ActorKind":{"type":"string","enum":["human","bot","system"],"title":"ActorKind"},"ActorKindRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ActorKindRefReferenceFullValidator"},"AdminAccountSyncResult":{"properties":{"status":{"type":"string","title":"Status","default":"queued"},"account":{"type":"string","title":"Account"},"tenant_id":{"type":"string","title":"Tenant Id"},"task_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Id","description":"Broker task id for the queued sync, for tracing its worker logs."}},"type":"object","required":["account","tenant_id"],"title":"AdminAccountSyncResult","description":"Queued tool-catalog sync for one connected integration account.\n\n``status`` is only ever ``queued`` because the dispatch is ``critical``: a broker that refused the\nwork raises before this model is built, so the operator gets a 503 rather than a receipt to wait on."},"AdminActorRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"display_name":{"type":"string","title":"Display Name"},"unavailable":{"type":"boolean","title":"Unavailable","default":false}},"additionalProperties":false,"type":"object","required":["id","display_name"],"title":"AdminActorRef"},"AdminBootstrapResponse":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"is_internal":{"type":"boolean","title":"Is Internal"},"environment":{"type":"string","title":"Environment"},"dashboard_url":{"type":"string","title":"Dashboard Url"}},"additionalProperties":false,"type":"object","required":["user_id","email","first_name","last_name","is_internal","environment","dashboard_url"],"title":"AdminBootstrapResponse","description":"Current staff identity, API environment, and where the dashboard lives."},"AdminConversationRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"platform_code":{"type":"string","title":"Platform Code"},"kind_code":{"type":"string","title":"Kind Code"},"unavailable":{"type":"boolean","title":"Unavailable","default":false}},"additionalProperties":false,"type":"object","required":["id","title","platform_code","kind_code"],"title":"AdminConversationRef"},"AdminCreditAdjustmentList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminCreditAdjustmentRead"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["items","count"],"title":"AdminCreditAdjustmentList"},"AdminCreditAdjustmentRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount","description":"Signed requested credits (positive = add)."},"applied_credits":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Applied Credits","description":"Signed credits actually moved on the COGS ledger."},"applied_retail_micro_usd":{"type":"integer","title":"Applied Retail Micro Usd","description":"Signed micro-USD moved on the legacy retail ledger."},"balance_after":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Balance After"},"retail_balance_after_micro_usd":{"type":"integer","title":"Retail Balance After Micro Usd"},"reason":{"type":"string","title":"Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Email","description":"Admin's email when the principal was a user."},"created_by_principal_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Principal Type"},"replayed":{"type":"boolean","title":"Replayed","description":"True when this response replays a previous idempotency claim.","default":false}},"type":"object","required":["id","amount","applied_credits","applied_retail_micro_usd","balance_after","retail_balance_after_micro_usd","reason","created_at"],"title":"AdminCreditAdjustmentRead","description":"One applied (or replayed) adjustment, with both ledgers' outcome."},"AdminInstallSkillRequest":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"activate":{"type":"boolean","title":"Activate","default":false}},"type":"object","required":["tenant_id"],"title":"AdminInstallSkillRequest","description":"Install a skill into a named tenant for live testing (staff-only).\n\nPins to the skill's ACTIVE version, born paused with a seeded config. ``activate`` immediately flips a\nPORTABLE (no-delivery) skill live; a ``sans`` skill cannot be pre-activated here (it needs its settings\ncompleted + activation review in the target tenant first)."},"AdminMeetingLimitsUpdate":{"properties":{"max_concurrent_bots":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Max Concurrent Bots"},"monthly_minutes_budget":{"anyOf":[{"type":"integer","maximum":20000.0,"minimum":0.0},{"type":"null"}],"title":"Monthly Minutes Budget"},"expected_revision":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expected Revision","description":"The revision this edit was based on, from GET (an offset-aware timestamp). Send null if that reported no row. A 409 means someone else changed it first: reload and re-apply."}},"additionalProperties":false,"type":"object","required":["expected_revision"],"title":"AdminMeetingLimitsUpdate","description":"PUT body: an omitted field is left alone, an explicit ``null`` CLEARS the override.\n\nThe three states are the point. ``max_concurrent_bots`` is nullable in the database precisely so a\ntenant can inherit ``API_RECALL_MAX_CONCURRENT_BOTS_DEFAULT`` rather than be pinned to whatever it\nhappened to equal on the day someone edited it — sending ``null`` puts a tenant back on the default\nand keeps it moving with future default changes. ``model_fields_set`` on the handler is what\nseparates \"omitted\" from \"explicitly null\"; a plain ``None`` default cannot."},"AdminMeetingLimitsView":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"max_concurrent_bots":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Concurrent Bots","description":"This tenant's override, or null when it inherits."},"monthly_minutes_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Minutes Budget","description":"This tenant's override, or null when it inherits."},"default_max_concurrent_bots":{"type":"integer","title":"Default Max Concurrent Bots","description":"The fleet default an override-less tenant inherits."},"default_monthly_minutes_budget":{"type":"integer","title":"Default Monthly Minutes Budget","description":"The fleet default an override-less tenant inherits."},"effective_max_concurrent_bots":{"type":"integer","title":"Effective Max Concurrent Bots","description":"What the pre-join gate actually enforces today."},"effective_monthly_minutes_budget":{"type":"integer","title":"Effective Monthly Minutes Budget","description":"What the pre-join gate actually enforces today."},"revision":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revision","description":"Opaque token for this row's state; send it back as expected_revision to edit safely."}},"type":"object","required":["tenant_id","max_concurrent_bots","monthly_minutes_budget","default_max_concurrent_bots","default_monthly_minutes_budget","effective_max_concurrent_bots","effective_monthly_minutes_budget"],"title":"AdminMeetingLimitsView","description":"The three-layer readout: the override, the inherited default, and what the gate enforces.\n\nAn operator about to change a cap needs to know whether the number on screen is this tenant's own\nor the fleet default it is currently inheriting, because clearing an override and setting it to the\nsame value look identical afterwards but behave differently the next time the default moves."},"AdminMessageItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"role":{"type":"string","title":"Role"},"author":{"anyOf":[{"$ref":"#/components/schemas/AdminActorRef"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"token_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Token Count"},"content_length":{"type":"integer","title":"Content Length"},"has_platform_coordinates":{"type":"boolean","title":"Has Platform Coordinates"}},"additionalProperties":false,"type":"object","required":["id","role","created_at","content_length","has_platform_coordinates"],"title":"AdminMessageItem"},"AdminMessageList":{"properties":{"audit_id":{"type":"string","format":"uuid","title":"Audit Id"},"items":{"items":{"$ref":"#/components/schemas/AdminMessageItem"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"additionalProperties":false,"type":"object","required":["audit_id","items"],"title":"AdminMessageList"},"AdminPermissionRequestItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tool_name":{"type":"string","title":"Tool Name"},"risk_tier_code":{"type":"string","title":"Risk Tier Code"},"status_code":{"type":"string","title":"Status Code"},"decision":{"type":"string","title":"Decision"},"decider":{"anyOf":[{"$ref":"#/components/schemas/AdminActorRef"},{"type":"null"}]},"reason":{"type":"null","title":"Reason","description":"The current permission-request model stores no decision reason."},"input_present":{"type":"boolean","title":"Input Present"},"input_byte_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Byte Size"},"pending_snapshot_present":{"type":"boolean","title":"Pending Snapshot Present"},"pending_snapshot_byte_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pending Snapshot Byte Size"},"execution_claimed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Execution Claimed At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","tool_name","risk_tier_code","status_code","decision","input_present","pending_snapshot_present","created_at"],"title":"AdminPermissionRequestItem"},"AdminPermissionRequestList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminPermissionRequestItem"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"additionalProperties":false,"type":"object","required":["items"],"title":"AdminPermissionRequestList"},"AdminPerson":{"properties":{"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"is_internal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Internal"},"has_dashboard_login":{"type":"boolean","title":"Has Dashboard Login","default":false},"teams":{"items":{"$ref":"#/components/schemas/AdminPersonTeam"},"type":"array","title":"Teams"}},"type":"object","required":["email","teams"],"title":"AdminPerson","description":"One person (keyed by email) across every team they belong to."},"AdminPersonAuditEntry":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"action":{"type":"string","title":"Action"},"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","action","created_at"],"title":"AdminPersonAuditEntry"},"AdminPersonDetail":{"properties":{"person":{"$ref":"#/components/schemas/AdminPerson"},"recent_runs":{"items":{"$ref":"#/components/schemas/AdminPersonRun"},"type":"array","title":"Recent Runs"},"recent_audit":{"items":{"$ref":"#/components/schemas/AdminPersonAuditEntry"},"type":"array","title":"Recent Audit"}},"type":"object","required":["person","recent_runs","recent_audit"],"title":"AdminPersonDetail","description":"Everything the cockpit shows about one person."},"AdminPersonList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminPerson"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["items","count"],"title":"AdminPersonList"},"AdminPersonRun":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"tenant_display_name":{"type":"string","title":"Tenant Display Name"},"status_code":{"type":"string","title":"Status Code"},"trigger_code":{"type":"string","title":"Trigger Code"},"credits":{"type":"integer","title":"Credits","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","tenant_display_name","status_code","trigger_code","created_at"],"title":"AdminPersonRun","description":"A run in the person detail, with the team it happened in."},"AdminPersonTeam":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"tenant_display_name":{"type":"string","title":"Tenant Display Name"},"role_code":{"type":"string","title":"Role Code"},"status_code":{"type":"string","title":"Status Code"},"joined_at":{"type":"string","format":"date-time","title":"Joined At"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"}},"type":"object","required":["membership_id","tenant_id","tenant_display_name","role_code","status_code","joined_at"],"title":"AdminPersonTeam","description":"One team a person belongs to, with their role there."},"AdminProactiveProgramListResponse":{"properties":{"programs":{"items":{"$ref":"#/components/schemas/AdminProactiveProgramResponse"},"type":"array","title":"Programs"}},"type":"object","required":["programs"],"title":"AdminProactiveProgramListResponse","description":"Every live program row for one tenant."},"AdminProactiveProgramResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"program_type_code":{"type":"string","title":"Program Type Code"},"mode_code":{"type":"string","title":"Mode Code"},"enabled":{"type":"boolean","title":"Enabled"},"schedule":{"type":"string","title":"Schedule"},"next_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Run At"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At"},"paused_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paused Reason"},"paused_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paused At"},"scope":{"additionalProperties":true,"type":"object","title":"Scope"}},"type":"object","required":["id","tenant_id","program_type_code","mode_code","enabled","schedule","next_run_at","last_run_at","paused_reason","paused_at","scope"],"title":"AdminProactiveProgramResponse","description":"One tenant program row as staff see it, including why it is dormant."},"AdminRecentRun":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status_code":{"type":"string","title":"Status Code"},"trigger_code":{"type":"string","title":"Trigger Code"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"credits":{"type":"integer","title":"Credits","description":"Whole credits this run consumed.","default":0},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"actor_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Display Name"}},"type":"object","required":["id","status_code","trigger_code","created_at"],"title":"AdminRecentRun","description":"One recent run, attributed to the human who triggered it."},"AdminRequestDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"team":{"$ref":"#/components/schemas/AdminTeamRef"},"reporter":{"anyOf":[{"$ref":"#/components/schemas/AdminActorRef"},{"type":"null"}]},"source":{"type":"string","title":"Source"},"intake_kind":{"type":"string","title":"Intake Kind"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Area"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"summary":{"type":"string","title":"Summary"},"platform_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Code"},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"},"thread_ts":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Ts"},"message_ts":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Ts"},"permalink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permalink"},"processing":{"$ref":"#/components/schemas/AdminRequestProcessing"},"triage":{"$ref":"#/components/schemas/AdminRequestTriage"},"linear":{"$ref":"#/components/schemas/AdminRequestLinear"},"duplicates":{"$ref":"#/components/schemas/AdminRequestDuplicates"},"related_run":{"anyOf":[{"$ref":"#/components/schemas/AdminRunRef"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","team","source","intake_kind","summary","processing","triage","linear","duplicates","created_at","updated_at"],"title":"AdminRequestDetail"},"AdminRequestDuplicates":{"properties":{"parent":{"anyOf":[{"$ref":"#/components/schemas/AdminRequestRef"},{"type":"null"}]},"children":{"items":{"$ref":"#/components/schemas/AdminRequestRef"},"type":"array","title":"Children"}},"additionalProperties":false,"type":"object","required":["children"],"title":"AdminRequestDuplicates"},"AdminRequestLinear":{"properties":{"issue_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Id"},"issue_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Url"},"issue_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Identifier"},"state_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Type"},"state_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"State Checked At"}},"additionalProperties":false,"type":"object","title":"AdminRequestLinear"},"AdminRequestListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"team":{"$ref":"#/components/schemas/AdminTeamRef"},"reporter":{"anyOf":[{"$ref":"#/components/schemas/AdminActorRef"},{"type":"null"}]},"source":{"type":"string","title":"Source"},"intake_kind":{"type":"string","title":"Intake Kind"},"status_code":{"type":"string","title":"Status Code"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Area"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"summary":{"type":"string","title":"Summary"},"attempt_count":{"type":"integer","title":"Attempt Count"},"claimed":{"type":"boolean","title":"Claimed"},"shipped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Shipped At"},"linear_issue_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linear Issue Identifier"},"linear_state_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linear State Type"},"duplicate_parent":{"anyOf":[{"$ref":"#/components/schemas/AdminRequestRef"},{"type":"null"}]},"related_run":{"anyOf":[{"$ref":"#/components/schemas/AdminRunRef"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","team","source","intake_kind","status_code","summary","attempt_count","claimed","created_at","updated_at"],"title":"AdminRequestListItem"},"AdminRequestListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminRequestListItem"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"additionalProperties":false,"type":"object","required":["items"],"title":"AdminRequestListResponse"},"AdminRequestProcessing":{"properties":{"status_code":{"type":"string","title":"Status Code"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"attempt_count":{"type":"integer","title":"Attempt Count"},"claim_token_present":{"type":"boolean","title":"Claim Token Present"},"claimed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Claimed At"},"claim_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Claim Expires At"},"idempotency_key_present":{"type":"boolean","title":"Idempotency Key Present"},"shipped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Shipped At"},"fixed_notified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fixed Notified At"},"last_occurrence_comment_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Occurrence Comment At"}},"additionalProperties":false,"type":"object","required":["status_code","attempt_count","claim_token_present","idempotency_key_present"],"title":"AdminRequestProcessing"},"AdminRequestRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"summary":{"type":"string","title":"Summary"},"status_code":{"type":"string","title":"Status Code"},"source":{"type":"string","title":"Source"},"unavailable":{"type":"boolean","title":"Unavailable","default":false}},"additionalProperties":false,"type":"object","required":["id","summary","status_code","source"],"title":"AdminRequestRef"},"AdminRequestStats":{"properties":{"total":{"type":"integer","title":"Total"},"by_status_code":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status Code"},"by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Severity"},"shipped":{"type":"integer","title":"Shipped"},"drafted":{"type":"integer","title":"Drafted"},"errored":{"type":"integer","title":"Errored"},"stuck_claims":{"type":"integer","title":"Stuck Claims"}},"additionalProperties":false,"type":"object","required":["total","by_status_code","by_severity","shipped","drafted","errored","stuck_claims"],"title":"AdminRequestStats"},"AdminRequestTriage":{"properties":{"is_bug":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Bug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"public_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Description"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Area"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"drafted_cause":{"anyOf":[{"$ref":"#/components/schemas/DraftedCause"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"AdminRequestTriage"},"AdminRunArtifactItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"byte_size":{"type":"integer","title":"Byte Size"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","key","byte_size","created_at"],"title":"AdminRunArtifactItem"},"AdminRunArtifactList":{"properties":{"state":{"$ref":"#/components/schemas/ArtifactState"},"items":{"items":{"$ref":"#/components/schemas/AdminRunArtifactItem"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"additionalProperties":false,"type":"object","required":["state","items"],"title":"AdminRunArtifactList"},"AdminRunCompleteness":{"properties":{"tool_calls":{"$ref":"#/components/schemas/StreamState"},"messages":{"$ref":"#/components/schemas/StreamState"},"permission_requests":{"$ref":"#/components/schemas/StreamState"},"artifacts":{"$ref":"#/components/schemas/StreamState"},"inbound_events":{"$ref":"#/components/schemas/StreamState"}},"additionalProperties":false,"type":"object","required":["tool_calls","messages","permission_requests","artifacts","inbound_events"],"title":"AdminRunCompleteness"},"AdminRunDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"team":{"$ref":"#/components/schemas/AdminTeamRef"},"actor":{"anyOf":[{"$ref":"#/components/schemas/AdminActorRef"},{"type":"null"}]},"conversation":{"anyOf":[{"$ref":"#/components/schemas/AdminConversationRef"},{"type":"null"}]},"parent":{"anyOf":[{"$ref":"#/components/schemas/AdminRunRef"},{"type":"null"}]},"status_code":{"type":"string","title":"Status Code"},"trigger_code":{"type":"string","title":"Trigger Code"},"source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Kind"},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"},"model":{"type":"string","title":"Model"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"cache_read_tokens":{"type":"integer","title":"Cache Read Tokens"},"cache_write_tokens":{"type":"integer","title":"Cache Write Tokens"},"cost_micro_usd":{"type":"integer","title":"Cost Micro Usd"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"truncated":{"type":"boolean","title":"Truncated"},"no_result":{"type":"boolean","title":"No Result"},"silent":{"type":"boolean","title":"Silent"},"pending_effect_at_close":{"type":"boolean","title":"Pending Effect At Close"},"deferred_effect_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deferred Effect Status"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"child_count":{"type":"integer","title":"Child Count"},"health":{"$ref":"#/components/schemas/AdminRunHealth"}},"additionalProperties":false,"type":"object","required":["id","team","status_code","trigger_code","model","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","cost_micro_usd","truncated","no_result","silent","pending_effect_at_close","deferred_effect_status","created_at","child_count","health"],"title":"AdminRunDetail"},"AdminRunHealth":{"properties":{"liveness":{"type":"string","enum":["available","unavailable"],"title":"Liveness"},"attempt":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Attempt"},"heartbeat_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Heartbeat At"}},"additionalProperties":false,"type":"object","required":["liveness"],"title":"AdminRunHealth"},"AdminRunListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"team":{"$ref":"#/components/schemas/AdminTeamRef"},"actor":{"anyOf":[{"$ref":"#/components/schemas/AdminActorRef"},{"type":"null"}]},"conversation":{"anyOf":[{"$ref":"#/components/schemas/AdminConversationRef"},{"type":"null"}]},"parent":{"anyOf":[{"$ref":"#/components/schemas/AdminRunRef"},{"type":"null"}]},"status_code":{"type":"string","title":"Status Code"},"trigger_code":{"type":"string","title":"Trigger Code"},"source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Kind"},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"},"model":{"type":"string","title":"Model"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"cache_read_tokens":{"type":"integer","title":"Cache Read Tokens"},"cache_write_tokens":{"type":"integer","title":"Cache Write Tokens"},"cost_micro_usd":{"type":"integer","title":"Cost Micro Usd"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"truncated":{"type":"boolean","title":"Truncated"},"no_result":{"type":"boolean","title":"No Result"},"silent":{"type":"boolean","title":"Silent"},"pending_effect_at_close":{"type":"boolean","title":"Pending Effect At Close"},"deferred_effect_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deferred Effect Status"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","team","status_code","trigger_code","model","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","cost_micro_usd","truncated","no_result","silent","pending_effect_at_close","deferred_effect_status","created_at"],"title":"AdminRunListItem"},"AdminRunListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminRunListItem"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"additionalProperties":false,"type":"object","required":["items"],"title":"AdminRunListResponse"},"AdminRunRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status_code":{"type":"string","title":"Status Code"},"trigger_code":{"type":"string","title":"Trigger Code"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"unavailable":{"type":"boolean","title":"Unavailable","default":false}},"additionalProperties":false,"type":"object","required":["id","status_code","trigger_code"],"title":"AdminRunRef"},"AdminRunStats":{"properties":{"total":{"type":"integer","title":"Total"},"by_status_code":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status Code"},"cost_micro_usd":{"type":"integer","title":"Cost Micro Usd"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"cache_read_tokens":{"type":"integer","title":"Cache Read Tokens"},"cache_write_tokens":{"type":"integer","title":"Cache Write Tokens"},"truncated":{"type":"integer","title":"Truncated"},"no_result":{"type":"integer","title":"No Result"},"silent":{"type":"integer","title":"Silent"}},"additionalProperties":false,"type":"object","required":["total","by_status_code","cost_micro_usd","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","truncated","no_result","silent"],"title":"AdminRunStats"},"AdminRunTimeline":{"properties":{"run":{"$ref":"#/components/schemas/AdminRunRef"},"health":{"$ref":"#/components/schemas/AdminRunHealth"},"completeness":{"$ref":"#/components/schemas/AdminRunCompleteness"},"items":{"items":{"$ref":"#/components/schemas/AdminRunTimelineItem"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"additionalProperties":false,"type":"object","required":["run","health","completeness","items"],"title":"AdminRunTimeline"},"AdminRunTimelineItem":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","enum":["tool_call","message","permission_request","artifact"],"title":"Kind"},"at":{"type":"string","format":"date-time","title":"At"},"clock":{"type":"string","const":"ingested","title":"Clock","default":"ingested"},"sequence":{"type":"integer","title":"Sequence"},"actor":{"anyOf":[{"$ref":"#/components/schemas/AdminActorRef"},{"type":"null"}]},"summary":{"type":"string","title":"Summary"},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code"},"entity_refs":{"items":{"$ref":"#/components/schemas/AdminTimelineEntityRef"},"type":"array","title":"Entity Refs"}},"additionalProperties":false,"type":"object","required":["id","kind","at","sequence","summary","entity_refs"],"title":"AdminRunTimelineItem"},"AdminSearchResults":{"properties":{"teams":{"items":{"$ref":"#/components/schemas/AdminTeamSummary"},"type":"array","title":"Teams"},"people":{"items":{"$ref":"#/components/schemas/AdminPerson"},"type":"array","title":"People"}},"type":"object","required":["teams","people"],"title":"AdminSearchResults","description":"Grouped results for the cockpit's single search box."},"AdminTeamList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminTeamSummary"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"AdminTeamList","description":"One page of team summaries plus the un-paged total."},"AdminTeamMember":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name","description":"Best human name (actor, else dashboard profile)."},"role_code":{"type":"string","title":"Role Code"},"status_code":{"type":"string","title":"Status Code"},"source_code":{"type":"string","title":"Source Code"},"joined_at":{"type":"string","format":"date-time","title":"Joined At"},"first_interacted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Interacted At"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"actor_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Kind"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id","description":"Set when the member has a dashboard login."},"is_internal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Internal"}},"type":"object","required":["membership_id","email","role_code","status_code","source_code","joined_at"],"title":"AdminTeamMember","description":"One roster row: membership + chat identity + dashboard login, resolved to names."},"AdminTeamMemberList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminTeamMember"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["items","count"],"title":"AdminTeamMemberList"},"AdminTeamRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"display_name":{"type":"string","title":"Display Name"},"unavailable":{"type":"boolean","title":"Unavailable","default":false}},"additionalProperties":false,"type":"object","required":["id","display_name"],"title":"AdminTeamRef"},"AdminTeamSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"display_name":{"type":"string","title":"Display Name"},"status_code":{"type":"string","title":"Status Code"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed"},"workspace_names":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Names","description":"Connected chat workspace name(s)."},"plan_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tier"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"seats":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"credit_balance":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Credit Balance","description":"COGS-unit prepaid credits (2 decimals)."},"credit_balance_micro_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credit Balance Micro Usd","description":"Legacy retail prepaid ledger, micro-USD."},"monthly_credit_grant":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Credit Grant"},"member_count":{"type":"integer","title":"Member Count","default":0},"runs_30d":{"type":"integer","title":"Runs 30D","default":0},"credits_30d":{"type":"integer","title":"Credits 30D","description":"Credits consumed in the trailing 30 days.","default":0},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At"}},"type":"object","required":["id","display_name","status_code","created_at","onboarding_completed"],"title":"AdminTeamSummary","description":"One enriched team row: identity, plan, ledgers, and recent activity."},"AdminTeamUsage":{"properties":{"days":{"items":{"$ref":"#/components/schemas/Day"},"type":"array","title":"Days"},"recent_runs":{"items":{"$ref":"#/components/schemas/AdminRecentRun"},"type":"array","title":"Recent Runs"}},"type":"object","required":["days","recent_runs"],"title":"AdminTeamUsage","description":"A team's usage panel: daily credit totals plus its latest runs."},"AdminTimelineEntityRef":{"properties":{"kind":{"type":"string","enum":["team","person","conversation","request","run"],"title":"Kind"},"id":{"type":"string","format":"uuid","title":"Id"},"label":{"type":"string","title":"Label"},"unavailable":{"type":"boolean","title":"Unavailable","default":false}},"additionalProperties":false,"type":"object","required":["kind","id","label"],"title":"AdminTimelineEntityRef"},"AdminToolCallItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tool_name":{"type":"string","title":"Tool Name"},"status_code":{"type":"string","title":"Status Code"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"input_present":{"type":"boolean","title":"Input Present"},"input_byte_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Byte Size"},"output_present":{"type":"boolean","title":"Output Present"},"output_byte_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Byte Size"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","tool_name","status_code","input_present","output_present","created_at"],"title":"AdminToolCallItem"},"AdminToolCallList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminToolCallItem"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"additionalProperties":false,"type":"object","required":["items"],"title":"AdminToolCallList"},"AgreementCell":{"properties":{"band":{"type":"string","title":"Band","description":"The judge's own verdict band: failing, borderline or passing."},"response":{"type":"string","title":"Response","description":"What the human said: a review verdict, or a thumb rating."},"count":{"type":"integer","title":"Count"}},"type":"object","required":["band","response","count"],"title":"AgreementCell","description":"One cell of an agreement matrix: how a band of judge scores was received."},"AnalysisPhase":{"properties":{"code":{"type":"string","enum":["reach","look","identity","voice","palette","typography","logo","save"],"title":"Code"},"state":{"type":"string","enum":["pending","running","done","empty","skipped","unavailable"],"title":"State"}},"type":"object","required":["code","state"],"title":"AnalysisPhase","description":"One step of the read and the state it is in. Copy is chosen client-side from the pair."},"AnalysisProgressResponse":{"properties":{"status":{"type":"string","enum":["idle","running"],"title":"Status"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"phases":{"items":{"$ref":"#/components/schemas/AnalysisPhase"},"type":"array","title":"Phases","default":[]}},"type":"object","required":["status"],"title":"AnalysisProgressResponse","description":"A live look at the analysis in flight for the caller's workspace.\n\n``idle`` with no phases is the honest answer whenever there is nothing to watch: no run,\na run that already settled, a marker too old to trust, or a deployment with no Redis."},"AnalyzeWebsiteRequest":{"properties":{"website_url":{"type":"string","title":"Website Url"}},"additionalProperties":false,"type":"object","required":["website_url"],"title":"AnalyzeWebsiteRequest","description":"Body for ``POST /company-profile/analyze``: the site to read."},"AnalyzeWebsiteResponse":{"properties":{"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"},"what_you_do":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"What You Do"},"differentiation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Differentiation"},"tone_of_voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tone Of Voice"},"voice_warmth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Warmth"},"voice_formality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Formality"},"voice_length":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Length"},"voice_technical_depth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Technical Depth"},"voice_emoji":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Voice Emoji"},"sells":{"items":{"type":"string"},"type":"array","title":"Sells","default":[]},"brand_colors":{"items":{"type":"string"},"type":"array","title":"Brand Colors","default":[]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"analyzed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Analyzed At"},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed","default":false},"color_roles":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"type":"object","title":"Color Roles","default":{}},"chart_palette":{"items":{"type":"string"},"type":"array","title":"Chart Palette","default":[]},"chart_palettes":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Chart Palettes","default":{}},"typography":{"additionalProperties":true,"type":"object","title":"Typography","default":{}},"add_ons":{"additionalProperties":true,"type":"object","title":"Add Ons","default":{}},"theme":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Theme"},"brand_rules":{"additionalProperties":true,"type":"object","title":"Brand Rules","default":{}},"voice_traits":{"items":{"type":"string"},"type":"array","title":"Voice Traits","default":[]},"brand_words":{"additionalProperties":true,"type":"object","title":"Brand Words","default":{}},"field_states":{"additionalProperties":{"$ref":"#/components/schemas/BrandFieldState"},"type":"object","title":"Field States","default":{}},"brand_kit_version":{"type":"integer","title":"Brand Kit Version","default":1},"logos":{"items":{"$ref":"#/components/schemas/BrandLogoSlot"},"type":"array","title":"Logos","default":[]},"readiness":{"$ref":"#/components/schemas/BrandReadiness","default":{"completeness_pct":0,"outputs":[],"nudges":[]}},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"phases":{"items":{"$ref":"#/components/schemas/AnalysisPhase"},"type":"array","title":"Phases","default":[]}},"type":"object","title":"AnalyzeWebsiteResponse","description":"The analyze result: the saved profile plus how every step of the read finished.\n\nThe phases ride the response so the screen never has to guess a terminal state from the\nlast thing it happened to poll: whatever the run recorded is what the checklist shows,\nincluding a step that started and finished between two polls. ``host`` travels with them\nfor the same reason: on a deployment with no Redis, or on a read that settled before the\nfirst poll, it is the only way the screen learns which host was actually reached."},"ApprovalDecisionResponse":{"properties":{"status":{"type":"string","title":"Status"},"permission_request_id":{"type":"string","format":"uuid","title":"Permission Request Id"},"run_id":{"type":"string","format":"uuid","title":"Run Id"},"approved":{"type":"boolean","title":"Approved"}},"type":"object","required":["status","permission_request_id","run_id","approved"],"title":"ApprovalDecisionResponse","description":"Acknowledgement that an approval decision was accepted for async resume."},"ApprovalPolicyBody":{"properties":{"mode":{"$ref":"#/components/schemas/ApprovalPolicyMode"},"tiers":{"items":{"$ref":"#/components/schemas/RiskTier"},"type":"array","uniqueItems":true,"title":"Tiers"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"}},"additionalProperties":false,"type":"object","required":["mode"],"title":"ApprovalPolicyBody","description":"Request body for setting an actor's approval policy (``PUT``).\n\nInherits the shared ``mode``/``tiers`` fields + validation (a malformed body is a\n4xx here, unlike the fail-closed read path) and adds the routing-only ``actor_id``.\n``mode`` is required (no default) so a caller states intent explicitly. ``actor_id``\nis optional and admin-only: when omitted the route targets the CALLER's own actor,\nso the dashboard never needs to know its own actor id."},"ApprovalPolicyMode":{"type":"string","enum":["default","always","never","tiers"],"title":"ApprovalPolicyMode","description":"How a user's per-actor approval preference shapes the tool-approval gate.\n\nPure runtime concept, NOT a code-table. It never appears as a ``*_code``\ncolumn; it is the ``mode`` field inside the JSON value of the\n``approval_policy`` :class:`~models.preference.ActorPreference`, so it is\nvalidated by Pydantic (``models.approval_policy``) rather than seeded into a\nreference table. The gate applies it OVER the computed default, and a tenant\nsafety FLOOR always wins: ``NEVER``/``TIERS`` can never relax a\ndestructive/CRITICAL action below approval (``tools.approval_policy``)."},"ApprovalPolicyResponse":{"properties":{"actor_id":{"type":"string","format":"uuid","title":"Actor Id"},"mode":{"$ref":"#/components/schemas/ApprovalPolicyMode"},"tiers":{"items":{"$ref":"#/components/schemas/RiskTier"},"type":"array","title":"Tiers"},"floor_tiers":{"items":{"$ref":"#/components/schemas/RiskTier"},"type":"array","title":"Floor Tiers"}},"type":"object","required":["actor_id","mode","tiers","floor_tiers"],"title":"ApprovalPolicyResponse","description":"An actor's effective approval policy + the tenant floor the UI must honor."},"ApprovalsFeedRow":{"properties":{"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name"},"risk_tier_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Tier Code"},"input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input","description":"Tool arguments, sanitized. Present only on kind=tool rows, and only for callers holding runs:execute (the authority that can decide the request); null for read-only callers, which receive input_summary instead."},"input_summary":{"anyOf":[{"items":{"$ref":"#/components/schemas/ArgSummaryEntry"},"type":"array"},{"type":"null"}],"title":"Input Summary","description":"Value-free per-argument summary, populated in place of input for callers without runs:execute."},"delivery_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Ref"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"snapshot_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Title"},"snapshot_tool_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Tool Label"},"snapshot_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Body"},"snapshot_link_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Link Kind"},"snapshot_link_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Link Value"},"installation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Installation Id"},"skill_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Skill Id"},"skill_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Slug"},"skill_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Title"},"skill_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Summary"},"requester_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requester Name"},"requester_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Requester Actor Id"},"requested_by_viewer":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Requested By Viewer","description":"True when the caller is the person whose run raised this request, false when somebody else did or nobody did (a proactive run). Resolved server-side because the browser holds no actor id to compare against. Null on a skill-share row, which the server does not yet resolve it for."},"connection_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Label","description":"One sentence naming the connection this action would run on, already filtered for what the caller may know: a personal connection they do not own is described without naming its owner. Null when the request binds no connection."}},"type":"object","title":"ApprovalsFeedRow","description":"One feed row of either kind. Every field is optional so ``fields=`` projection validates.\n\n``kind`` is the discriminator: a reader keys on it rather than on which columns happen to be null,\nsince a tool row can legitimately carry no stored arguments and a share row carries no run.\n\n``input`` is shaped per caller by the router and never returned raw: sanitized values for callers\nwho can decide (``runs:execute``), a value-free ``input_summary`` for read-only ones. Only a ``tool``\nrow carries stored arguments; a share request has none, so it is handed neither."},"ApproveResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"semver":{"type":"string","title":"Semver"},"status_code":{"type":"string","title":"Status Code"}},"type":"object","required":["id","skill_id","semver","status_code"],"title":"ApproveResponse","description":"The result of approving a proposed version → active."},"ArgSummaryEntry":{"properties":{"key":{"type":"string","title":"Key","description":"Argument name (schema-level, never customer data)."},"type":{"type":"string","title":"Type","description":"JSON type of the hidden value: string, number, boolean, object, array, or null."},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size","description":"Size of the hidden value: characters for a string, item count for an array, key count for an object. Null for other scalars, and always null for a credential-named argument."}},"type":"object","required":["key","type"],"title":"ArgSummaryEntry","description":"Value-free summary of ONE stored tool argument, for callers without the approval scope.\n\nRead surfaces that carry tool arguments (the approval queue, the run's tool-call timeline) return\nargument VALUES only to callers holding ``runs:execute`` (the authority that may decide the request);\na plain ``runs:read`` caller gets one of these per top-level argument instead. Built by\n``agent.arg_visibility.summarize_args``. Deliberately carries NO value hash: a row-salted digest was\nreviewed and rejected as a practical value-confirmation oracle (the salt travels in the same response)."},"ArtifactState":{"type":"string","enum":["complete","partial","expired_or_swept","unavailable","not_applicable"]},"AssetAuthor":{"properties":{"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id","description":"The workspace member credited with this file. The key the author filter takes; null when no person is recorded (an API-key upload, or a run with no requester)."},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name","description":"That member's name. Null when nothing resolves — render 'Patricia' or 'Someone'."},"made_by_patricia":{"type":"boolean","title":"Made By Patricia","description":"Whether a Patricia run created this file. True with a display_name reads 'Patricia for <name>'; true without one reads 'Patricia'; false reads the name alone.","default":false}},"additionalProperties":false,"type":"object","title":"AssetAuthor","description":"Who made a file, as a person reads it — the designs' \"Made by\" column and detail row.\n\nTwo fields answer two different questions and neither substitutes for the other.\n``display_name`` is WHOSE work this is; ``made_by_patricia`` is whether Patricia's hands did it.\nA file Patricia generated because Ricardo asked her to carries both — the dashboard renders\n\"Patricia for Ricardo\" — and that is the ordinary case, not an edge one.\n\n``display_name`` is ``null`` only when nothing resolves: an API-key upload (not a person), a\nheadless cron run with no requester, or a workspace member whose chat profile was never\nenriched. It is NEVER a raw platform id — it comes from\n:meth:`~repositories.actor.ActorRepository.resolve_actor_displays`, the one resolver every\nhuman-facing render site shares, which humanizes a placeholder id back into ``null`` here."},"AssetCanvaDesign":{"properties":{"edit_url":{"type":"string","title":"Edit Url","description":"The HTTPS Canva editor URL for the new design."},"design_id":{"type":"string","title":"Design Id","description":"Canva's identifier for the new design."}},"additionalProperties":false,"type":"object","required":["edit_url","design_id"],"title":"AssetCanvaDesign","description":"The Canva design created from one Patricia media file."},"AssetCreate":{"properties":{"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content","description":"UTF-8 text for a text kind (markdown, html). Mutually exclusive with content_base64."},"content_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Base64","description":"Base64-encoded bytes for any kind. Mutually exclusive with content."},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"The file's name. Must be free among the workspace's live assets."},"kind":{"type":"string","enum":["audio","docx","html","image","markdown","pdf","slides","spreadsheet","video"],"title":"Kind","description":"What sort of file this is."},"content_type":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Content Type","description":"Media type to store. Omit for the kind's default."},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id","description":"File the new asset into this folder as it is created. Omit (or send null) to leave it unfiled. Answers 404 when the folder does not exist or belongs to another workspace, and stores nothing when it does."}},"additionalProperties":false,"type":"object","required":["name","kind"],"title":"AssetCreate","description":"Create a new asset at version 1.\n\nThere is deliberately NO ``visibility`` field, and the inherited ``extra=\"forbid\"`` makes\nsending one a 422 rather than a value that is quietly dropped. A new file takes the column's own\ndefault (``team``); widening it to ``external`` is a separate, separately-authorized request\n(``PUT /assets/{id}/visibility``, the file's author or a workspace admin). So no create — an\nupload from the dashboard included — can put a file into the library at a level wider than the\none every other file in it already has."},"AssetDelete":{"properties":{"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason","description":"Why this file is being removed. Stored on the tombstone."}},"additionalProperties":false,"type":"object","required":["reason"],"title":"AssetDelete","description":"Move an asset to the trash. The reason is required and kept as the audit record."},"AssetDetail":{"properties":{"asset":{"$ref":"#/components/schemas/AssetSummary"},"versions":{"items":{"$ref":"#/components/schemas/AssetVersionSummary"},"type":"array","title":"Versions","description":"Stored versions, newest first, capped at the most recent 200."},"source":{"anyOf":[{"$ref":"#/components/schemas/AssetSource"},{"type":"null"}],"description":"Where this file came from. Null only for a payload built before this field existed."},"can_change_visibility":{"type":"boolean","title":"Can Change Visibility","description":"Whether YOU may change this file's visibility — you added it, or you are a workspace admin. Computed server-side by the same rule the PUT /assets/{id}/visibility route enforces, so a picker enabled by this flag is never refused by that request.","default":false},"can_share":{"type":"boolean","title":"Can Share","description":"Whether YOU may create a public share link for this file. Requires assets:edit. False for a file set to 'Only me' because its link could never open. For a file already set to 'Anyone with the link', that scope is sufficient. Otherwise, you must also have authority to change its visibility because sharing raises it to 'Anyone with the link'. Computed server-side from the same rules POST /assets/{id}/share-links enforces, so a button enabled by this flag is never refused by that request.","default":false}},"additionalProperties":false,"type":"object","required":["asset","versions"],"title":"AssetDetail","description":"One asset plus its version history: the detail panel's payload."},"AssetFolderAssign":{"properties":{"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id","description":"The folder to file this into, or null to take it out of the one it is in."}},"additionalProperties":false,"type":"object","required":["folder_id"],"title":"AssetFolderAssign","description":"Put a file in a folder, or take it out of one.\n\n``folder_id`` is REQUIRED and nullable rather than optional: \"move to no folder\" is a real,\nordinary request, and an optional field cannot tell it apart from a body that forgot to say."},"AssetFolderCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name","description":"What to call it. Must be free inside the SAME parent, ignoring letter case, so '2026/Q3' and '2027/Q3' can both exist. Cannot contain '/'."},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id","description":"The folder to make it inside. Omit or send null to make a top-level folder. Answers 404 when the parent is not this workspace's."}},"additionalProperties":false,"type":"object","required":["name"],"title":"AssetFolderCreate","description":"Make a folder, at the top level or inside another one."},"AssetFolderList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AssetFolderSummary"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Folders in this workspace, including any beyond the returned list."}},"additionalProperties":false,"type":"object","required":["items","total"],"title":"AssetFolderList","description":"Every folder the workspace has, plus the true count.\n\n``total`` is a real ``COUNT(*)``, like :class:`AssetPage`'s: the list is capped, and a capped\nrail that reported its own length as the total would read as the whole set."},"AssetFolderRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name","description":"The folder's label. UNTRUSTED text: render escaped."},"path":{"type":"string","title":"Path","description":"The folder's full path (e.g. 'Clients/Acme'). UNTRUSTED text: render escaped. The detail panel shows this rather than the bare name, because several folders can share a name.","default":""}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"AssetFolderRef","description":"The folder a file is filed under — id to navigate to, name and path to show."},"AssetFolderRemoved":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"unfiled_count":{"type":"integer","title":"Unfiled Count","description":"Live files that went back to being unfiled."},"reparented_count":{"type":"integer","title":"Reparented Count","description":"Folders that were inside it and have moved up one level. None of them is deleted.","default":0}},"additionalProperties":false,"type":"object","required":["id","name","unfiled_count"],"title":"AssetFolderRemoved","description":"What removing a folder did — the copy the dashboard shows afterwards.\n\nBoth counts exist so the confirmation can be specific (\"Its 5 files are back in All files and\nits 2 folders moved up one level\") rather than reassuring in the abstract. Removing a folder\nnever removes a file and never removes a folder inside it."},"AssetFolderRename":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name","description":"The new name. Must be free in this workspace, ignoring letter case."}},"additionalProperties":false,"type":"object","required":["name"],"title":"AssetFolderRename","description":"Give a folder a different name."},"AssetFolderReparent":{"properties":{"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id","description":"The folder to move it into, or null to move it to the top level. A folder cannot be moved into itself or into anything inside it."}},"additionalProperties":false,"type":"object","required":["parent_id"],"title":"AssetFolderReparent","description":"Move a folder into another folder, or out to the top level.\n\n``parent_id`` is REQUIRED and nullable rather than optional, exactly like\n:class:`AssetFolderAssign`: \"move it to the top level\" is a real, ordinary request, and an\noptional field cannot tell it apart from a body that forgot to say."},"AssetFolderShareLinkCreated":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"token":{"type":"string","title":"Token","description":"The capability. Shown once; the server stores only its hash."},"url":{"type":"string","title":"Url","description":"The full share URL, ready to copy. Opens the folder's public page."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"additionalProperties":false,"type":"object","required":["id","token","url","created_at"],"title":"AssetFolderShareLinkCreated","description":"A freshly minted folder link, token included — the ONLY response that ever carries it."},"AssetFolderShareLinkInfo":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"additionalProperties":false,"type":"object","required":["id","created_at"],"title":"AssetFolderShareLinkInfo","description":"One folder link as the management view lists it — no token, ever. Mirrors\n:class:`AssetShareLinkInfo` exactly; see it for why revoked/expired are reported separately."},"AssetFolderShareLinksRevoked":{"properties":{"revoked_count":{"type":"integer","title":"Revoked Count","description":"How many not-yet-revoked links this folder had."}},"additionalProperties":false,"type":"object","required":["revoked_count"],"title":"AssetFolderShareLinksRevoked","description":"What turning a folder's sharing off did — how many links it closed."},"AssetFolderSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name","description":"The folder's label. UNTRUSTED text: render escaped."},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id","description":"The folder this one is inside, or null when it sits at the top level."},"path":{"type":"string","title":"Path","description":"The full path, separated by '/' (e.g. 'Clients/Acme'). UNTRUSTED text: render escaped. Names repeat across folders, so this is what tells two folders called 'Q3' apart.","default":""},"depth":{"type":"integer","title":"Depth","description":"How deep the folder sits. A top-level folder is 1.","default":1},"asset_count":{"type":"integer","title":"Asset Count","description":"Live files filed in THIS folder. Removed files are not counted."},"byte_size":{"type":"integer","title":"Byte Size","description":"What those files weigh, in bytes."},"subtree_asset_count":{"type":"integer","title":"Subtree Asset Count","description":"Live files in this folder AND everything inside it. The rail shows both numbers ('Clients (3, 47 in all)') because one number that could mean either is a number nobody can act on.","default":0},"subtree_byte_size":{"type":"integer","title":"Subtree Byte Size","description":"What the whole branch weighs, in bytes.","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the folder was made (UTC)."},"is_shared":{"type":"boolean","title":"Is Shared","description":"Whether this folder currently holds a live share link. When true, every live file in it is readable outside the workspace through that link, whatever each file's own 'Only me' / 'My team' / 'Anyone with the link' setting says."}},"additionalProperties":false,"type":"object","required":["id","name","asset_count","byte_size","created_at","is_shared"],"title":"AssetFolderSummary","description":"One folder as the rail draws it: where it sits, what it holds, and what its branch holds."},"AssetGenerationInfo":{"properties":{"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt","description":"The prompt as it was actually sent. UNTRUSTED text."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"The generation model's catalog key."},"settings":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}]},"type":"object"},{"type":"null"}],"title":"Settings","description":"The scalar dispatch settings (aspect ratio, resolution, seed, ...)."},"brand_assets":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Brand Assets","description":"The brand-kit logo names placed into the generation, when any were."}},"additionalProperties":false,"type":"object","title":"AssetGenerationInfo","description":"How a run generated one version — the detail panel's prompt / settings / brand-kit rows.\n\nEverything here is what Patricia herself recorded at dispatch time; ``prompt`` is model-written\nUNTRUSTED text (render escaped), and ``settings`` values are short scalars by construction\n(``agent.image_generation._scalar_settings``)."},"AssetKindTotal":{"properties":{"category":{"type":"string","enum":["document","media"],"title":"Category"},"kind":{"type":"string","enum":["audio","docx","html","image","markdown","pdf","slides","spreadsheet","video"],"title":"Kind"},"count":{"type":"integer","title":"Count"},"byte_size":{"type":"integer","title":"Byte Size"}},"additionalProperties":false,"type":"object","required":["category","kind","count","byte_size"],"title":"AssetKindTotal","description":"How many live assets of one kind the workspace holds, and how much they weigh."},"AssetLibraryStats":{"properties":{"kinds":{"items":{"$ref":"#/components/schemas/AssetKindTotal"},"type":"array","title":"Kinds"},"total_count":{"type":"integer","title":"Total Count"},"total_byte_size":{"type":"integer","title":"Total Byte Size"}},"additionalProperties":false,"type":"object","required":["kinds","total_count","total_byte_size"],"title":"AssetLibraryStats","description":"Library-wide totals: the type filter's counts and the library's footprint."},"AssetPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AssetSummary"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Live assets matching the filter, across all pages."},"limit":{"type":"integer","title":"Limit","description":"The page size actually applied."},"offset":{"type":"integer","title":"Offset","description":"The offset actually applied."}},"additionalProperties":false,"type":"object","required":["items","total","limit","offset"],"title":"AssetPage","description":"One page of the library plus the TRUE number of matches for the same filter.\n\n``total`` is a real count, not ``len(items)``: the dashboard uses it for \"Showing N of M\" and to\ndecide whether a next page exists, and a page-length stand-in would make a truncated library\nread as a complete one."},"AssetShareLinkCreate":{"properties":{"expires_in_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Expires In Days","description":"How many days the link works for, from now. Defaults to 30, and a chosen number must be between 1 and 365. Send null for a link with no end date, which then works until somebody turns it off, the file is deleted, or the file is set to 'Only me'. Each of those three REVOKES it, so none of them can be undone by re-sharing the file.","default":30}},"additionalProperties":false,"type":"object","title":"AssetShareLinkCreate","description":"How long a new share link should last. The whole body, and every field optional.\n\n``expires_in_days`` carries THREE distinct requests, and the difference between two of them is\nthe guard rather than a nicety: omitting the field asks for the default life, sending a number\nasks for that many days, and sending ``null`` asks for a link with NO end date. An omitted field\ncan therefore never become a never-expiring link — a caller has to name that state to get it."},"AssetShareLinkCreated":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"token":{"type":"string","title":"Token","description":"The capability. Shown once; the server stores only its hash."},"url":{"type":"string","title":"Url","description":"The full share URL, ready to copy. It opens a page in the console that shows the file with its name, who made it and a download button, so the person receiving it lands somewhere rather than on a raw file. No sign-in is needed to open it."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"When this link stops working. Null when it was created with no end date, which only happens when the request asked for one."},"asset_visibility":{"type":"string","enum":["private","team","external"],"title":"Asset Visibility","description":"The file's visibility AFTER the mint, which is always 'external': publishing a file is what decides its audience, so minting a link for a file below that level raises it. Returned so a caller can show the new level without re-reading the file.","default":"external"}},"additionalProperties":false,"type":"object","required":["id","token","url","created_at"],"title":"AssetShareLinkCreated","description":"A freshly minted share link, token included — the ONLY response that ever carries it."},"AssetShareLinkExtend":{"properties":{"expires_in_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Expires In Days","description":"How many days from now the link should keep working. Send null to take its end date away, so it works until somebody turns it off."}},"additionalProperties":false,"type":"object","required":["expires_in_days"],"title":"AssetShareLinkExtend","description":"A new deadline for a link that still works, counted from now rather than added to the old\none — \"another 30 days\" is a promise a person can check on a calendar.\n\nUnlike the create body this field is REQUIRED, so ``null`` here can only ever be a deliberate\n\"take the end date off\"; there is no omission that could be read as one."},"AssetShareLinkInfo":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At","description":"When this link was shut off, or null while it still works."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"When this link stops working on its own. Null means it never does: either somebody created it with no end date, or it predates expiry entirely. Such a link is still revoked the moment somebody turns it off, deletes the file, or sets the file to 'Only me' — and a revoked link never comes back."}},"additionalProperties":false,"type":"object","required":["id","created_at"],"title":"AssetShareLinkInfo","description":"One share link as the management view lists it — no token, ever.\n\nThe token is shown exactly once, on creation; the server keeps only its hash, so this shape\nCANNOT carry it.\n\nA link works while BOTH dates say so: ``revoked_at`` null (nobody shut it off) and ``expires_at``\nstill ahead (it has not run out). The two are reported separately rather than collapsed into one\n\"active\" boolean because the screen has to say WHICH happened — a revoked link was a decision, an\nexpired one just ran out, and only one of them is worth explaining as an accident."},"AssetSource":{"properties":{"kind":{"type":"string","enum":["generated","uploaded"],"title":"Kind","description":"'generated' — a Patricia run produced this file. 'uploaded' — a person added it directly. Derived from whether a run is recorded, so it can never disagree with run_id."},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id","description":"The run that created it, when one did — opens /runs/{id} in the dashboard."},"conversation":{"anyOf":[{"$ref":"#/components/schemas/AssetSourceConversation"},{"type":"null"}],"description":"The chat conversation the creating run was serving. Null for an upload, for a scheduled or proactive run with no conversation, for a run stored before the library recorded them, AND for a caller who is not part of that conversation — a DM or a private channel is readable only by its participants, while this library is workspace-wide."}},"additionalProperties":false,"type":"object","required":["kind"],"title":"AssetSource","description":"Where a file came from: the detail panel's provenance block.\n\n``kind`` is DERIVED from ``created_by_run_id``, not stored: a run wrote it, or a person\nuploaded it, and there is no third write path into this library today. That is deliberate over\na ``source`` column duplicating a fact the row already carries — two copies of one fact drift,\nand the first thing that drifts is the one nobody reads. The day an inbound chat attachment can\nbe saved to the library, that path IS indistinguishable from a dashboard upload here and needs\na real column; this docstring is where that gets noticed."},"AssetSourceConversation":{"properties":{"platform_code":{"type":"string","title":"Platform Code","description":"Which chat platform, e.g. 'slack'."},"channel_ref":{"type":"string","title":"Channel Ref","description":"The platform's own id for the channel or DM."},"thread_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Ref","description":"The thread this happened in, when it was in a thread rather than the channel."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"The channel or conversation name, when known. UNTRUSTED text: render escaped."}},"additionalProperties":false,"type":"object","required":["platform_code","channel_ref"],"title":"AssetSourceConversation","description":"The chat conversation a file came out of — the detail panel's \"From\" row.\n\nCarries the platform's own coordinates rather than a ready-made URL. Building a Slack permalink\nneeds an API call per file (``chat.getPermalink``), which a detail read must not make, and the\ndashboard already holds the workspace's team id from its Slack connection — so it composes the\ndeep link from these three values with the builder it already uses for \"Open Slack\". A\nserver-side permalink would arrive later as one more optional field here."},"AssetSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name","description":"The workspace's handle for the file. UNTRUSTED text: render escaped."},"category":{"type":"string","enum":["document","media"],"title":"Category","description":"Which library this file lives in: 'document' or 'media'."},"kind":{"type":"string","enum":["audio","docx","html","image","markdown","pdf","slides","spreadsheet","video"],"title":"Kind","description":"What sort of file this is."},"content_type":{"type":"string","title":"Content Type","description":"The current version's media type, e.g. 'application/pdf'."},"byte_size":{"type":"integer","title":"Byte Size","description":"The current version's size in bytes."},"current_version":{"type":"integer","title":"Current Version","description":"The newest version number (versions count from 1)."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When the file last changed (UTC)."},"created_by_run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Run Id","description":"The Patricia run that created this file. Null when no run is recorded for it: a person uploaded it, or it was stored before Patricia began recording runs. Later versions can come from other runs, so read each version's own created_by_run_id for those."},"favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorite","description":"Whether the workspace marked this file a favourite (the Liked filter shows these). The server always sends it; the default exists for the same temporary fixture-compatibility reason the module docstring records for created_by_run_id."},"thumbnail_status":{"type":"string","enum":["ready","pending","unavailable"],"title":"Thumbnail Status","description":"Whether this file has a grid preview. 'ready' means GET /assets/{id}/thumbnail serves it; 'pending' means one is being prepared, ask again shortly; 'unavailable' means the type icon is the answer (no preview exists for this file type, or this file could not be rendered).","default":"unavailable"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the file was first added to the workspace (UTC)."},"author":{"$ref":"#/components/schemas/AssetAuthor","description":"Who made this file: the 'Made by' column."},"folder":{"anyOf":[{"$ref":"#/components/schemas/AssetFolderRef"},{"type":"null"}],"description":"The folder this file is filed under, or null when it is not filed into one."},"visibility":{"type":"string","enum":["private","team","external"],"title":"Visibility","description":"Who can read this file. 'private' — only the person who added it, plus workspace admins. 'team' — everyone in the workspace (the default). 'external' — everyone in the workspace, and it may also be shared outside through a link. A file you can see at all is one you may read; the level tells you who ELSE can.","default":"team"},"shared_via_folder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shared Via Folder Name","description":"The name of the folder making this file reachable beyond its own visibility level, when a live folder share link is why — for a private file, why anybody else in the workspace can read it; for any file, why anybody outside the workspace holding that folder's link can too. Null when no folder link is why this file is reachable."},"can_edit":{"type":"boolean","title":"Can Edit","description":"Whether YOU may change this file: save a new version, restore an older one, rename it, or move it to another folder. Computed server-side by the same may_mutate rule every mutation route enforces, so a control enabled by this flag is never refused by that request. A shared folder can make a private file READABLE without making it EDITABLE, so this answers the write question on its own — never inferred from visibility or from shared_via_folder_name.","default":false},"can_open_in_canva":{"type":"boolean","title":"Can Open In Canva","description":"Whether YOU may open this media file as a Canva design. Requires edit access to THIS file, a supported image type, a live Canva connection, and the Canva provider in this deployment. Edit access is the same per-file rule this row reports as `can_edit`, because sending a file out to a third-party account is an export. Computed server-side by the same rule POST /assets/{id}/canva-design enforces, so a menu item enabled by this flag is never refused by that request.","default":false}},"additionalProperties":false,"type":"object","required":["id","name","category","kind","content_type","byte_size","current_version","updated_at"],"title":"AssetSummary","description":"One library entry as a listing row (metadata only)."},"AssetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name","description":"The file's new name. Must be free among the workspace's live files."},"favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorite","description":"True to mark the file a favourite, false to unmark it."}},"additionalProperties":false,"type":"object","title":"AssetUpdate","description":"Rename an asset and/or set its favourite mark — the PATCH body.\n\nBoth fields optional so one control can send one change, but an empty body is a 422 rather\nthan a silent no-op the client would mistake for success."},"AssetVersionCreate":{"properties":{"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content","description":"UTF-8 text for a text kind (markdown, html). Mutually exclusive with content_base64."},"content_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Base64","description":"Base64-encoded bytes for any kind. Mutually exclusive with content."},"content_type":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Content Type","description":"Media type for the new version. Omit to keep the asset's current type."}},"additionalProperties":false,"type":"object","title":"AssetVersionCreate","description":"Append the next version of an existing asset. Kind and category never change."},"AssetVersionSummary":{"properties":{"version":{"type":"integer","title":"Version"},"content_type":{"type":"string","title":"Content Type"},"byte_size":{"type":"integer","title":"Byte Size"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When this version was stored (UTC)."},"created_by_run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Run Id","description":"The Patricia run that wrote this version. Null when no run is recorded for it. This is what answers 'which run replaced the file', version by version."},"author":{"$ref":"#/components/schemas/AssetAuthor","description":"Who wrote THIS version. Deliberately per version, not inherited from the file: a report Patricia generated and a person then revised has two different answers, and the version history is the only place that difference is visible."},"generation":{"anyOf":[{"$ref":"#/components/schemas/AssetGenerationInfo"},{"type":"null"}],"description":"How this version was generated (prompt, model, settings, brand assets), when a run generated it. Null for uploads, document renders, and versions stored before generation provenance was recorded."}},"additionalProperties":false,"type":"object","required":["version","content_type","byte_size","created_at"],"title":"AssetVersionSummary","description":"One stored revision of an asset."},"AssetVisibilityUpdate":{"properties":{"level":{"type":"string","enum":["private","team","external"],"title":"Level","description":"Who should be able to read this file from now on."}},"additionalProperties":false,"type":"object","required":["level"],"title":"AssetVisibilityUpdate","description":"Change who may read one file.\n\nA sub-resource body rather than a field on a general update, exactly like\n:class:`AssetFolderAssign`: this is a relationship with its own authority (only the file's author\nor a workspace admin) and its own refusals, and a PUT says the true thing about it — sending the\nsame level twice leaves the same state, so a double-clicked picker is harmless."},"AttributeValueType":{"type":"string","enum":["date","recurring_date","text","number","bool","enum","json"],"title":"AttributeValueType","description":"The typed value shape of a canonical fact (``attribute_definition.value_type_code``).\n\nDenormalized onto ``attribute_source_value``/``attribute_current`` (via a composite FK\nto the definition) so a CHECK can enforce that exactly the matching typed column is\npopulated. A *new* value type is a platform migration, never runtime data."},"AuthEmailAcceptedResponse":{"properties":{"status":{"type":"string","const":"accepted","title":"Status","default":"accepted"}},"additionalProperties":false,"type":"object","title":"AuthEmailAcceptedResponse","description":"The ONE answer both link-request endpoints give, whatever the address.\n\nA body that varied by outcome — or a 404 for an unknown address — would turn either\nendpoint into an account-existence oracle for anyone who can type an email in."},"AuthorResponse":{"properties":{"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"manifest_version_id":{"type":"string","format":"uuid","title":"Manifest Version Id"},"slug":{"type":"string","title":"Slug"},"semver":{"type":"string","title":"Semver"},"title":{"type":"string","title":"Title"},"status_code":{"type":"string","title":"Status Code"},"created":{"type":"boolean","title":"Created"}},"type":"object","required":["skill_id","manifest_version_id","slug","semver","title","status_code","created"],"title":"AuthorResponse","description":"The outcome of authoring a version (manual / ZIP / a chosen GitHub candidate)."},"AuthoredBundleFile":{"properties":{"path":{"type":"string","title":"Path"},"kind":{"type":"string","title":"Kind"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"size_bytes":{"type":"integer","title":"Size Bytes"}},"type":"object","required":["path","kind","content","size_bytes"],"title":"AuthoredBundleFile","description":"One stored bundle file for the playground editor."},"AuthoredBundleFilePayload":{"properties":{"path":{"type":"string","title":"Path"},"content":{"type":"string","title":"Content"}},"type":"object","required":["path","content"],"title":"AuthoredBundleFilePayload","description":"One text bundle file supplied by the playground editor."},"AuthoredInstallResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"manifest_version_id":{"type":"string","format":"uuid","title":"Manifest Version Id"},"status_code":{"type":"string","title":"Status Code"},"config_version":{"type":"integer","title":"Config Version"},"projection_generation":{"type":"integer","title":"Projection Generation"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"first_live_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Live At"},"killed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Killed At"},"kill_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kill Reason"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_portable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Portable"},"archetype_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Archetype Code"},"can_edit_definition":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Edit Definition"},"visibility_code":{"$ref":"#/components/schemas/SkillVisibility"},"is_mine":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Mine"},"can_change_visibility":{"type":"boolean","title":"Can Change Visibility","default":false},"has_settings":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Settings"},"is_catalog_default":{"type":"boolean","title":"Is Catalog Default","default":false},"effectively_enabled":{"type":"boolean","title":"Effectively Enabled","default":false},"update_available":{"type":"boolean","title":"Update Available","default":false},"available_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Available Version Id"},"about":{"anyOf":[{"$ref":"#/components/schemas/SkillAboutSummary"},{"type":"null"}]},"recommended_to_connect":{"items":{"type":"string"},"type":"array","title":"Recommended To Connect"}},"type":"object","required":["id","skill_id","manifest_version_id","status_code","config_version","projection_generation","activated_at","first_live_at","killed_at","kill_reason","visibility_code"],"title":"AuthoredInstallResponse","description":"An authored-skill install result + the recommended integrations the workspace still needs to connect.\n\n``recommended_to_connect`` is the subset of the skill's recommended app slugs the tenant has NOT\nconnected yet, and the dashboard shows a friendly nudge (with the existing connect flow) for each."},"AuthoredSkillDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provenance_code":{"type":"string","title":"Provenance Code"},"archetype_code":{"type":"string","title":"Archetype Code"},"in_use":{"type":"boolean","title":"In Use","default":false},"can_manage":{"type":"boolean","title":"Can Manage","default":false},"authored_by_caller":{"type":"boolean","title":"Authored By Caller","default":false},"versions":{"items":{"$ref":"#/components/schemas/AuthoredVersionSummary"},"type":"array","title":"Versions"},"latest_manifest":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Latest Manifest"},"installation":{"anyOf":[{"$ref":"#/components/schemas/InstallationSummary"},{"type":"null"}]}},"type":"object","required":["id","slug","title","provenance_code","archetype_code"],"title":"AuthoredSkillDetail","description":"One authored skill + its version history + the latest editable manifest (for the editor)."},"AuthoredSkillFilesRequest":{"properties":{"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id"},"manifest_yaml":{"type":"string","title":"Manifest Yaml"},"files":{"items":{"$ref":"#/components/schemas/AuthoredBundleFilePayload"},"type":"array","title":"Files"}},"type":"object","required":["manifest_yaml"],"title":"AuthoredSkillFilesRequest","description":"A complete replacement for an authored skill's editable manifest and text files."},"AuthoredSkillFilesResponse":{"properties":{"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"base_version_id":{"type":"string","format":"uuid","title":"Base Version Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"semver":{"type":"string","title":"Semver"},"manifest_yaml":{"type":"string","title":"Manifest Yaml"},"files":{"items":{"$ref":"#/components/schemas/AuthoredBundleFile"},"type":"array","title":"Files"},"health":{"$ref":"#/components/schemas/SkillHealthReport"},"can_manage":{"type":"boolean","title":"Can Manage"}},"type":"object","required":["skill_id","base_version_id","slug","title","semver","manifest_yaml","health","can_manage"],"title":"AuthoredSkillFilesResponse","description":"The newest editable version, its files, its health, and caller authority."},"AuthoredSkillSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provenance_code":{"type":"string","title":"Provenance Code"},"archetype_code":{"type":"string","title":"Archetype Code"},"in_use":{"type":"boolean","title":"In Use","default":false},"can_manage":{"type":"boolean","title":"Can Manage","default":false},"authored_by_caller":{"type":"boolean","title":"Authored By Caller","default":false}},"type":"object","required":["id","slug","title","provenance_code","archetype_code"],"title":"AuthoredSkillSummary","description":"A tenant's authored skill (list row)."},"AuthoredVersionSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"semver":{"type":"string","title":"Semver"},"status_code":{"type":"string","title":"Status Code"},"source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Kind"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","semver","status_code","created_at"],"title":"AuthoredVersionSummary","description":"One authored version (history row)."},"AutoApproveActorResponse":{"properties":{"actor_id":{"type":"string","format":"uuid","title":"Actor Id"},"tenant_enabled":{"type":"boolean","title":"Tenant Enabled"},"durable_tool_refs":{"items":{"type":"string"},"type":"array","title":"Durable Tool Refs"},"floor_tiers":{"items":{"$ref":"#/components/schemas/RiskTier"},"type":"array","title":"Floor Tiers"},"eligible_tiers":{"items":{"$ref":"#/components/schemas/RiskTier"},"type":"array","title":"Eligible Tiers"}},"type":"object","required":["actor_id","tenant_enabled","durable_tool_refs","floor_tiers","eligible_tiers"],"title":"AutoApproveActorResponse","description":"An actor's auto-approve view for the settings UI: the tenant switch + their durable grants."},"AutoRefillConfigUpdate":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"threshold":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Threshold"},"amount":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount"},"monthly_cap":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Monthly Cap"}},"additionalProperties":false,"type":"object","required":["enabled","threshold","amount","monthly_cap"],"title":"AutoRefillConfigUpdate","description":"PUT body: set (upsert) a tenant's auto-refill config.\n\nA full replace of the tenant's single config (1:1), so the dashboard's \"save\" posts the\nwhole desired state. ``amount`` must equal a ladder rung's credit count (that's the\nprice we charge off-session); ``monthly_cap >= amount >= MIN_AUTO_REFILL_CREDITS`` and\n``threshold >= 0`` mirror the model validators."},"AutoRefillConfigView":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"threshold":{"type":"integer","title":"Threshold"},"amount":{"type":"integer","title":"Amount"},"monthly_cap":{"type":"integer","title":"Monthly Cap"}},"type":"object","required":["enabled","threshold","amount","monthly_cap"],"title":"AutoRefillConfigView","description":"GET view of a tenant's auto-refill config (the dashboard toggle + thresholds).\n\n``enabled`` is derived from ``enabled_at`` (opt-in gate); ``armed_at`` is never exposed\n(engine-internal). All credit values are whole-credit ints for display."},"AutojoinStateView":{"properties":{"active":{"type":"boolean","title":"Active","description":"True when auto-join would actually run for this person's meetings."},"blockers":{"items":{"type":"string"},"type":"array","title":"Blockers","description":"Why auto-join is not active, in fix-it order: 'recording_off', 'team_autojoin_off', 'personal_autojoin_off', 'calendar_not_connected'. Empty when active."}},"type":"object","required":["active"],"title":"AutojoinStateView","description":"The resolved auto-join decision for the caller, with machine-readable blockers."},"BeliefGroup":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["code","label","count"],"title":"BeliefGroup","description":"One non-empty provenance family in the search-filtered corpus."},"BeliefItem":{"properties":{"id":{"type":"string","title":"Id","description":"Opaque id: a memory/lesson UUID, or 'company:<field>' for a company fact."},"kind":{"type":"string","title":"Kind","description":"One of 'memory' | 'lesson' | 'fact'."},"kind_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind Code","description":"Raw memory kind, or null for a company fact."},"kind_label":{"type":"string","title":"Kind Label","description":"Friendly memory-kind label. Never a raw code."},"source":{"type":"string","title":"Source","description":"Provenance code (e.g. lesson_promoted, review, company_profile)."},"source_label":{"type":"string","title":"Source Label","description":"Friendly provenance label, e.g. 'learned lesson'."},"group":{"type":"string","title":"Group","description":"Provenance family code."},"group_label":{"type":"string","title":"Group Label","description":"Friendly provenance-family label. Never a raw code."},"origin_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Title","description":"Human name of the place the memory came from, when known."},"content":{"type":"string","title":"Content"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"When Patricia learned the item, or null when the source has no creation time."},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"The last write to the row. The Curator's 6-hourly decay sweep restamps this value. It is never a learn time and must never be labelled 'learned'."},"editable":{"type":"boolean","title":"Editable","default":false},"forgettable":{"type":"boolean","title":"Forgettable","default":false}},"type":"object","required":["id","kind","kind_code","kind_label","source","source_label","group","group_label","origin_title","content","created_at"],"title":"BeliefItem","description":"One thing Patricia believes for this tenant, ready to render as a card."},"BeliefList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BeliefItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"True count of items matching the request filters."},"groups":{"items":{"$ref":"#/components/schemas/BeliefGroup"},"type":"array","title":"Groups","description":"Non-empty family counts over the search-filtered corpus, ignoring kind and group filters."},"new_since_yesterday":{"type":"integer","title":"New Since Yesterday","description":"Search-filtered items learned during the last 24 hours, excluding company facts."}},"type":"object","required":["items","total","groups","new_since_yesterday"],"title":"BeliefList","description":"A page of beliefs plus stable corpus counts."},"BillToUpdate":{"properties":{"billing_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Billing Name"},"billing_email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Billing Email"},"billing_address_line1":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Billing Address Line1"},"billing_address_line2":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Billing Address Line2"},"billing_city":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Billing City"},"billing_state":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Billing State"},"billing_postal_code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Billing Postal Code"},"billing_country":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Billing Country"},"billing_tax_id":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Billing Tax Id"}},"type":"object","title":"BillToUpdate","description":"PUT body: replace the tenant's billing profile (all fields, blank clears a field).\n\nA full-replace (not a patch): the dashboard form always submits every field, and\nwhitespace-only values normalize to ``None`` so a cleared input truly clears the column."},"BillToView":{"properties":{"billing_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Name"},"billing_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Email"},"billing_address_line1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address Line1"},"billing_address_line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address Line2"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing State"},"billing_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Postal Code"},"billing_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Country"},"billing_tax_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Tax Id"}},"type":"object","title":"BillToView","description":"GET /v1/billing/bill-to: the tenant's billing profile (the invoice \"Bill to\" block).\n\nAll fields optional: an empty profile is valid (invoices fall back to the workspace\ndisplay name). Snapshotted onto each invoice at creation, so edits only affect future\ninvoices."},"BillingPlan":{"type":"string","enum":["team","business"],"title":"BillingPlan","description":"A purchasable seat plan, mapped to a per-seat recurring Stripe price (legacy).\n\nSuperseded by the flat Founding subscription (``CheckoutKind.SUBSCRIPTION`` needs no\nplan); kept so the legacy seat checkout path still validates for historical callers."},"BillingSummary":{"properties":{"tier":{"$ref":"#/components/schemas/BillingTier"},"status":{"type":"string","title":"Status"},"seats":{"type":"integer","title":"Seats"},"credits_remaining":{"type":"integer","title":"Credits Remaining"},"credit_balance":{"type":"number","title":"Credit Balance"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"current_period_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Period End"},"has_active_subscription":{"type":"boolean","title":"Has Active Subscription"},"stripe_publishable_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Publishable Key"},"auto_refill":{"anyOf":[{"$ref":"#/components/schemas/AutoRefillConfigView"},{"type":"null"}]},"has_payment_method":{"type":"boolean","title":"Has Payment Method","default":false},"starter_verification_required":{"type":"boolean","title":"Starter Verification Required","default":false}},"type":"object","required":["tier","status","seats","credits_remaining","credit_balance","cancel_at_period_end","current_period_end","has_active_subscription","stripe_publishable_key"],"title":"BillingSummary","description":"GET /v1/billing: the tenant's current plan, credit balance, and publishable key."},"BillingTier":{"type":"string","enum":["free","founding","team","business","enterprise"],"title":"BillingTier","description":"The subscription tier (price anchor + included-credit allowance).\n\n``FOUNDING`` is the Pricing-v2 self-serve plan ($45/mo → 20,000 credits/period,\nfull rollover); ``TEAM``/``BUSINESS`` are the legacy per-seat tiers kept for\nhistorical rows during the transition. Enterprise stays a manual, off-catalog sale."},"BrainDocScope":{"type":"string","enum":["company","group","team","domain","agent"],"title":"BrainDocScope"},"BrainDocScopeRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"BrainDocScopeRefReferenceFullValidator"},"BrainStats":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"memory_totals":{"$ref":"#/components/schemas/MemoryTotals"},"by_scope_kind":{"items":{"$ref":"#/components/schemas/ScopeKindCount"},"type":"array","title":"By Scope Kind"},"salience_histogram":{"items":{"$ref":"#/components/schemas/SalienceBucket"},"type":"array","title":"Salience Histogram"},"docs_by_scope_status":{"items":{"$ref":"#/components/schemas/DocScopeStatusCount"},"type":"array","title":"Docs By Scope Status"},"per_group":{"items":{"$ref":"#/components/schemas/GroupBreakdown"},"type":"array","title":"Per Group"},"recent_docs":{"items":{"$ref":"#/components/schemas/RecentDoc"},"type":"array","title":"Recent Docs"}},"type":"object","required":["tenant_id","memory_totals","by_scope_kind","salience_histogram","docs_by_scope_status","per_group","recent_docs"],"title":"BrainStats","description":"Full memory-structure snapshot for one tenant."},"BrandFieldReadiness":{"properties":{"path":{"type":"string","title":"Path"},"state":{"type":"string","title":"State"},"label":{"type":"string","title":"Label"}},"type":"object","required":["path","state","label"],"title":"BrandFieldReadiness","description":"A single field an output still wants, with its warm label (never a blocker, just a nudge)."},"BrandFieldState":{"properties":{"state":{"type":"string","title":"State"},"source":{"type":"string","title":"Source"},"label":{"type":"string","title":"Label","default":""},"confirmed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmed By"},"confirmed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmed At"},"legibility":{"anyOf":[{"type":"string","enum":["ok","low_contrast","unknown"]},{"type":"null"}],"title":"Legibility"}},"type":"object","required":["state","source"],"title":"BrandFieldState","description":"One field's provenance for the dashboard: internal state + a warm, non-technical label.\n\n``label`` supplies display copy for non-confirmed states. Confirmed states stay quiet with an\nempty label, and the dashboard never hard-codes this copy.\n\n``legibility`` rides logo entries only: a warn-only contrast verdict (``\"ok\"`` / ``\"low_contrast\"``\n/ ``\"unknown\"``) for whether the logo reads on its slot's background. ``None`` on every non-logo\nfield and on logos written before the safeguard existed (they classify on their next write)."},"BrandLogoSlot":{"properties":{"slot":{"type":"string","title":"Slot"},"mode":{"type":"string","title":"Mode"},"url":{"type":"string","title":"Url"}},"type":"object","required":["slot","mode","url"],"title":"BrandLogoSlot","description":"One resolved logo variant (slot × mode) with its self-hosted capability URL."},"BrandNudge":{"properties":{"path":{"type":"string","title":"Path"},"state":{"type":"string","title":"State"},"label":{"type":"string","title":"Label"},"kind":{"type":"string","enum":["confirm","add","addons_off"],"title":"Kind"},"tone":{"type":"string","enum":["attention","neutral"],"title":"Tone"}},"type":"object","required":["path","state","label","kind","tone"],"title":"BrandNudge","description":"One readiness chip: a confirmation, missing add-on field, or switched-off add-on summary."},"BrandOutputReadiness":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"live":{"type":"boolean","title":"Live"},"ready":{"type":"boolean","title":"Ready"},"confirmed_count":{"type":"integer","title":"Confirmed Count"},"required_count":{"type":"integer","title":"Required Count"},"needs":{"items":{"$ref":"#/components/schemas/BrandFieldReadiness"},"type":"array","title":"Needs","default":[]}},"type":"object","required":["code","label","live","ready","confirmed_count","required_count"],"title":"BrandOutputReadiness","description":"How prepared the kit is for one output. ``ready`` is informational and never gates it."},"BrandReadiness":{"properties":{"completeness_pct":{"type":"integer","title":"Completeness Pct","default":0},"outputs":{"items":{"$ref":"#/components/schemas/BrandOutputReadiness"},"type":"array","title":"Outputs","default":[]},"nudges":{"items":{"$ref":"#/components/schemas/BrandNudge"},"type":"array","title":"Nudges","default":[]}},"type":"object","title":"BrandReadiness","description":"The kit's completeness meter + per-output readiness. An encouragement signal, never a gate."},"BrandThemeUpdate":{"properties":{"default":{"type":"string","enum":["light","dark","ask"],"title":"Default"}},"additionalProperties":false,"type":"object","required":["default"],"title":"BrandThemeUpdate","description":"The preferred starting mode for outputs that support both themes."},"BrandWordsUpdate":{"properties":{"never_use":{"items":{"type":"string"},"type":"array","title":"Never Use"},"claims":{"items":{"type":"string"},"type":"array","title":"Claims"}},"additionalProperties":false,"type":"object","required":["never_use","claims"],"title":"BrandWordsUpdate","description":"Words and claims guidance edited together by the Brand Kit screen."},"BugReportSource":{"type":"string","enum":["slack","teams","web","email","system"],"title":"BugReportSource","description":"Where a report originated. For a chat report it is the platform (``slack`` / ``teams``); the\ncolumn is also the seam for external reporters (a public web form, an inbound email) later, so the\nsweep is source-neutral. Derived from the reporting platform, never hardcoded (a Teams report must\nnot be stamped ``slack``)."},"BugReportStatus":{"type":"string","enum":["new","triaging","shipping","shipped","duplicate","rejected","drafted","cancel_requested","failed"],"title":"BugReportStatus","description":"The triage lifecycle of a single bug report (plain ``String`` column, not a PG enum)."},"BulkTriageRequest":{"properties":{"score_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Score Ids"},"status_code":{"type":"string","title":"Status Code","description":"The triage state to apply to every selected card."}},"additionalProperties":false,"type":"object","required":["score_ids","status_code"],"title":"BulkTriageRequest","description":"Move a selection of cards to one triage state."},"BulkTriageResult":{"properties":{"updated":{"type":"integer","title":"Updated"},"status_code":{"type":"string","title":"Status Code"}},"type":"object","required":["updated","status_code"],"title":"BulkTriageResult","description":"What the sweep changed."},"BundleFilePayload":{"properties":{"path":{"type":"string","maxLength":512,"minLength":1,"title":"Path"},"content":{"type":"string","title":"Content"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},"type":"object","required":["path","content"],"title":"BundleFilePayload","description":"One editor-supplied bundle file (text). ``kind`` is derived from the path when omitted."},"BundleFileResponse":{"properties":{"path":{"type":"string","title":"Path"},"kind":{"type":"string","title":"Kind"},"size_bytes":{"type":"integer","title":"Size Bytes"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"is_binary":{"type":"boolean","title":"Is Binary"}},"type":"object","required":["path","kind","size_bytes","content","is_binary"],"title":"BundleFileResponse","description":"A stored bundle file, decoded for the editor (``content`` is None for a non-text asset)."},"CalendarConnectionView":{"properties":{"personal_connected":{"type":"boolean","title":"Personal Connected","description":"The caller has connected their own Google Calendar."},"team_connected":{"type":"boolean","title":"Team Connected","description":"A team-shared Google Calendar connection exists."}},"type":"object","required":["personal_connected","team_connected"],"title":"CalendarConnectionView","description":"Whether a Google Calendar is connected: the caller's own, and one shared with the team."},"CanvaReturnRequest":{"properties":{"correlation_jwt":{"type":"string","title":"Correlation Jwt"}},"additionalProperties":false,"type":"object","required":["correlation_jwt"],"title":"CanvaReturnRequest","description":"A Canva return-navigation JWT supplied by the console landing page."},"CanvaReturnResponse":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"design_id":{"type":"string","title":"Design Id"}},"additionalProperties":false,"type":"object","required":["asset_id","design_id"],"title":"CanvaReturnResponse","description":"The verified design and the caller-visible Patricia asset it names."},"CaseRow":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status_code":{"type":"string","title":"Status Code"},"reason_code":{"type":"string","title":"Reason Code"},"target_tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Tenant Id"},"candidate_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Candidate User Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"has_approved_manifest":{"type":"boolean","title":"Has Approved Manifest","description":"Whether this case carries a decision that commit would accept: both the stored document and its digest are present."}},"type":"object","required":["id","status_code","reason_code","target_tenant_id","candidate_user_id","created_at","expires_at","has_approved_manifest"],"title":"CaseRow","description":"One case in the operator queue. Identifiers only — never an address."},"CatalogApp":{"properties":{"app_slug":{"type":"string","title":"App Slug"},"name":{"type":"string","title":"Name"},"provider":{"type":"string","title":"Provider"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"},"description":{"type":"string","title":"Description","default":""},"categories":{"items":{"type":"string"},"type":"array","title":"Categories","default":[]},"managed":{"type":"boolean","title":"Managed","default":false},"native":{"type":"boolean","title":"Native","default":false},"managed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Managed By"},"pricing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing"},"connected_account_count":{"type":"integer","title":"Connected Account Count","default":0},"team_only_connect":{"type":"boolean","title":"Team Only Connect","default":false},"connected":{"type":"boolean","title":"Connected","readOnly":true}},"type":"object","required":["app_slug","name","provider","connected"],"title":"CatalogApp","description":"A catalog app with ownership, pricing, and caller-visible connection state."},"CatalogResponse":{"properties":{"featured":{"items":{"$ref":"#/components/schemas/CatalogApp"},"type":"array","title":"Featured"},"managed":{"items":{"$ref":"#/components/schemas/CatalogApp"},"type":"array","title":"Managed","default":[]},"items":{"items":{"$ref":"#/components/schemas/CatalogApp"},"type":"array","title":"Items","default":[]},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total":{"type":"integer","title":"Total","default":0},"categories":{"items":{"type":"string"},"type":"array","title":"Categories","default":[]}},"type":"object","required":["featured"],"title":"CatalogResponse"},"CatalogSkillDetail":{"properties":{"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"is_workspace_skill":{"type":"boolean","title":"Is Workspace Skill"}},"type":"object","required":["slug","title","is_workspace_skill"],"title":"CatalogSkillDetail","description":"One skill's title + rendered guide — the run timeline's \"See skill\" peek drawer.\n\nResolved by slug GLOBAL-first (``GET /skill-catalog/{slug}``): a listed global catalog skill first,\nelse an unlisted (dark) global this workspace has installed and the runtime would actually load,\nelse the workspace's own skill (through the same occupancy fence every installation-id route uses).\nGlobal-first matches the runtime's own tie-break — ``_drop_shadowed_tenant_skills``\n(``services.skill_platform.availability``) drops a tenant entry whose slug a platform-owned entry\nIN THE RUNTIME'S EFFECTIVE SET already holds (installed-and-active, or released-by-default), trusted\nwins the tie — so the drawer never shows tenant-authored content under a slug the platform actually\nshadows with, and describes the definition the run actually loaded, on the version the run actually\nused. A platform-owned row this workspace has NOT installed and that is not offered by default never\nshadows a same-slug tenant skill: the runtime never loaded it either, so refusing here would 404 a\nskill the run actually ran. Every refusal — unknown slug, an installed global the runtime would not\nadmit (wrong archetype/provenance, archived, paused, or killed), another member's personal skill, an\nauthor's own uninstalled skill, or another tenant's — answers with the same 404, so the response\nnever discloses which one it was. Display + guidance text only, never a personal fact (G4)."},"CatalogSkillSummary":{"properties":{"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"taxonomy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taxonomy"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords"},"integrations_required":{"items":{"type":"string"},"type":"array","title":"Integrations Required"},"integrations_recommended":{"items":{"type":"string"},"type":"array","title":"Integrations Recommended"},"installed":{"type":"boolean","title":"Installed","default":false},"default_suppressed":{"type":"boolean","title":"Default Suppressed","default":false},"default_enabled":{"type":"boolean","title":"Default Enabled","default":false},"installation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Installation Id"},"installation_status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installation Status Code"},"install_count_band":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Install Count Band"},"use_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Use Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["slug","title"],"title":"CatalogSkillSummary","description":"One installable catalog skill + this workspace's install overlay: the dashboard catalog card.\n\nThe catalog rows are the released platform offer (``SkillDefinitionRepository.list_global``: trusted\nprovenance, listed, not archived, with an active human-activated version), so every entry here is\ninstallable right now. ``installed``/``installation_id``/``installation_status_code`` overlay THIS\ntenant's own install (staff test-installs never count) so the card can swap its Install button for a\nlink to the installed skill's Hub page. Display labels only, never a personal fact (G4)."},"ChannelOptionSummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"is_private":{"type":"boolean","title":"Is Private","default":false},"is_member":{"type":"boolean","title":"Is Member","default":false}},"type":"object","required":["id","name"],"title":"ChannelOptionSummary","description":"One workspace channel option for the channel picker (a friendly, non-technical config input).\n\n``is_member`` is whether Patricia is already IN the channel; the picker warns when she isn't, since\nshe can only post to channels she has joined."},"ChatPlatform":{"type":"string","enum":["slack","microsoft_teams"],"title":"ChatPlatform","description":"The chat platform a workspace was created for, and whose step the wizard shows.\n\nSpelled in full so it cannot be misread as the ``team`` step, which is about membership."},"CheckoutKind":{"type":"string","enum":["subscription","topup","credits","setup"],"title":"CheckoutKind","description":"What a checkout session buys.\n\n* ``SUBSCRIPTION``: the flat $45/mo Founding plan (no seats, no plan needed).\n* ``TOPUP``: a one-time credit purchase from the 7-tier ladder (``topup_tier``).\n* ``CREDITS``: the legacy one-time credit pack (per-unit ``quantity``); retained\n  so the pre-v2 pack checkout keeps working until the ladder fully replaces it.\n* ``SETUP``: no charge; a ``mode=setup`` session that saves a card for auto-refill\n  (started via the dedicated setup-session endpoint, not ``/billing/checkout``)."},"CheckoutRequest":{"properties":{"kind":{"$ref":"#/components/schemas/CheckoutKind"},"plan":{"anyOf":[{"$ref":"#/components/schemas/BillingPlan"},{"type":"null"}]},"seats":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Seats","default":1},"quantity":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Quantity","default":1},"topup_tier":{"anyOf":[{"$ref":"#/components/schemas/TopupTier"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["kind"],"title":"CheckoutRequest","description":"POST /v1/billing/checkout body: start a Stripe Checkout Session.\n\n* ``subscription``: the flat Founding plan; ``plan``/``seats`` are ignored (a\n  ``plan`` is still accepted for the legacy per-seat path when one is supplied).\n* ``topup``: a one-time ladder purchase; ``topup_tier`` is required.\n* ``credits``: the legacy per-unit pack; ``quantity`` applies."},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"CheckoutResponse","description":"The hosted Checkout Session URL the dashboard redirects the buyer to."},"ClassASourceKind":{"type":"string","enum":["task_cron","event_trigger","scheduled_program","cued_proactive","sweep_proactive","onboarding","manual","spawn"],"title":"ClassASourceKind","description":"What kind of durable thing caused a Class-A run, for ``AgentRun.source_kind``.\n\nThe source is the JOB, PROGRAM, or EVENT, deliberately not the run and not the tool family. A\ndaily cron is ONE source that fires ninety times, and the question Phase 1 has to answer (\"how\nmuch would this source actually be asking a human?\") is unanswerable if each fire looks like an\nunrelated run."},"CommitResult":{"properties":{"case_id":{"type":"string","format":"uuid","title":"Case Id"},"severed_users":{"type":"integer","title":"Severed Users"},"accounts_transferred":{"type":"integer","title":"Accounts Transferred"},"accounts_quarantined":{"type":"integer","title":"Accounts Quarantined"},"accounts_disconnected":{"type":"integer","title":"Accounts Disconnected"},"chips_transferred":{"type":"integer","title":"Chips Transferred"},"chips_quarantined":{"type":"integer","title":"Chips Quarantined"}},"type":"object","required":["case_id","severed_users","accounts_transferred","accounts_quarantined","accounts_disconnected","chips_transferred","chips_quarantined"],"title":"CommitResult","description":"What the commit actually changed."},"CompanyFactUpdate":{"properties":{"key":{"type":"string","title":"Key"},"value":{"type":"string","maxLength":2000,"title":"Value"}},"type":"object","required":["key","value"],"title":"CompanyFactUpdate","description":"Edit one company-profile fact. ``key`` is a whitelisted brand-profile field."},"CompanyProfileResponse":{"properties":{"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"},"what_you_do":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"What You Do"},"differentiation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Differentiation"},"tone_of_voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tone Of Voice"},"voice_warmth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Warmth"},"voice_formality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Formality"},"voice_length":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Length"},"voice_technical_depth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Technical Depth"},"voice_emoji":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Voice Emoji"},"sells":{"items":{"type":"string"},"type":"array","title":"Sells","default":[]},"brand_colors":{"items":{"type":"string"},"type":"array","title":"Brand Colors","default":[]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"analyzed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Analyzed At"},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed","default":false},"color_roles":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"type":"object","title":"Color Roles","default":{}},"chart_palette":{"items":{"type":"string"},"type":"array","title":"Chart Palette","default":[]},"chart_palettes":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Chart Palettes","default":{}},"typography":{"additionalProperties":true,"type":"object","title":"Typography","default":{}},"add_ons":{"additionalProperties":true,"type":"object","title":"Add Ons","default":{}},"theme":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Theme"},"brand_rules":{"additionalProperties":true,"type":"object","title":"Brand Rules","default":{}},"voice_traits":{"items":{"type":"string"},"type":"array","title":"Voice Traits","default":[]},"brand_words":{"additionalProperties":true,"type":"object","title":"Brand Words","default":{}},"field_states":{"additionalProperties":{"$ref":"#/components/schemas/BrandFieldState"},"type":"object","title":"Field States","default":{}},"brand_kit_version":{"type":"integer","title":"Brand Kit Version","default":1},"logos":{"items":{"$ref":"#/components/schemas/BrandLogoSlot"},"type":"array","title":"Logos","default":[]},"readiness":{"$ref":"#/components/schemas/BrandReadiness","default":{"completeness_pct":0,"outputs":[],"nudges":[]}}},"type":"object","title":"CompanyProfileResponse","description":"The company profile as the dashboard sees it (+ derived logo URL & onboarding flag)."},"CompanyProfileUpdate":{"properties":{"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"},"what_you_do":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"What You Do"},"differentiation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Differentiation"},"tone_of_voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tone Of Voice"},"voice_warmth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Warmth"},"voice_formality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Formality"},"voice_length":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Length"},"voice_technical_depth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Technical Depth"},"voice_emoji":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Voice Emoji"},"sells":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sells"},"brand_colors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Brand Colors"},"color_roles":{"anyOf":[{"additionalProperties":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"},"type":"object"},{"type":"null"}],"title":"Color Roles"},"chart_palette":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Chart Palette"},"chart_palettes":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Chart Palettes"},"voice_traits":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Voice Traits"},"brand_words":{"anyOf":[{"$ref":"#/components/schemas/BrandWordsUpdate"},{"type":"null"}]},"add_ons":{"anyOf":[{"additionalProperties":{"type":"boolean"},"type":"object"},{"type":"null"}],"title":"Add Ons"},"theme":{"anyOf":[{"$ref":"#/components/schemas/BrandThemeUpdate"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"CompanyProfileUpdate","description":"PATCH body: partial edits to the profile. Only set fields are written.\n\nStrict: invalid colors / over-long values are rejected (422) for user edits.\nThe analyzer pre-clamps extracted data so it passes these same rules."},"CompleteConnectBody":{"properties":{"app_slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","title":"App Slug"},"connected_account_id":{"type":"string","maxLength":128,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","title":"Connected Account Id"},"app_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"App Name"},"visibility":{"$ref":"#/components/schemas/IntegrationVisibility","default":"team"}},"additionalProperties":true,"type":"object","required":["app_slug","connected_account_id"],"title":"CompleteConnectBody","description":"Connect-callback body. ``extra=\"allow\"`` keeps provider-specific fields without baking them\ninto the contract; the required two are what a poll-flow provider (Composio) must return to bind the\nexact account it minted. A redirect-flow provider records the account SERVER-SIDE after consent\n(webhook / pull-poll) and the dashboard confirms by watching its accounts list, so it never posts here."},"ConfigFieldOptionSchema":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label"}},"type":"object","required":["value","label"],"title":"ConfigFieldOptionSchema","description":"One friendly option for an ``enum`` config field: the stored ``value`` + its human ``label``."},"ConfigFieldSchema":{"properties":{"key":{"type":"string","title":"Key"},"type":{"type":"string","title":"Type"},"label":{"type":"string","title":"Label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"required":{"type":"boolean","title":"Required","default":false},"default":{"title":"Default"},"options":{"items":{"$ref":"#/components/schemas/ConfigFieldOptionSchema"},"type":"array","title":"Options"},"minimum":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minimum"},"maximum":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maximum"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"},"placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Placeholder"}},"type":"object","required":["key","type","label"],"title":"ConfigFieldSchema","description":"One settings-form field, projected from the pinned manifest's ``config_fields`` (no per-skill UI).\n\nThe dashboard renders a friendly non-technical control keyed by ``type`` (a channel picker, a\ntimezone picker, a time picker, a toggle, an enum dropdown, a number, or text), labelled by\n``label`` + ``description`` and placed in the ``group`` section card. ``options`` carry the friendly\nlabels for an enum; ``minimum``/``maximum``/``unit`` shape a number input."},"ConfirmFieldsRequest":{"properties":{"paths":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Paths"}},"additionalProperties":false,"type":"object","required":["paths"],"title":"ConfirmFieldsRequest","description":"One-click confirmation of up to 50 inferred Brand Kit fields."},"ConnectFieldSchema":{"properties":{"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"required":{"type":"boolean","title":"Required"},"secret":{"type":"boolean","title":"Secret"},"description":{"type":"string","title":"Description","default":""},"default":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default"}},"type":"object","required":["name","label","required","secret"],"title":"ConnectFieldSchema","description":"One credential input a non-OAuth toolkit needs at connect time (drives the dynamic form)."},"ConnectFieldsResponse":{"properties":{"app_slug":{"type":"string","title":"App Slug"},"is_oauth":{"type":"boolean","title":"Is Oauth"},"auth_scheme":{"type":"string","title":"Auth Scheme"},"fields":{"items":{"$ref":"#/components/schemas/ConnectFieldSchema"},"type":"array","title":"Fields","default":[]},"connectable":{"type":"boolean","title":"Connectable","default":true},"unsupported_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unsupported Reason"},"flow":{"type":"string","title":"Flow","default":"poll"}},"type":"object","required":["app_slug","is_oauth","auth_scheme"],"title":"ConnectFieldsResponse","description":"How an app connects: the OAuth redirect flow, or the fields to collect for a key-entry form."},"ConnectKeyBody":{"properties":{"app_slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","title":"App Slug"},"credentials":{"additionalProperties":{"type":"string"},"type":"object","title":"Credentials"},"visibility":{"$ref":"#/components/schemas/IntegrationVisibility","default":"team"}},"additionalProperties":false,"type":"object","required":["app_slug","credentials"],"title":"ConnectKeyBody","description":"Submit a non-OAuth toolkit's user-supplied credentials to connect it.\n\n``credentials`` is a free-form map of the toolkit's required/optional fields (e.g. ``api_key`` +\n``region``). It carries SECRETS, so it is passed straight to the provider's vault and is never\npersisted or logged. ``extra=\"forbid\"`` keeps unexpected top-level keys out of the contract."},"ConnectSessionBody":{"properties":{"app_slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$","title":"App Slug"},"visibility":{"$ref":"#/components/schemas/IntegrationVisibility","default":"personal"}},"type":"object","required":["app_slug"],"title":"ConnectSessionBody"},"ConnectSessionResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"app_slug":{"type":"string","title":"App Slug"},"connect_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connect Url"},"connect_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connect Token"},"flow":{"type":"string","title":"Flow","default":"poll"}},"type":"object","required":["provider","app_slug"],"title":"ConnectSessionResponse"},"ConnectedAccountCounts":{"properties":{"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id","description":"Set when scoped to one tenant; null for the overview."},"by_provider":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Provider","description":"Provider → active account count (populated only for a single-tenant query)."},"rows":{"items":{"$ref":"#/components/schemas/ProviderCount"},"type":"array","title":"Rows","description":"Cross-tenant (tenant, provider, count) rows for the overview."},"total_active_accounts":{"type":"integer","title":"Total Active Accounts","description":"Sum of all active connected accounts in scope."}},"type":"object","required":["total_active_accounts"],"title":"ConnectedAccountCounts","description":"Connected-account COGS view. Either one tenant's counts, or the platform-wide overview."},"ConnectedAccountResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"app_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Slug"},"status_code":{"type":"string","title":"Status Code"},"visibility_code":{"$ref":"#/components/schemas/IntegrationVisibility","default":"team"}},"type":"object","required":["id","provider","status_code"],"title":"ConnectedAccountResponse"},"ConnectedAccountSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"app_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Slug"},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"managed":{"type":"boolean","title":"Managed","default":false},"external_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Account Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"status_code":{"type":"string","title":"Status Code"},"visibility_code":{"$ref":"#/components/schemas/IntegrationVisibility"},"team_only_connect":{"type":"boolean","title":"Team Only Connect","default":false},"connected_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected By"},"connected_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected By Email"},"enabled_tool_count":{"type":"integer","title":"Enabled Tool Count","default":0},"needs_reconnect":{"type":"boolean","title":"Needs Reconnect","default":false},"reconnect_reason_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reconnect Reason Code"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"is_mine":{"type":"boolean","title":"Is Mine","default":false},"can_manage":{"type":"boolean","title":"Can Manage","default":false},"can_disconnect":{"type":"boolean","title":"Can Disconnect","default":false},"can_reconsent":{"type":"boolean","title":"Can Reconsent","default":false}},"type":"object","required":["id","provider","status_code","visibility_code","created_at"],"title":"ConnectedAccountSummary","description":"One connected account for the management list with identity, status, sharing scope, and connector."},"ConnectedAccountsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConnectedAccountSummary"},"type":"array","title":"Items"},"pending":{"items":{"$ref":"#/components/schemas/PendingConnectionSummary"},"type":"array","title":"Pending","default":[]}},"type":"object","required":["items"],"title":"ConnectedAccountsResponse"},"ConnectionStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"active":{"type":"boolean","title":"Active"}},"type":"object","required":["status","active"],"title":"ConnectionStatusResponse"},"ConsoleConversationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConsoleConversationResponse"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"ConsoleConversationListResponse","description":"The recency-capped switcher page with reserved cursor fields."},"ConsoleConversationRenameRequest":{"properties":{"title":{"type":"string","maxLength":80,"minLength":1,"title":"Title"}},"additionalProperties":false,"type":"object","required":["title"],"title":"ConsoleConversationRenameRequest","description":"A user-supplied title that the service sanitizes before storage."},"ConsoleConversationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"streaming_turn_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Streaming Turn Id"}},"type":"object","required":["id","title","last_message_at","created_at","streaming_turn_id"],"title":"ConsoleConversationResponse","description":"A conversation row exposed to the dashboard switcher."},"ConsoleMessageRequest":{"properties":{"text":{"type":"string","maxLength":11000,"minLength":1,"title":"Text"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"}},"additionalProperties":false,"type":"object","required":["text"],"title":"ConsoleMessageRequest","description":"A new console turn with no client-controlled thread coordinate."},"ConsoleMessageResponse":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"accepted":{"type":"boolean","const":true,"title":"Accepted","default":true},"tracking_expires_at":{"type":"string","format":"date-time","title":"Tracking Expires At"}},"type":"object","required":["conversation_id","tracking_expires_at"],"title":"ConsoleMessageResponse","description":"The private conversation that accepted the queued turn."},"ConsoleThreadResponse":{"properties":{"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"streaming_turn_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Streaming Turn Id"},"live":{"anyOf":[{"$ref":"#/components/schemas/LiveProgress"},{"type":"null"}]},"poll_retry_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Poll Retry Until"}},"type":"object","required":["conversation_id","title","streaming_turn_id","live","poll_retry_until"],"title":"ConsoleThreadResponse","description":"The authenticated member's console thread and current run state."},"ConversationDirectoryRow":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"platform_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Code"},"kind_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind Code"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","title":"ConversationDirectoryRow","description":"Row shape returned by the directory query.\n\nAll fields optional so ``fields=`` projection validates (runflow pattern)."},"ConversationKind":{"type":"string","enum":["channel","group","dm","thread"],"title":"ConversationKind"},"ConversationKindRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ConversationKindRefReferenceFullValidator"},"ConversationProactiveModeResponse":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"mode":{"$ref":"#/components/schemas/ProactiveReplyMode"},"source":{"$ref":"#/components/schemas/ProactiveModeSource"},"label":{"type":"string","title":"Label"},"summary":{"type":"string","title":"Summary"},"source_summary":{"type":"string","title":"Source Summary"}},"type":"object","required":["conversation_id","mode","source","label","summary","source_summary"],"title":"ConversationProactiveModeResponse","description":"How freely Patricia replies in one conversation, and where that came from."},"ConversationSource":{"type":"string","enum":["console_chat","platform"],"title":"ConversationSource"},"CoverageAnswerResponse":{"properties":{"name":{"type":"string","title":"Name","description":"The server, named the way the person names it."},"supported":{"type":"boolean","title":"Supported","description":"Whether Patricia has an app this team can connect for it."},"app_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Slug","description":"The Patricia app to connect."},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Name","description":"That app's name, ready to show."},"matched_on":{"anyOf":[{"type":"string","enum":["address","package","name"]},{"type":"null"}],"title":"Matched On","description":"The evidence behind the answer, strongest first. An address is a host the vendor publishes; a package is a package scope the vendor owns; a name is a vendor word taken from what somebody typed or from the package id, and is the weakest of the three."}},"type":"object","required":["name","supported"],"title":"CoverageAnswerResponse","description":"One server and the Patricia app that covers it, or an honest nothing."},"CoverageCheckBody":{"properties":{"servers":{"items":{"$ref":"#/components/schemas/ServerFingerprintBody"},"type":"array","maxItems":100,"title":"Servers","description":"The servers found in the configuration, already reduced to name, host and package."}},"additionalProperties":false,"type":"object","title":"CoverageCheckBody","description":"The servers to look up. Nothing is stored, so there is nothing to undo but closing the page."},"CoverageResponse":{"properties":{"servers":{"items":{"$ref":"#/components/schemas/CoverageAnswerResponse"},"type":"array","title":"Servers","description":"One answer per server, same order."},"supported_count":{"type":"integer","title":"Supported Count","description":"How many of them Patricia covers."}},"type":"object","required":["servers","supported_count"],"title":"CoverageResponse","description":"Every answer, in the order the servers were given."},"CreateAuthoredSkillFilesRequest":{"properties":{"manifest_yaml":{"type":"string","title":"Manifest Yaml"},"files":{"items":{"$ref":"#/components/schemas/AuthoredBundleFilePayload"},"type":"array","title":"Files"}},"type":"object","required":["manifest_yaml"],"title":"CreateAuthoredSkillFilesRequest","description":"A complete manifest and text file set for a new authored skill."},"CreateDraftRequest":{"properties":{"skill_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Skill Id","description":"Edit an EXISTING skill: its active version's manifest and files are copied in and the version number is patch-bumped. Omit to start a new skill."},"manifest":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Manifest","description":"A starting manifest (for example a GitHub candidate). Ignored when skill_id is set."},"skill_md":{"anyOf":[{"type":"string","maxLength":400000},{"type":"null"}],"title":"Skill Md","description":"The starting SKILL.md, stored as an editable draft file. The GitHub autodetect route returns one alongside each candidate's manifest; without this the import would arrive with its prose silently dropped. Ignored when skill_id is set (an existing skill's files are copied instead)."},"title":{"type":"string","maxLength":255,"title":"Title","description":"A working name for the draft.","default":""},"source_kind":{"type":"string","enum":["manual","github"],"title":"Source Kind","description":"Which door this draft came through — 'manual' (typed) or 'github' (a candidate picked from /authored-skills/from-github). Stated rather than guessed from the other fields, and carried onto the published version. 'zip' is not accepted here: it belongs to /skill-drafts/upload, which is the only route that actually read an archive.","default":"manual"},"source_ref":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Source Ref","description":"Where this came from — a repo URL or a filename. Inert metadata."}},"type":"object","title":"CreateDraftRequest","description":"Open a draft: empty, from a manifest, or seeded from an existing skill."},"CreatePackRequest":{"properties":{"slug":{"type":"string","maxLength":255,"minLength":1,"title":"Slug"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"skill_slugs":{"items":{"type":"string"},"type":"array","title":"Skill Slugs"}},"type":"object","required":["slug","title"],"title":"CreatePackRequest"},"CreateSkillRequest":{"properties":{"manifest":{"additionalProperties":true,"type":"object","title":"Manifest"},"files":{"items":{"$ref":"#/components/schemas/BundleFilePayload"},"type":"array","title":"Files"},"listed":{"type":"boolean","title":"Listed","default":false}},"type":"object","required":["manifest"],"title":"CreateSkillRequest","description":"Create a new global platform-admin skill and publish its first version."},"CreateWorkspaceRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"Workspace name (a friendly default is used if omitted)."}},"additionalProperties":false,"type":"object","title":"CreateWorkspaceRequest","description":"Payload for the explicit \"create a new / separate workspace\" action.\n\nAn ``Idempotency-Key`` header (required by the route) makes a retry safe. The response is a fresh\ntoken pair scoped to the new workspace, which the caller adopts to enter the workspace it just created."},"CredentialRowIn":{"properties":{"row_id":{"type":"string","format":"uuid","title":"Row Id"},"owner":{"$ref":"#/components/schemas/OwnerIn"},"disposition":{"$ref":"#/components/schemas/RowDisposition"}},"additionalProperties":false,"type":"object","required":["row_id","owner","disposition"],"title":"CredentialRowIn","description":"One credential row the decision names, and what happens to it."},"CreditAdjustmentCreate":{"properties":{"direction":{"type":"string","enum":["add","subtract"],"title":"Direction"},"amount":{"anyOf":[{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d{0,2}0*$"}],"title":"Amount","description":"Credits, 2 decimals max."},"reason":{"type":"string","maxLength":500,"minLength":10,"title":"Reason"},"idempotency_key":{"type":"string","maxLength":128,"minLength":8,"title":"Idempotency Key","description":"Client-generated once per submit; resending it replays the stored outcome instead of moving credits again."}},"additionalProperties":false,"type":"object","required":["direction","amount","reason","idempotency_key"],"title":"CreditAdjustmentCreate","description":"A staff credit grant/clawback. Direction + positive magnitude (fat-finger safe)."},"CronJobCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Run At"},"kind_code":{"$ref":"#/components/schemas/CronKind","default":"task"},"prompt":{"type":"string","title":"Prompt"},"condition_script":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition Script"},"enabled":{"type":"boolean","title":"Enabled","default":true},"model":{"type":"string","title":"Model","default":"gpt-5.6-sol"},"cost_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Tier"},"max_runs":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Runs"},"delivery_channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Channel Id"}},"additionalProperties":false,"type":"object","required":["name","prompt"],"title":"CronJobCreateRequest","description":"Cron create fields plus an optional server-validated channel selection."},"CronJobUsage":{"properties":{"cron_job_id":{"type":"string","format":"uuid","title":"Cron Job Id"},"credits":{"type":"integer","title":"Credits"}},"type":"object","required":["cron_job_id","credits"],"title":"CronJobUsage","description":"One scheduled job's accumulated credit consumption."},"CronJobUsageResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CronJobUsage"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"CronJobUsageResponse","description":"Accumulated credits for every scheduled job the caller can see."},"CronKind":{"type":"string","enum":["reminder","task"],"title":"CronKind","description":"What a fired ``CronJob`` does (plan 02 §6).\n\n``reminder`` pings the originating conversation with the stored message (no\nagent run); ``task`` runs the stored prompt as a scheduled agent action and\ndelivers the result back to that conversation."},"CronKindRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"CronKindRefReferenceFullValidator"},"CuratorAffected":{"properties":{"pruned_memory":{"items":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"},"type":"array","title":"Pruned Memory"},"archived_docs":{"items":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"},"type":"array","title":"Archived Docs"}},"type":"object","required":["pruned_memory","archived_docs"],"title":"CuratorAffected","description":"Recently pruned memories + archived docs, both restorable."},"CuratorConfigBody":{"properties":{"half_life_days":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Half Life Days"},"salience_floor":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Salience Floor"},"stale_doc_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Stale Doc Days"}},"type":"object","title":"CuratorConfigBody","description":"PUT body: only provided fields are overridden (partial). Validated so a bad\noverride can't feed broken math into a sweep (half-life > 0, floor in [0,1])."},"CuratorConfigResponse":{"properties":{"half_life_days":{"type":"number","title":"Half Life Days"},"salience_floor":{"type":"number","title":"Salience Floor"},"stale_doc_days":{"type":"integer","title":"Stale Doc Days"}},"type":"object","required":["half_life_days","salience_floor","stale_doc_days"],"title":"CuratorConfigResponse"},"CuratorSweepResult":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run"},"decayed":{"type":"integer","title":"Decayed"},"consolidated":{"type":"integer","title":"Consolidated"},"expired":{"type":"integer","title":"Expired"},"pruned":{"type":"integer","title":"Pruned"},"archived":{"type":"integer","title":"Archived"}},"type":"object","required":["dry_run","decayed","consolidated","expired","pruned","archived"],"title":"CuratorSweepResult","description":"The counts a sweep changed (or would change, when ``dry_run``)."},"CustomModelUpdate":{"properties":{"model_id":{"type":"string","title":"Model Id"},"effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effort"}},"additionalProperties":false,"type":"object","required":["model_id"],"title":"CustomModelUpdate","description":"A workspace's own model + thinking choice for everyday work."},"CustomSetupView":{"properties":{"tier":{"type":"string","title":"Tier"},"model_id":{"type":"string","title":"Model Id"},"model_label":{"type":"string","title":"Model Label"},"effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effort"},"thinking_label":{"type":"string","title":"Thinking Label"},"posture_label":{"type":"string","title":"Posture Label"}},"type":"object","required":["tier","model_id","model_label","effort","thinking_label","posture_label"],"title":"CustomSetupView","description":"The workspace's own model + thinking choice, when it has one."},"DailyAggregate":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"run_count":{"type":"integer","title":"Run Count"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"cache_read_tokens":{"type":"integer","title":"Cache Read Tokens"},"cache_write_tokens":{"type":"integer","title":"Cache Write Tokens"},"tool_calls":{"type":"integer","title":"Tool Calls"},"cost_micro_usd":{"type":"integer","title":"Cost Micro Usd"}},"type":"object","required":["date","run_count","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","tool_calls","cost_micro_usd"],"title":"DailyAggregate","description":"One day's usage TOTALS for a tenant: counters summed across that day's per-run shards.\n\nThe admin daily-usage view reads this, not the raw per-run rows (a raw ``limit 14`` would\nreturn 14 shards, not 14 days). No ``id``/``usage_shard_key``: it is an aggregate, not a row."},"DataDeletionCreate":{"properties":{"integration_account_id":{"type":"string","format":"uuid","title":"Integration Account Id"}},"type":"object","required":["integration_account_id"],"title":"DataDeletionCreate"},"DataDeletionCreated":{"properties":{"state":{"type":"string","enum":["received","failed"],"title":"State","default":"received"},"confirmation_code":{"type":"string","title":"Confirmation Code"},"status_url":{"type":"string","title":"Status Url"}},"type":"object","required":["confirmation_code","status_url"],"title":"DataDeletionCreated"},"DataDeletionStatus":{"properties":{"state":{"type":"string","enum":["received","in_progress","completed","failed","not_found"],"title":"State"},"message":{"type":"string","title":"Message"},"requested_at":{"type":"string","format":"date-time","title":"Requested At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"deleted":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Deleted"},"kept":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Kept"},"known_residuals":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Known Residuals"}},"type":"object","required":["state","message","requested_at"],"title":"DataDeletionStatus","description":"What a person is told about their own request. Plain words, and the whole answer.\n\n``kept`` and ``known_residuals`` are not decoration. A connected account that a standing approval\nstill references is TOMBSTONED rather than deleted, and the surviving row keeps the provider's own\nidentifier for that person. Reporting only the deletion counts would let \"completed\" stand in for\n\"completed, except for the parts we told nobody about\"."},"DataPrivacyResponse":{"properties":{"data_retention_days":{"type":"integer","title":"Data Retention Days"},"data_use_improve_enabled":{"type":"boolean","title":"Data Use Improve Enabled"},"redacted_topics":{"items":{"type":"string"},"type":"array","title":"Redacted Topics","description":"Topics Patricia must never repeat, in plain words (for example 'pricing' or 'legal'). She removes any part of a meeting transcript or summary that touches one and leaves a short note that something was removed. Any workspace that has not set its own list uses a recommended one, so this is always the list actually in force; save an empty list to turn the filter off."}},"type":"object","required":["data_retention_days","data_use_improve_enabled","redacted_topics"],"title":"DataPrivacyResponse","description":"The caller's workspace data & privacy settings (with defaults applied)."},"DataPrivacyUpdate":{"properties":{"data_retention_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Data Retention Days"},"data_use_improve_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Data Use Improve Enabled"},"redacted_topics":{"anyOf":[{"items":{"type":"string","maxLength":60},"type":"array","maxItems":25},{"type":"null"}],"title":"Redacted Topics","description":"The complete list of topics Patricia must never repeat, in plain words. Send an empty list to turn the filter off. Omit the field to leave the saved list unchanged."}},"additionalProperties":false,"type":"object","title":"DataPrivacyUpdate","description":"PATCH body: every field optional; only what's provided is written.\n\n``data_retention_days`` must be exactly one of the three allowed windows\n(``90`` / ``365`` / ``0``). Strict types on purpose: lax coercion would turn a JSON\n``false`` into ``0`` (Python ``False == 0``) and silently select UNLIMITED retention.\nStrict typing 422s anything that isn't a real JSON number / boolean.\n\n``redacted_topics`` replaces the whole list (it is one control, edited as a whole), so an\nexplicit ``[]`` clears it and turns the filter off. Omitting the field leaves it untouched."},"Day":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"run_count":{"type":"integer","title":"Run Count"},"credits":{"type":"integer","title":"Credits"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"tool_calls":{"type":"integer","title":"Tool Calls"}},"type":"object","required":["date","run_count","credits","input_tokens","output_tokens","tool_calls"],"title":"Day"},"DeliverableChannel":{"properties":{"external_id":{"type":"string","title":"External Id"},"name":{"type":"string","title":"Name"},"is_private":{"type":"boolean","title":"Is Private"}},"type":"object","required":["external_id","name","is_private"],"title":"DeliverableChannel","description":"One Slack channel the caller may select as a scheduled delivery target."},"DeliverableChannelsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeliverableChannel"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeliverableChannelsResponse","description":"Best-effort channel choices for the dashboard delivery picker."},"DeliveryAttemptSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"attempt_no":{"type":"integer","title":"Attempt No"},"status_code":{"type":"string","title":"Status Code"},"delivery_mode_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Mode Code"},"template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Id"},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Id"},"provider_receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Receipt Id"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["id","attempt_no","status_code","delivery_mode_code","template_id","variant_id","provider_receipt_id","error_code","started_at","finished_at"],"title":"DeliveryAttemptSummary","description":"One append-only delivery attempt (template + receipt ids only, never rendered text, G4)."},"DeliveryChannelUpdateRequest":{"properties":{"delivery_channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Channel Id"}},"additionalProperties":false,"type":"object","required":["delivery_channel_id"],"title":"DeliveryChannelUpdateRequest","description":"Replace or clear a cron job's explicit channel delivery target."},"DeliveryPolicySummary":{"properties":{"mode_code":{"type":"string","title":"Mode Code"},"target_resolver":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Resolver"},"template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Id"},"reversal_policy_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reversal Policy Code"},"send_cap_per_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Send Cap Per Window"}},"type":"object","required":["mode_code","target_resolver","template_id","reversal_policy_code","send_cap_per_window"],"title":"DeliveryPolicySummary","description":"The compiled delivery contract for the installed version (mode / template / reversal / caps)."},"DisconnectAccountResponse":{"properties":{"upstream":{"$ref":"#/components/schemas/UpstreamRevokeOutcome"},"upstream_confirmed":{"type":"boolean","title":"Upstream Confirmed"}},"type":"object","required":["upstream","upstream_confirmed"],"title":"DisconnectAccountResponse","description":"What the disconnect actually achieved, locally and at the provider.\n\nThe local half always succeeds (the account is deactivated and its tools disabled), so a 200 alone\nwould say nothing about whether the provider-side credential is still valid. These fields carry that\ntruth to the caller, because \"disconnected\" is a claim about access, and telling someone their access\nwas removed while their token still works is the one failure mode this endpoint must not have."},"DocScopeStatusCount":{"properties":{"scope_code":{"type":"string","title":"Scope Code"},"status_code":{"type":"string","title":"Status Code"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["scope_code","status_code","count"],"title":"DocScopeStatusCount"},"DocStatus":{"type":"string","enum":["active","archived"],"title":"DocStatus"},"DocStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"DocStatusRefReferenceFullValidator"},"DraftFileContent":{"properties":{"path":{"type":"string","title":"Path"},"kind":{"type":"string","title":"Kind"},"content":{"type":"string","title":"Content"}},"type":"object","required":["path","kind","content"],"title":"DraftFileContent","description":"One file's text, returned to the draft's author only."},"DraftFileSummary":{"properties":{"path":{"type":"string","title":"Path"},"kind":{"type":"string","title":"Kind"},"size_bytes":{"type":"integer","title":"Size Bytes"},"sha256":{"type":"string","title":"Sha256"}},"type":"object","required":["path","kind","size_bytes","sha256"],"title":"DraftFileSummary","description":"One file in a draft — metadata only, never the bytes."},"DraftValidationResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Worth telling the author, but not blocking: a warning never makes `valid` false."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"missing_files":{"items":{"type":"string"},"type":"array","title":"Missing Files","description":"Paths the manifest declares that this draft does not carry — an editor points at the file list."},"dropped_files":{"items":{"type":"string"},"type":"array","title":"Dropped Files","description":"Paths this draft carries that the manifest does not declare. Publishing stores only what the manifest names, so these would be lost without being mentioned anywhere."}},"type":"object","required":["valid"],"title":"DraftValidationResponse","description":"The result of validating a draft — friendly errors for the editor. Always 200."},"DraftedCause":{"type":"string","enum":["no_bugs_channel","autoship_off","linear_not_configured","linear_connection_down"]},"DuplicateState":{"type":"string","enum":["any","only_duplicates","only_originals"]},"EditPackRequest":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"skill_slugs":{"items":{"type":"string"},"type":"array","title":"Skill Slugs"}},"type":"object","required":["title"],"title":"EditPackRequest"},"EmailCatalogEntry":{"properties":{"id":{"type":"string","title":"Id"},"stage":{"type":"string","title":"Stage"},"category":{"type":"string","title":"Category"},"priority":{"type":"string","title":"Priority"},"audience":{"type":"string","title":"Audience"},"timing":{"type":"string","title":"Timing"},"trigger":{"type":"string","title":"Trigger"},"subject":{"type":"string","title":"Subject"},"variables":{"items":{"type":"string"},"type":"array","title":"Variables"},"has_rule":{"type":"boolean","title":"Has Rule","description":"Whether a trigger rule owns this email (drives entry/send conditions)."}},"type":"object","required":["id","stage","category","priority","audience","timing","trigger","subject","variables","has_rule"],"title":"EmailCatalogEntry","description":"One lifecycle email, as the admin console needs to pick and explain it."},"EmailCatalogList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EmailCatalogEntry"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"test_send_enabled":{"type":"boolean","title":"Test Send Enabled","description":"False when API_EMAIL_TEST_SEND_ENABLED is off, so the console can say so instead of 404ing."}},"type":"object","required":["items","count","test_send_enabled"],"title":"EmailCatalogList","description":"The whole lifecycle catalog plus whether test sending is armed in this environment."},"EmailDisableBody":{"properties":{"disabled":{"type":"boolean","title":"Disabled"}},"additionalProperties":false,"type":"object","required":["disabled"],"title":"EmailDisableBody","description":"PATCH /members/{id}/email request body: the per-member email kill switch."},"EmailSimulateRequest":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"email_id":{"type":"string","maxLength":100,"minLength":1,"title":"Email Id"},"recipient_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Recipient Actor Id"},"recipient_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Recipient Email"}},"additionalProperties":false,"type":"object","required":["tenant_id","email_id"],"title":"EmailSimulateRequest","description":"A hypothetical to explain: would ``email_id`` send to this recipient right now?"},"EmailSimulateResult":{"properties":{"email_id":{"type":"string","title":"Email Id"},"has_rule":{"type":"boolean","title":"Has Rule"},"would_send":{"type":"boolean","title":"Would Send"},"blockers":{"items":{"type":"string"},"type":"array","title":"Blockers"},"entry_evaluated":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Entry Evaluated"},"send_evaluated":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Send Evaluated"},"frequency_snapshot":{"additionalProperties":{"type":"string"},"type":"object","title":"Frequency Snapshot"},"quiet_hours_deferred_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Quiet Hours Deferred Until"},"email_provenance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Provenance"}},"type":"object","required":["email_id","has_rule","would_send","blockers","entry_evaluated","send_evaluated","frequency_snapshot","quiet_hours_deferred_until"],"title":"EmailSimulateResult","description":"The same decision trace the engine would produce, without sending or persisting anything."},"EmailTestSendRequest":{"properties":{"email_id":{"type":"string","maxLength":100,"minLength":1,"title":"Email Id"},"to":{"type":"string","format":"email","title":"To"},"from_address":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"From Address"}},"additionalProperties":false,"type":"object","required":["email_id","to"],"title":"EmailTestSendRequest"},"EmailTestSendResult":{"properties":{"email_id":{"type":"string","title":"Email Id"},"to":{"type":"string","title":"To"},"subject":{"type":"string","title":"Subject"},"provider_message_id":{"type":"string","title":"Provider Message Id"}},"type":"object","required":["email_id","to","subject","provider_message_id"],"title":"EmailTestSendResult"},"EmailVerificationRequest":{"properties":{"token":{"type":"string","maxLength":512,"minLength":1,"title":"Token","description":"The opaque token from the emailed link."},"password":{"type":"string","maxLength":128,"minLength":8,"format":"password","title":"Password","writeOnly":true},"first_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Last Name"},"org_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Org Name","description":"Workspace name (defaults if omitted)."},"gclid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gclid"},"fbclid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbclid"},"ttclid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ttclid"},"li_fat_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Fat Id"},"msclkid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msclkid"},"epik":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Epik"},"twclid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twclid"},"sccid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sccid"}},"additionalProperties":false,"type":"object","required":["token","password"],"title":"EmailVerificationRequest","description":"Sign-up STEP TWO: redeem the emailed link and choose a password.\n\nEverything that describes the account arrives here rather than at step one, because this is\nthe first request whose sender has demonstrated they hold the mailbox."},"EmailVerificationResponse":{"properties":{"status":{"type":"string","const":"accepted","title":"Status","default":"accepted"},"email":{"type":"string","format":"email","title":"Email"}},"additionalProperties":false,"type":"object","required":["email"],"title":"EmailVerificationResponse","description":"The address the caller just proved they hold, so signing in needs no retyping.\n\nSafe to return here and nowhere else: presenting the emailed token IS the proof, so this\nreveals nothing the caller did not already know."},"ErrorResponse":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"errors":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Errors"}},"type":"object","required":["code","message"],"title":"ErrorResponse","description":"Standard error envelope, matching exception handler output."},"EventDrop":{"properties":{"event_id":{"type":"string","title":"Event Id"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["event_id","reason"],"title":"EventDrop","description":"Why one event in the batch was not stored (coarse, non-PII code)."},"EventSourceCreated":{"properties":{"source":{"$ref":"#/components/schemas/EventSourceView"},"endpoint_url":{"type":"string","title":"Endpoint Url"}},"type":"object","required":["source","endpoint_url"],"title":"EventSourceCreated","description":"A freshly minted endpoint. The ONLY response that ever carries the URL."},"EventSourceListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EventSourceView"},"type":"array","title":"Items"},"connectable":{"items":{"type":"string"},"type":"array","title":"Connectable"}},"type":"object","required":["items","connectable"],"title":"EventSourceListResponse","description":"Every system this workspace has connected, plus the ones it could."},"EventSourceSecretUpdate":{"properties":{"signing_secret":{"type":"string","maxLength":512,"minLength":1,"title":"Signing Secret"}},"additionalProperties":false,"type":"object","required":["signing_secret"],"title":"EventSourceSecretUpdate","description":"The signing secret from the vendor's dashboard. Write-only."},"EventSourceView":{"properties":{"source":{"type":"string","title":"Source"},"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"secret_configured":{"type":"boolean","title":"Secret Configured"},"last_event_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Event At"}},"type":"object","required":["source","label","status","secret_configured","last_event_at"],"title":"EventSourceView","description":"One connected system, as the dashboard sees it."},"FactCellSummary":{"properties":{"domain_key":{"type":"string","title":"Domain Key"},"label":{"type":"string","title":"Label"},"status_code":{"type":"string","title":"Status Code"},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display"},"value_type_code":{"$ref":"#/components/schemas/AttributeValueType"}},"type":"object","required":["domain_key","label","status_code","display","value_type_code"],"title":"FactCellSummary","description":"One fact column's value for a people-table row: a month/day label + status (never a year, G4)."},"FailureLabelCount":{"properties":{"failure_code":{"type":"string","title":"Failure Code"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["failure_code","count"],"title":"FailureLabelCount","description":"How often reviewers have blamed one cause."},"FeatureActionSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"surface_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Surface Id"},"action_kind_code":{"type":"string","title":"Action Kind Code"},"endpoint":{"type":"string","title":"Endpoint"},"rbac_permission":{"type":"string","title":"Rbac Permission"},"state_transition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Transition"}},"type":"object","required":["id","surface_id","action_kind_code","endpoint","rbac_permission","state_transition"],"title":"FeatureActionSummary","description":"A compiled user action bound to a surface: a platform endpoint + RBAC permission (no manifest ids)."},"FeatureFlagRow":{"properties":{"env_var":{"type":"string","title":"Env Var","description":"The API_* environment variable name."},"intended_home":{"type":"string","title":"Intended Home","description":"Intended home: blueprint | code-default | dashboard-only | dashboard-infra (not a provenance)."},"control_class":{"type":"string","title":"Control Class","description":"standard | billing | kill_switch | operational."},"loaded_value":{"type":"boolean","title":"Loaded Value","description":"The boolean this process actually booted with."},"effective":{"type":"boolean","title":"Effective","description":"Feature gate: whether the feature is actually active once compound prerequisites apply. Kill switch (control_class=kill_switch): whether containment is ENGAGED (feature halted)."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Allowlisted code explaining why effective != loaded (e.g. managed_integrations_disabled), or null."},"removal_condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Removal Condition","description":"Flag-hygiene: what must be true before this flag is deleted, or null."}},"type":"object","required":["env_var","intended_home","control_class","loaded_value","effective"],"title":"FeatureFlagRow","description":"One governed feature gate's effective state (values only, never a secret)."},"FeatureFlagState":{"properties":{"service":{"type":"string","title":"Service","description":"The observing process: 'api' (this endpoint). Worker state lives in the worker startup log."},"commit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit","description":"Deploy commit (RENDER_GIT_COMMIT) when present, else null."},"flag_count":{"type":"integer","title":"Flag Count","description":"Number of governed gates reported."},"engaged_kill_switches":{"items":{"type":"string"},"type":"array","title":"Engaged Kill Switches","description":"Env vars of any ENGAGED break-glass kill switch (empty is the healthy state)."},"flags":{"items":{"$ref":"#/components/schemas/FeatureFlagRow"},"type":"array","title":"Flags","description":"Per-gate effective state."}},"type":"object","required":["service","flag_count","engaged_kill_switches","flags"],"title":"FeatureFlagState","description":"Service-aware snapshot of every governed feature gate for the observing process."},"FeatureReadModelSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"repository_binding":{"type":"string","title":"Repository Binding"},"columns":{"items":{},"type":"array","title":"Columns"},"filters":{"additionalProperties":true,"type":"object","title":"Filters"},"sort":{"items":{},"type":"array","title":"Sort"},"pagination_envelope":{"additionalProperties":true,"type":"object","title":"Pagination Envelope"}},"type":"object","required":["id","name","repository_binding","columns","filters","sort","pagination_envelope"],"title":"FeatureReadModelSummary","description":"A compiled read-model descriptor a surface reads (columns/filters/sort + pagination envelope)."},"FeatureSurfaceSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"surface_kind_code":{"type":"string","title":"Surface Kind Code"},"placement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Placement"},"feature_read_model_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Feature Read Model Id"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","surface_kind_code","placement","feature_read_model_id","sort_order"],"title":"FeatureSurfaceSummary","description":"A compiled UI surface the dashboard renders generically by ``surface_kind_code``."},"ForgetResult":{"properties":{"id":{"type":"string","title":"Id"},"forgotten":{"type":"boolean","title":"Forgotten","default":true},"retired_from_recall":{"type":"boolean","title":"Retired From Recall","default":false}},"type":"object","required":["id"],"title":"ForgetResult","description":"Outcome of a FORGET action (soft-delete a memory, or retire a lesson from recall)."},"GithubAuthorRequest":{"properties":{"manifest":{"additionalProperties":true,"type":"object","title":"Manifest","description":"The chosen candidate's manifest (from the autodetect result)."},"skill_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Md","description":"The candidate's inert SKILL.md, if it had one."}},"type":"object","required":["manifest"],"title":"GithubAuthorRequest","description":"Author a chosen GitHub-autodetected candidate. Carries the candidate's own manifest (+ inert prose)."},"GithubAutodetectResponse":{"properties":{"owner":{"type":"string","title":"Owner"},"repo":{"type":"string","title":"Repo"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"},"candidates":{"items":{"$ref":"#/components/schemas/GithubSkillCandidate"},"type":"array","title":"Candidates"}},"type":"object","required":["owner","repo"],"title":"GithubAutodetectResponse","description":"The result of autodetecting a public GitHub repo: the skills found + their validation."},"GithubImportRequest":{"properties":{"repo_url":{"type":"string","title":"Repo Url","description":"A public github.com repository URL, e.g. https://github.com/acme/skills."},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref","description":"Optional branch/tag/commit; defaults to the repo HEAD."}},"type":"object","required":["repo_url"],"title":"GithubImportRequest","description":"Point the autodetect at a public GitHub repo. Patricia SSRF-hardened-fetches its tarball."},"GithubSkillCandidate":{"properties":{"path":{"type":"string","title":"Path","description":"The repo directory the manifest lived in ('(root)' at the top level)."},"valid":{"type":"boolean","title":"Valid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"delivery_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Mode"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"manifest":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Manifest"},"skill_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Md"}},"type":"object","required":["path","valid"],"title":"GithubSkillCandidate","description":"One ``manifest.yaml`` autodetected in a GitHub repo: validated but NOT saved (a preview row).\n\n``manifest`` (and inert ``skill_md``) are echoed back ONLY for a valid candidate so the admin can\nauthor the pick without a re-fetch; an invalid one carries just its friendly ``errors``. The author\nstep re-validates + re-compiles from scratch, so nothing here is trusted."},"GoogleAdsCustomerBody":{"properties":{"customer_id":{"type":"string","maxLength":32,"minLength":1,"title":"Customer Id"}},"additionalProperties":false,"type":"object","required":["customer_id"],"title":"GoogleAdsCustomerBody","description":"Pin a Google Ads connection to one discovered advertising customer."},"GoogleAdsCustomerSummary":{"properties":{"customer_id":{"type":"string","title":"Customer Id"},"customer_id_display":{"type":"string","title":"Customer Id Display"},"descriptive_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descriptive Name"},"manager":{"type":"boolean","title":"Manager"},"level":{"type":"integer","title":"Level"},"currency_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency Code"},"login_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Login Customer Id"},"selectable":{"type":"boolean","title":"Selectable"},"status_label":{"type":"string","title":"Status Label"}},"type":"object","required":["customer_id","customer_id_display","descriptive_name","manager","level","currency_code","login_customer_id","selectable","status_label"],"title":"GoogleAdsCustomerSummary","description":"One Google Ads customer this connection can reach, as the picker shows it.\n\nThe name, display id, and currency identify the customer. The manager fields explain why a\nmanager account appears in the list but cannot be selected for campaign reports."},"GoogleAdsCustomersResponse":{"properties":{"customers":{"items":{"$ref":"#/components/schemas/GoogleAdsCustomerSummary"},"type":"array","title":"Customers"},"selected_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Customer Id"},"discovery_truncated":{"type":"boolean","title":"Discovery Truncated"}},"type":"object","required":["discovery_truncated"],"title":"GoogleAdsCustomersResponse","description":"Every customer a Google Ads connection discovered, and its current pinned customer."},"GroupBreakdown":{"properties":{"group_id":{"type":"string","format":"uuid","title":"Group Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"memory_count":{"type":"integer","title":"Memory Count"},"channel_count":{"type":"integer","title":"Channel Count"}},"type":"object","required":["group_id","name","slug","memory_count","channel_count"],"title":"GroupBreakdown"},"GroupLimitView":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"dollars":{"type":"number","title":"Dollars"},"source":{"type":"string","title":"Source"},"min_dollars":{"type":"number","title":"Min Dollars"},"max_dollars":{"type":"number","title":"Max Dollars"},"triggers":{"items":{"$ref":"#/components/schemas/TriggerLimitView"},"type":"array","title":"Triggers"}},"type":"object","required":["key","label","description","dollars","source","min_dollars","max_dollars","triggers"],"title":"GroupLimitView","description":"A friendly group of per-run budgets (e.g. \"Conversations\"), shown as one input.\n\n``dollars`` is the representative ceiling for the group (the highest of its\ntriggers' effective budgets); editing it fans the one value out to every\ntrigger in the group on PATCH. ``triggers`` is the per-trigger breakdown for\nthe \"advanced\" reveal."},"GroupStatus":{"type":"string","enum":["active","archived"],"title":"GroupStatus","description":"Channel-group lifecycle (see plan 02-architecture/12)."},"GroupStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"GroupStatusRefReferenceFullValidator"},"GroupSuggestionStatus":{"type":"string","enum":["pending","accepted","dismissed","superseded"],"title":"GroupSuggestionStatus","description":"Lifecycle of a Patricia-proposed grouping (\"suggest, you own\")."},"GroupSuggestionStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"GroupSuggestionStatusRefReferenceFullValidator"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdentityBindingCaseStatus":{"type":"string","enum":["proof_pending","approval_pending","ready","legacy_backfill_approved","completed","denied","expired"],"title":"IdentityBindingCaseStatus","description":"Lifecycle of an ``identity_binding_cases`` row (``status_code``).\n\nLegal transitions are pinned by the case repository's CAS transition graph;\n``legacy_backfill_approved`` is an INITIAL status (pre-authorized legacy\nbind), not a reachable transition target."},"IncomingEvent":{"properties":{"event_id":{"type":"string","maxLength":64,"minLength":1,"title":"Event Id"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"schema_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Schema Version"},"occurred_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Occurred At"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"additionalProperties":false,"type":"object","required":["event_id","name"],"title":"IncomingEvent","description":"One client-reported event."},"IngestEventsRequest":{"properties":{"events":{"items":{"$ref":"#/components/schemas/IncomingEvent"},"type":"array","maxItems":50,"minItems":1,"title":"Events"}},"additionalProperties":false,"type":"object","required":["events"],"title":"IngestEventsRequest","description":"A batch of events to ingest."},"IngestEventsResponse":{"properties":{"accepted":{"type":"integer","title":"Accepted"},"dropped":{"type":"integer","title":"Dropped"},"drops":{"items":{"$ref":"#/components/schemas/EventDrop"},"type":"array","title":"Drops"}},"type":"object","required":["accepted","dropped"],"title":"IngestEventsResponse","description":"Per-batch outcome."},"IngressReopenRequest":{"properties":{"platform_code":{"type":"string","maxLength":50,"minLength":1,"pattern":"^[a-z0-9_-]+$","title":"Platform Code"},"event_id":{"type":"string","maxLength":255,"minLength":1,"title":"Event Id"}},"type":"object","required":["platform_code","event_id"],"title":"IngressReopenRequest","description":"Exact ingress identity to reopen."},"IngressReopenResult":{"properties":{"platform_code":{"type":"string","title":"Platform Code"},"event_id":{"type":"string","title":"Event Id"},"reopened":{"type":"boolean","title":"Reopened","default":true},"fallback_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fallback Sent At","description":"Existing terminal notification tombstone, preserved by this operation."}},"type":"object","required":["platform_code","event_id"],"title":"IngressReopenResult","description":"Confirmation that processing state was reset."},"InstallAuthoredSkillRequest":{"properties":{"visibility":{"anyOf":[{"$ref":"#/components/schemas/SkillVisibility"},{"type":"null"}],"description":"team (everyone in the workspace) or personal (just you). Leave it out to take the widest scope you may create: team when you may share with the team, personal otherwise."}},"additionalProperties":false,"type":"object","title":"InstallAuthoredSkillRequest","description":"How widely to enable an authored skill. Optional: stating nothing takes the widest scope you may\ncreate, which is TEAM as it always has been for a caller who may share with the team.\n\n``personal`` enables it for the caller alone: their prompts carry the skill's guidance and nobody\nelse's do. Only an ``instructions`` skill can be born personal today (it is the one authored kind\nwhose runtime read filters by owner), and only a caller their workspace membership links to a chat\nprofile can own one.\n\n``visibility`` is unset rather than TEAM by default so that \"I did not say\" is ONE state: an absent\nbody and an empty one are the same preference gap, and the server fills both the same way. Only a\nstated ``team`` is read as an explicit ask, which is what gets refused without ``skills:install``."},"InstallResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"status_code":{"type":"string","title":"Status Code"},"visibility_code":{"type":"string","title":"Visibility Code"},"manifest_version_id":{"type":"string","format":"uuid","title":"Manifest Version Id"},"pinned_semver":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pinned Semver"},"pinned_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pinned Status"},"is_on_active":{"type":"boolean","title":"Is On Active"},"projection_generation":{"type":"integer","title":"Projection Generation"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","status_code","visibility_code","manifest_version_id","pinned_semver","pinned_status","is_on_active","projection_generation","activated_at","created_at"],"title":"InstallResponse"},"InstallSkillRequest":{"properties":{"slug":{"type":"string","title":"Slug"}},"type":"object","required":["slug"],"title":"InstallSkillRequest","description":"Install a git-catalog skill-platform skill into the tenant by its catalog ``slug``.\n\nThe install is born ``paused`` and pinned to the skill's active manifest version, with a default\nconfig seeded from the manifest's ``config_fields``. The admin completes the required settings\n(channel/timezone) and runs activation review before anything is delivered."},"InstallationPreviewSummary":{"properties":{"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"activated":{"type":"boolean","title":"Activated"},"killed":{"type":"boolean","title":"Killed"},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"},"status":{"type":"string","title":"Status"},"rows":{"items":{"$ref":"#/components/schemas/PreviewRowSummary"},"type":"array","title":"Rows"}},"type":"object","required":["installation_id","activated","killed","channel_id","status","rows"],"title":"InstallationPreviewSummary","description":"The full explainable dry-run preview for an installation (\"why will / won't fire\"). Posts nothing."},"InstallationSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"manifest_version_id":{"type":"string","format":"uuid","title":"Manifest Version Id"},"status_code":{"type":"string","title":"Status Code"},"config_version":{"type":"integer","title":"Config Version"},"projection_generation":{"type":"integer","title":"Projection Generation"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"first_live_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Live At"},"killed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Killed At"},"kill_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kill Reason"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_portable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Portable"},"archetype_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Archetype Code"},"can_edit_definition":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Edit Definition"},"visibility_code":{"$ref":"#/components/schemas/SkillVisibility"},"is_mine":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Mine"},"can_change_visibility":{"type":"boolean","title":"Can Change Visibility","default":false},"has_settings":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Settings"},"is_catalog_default":{"type":"boolean","title":"Is Catalog Default","default":false},"effectively_enabled":{"type":"boolean","title":"Effectively Enabled","default":false},"update_available":{"type":"boolean","title":"Update Available","default":false},"available_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Available Version Id"},"about":{"anyOf":[{"$ref":"#/components/schemas/SkillAboutSummary"},{"type":"null"}]}},"type":"object","required":["id","skill_id","manifest_version_id","status_code","config_version","projection_generation","activated_at","first_live_at","killed_at","kill_reason","visibility_code"],"title":"InstallationSummary","description":"A tenant's skill installation: the Hub card + settings header (no PII).\n\nCarries the installed skill's display metadata (``title``/``slug``/``description``) resolved from\nthe pinned manifest version's ``SkillDefinition`` so the Hub can name the card + page header without\na second lookup. These are display labels, never a personal fact (G4). They are optional so a bare\n``model_validate(install_row)`` (without the joined definition) still succeeds."},"InstallationVisibilityBody":{"properties":{"expected_current":{"$ref":"#/components/schemas/SkillVisibility"},"target":{"$ref":"#/components/schemas/SkillVisibility"}},"additionalProperties":false,"type":"object","required":["expected_current","target"],"title":"InstallationVisibilityBody","description":"Move one installed skill between TEAM (the whole workspace) and PERSONAL (just its owner).\n\n``expected_current`` is a compare-and-set guard: the write lands only while the install is still\nat that scope, so a change that raced this one surfaces a conflict instead of silently clobbering.\nThe two values must DIFFER: a same-scope request is refused rather than treated as a harmless\nno-op, because the only thing such a write could do is reassign ownership."},"InstructionSkillBody":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title","description":"The skill's name, e.g. 'Refund policy'."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"A one-line summary of what the skill helps with."},"instructions":{"type":"string","maxLength":8000,"minLength":1,"title":"Instructions","description":"Plain-markdown guidance: when someone asks about X, do Y; use our tone; check Z first."},"recommended_integrations":{"items":{"type":"string"},"type":"array","maxItems":12,"title":"Recommended Integrations","description":"App slugs from the integrations catalog to recommend connecting for this skill."},"skill_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Skill Id","description":"When editing an existing instruction skill, its id. An edit targets this skill and keeps its identity even if the name changed. Omit when creating a new skill."}},"type":"object","required":["title","instructions"],"title":"InstructionSkillBody","description":"The SIMPLE instruction-skill form: a name, a short description, and plain-markdown instructions.\n\nThe default \"Build a skill\" experience for a non-engineer. No semver, no YAML, no schedules; the\nserver derives the slug + manages the version. ``recommended_integrations`` are app slugs (from the\nintegrations catalog) a teammate enabling the skill is nudged to connect if missing."},"IntegrationAppDetailsResponse":{"properties":{"app_slug":{"type":"string","title":"App Slug"},"has_content":{"type":"boolean","title":"Has Content","default":false},"description":{"type":"string","title":"Description","default":""},"tools":{"items":{"$ref":"#/components/schemas/IntegrationToolBlurb"},"type":"array","title":"Tools"},"data_access":{"items":{"type":"string"},"type":"array","title":"Data Access"},"requirements":{"items":{"type":"string"},"type":"array","title":"Requirements"}},"type":"object","required":["app_slug"],"title":"IntegrationAppDetailsResponse","description":"Public read for the Connect sheet. ``has_content`` is False when no row is authored yet."},"IntegrationContentListItem":{"properties":{"app_slug":{"type":"string","title":"App Slug"},"description":{"type":"string","title":"Description"},"tool_count":{"type":"integer","title":"Tool Count"},"data_access_count":{"type":"integer","title":"Data Access Count"},"requirements_count":{"type":"integer","title":"Requirements Count"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["app_slug","description","tool_count","data_access_count","requirements_count","updated_at"],"title":"IntegrationContentListItem","description":"One row in the admin editor's list view.\n\nThe per-section counts travel with the row so the list can say which apps still need copy\nWITHOUT fetching every row: a sheet with no data-access or no requirements bullets renders\nhalf-empty, and the editor's \"needs work\" filter has to see that, not only a missing\ndescription or an empty tool list."},"IntegrationContentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"app_slug":{"type":"string","title":"App Slug"},"description":{"type":"string","title":"Description"},"tools":{"items":{"$ref":"#/components/schemas/IntegrationToolBlurb"},"type":"array","title":"Tools"},"data_access":{"items":{"type":"string"},"type":"array","title":"Data Access"},"requirements":{"items":{"type":"string"},"type":"array","title":"Requirements"},"updated_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","app_slug","description","tools","data_access","requirements","updated_at"],"title":"IntegrationContentResponse","description":"Full authored row for the admin editor."},"IntegrationContentUpsertRequest":{"properties":{"description":{"type":"string","maxLength":2000,"title":"Description","default":""},"tools":{"items":{"$ref":"#/components/schemas/IntegrationToolBlurb"},"type":"array","maxItems":100,"title":"Tools"},"data_access":{"items":{"type":"string"},"type":"array","maxItems":50,"title":"Data Access"},"requirements":{"items":{"type":"string"},"type":"array","maxItems":50,"title":"Requirements"}},"additionalProperties":false,"type":"object","title":"IntegrationContentUpsertRequest","description":"Full replace of one app's sheet content (staff editor PUT body)."},"IntegrationStatus":{"type":"string","enum":["active","revoked","error","revoking","revoke_failed"],"title":"IntegrationStatus","description":"Lifecycle of a connected account.\n\n``ACTIVE`` is connected and usable. ``REVOKED`` has been disconnected. ``ERROR`` needs\nreconnecting. ``REVOKING`` is being disconnected right now, and ``REVOKE_FAILED`` is a\ndisconnect that did not finish, which an admin has to clear."},"IntegrationStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"IntegrationStatusRefReferenceFullValidator"},"IntegrationToolBlurb":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"description":{"type":"string","maxLength":300,"title":"Description","default":""},"mode":{"type":"string","enum":["auto","ask_first"],"title":"Mode","default":"auto"}},"additionalProperties":false,"type":"object","required":["name"],"title":"IntegrationToolBlurb","description":"One row in the sheet's \"What Patricia can do\" list."},"IntegrationVisibility":{"type":"string","enum":["team","personal"],"title":"IntegrationVisibility","description":"Who, within a tenant, may use a connected account's tools.\n\n``TEAM``: any actor in the tenant. ``PERSONAL``: only the actor who connected it. Designed to\nextend to a ``GROUP`` scope later (the Groups model is already on main)."},"IntegrationVisibilityRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"IntegrationVisibilityRefReferenceFullValidator"},"IntroductionBlockedReason":{"type":"string","enum":["workspace_not_activated","already_introducing"],"title":"IntroductionBlockedReason","description":"Why the primary action is refused for the whole workspace."},"InvitationStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"InvitationStatusRefReferenceFullValidator"},"InviteBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role_code":{"type":"string","title":"Role Code"}},"additionalProperties":false,"type":"object","required":["email","role_code"],"title":"InviteBody","description":"POST /members/invite request body."},"InviteResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"role_code":{"type":"string","title":"Role Code"},"status_code":{"type":"string","title":"Status Code"},"expires_at":{"type":"string","title":"Expires At"}},"type":"object","required":["id","email","role_code","status_code","expires_at"],"title":"InviteResponse","description":"POST /members/invite response (never exposes the raw token)."},"InvoiceLineView":{"properties":{"description":{"type":"string","title":"Description"},"quantity":{"type":"integer","title":"Quantity"},"unit_amount_cents":{"type":"integer","title":"Unit Amount Cents"},"amount_cents":{"type":"integer","title":"Amount Cents"}},"type":"object","required":["description","quantity","unit_amount_cents","amount_cents"],"title":"InvoiceLineView","description":"One line item on an invoice (money in integer cents)."},"InvoiceList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/InvoiceView"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"InvoiceList","description":"GET /v1/billing/invoices: the tenant's invoices, newest first (no line items)."},"InvoiceView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"invoice_number":{"type":"string","title":"Invoice Number"},"status":{"type":"string","title":"Status"},"issued_at":{"type":"string","title":"Issued At"},"currency_code":{"type":"string","title":"Currency Code"},"subtotal_cents":{"type":"integer","title":"Subtotal Cents"},"tax_cents":{"type":"integer","title":"Tax Cents"},"total_cents":{"type":"integer","title":"Total Cents"},"bill_to_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bill To Name"},"bill_to_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bill To Details"},"lines":{"items":{"$ref":"#/components/schemas/InvoiceLineView"},"type":"array","title":"Lines","default":[]}},"type":"object","required":["id","invoice_number","status","issued_at","currency_code","subtotal_cents","tax_cents","total_cents","bill_to_name"],"title":"InvoiceView","description":"A structured invoice for client-side PDF rendering (Pricing v2 §8b).\n\nAll money is INTEGER CENTS (``subtotal + tax = total``, tax-exclusive). ``lines`` is\npresent on the single-invoice read and omitted (empty) on the list, matching the\n``embed_config`` projection."},"JoinableChannel":{"properties":{"id":{"type":"string","title":"Id","description":"Slack channel id."},"name":{"type":"string","title":"Name","description":"Channel name, without the leading '#'."},"member_count":{"type":"integer","title":"Member Count","description":"How many people are in the channel, as Slack reports it."}},"type":"object","required":["id","name","member_count"],"title":"JoinableChannel","description":"One public Slack channel Patricia has not joined yet."},"KillRequest":{"properties":{"killed":{"type":"boolean","title":"Killed"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["killed"],"title":"KillRequest","description":"Kill-switch toggle for an installation (G7)."},"LabelBody":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Label"}},"additionalProperties":false,"type":"object","title":"LabelBody","description":"Set/clear a connected account's user NICKNAME. ``null`` or blank clears it."},"LandingHint":{"type":"string","enum":["pending_invitation","diverted_unknown_workspace"],"title":"LandingHint","description":"A non-authorization hint explaining WHY a session landed where it did.\n\nThe dashboard reads it to show the right next step instead of a bare landing. It never grants\naccess: the token's tenant claim (or its absence) is the sole authority. Two values, and they\ndiffer in whether the session has a workspace at all:\n\n``PENDING_INVITATION`` lands TENANT-LESS — a returning user with at least one pending invitation\nand no active available home. It is NOT \"only pending memberships\": the branch is chosen on\n``has_pending`` before the deactivated/unavailable fallback, so a user holding a pending invite\nalongside deactivated or unavailable ones lands here too. The SSO guard declines to mint an empty\nduplicate tenant, and the hint points them at accepting the invite / signing in from the\nconnected workspace.\n\n``DIVERTED_UNKNOWN_WORKSPACE`` lands WITH an active workspace — a returning user who signed in\nfrom a chat workspace Patricia does not know. The guard diverts them to their existing primary\nworkspace rather than minting a second one, and the hint is what lets the dashboard say so and\noffer a deliberate way to create a separate workspace instead of failing silently."},"LessonStatus":{"type":"string","enum":["proposed","active","retired"],"title":"LessonStatus"},"LessonStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"LessonStatusRefReferenceFullValidator"},"LinearStateType":{"type":"string","enum":["backlog","unstarted","started","completed","canceled"]},"LinkChannelBody":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"}},"type":"object","required":["conversation_id"],"title":"LinkChannelBody","description":"Body for linking a channel (conversation) to a group."},"ListValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__mcp_personal_token__McpPersonalToken__FullValidator"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"ListValidator","description":"The complete self-scoped token list."},"LiveProgress":{"properties":{"status":{"type":"string","title":"Status"},"task_excerpt":{"type":"string","title":"Task Excerpt"},"steps":{"items":{"type":"string"},"type":"array","title":"Steps"},"waiting_on":{"type":"string","title":"Waiting On"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["status","task_excerpt","steps","waiting_on","updated_at"],"title":"LiveProgress","description":"A safe projection of the existing Redis run marker."},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":1,"format":"password","title":"Password","writeOnly":true},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id","description":"Select which membership tenant to scope the session to. Defaults to the primary tenant."},"captcha_token":{"type":"string","maxLength":2048,"title":"Captcha Token","default":""}},"additionalProperties":false,"type":"object","required":["email","password"],"title":"LoginRequest","description":"Login payload. ``tenant_id`` optionally selects among the user's tenants."},"LogoutRequest":{"properties":{"refresh_token":{"type":"string","maxLength":512,"minLength":1,"format":"password","title":"Refresh Token","writeOnly":true}},"additionalProperties":false,"type":"object","required":["refresh_token"],"title":"LogoutRequest","description":"Logout payload: revokes the refresh session."},"ManifestBody":{"properties":{"manifest":{"additionalProperties":true,"type":"object","title":"Manifest","description":"The skill manifest as a JSON object (the editor's fields)."}},"type":"object","required":["manifest"],"title":"ManifestBody","description":"A manifest object submitted by the editor (validate) or the manual author path."},"ManifestIn":{"properties":{"survivor_user_id":{"type":"string","format":"uuid","title":"Survivor User Id"},"survivor_email":{"type":"string","title":"Survivor Email","description":"The surviving human's address, as the legacy readers know it."},"participants":{"items":{"$ref":"#/components/schemas/ParticipantIn"},"type":"array","maxItems":50,"minItems":1,"title":"Participants"},"memberships":{"items":{"$ref":"#/components/schemas/MembershipRowIn"},"type":"array","maxItems":500,"title":"Memberships","description":"NOT YET SUPPORTED — must be empty. The recovery ceremony moves credential rows and never memberships, so a non-empty value is refused at approve with `manifest_memberships_unsupported`. The field is published because the document is the whole decision and its digest binds all of it; converging memberships is a later manifest-bound transition.","default":[]},"integration_accounts":{"items":{"$ref":"#/components/schemas/CredentialRowIn"},"type":"array","maxItems":500,"title":"Integration Accounts","default":[]},"pending_connections":{"items":{"$ref":"#/components/schemas/CredentialRowIn"},"type":"array","maxItems":500,"title":"Pending Connections","default":[]}},"additionalProperties":false,"type":"object","required":["survivor_user_id","survivor_email","participants"],"title":"ManifestIn","description":"The decision, as the approver writes it down.\n\nEvery collection is BOUNDED, and the reason is the commit rather than the request. The ceremony\nis one transaction that locks each participant at stage 70 and then every named row in turn,\nand it holds all of them until it returns — so the length of these lists is the length of time\na recovery blocks every other writer that needs one of those users. Unbounded, a generated\ndocument naming a whole tenant's rows is a lock storm nobody typed on purpose. The bounds are\norders of magnitude above a real recovery, which reconciles two humans and names a handful of\nrows; hitting one is a 422 an operator can read, not a database that has gone quiet."},"MarkdownInstructionSkillBody":{"properties":{"markdown":{"type":"string","maxLength":8000,"minLength":1,"title":"Markdown","description":"The skill's SKILL.md: optional `---` front matter (name, description) then markdown instructions."},"recommended_integrations":{"items":{"type":"string"},"type":"array","maxItems":12,"title":"Recommended Integrations","description":"App slugs from the integrations catalog to recommend connecting for this skill."},"skill_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Skill Id","description":"When editing an existing instruction skill, its id. An edit targets this skill and keeps its identity even if the name changed. Omit when creating a new skill."}},"type":"object","required":["markdown"],"title":"MarkdownInstructionSkillBody","description":"The DEFAULT \"Build a skill\" form: a single pasted (or imported) SKILL.md document.\n\nThe teammate pastes standard SKILL.md markdown: an optional YAML front-matter block (``name`` +\n``description``) then plain-markdown instructions. The server parses it (front matter → name/description,\na leading ``# H1`` as the name fallback, the rest as the instruction body) and authors the SAME\n``instructions`` archetype as the typed path, with no separate name/instructions fields. The raw markdown is\npreserved verbatim so re-editing shows the author their own document. ``recommended_integrations`` are\noptional app slugs a teammate enabling the skill is nudged to connect if missing.\n\nThe parsed name is bounded to the same ``MAX_INSTRUCTIONS_TITLE_CHARS`` characters the typed form's\n``title`` field allows (mirrors the ``skill_catalog.title`` column). A longer one is refused with a\nfriendly validation error, the same way a missing name already is, so it never reaches the database."},"McpCatalogOutcomeResponse":{"properties":{"complete":{"type":"boolean","title":"Complete"},"accepted_unique":{"type":"integer","title":"Accepted Unique"},"offered_unique":{"type":"integer","title":"Offered Unique"},"rejected":{"type":"integer","title":"Rejected"},"dropped_pre_schema":{"type":"integer","title":"Dropped Pre Schema"},"reasons":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Reasons"},"observed_at":{"type":"string","format":"date-time","title":"Observed At"}},"type":"object","required":["complete","accepted_unique","offered_unique","rejected","dropped_pre_schema","reasons","observed_at"],"title":"McpCatalogOutcomeResponse","description":"The last catalog reading recorded for a server — what it offered and how much Patricia took.\n\nThis exists because a refusal was previously invisible: a tool whose schema Patricia declines\nyields no spec, so it is simply ABSENT from the listing, indistinguishable from one the server\nwithdrew. The card could show a server as connected and healthy while half its catalog had been\nrefused, and no surface said so.\n\nEvery field describes THE READING, never the account's current rows. On a refused reduction the\nenabled rows are the PREVIOUS catalog, so the two answer different questions and must not be\nmixed in one sentence."},"McpServerResponse":{"properties":{"integration_account_id":{"type":"string","title":"Integration Account Id"},"external_account_id":{"type":"string","title":"External Account Id"},"base_url":{"type":"string","title":"Base Url"},"auth_mode":{"type":"string","title":"Auth Mode"},"header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Header Name"},"negotiated_protocol_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Negotiated Protocol Version"},"connection_generation":{"type":"integer","title":"Connection Generation"},"refreshing":{"type":"boolean","title":"Refreshing"},"last_error_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error Class"},"needs_reauth":{"type":"boolean","title":"Needs Reauth","default":false},"connected_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected By"},"catalog":{"anyOf":[{"$ref":"#/components/schemas/McpCatalogOutcomeResponse"},{"type":"null"}]},"visibility":{"type":"string","title":"Visibility"},"is_mine":{"type":"boolean","title":"Is Mine","default":false},"can_manage":{"type":"boolean","title":"Can Manage","default":false},"can_disconnect":{"type":"boolean","title":"Can Disconnect","default":false},"can_reconsent":{"type":"boolean","title":"Can Reconsent","default":false}},"type":"object","required":["integration_account_id","external_account_id","base_url","auth_mode","connection_generation","refreshing","visibility"],"title":"McpServerResponse","description":"What the dashboard renders on the card."},"MeResponse":{"properties":{"user":{"$ref":"#/components/schemas/UserResponse"},"active_tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Active Tenant Id"},"memberships":{"items":{"$ref":"#/components/schemas/MembershipContext"},"type":"array","title":"Memberships"}},"type":"object","required":["user","active_tenant_id","memberships"],"title":"MeResponse","description":"The authenticated user plus their active tenant and all memberships."},"MeetingErasureReceiptView":{"properties":{"status":{"type":"string","enum":["erased","not_found"],"title":"Status","description":"'erased' when a recording existed and was removed; 'not_found' when there was none."},"complete":{"type":"boolean","title":"Complete","description":"True when everything this erasure reaches is gone, Recall's master recording included. It does not speak for the stores in known_residuals, which no erasure reaches yet."},"deleted":{"additionalProperties":{"type":"integer"},"type":"object","title":"Deleted","description":"Rows removed per store: the recording, its derived memories, its recap emails, and the cached copy of the recap posted into chat."},"known_residuals":{"items":{"type":"string"},"type":"array","title":"Known Residuals","description":"Stores holding meeting-derived content this erasure does not reach — the same list every time, so a residual is never a surprise. Chat history, today."},"vendor_media_deleted":{"type":"boolean","title":"Vendor Media Deleted","description":"Whether Recall's stored media for this meeting was deleted AND verified gone.","default":false},"vendor_residual":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Residual","description":"Why the vendor copy could not be confirmed deleted, when it could not be."}},"type":"object","required":["status","complete"],"title":"MeetingErasureReceiptView","description":"What an erasure actually removed — counts and outcomes, never content.\n\n``status`` is the field to read first, because \"erased\" and \"not_found\" are the two answers a\nrow count cannot tell apart: an erasure that matched nothing looks exactly like one that had\nnothing to match. ``complete`` says whether everything this erasure REACHES is gone, and\n``known_residuals`` names the places it does not reach, so neither field has to carry the other's\nmeaning."},"MeetingFilterPeopleResponse":{"properties":{"owners":{"items":{"$ref":"#/components/schemas/MeetingOwnerOption"},"type":"array","title":"Owners"},"participants":{"items":{"$ref":"#/components/schemas/MeetingParticipantOption"},"type":"array","title":"Participants"}},"type":"object","title":"MeetingFilterPeopleResponse","description":"The people the Meetings list can be filtered by, so the UI never asks anyone to type an id."},"MeetingOwnerOption":{"properties":{"actor_id":{"type":"string","format":"uuid","title":"Actor Id"},"name":{"type":"string","title":"Name","description":"The person's display name: what the picker shows."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Their email, shown under the name to tell namesakes apart."},"meeting_count":{"type":"integer","title":"Meeting Count","description":"How many visible recordings they own."}},"type":"object","required":["actor_id","name","meeting_count"],"title":"MeetingOwnerOption","description":"One selectable meeting owner, with how many of the caller's visible recordings they own."},"MeetingParticipantOption":{"properties":{"name":{"type":"string","title":"Name","description":"The speaker label as it appears in the transcripts."},"meeting_count":{"type":"integer","title":"Meeting Count","description":"How many visible recordings they spoke in."}},"type":"object","required":["name","meeting_count"],"title":"MeetingParticipantOption","description":"One selectable participant, taken from the speaker labels on the transcripts themselves."},"MeetingRecordingDetailView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"The meeting's title, when one was given."},"platform":{"type":"string","title":"Platform","description":"The meeting platform (e.g. 'Zoom', 'Google Meet'), or 'the meeting'."},"status":{"type":"string","title":"Status","description":"Lifecycle: 'requested', 'recording', 'done' (processing), 'ingested' (notes ready), 'failed'."},"requested_at":{"type":"string","format":"date-time","title":"Requested At","description":"When the recording was requested."},"recap_state":{"type":"string","title":"Recap State","description":"Recap delivery state: 'posted' (confirmed delivered), 'not_posted' (attempted, not confirmed), 'pending', 'off' (auto-recap disabled), or 'none' (no recap yet)."},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id","description":"The conversation the recording was asked from (where the recap lives), when known."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"The short failure reason, only when status is 'failed'."},"owner_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner Actor Id","description":"The person this recording belongs to, when the provenance is known."},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name","description":"That person's display name, when they are still a known actor in this workspace."},"attendees":{"items":{"type":"string"},"type":"array","title":"Attendees","description":"Distinct speaker names from the transcript, in speaking order (empty until notes are ready)."},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes","description":"Approximate recorded minutes, from the transcript's spoken span."},"recap_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recap Text","description":"The recap Patricia generated for this meeting, when one was saved."},"speakers":{"items":{"$ref":"#/components/schemas/MeetingSpeakerShare"},"type":"array","title":"Speakers","description":"Transcript-text share by speaker, descending and bounded to 25 speakers."}},"type":"object","required":["id","platform","status","requested_at","recap_state"],"title":"MeetingRecordingDetailView","description":"One recording with its transcript-derived extras (attendees + rough duration)."},"MeetingRecordingHistoryItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"The meeting's title, when one was given."},"platform":{"type":"string","title":"Platform","description":"The meeting platform (e.g. 'Zoom', 'Google Meet'), or 'the meeting'."},"status":{"type":"string","title":"Status","description":"Lifecycle: 'requested', 'recording', 'done' (processing), 'ingested' (notes ready), 'failed'."},"requested_at":{"type":"string","format":"date-time","title":"Requested At","description":"When the recording was requested."},"recap_state":{"type":"string","title":"Recap State","description":"Recap delivery state: 'posted' (confirmed delivered), 'not_posted' (attempted, not confirmed), 'pending', 'off' (auto-recap disabled), or 'none' (no recap yet)."},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id","description":"The conversation the recording was asked from (where the recap lives), when known."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"The short failure reason, only when status is 'failed'."},"owner_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner Actor Id","description":"The person this recording belongs to, when the provenance is known."},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name","description":"That person's display name, when they are still a known actor in this workspace."}},"type":"object","required":["id","platform","status","requested_at","recap_state"],"title":"MeetingRecordingHistoryItem","description":"One recorded meeting in the history list. Never carries the raw meeting URL (PII-adjacent)."},"MeetingRecordingHistoryResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MeetingRecordingHistoryItem"},"type":"array","title":"Items"}},"type":"object","title":"MeetingRecordingHistoryResponse","description":"The workspace's recent recordings, newest first."},"MeetingSpeakerShare":{"properties":{"name":{"type":"string","title":"Name"},"share_pct":{"type":"number","title":"Share Pct"}},"type":"object","required":["name","share_pct"],"title":"MeetingSpeakerShare","description":"One speaker's share of the included transcript text."},"MeetingTranscriptPage":{"properties":{"turns":{"items":{"$ref":"#/components/schemas/MeetingTranscriptTurn"},"type":"array","title":"Turns"},"total":{"type":"integer","title":"Total"},"offset":{"type":"integer","title":"Offset"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["total","offset","limit"],"title":"MeetingTranscriptPage","description":"An offset page over the recording's fully merged transcript turns."},"MeetingTranscriptTurn":{"properties":{"speaker":{"type":"string","title":"Speaker"},"text":{"type":"string","title":"Text"},"start":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Start"}},"type":"object","required":["speaker","text"],"title":"MeetingTranscriptTurn","description":"One readable transcript turn after consecutive same-speaker segments are merged."},"MeetingUsageView":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether meeting recording is enabled for this workspace."},"slots_in_use":{"type":"integer","title":"Slots In Use","description":"Concurrent recording slots currently in use (requested + recording)."},"max_concurrent":{"type":"integer","title":"Max Concurrent","description":"The most bots this workspace may record at once (the slot cap)."},"monthly_minutes_used":{"type":"integer","title":"Monthly Minutes Used","description":"Recorded minutes metered this calendar month."},"monthly_minutes_budget":{"type":"integer","title":"Monthly Minutes Budget","description":"The workspace's recorded-minutes budget for the month."},"active_recordings":{"items":{"$ref":"#/components/schemas/ActiveRecordingView"},"type":"array","title":"Active Recordings","description":"The currently-active recordings, oldest first."}},"type":"object","required":["enabled","slots_in_use","max_concurrent","monthly_minutes_used","monthly_minutes_budget"],"title":"MeetingUsageView","description":"A workspace's live meeting-bot usage: slots in use vs the cap, monthly minutes, and active calls."},"MeetingsEffectiveSettingsView":{"properties":{"recap_email_audience":{"type":"string","enum":["everyone_on_invite","workspace_participants","company_domain","only_me","do_not_send"],"title":"Recap Email Audience"},"recap_email_excludes_externals":{"type":"boolean","title":"Recap Email Excludes Externals","description":"The same clamp as the team field, answered for THIS caller's resolved audience: true when their own recap emails reach nobody outside the workspace even though their audience asks for them. Separate from the team answer, which can differ whenever they override it."},"prep_email_audience":{"type":"string","enum":["all_participants","only_me","do_not_send"],"title":"Prep Email Audience"},"autojoin_scope":{"type":"string","enum":["any_meeting_link","i_host","internal","external","workspace_teammates"],"title":"Autojoin Scope"}},"type":"object","required":["recap_email_audience","recap_email_excludes_externals","prep_email_audience","autojoin_scope"],"title":"MeetingsEffectiveSettingsView","description":"The resolved personal policies this caller actually receives."},"MeetingsPersonalSettingsUpdate":{"properties":{"autojoin_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autojoin Enabled"},"recap_email_audience":{"anyOf":[{"type":"string","enum":["everyone_on_invite","workspace_participants","company_domain","only_me","do_not_send"]},{"type":"null"}],"title":"Recap Email Audience"},"prep_email_audience":{"anyOf":[{"type":"string","enum":["all_participants","only_me","do_not_send"]},{"type":"null"}],"title":"Prep Email Audience"},"autojoin_scope":{"anyOf":[{"type":"string","enum":["any_meeting_link","i_host","internal","external","workspace_teammates"]},{"type":"null"}],"title":"Autojoin Scope"}},"additionalProperties":false,"type":"object","title":"MeetingsPersonalSettingsUpdate","description":"PUT body for the caller's own meeting preferences."},"MeetingsPersonalSettingsView":{"properties":{"autojoin_enabled":{"type":"boolean","title":"Autojoin Enabled","description":"Whether auto-join is on for THIS person's own calendar meetings. On by default; only their explicit opt-out turns it off. It acts only once their own calendar is connected."},"recap_email_audience":{"anyOf":[{"type":"string","enum":["everyone_on_invite","workspace_participants","company_domain","only_me","do_not_send"]},{"type":"null"}],"title":"Recap Email Audience","description":"The caller's override, or null to follow the workspace default."},"prep_email_audience":{"anyOf":[{"type":"string","enum":["all_participants","only_me","do_not_send"]},{"type":"null"}],"title":"Prep Email Audience","description":"The caller's override, or null to follow the workspace default."},"autojoin_scope":{"anyOf":[{"type":"string","enum":["any_meeting_link","i_host","internal","external","workspace_teammates"]},{"type":"null"}],"title":"Autojoin Scope","description":"The caller's override, or null to follow the workspace default."}},"type":"object","required":["autojoin_enabled"],"title":"MeetingsPersonalSettingsView","description":"The caller's own meeting preferences (per-person, self-set)."},"MeetingsSettingsView":{"properties":{"recording_enabled":{"type":"boolean","title":"Recording Enabled","description":"Effective recording enablement: the workspace toggle AND the platform arming."},"team":{"$ref":"#/components/schemas/MeetingsTeamSettingsView"},"personal":{"$ref":"#/components/schemas/MeetingsPersonalSettingsView"},"effective":{"$ref":"#/components/schemas/MeetingsEffectiveSettingsView"},"workspace_domains":{"items":{"type":"string"},"type":"array","title":"Workspace Domains","description":"Every non-consumer email domain represented by non-deactivated workspace members."},"calendar":{"$ref":"#/components/schemas/CalendarConnectionView"},"autojoin":{"$ref":"#/components/schemas/AutojoinStateView"},"recording_visibility_choices":{"items":{"$ref":"#/components/schemas/RecordingVisibilityChoiceView"},"type":"array","title":"Recording Visibility Choices","description":"Every recording-visibility value with the consequence of choosing it, resolved against the workspace's current recap-email audience. The dashboard renders these rather than recomputing anything, so a stated consequence is the sender's own answer."},"recap_email_audience_choices":{"items":{"$ref":"#/components/schemas/RecapEmailAudienceChoiceView"},"type":"array","title":"Recap Email Audience Choices","description":"The same, for the other picker: every recap-email audience value with the consequence of choosing it, resolved against the workspace's current recording policy."},"can_edit_team":{"type":"boolean","title":"Can Edit Team","description":"Whether the caller may change the team-level settings (admin/owner)."},"can_edit_personal":{"type":"boolean","title":"Can Edit Personal","description":"Whether the caller may change their own auto-join opt-in (holds preferences:edit; a read-only viewer cannot). The UI disables the personal switch when false."}},"type":"object","required":["recording_enabled","team","personal","effective","calendar","autojoin","can_edit_team","can_edit_personal"],"title":"MeetingsSettingsView","description":"Everything the dashboard's Meetings view needs in one read: settings, calendar, and the gate."},"MeetingsTeamSettingsUpdate":{"properties":{"autojoin_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autojoin Enabled"},"recap_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Recap Enabled"},"recap_destination":{"anyOf":[{"type":"string","enum":["thread","channel","dm"]},{"type":"null"}],"title":"Recap Destination"},"recap_channel_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Recap Channel Id"},"recap_channel_platform":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Recap Channel Platform"},"recap_share_instructions":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Recap Share Instructions"},"recap_email_audience":{"anyOf":[{"type":"string","enum":["everyone_on_invite","workspace_participants","company_domain","only_me","do_not_send"]},{"type":"null"}],"title":"Recap Email Audience"},"prep_email_audience":{"anyOf":[{"type":"string","enum":["all_participants","only_me","do_not_send"]},{"type":"null"}],"title":"Prep Email Audience"},"autojoin_scope":{"anyOf":[{"type":"string","enum":["any_meeting_link","i_host","internal","external","workspace_teammates"]},{"type":"null"}],"title":"Autojoin Scope"},"recording_visibility":{"anyOf":[{"type":"string","enum":["teammates_and_link","participants_and_teammates","participants","teammates","only_me"]},{"type":"null"}],"title":"Recording Visibility"},"public_access_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public Access Enabled"}},"additionalProperties":false,"type":"object","title":"MeetingsTeamSettingsUpdate","description":"PATCH body for the team settings: every field optional; only what's provided is written.\n\n``recap_channel_id``, ``recap_channel_platform``, and ``recap_share_instructions`` accept an\nexplicit null to clear. Choosing the 'channel' destination requires a channel and platform in\nthe same request or already stored. The server enforces the post-update shape."},"MeetingsTeamSettingsView":{"properties":{"autojoin_enabled":{"type":"boolean","title":"Autojoin Enabled","description":"Whether auto-join is armed for the workspace. On by default (a workspace that never opened these settings reads on); an admin's explicit opt-out turns it off."},"recap_enabled":{"type":"boolean","title":"Recap Enabled","description":"Whether Patricia auto-posts a recap when a meeting's notes are ready."},"recap_destination":{"type":"string","enum":["thread","channel","dm"],"title":"Recap Destination","description":"Where a recap goes when there is no asking thread to reply into (an auto-joined meeting): 'thread' replies where asked, 'channel' posts to the chosen channel, 'dm' messages the person whose meeting it was."},"recap_channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recap Channel Id","description":"The channel recaps go to when the destination is 'channel'."},"recap_channel_platform":{"anyOf":[{"type":"string","enum":["slack","teams"]},{"type":"null"}],"title":"Recap Channel Platform","description":"The stored chat platform for the recap channel, or null when none is stored."},"recap_share_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recap Share Instructions","description":"How Patricia should write recaps (e.g. 'summarize the action items and name each owner'). Steers the recap text only."},"recap_email_audience":{"type":"string","enum":["everyone_on_invite","workspace_participants","company_domain","only_me","do_not_send"],"title":"Recap Email Audience","description":"Workspace default for meeting recap emails."},"recap_email_excludes_externals":{"type":"boolean","title":"Recap Email Excludes Externals","description":"True when this workspace default asks for people who are not in the workspace but recording_visibility refuses them, so none of them receive the recap email. Server-derived from the same two rules the sender applies; the dashboard renders it as a plain warning."},"prep_email_audience":{"type":"string","enum":["all_participants","only_me","do_not_send"],"title":"Prep Email Audience","description":"Workspace default for meeting-preparation emails."},"autojoin_scope":{"type":"string","enum":["any_meeting_link","i_host","internal","external","workspace_teammates"],"title":"Autojoin Scope","description":"Workspace default for which calendar meetings Patricia joins."},"recording_visibility":{"type":"string","enum":["teammates_and_link","participants_and_teammates","participants","teammates","only_me"],"title":"Recording Visibility","description":"This policy controls who can open a recording, its recap, and transcript in the meetings area. It also controls whose chat questions can surface the meeting's notes from Patricia's memory."},"public_access_enabled":{"type":"boolean","title":"Public Access Enabled","description":"Saved intent for future public meeting links."}},"type":"object","required":["autojoin_enabled","recap_enabled","recap_destination","recap_email_audience","recap_email_excludes_externals","prep_email_audience","autojoin_scope","recording_visibility","public_access_enabled"],"title":"MeetingsTeamSettingsView","description":"The workspace-level meeting settings (the enforced ``meeting_bot_tenant_settings`` values)."},"MemberActionBlockedReason":{"type":"string","enum":["rate_limited","once_ever_hello"],"title":"MemberActionBlockedReason","description":"Why the roster's next action is disabled."},"MemberAdoption":{"properties":{"numerator":{"type":"integer","title":"Numerator"},"denominator":{"type":"integer","title":"Denominator"}},"type":"object","required":["numerator","denominator"],"title":"MemberAdoption","description":"Workspace adoption terms derived from the returned roster items."},"MemberDeactivationRequest":{"properties":{"membership_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Membership Ids"}},"additionalProperties":false,"type":"object","required":["membership_ids"],"title":"MemberDeactivationRequest","description":"The exact memberships selected for bulk removal."},"MemberDeactivationResponse":{"properties":{"requested":{"type":"integer","title":"Requested"},"removed":{"type":"integer","title":"Removed"},"refused":{"type":"integer","title":"Refused"},"results":{"items":{"$ref":"#/components/schemas/MemberRemovalResultItem"},"type":"array","title":"Results"},"connections_disconnected":{"type":"integer","title":"Connections Disconnected","default":0},"revocations_queued":{"type":"integer","title":"Revocations Queued","default":0}},"type":"object","required":["requested","removed","refused","results"],"title":"MemberDeactivationResponse","description":"Ordered bulk-removal outcomes and their counts.\n\nCarries the same two credential counts as :class:`MemberRemovalResponse`, and for the same reason:\na departing member's personal connections go with them, and a token they pasted can only be\nrotated at the server that issued it. Removing several members at once is where the most\ncredentials leave at once, so telling the admin here matters more than on the single-member route,\nnot less.\n\nBatch TOTALS rather than per-member figures. What the admin has to act on is \"some of what just\nleft cannot be revoked from here\", which is a property of the batch; attributing a count to each\nmembership would put a number next to people who connected nothing, and the per-member breakdown\nbelongs to the connection list rather than to a removal receipt."},"MemberLifecycleStatus":{"type":"string","enum":["removed","activated","unknown","invite_expired","invited","not_invited"],"title":"MemberLifecycleStatus","description":"The lifecycle state shown for one team member."},"MemberListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MemberRosterRow"},"type":"array","title":"Items"},"adoption":{"$ref":"#/components/schemas/MemberAdoption"},"has_invited_anyone":{"type":"boolean","title":"Has Invited Anyone"}},"type":"object","required":["items","adoption","has_invited_anyone"],"title":"MemberListResponse","description":"Paginated-style wrapper (flat list; no cursor needed at team scale)."},"MemberNextAction":{"type":"string","enum":["send_invite","send_reminder","resend_invite","invite_to_platform","send_email_invite","none"],"title":"MemberNextAction","description":"The action the team roster can offer for one member."},"MemberNextStepOutcome":{"type":"string","enum":["invited_dm","invited_email","reminded_email","skipped_activated","skipped_rate_limited","skipped_no_second_hello","skipped_unknown_history","skipped_already_queued","skipped_guest","skipped_guest_unverified","skipped_no_channel","skipped_attempts_exhausted","skipped_deactivated","skipped_email_suppressed","skipped_owner_role","failed","invited_to_platform","email_invite_sent","skipped_nothing_to_do"],"title":"MemberNextStepOutcome","description":"The result of one server-derived member action."},"MemberNextStepResponse":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"outcome":{"$ref":"#/components/schemas/MemberNextStepOutcome"},"channel":{"anyOf":[{"$ref":"#/components/schemas/MemberOutreachChannel"},{"type":"null"}]}},"type":"object","required":["membership_id","outcome","channel"],"title":"MemberNextStepResponse","description":"The outcome and selected lane for one member's current next step."},"MemberOutreachChannel":{"type":"string","enum":["slack_dm","email"],"title":"MemberOutreachChannel","description":"The delivery lane selected for one member."},"MemberOutreachOutcome":{"type":"string","enum":["invited_dm","invited_email","reminded_email","skipped_activated","skipped_rate_limited","skipped_no_second_hello","skipped_unknown_history","skipped_already_queued","skipped_guest","skipped_guest_unverified","skipped_no_channel","skipped_attempts_exhausted","skipped_deactivated","skipped_email_suppressed","skipped_owner_role","failed"],"title":"MemberOutreachOutcome","description":"The result of one requested member outreach action."},"MemberOutreachRequest":{"properties":{"membership_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Membership Ids"}},"additionalProperties":false,"type":"object","required":["membership_ids"],"title":"MemberOutreachRequest","description":"The exact memberships selected for bulk outreach."},"MemberOutreachResponse":{"properties":{"requested":{"type":"integer","title":"Requested"},"invited":{"type":"integer","title":"Invited"},"reminded":{"type":"integer","title":"Reminded"},"skipped":{"type":"integer","title":"Skipped"},"results":{"items":{"$ref":"#/components/schemas/MemberOutreachResultItem"},"type":"array","title":"Results"}},"type":"object","required":["requested","invited","reminded","skipped","results"],"title":"MemberOutreachResponse","description":"Ordered bulk outreach outcomes and their counts."},"MemberOutreachResultItem":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"outcome":{"$ref":"#/components/schemas/MemberOutreachOutcome"},"channel":{"anyOf":[{"$ref":"#/components/schemas/MemberOutreachChannel"},{"type":"null"}]}},"type":"object","required":["membership_id","outcome","channel"],"title":"MemberOutreachResultItem","description":"The outcome and selected lane for one membership."},"MemberRemovalOutcome":{"type":"string","enum":["removed","already_removed","refused_owner","refused_self","refused_security_hold","refused_status_held","not_found","failed"],"title":"MemberRemovalOutcome","description":"The result of one requested member removal."},"MemberRemovalResponse":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"connections_disconnected":{"type":"integer","title":"Connections Disconnected"},"revocations_queued":{"type":"integer","title":"Revocations Queued"}},"type":"object","required":["membership_id","connections_disconnected","revocations_queued"],"title":"MemberRemovalResponse","description":"What removing one member did BEYOND deactivating them.\n\nThe route used to answer 204. It answers a body now because the removal has a consequence the\nperson doing it cannot otherwise see: a departing member's personal connections are disconnected\nwith them, and one of the two credential kinds cannot be taken back by Patricia at all. An admin\nwho is not told that believes the offboarding is finished when a token they have never seen is\nstill live at somebody else's server.\n\nTwo counts rather than one, because the two kinds owe different actions and a single number could\nonly support the weaker sentence. ``revocations_queued`` is a promise about work that is owed and\ndrained in the background, never a report that the provider has confirmed anything."},"MemberRemovalResultItem":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"outcome":{"$ref":"#/components/schemas/MemberRemovalOutcome"}},"type":"object","required":["membership_id","outcome"],"title":"MemberRemovalResultItem","description":"The removal outcome for one requested membership."},"MemberRosterRow":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle"},"role_code":{"type":"string","title":"Role Code"},"status_code":{"type":"string","title":"Status Code"},"first_interacted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Interacted At"},"first_interacted_platform_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Interacted Platform Code"},"first_signed_in_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Signed In At"},"email_disabled":{"type":"boolean","title":"Email Disabled","default":false},"guest_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Tier"},"status":{"$ref":"#/components/schemas/MemberLifecycleStatus","description":"Activated = the member's first human-directed run in this workspace (mention, DM, message, or a legacy manual run). Silent, failed, parked, reaped and soft-deleted runs count. A console login does not."},"invited_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Invited At"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"last_chat_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Chat At"},"last_console_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Console Activity At"},"next_action":{"$ref":"#/components/schemas/MemberNextAction"},"next_action_enabled":{"type":"boolean","title":"Next Action Enabled"},"next_action_blocked_reason":{"anyOf":[{"$ref":"#/components/schemas/MemberActionBlockedReason"},{"type":"null"}]},"counts_as_adopted":{"type":"boolean","title":"Counts As Adopted"},"counts_toward_adoption":{"type":"boolean","title":"Counts Toward Adoption"}},"type":"object","required":["id","email","name","handle","role_code","status_code","first_interacted_platform_code","first_signed_in_at","status","invited_at","delivered_at","activated_at","last_chat_at","last_console_activity_at","next_action","next_action_enabled","next_action_blocked_reason","counts_as_adopted","counts_toward_adoption"],"title":"MemberRosterRow","description":"A member enriched with lifecycle and activity facts for the roster."},"MemberRow":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle"},"role_code":{"type":"string","title":"Role Code"},"status_code":{"type":"string","title":"Status Code"},"first_interacted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Interacted At"},"first_interacted_platform_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Interacted Platform Code"},"first_signed_in_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Signed In At"},"email_disabled":{"type":"boolean","title":"Email Disabled","default":false},"guest_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Tier"}},"type":"object","required":["id","email","name","handle","role_code","status_code","first_interacted_platform_code","first_signed_in_at"],"title":"MemberRow","description":"A single member returned after a mutation."},"MemberSourceRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"MemberSourceRefReferenceFullValidator"},"MembershipContext":{"properties":{"tenant":{"$ref":"#/components/schemas/TenantSummary"},"role_code":{"type":"string","title":"Role Code"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"}},"type":"object","required":["tenant","role_code","scopes"],"title":"MembershipContext","description":"A user's membership in one tenant: role + the scopes that role grants."},"MembershipRowIn":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"disposition":{"$ref":"#/components/schemas/RowDisposition"}},"additionalProperties":false,"type":"object","required":["membership_id","disposition"],"title":"MembershipRowIn"},"MembershipStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"MembershipStatusRefReferenceFullValidator"},"MemoryKind":{"type":"string","enum":["fact","preference","entity","event","lesson","summary"],"title":"MemoryKind"},"MemoryKindRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"MemoryKindRefReferenceFullValidator"},"MemoryMap":{"properties":{"points":{"items":{"$ref":"#/components/schemas/MemoryMapPoint"},"type":"array","title":"Points"},"total":{"type":"integer","title":"Total","description":"Points in this response. Never a count over rows the caller cannot read."},"ready":{"type":"boolean","title":"Ready","description":"False until a projection has been built for this workspace."},"built_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Built At","description":"When the projection was built, or null when there is none."}},"type":"object","required":["points","total","ready","built_at"],"title":"MemoryMap","description":"Every point of this tenant's projection that the calling person may see.\n\nNever a sample. A map that silently drew some of the corpus would misrepresent the rest of it,\nso this returns the caller's whole visible point set or an empty one."},"MemoryMapMatches":{"properties":{"query":{"type":"string","title":"Query","description":"The search this answers, trimmed exactly as it was applied."},"ids":{"items":{"type":"string"},"type":"array","title":"Ids","description":"Matching memory UUIDs, at most 5000 of them."},"total":{"type":"integer","title":"Total","description":"Every match the caller may see, even when more than `ids` carries."},"truncated":{"type":"boolean","title":"Truncated","description":"True when `total` is larger than the returned `ids`."}},"type":"object","required":["query","ids","total","truncated"],"title":"MemoryMapMatches","description":"Which drawn memories a search matched, as ids the open map already holds.\n\nThe map is not re-sent and no memory text comes back: the client has both, and this answers the\none question it cannot answer alone, because a point carries a preview while the search reads\nthe whole memory."},"MemoryMapPoint":{"properties":{"id":{"type":"string","title":"Id","description":"The memory's UUID. Stable across every recompute."},"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"},"z":{"type":"number","title":"Z"},"group":{"type":"string","title":"Group","description":"Provenance family code, matching BeliefItem.group."},"group_label":{"type":"string","title":"Group Label","description":"Friendly provenance-family label. Never a raw code."},"preview":{"type":"string","title":"Preview","description":"The first 140 characters of the memory."}},"type":"object","required":["id","x","y","z","group","group_label","preview"],"title":"MemoryMapPoint","description":"One memory's place in the picture.\n\n``id`` is the memory's own id, which is what makes a deep link to a point survive every\nrecompute: the projection is rebuilt nightly, but a point is identified by the memory it draws,\nnever by a cluster index or a position.\n\nThe coordinates carry no unit and no meaning of their own. Distance between two points is a\nhint about similarity and never evidence of it, and the axes are not quantities: search,\nneighbours and every count read the real vectors instead."},"MemoryScope":{"type":"string","enum":["tenant","group","conversation","actor"],"title":"MemoryScope"},"MemoryScopeRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"MemoryScopeRefReferenceFullValidator"},"MemoryTotals":{"properties":{"live":{"type":"integer","title":"Live"},"pinned":{"type":"integer","title":"Pinned"},"pruned":{"type":"integer","title":"Pruned"},"expired":{"type":"integer","title":"Expired"}},"type":"object","required":["live","pinned","pruned","expired"],"title":"MemoryTotals"},"MessageActionPolicyBody":{"properties":{"stored_policy_unreadable":{"anyOf":[{"type":"boolean","const":false},{"type":"null"}],"title":"Stored Policy Unreadable"},"dropped_allowlist_entries":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Dropped Allowlist Entries"},"enabled":{"type":"boolean","title":"Enabled"},"reaction_allowlist":{"items":{"type":"string"},"type":"array","title":"Reaction Allowlist"},"proactive_reactions_enabled":{"type":"boolean","title":"Proactive Reactions Enabled"},"proactive_replies_enabled":{"type":"boolean","title":"Proactive Replies Enabled"},"proactive_top_level_posts_enabled":{"type":"boolean","title":"Proactive Top Level Posts Enabled"},"max_reactions_per_channel_per_hour":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Max Reactions Per Channel Per Hour"},"max_replies_per_channel_per_hour":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Max Replies Per Channel Per Hour"},"max_top_level_posts_per_channel_per_hour":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Max Top Level Posts Per Channel Per Hour"}},"additionalProperties":false,"type":"object","required":["enabled","reaction_allowlist","proactive_reactions_enabled","proactive_replies_enabled","proactive_top_level_posts_enabled","max_reactions_per_channel_per_hour","max_replies_per_channel_per_hour","max_top_level_posts_per_channel_per_hour"],"title":"MessageActionPolicyBody","description":"Request body for setting a workspace's message-action policy (admin only, full replace).\n\n**EVERY POLICY FIELD IS REQUIRED, AND THAT IS THE WHOLE DESIGN OF THIS CLASS.** It carries no\ndefaults for any field it can STORE, which is what makes it impossible for this body and\n:class:`MessageActionPolicy` to declare two different defaults for the same field. (The two\nGET echoes below do default to ``None`` — they are accepted so a GET response round-trips,\nexcluded from every dump, and never stored, so neither is a second declaration of a policy\nvalue that could drift.) There is exactly one set of field defaults for the policy in this\nmodule — the policy's own — and it answers exactly one question: what a workspace that has\nNEVER been configured gets. The read path's :data:`_ABSENT_KEY_FALLBACKS` is not a second set:\nit narrows a STORED block that omits a key, where absence is missing information with nobody\nleft to ask. Absence in a REQUEST is different — the caller is present to be told — so \"what\nif they left it out\" is not a defaults question at all; it is a malformed request.\n\nIt was not always so, and the failure that changed it is worth keeping. Every field used to\ncarry its own default, which meant the same field was declared twice with two independent\nvalues, and they drifted: ``proactive_reactions_enabled`` was ``True`` on the policy (shipped\n2026-08-03) and ``False`` here, so a ``PUT`` that omitted it silently disabled the capability\nthat had just shipped, answered 200, and published ``default: false`` in the OpenAPI contract as\nif that were correct. The console had already diagnosed this from the outside and worked around\nit client-side (``useMessageActionPolicy.ts``'s ``Required<…>`` guard, whose comment called a\npartial body \"silent data loss\" until the hole closed); the hole itself was server-side and\nstayed open.\n\nSyncing the two sets of defaults was the obvious repair and is the wrong one: it only changes\nWHICH silent thing an omission does. With them synced, omitting ``proactive_replies_enabled``\nwould GRANT unprompted replies — text that cannot be taken back — to a workspace that had turned\nthem off. The same argument, about the allowlist, was already written in this file before this\nchange: defaulting it to empty \"would make the same partial body silently disable every reaction\ninstead, trading one surprise for a worse one.\"\n\nSo the second set of defaults is deleted rather than corrected. An omitted field is now a 422\nnaming it, which is what the endpoint description and the owner checklist have always told\ncallers to expect (\"send every field\"), and what the console already enforces at compile time.\nLoud beats either flavour of silent."},"MessageActionPolicyResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"reaction_allowlist":{"items":{"type":"string"},"type":"array","title":"Reaction Allowlist"},"proactive_reactions_enabled":{"type":"boolean","title":"Proactive Reactions Enabled"},"proactive_replies_enabled":{"type":"boolean","title":"Proactive Replies Enabled"},"proactive_top_level_posts_enabled":{"type":"boolean","title":"Proactive Top Level Posts Enabled"},"max_reactions_per_channel_per_hour":{"type":"integer","title":"Max Reactions Per Channel Per Hour"},"max_replies_per_channel_per_hour":{"type":"integer","title":"Max Replies Per Channel Per Hour"},"max_top_level_posts_per_channel_per_hour":{"type":"integer","title":"Max Top Level Posts Per Channel Per Hour"},"stored_policy_unreadable":{"type":"boolean","title":"Stored Policy Unreadable","default":false},"dropped_allowlist_entries":{"type":"integer","title":"Dropped Allowlist Entries","default":0}},"additionalProperties":false,"type":"object","required":["enabled","reaction_allowlist","proactive_reactions_enabled","proactive_replies_enabled","proactive_top_level_posts_enabled","max_reactions_per_channel_per_hour","max_replies_per_channel_per_hour","max_top_level_posts_per_channel_per_hour"],"title":"MessageActionPolicyResponse","description":"The effective message-action policy for a workspace."},"MetaAdAccountBody":{"properties":{"ad_account_id":{"type":"string","maxLength":64,"minLength":1,"title":"Ad Account Id"}},"additionalProperties":false,"type":"object","required":["ad_account_id"],"title":"MetaAdAccountBody","description":"Make one of a Meta connection's discovered ad accounts its default."},"MetaAdAccountSummary":{"properties":{"id":{"type":"string","title":"Id"},"account_id":{"type":"string","title":"Account Id"},"name":{"type":"string","title":"Name"},"account_status":{"type":"integer","title":"Account Status"},"status_label":{"type":"string","title":"Status Label"},"currency":{"type":"string","title":"Currency"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"},"user_tasks":{"items":{"type":"string"},"type":"array","title":"User Tasks"},"can_write":{"type":"boolean","title":"Can Write","default":false},"is_active":{"type":"boolean","title":"Is Active","default":false},"enabled":{"type":"boolean","title":"Enabled","default":false}},"type":"object","required":["id","account_id","name","account_status","status_label","currency"],"title":"MetaAdAccountSummary","description":"One Meta ad account this connection can reach, as the picker shows it.\n\nEvery field either makes a row identifiable to a person, or marks it unusable: a closed account,\nor access that cannot write."},"MetaAdAccountsResponse":{"properties":{"ad_accounts":{"items":{"$ref":"#/components/schemas/MetaAdAccountSummary"},"type":"array","title":"Ad Accounts"},"selected_ad_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Ad Account Id"},"enabled_ad_account_ids":{"items":{"type":"string"},"type":"array","title":"Enabled Ad Account Ids"}},"type":"object","title":"MetaAdAccountsResponse","description":"Every ad account a Meta connection discovered, which are switched on, and the default."},"MetaEnabledAdAccountsBody":{"properties":{"enabled_ad_account_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"title":"Enabled Ad Account Ids"}},"additionalProperties":false,"type":"object","title":"MetaEnabledAdAccountsBody","description":"Choose which of a Meta connection's discovered ad accounts Patricia may use.\n\nThe whole set travels on every write rather than one id at a time, so the request states the\nintended end state instead of a delta whose meaning depends on what the server already held."},"ModelChoice":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"provider_label":{"type":"string","title":"Provider Label"},"cost_label":{"type":"string","title":"Cost Label"},"thinking_options":{"items":{"$ref":"#/components/schemas/ThinkingOption"},"type":"array","title":"Thinking Options"},"recommended":{"type":"boolean","title":"Recommended"},"warning":{"type":"string","title":"Warning","default":""}},"type":"object","required":["id","label","description","provider_label","cost_label","thinking_options","recommended"],"title":"ModelChoice","description":"One model a workspace can actually be routed to, as offered in the picker."},"ModelSettingsResponse":{"properties":{"tiers":{"items":{"$ref":"#/components/schemas/ModelTierView"},"type":"array","title":"Tiers"},"selected_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Tier"},"using_recommended_routing":{"type":"boolean","title":"Using Recommended Routing"},"using_recommended":{"type":"boolean","title":"Using Recommended"},"models":{"items":{"$ref":"#/components/schemas/ModelChoice"},"type":"array","title":"Models"},"custom_tier":{"type":"string","title":"Custom Tier"},"custom_scope_note":{"type":"string","title":"Custom Scope Note"},"custom":{"anyOf":[{"$ref":"#/components/schemas/CustomSetupView"},{"type":"null"}]}},"type":"object","required":["tiers","selected_tier","using_recommended_routing","using_recommended","models","custom_tier","custom_scope_note"],"title":"ModelSettingsResponse","description":"The workspace's effective reasoning state, plus what it can choose from."},"ModelSettingsUpdate":{"properties":{"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"custom":{"anyOf":[{"$ref":"#/components/schemas/CustomModelUpdate"},{"type":"null"}]},"reset_to_recommended":{"type":"boolean","title":"Reset To Recommended","default":false}},"additionalProperties":false,"type":"object","title":"ModelSettingsUpdate","description":"PATCH body: pick a level, build a custom setup, or restore the recommendation."},"ModelTierView":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"used_for":{"items":{"type":"string"},"type":"array","title":"Used For"},"model_id":{"type":"string","title":"Model Id"},"model_label":{"type":"string","title":"Model Label"},"reasoning":{"type":"boolean","title":"Reasoning"},"thinking_label":{"type":"string","title":"Thinking Label"},"posture_label":{"type":"string","title":"Posture Label"},"cost_label":{"type":"string","title":"Cost Label"},"between_steps_label":{"type":"string","title":"Between Steps Label"},"effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effort"},"is_chat_default":{"type":"boolean","title":"Is Chat Default"},"overridden":{"type":"boolean","title":"Overridden"},"fallback_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Model Id"},"fallback_model_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Model Label"},"fallback_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Effort"},"fallback_posture_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Posture Label"},"fallback_note":{"type":"string","title":"Fallback Note","default":""}},"type":"object","required":["key","label","description","used_for","model_id","model_label","reasoning","thinking_label","posture_label","cost_label","between_steps_label","effort","is_chat_default","overridden"],"title":"ModelTierView","description":"One reasoning level as the workspace actually runs it."},"MonthlyCapView":{"properties":{"dollars":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dollars"},"source":{"type":"string","title":"Source"},"min_dollars":{"type":"number","title":"Min Dollars"},"max_dollars":{"type":"number","title":"Max Dollars"}},"type":"object","required":["dollars","source","min_dollars","max_dollars"],"title":"MonthlyCapView","description":"The optional workspace-wide monthly spend ceiling.\n\n``dollars=None`` means no monthly cap; the remaining credit balance is the limit."},"OAuthFinalizeBody":{"properties":{"capability":{"type":"string","maxLength":512,"minLength":1,"title":"Capability"},"protocol_version":{"anyOf":[{"type":"integer","const":2},{"type":"null"}],"title":"Protocol Version"}},"additionalProperties":false,"type":"object","required":["capability"],"title":"OAuthFinalizeBody","description":"The capability the dashboard came back with, plus a compatibility marker.\n\n``extra=\"forbid\"`` is what makes the marker work at all: a replica that predates this field\nrejects a request carrying it with a 422 during BODY VALIDATION — before the claim runs, so\nnothing is claimed and no capability is consumed. That is the whole mechanism, and it is why the\nconsole sends the field only when the capability announces a personal ceremony. Sent\nunconditionally it would 422 every TEAM finalize against an old replica, breaking the property\nthe namespace was designed to preserve.\n\nIt is compatibility metadata and NOTHING else. It must never select visibility: the attempt row\nis the only thing that says what scope the human consented to, and a marker in a request body\ncould be changed by whoever sends it."},"OAuthStartBody":{"properties":{"base_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Base Url"},"client_id":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Client Secret"},"account_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"},"visibility":{"anyOf":[{"type":"string","enum":["team","personal"]},{"type":"null"}],"title":"Visibility"}},"additionalProperties":false,"type":"object","required":["base_url"],"title":"OAuthStartBody","description":"The address, and — only on a second attempt — the client credential the server needs.\n\nNo auth-mode chips. The client id and secret are a LATER step by design, offered only after every\nautomatic path has been tried and refused: asking for them up front would make the common case\n(96.2% of hosts register automatically) look like the hard case. The dashboard does not show the\ntwo fields until a start has come back with ``MCP_CLIENT_CREDENTIALS_REQUIRED``, and then it\nresubmits this same body with them filled in.\n\n**Supply both fields or neither, and neither may be blank.** A half pair is a 422, not a partial\ncredential: the two are one value, and the generated types cannot say so on their own — they\ndescribe two independent optional strings, which is what a second consumer would build against."},"OAuthStartResponse":{"properties":{"authorize_url":{"type":"string","title":"Authorize Url"},"attempt_id":{"type":"string","format":"uuid","title":"Attempt Id"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"additionalProperties":false,"type":"object","required":["authorize_url","attempt_id","expires_at"],"title":"OAuthStartResponse","description":"Where to send the browser, and what it will come back as."},"OccurrenceSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"event_type_code":{"type":"string","title":"Event Type Code"},"subject_key":{"type":"string","title":"Subject Key"},"entity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Entity Id"},"delivery_date":{"type":"string","format":"date","title":"Delivery Date"},"due_at":{"type":"string","format":"date-time","title":"Due At"},"occurrence_tz":{"type":"string","title":"Occurrence Tz"},"state_code":{"type":"string","title":"State Code"},"skip_reason_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skip Reason Code"},"attempt_count":{"type":"integer","title":"Attempt Count"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At"},"reconciled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Reconciled At"}},"type":"object","required":["id","installation_id","event_type_code","subject_key","entity_id","delivery_date","due_at","occurrence_tz","state_code","skip_reason_code","attempt_count","sent_at","reconciled_at"],"title":"OccurrenceSummary","description":"One occurrence on the agenda / dry-run / reconcile surfaces (PII-safe: ids, dates, codes only)."},"OffboardCleanupResult":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"accounts":{"type":"integer","title":"Accounts","description":"Connected accounts that were active and got disconnected locally."},"revoked_upstream":{"type":"integer","title":"Revoked Upstream","description":"Of those, how many were confirmed revoked at the provider."},"orphaned_upstream":{"type":"integer","title":"Orphaned Upstream","description":"How many could NOT be confirmed revoked (flagged for the report)."},"adapter_errors":{"type":"integer","title":"Adapter Errors","description":"Of the orphaned ones, how many failed on our side with no provider answer recorded, rather than the provider being unreachable. Anything above zero needs a human: usually a bug to fix, sometimes a debt that cannot be built into an authenticated request, sometimes an absent signing key. Never an outage to wait out.","default":0},"incomplete_accounts":{"type":"integer","title":"Incomplete Accounts","description":"Accounts this pass could not finish: the provider call ran but its bookkeeping would not save, or the turn failed before the call. The counts above describe what happened at the provider; this one says how many accounts the database did not record an outcome for. Above zero means that many accounts have no retry queued, and re-running this route will NOT pick them up — they are already locally disconnected, which is what makes the route idempotent. Read the leak report before revoking anything by hand: one of the cases counted here is a cycle that was superseded, where the member reconnected while the sweep was mid-flight, so the credential is live because it is IN USE rather than leaked. The report tells those apart; this number does not.","default":0}},"type":"object","required":["tenant_id","accounts","revoked_upstream","orphaned_upstream"],"title":"OffboardCleanupResult","description":"Outcome of running the offboard cleanup for one tenant."},"OkResponse":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true}},"type":"object","title":"OkResponse","description":"A minimal success envelope for a mutation with no resource to echo back."},"OnboardingCompleteResponse":{"properties":{"onboarding_completed":{"type":"boolean","title":"Onboarding Completed"}},"type":"object","required":["onboarding_completed"],"title":"OnboardingCompleteResponse","description":"Acknowledgement that the workspace's onboarding is marked complete."},"OnboardingFlowFrameOut":{"properties":{"fallback_text":{"type":"string","title":"Fallback Text"},"lines":{"items":{"type":"string"},"type":"array","title":"Lines"},"buttons":{"items":{"type":"string"},"type":"array","title":"Buttons"}},"additionalProperties":false,"type":"object","required":["fallback_text","lines","buttons"],"title":"OnboardingFlowFrameOut","description":"One rendered message frame, as a transcript rather than a layout."},"OnboardingFlowLaneOut":{"properties":{"platform_code":{"type":"string","title":"Platform Code"},"platform_name":{"type":"string","title":"Platform Name"},"note":{"type":"string","title":"Note","default":""}},"additionalProperties":false,"type":"object","required":["platform_code","platform_name"],"title":"OnboardingFlowLaneOut","description":"One platform lane, with an optional note on where it stops."},"OnboardingFlowMessageOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"note":{"type":"string","title":"Note"},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms"},"frames":{"items":{"$ref":"#/components/schemas/OnboardingFlowFrameOut"},"type":"array","title":"Frames"}},"additionalProperties":false,"type":"object","required":["id","name","kind","note","platforms","frames"],"title":"OnboardingFlowMessageOut","description":"One catalog entry mapped onto a step, with its rendered transcript embedded."},"OnboardingFlowResponse":{"properties":{"flow_enabled":{"type":"boolean","title":"Flow Enabled","description":"settings.welcome_dm_enabled on the api tier; the worker reads its own."},"lanes":{"items":{"$ref":"#/components/schemas/OnboardingFlowLaneOut"},"type":"array","title":"Lanes"},"steps":{"items":{"$ref":"#/components/schemas/OnboardingFlowStepOut"},"type":"array","title":"Steps"},"outside_sequence_messages":{"items":{"$ref":"#/components/schemas/OnboardingFlowMessageOut"},"type":"array","title":"Outside Sequence Messages"}},"additionalProperties":false,"type":"object","required":["flow_enabled","lanes","steps","outside_sequence_messages"],"title":"OnboardingFlowResponse","description":"The whole diagram: lanes, ordered steps, and messages the sequence does not claim."},"OnboardingFlowStepOut":{"properties":{"key":{"type":"string","title":"Key"},"what":{"type":"string","title":"What"},"trigger":{"type":"string","title":"Trigger","description":"'install', 'reply', or 'previous_step'."},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms"},"messages":{"items":{"$ref":"#/components/schemas/OnboardingFlowMessageOut"},"type":"array","title":"Messages"}},"additionalProperties":false,"type":"object","required":["key","what","trigger","platforms","messages"],"title":"OnboardingFlowStepOut","description":"One ``ONBOARDING_SEQUENCE`` step: what it is, what triggers it, who it reaches."},"OnboardingProgressResponse":{"properties":{"slack":{"type":"boolean","title":"Slack","description":"A Slack platform installation exists (Patricia's chat bot is installed)."},"microsoft_teams":{"type":"boolean","title":"Microsoft Teams","description":"A Microsoft Teams platform installation exists (Patricia's chat bot is installed). Named in full so it cannot be misread as the `team` step, which reports whether other people joined the workspace."},"chat_platform":{"$ref":"#/components/schemas/ChatPlatform","description":"The chat platform this workspace connects: derived from how it signed up, and overridden by a live installation. Names which chat step the wizard shows and which platform the dashboard words its copy for."},"company":{"type":"boolean","title":"Company","description":"The company profile holds real content: the website was analyzed, or somebody filled in something anywhere in the Brand Kit (details, voice, words, colours, typography, or a logo in any slot and mode). The seeded brand-kit baseline, add-on and theme toggles, and a bare website URL on its own do not count."},"channels":{"type":"boolean","title":"Channels","description":"Patricia is in at least one Slack channel (a live channel conversation)."},"tools":{"type":"boolean","title":"Tools","description":"At least one active non-Slack integration account the user connected (Patricia-managed auto-provisioned accounts don't count)."},"first_task":{"type":"boolean","title":"First Task","description":"The user gave Patricia a task: a human-directed run (mention/dm/message/manual) or a live scheduled task the user created."},"team":{"type":"boolean","title":"Team","description":"More than one active member, or a pending invitation exists."},"calendar":{"type":"boolean","title":"Calendar","description":"Someone connected their own (personal-visibility) Google Calendar — the exact condition that lets meeting auto-join find and join their meetings (both auto-join toggles are on by default). A team-shared calendar does not count (auto-join can never read one), and neither does a Patricia-managed account the user never connected. Reported as a step but excluded from all_done: connecting a calendar is optional by design."},"skipped":{"items":{"$ref":"#/components/schemas/OnboardingSkipStep"},"type":"array","title":"Skipped","description":"Onboarding steps the workspace chose to skip, sorted by name."},"resume_step":{"$ref":"#/components/schemas/OnboardingResumeStep","description":"The first unresolved wizard step, or done when all wizard work is complete or skipped."},"all_done":{"type":"boolean","title":"All Done","description":"True when every step above except calendar is complete (lets the dashboard hide the card; the optional calendar step must not pin it open)."}},"type":"object","required":["slack","microsoft_teams","chat_platform","company","channels","tools","first_task","team","calendar","skipped","resume_step","all_done"],"title":"OnboardingProgressResponse","description":"Per-step onboarding completion for the caller's workspace.\n\nEvery field is a truthful, tenant-scoped signal: ``false`` whenever the\nunderlying data is absent (a step is never assumed complete). ``all_done`` is\nthe AND of every step except ``calendar`` (optional by design, see the module\ndocstring), so the dashboard can hide the checklist once the workspace is\nfully set up rather than showing a stale 100%."},"OnboardingResumeStep":{"type":"string","enum":["company","tools","slack","microsoft_teams","done"],"title":"OnboardingResumeStep"},"OnboardingSkipRequest":{"properties":{"step":{"$ref":"#/components/schemas/OnboardingSkipStep"}},"type":"object","required":["step"],"title":"OnboardingSkipRequest"},"OnboardingSkipResponse":{"properties":{"step":{"$ref":"#/components/schemas/OnboardingSkipStep"}},"type":"object","required":["step"],"title":"OnboardingSkipResponse"},"OnboardingSkipStep":{"type":"string","enum":["company","tools","slack","microsoft_teams","team"],"title":"OnboardingSkipStep"},"OptOutRequest":{"properties":{"domain_key":{"type":"string","title":"Domain Key"},"entity_id":{"type":"string","format":"uuid","title":"Entity Id"}},"type":"object","required":["domain_key","entity_id"],"title":"OptOutRequest","description":"Opt a subject out of a canonical fact (subject-GLOBAL, shared across every skill referencing it)."},"OrphanedAccount":{"properties":{"id":{"type":"string","title":"Id","description":"IntegrationAccount id."},"tenant_id":{"type":"string","title":"Tenant Id","description":"Owning tenant."},"provider":{"type":"string","title":"Provider","description":"Provider still potentially billing for this account."},"app_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Slug","description":"Connected app/platform slug."},"external_account_id":{"type":"string","title":"External Account Id","description":"The provider-side account id we could not confirm revoked."},"disconnected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disconnected At","description":"When we deactivated it locally (soft-delete time)."},"failure":{"anyOf":[{"$ref":"#/components/schemas/UpstreamRevokeState"},{"type":"null"}],"description":"Why the credential was never confirmed revoked, as an ``upstream_revoke_states`` code: ``provider_error`` (the provider call failed, so retry it), ``adapter_error`` (the fault is ours and no provider answer was recorded, so a retry cannot help: our adapter needs a code fix, or the debt carries too little to build an authenticated request and needs an operator, or a signing key is absent and needs configuration), or ``attempt_pending``. ``attempt_pending`` does NOT mean nothing was attempted: it is written BEFORE the provider call and rewritten only when an outcome or a settled debt supersedes it, so it also sits on a call running right now, on one whose outcome write was rolled back, and on an uninstall tombstone the drainer has already failed against several times. A row can leave it without any debt ever being queued, because a disconnect records its own outcome directly. Read ``retry_ownership`` to tell those apart. Rows reported here are always one of those three; ``revoked`` and ``unsupported`` are not leaks and never appear."},"retry_ownership":{"$ref":"#/components/schemas/RevokeRetryOwnership","description":"Whether anything still owes this credential a kill, and so whether it is yours to act on. Being on this report never meant retries had stopped; this is what tells you. The states are described on the RevokeRetryOwnership schema. What matters at THIS endpoint is that the value is a SNAPSHOT taken during the read, not a promise: a disconnect commits its marker before calling the provider and queues a debt only if that call fails, so an ordinary in-flight disconnect (and every account still ahead of a tenant offboard's serial provider loop) reads ``unowned`` meanwhile. Re-reading is NOT a barrier — a second read of a still-running disconnect says ``unowned`` too. Wait for any disconnect or offboard you know of to finish, THEN re-run the report, and only then act."}},"type":"object","required":["id","tenant_id","provider","external_account_id","retry_ownership"],"title":"OrphanedAccount","description":"A connected account deactivated locally but not confirmed revoked upstream (a COGS leak)."},"OrphanedUpstreamReport":{"properties":{"accounts":{"items":{"$ref":"#/components/schemas/OrphanedAccount"},"type":"array","title":"Accounts"},"count":{"type":"integer","title":"Count","description":"Number of orphaned accounts in scope."}},"type":"object","required":["count"],"title":"OrphanedUpstreamReport","description":"The orphaned-upstream leak report: credentials we could not confirm dead, so they may still\nbe billing. NOT a to-do list — read ``retry_ownership`` per row before touching anything, because\ncleaning up a row a worker still owns races that retry."},"OutreachChannelRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"OutreachChannelRefReferenceFullValidator"},"OutreachPersonalizationRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"OutreachPersonalizationRefReferenceFullValidator"},"OutreachSettingsResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"OutreachSettingsResponse","description":"The workspace activation-outreach switch as stored (fail-closed default OFF)."},"OutreachSettingsUpdate":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"additionalProperties":false,"type":"object","required":["enabled"],"title":"OutreachSettingsUpdate","description":"PATCH body: the one knob. ``StrictBool`` on purpose (matching the stored block's model):\na consent switch must never flip on a coerced ``\"yes\"``/``1``."},"OutreachStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"OutreachStatusRefReferenceFullValidator"},"OverBudgetView":{"properties":{"behavior":{"type":"string","enum":["warn","stop"],"title":"Behavior"},"source":{"type":"string","title":"Source"}},"type":"object","required":["behavior","source"],"title":"OverBudgetView","description":"What happens when a single run reaches its per-run limit.\n\n``\"warn\"`` (the platform default): Patricia keeps going past the limit and tells the owner\nwhat it cost, but a safety stop still ends any run that reaches four times its limit, or\nsooner when the workspace is close to its monthly cap or low on credits. ``\"stop\"``\n(opt-in): the task stops at the limit itself."},"OverrideIneligibleReason":{"type":"string","enum":["critical_tier","mandatory_call","audience_reaching","no_tool_ref","managed_account","tool_disabled","policy_always","tenant_master_disabled","no_caller_actor"],"title":"OverrideIneligibleReason","description":"Why a per-tool \"Run automatically\" override cannot be minted for this tool by this caller.\n\nONE vocabulary for two surfaces that must never disagree: the Tools-tab read renders it as the\nlocked-state tooltip (``AccountToolSummary.override_ineligible_reason``) and the mint route raises\nit as the error envelope's top-level ``code``. A control offered on the read side and then refused\non the write side is the failure this shared enum exists to prevent.\n\nThe first three are *approval-floor* reasons and come from\n:func:`~models.approval_policy.evaluate_tool_approval`, so the read side never re-derives a floor.\nThe rest are account-, tool-, or caller-shaped and are decided by their own owners.\n\n``mandatory_call``, never ``mandatory_provider``: ``core.mandatory_providers.is_mandatory_call``\nis true for a provider-wide floor AND for a Windsor action ref on an account whose provider is not\nmandatory, so the provider-shaped name would read as a bug on that row."},"OwnerIn":{"properties":{"variant":{"type":"string","enum":["dashboard","chat","system","unresolved"],"title":"Variant"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"bridged_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Bridged Actor Id"},"reason":{"anyOf":[{"$ref":"#/components/schemas/UnresolvedReason"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["variant"],"title":"OwnerIn","description":"The owner a credential row carries TODAY, as the approver read it off the case.\n\nMirrors the four-variant sum type the credential plane writes through. It is stated rather than\ninferred because the recovery's per-variant rule depends on it, and because the commit checks\nthis claim against the live row — a document describing a row that has since changed must fail\nrather than move it."},"PackResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"semver":{"type":"string","title":"Semver"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"skill_slugs":{"items":{"type":"string"},"type":"array","title":"Skill Slugs"},"provenance_code":{"type":"string","title":"Provenance Code"},"status_code":{"type":"string","title":"Status Code"}},"type":"object","required":["id","slug","semver","title","description","skill_slugs","provenance_code","status_code"],"title":"PackResponse"},"ParticipantIn":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"expected_credential_epoch":{"type":"integer","title":"Expected Credential Epoch"}},"additionalProperties":false,"type":"object","required":["user_id","expected_credential_epoch"],"title":"ParticipantIn","description":"A user this recovery touches, pinned to the credential epoch it was decided against."},"PasswordLinkRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"captcha_token":{"type":"string","maxLength":2048,"title":"Captcha Token","default":""}},"additionalProperties":false,"type":"object","required":["email"],"title":"PasswordLinkRequest","description":"Ask for a set-password or reset-password link. Answers identically either way."},"PasswordResetRequest":{"properties":{"token":{"type":"string","maxLength":512,"minLength":1,"title":"Token","description":"The opaque token from the emailed link."},"password":{"type":"string","maxLength":128,"minLength":8,"format":"password","title":"Password","writeOnly":true}},"additionalProperties":false,"type":"object","required":["token","password"],"title":"PasswordResetRequest","description":"Redeem a set/reset link and write the new password."},"PaymentMethodList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PaymentMethodView"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PaymentMethodList","description":"GET /v1/billing/payment-methods: the tenant's saved cards (default first)."},"PaymentMethodSyncResult":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PaymentMethodView"},"type":"array","title":"Items"},"refreshed":{"type":"boolean","title":"Refreshed","description":"True when the saved cards were re-read from Stripe just now. False means the list is the last state we saved, either because this workspace has no billing account yet or because Stripe could not be reached."},"notice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notice","description":"A sentence to show the person when the refresh did not happen; null when it did."}},"type":"object","required":["items","refreshed"],"title":"PaymentMethodSyncResult","description":"POST /v1/billing/payment-methods/sync: the saved cards, plus whether Stripe was actually read.\n\nThe list alone cannot tell a caller which answer it got: a Stripe outage returns the local rows\nunchanged, and those look exactly like a successful sync that found the same cards. ``refreshed``\nis the field that separates them, and ``notice`` is the sentence to show the person when it is\nfalse, so a card that Stripe has and we do not is visible instead of simply absent."},"PaymentMethodView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"stripe_payment_method_id":{"type":"string","title":"Stripe Payment Method Id"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last4"},"exp_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exp Month"},"exp_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exp Year"},"is_default":{"type":"boolean","title":"Is Default"}},"type":"object","required":["id","stripe_payment_method_id","brand","last4","exp_month","exp_year","is_default"],"title":"PaymentMethodView","description":"A saved card in the dashboard's payment-methods list.\n\nNon-sensitive fields only: the full number/CVC never leave Stripe. ``id`` is the local\nrow id (used to set-default / remove); ``stripe_payment_method_id`` is the ``pm_…`` handle."},"PendingConnectionSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"app_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Slug"},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Name"},"state":{"type":"string","title":"State"},"message":{"type":"string","title":"Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["id","provider","state","message","created_at"],"title":"PendingConnectionSummary","description":"An in-flight console connect the requester started, so the tab shows honest state, never nothing.\n\n``state`` is ``connecting`` while the connect is live inside its window, or ``failed`` once it either\nreached a terminal failure or the window passed with no account. A ``failed`` chip is dismissible via\n``DELETE /integrations/pending/{id}``. Owner-scoped: only the actor who started the connect sees it."},"PeopleRowSummary":{"properties":{"subject_key":{"type":"string","title":"Subject Key"},"entity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Entity Id"},"display_label":{"type":"string","title":"Display Label"},"status_code":{"type":"string","title":"Status Code"},"facts":{"items":{"$ref":"#/components/schemas/FactCellSummary"},"type":"array","title":"Facts"},"next_delivery_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Next Delivery Date"}},"type":"object","required":["subject_key","entity_id","display_label","status_code","facts","next_delivery_date"],"title":"PeopleRowSummary","description":"One subject row on the ``people_table`` surface: a handle + per-fact cells + a rollup status.\n\nPII-safe: ``display_label`` is a chat handle (a label, not a personal fact); each fact cell carries\nonly the recurring month/day label + resolution status; ``next_delivery_date`` is a derived date."},"PeopleTableResponse":{"properties":{"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"fact_columns":{"items":{"$ref":"#/components/schemas/FactCellSummary"},"type":"array","title":"Fact Columns"},"rows":{"items":{"$ref":"#/components/schemas/PeopleRowSummary"},"type":"array","title":"Rows"}},"type":"object","required":["installation_id","fact_columns","rows"],"title":"PeopleTableResponse","description":"The resolved people-table read-model (fact columns + subject rows) for one installation.\n\n``fact_columns`` are the header cells (``domain_key`` + ``label``) in a deterministic order; each\nrow's ``facts`` list is aligned to the same order so the dashboard renders a stable column layout\nfor any skill's bound facts."},"PermissionRequestRow":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name"},"risk_tier_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Tier Code"},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code"},"can_approve":{"type":"boolean","title":"Can Approve","default":false},"can_deny":{"type":"boolean","title":"Can Deny","default":false},"dispatch_blocked":{"type":"boolean","title":"Dispatch Blocked","description":"True when the bound account is personal and the run's actor is not its connector, so an approval would be refused. Deliberately separate from can_approve, which keeps its own meaning: whether this caller holds approval authority under the audience policy.","default":false},"dispatch_block_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dispatch Block Reason","description":"Machine-readable code naming why dispatch is blocked, or null when it is not."},"input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input","description":"Tool arguments, sanitized. Present only for callers holding runs:execute (the authority that can decide this request); null for read-only callers, which receive input_summary instead. Null with no input_summary means the request carries no stored arguments."},"input_summary":{"anyOf":[{"items":{"$ref":"#/components/schemas/ArgSummaryEntry"},"type":"array"},{"type":"null"}],"title":"Input Summary","description":"Value-free per-argument summary, populated in place of input for callers without runs:execute."},"delivery_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Ref"},"approver_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Approver Actor Id"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","title":"PermissionRequestRow","description":"Row shape for the approval queue.\n\nAll fields optional so ``fields=`` projection validates (runflow pattern).\n\n``input`` is shaped per caller by the router (``routers/permission_requests.py``),\nnever returned raw: sanitized values for callers holding the approval scope\n(``runs:execute``), null with ``input_summary`` populated for plain ``runs:read``\ncallers. The SQL below still selects the stored column; the shaping is response-time."},"PermissionStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"PermissionStatusRefReferenceFullValidator"},"PersonFactSummary":{"properties":{"entity_id":{"type":"string","format":"uuid","title":"Entity Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id"},"status_code":{"type":"string","title":"Status Code"},"recurring_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recurring Month"},"recurring_day":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recurring Day"},"date_value":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Value"},"effective_tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Tz"},"fact_revision":{"type":"integer","title":"Fact Revision"}},"type":"object","required":["entity_id","definition_id","status_code","recurring_month","recurring_day","date_value","effective_tz","fact_revision"],"title":"PersonFactSummary","description":"A resolved person fact (PII-safe: month/day or date, status, tz; never a birth year)."},"Platform":{"type":"string","enum":["slack","teams","console"],"title":"Platform"},"PlatformAuditActions":{"properties":{"items":{"items":{"type":"string"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PlatformAuditActions","description":"Distinct action names, so the console filters with a picker rather than a typed string."},"PlatformAuditEntry":{"properties":{"id":{"type":"string","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"action":{"type":"string","title":"Action"},"principal_type":{"type":"string","title":"Principal Type","description":"Which id space the principal lives in: \"user\" | \"service_key\"."},"principal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Principal Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id","description":"The team the action targeted, when it had one."},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Type"},"resource_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Id"},"result":{"type":"string","title":"Result"},"changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Changes"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"}},"type":"object","required":["id","created_at","action","principal_type","principal_id","result"],"title":"PlatformAuditEntry","description":"One recorded platform-scope action.\n\n``changes`` and ``metadata_`` are rendered but never queryable (the model declares them opaque\nand no route parameter reaches them). ``ip_address`` / ``user_agent`` are absent by design; see\nthe module docstring."},"PlatformAuditPageResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PlatformAuditEntry"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"read_audit_id":{"type":"string","title":"Read Audit Id","description":"The platform_read_audit_logs row recording THIS read. Looking at the trail is audited too."}},"type":"object","required":["items","total","limit","offset","read_audit_id"],"title":"PlatformAuditPageResponse","description":"One page of the trail, plus the id of the read-audit row this request itself produced."},"PlatformRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"PlatformRefReferenceFullValidator"},"PortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"PortalResponse","description":"The Stripe Billing Portal URL a tenant manages its subscription from."},"PreferenceSource":{"type":"string","enum":["explicit","inferred"],"title":"PreferenceSource","description":"How an employee preference was captured.\n\n``EXPLICIT`` preferences are authoritative and Curator-exempt; ``INFERRED``\nones mirror what the reflection loop learned and may decay."},"PreferenceSourceRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"PreferenceSourceRefReferenceFullValidator"},"PreviewRowSummary":{"properties":{"subject_key":{"type":"string","title":"Subject Key"},"entity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Entity Id"},"event_type_code":{"type":"string","title":"Event Type Code"},"would_fire":{"type":"boolean","title":"Would Fire"},"would_post":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Would Post"},"delivery_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Delivery Date"},"channel_id":{"type":"string","title":"Channel Id"},"reason_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason Code"},"basis":{"additionalProperties":true,"type":"object","title":"Basis"}},"type":"object","required":["subject_key","entity_id","event_type_code","would_fire","would_post","delivery_date","channel_id","reason_code","basis"],"title":"PreviewRowSummary","description":"One subject's explainable dry-run line: \"WOULD post '<msg>' on <date>\", plus WHY (PII-safe).\n\n``would_post`` interpolates only the display handle (never a birth date); the birthday's month/day\nis reflected solely as the derived ``delivery_date``. ``reason_code`` FKs the platform reason\ncatalog when it WON'T fire; ``basis`` is the boolean breakdown behind the verdict."},"ProactiveCandidateStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ProactiveCandidateStatusRefReferenceFullValidator"},"ProactiveCooldownView":{"properties":{"value":{"type":"integer","title":"Value"},"default":{"type":"integer","title":"Default"},"source":{"type":"string","title":"Source"},"choices":{"items":{"type":"integer"},"type":"array","title":"Choices"}},"type":"object","required":["value","default","source","choices"],"title":"ProactiveCooldownView","description":"The quiet period (minutes) between two unprompted replies in the same channel."},"ProactiveLimitsResponse":{"properties":{"reply_cap":{"$ref":"#/components/schemas/ProactiveReplyCapView"},"cooldown":{"$ref":"#/components/schemas/ProactiveCooldownView"},"using_recommended":{"type":"boolean","title":"Using Recommended"}},"type":"object","required":["reply_cap","cooldown","using_recommended"],"title":"ProactiveLimitsResponse","description":"Effective proactive-reply limits for the caller's workspace (platform default + override)."},"ProactiveLimitsUpdate":{"properties":{"max_replies_per_channel_per_day":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Replies Per Channel Per Day"},"channel_cooldown_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Channel Cooldown Minutes"},"reset_to_recommended":{"type":"boolean","title":"Reset To Recommended","default":false}},"additionalProperties":false,"type":"object","title":"ProactiveLimitsUpdate","description":"PATCH body: every field optional; only what's provided is written.\n\n``max_replies_per_channel_per_day`` must be within the allowed range and\n``channel_cooldown_minutes`` one of the allowed minute choices (both strict types, so a JSON\n``true``/``false`` can't coerce to a number). ``reset_to_recommended`` clears both overrides and\ncannot be combined with an explicit value."},"ProactiveModeSource":{"type":"string","enum":["channel","workspace","default"],"title":"ProactiveModeSource","description":"Which layer supplied the effective mode."},"ProactiveProgramMode":{"type":"string","enum":["observe","dm_only","full","disabled"],"title":"ProactiveProgramMode","description":"How much a proactive program may do (the staged rollout — §5.1, §7).\n\n``observe`` → the program runs (reads + reasons) but the delivery gate blocks EVERY outbound\n(it only records what it WOULD do); ``dm_only`` → DMs + reactions; ``full`` → also channel\nposts; ``disabled`` → the program does not run at all. Widening past ``observe`` is\nowner/admin-only and is a LATER phase (this phase seeds observe/disabled only)."},"ProactiveReplyCapView":{"properties":{"value":{"type":"integer","title":"Value"},"default":{"type":"integer","title":"Default"},"source":{"type":"string","title":"Source"},"minimum":{"type":"integer","title":"Minimum"},"maximum":{"type":"integer","title":"Maximum"}},"type":"object","required":["value","default","source","minimum","maximum"],"title":"ProactiveReplyCapView","description":"The per-channel daily cap on unprompted replies (effective value + is-it-an-override)."},"ProactiveReplyMode":{"type":"string","enum":["off","mentions_only","proactive"],"title":"ProactiveReplyMode","description":"How freely Patricia replies in a conversation she was not directly addressed in."},"ProviderCount":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id","description":"The tenant whose accounts are counted."},"provider":{"type":"string","title":"Provider","description":"Integration provider (e.g. composio, slack)."},"active_count":{"type":"integer","title":"Active Count","description":"ACTIVE, non-deleted connected accounts for this provider."}},"type":"object","required":["tenant_id","provider","active_count"],"title":"ProviderCount","description":"One (tenant, provider) connected-account tally."},"PublicLinearStatus":{"type":"string","enum":["backlog","todo","doing","done","closed"],"title":"PublicLinearStatus","description":"Tenant-facing Linear workflow buckets."},"PublicRequestStatus":{"type":"string","enum":["received","in_review","planned","closed"],"title":"PublicRequestStatus","description":"The deliberately small lifecycle vocabulary tenants may see."},"PublishVersionRequest":{"properties":{"manifest":{"additionalProperties":true,"type":"object","title":"Manifest"},"files":{"items":{"$ref":"#/components/schemas/BundleFilePayload"},"type":"array","title":"Files"}},"type":"object","required":["manifest"],"title":"PublishVersionRequest","description":"Publish a new immutable version of an existing platform-admin skill."},"PutDraftFileRequest":{"properties":{"path":{"type":"string","maxLength":512,"minLength":1,"title":"Path","description":"The bundle-relative path, e.g. 'references/api.md'."},"kind":{"type":"string","title":"Kind","description":"skill_md · reference · script · asset."},"content":{"type":"string","maxLength":400000,"title":"Content","description":"The file's text."}},"type":"object","required":["path","kind","content"],"title":"PutDraftFileRequest","description":"Write one file into a draft, addressed by its bundle-relative path."},"ReasonSummary":{"properties":{"reason_code":{"type":"string","title":"Reason Code"},"label":{"type":"string","title":"Label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_terminal":{"type":"boolean","title":"Is Terminal"},"applies_to":{"items":{},"type":"array","title":"Applies To"}},"type":"object","required":["reason_code","label","description","is_terminal","applies_to"],"title":"ReasonSummary","description":"A platform reason-catalog entry: the shared worker/UI \"why will / won't fire\" vocabulary."},"RecapChannelOption":{"properties":{"platform":{"type":"string","enum":["slack","teams"],"title":"Platform"},"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"is_member":{"type":"boolean","title":"Is Member"}},"type":"object","required":["platform","id","name","is_member"],"title":"RecapChannelOption","description":"One named PUBLIC chat channel that can receive meeting recaps.\n\nThe list carries public channels only, so it has no ``is_private`` field. Carrying one would\nmean a column that can only ever read ``false``, which a later consumer would reasonably take\nto mean the workspace has no private channels. Filtering happens server side rather than at a\nhigher permission scope so the name never reaches the wire at all, which holds even if the\nscope on the route changes later. ``routers/channel_feeds.py`` withholds private channels the\nsame way."},"RecapEmailAudienceChoiceView":{"properties":{"value":{"type":"string","enum":["everyone_on_invite","workspace_participants","company_domain","only_me","do_not_send"],"title":"Value"},"recap_email_excludes_externals":{"type":"boolean","title":"Recap Email Excludes Externals","description":"What the clamp becomes if this value is saved, holding the workspace's current recording policy. The other direction of the same coupling as the visibility choices, answered by the same function so a surface cannot warn about one direction and stay silent on the other."},"selectable":{"type":"boolean","title":"Selectable","description":"Whether the write path would accept this value for this workspace. Derived by running the write path's own validator, so this list can never offer a value the API would reject."},"unavailable_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unavailable Reason","description":"Why not, when selectable is false: 'no_company_domain'. Null otherwise."}},"type":"object","required":["value","recap_email_excludes_externals","selectable"],"title":"RecapEmailAudienceChoiceView","description":"One recap-email audience option, with the outcome of CHOOSING it and whether it can be chosen."},"RecentDoc":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"path":{"type":"string","title":"Path"},"title":{"type":"string","title":"Title"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","path","title","updated_at"],"title":"RecentDoc","description":"One of the 10 most recently updated ACTIVE brain docs: ordered by ``updated_at`` DESC, then ``path``.\n\nNOT a usage ranking, and there is no usage signal to build one from — see\n:func:`compute_brain_stats`. ``updated_at`` is on the wire because it IS the ranking: a ranked\nlist whose ordering key is invisible invites the reader to guess one, which is how the old\n``hit_count`` column read as a usage measure while holding a constant."},"ReconcileRequest":{"properties":{"posted":{"type":"boolean","title":"Posted"}},"type":"object","required":["posted"],"title":"ReconcileRequest","description":"Resolve a ``delivery_unknown`` occurrence: was the ambiguous post actually made?"},"RecordingVisibilityChoiceView":{"properties":{"value":{"type":"string","enum":["teammates_and_link","participants_and_teammates","participants","teammates","only_me"],"title":"Value"},"behaves_like":{"type":"string","enum":["teammates_and_link","participants_and_teammates","participants","teammates","only_me"],"title":"Behaves Like","description":"The value whose enforced behavior is identical to this one's, which is this value itself when it is the one worth offering. Five stored values enforce three behaviors: 'teammates_and_link' promises a public link that does not exist and 'participants' reads as participant-scoped while enforcing owner-only. A picker offering a distinction the system does not implement is the defect; this field is how a client avoids offering one without keeping its own list of which values are redundant."},"workspace_can_open":{"type":"boolean","title":"Workspace Can Open","description":"Whether a teammate who was not in the meeting can open the recording under this value. The access half of the answer, separate from the email half because the two come apart: a workspace-wide policy can still mail nobody outside the workspace."},"recap_email_excludes_externals":{"type":"boolean","title":"Recap Email Excludes Externals","description":"What the team-level clamp becomes if this value is saved, holding the workspace's current recap-email audience."},"recap_email_reaches_externals":{"type":"boolean","title":"Recap Email Reaches Externals","description":"Whether anybody outside the workspace would actually be mailed the recap under this value. NOT the negation of the field above: both are false whenever the audience never named an outsider to begin with. A client that reads 'not excluded' as 'included' tells a workspace sending no recap email at all that its guests receive one."},"recap_email_clamped_to_owner":{"type":"boolean","title":"Recap Email Clamped To Owner","description":"True when choosing this value collapses the whole recap-email audience to the recording owner, so teammates lose the email too. A wider loss than the field above and a different sentence: calling it 'people outside your workspace miss out' would understate it."}},"type":"object","required":["value","behaves_like","workspace_can_open","recap_email_excludes_externals","recap_email_reaches_externals","recap_email_clamped_to_owner"],"title":"RecordingVisibilityChoiceView","description":"One recording-visibility option, with the outcome of CHOOSING it already worked out.\n\nThe settings pickers save immediately, with no confirm step, so an answer about the pair that is\nalready stored can only describe harm that has happened. These carry the answer for a value that\nhas NOT been saved, resolved against the other setting as it stands, which is what lets the\ndashboard state a consequence next to the option instead of after the write. Server-derived from\nthe same functions the sender runs, so the dashboard performs a lookup and holds no rule of its own."},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","maxLength":512,"minLength":1,"format":"password","title":"Refresh Token","writeOnly":true}},"additionalProperties":false,"type":"object","required":["refresh_token"],"title":"RefreshRequest","description":"Refresh-token rotation payload."},"RegisterBody":{"properties":{"base_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Base Url"},"token":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Token"},"header_name":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Header Name"},"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Label"},"visibility":{"type":"string","enum":["team","personal"],"title":"Visibility","default":"team"}},"additionalProperties":false,"type":"object","required":["base_url"],"title":"RegisterBody","description":"The connect form: an address, an optional credential, an optional nickname, and who it is for.\n\n``visibility`` defaults to TEAM, which is what makes the field safe to add mid-roll: the console\nomits it unless the member deliberately picked a personal connection, and ``extra=\"forbid\"`` means\nan explicit ``\"team\"`` sent to a replica that predates this field would 422 an ordinary connect."},"RegisterRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"captcha_token":{"type":"string","maxLength":2048,"title":"Captcha Token","default":""}},"additionalProperties":false,"type":"object","required":["email"],"title":"RegisterRequest","description":"Sign-up STEP ONE: ask for a verification link. Creates nothing.\n\nThere is deliberately no password field. A password supplied here would have to be stored\nagainst an address nobody has proved they can read, which is exactly the pre-claim this\ntwo-step flow exists to close: the row is later adopted by the real owner's SSO login or\ninvitation with that hash intact, and whoever pre-claimed the address can then sign in as\nthem. The password is chosen in :class:`EmailVerificationRequest`, after the emailed link\ncomes back."},"ReleaseOutcome":{"type":"string","enum":["no_op","ships_new_version","retires_admin_active","hash_collision","no_repo_folder","duplicate_repo_folder","manifest_invalid","strands_admin_active","repo_version_not_live","live_version_ahead","export_missing_or_stale","archetype_change"]},"ReleasePreflightResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"repo_semver":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Semver"},"outcome":{"$ref":"#/components/schemas/ReleaseOutcome"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"live_active_semver":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Live Active Semver"},"live_active_provenance_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Live Active Provenance Code"},"repo_manifest_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Manifest Hash"},"affected_install_count":{"type":"integer","title":"Affected Install Count"},"proposed_platform_admin_count":{"type":"integer","title":"Proposed Platform Admin Count"},"proposed_platform_admin_semvers":{"items":{"type":"string"},"type":"array","title":"Proposed Platform Admin Semvers"}},"type":"object","required":["slug","repo_semver","outcome","detail","live_active_semver","live_active_provenance_code","repo_manifest_hash","affected_install_count","proposed_platform_admin_count","proposed_platform_admin_semvers"],"title":"ReleasePreflightResponse","description":"The next catalog-sync outcome if an adopted definition returns to git ownership."},"ReleaseSkillRequest":{"properties":{"expected_outcome":{"$ref":"#/components/schemas/ReleaseOutcome"},"expected_repo_manifest_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Repo Manifest Hash"}},"type":"object","required":["expected_outcome","expected_repo_manifest_hash"],"title":"ReleaseSkillRequest","description":"The exact release preflight decision that an operator approved."},"RemediationStatus":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"False when API_BRAIN_SALIENCE_REMEDIATION_ENABLED is off, in which case triggering returns 409. Exposed so the console can say so up front instead of offering a control that only fails when pressed."}},"type":"object","required":["enabled"],"title":"RemediationStatus","description":"Whether the one-time salience repair is armed in THIS environment."},"RemediationTriggerResult":{"properties":{"enqueued":{"type":"boolean","title":"Enqueued"},"task_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Id"}},"type":"object","required":["enqueued"],"title":"RemediationTriggerResult","description":"Ack that the one-time salience-remediation fan-out was enqueued."},"RepinInstallRequest":{"properties":{"target_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Version Id"}},"type":"object","title":"RepinInstallRequest","description":"Move one install's pin forward. Defaults to the skill's active version when ``target_version_id`` is null."},"ReplyQualityCount":{"properties":{"total":{"type":"integer","title":"Total"}},"type":"object","required":["total"],"title":"ReplyQualityCount","description":"How many replies match the current filters."},"ReplyQualityOptions":{"properties":{"dimensions":{"items":{"type":"string"},"type":"array","title":"Dimensions"},"review_statuses":{"items":{"type":"string"},"type":"array","title":"Review Statuses"},"review_verdicts":{"items":{"type":"string"},"type":"array","title":"Review Verdicts"},"failure_codes":{"items":{"type":"string"},"type":"array","title":"Failure Codes"},"reply_types":{"items":{"type":"string"},"type":"array","title":"Reply Types"},"outcomes":{"items":{"type":"string"},"type":"array","title":"Outcomes"},"current_scorer_version":{"type":"string","title":"Current Scorer Version"},"max_note_chars":{"type":"integer","title":"Max Note Chars"},"max_bulk_size":{"type":"integer","title":"Max Bulk Size"},"failing_below":{"type":"number","title":"Failing Below"},"passing_from":{"type":"number","title":"Passing From"}},"type":"object","required":["dimensions","review_statuses","review_verdicts","failure_codes","reply_types","outcomes","current_scorer_version","max_note_chars","max_bulk_size","failing_below","passing_from"],"title":"ReplyQualityOptions","description":"Every closed vocabulary the console renders as a picker."},"ReplyQualityRow":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"correctness":{"type":"integer","title":"Correctness"},"correctness_note":{"type":"string","title":"Correctness Note"},"groundedness":{"type":"integer","title":"Groundedness"},"groundedness_note":{"type":"string","title":"Groundedness Note"},"instruction_following":{"type":"integer","title":"Instruction Following"},"instruction_following_note":{"type":"string","title":"Instruction Following Note"},"tone_voice":{"type":"integer","title":"Tone Voice"},"tone_voice_note":{"type":"string","title":"Tone Voice Note"},"actionability":{"type":"integer","title":"Actionability"},"actionability_note":{"type":"string","title":"Actionability Note"},"overall":{"type":"number","title":"Overall"},"reply_type_code":{"type":"string","title":"Reply Type Code"},"outcome_code":{"type":"string","title":"Outcome Code"},"tool_used":{"type":"boolean","title":"Tool Used"},"tool_rounds":{"type":"integer","title":"Tool Rounds"},"tool_families":{"items":{"type":"string"},"type":"array","title":"Tool Families"},"output_type_code":{"type":"string","title":"Output Type Code"},"complexity_code":{"type":"string","title":"Complexity Code"},"judge_model":{"type":"string","title":"Judge Model"},"effort_tier":{"type":"string","title":"Effort Tier"},"judge_cost_micro_usd":{"type":"integer","title":"Judge Cost Micro Usd"},"scorer_version":{"type":"string","title":"Scorer Version"},"rubric_version":{"type":"string","title":"Rubric Version"},"parse_status":{"type":"string","title":"Parse Status"},"sample_reason":{"type":"string","title":"Sample Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"review":{"anyOf":[{"$ref":"#/components/schemas/models__reply_review__ReplyScoreReview__FullValidator"},{"type":"null"}]}},"type":"object","required":["id","tenant_id","correctness","correctness_note","groundedness","groundedness_note","instruction_following","instruction_following_note","tone_voice","tone_voice_note","actionability","actionability_note","overall","reply_type_code","outcome_code","tool_used","tool_rounds","tool_families","output_type_code","complexity_code","judge_model","effort_tier","judge_cost_micro_usd","scorer_version","rubric_version","parse_status","sample_reason","created_at"],"title":"ReplyQualityRow","description":"One scored reply plus the staff review of it, when a reviewer has filed one.\n\n``review`` is ``None`` for a card nobody has looked at yet. That absence is the queue's\ndefault state, not missing data, so the console reads it as \"open\" rather than \"unknown\"."},"ReplyQualitySummaryResponse":{"properties":{"scored_in_window":{"type":"integer","title":"Scored In Window"},"dimension_averages":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"object","title":"Dimension Averages"},"band_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Band Counts"},"triage_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Triage Counts"},"verdict_matrix":{"items":{"$ref":"#/components/schemas/AgreementCell"},"type":"array","title":"Verdict Matrix"},"user_signal_matrix":{"items":{"$ref":"#/components/schemas/AgreementCell"},"type":"array","title":"User Signal Matrix"},"failure_counts":{"items":{"$ref":"#/components/schemas/FailureLabelCount"},"type":"array","title":"Failure Counts"},"scored_today":{"type":"integer","title":"Scored Today"},"spent_today_micro_usd":{"type":"integer","title":"Spent Today Micro Usd"},"daily_budget_micro_usd":{"type":"integer","title":"Daily Budget Micro Usd"},"tenant_daily_cap":{"type":"integer","title":"Tenant Daily Cap"}},"type":"object","required":["scored_in_window","dimension_averages","band_counts","triage_counts","verdict_matrix","user_signal_matrix","failure_counts","scored_today","spent_today_micro_usd","daily_budget_micro_usd","tenant_daily_cap"],"title":"ReplyQualitySummaryResponse","description":"The console header. Rates are computed client-side from these raw counts.\n\nEvery average is ``float | None`` and every rate is derived from counts that may be zero:\nan empty window must render as \"no data\", never as a score of 0, which on a 1-to-5 rubric\nwould read as the worst quality ever recorded."},"ReplyReviewRequest":{"properties":{"status_code":{"type":"string","title":"Status Code","description":"Where this card goes in the queue: open, acknowledged, escalated or dismissed.","default":"acknowledged"},"verdict_code":{"type":"string","title":"Verdict Code","description":"Was the judge right about this reply: agree, too_strict, too_lenient, or unset when the reviewer is only triaging and has no opinion on the score.","default":"unset"},"failure_code":{"type":"string","title":"Failure Code","description":"What actually went wrong, from the closed cause list. Empty means unlabelled.","default":""},"note":{"type":"string","maxLength":2000,"title":"Note","description":"Optional reviewer note.","default":""}},"additionalProperties":false,"type":"object","title":"ReplyReviewRequest","description":"A reviewer's decision about one scored reply.\n\n``extra=\"forbid\"`` so a misspelled field is a 422 rather than a silently dropped decision.\nA reviewer who thinks they recorded a verdict and did not is the worst outcome here."},"RequestSeverity":{"type":"string","enum":["blocker","high","medium","low"]},"RequestSort":{"type":"string","enum":["created_at:desc","created_at:asc"]},"ResendResponse":{"properties":{"channels":{"items":{"type":"string"},"type":"array","title":"Channels"},"skipped_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skipped Reason"}},"type":"object","required":["channels"],"title":"ResendResponse","description":"POST /members/{id}/resend response: channels enqueued this call.\n\n``skipped_reason`` is set when nothing was enqueued for a knowable reason: nobody has\npermitted this send (``\"activation_outreach_disabled\"``: neither the workspace opt-in nor an\nowner's authorization for this person), the workspace opt-in is on but nobody there has given\nPatricia a task in chat yet (``\"workspace_has_not_used_patricia\"``), the member is a guest,\ntheir one hello is already spent, or the DM has already failed its attempt allowance\n(``\"welcome_dm_attempts_exhausted\"``). ``None`` with empty ``channels`` means every channel was\nalready outreached."},"RevokeClearanceRefusal":{"type":"string","enum":["not_revoke_failed","live_debt_exists"],"title":"RevokeClearanceRefusal","description":"Why a revoke-failure clearance did not take. DERIVED at the point of refusal, never stored.\n\n- ``NOT_REVOKE_FAILED``: the row was not at ``revoke_failed``. Already released by an earlier\n  clearance, or never fenced. Nothing to do.\n- ``LIVE_DEBT_EXISTS``: the row is fenced AND a non-terminal outbox debt is still owed on the\n  credential, so a worker may yet kill it. The leak report shows this account as ``owned``. Wait\n  for the debt to settle; if it dead-letters, the clearance becomes available."},"RevokeFailureClearance":{"properties":{"upstream_confirmed_revoked":{"type":"boolean","title":"Upstream Confirmed Revoked","description":"True when the operator verified in the provider's own console that the credential is gone. False when they are accepting a leak they could not kill — the account then stays on the orphan report, because it may still be billing."}},"type":"object","required":["upstream_confirmed_revoked"],"title":"RevokeFailureClearance","description":"Which of the two decisions the operator is recording.\n\nClearing a dead letter always means the same thing to the MEMBER — the fence lifts and they can\nconnect that app again — but it can mean either of two opposite things about the CREDENTIAL, and\nthe COGS orphan report needs to know which. Confirmed in the provider's console: it is dead, and\nreporting it as a live charge for ever is a false positive nobody can clear. Accepted as a leak:\nit may still be billing, and quietly dropping it from the report is how a real cost disappears.\n\nRequired rather than defaulted, because either default silently answers a money question on the\noperator's behalf."},"RevokeFailureClearanceResult":{"properties":{"account":{"type":"string","title":"Account"},"tenant_id":{"type":"string","title":"Tenant Id"},"cleared":{"type":"boolean","title":"Cleared","description":"False when the clearance did not take; see ``refusal`` for why."},"refusal":{"anyOf":[{"$ref":"#/components/schemas/RevokeClearanceRefusal"},{"type":"null"}],"description":"Why the clearance did not take. Null when ``cleared`` is true. ``not_revoke_failed``: the row was not fenced, so there was nothing to release. ``live_debt_exists``: it IS fenced but a worker is still owed a kill on the credential (the leak report shows it as ``owned``) — wait for that debt to settle rather than retrying the clearance. Read as a hint, not a verdict: it is measured just after the write rather than inside it, so a debt that settles in that instant reports ``not_revoke_failed``. ``cleared`` is exact."},"still_reported_as_orphaned":{"type":"boolean","title":"Still Reported As Orphaned","description":"True when the account remains on the COGS orphan report — either the operator accepted the leak, or the row was not theirs to clear."}},"type":"object","required":["account","tenant_id","cleared","still_reported_as_orphaned"],"title":"RevokeFailureClearanceResult","description":"What the operator's clearance did.\n\n``cleared`` is false for two different reasons, and ``refusal`` says which. Reported rather than\nraised, so a double-click is a no-op with an honest answer instead of an error about a state the\noperator already wanted — but \"nothing to do\" and \"a worker still owns this\" are opposite next\nactions, so they are not reported as the same thing."},"RevokeRetryOwnership":{"type":"string","enum":["owned","dead_lettered","unowned"],"title":"RevokeRetryOwnership","description":"Whether anything is still trying to revoke a reported credential, as of this read.\n\nBeing on the leak report never meant retries had stopped, and this is the field that says so. It\nis a snapshot taken while the report was built, not a promise about the future.\n\n- ``OWNED``: something still owes this credential a revoke and may yet perform it. Do not clean\n  the credential up at the provider by hand — you would race that attempt.\n- ``DEAD_LETTERED``: attempts were exhausted and nothing will retry. This is the state the\n  revoke-failure clearance route accepts, and the one that is yours to act on.\n- ``UNOWNED``: nothing was owed when the report ran. Usually that means no retry is coming, but\n  it is also what an in-flight disconnect looks like, because a disconnect records a debt only\n  after its provider call fails. Wait for any disconnect or offboard you know of to finish before\n  treating a row as abandoned."},"RiskTier":{"type":"string","enum":["read_only","low","medium","high","critical"],"title":"RiskTier"},"RiskTierRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"RiskTierRefReferenceFullValidator"},"Role":{"type":"string","enum":["owner","admin","member","viewer"],"title":"Role"},"RoleRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"RoleRefReferenceFullValidator"},"RosterState":{"type":"string","enum":["not_connected","unavailable","listed"],"title":"RosterState","description":"Whether this workspace's Slack roster can be shown at all."},"RosterSyncPolicyBody":{"properties":{"include_full_members":{"type":"boolean","title":"Include Full Members","default":true},"include_multi_channel_guests":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Multi Channel Guests"},"include_single_channel_guests":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Single Channel Guests"},"include_guests":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Guests"},"admins_only":{"type":"boolean","title":"Admins Only","default":false}},"additionalProperties":false,"type":"object","title":"RosterSyncPolicyBody","description":"Admin request body to set the roster-sync policy (who joins from Slack)."},"RosterSyncPolicyResponse":{"properties":{"include_full_members":{"type":"boolean","title":"Include Full Members"},"include_multi_channel_guests":{"type":"boolean","title":"Include Multi Channel Guests"},"include_single_channel_guests":{"type":"boolean","title":"Include Single Channel Guests"},"admins_only":{"type":"boolean","title":"Admins Only"},"include_guests":{"type":"boolean","title":"Include Guests"}},"type":"object","required":["include_full_members","include_multi_channel_guests","include_single_channel_guests","admins_only","include_guests"],"title":"RosterSyncPolicyResponse","description":"The tenant's effective roster-sync policy (admin view)."},"RowDisposition":{"type":"string","enum":["approved","hostile"],"title":"RowDisposition","description":"What the approver decided about one row. Two answers, and no default.\n\nThere is deliberately no \"unknown\" member. A row the approver did not classify is a row the\nmanifest does not name, and a row the manifest does not name is never touched — absence is the\nsafe state, so representing indecision inside the document would create a third behaviour\nnobody approved."},"RunDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"trigger_code":{"$ref":"#/components/schemas/RunTrigger"},"trigger_context":{"anyOf":[{"$ref":"#/components/schemas/RunTriggerContext"},{"type":"null"}]},"message_excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Excerpt"},"status_code":{"$ref":"#/components/schemas/RunStatus"},"truncated":{"type":"boolean","title":"Truncated","default":false},"no_result":{"type":"boolean","title":"No Result","default":false},"silent":{"type":"boolean","title":"Silent","default":false},"model":{"type":"string","title":"Model"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"cache_read_tokens":{"type":"integer","title":"Cache Read Tokens"},"cache_write_tokens":{"type":"integer","title":"Cache Write Tokens"},"cost_micro_usd":{"type":"integer","title":"Cost Micro Usd"},"budget_micro_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Micro Usd"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"peekable_skill_slugs":{"items":{"type":"string"},"type":"array","title":"Peekable Skill Slugs","description":"Skill slugs this run loaded that the peek drawer (GET /skill-catalog/{slug}) would serve right now. Gated by the skills:read scope: a caller who holds runs:read but not skills:read always gets an empty list here, even for a run that did load a skill."},"progress":{"anyOf":[{"$ref":"#/components/schemas/RunProgressOut"},{"type":"null"}],"description":"Live progress for this run. no_signal means the API cannot observe the run right now, not that the run is healthy. Always null for a terminal run."},"credits":{"type":"integer","title":"Credits","description":"Credits consumed by this run (metered COGS → whole credits), the dashboard usage unit.","readOnly":true}},"type":"object","required":["id","tenant_id","trigger_code","status_code","model","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","cost_micro_usd","created_at","updated_at","credits"],"title":"RunDetailResponse","description":"``GET /runs/{id}`` with live progress and this run's peekable-skill signal.\n\n``progress`` projects the Redis marker for a non-terminal run. It stays explicit when no live\nmarker can be observed, and it is always null after the run reaches a terminal status.\n\n``peekable_skill_slugs`` names the distinct skill slugs THIS run loaded\n(``read_skill_file`` / ``stage_skill_scripts``) that ``GET /skill-catalog/{slug}`` would answer\nfor the caller right now — resolved through the exact same predicate that route serves by\n(:func:`services.skill_platform.catalog_detail.resolve_peekable_skill_slugs`), so the dashboard's\n\"See skill\" button can never offer a slug the peek drawer would then refuse. Deliberately absent\nfrom the list route: it costs a per-run resolution the run list has no use for, so only the detail\nload pays it."},"RunHistoryRow":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"trigger_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Code"},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits"},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"activity_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activity Title"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"actor_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Label"}},"type":"object","title":"RunHistoryRow","description":"Row shape returned by the run-history query.\n\nUsage is reported to the dashboard as ``credits``, the run's metered COGS\nconverted to whole credits (half-up), matching the credit ledger. ``total_tokens``\n(input + output) is also carried for internal/admin callers; the raw dollar cost\n(``cost_micro_usd``) is never surfaced (pricing-v2 §8a). All fields optional so\n``fields=`` projection validates (runflow pattern).\n\n``activity_title`` is the real thing that started the run (a schedule name, or the\nfirst line of a directed message), approver-gated like the trigger-context prompt:\na caller who cannot decide an approval receives ``None`` and the dashboard shows the\ngeneric trigger label instead. ``actor_id`` / ``actor_label`` attribute the run to the\nHUMAN it ran as: ``actor_id`` is null for a system/bot/headless run (no human owner),\nand ``actor_label`` is resolved router-side (null → the dashboard renders Patricia; a\ndeparted teammate reads \"Former member\")."},"RunProgressOut":{"properties":{"state":{"type":"string","enum":["working","waiting_approval","no_signal"],"title":"State","description":"Live marker state. no_signal means the API cannot observe the run right now. It is not a claim that the run is healthy."},"activity":{"type":"string","title":"Activity","description":"Newest reported step label, or an empty string when unknown."},"steps":{"items":{"type":"string"},"type":"array","title":"Steps","description":"Recent reported step labels, with the newest label last."},"waiting_on":{"type":"string","title":"Waiting On","description":"Approval label when the run is waiting, or an empty string otherwise."},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"When the live marker started this run."},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"When the live marker last changed."}},"type":"object","required":["state","activity","steps","waiting_on"],"title":"RunProgressOut","description":"The live progress signal for a non-terminal run."},"RunSort":{"type":"string","enum":["created_at:desc","created_at:asc"]},"RunStatsBucket":{"properties":{"date":{"type":"string","format":"date-time","title":"Date","description":"Truncated UTC start of the period (midnight; Monday for week, 1st for month)."},"runs":{"type":"integer","title":"Runs","description":"Runs created in this period."},"credits":{"type":"integer","title":"Credits","description":"Credits consumed in this period (metered COGS converted to whole credits)."},"tokens":{"type":"integer","title":"Tokens","description":"Summed input + output tokens for this period (internal/admin; dashboard uses credits)."},"by_source":{"items":{"$ref":"#/components/schemas/RunStatsBucketSource"},"type":"array","title":"By Source","description":"Per-source credit split of this bucket; empty on a zero-filled period. Slices sum to `credits`."}},"type":"object","required":["date","runs","credits","tokens","by_source"],"title":"RunStatsBucket","description":"One zero-filled timeline period: its UTC start plus run count and usage.\n\n``credits`` is the customer-facing consumption for the period (metered COGS →\nwhole credits, half-up); ``tokens`` is the raw input+output sum kept for\ninternal/admin callers. ``by_source`` splits ``credits`` across the period's run\nsources for the stacked chart (empty on a zero-filled period; the slice credits\nare a display allocation that sums exactly to this bucket's ``credits``)."},"RunStatsBucketSource":{"properties":{"source":{"type":"string","title":"Source","description":"Run trigger code (mention / dm / message / cron / heartbeat / …)."},"runs":{"type":"integer","title":"Runs","description":"Runs from this source in this bucket."},"credits":{"type":"integer","title":"Credits","description":"This source's allocated share of the bucket's credit total (sums to the bucket's `credits`)."}},"type":"object","required":["source","runs","credits"],"title":"RunStatsBucketSource","description":"One run-source (``trigger_code``) slice of a single timeline bucket.\n\n``credits`` is a DISPLAY ALLOCATION of the parent bucket's whole-credit total, not\nan independently rounded figure. Credits are produced by rounding each aggregate's\nsummed micro-USD half-up ONCE (``cost_micro_usd_to_credits``), so rounding each\nsource on its own would not sum back to the bucket total. The service instead\napportions the bucket's ``credits`` across its sources by the largest remainder of\ntheir raw micro-USD shares (ties broken by ``source`` code ascending), so the slice\ncredits sum EXACTLY to the parent bucket's ``credits``, within that bucket only,\nnever across buckets nor against the window-level ``by_source``. ``runs`` is the\ntrue per-source run count for the bucket."},"RunStatsByMemberResponse":{"properties":{"members":{"items":{"$ref":"#/components/schemas/RunStatsMemberSlice"},"type":"array","title":"Members","description":"Per-actor slices, most credits first (then tokens, runs, actor_id); active members only."}},"type":"object","required":["members"],"title":"RunStatsByMemberResponse","description":"Per-member run/usage breakdown for a tenant over a UTC date window.\n\nBacks the Usage → \"Per team\" table: usage attributed per teammate (per actor),\nin **credits** (never dollars; pricing-v2 §8a), most credits first. Members with\nno runs in the window are omitted (the table shows only who was active)."},"RunStatsMemberSlice":{"properties":{"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id","description":"The run actor's id, or null for unattributed (automated / system) runs."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The actor's display name; null for the automated slice or a removed member."},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle","description":"The actor's chat handle (e.g. Slack @handle) when known, else null."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The actor's email when known, else null."},"runs":{"type":"integer","title":"Runs","description":"Runs this teammate triggered in the window."},"credits":{"type":"integer","title":"Credits","description":"Credits consumed by this teammate's runs (metered COGS converted to whole credits)."},"total_tokens":{"type":"integer","title":"Total Tokens","description":"Summed input + output tokens for this teammate's runs (internal/admin; dashboard uses credits)."}},"type":"object","required":["actor_id","name","handle","email","runs","credits","total_tokens"],"title":"RunStatsMemberSlice","description":"One teammate's run count + token usage over the window (the \"Per team\" breakdown).\n\nRuns are attributed by ``AgentRun.actor_id``, the platform identity that\ntriggered the run. Runs with no actor (e.g. scheduled / system work) collapse\ninto a single ``actor_id = null`` slice the dashboard labels \"Automated\". A run\nwhose actor was later removed (soft-deleted) keeps its own ``actor_id`` slice\nbut with null ``name`` / ``handle`` / ``email`` (rendered as \"Former member\")."},"RunStatsResponse":{"properties":{"timeline":{"items":{"$ref":"#/components/schemas/RunStatsBucket"},"type":"array","title":"Timeline","description":"Per-period buckets, zero-filled across the whole window."},"totals":{"$ref":"#/components/schemas/RunStatsTotals","description":"Window totals for the KPI cards."},"by_source":{"items":{"$ref":"#/components/schemas/RunStatsSourceSlice"},"type":"array","title":"By Source","description":"Split by run source, most runs first."},"previous_totals":{"anyOf":[{"$ref":"#/components/schemas/RunStatsTotals"},{"type":"null"}],"description":"Totals for the shifted prior window, populated only when `compare` is set, else null."}},"type":"object","required":["timeline","totals","by_source","previous_totals"],"title":"RunStatsResponse","description":"Aggregate run/usage stats for a tenant over a UTC date window."},"RunStatsSourceSlice":{"properties":{"source":{"type":"string","title":"Source","description":"Run trigger code (mention / dm / message / cron / heartbeat / …)."},"runs":{"type":"integer","title":"Runs","description":"Runs created from this source in the window."},"credits":{"type":"integer","title":"Credits","description":"Credits consumed by this source (metered COGS converted to whole credits)."},"tokens":{"type":"integer","title":"Tokens","description":"Summed input + output tokens for this source (internal/admin; dashboard uses credits)."}},"type":"object","required":["source","runs","credits","tokens"],"title":"RunStatsSourceSlice","description":"Run count + usage for one run source (``trigger_code``)."},"RunStatsTotals":{"properties":{"runs":{"type":"integer","title":"Runs","description":"Total runs created in the window."},"credits":{"type":"integer","title":"Credits","description":"Total credits consumed in the window (metered COGS → whole credits), the headline usage metric."},"total_tokens":{"type":"integer","title":"Total Tokens","description":"Total input + output tokens across runs (internal/admin; the dashboard shows credits)."},"success_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Success Rate","description":"Percentage (0–100) of terminal runs that completed successfully; null when no run has finished."}},"type":"object","required":["runs","credits","total_tokens","success_rate"],"title":"RunStatsTotals","description":"Window totals for the KPI cards.\n\n``success_rate`` is computed over **terminal** runs only (``completed`` /\n``failed`` / ``cancelled`` / ``denied_autonomous``) as the percentage that\n``completed``. It is ``null`` until at least one run in the window has reached a\nterminal state. A run the authority model refused counts in the denominator:\nit finished without succeeding, so excluding it would flatter the rate."},"RunStatus":{"type":"string","enum":["queued","running","waiting_approval","suspended","completed","failed","cancelled","denied_autonomous"],"title":"RunStatus"},"RunStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"RunStatusRefReferenceFullValidator"},"RunTrigger":{"type":"string","enum":["mention","dm","message","proactive","cron","event","heartbeat","discovery","onboarding","manual","spawn"],"title":"RunTrigger"},"RunTriggerAttachment":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"}},"type":"object","title":"RunTriggerAttachment","description":"Read-safe metadata for a file attached to the message that started a run."},"RunTriggerContext":{"properties":{"sender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender"},"attachments":{"items":{"$ref":"#/components/schemas/RunTriggerAttachment"},"type":"array","title":"Attachments","default":[]},"schedule_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"cron_job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Job Id"},"one_shot":{"type":"boolean","title":"One Shot","default":false}},"type":"object","title":"RunTriggerContext","description":"Curated provenance for the request card at the start of a run timeline."},"RunTriggerRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"RunTriggerRefReferenceFullValidator"},"SalienceBucket":{"properties":{"bucket":{"type":"string","title":"Bucket"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["bucket","count"],"title":"SalienceBucket"},"ScopeKindCount":{"properties":{"scope_code":{"type":"string","title":"Scope Code"},"kind_code":{"type":"string","title":"Kind Code"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["scope_code","kind_code","count"],"title":"ScopeKindCount"},"SearchResponse_ActorKindRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ActorKindRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[ActorKindRefReferenceFullValidator]"},"SearchResponse_BrainDocScopeRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BrainDocScopeRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[BrainDocScopeRefReferenceFullValidator]"},"SearchResponse_ConversationKindRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConversationKindRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[ConversationKindRefReferenceFullValidator]"},"SearchResponse_CronKindRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CronKindRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[CronKindRefReferenceFullValidator]"},"SearchResponse_DocStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DocStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[DocStatusRefReferenceFullValidator]"},"SearchResponse_GroupStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GroupStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[GroupStatusRefReferenceFullValidator]"},"SearchResponse_GroupSuggestionStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GroupSuggestionStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[GroupSuggestionStatusRefReferenceFullValidator]"},"SearchResponse_IntegrationStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/IntegrationStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[IntegrationStatusRefReferenceFullValidator]"},"SearchResponse_IntegrationVisibilityRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/IntegrationVisibilityRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[IntegrationVisibilityRefReferenceFullValidator]"},"SearchResponse_InvitationStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/InvitationStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[InvitationStatusRefReferenceFullValidator]"},"SearchResponse_LessonStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/LessonStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[LessonStatusRefReferenceFullValidator]"},"SearchResponse_MemberSourceRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MemberSourceRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[MemberSourceRefReferenceFullValidator]"},"SearchResponse_MembershipStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MembershipStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[MembershipStatusRefReferenceFullValidator]"},"SearchResponse_MemoryKindRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MemoryKindRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[MemoryKindRefReferenceFullValidator]"},"SearchResponse_MemoryScopeRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MemoryScopeRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[MemoryScopeRefReferenceFullValidator]"},"SearchResponse_OutreachChannelRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OutreachChannelRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[OutreachChannelRefReferenceFullValidator]"},"SearchResponse_OutreachPersonalizationRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OutreachPersonalizationRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[OutreachPersonalizationRefReferenceFullValidator]"},"SearchResponse_OutreachStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OutreachStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[OutreachStatusRefReferenceFullValidator]"},"SearchResponse_PermissionStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PermissionStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[PermissionStatusRefReferenceFullValidator]"},"SearchResponse_PlatformRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PlatformRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[PlatformRefReferenceFullValidator]"},"SearchResponse_PreferenceSourceRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PreferenceSourceRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[PreferenceSourceRefReferenceFullValidator]"},"SearchResponse_ProactiveCandidateStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ProactiveCandidateStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[ProactiveCandidateStatusRefReferenceFullValidator]"},"SearchResponse_RiskTierRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RiskTierRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[RiskTierRefReferenceFullValidator]"},"SearchResponse_RoleRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RoleRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[RoleRefReferenceFullValidator]"},"SearchResponse_RunStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RunStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[RunStatusRefReferenceFullValidator]"},"SearchResponse_RunTriggerRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RunTriggerRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[RunTriggerRefReferenceFullValidator]"},"SearchResponse_TenantStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TenantStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[TenantStatusRefReferenceFullValidator]"},"SearchResponse_ToolCallStatusRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ToolCallStatusRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[ToolCallStatusRefReferenceFullValidator]"},"SearchResponse_ToolKindRefReferenceFullValidator_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ToolKindRefReferenceFullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchResponse[ToolKindRefReferenceFullValidator]"},"ServerFingerprintBody":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name","description":"What the person called this server in their own setup."},"address":{"anyOf":[{"type":"string","maxLength":253,"pattern":"^[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$"},{"type":"null"}],"title":"Address","description":"The server's hostname alone, with no scheme, path or query."},"package":{"anyOf":[{"type":"string","maxLength":214,"pattern":"^@?[a-z0-9][a-z0-9._-]*(/[a-z0-9][a-z0-9._-]*){0,2}$"},{"type":"null"}],"title":"Package","description":"The package the server installs from, such as @notionhq/notion-mcp-server."}},"additionalProperties":false,"type":"object","required":["name"],"title":"ServerFingerprintBody","description":"One server, reduced to what identifies its vendor.\n\nThe dashboard builds this in the browser and shows the person the finished list before it is sent,\nso what leaves their machine is exactly what they read."},"SetArchivedRequest":{"properties":{"archived":{"type":"boolean","title":"Archived"}},"type":"object","required":["archived"],"title":"SetArchivedRequest","description":"Soft-archive (or restore) a skill created by mistake."},"SetInternalRequest":{"properties":{"is_internal":{"type":"boolean","title":"Is Internal"}},"type":"object","required":["is_internal"],"title":"SetInternalRequest"},"SetListedRequest":{"properties":{"listed":{"type":"boolean","title":"Listed"}},"type":"object","required":["listed"],"title":"SetListedRequest"},"SetPersonFactRequest":{"properties":{"domain_key":{"type":"string","title":"Domain Key","description":"The canonical fact key, e.g. person.birthday / person.work_anniversary."},"month":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":1.0},{"type":"null"}],"title":"Month","description":"Birthday month (1–12); no year is collected."},"day":{"anyOf":[{"type":"integer","maximum":31.0,"minimum":1.0},{"type":"null"}],"title":"Day","description":"Birthday day (1–31)."},"on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"On","description":"Work-anniversary date (ISO). Only month/day recur."},"effective_tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Tz","description":"IANA tz for this subject (optional)."},"entity_id":{"type":"string","format":"uuid","title":"Entity Id","description":"The subject Actor id the fact is about."}},"type":"object","required":["domain_key","entity_id"],"title":"SetPersonFactRequest","description":"Set a person's birthday or work anniversary (admin data entry). The subject is ``entity_id``."},"SetProactiveProgramModeRequest":{"properties":{"mode_code":{"$ref":"#/components/schemas/ProactiveProgramMode"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"additionalProperties":false,"type":"object","required":["mode_code"],"title":"SetProactiveProgramModeRequest","description":"Change one program's mode. ``enabled`` defaults to \"runnable unless disabled\"."},"SetupSessionResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"SetupSessionResponse","description":"The hosted Stripe Checkout Session (``mode=setup``) URL for adding a card.\n\nAdd-card uses a Checkout redirect (NOT client-side Stripe.js): the browser is sent to\n``checkout_url``, saves the card, and returns to the Billing tab; the card is synced into\n``payment_methods`` when that session's ``checkout.session.completed`` arrives."},"ShareRequestCreate":{"properties":{"installation_id":{"type":"string","format":"uuid","title":"Installation Id","description":"The caller's own personal installation to offer to the team."}},"additionalProperties":false,"type":"object","required":["installation_id"],"title":"ShareRequestCreate","description":"Ask for ONE of your own personal installs to be shared with the whole workspace.\n\nThe install is named by id and nothing else: who may ask is decided server-side from the caller's\nmembership-linked chat actor, so a body cannot nominate a requester."},"ShareRequestReview":{"properties":{"share_request_id":{"type":"string","format":"uuid","title":"Share Request Id"},"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"manifest_version_id":{"type":"string","format":"uuid","title":"Manifest Version Id"},"semver":{"type":"string","title":"Semver","description":"Semver of the pinned version, not of the skill's newest one."},"archetype_code":{"type":"string","title":"Archetype Code"},"title":{"type":"string","title":"Title","description":"The pinned version's own title, falling back to the skill's current one when the pinned manifest carries none."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The pinned version's own summary, or null when the pinned manifest carries none. The skill's current summary is never substituted: that one tracks the newest version the author saved, which is not the version this request would share."},"renamed_since_pin":{"type":"boolean","title":"Renamed Since Pin","description":"True when the skill has been renamed since this version was pinned, so the sheet can say so out loud. Compared against the title as rendered, so it stays false when title itself fell back to the skill's current name."},"instructions_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions Body","description":"The pinned markdown body for an ``instructions`` skill, which is the archetype that keeps its prose in the manifest. Null for a portable ``skill``, whose prose lives in its file bundle rather than its manifest, and null when the pinned manifest carries no body."},"requester_name":{"type":"string","title":"Requester Name"},"requested_at":{"type":"string","format":"date-time","title":"Requested At"}},"type":"object","required":["share_request_id","skill_id","installation_id","manifest_version_id","semver","archetype_code","title","renamed_since_pin","requester_name","requested_at"],"title":"ShareRequestReview","description":"What an approver reads before deciding one open ask: the EXACT version they would share.\n\nContent comes from the installation's pinned ``manifest_version_id``, never from the skill's newest\nversion and never from :class:`ShareRequestSummary`'s snapshots. Those three can all say different\nthings: the snapshot froze the title when the ask was raised, the newest version is whatever the\nauthor saved most recently, and the pin is the one document the workspace would actually run. Only\nthe last of them is what an approval consents to.\n\nONE field is chosen between two sources, and it documents that on itself: ``title`` falls back to\nthe skill's current name when the pinned manifest carries no usable one, because both manifest\nschemas REQUIRE ``identity.title``: a pin without one is a corrupt row, and a sheet with no heading\nis the worse answer for it. Every other content field is the pin's or is null. ``description`` in\nparticular is null when the pin carries none (which is ordinary, since the schemas make it optional)\nrather than borrowing the definition's, whose column is rewritten from the newest save.\n\nBuilt field by field rather than validated from a row (no ``from_attributes``): no single ORM\nobject holds this shape."},"ShareRequestSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"skill_slug":{"type":"string","title":"Skill Slug"},"skill_title":{"type":"string","title":"Skill Title"},"skill_summary":{"type":"string","title":"Skill Summary"},"requester_name":{"type":"string","title":"Requester Name"},"requester_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Requester Actor Id"},"status_code":{"type":"string","title":"Status Code"},"decided_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Decided At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","installation_id","skill_id","skill_slug","skill_title","skill_summary","requester_name","status_code","created_at"],"title":"ShareRequestSummary","description":"One share request as the API returns it: the ask, its snapshots, and its decision.\n\nThe ``skill_*`` and ``requester_*`` values are SNAPSHOTS taken when the ask was raised, so an\napproval card still reads correctly after the requester leaves or the skill is renamed."},"SharedAssetAuthor":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name","description":"The name of the person who made the file. Null when nothing resolves."},"made_by_patricia":{"type":"boolean","title":"Made By Patricia","description":"Whether a Patricia run created this file. True with a display_name reads 'Patricia for <name>'; true without one reads 'Patricia'; false reads the name alone.","default":false}},"additionalProperties":false,"type":"object","title":"SharedAssetAuthor","description":"Who made a shared file, for the person the link was sent to.\n\nDeliberately NOT :class:`AssetAuthor`, and the missing field is the whole point: this shape has\nno ``actor_id`` to fill, so the public surface cannot carry a workspace member's identifier\nhowever it is later edited. A name is what \"who sent me this\" wants; an id addresses nothing a\nrecipient can open and everything a scraper would like."},"SharedAssetView":{"properties":{"name":{"type":"string","title":"Name","description":"The file's name. UNTRUSTED text: render escaped."},"category":{"type":"string","enum":["document","media"],"title":"Category","description":"Which library it came from: 'document' or 'media'."},"kind":{"type":"string","enum":["audio","docx","html","image","markdown","pdf","slides","spreadsheet","video"],"title":"Kind","description":"What sort of file this is, for the icon and the preview."},"content_type":{"type":"string","title":"Content Type","description":"The current version's media type, e.g. 'application/pdf'."},"byte_size":{"type":"integer","title":"Byte Size","description":"The current version's size in bytes."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the file was made (UTC)."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When the file last changed (UTC)."},"author":{"$ref":"#/components/schemas/SharedAssetAuthor","description":"Who made the file: the page's 'Shared by' line."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"When this link stops working, so the page can say so before the file goes. Null only for a link minted before share links carried a deadline."},"thumbnail_status":{"type":"string","enum":["ready","pending","unavailable"],"title":"Thumbnail Status","description":"Whether a preview image exists for this file. 'ready' means GET /shared-assets/{token}/thumbnail serves it; 'pending' means one is being prepared, ask again shortly; 'unavailable' means the type icon is the answer.","default":"unavailable"}},"additionalProperties":false,"type":"object","required":["name","category","kind","content_type","byte_size","created_at","updated_at"],"title":"SharedAssetView","description":"One shared file as its RECIPIENT sees it — the public, capability-scoped shape.\n\nEverything a page needs to show the file honestly, and nothing that describes the workspace it\ncame from. There is no asset id, no tenant, no folder, no version history and no sibling here,\nbecause the token grants ONE file: a field that named anything else would be describing\nsomething the holder was never handed.\n\n``name`` is UNTRUSTED text, exactly as it is on the authenticated surface — an agent run names\nan asset. It goes out as a plain JSON string and the page renders it as text, never as markup."},"SharedFolderFacts":{"properties":{"name":{"type":"string","title":"Name","description":"The folder's name. UNTRUSTED text: render escaped."},"total":{"type":"integer","title":"Total","description":"How many live files this folder currently holds."}},"additionalProperties":false,"type":"object","required":["name","total"],"title":"SharedFolderFacts","description":"One shared FOLDER as its recipient sees it — no workspace name, no ids, just the label and\nthe true count of files inside it."},"SharedFolderFile":{"properties":{"name":{"type":"string","title":"Name","description":"The file's name. UNTRUSTED text: render escaped."},"category":{"type":"string","enum":["document","media"],"title":"Category"},"kind":{"type":"string","enum":["audio","docx","html","image","markdown","pdf","slides","spreadsheet","video"],"title":"Kind"},"content_type":{"type":"string","title":"Content Type"},"byte_size":{"type":"integer","title":"Byte Size"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"thumbnail_status":{"type":"string","enum":["ready","pending","unavailable"],"title":"Thumbnail Status","default":"unavailable"},"locator":{"type":"string","title":"Locator","description":"An opaque, versioned, signed selector for this file within this folder link — pass it to the thumbnail and download routes. Meaningless outside this link, and outside this folder link's lifetime."}},"additionalProperties":false,"type":"object","required":["name","category","kind","content_type","byte_size","created_at","updated_at","locator"],"title":"SharedFolderFile","description":"One file in a shared folder's paged listing — the same shape :class:`SharedAssetView` uses\nfor a single file, plus the opaque locator its thumbnail and download routes need."},"SharedFolderPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SharedFolderFile"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Pass as `cursor` to fetch the next page. Null on the last page."}},"additionalProperties":false,"type":"object","required":["items"],"title":"SharedFolderPage","description":"One page of a shared folder's files, cursor-paged over an immutable key.\n\nDeliberately carries NO ``total`` — :class:`SharedFolderFacts` is the one place that count\nlives. The listing's own ``total`` would recompute the SAME correlated, live-link-gated count\n(:meth:`~repositories.asset.AssetFolderRepository.totals_for`) on every single page a recipient\nloads, for a number ``useSharedFolder.ts`` already holds from the first ``GET\n/shared-folders/{token}`` call and never needed a second time."},"SkillAboutSummary":{"properties":{"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"taxonomy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taxonomy"},"example_phrases":{"items":{"type":"string"},"type":"array","title":"Example Phrases"},"requires_connected":{"items":{"type":"string"},"type":"array","title":"Requires Connected"},"works_with":{"items":{"type":"string"},"type":"array","title":"Works With"},"needs_skills":{"items":{"type":"string"},"type":"array","title":"Needs Skills"},"credits_per_run":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits Per Run"},"instructions_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions Body"},"has_settings":{"type":"boolean","title":"Has Settings","default":false}},"type":"object","title":"SkillAboutSummary","description":"What a skill IS, projected from its pinned manifest: the Hub's plain-language overview.\n\nThe Hub renders a skill's feature from its compiled ``feature_surface`` rows, but a skill whose\nmanifest declares no surfaces (every ``skill``/``instructions`` archetype today) compiles none, so\nthat path alone leaves the page blank. The manifest still describes the skill perfectly well\n(what it is for, what to say to reach it, what it wants connected), and this projects exactly that,\ngenerically: no per-skill branching, one shape for every archetype.\n\nDisplay labels only, never a personal fact (G4). Every field is optional-or-empty so a manifest\nthat omits one simply renders one section fewer."},"SkillConfigResponse":{"properties":{"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"config_version":{"type":"integer","title":"Config Version"},"status_code":{"type":"string","title":"Status Code"},"fields":{"items":{"$ref":"#/components/schemas/ConfigFieldSchema"},"type":"array","title":"Fields"},"values":{"additionalProperties":true,"type":"object","title":"Values"}},"type":"object","required":["installation_id","config_version","status_code","fields","values"],"title":"SkillConfigResponse","description":"The manifest-driven settings form for one installation: the field schema + the current values.\n\n``fields`` is the projected ``config_fields`` schema (what to render); ``values`` is the install's\nactive typed ``config_json`` (what to pre-fill). ``status_code`` lets the form gate the activate\ncontrol (an admin can't take a skill live until the required fields are set; the backend also\nenforces this on activation)."},"SkillConfigUpdateRequest":{"properties":{"values":{"additionalProperties":true,"type":"object","title":"Values"}},"type":"object","title":"SkillConfigUpdateRequest","description":"Save an installation's settings: the complete desired values for the declared config fields.\n\nUnknown keys are dropped server-side (only declared fields persist, G2); an invalid value is\nrejected with a per-field 422. A partial save is allowed (untouched fields keep their current\nvalue), so an admin can fill settings incrementally; go-live completeness is enforced at activation."},"SkillDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"archetype_code":{"type":"string","title":"Archetype Code"},"provenance_code":{"type":"string","title":"Provenance Code"},"listed":{"type":"boolean","title":"Listed"},"archived":{"type":"boolean","title":"Archived"},"editable":{"type":"boolean","title":"Editable"},"install_count":{"type":"integer","title":"Install Count"},"pack_slugs":{"items":{"type":"string"},"type":"array","title":"Pack Slugs"},"versions":{"items":{"$ref":"#/components/schemas/VersionResponse"},"type":"array","title":"Versions"}},"type":"object","required":["id","slug","title","description","archetype_code","provenance_code","listed","archived","editable","install_count","pack_slugs","versions"],"title":"SkillDetailResponse"},"SkillDraftDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"skill_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Skill Id"},"author_user_id":{"type":"string","format":"uuid","title":"Author User Id"},"title":{"type":"string","title":"Title"},"archetype_code":{"type":"string","title":"Archetype Code"},"source_kind":{"type":"string","title":"Source Kind"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"file_count":{"type":"integer","title":"File Count","default":0},"slug":{"type":"string","title":"Slug"},"validated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Validated At"},"validation_errors":{"items":{"type":"string"},"type":"array","title":"Validation Errors"},"base_version_stale":{"type":"boolean","title":"Base Version Stale","default":false},"manifest":{"additionalProperties":true,"type":"object","title":"Manifest"},"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id"},"published_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Published Version Id"},"files":{"items":{"$ref":"#/components/schemas/DraftFileSummary"},"type":"array","title":"Files"},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"}},"type":"object","required":["id","skill_id","author_user_id","title","archetype_code","source_kind","published_at","created_at","updated_at","slug","validated_at"],"title":"SkillDraftDetail","description":"One draft in full, returned to its author alone: the manifest plus the file list."},"SkillDraftMetadata":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"skill_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Skill Id"},"author_user_id":{"type":"string","format":"uuid","title":"Author User Id"},"title":{"type":"string","title":"Title"},"archetype_code":{"type":"string","title":"Archetype Code"},"source_kind":{"type":"string","title":"Source Kind"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"file_count":{"type":"integer","title":"File Count","default":0}},"type":"object","required":["id","skill_id","author_user_id","title","archetype_code","source_kind","published_at","created_at","updated_at"],"title":"SkillDraftMetadata","description":"A draft WITHOUT its content — the shape a ``skills:delete`` holder may see.\n\nNo manifest, no file bytes, no file paths. Enough to decide whether an abandoned draft should go,\nand nothing that would turn the cleanup route into a read-anything backdoor."},"SkillDraftSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"skill_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Skill Id"},"author_user_id":{"type":"string","format":"uuid","title":"Author User Id"},"title":{"type":"string","title":"Title"},"archetype_code":{"type":"string","title":"Archetype Code"},"source_kind":{"type":"string","title":"Source Kind"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"file_count":{"type":"integer","title":"File Count","default":0},"slug":{"type":"string","title":"Slug"},"validated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Validated At"},"validation_errors":{"items":{"type":"string"},"type":"array","title":"Validation Errors"},"base_version_stale":{"type":"boolean","title":"Base Version Stale","default":false}},"type":"object","required":["id","skill_id","author_user_id","title","archetype_code","source_kind","published_at","created_at","updated_at","slug","validated_at"],"title":"SkillDraftSummary","description":"A draft in its AUTHOR's list — metadata plus the cached validation state."},"SkillHealthFinding":{"properties":{"code":{"type":"string","title":"Code"},"severity":{"type":"string","title":"Severity"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"line":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Line"},"message":{"type":"string","title":"Message"},"fix":{"type":"string","title":"Fix"}},"type":"object","required":["code","severity","path","line","message","fix"],"title":"SkillHealthFinding","description":"One specific blocker or warning in an editable skill."},"SkillHealthReport":{"properties":{"ok":{"type":"boolean","title":"Ok"},"blocker_count":{"type":"integer","title":"Blocker Count"},"warning_count":{"type":"integer","title":"Warning Count"},"findings":{"items":{"$ref":"#/components/schemas/SkillHealthFinding"},"type":"array","title":"Findings"}},"type":"object","required":["ok","blocker_count","warning_count"],"title":"SkillHealthReport","description":"The health summary and its ordered findings."},"SkillHealthRequest":{"properties":{"manifest_yaml":{"type":"string","title":"Manifest Yaml"},"files":{"items":{"$ref":"#/components/schemas/AuthoredBundleFilePayload"},"type":"array","title":"Files"}},"type":"object","required":["manifest_yaml"],"title":"SkillHealthRequest","description":"Unsaved playground bytes to inspect without persistence."},"SkillListItemResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"archetype_code":{"type":"string","title":"Archetype Code"},"provenance_code":{"type":"string","title":"Provenance Code"},"listed":{"type":"boolean","title":"Listed"},"archived":{"type":"boolean","title":"Archived"},"editable":{"type":"boolean","title":"Editable"},"active_semver":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Semver"},"active_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Status"},"version_count":{"type":"integer","title":"Version Count"},"install_count":{"type":"integer","title":"Install Count"},"pack_slugs":{"items":{"type":"string"},"type":"array","title":"Pack Slugs"}},"type":"object","required":["id","slug","title","description","archetype_code","provenance_code","listed","archived","editable","active_semver","active_status","version_count","install_count"],"title":"SkillListItemResponse"},"SkillPackInstallResponse":{"properties":{"pack_slug":{"type":"string","title":"Pack Slug","description":"The pack that was installed."},"installed":{"items":{"type":"string"},"type":"array","title":"Installed","description":"Skill slugs newly added to this workspace (paused, awaiting setup)."},"already_installed":{"items":{"type":"string"},"type":"array","title":"Already Installed","description":"Skill slugs this workspace already had. Left exactly as they were."},"missing":{"items":{"type":"string"},"type":"array","title":"Missing","description":"Slugs with nothing to install yet (not released to the catalog)."}},"type":"object","required":["pack_slug"],"title":"SkillPackInstallResponse","description":"What a pack install did: one bucket per outcome, so the dashboard can say what happened."},"SkillPackSummary":{"properties":{"slug":{"type":"string","title":"Slug","description":"The pack's stable kebab-case identity."},"semver":{"type":"string","title":"Semver","description":"The active pack version."},"title":{"type":"string","title":"Title","description":"The pack's display name."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"A one-line pitch for the pack."},"skill_slugs":{"items":{"type":"string"},"type":"array","title":"Skill Slugs","description":"The member skill slugs this pack installs (its dependency closure is added at install)."},"installed":{"type":"boolean","title":"Installed","description":"Whether this workspace has this pack installed (and can therefore uninstall it).","default":false}},"type":"object","required":["slug","semver","title"],"title":"SkillPackSummary","description":"One available skill pack: its identity + the member skill slugs it installs."},"SkillPackUninstallResponse":{"properties":{"pack_slug":{"type":"string","title":"Pack Slug","description":"The pack that was uninstalled."},"removed":{"items":{"type":"string"},"type":"array","title":"Removed","description":"Skill slugs removed from this workspace, with their settings."},"kept_independent":{"items":{"type":"string"},"type":"array","title":"Kept Independent","description":"Kept because this workspace installed them on its own."},"kept_shared":{"items":{"type":"string"},"type":"array","title":"Kept Shared","description":"Kept because another installed pack includes them too."},"kept_dependency":{"items":{"type":"string"},"type":"array","title":"Kept Dependency","description":"Kept because a skill that stays installed needs them."},"missing":{"items":{"type":"string"},"type":"array","title":"Missing","description":"Skill slugs the pack included that this workspace no longer had."}},"type":"object","required":["pack_slug"],"title":"SkillPackUninstallResponse","description":"What a pack uninstall did: what went, and what stayed and why."},"SkillSurfaceBundle":{"properties":{"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"manifest_version_id":{"type":"string","format":"uuid","title":"Manifest Version Id"},"surfaces":{"items":{"$ref":"#/components/schemas/FeatureSurfaceSummary"},"type":"array","title":"Surfaces"},"read_models":{"items":{"$ref":"#/components/schemas/FeatureReadModelSummary"},"type":"array","title":"Read Models"},"actions":{"items":{"$ref":"#/components/schemas/FeatureActionSummary"},"type":"array","title":"Actions"},"delivery_policy":{"anyOf":[{"$ref":"#/components/schemas/DeliveryPolicySummary"},{"type":"null"}]}},"type":"object","required":["installation_id","manifest_version_id","surfaces","read_models","actions","delivery_policy"],"title":"SkillSurfaceBundle","description":"Everything the Hub needs to render one installation's feature: surfaces + read-models + delivery.\n\nThe dashboard renders each ``surface`` by its ``surface_kind_code`` and binds it to the read-model in\n``read_models`` whose id matches ``surface.feature_read_model_id``. Proves \"no per-skill UI\": the same\nbundle shape renders Celebrations and the generality fixtures alike."},"SkillVisibility":{"type":"string","enum":["team","personal"],"title":"SkillVisibility","description":"Who, within a tenant, an installed skill is visible to (``skill_installation.visibility_code``).\n\nThe skill-side counterpart of ``IntegrationVisibility``: ``TEAM`` is any actor in the tenant,\n``PERSONAL`` is only the actor who installed it (``owner_actor_id``). A TEAM install is safe to\nsurface in the shared, per-tenant prompt cache; a PERSONAL install is surfaced only through the\nper-run, actor-scoped progressive-disclosure loader (never the shared prompt, which would leak it\nacross actors)."},"SlackChannelJoinRequest":{"properties":{"channel_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1,"title":"Channel Ids"}},"type":"object","required":["channel_ids"],"title":"SlackChannelJoinRequest","description":"Public Slack channel ids Patricia should join in this request."},"SlackChannelJoinResponse":{"properties":{"joined":{"items":{"type":"string"},"type":"array","title":"Joined","description":"Patricia is in these channels, including ones she was already in."},"skipped":{"items":{"type":"string"},"type":"array","title":"Skipped","description":"A person must clear an archived, private, or workspace-policy blocker for these channels."},"failed":{"items":{"type":"string"},"type":"array","title":"Failed","description":"Slack did not answer for these channels in time, so trying again may work."},"queued":{"items":{"type":"string"},"type":"array","title":"Queued","description":"Patricia is joining these in the background right now."}},"type":"object","required":["joined","skipped","failed","queued"],"title":"SlackChannelJoinResponse","description":"Per-channel outcomes from an interactive Slack join request."},"SlackInstallUrlRequest":{"properties":{"return_path":{"type":"string","maxLength":2048,"title":"Return Path","description":"App-relative dashboard path to return to after the Slack consent screen.","default":""}},"type":"object","title":"SlackInstallUrlRequest","description":"Optional body for the install-URL mint: where to return after Slack's consent screen."},"SlackInstallUrlResponse":{"properties":{"url":{"type":"string","title":"Url","description":"Slack authorize URL carrying the HMAC-signed, short-TTL state."}},"type":"object","required":["url"],"title":"SlackInstallUrlResponse","description":"The Slack authorize URL the browser is handed off to."},"SlackJoinableChannelsResponse":{"properties":{"connected":{"type":"boolean","title":"Connected","description":"True when the tenant has an active Slack install to read from."},"workspace_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Name","description":"The Slack workspace's name, or null when it is not known."},"channels":{"items":{"$ref":"#/components/schemas/JoinableChannel"},"type":"array","title":"Channels","description":"Joinable channels in display order: #general first, then by member count, then name."},"total_public":{"type":"integer","title":"Total Public","description":"Every public channel in the workspace, joined or not."},"total_joinable":{"type":"integer","title":"Total Joinable","description":"Public channels Patricia has not joined yet."},"already_joined_count":{"type":"integer","title":"Already Joined Count","description":"Public channels Patricia is already in."},"max_per_join":{"type":"integer","title":"Max Per Join","description":"The most channels one join request can submit at a time."}},"type":"object","required":["connected","workspace_name","channels","total_public","total_joinable","already_joined_count","max_per_join"],"title":"SlackJoinableChannelsResponse","description":"The public Slack channels Patricia can still join, and the counts the picker screen needs."},"SlackPreviewChannelList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SlackPreviewChannelRow"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"truncated":{"type":"boolean","title":"Truncated","description":"True when this is not every channel a preview could go to: one page of Slack's list is read and the offerable rows are capped. The console says so and keeps the typed channel-id box reachable, because a silently short list reads as 'Patricia is not in that channel'."}},"type":"object","required":["items","count","truncated"],"title":"SlackPreviewChannelList"},"SlackPreviewChannelRow":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"SlackPreviewChannelRow"},"SlackPreviewFrameOut":{"properties":{"fallback_text":{"type":"string","title":"Fallback Text","description":"The notification line, and for a text entry the whole message."},"lines":{"items":{"type":"string"},"type":"array","title":"Lines","description":"The words a reader sees, in reading order. Not a Slack layout."},"buttons":{"items":{"type":"string"},"type":"array","title":"Buttons","description":"Every control the message carries, by label. Inert in a preview."},"blocks":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Blocks"},"view":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"View"}},"type":"object","required":["fallback_text","lines","buttons"],"title":"SlackPreviewFrameOut","description":"One rendered message of an entry: what it says, what it offers, and its raw Block Kit."},"SlackPreviewMessageList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SlackPreviewMessageRow"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"sendable_count":{"type":"integer","title":"Sendable Count"},"groups":{"items":{"type":"string"},"type":"array","title":"Groups","description":"Catalog group order, so the picker groups without inventing an order."},"send_available":{"type":"boolean","title":"Send Available","description":"False when no ACTIVE Slack install resolves for the allowlisted workspace, so the console can say sending is unavailable instead of offering a button that always fails."},"workspace_name":{"type":"string","title":"Workspace Name","description":"The one workspace a preview can ever be posted into."}},"type":"object","required":["items","count","sendable_count","groups","send_available","workspace_name"],"title":"SlackPreviewMessageList","description":"The whole catalog plus whether this environment can send at all."},"SlackPreviewMessageRow":{"properties":{"id":{"type":"string","title":"Id"},"group":{"type":"string","title":"Group"},"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"kind":{"type":"string","title":"Kind"},"sendable":{"type":"boolean","title":"Sendable","description":"False for a message production only ever writes over an earlier card."},"note":{"type":"string","title":"Note","description":"What the dummy data stands for, or why the entry is never posted on its own."}},"type":"object","required":["id","group","name","label","kind","sendable","note"],"title":"SlackPreviewMessageRow","description":"One catalog entry, as the console needs to list and explain it."},"SlackPreviewRender":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"kind":{"type":"string","title":"Kind"},"sendable":{"type":"boolean","title":"Sendable"},"note":{"type":"string","title":"Note"},"frames":{"items":{"$ref":"#/components/schemas/SlackPreviewFrameOut"},"type":"array","title":"Frames"}},"type":"object","required":["id","label","kind","sendable","note","frames"],"title":"SlackPreviewRender","description":"One catalog entry, built from its dummy data and rendered."},"SlackPreviewSendRequest":{"properties":{"message_id":{"type":"string","maxLength":100,"minLength":1,"title":"Message Id"},"channel_id":{"type":"string","maxLength":32,"minLength":1,"title":"Channel Id"}},"additionalProperties":false,"type":"object","required":["message_id","channel_id"],"title":"SlackPreviewSendRequest","description":"What a send may say, and nothing else.\n\n``extra=\"forbid\"`` is load-bearing rather than tidy. A ``workspace_id``, ``team_id``,\n``tenant_id`` or token field would be a 422 here; silently ignored, it would read to a caller\nlike a destination they had chosen."},"SlackPreviewSendResult":{"properties":{"message_id":{"type":"string","title":"Message Id"},"label":{"type":"string","title":"Label"},"workspace_id":{"type":"string","title":"Workspace Id"},"channel_id":{"type":"string","title":"Channel Id"},"channel_name":{"type":"string","title":"Channel Name"},"bot_user_id":{"type":"string","title":"Bot User Id"},"requested_by":{"type":"string","title":"Requested By"},"timestamps":{"items":{"type":"string"},"type":"array","title":"Timestamps","description":"One per posted message, the preview header first."}},"type":"object","required":["message_id","label","workspace_id","channel_id","channel_name","bot_user_id","requested_by","timestamps"],"title":"SlackPreviewSendResult","description":"The server's receipt: where it landed, as whom, and every message it posted."},"SlackStatusResponse":{"properties":{"connected":{"type":"boolean","title":"Connected","description":"True when an ACTIVE Slack platform installation exists for the tenant."},"platform_tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Tenant Id","description":"The Slack workspace (team) id, or null when there is no live install."},"platform_bot_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Bot User Id","description":"Patricia's own Slack user id, used to open the direct message with her. Null when there is no live install, and also null for an older install recorded before the id was stored."}},"type":"object","required":["connected","platform_tenant_id","platform_bot_user_id"],"title":"SlackStatusResponse","description":"Whether this tenant has a live Slack install, plus the ids to deep-link into it."},"SolicitFactRequest":{"properties":{"domain_key":{"type":"string","title":"Domain Key","description":"The bound canonical fact to solicit, e.g. person.birthday."},"entity_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":500,"title":"Entity Ids","description":"The SELECTED subject actor ids to notify (explicit; empty = no-op, never a blast)."}},"type":"object","required":["domain_key"],"title":"SolicitFactRequest","description":"Notify SELECTED members to submit their OWN bound fact (the ``solicit_fact`` action).\n\nAdmin-triggered, selected-members-only: ``entity_ids`` is an EXPLICIT list of subject actor ids.\nThere is no \"notify everyone\" path, and an empty list is a no-op (never an unsolicited blast). The\nfact must be bound by the installation and accept ``self`` submission (fail-closed otherwise)."},"SolicitationResponse":{"properties":{"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"domain_key":{"type":"string","title":"Domain Key"},"live_send":{"type":"boolean","title":"Live Send"},"targets":{"items":{"$ref":"#/components/schemas/SolicitationTargetSummary"},"type":"array","title":"Targets"}},"type":"object","required":["installation_id","domain_key","live_send","targets"],"title":"SolicitationResponse","description":"The result of a fact solicitation: whether it sent live + the per-target outcomes (no PII)."},"SolicitationTargetSummary":{"properties":{"entity_id":{"type":"string","format":"uuid","title":"Entity Id"},"status":{"type":"string","enum":["would_notify","notified","skipped","failed","unknown"],"title":"Status"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["entity_id","status"],"title":"SolicitationTargetSummary","description":"One target's solicitation outcome (ids + a stable status only, no PII)."},"SpendingLimitsResponse":{"properties":{"monthly_cap":{"$ref":"#/components/schemas/MonthlyCapView"},"groups":{"items":{"$ref":"#/components/schemas/GroupLimitView"},"type":"array","title":"Groups"},"over_budget":{"$ref":"#/components/schemas/OverBudgetView"},"using_recommended":{"type":"boolean","title":"Using Recommended"}},"type":"object","required":["monthly_cap","groups","over_budget","using_recommended"],"title":"SpendingLimitsResponse","description":"Effective spending limits for the caller's workspace (policy default + override)."},"SpendingLimitsUpdate":{"properties":{"monthly_cap_dollars":{"anyOf":[{"type":"number","maximum":100000.0,"minimum":10.0},{"type":"null"}],"title":"Monthly Cap Dollars"},"groups":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Groups"},"over_budget_behavior":{"anyOf":[{"type":"string","enum":["warn","stop"]},{"type":"null"}],"title":"Over Budget Behavior","description":"What happens when a single run reaches its per-run limit: 'warn' keeps going and tells the owner what it cost (the default; a safety stop still ends any run that reaches four times its limit, or the workspace's remaining spend headroom if that is lower); 'stop' stops the task at the limit. Omitted or null leaves the workspace's current behaviour unchanged."},"reset_to_recommended":{"type":"boolean","title":"Reset To Recommended","default":false}},"additionalProperties":false,"type":"object","title":"SpendingLimitsUpdate","description":"PATCH body: every field optional; only what's provided is written.\n\n``groups`` maps a group key (``conversations`` / ``scheduled_tasks`` /\n``proactive_replies`` / ``background_work``) to a per-run dollar limit that is\nfanned out to every trigger in that group. ``reset_to_recommended`` clears all\noverrides and cannot be combined with an explicit value."},"StaffUserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"is_internal":{"type":"boolean","title":"Is Internal"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","first_name","last_name","is_internal","created_at"],"title":"StaffUserResponse"},"StatCardSummary":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"value":{"type":"string","title":"Value"},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint"}},"type":"object","required":["key","label","value","hint"],"title":"StatCardSummary","description":"One KPI tile on the ``stat_cards`` surface: a label, a value, an optional hint (no PII).\n\nGeneric: the tiles are computed from the installation's bound facts (team size, per-fact coverage,\nnext upcoming), so Celebrations renders \"Birthdays on file / Work anniversaries on file\" and a\nnon-person skill renders its own fact labels through the SAME shape."},"StatsCompare":{"type":"string","enum":["previous","same_last_month","same_last_year"],"title":"StatsCompare","description":"Prior-window selector that populates ``previous_totals`` for period-over-period deltas."},"StatsGranularity":{"type":"string","enum":["day","week","month"],"title":"StatsGranularity","description":"Timeline bucket size. Each bucket's ``date`` is its truncated UTC start\n(``week`` → Monday, ``month`` → the 1st)."},"StreamState":{"type":"string","enum":["complete","partial","masked","unavailable","not_applicable"]},"StuckIngressEvent":{"properties":{"id":{"type":"string","title":"Id"},"platform_code":{"type":"string","title":"Platform Code"},"event_id":{"type":"string","title":"Event Id"},"platform_tenant_id":{"type":"string","title":"Platform Tenant Id"},"received_at":{"type":"string","format":"date-time","title":"Received At"},"redrive_count":{"type":"integer","title":"Redrive Count"},"last_enqueued_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Enqueued At"},"fallback_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fallback Sent At"},"assigned_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Run Id"},"assigned_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Assigned At"},"parked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Parked At"},"park_count":{"type":"integer","title":"Park Count"},"last_failure_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Failure Class"},"refetch_outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refetch Outcome"},"parked_outage_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parked Outage Id"},"next_attempt_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Attempt At"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"redrive_claimed":{"type":"boolean","title":"Redrive Claimed"}},"type":"object","required":["id","platform_code","event_id","platform_tenant_id","received_at","redrive_count","last_enqueued_at","fallback_sent_at","assigned_run_id","assigned_at","parked_at","park_count","last_failure_class","refetch_outcome","parked_outage_id","next_attempt_at","conversation_id","redrive_claimed"],"title":"StuckIngressEvent","description":"Content-free recovery metadata for one open ingress event."},"StuckIngressResult":{"properties":{"items":{"items":{"$ref":"#/components/schemas/StuckIngressEvent"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["items","count"],"title":"StuckIngressResult","description":"Bounded content-free stuck ingress report."},"SubmitOwnFactRequest":{"properties":{"domain_key":{"type":"string","title":"Domain Key","description":"The canonical fact key, e.g. person.birthday / person.work_anniversary."},"month":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":1.0},{"type":"null"}],"title":"Month","description":"Birthday month (1–12); no year is collected."},"day":{"anyOf":[{"type":"integer","maximum":31.0,"minimum":1.0},{"type":"null"}],"title":"Day","description":"Birthday day (1–31)."},"on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"On","description":"Work-anniversary date (ISO). Only month/day recur."},"effective_tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Tz","description":"IANA tz for this subject (optional)."}},"type":"object","required":["domain_key"],"title":"SubmitOwnFactRequest","description":"Submit the CALLER's own fact (employee self-submission). NO ``entity_id``: the subject is always\nthe caller's own actor (resolved server-side from the verified JWT email), so a member can never\ntarget another person."},"SyncQueuedResponse":{"properties":{"status":{"type":"string","title":"Status"},"account":{"type":"string","format":"uuid","title":"Account"}},"type":"object","required":["status","account"],"title":"SyncQueuedResponse"},"SyncResponse":{"properties":{"status":{"type":"string","title":"Status"},"account":{"type":"string","format":"uuid","title":"Account"},"task_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Id","description":"Broker task id for the queued sync, for tracing its worker logs."}},"type":"object","required":["status","account"],"title":"SyncResponse","description":"Receipt for a queued tool-catalog sync. ``queued`` is only ever returned once the broker took it."},"SyncResultResponse":{"properties":{"added":{"type":"integer","title":"Added"},"updated":{"type":"integer","title":"Updated"},"deactivated":{"type":"integer","title":"Deactivated"},"excluded":{"type":"integer","title":"Excluded","default":0},"policy_deactivated":{"type":"integer","title":"Policy Deactivated","default":0}},"type":"object","required":["added","updated","deactivated"],"title":"SyncResultResponse","description":"Counters returned from a roster sync run.\n\n``excluded`` is how many Slack members were skipped this run by the roster policy (e.g. guests\nwhen guests are off); ``policy_deactivated`` is how many previously-synced members the policy now\nexcludes were deactivated. They let the Team view tell an admin that guests were left out."},"TaxonomyNode":{"properties":{"path":{"type":"string","title":"Path"},"label":{"type":"string","title":"Label"},"depth":{"type":"integer","title":"Depth"}},"type":"object","required":["path","label","depth"],"title":"TaxonomyNode","description":"One node of the skill taxonomy: where it sits, what to call it, and how deep it is.\n\nThe console needs the tree to draw its browse rail, and it cannot derive the ORDER: the shipped\ntree runs Marketing, Sales, Strategy, Reporting, Operations, Setup and Context, Other, which is\nneither alphabetical nor anything a client could reproduce without holding a second copy of\n``taxonomy.yaml``. So the server publishes the order and the client renders it.\n\n``label`` and ``depth`` are derived from ``path`` and published anyway. Deriving them means\nsplitting on the separator, and the separator is exactly the kind of detail that gets a client\nwritten against ``/`` and then broken the day a node is renamed. One rule, one owner."},"TeamIntroductionExclusion":{"type":"string","enum":["already_met","already_queued","no_slack_dm","attempts_exhausted","guest_excluded","guest_unverified"],"title":"TeamIntroductionExclusion","description":"Why one teammate is listed but cannot be picked."},"TeamIntroductionItem":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"slack_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slack User Id"},"display_name":{"type":"string","title":"Display Name"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle"},"role_code":{"type":"string","title":"Role Code"},"eligible":{"type":"boolean","title":"Eligible"},"excluded_reason":{"anyOf":[{"$ref":"#/components/schemas/TeamIntroductionExclusion"},{"type":"null"}]}},"type":"object","required":["membership_id","slack_user_id","display_name","handle","role_code","eligible","excluded_reason"],"title":"TeamIntroductionItem","description":"One teammate, and whether Patricia may be introduced to them."},"TeamIntroductionListResponse":{"properties":{"roster_state":{"$ref":"#/components/schemas/RosterState"},"can_introduce":{"type":"boolean","title":"Can Introduce"},"blocked_reason":{"anyOf":[{"$ref":"#/components/schemas/IntroductionBlockedReason"},{"type":"null"}]},"roster_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Roster Synced At"},"refresh_recommended":{"type":"boolean","title":"Refresh Recommended"},"teammate_count":{"type":"integer","title":"Teammate Count"},"truncated":{"type":"boolean","title":"Truncated"},"items":{"items":{"$ref":"#/components/schemas/TeamIntroductionItem"},"type":"array","title":"Items"}},"type":"object","required":["roster_state","can_introduce","blocked_reason","roster_synced_at","refresh_recommended","teammate_count","truncated","items"],"title":"TeamIntroductionListResponse","description":"The roster, its freshness, and whether the primary action may fire at all."},"TeamIntroductionOutcome":{"type":"string","enum":["queued","already_met","already_queued","no_slack_dm","actor_changed","guest_excluded","guest_unverified","attempts_exhausted","member_deactivated"],"title":"TeamIntroductionOutcome","description":"The result of one requested introduction."},"TeamIntroductionRequest":{"properties":{"selections":{"items":{"$ref":"#/components/schemas/TeamIntroductionSelection"},"type":"array","maxItems":100,"minItems":1,"title":"Selections"}},"type":"object","required":["selections"],"title":"TeamIntroductionRequest","description":"The exact teammates the caller selected."},"TeamIntroductionResult":{"properties":{"requested":{"type":"integer","title":"Requested"},"sent":{"type":"integer","title":"Sent"},"skipped":{"type":"integer","title":"Skipped"},"results":{"items":{"$ref":"#/components/schemas/TeamIntroductionResultItem"},"type":"array","title":"Results"}},"type":"object","required":["requested","sent","skipped","results"],"title":"TeamIntroductionResult","description":"The authorized and refused counts for the explicit selection."},"TeamIntroductionResultItem":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"outcome":{"$ref":"#/components/schemas/TeamIntroductionOutcome"}},"type":"object","required":["membership_id","outcome"],"title":"TeamIntroductionResultItem","description":"The result for one selected teammate."},"TeamIntroductionSelection":{"properties":{"membership_id":{"type":"string","format":"uuid","title":"Membership Id"},"slack_user_id":{"type":"string","minLength":1,"title":"Slack User Id"}},"type":"object","required":["membership_id","slack_user_id"],"title":"TeamIntroductionSelection","description":"One teammate and the Slack identity shown by the picker."},"TeamRequestItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title","description":"Privacy-validated triage title when sanitized public-copy provenance exists; otherwise a neutral kind-based label."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Deterministically sanitized public description written at triage time; null when unavailable."},"kind":{"type":"string","enum":["bug","feature"],"title":"Kind"},"status":{"$ref":"#/components/schemas/PublicRequestStatus"},"linear_status":{"anyOf":[{"$ref":"#/components/schemas/PublicLinearStatus"},{"type":"null"}],"description":"Mirrored Linear workflow status; null until a known state has been synchronized."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"UTC submission time; the dashboard renders it in the viewer's local time."}},"additionalProperties":false,"type":"object","required":["id","title","description","kind","status","linear_status","created_at"],"title":"TeamRequestItem","description":"One sanitized, read-only request submitted by the caller's team."},"TeamRequestListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TeamRequestItem"},"type":"array","title":"Items"}},"additionalProperties":false,"type":"object","required":["items"],"title":"TeamRequestListResponse","description":"The sanitized request list for one tenant."},"TeamsInstallUrlRequest":{"properties":{"return_path":{"type":"string","maxLength":2048,"title":"Return Path","description":"App-relative dashboard path to return to after the Microsoft consent screen. Only an exact allowlisted destination is honoured; anything else lands on workspace settings.","default":""}},"type":"object","title":"TeamsInstallUrlRequest","description":"Optional body for the install-URL mint: where to return after Microsoft's consent screen."},"TeamsInstallUrlResponse":{"properties":{"url":{"type":"string","title":"Url","description":"Microsoft admin-consent URL carrying the signed tenant state."}},"type":"object","required":["url"],"title":"TeamsInstallUrlResponse","description":"The Microsoft admin-consent URL for this Patricia tenant."},"TeamsStatusResponse":{"properties":{"connected":{"type":"boolean","title":"Connected","description":"True when consent exists and Patricia can reply in Teams."},"teams_configured":{"type":"boolean","title":"Teams Configured","description":"True when this deployment has the Microsoft application credentials required for Teams."},"consent_granted":{"type":"boolean","title":"Consent Granted","description":"True when an ACTIVE Teams platform installation exists."},"app_reachable":{"type":"boolean","title":"App Reachable","description":"True when an allowed Bot Connector service URL is known for the Microsoft workspace."},"slot_held":{"type":"boolean","title":"Slot Held","description":"True when the tenant cannot connect a different Microsoft workspace."},"platform_tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Tenant Id","description":"The Microsoft Entra tenant ID for the active installation, or null."},"app_install_deep_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Install Deep Link","description":"The Teams custom-app install link, or null when Teams is not configured."}},"type":"object","required":["connected","teams_configured","consent_granted","app_reachable","slot_held","platform_tenant_id","app_install_deep_link"],"title":"TeamsStatusResponse","description":"The consent, app reachability, and workspace-slot state for Microsoft Teams."},"TenantAutoApproveBody":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"allowlist":{"items":{"type":"string"},"type":"array","title":"Allowlist"},"bump_epoch":{"type":"boolean","title":"Bump Epoch","default":false}},"additionalProperties":false,"type":"object","required":["enabled"],"title":"TenantAutoApproveBody","description":"Admin request body to set the tenant master switch + allowlist. ``bump_epoch`` is the kill switch."},"TenantAutoApproveResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"epoch":{"type":"integer","title":"Epoch"},"allowlist":{"items":{"type":"string"},"type":"array","title":"Allowlist"},"floor_tiers":{"items":{"$ref":"#/components/schemas/RiskTier"},"type":"array","title":"Floor Tiers"}},"type":"object","required":["enabled","epoch","allowlist","floor_tiers"],"title":"TenantAutoApproveResponse","description":"The tenant's effective auto-approve controls (admin view)."},"TenantStatus":{"type":"string","enum":["active","suspended","cancelled"],"title":"TenantStatus"},"TenantStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"TenantStatusRefReferenceFullValidator"},"TenantSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"display_name":{"type":"string","title":"Display Name"},"status_code":{"type":"string","title":"Status Code"},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed","default":false}},"type":"object","required":["id","display_name","status_code"],"title":"TenantSummary","description":"Lightweight tenant (workspace) summary for membership context."},"ThinkingOption":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"}},"type":"object","required":["value","label","description"],"title":"ThinkingOption","description":"One thinking level a specific model can actually be run at."},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"},"landing_hint":{"anyOf":[{"$ref":"#/components/schemas/LandingHint"},{"type":"null"}]},"decision_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Key"}},"type":"object","required":["access_token","refresh_token","expires_in"],"title":"TokenResponse","description":"Access + refresh token pair. ``expires_in`` is the access-token lifetime (seconds)."},"ToolCallStatusRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ToolCallStatusRefReferenceFullValidator"},"ToolEnabledBody":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"additionalProperties":false,"type":"object","required":["enabled"],"title":"ToolEnabledBody","description":"Turn one provider action ON/OFF for a whole connection (the account-level per-tool overlay)."},"ToolKind":{"type":"string","enum":["native","sandbox","integration","custom","mcp"],"title":"ToolKind"},"ToolKindRefReferenceFullValidator":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ToolKindRefReferenceFullValidator"},"ToolOverrideCreateRequest":{"properties":{"tool_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Ref"},"consent_token":{"type":"string","title":"Consent Token"}},"type":"object","required":["tool_ref","consent_token"],"title":"ToolOverrideCreateRequest","description":"The confirm dialog's payload.\n\n``tool_ref`` is REQUIRED but NULLABLE, matching the account-tools contract which exposes a\ntransient ref-less row as ``tool_ref: null``. A plain required ``str`` would make JSON ``null``\nfail Pydantic validation *before* the service and return a generic ``VALIDATION_ERROR`` instead of\nthe typed ``no_tool_ref`` the acceptance matrix requires — and the refusal has to come AFTER the\naccount-visibility fence, which only the service can do."},"ToolOverrideInventoryItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"integration_account_id":{"type":"string","format":"uuid","title":"Integration Account Id"},"tool_ref":{"type":"string","title":"Tool Ref"},"granted_tier":{"type":"string","title":"Granted Tier"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"account_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Label"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"state":{"$ref":"#/components/schemas/ToolOverrideState"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","integration_account_id","tool_ref","granted_tier","created_at","display_name","account_label","provider","state","last_used_at"],"title":"ToolOverrideInventoryItem","description":"One consent as the settings list shows it: the stored row plus what it means right now.\n\n``state`` is computed per read, never stored, so this list can never say \"running without asking\"\nabout an action the runtime has already gone back to asking about."},"ToolOverrideInventoryResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ToolOverrideInventoryItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"ToolOverrideInventoryResponse"},"ToolOverrideResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"integration_account_id":{"type":"string","format":"uuid","title":"Integration Account Id"},"tool_ref":{"type":"string","title":"Tool Ref"},"granted_tier":{"type":"string","title":"Granted Tier"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","integration_account_id","tool_ref","granted_tier","created_at"],"title":"ToolOverrideResponse","description":"One consent row, in the shape a client may see.\n\nDeliberately NOT the ORM row: that carries both account generations and the execution\nfingerprint, which are internal bindings and would hand a client the ingredients of the consent\ntoken it is not supposed to be able to forge."},"ToolOverrideState":{"type":"string","enum":["tool_missing","account_inactive","tool_disabled_on_account","inactive_tenant_master_disabled","inactive_policy_always","floor_blocked","epoch_stale","contract_stale","needs_reconfirmation","active"],"title":"ToolOverrideState","description":"The computed state of a stored override — ONE precedence, FOUR readers.\n\nThe runtime gate, the Tools-tab pill, the settings inventory and dispatch's own revalidation all\nresolve this, so an override can never read \"active\" in the dashboard while the gateway is\nasking. Not a code table: it is derived per read from live state, never persisted.\n\nThe fourth is the one to keep in mind when changing the ordering or a field's meaning: it is not\na display surface. ``gateway._override_live_state_denial`` asks this question again under row\nlocks, and its answer is what authorizes an unattended provider write with no card and no\n``PermissionRequest`` behind it."},"TopupTier":{"type":"string","enum":["10k","25k","50k","100k","300k","750k","2m"],"title":"TopupTier","description":"A rung of the 7-tier one-time top-up ladder (plan §1.3).\n\nThe value is the settings suffix (``stripe_price_topup_<value>``) so the API name,\nthe catalog key, and the settings field stay same-same."},"TrashPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TrashedAsset"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Restorable files across all pages."},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"retention_days":{"type":"integer","title":"Retention Days","description":"How many days a removed file stays restorable. Server-defined; shown in copy.","default":30}},"additionalProperties":false,"type":"object","required":["items","total","limit","offset"],"title":"TrashPage","description":"One page of the trash plus the TRUE number of restorable files (the AssetPage contract)."},"TrashedAsset":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name","description":"The name the file held when it was removed. UNTRUSTED text: render escaped."},"category":{"type":"string","enum":["document","media"],"title":"Category"},"kind":{"type":"string","enum":["audio","docx","html","image","markdown","pdf","slides","spreadsheet","video"],"title":"Kind"},"content_type":{"type":"string","title":"Content Type"},"byte_size":{"type":"integer","title":"Byte Size"},"deleted_at":{"type":"string","format":"date-time","title":"Deleted At","description":"When the file was moved to the trash (UTC)."},"delete_reason":{"type":"string","title":"Delete Reason","description":"Why it was removed, as whoever removed it wrote it. UNTRUSTED text: render escaped."},"purge_at":{"type":"string","format":"date-time","title":"Purge At","description":"When the file stops being restorable — 30 days after deletion. The trash view's countdown."}},"additionalProperties":false,"type":"object","required":["id","name","category","kind","content_type","byte_size","deleted_at","delete_reason","purge_at"],"title":"TrashedAsset","description":"One file in the trash: what it was, why it went, and when it stops being restorable."},"TriggerCatalogConditionField":{"properties":{"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"kind":{"type":"string","title":"Kind"},"choices":{"items":{"type":"string"},"type":"array","title":"Choices"},"example":{"type":"string","title":"Example"}},"type":"object","required":["name","label","kind","choices","example"],"title":"TriggerCatalogConditionField","description":"One reviewed event property offered by the condition builder."},"TriggerCatalogEvent":{"properties":{"source":{"type":"string","title":"Source"},"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"default_template":{"type":"string","title":"Default Template"},"filter_field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter Field"},"filter_choices":{"items":{"type":"string"},"type":"array","title":"Filter Choices"},"condition_fields":{"items":{"$ref":"#/components/schemas/TriggerCatalogConditionField"},"type":"array","title":"Condition Fields"}},"type":"object","required":["source","name","label","default_template","filter_field","filter_choices","condition_fields"],"title":"TriggerCatalogEvent","description":"One event offered by the trigger picker."},"TriggerCatalogResponse":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/TriggerCatalogSource"},"type":"array","title":"Sources"},"events":{"items":{"$ref":"#/components/schemas/TriggerCatalogEvent"},"type":"array","title":"Events"}},"type":"object","required":["sources","events"],"title":"TriggerCatalogResponse","description":"The structured source and event catalog."},"TriggerCatalogSource":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"}},"type":"object","required":["code","label"],"title":"TriggerCatalogSource","description":"One event source offered by the trigger picker."},"TriggerChannel":{"properties":{"external_id":{"type":"string","title":"External Id"},"name":{"type":"string","title":"Name"},"is_private":{"type":"boolean","title":"Is Private"}},"type":"object","required":["external_id","name","is_private"],"title":"TriggerChannel","description":"One verified Slack destination offered by the trigger picker."},"TriggerChannelsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TriggerChannel"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"TriggerChannelsResponse","description":"The caller's best-effort trigger destinations."},"TriggerConditionInput":{"properties":{"field":{"type":"string","minLength":1,"title":"Field"},"value":{"type":"string","maxLength":60,"title":"Value"}},"type":"object","required":["field","value"],"title":"TriggerConditionInput","description":"One field and value selected in the dashboard condition builder."},"TriggerConditionVerdict":{"properties":{"matched":{"type":"boolean","title":"Matched"},"state":{"type":"string","enum":["no_condition","matched","different","missing"],"title":"State"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"},"label":{"type":"string","title":"Label"},"event_value":{"anyOf":[{},{"type":"null"}],"title":"Event Value"},"wanted_value":{"anyOf":[{},{"type":"null"}],"title":"Wanted Value"}},"type":"object","required":["matched","state","field","label","event_value","wanted_value"],"title":"TriggerConditionVerdict","description":"Why one event matches or does not match the trigger condition."},"TriggerCreateRequest":{"properties":{"source":{"type":"string","minLength":1,"title":"Source"},"event":{"type":"string","minLength":1,"title":"Event"},"channel_external_id":{"type":"string","minLength":1,"title":"Channel External Id"},"action":{"type":"string","enum":["announce","agent"],"title":"Action"},"instruction":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Instruction"},"template":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Template"},"filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"},"conditions":{"anyOf":[{"items":{"$ref":"#/components/schemas/TriggerConditionInput"},"type":"array","maxItems":4},{"type":"null"}],"title":"Conditions"},"replace":{"type":"boolean","title":"Replace","default":false},"status":{"type":"string","enum":["active","stopped"],"title":"Status","default":"active"}},"additionalProperties":false,"type":"object","required":["source","event","channel_external_id","action"],"title":"TriggerCreateRequest","description":"Create or explicitly replace one channel event trigger."},"TriggerFire":{"properties":{"event_id":{"type":"string","title":"Event Id"},"status":{"type":"string","title":"Status"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["event_id","status","occurred_at","error"],"title":"TriggerFire","description":"One recent delivery attempt for a trigger."},"TriggerFireListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TriggerFire"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"TriggerFireListResponse","description":"A bounded recent-delivery list for one trigger."},"TriggerHourlyCeiling":{"properties":{"rate_limited":{"type":"boolean","title":"Rate Limited"},"hourly_limit_notice_resume_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Hourly Limit Notice Resume At"},"max_runs_per_feed_per_hour":{"type":"integer","title":"Max Runs Per Feed Per Hour"}},"type":"object","required":["rate_limited","hourly_limit_notice_resume_at","max_runs_per_feed_per_hour"],"title":"TriggerHourlyCeiling","description":"The current hourly agent-trigger ceiling state."},"TriggerLimitView":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"dollars":{"type":"number","title":"Dollars"},"source":{"type":"string","title":"Source"}},"type":"object","required":["key","label","dollars","source"],"title":"TriggerLimitView","description":"One underlying per-trigger budget inside a group (the advanced-detail rows)."},"TriggerListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TriggerView"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"TriggerListResponse","description":"The triggers in the caller's selected status view."},"TriggerNarrowing":{"properties":{"field":{"type":"string","title":"Field"},"label":{"type":"string","title":"Label"},"kind":{"type":"string","title":"Kind"},"value":{"type":"string","title":"Value"},"display_value":{"type":"string","title":"Display Value"}},"type":"object","required":["field","label","kind","value","display_value"],"title":"TriggerNarrowing","description":"One equality condition that narrows an event trigger."},"TriggerPatchRequest":{"properties":{"action":{"anyOf":[{"type":"string","enum":["announce","agent"]},{"type":"null"}],"title":"Action"},"instruction":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Instruction"},"template":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Template"},"filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"},"conditions":{"anyOf":[{"items":{"$ref":"#/components/schemas/TriggerConditionInput"},"type":"array","maxItems":4},{"type":"null"}],"title":"Conditions"},"status":{"anyOf":[{"type":"string","enum":["active","stopped"]},{"type":"null"}],"title":"Status"}},"additionalProperties":false,"type":"object","title":"TriggerPatchRequest","description":"Change a trigger's behavior without changing its identity."},"TriggerPeopleResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TriggerPerson"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"TriggerPeopleResponse","description":"The tenant's bounded live teammate list."},"TriggerPerson":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"TriggerPerson","description":"One live teammate offered by a person condition."},"TriggerPreviewDestination":{"properties":{"platform_code":{"type":"string","title":"Platform Code"},"channel_external_id":{"type":"string","title":"Channel External Id"},"channel_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Name"}},"type":"object","required":["platform_code","channel_external_id","channel_name"],"title":"TriggerPreviewDestination","description":"The resolved destination the real trigger uses."},"TriggerPreviewEvent":{"properties":{"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id"},"occurred_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Occurred At"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"conditions":{"items":{"$ref":"#/components/schemas/TriggerConditionVerdict"},"type":"array","title":"Conditions"},"rendered_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rendered Message"}},"type":"object","required":["event_id","occurred_at","properties","conditions","rendered_message"],"title":"TriggerPreviewEvent","description":"One event evaluation in a trigger preview."},"TriggerPreviewRequest":{"properties":{"sample_source":{"type":"string","enum":["catalog","recent"],"title":"Sample Source","default":"catalog"},"limit":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Limit","default":5}},"additionalProperties":false,"type":"object","title":"TriggerPreviewRequest","description":"Select catalog data or recent real events for a side-effect-free preview."},"TriggerPreviewResponse":{"properties":{"trigger_id":{"type":"string","format":"uuid","title":"Trigger Id"},"action":{"type":"string","enum":["announce","agent"],"title":"Action"},"instruction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instruction"},"destination":{"$ref":"#/components/schemas/TriggerPreviewDestination"},"sample_source":{"type":"string","enum":["catalog","recent"],"title":"Sample Source"},"events":{"items":{"$ref":"#/components/schemas/TriggerPreviewEvent"},"type":"array","title":"Events"},"no_events_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"No Events Message"},"hourly_ceiling":{"anyOf":[{"$ref":"#/components/schemas/TriggerHourlyCeiling"},{"type":"null"}]}},"type":"object","required":["trigger_id","action","instruction","destination","sample_source","events","no_events_message","hourly_ceiling"],"title":"TriggerPreviewResponse","description":"A side-effect-free evaluation of one trigger."},"TriggerView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"action":{"type":"string","enum":["announce","agent"],"title":"Action"},"status":{"type":"string","enum":["active","stopped"],"title":"Status"},"source":{"type":"string","title":"Source"},"source_label":{"type":"string","title":"Source Label"},"event":{"type":"string","title":"Event"},"event_label":{"type":"string","title":"Event Label"},"narrowing":{"items":{"$ref":"#/components/schemas/TriggerNarrowing"},"type":"array","title":"Narrowing"},"instruction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instruction"},"template":{"type":"string","title":"Template"},"channel_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Name"},"channel_external_id":{"type":"string","title":"Channel External Id"},"platform_code":{"type":"string","title":"Platform Code"},"armed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Armed By"},"runs_as_caller":{"type":"boolean","title":"Runs As Caller"},"armed_at":{"type":"string","format":"date-time","title":"Armed At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"total_fires":{"type":"integer","title":"Total Fires"},"last_fired_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Fired At"},"failed_fires":{"type":"integer","title":"Failed Fires"},"last_failed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Failed At"}},"type":"object","required":["id","action","status","source","source_label","event","event_label","narrowing","instruction","template","channel_name","channel_external_id","platform_code","armed_by","runs_as_caller","armed_at","updated_at","total_fires","last_fired_at","failed_fires","last_failed_at"],"title":"TriggerView","description":"One standing trigger as the dashboard displays it."},"UnresolvedReason":{"type":"string","enum":["actor_not_in_tenant","ambiguous_verified_email","no_principal","team_scope","legacy_row"],"title":"UnresolvedReason","description":"Why a writer could not name an owner. Recorded for the pre-flip inventory, never for control flow.\n\nA reason is an OBSERVATION about one write. It never widens what the row may do: every\nunresolved row lands on the same fail-closed columns whichever reason produced it."},"UpdateBody":{"properties":{"base_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Base Url"},"token":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Token"},"header_name":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Header Name"},"clear_secret":{"type":"boolean","title":"Clear Secret","default":false}},"additionalProperties":false,"type":"object","title":"UpdateBody","description":"A dial-input change. Every field optional, and **omission is meaningful** — see ``token``."},"UpdateDraftRequest":{"properties":{"manifest":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Manifest"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"}},"type":"object","title":"UpdateDraftRequest","description":"Replace the draft's working manifest and/or its title."},"UpdateRoleBody":{"properties":{"role_code":{"type":"string","title":"Role Code"}},"additionalProperties":false,"type":"object","required":["role_code"],"title":"UpdateRoleBody","description":"PATCH /members/{id} request body."},"UpgradeInstallationRequest":{"properties":{"expected_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Expected Version Id"}},"additionalProperties":false,"type":"object","title":"UpgradeInstallationRequest","description":"Move an installed skill onto the newest published version of that same skill.\n\nThere is no version to choose: the route resolves the skill's currently ACTIVE version inside the\ncaller's tenant. ``expected_version_id`` is a compare-and-set guard over that resolution — the id the\ndashboard showed the person as \"the update\" — so a version published while they were reading the\npage surfaces a conflict instead of silently applying a different upgrade than the one they saw. It\nis never used AS the target, so it cannot pin another skill's or another tenant's version."},"UpstreamRevokeOutcome":{"type":"string","enum":["revoked","unsupported","pending","adapter_error"],"title":"UpstreamRevokeOutcome","description":"What actually happened at the provider when we tried to revoke a disconnected account.\n\nEvery value except ``REVOKED`` means the provider-side credential may still be LIVE, so the four are\nkept apart rather than collapsed into success/failure: they carry different truths for the user and\ndifferent remedies for us.\n\n- ``REVOKED``: the provider confirmed it. The only outcome that may be reported as \"access removed\".\n- ``UNSUPPORTED``: no upstream revoke exists to attempt (the adapter raises ``NotImplementedError``,\n  or declares ``revoke_confirms_upstream = False``). Nothing failed, and nothing was revoked either.\n- ``PENDING``: a real attempt failed against the provider (outage, timeout, HTTP error). Retrying\n  later can succeed, so the account is flagged for the orphan report.\n- ``ADAPTER_ERROR``: the fault is on OUR side and no provider answer was recorded. Deliberately\n  NOT \"the request never left\" — for the MCP path it never does, but a generic adapter can also\n  die MID-call (``ADAPTER_BUG_EXCEPTIONS`` names that case), which leaves the provider's state\n  unknown rather than untouched. Retrying the same input changes nothing; **a deploy, operator\n  remediation, or configuration** does. Three shapes, and an on-call engineer needs all of them:\n  our adapter is broken (a ``revoke`` whose signature no longer matches the call, a missing\n  attribute, a typo), which a deploy fixes; the debt itself cannot be built into an authenticated\n  request — an OAuth debt written before client identities were recorded, say — which no deploy\n  can repair, because the missing part is data; or a signing key is absent, which is neither, and\n  is repaired by setting it. Reading this as \"only a deploy fixes this\" sends someone hunting for\n  a code bug that does not exist. It is a separate outcome from ``PENDING`` because our own\n  failure, reported as a provider outage, is a failure nobody ever looks for."},"UpstreamRevokeState":{"type":"string","enum":["attempt_pending","provider_error","adapter_error","revoked","unsupported"],"title":"UpstreamRevokeState","description":"What we know about the provider-side credential after a disconnect cycle.\n\nThe first three mean the credential may still be live at the provider, and so may still be\nbilling; the orphan report lists exactly those. The last two are settled and never appear there.\n\n- ``ATTEMPT_PENDING``: no final outcome has been recorded for this disconnect. It does NOT mean\n  nothing was attempted — it also covers a call running right now and one whose result was not\n  saved. Read ``RevokeRetryOwnership`` to tell those apart.\n- ``PROVIDER_ERROR``: the provider call failed (outage, timeout, HTTP error). Retrying can fix it.\n- ``ADAPTER_ERROR``: the fault is on OUR side and no provider answer was recorded, so retrying\n  the same input changes nothing. Not quite the same as \"the request never left\": for the MCP\n  path it never does, but a generic adapter can also die MID-call (``ADAPTER_BUG_EXCEPTIONS``\n  names that case), which leaves the provider's state genuinely unknown rather than untouched.\n  Three shapes: our integration code is broken, which a deploy fixes; the debt cannot be built\n  into an authenticated request, which is operator work because the missing part is data; or a\n  signing key is absent, which is configuration. ``UpstreamRevokeOutcome`` carries the split.\n- ``REVOKED``: the provider confirmed the credential is gone. Carries a revoked-at timestamp.\n- ``UNSUPPORTED``: there was nothing revocable to call. Nothing is owed and nothing leaked."},"UsageLimitItem":{"properties":{"key":{"type":"string","title":"Key","description":"Stable machine id for this limit (e.g. 'spend.monthly_cap')."},"label":{"type":"string","title":"Label","description":"Friendly name shown on the card."},"summary":{"type":"string","title":"Summary","description":"Plain-language one-liner explaining what the limit does."},"kind":{"type":"string","enum":["meter","balance","setting"],"title":"Kind","description":"How the item renders: meter, balance, or setting."},"status":{"type":"string","enum":["ok","near","reached","off"],"title":"Status","description":"Honest state: ok, near (80%+), reached, or off."},"used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Used","description":"Current usage (meters) or remaining amount (balances)."},"limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Limit","description":"The cap (meters) or configured value (settings)."},"unit":{"anyOf":[{"type":"string","enum":["usd","credits","minutes","recordings","replies","reports","days"]},{"type":"null"}],"title":"Unit","description":"How to format the numbers."},"period_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Label","description":"When the numbers apply, e.g. 'this month' or 'right now'."},"source":{"anyOf":[{"type":"string","enum":["default","custom"]},{"type":"null"}],"title":"Source","description":"Whether the cap is Patricia's recommended default or a workspace override."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"Honest context, e.g. why a feature-off limit has nothing to show."},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail","description":"Technical detail for the advanced reveal."},"manage_tab":{"anyOf":[{"type":"string","enum":["billing","spending","data","model"]},{"type":"null"}],"title":"Manage Tab","description":"The Settings tab where this limit is changed, when one exists."}},"type":"object","required":["key","label","summary","kind","status"],"title":"UsageLimitItem","description":"One limit: what it is, where usage stands against it, and where to change it."},"UsageLimitSection":{"properties":{"key":{"type":"string","title":"Key"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"items":{"items":{"$ref":"#/components/schemas/UsageLimitItem"},"type":"array","title":"Items"}},"type":"object","required":["key","title","description","items"],"title":"UsageLimitSection","description":"A titled group of related limits (display order = list order)."},"UsageLimitsResponse":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/UsageLimitSection"},"type":"array","title":"Sections"}},"type":"object","required":["sections"],"title":"UsageLimitsResponse","description":"Every limit the caller's workspace has, with current usage, in display order."},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email_verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Email Verified At"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Disabled At"},"is_internal":{"type":"boolean","title":"Is Internal"}},"type":"object","required":["id","email","first_name","last_name","email_verified_at","disabled_at","is_internal"],"title":"UserResponse","description":"Public user profile (never exposes ``password_hash``)."},"ValidateManifestRequest":{"properties":{"manifest":{"additionalProperties":true,"type":"object","title":"Manifest"},"files":{"anyOf":[{"items":{"$ref":"#/components/schemas/BundleFilePayload"},"type":"array"},{"type":"null"}],"title":"Files"}},"type":"object","required":["manifest"],"title":"ValidateManifestRequest","description":"Compile-only validation. ``files`` (when present, even empty) is additionally checked against the\nmanifest's declared bundle files with the same presence + size-cap rules a create/publish enforces;\nomit it (null) to validate the manifest alone."},"ValidateManifestResponse":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true},"slug":{"type":"string","title":"Slug"},"semver":{"type":"string","title":"Semver"},"title":{"type":"string","title":"Title"},"archetype_code":{"type":"string","title":"Archetype Code"},"delivery_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Mode"},"config_fields":{"items":{"$ref":"#/components/schemas/ConfigFieldSchema"},"type":"array","title":"Config Fields"}},"type":"object","required":["slug","semver","title","archetype_code","delivery_mode"],"title":"ValidateManifestResponse","description":"The compiled highlights of a manifest (editor live validation, no persistence)."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidationResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"delivery_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Mode"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"}},"type":"object","required":["valid"],"title":"ValidationResponse","description":"The result of validating a manifest: friendly errors for the live editor."},"VersionFilesResponse":{"properties":{"manifest_version_id":{"type":"string","format":"uuid","title":"Manifest Version Id"},"semver":{"type":"string","title":"Semver"},"manifest_json":{"additionalProperties":true,"type":"object","title":"Manifest Json"},"files":{"items":{"$ref":"#/components/schemas/BundleFileResponse"},"type":"array","title":"Files"},"config_fields":{"items":{"$ref":"#/components/schemas/ConfigFieldSchema"},"type":"array","title":"Config Fields"}},"type":"object","required":["manifest_version_id","semver","manifest_json","files"],"title":"VersionFilesResponse","description":"A version's manifest + stored files + projected settings-field schema (the editor payload)."},"VersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"semver":{"type":"string","title":"Semver"},"status_code":{"type":"string","title":"Status Code"},"provenance_code":{"type":"string","title":"Provenance Code"},"archetype_code":{"type":"string","title":"Archetype Code"},"delivery_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Mode"},"manifest_hash":{"type":"string","title":"Manifest Hash"},"authored_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Authored By"},"approved_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Approved By"},"approved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approved At"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"requires_second_approver":{"type":"boolean","title":"Requires Second Approver"}},"type":"object","required":["id","semver","status_code","provenance_code","archetype_code","delivery_mode","manifest_hash","authored_by","approved_by","approved_at","activated_at","created_at","requires_second_approver"],"title":"VersionResponse","description":"One immutable manifest version in the cockpit timeline."},"VisibilityBody":{"properties":{"expected_current":{"$ref":"#/components/schemas/IntegrationVisibility"},"target":{"$ref":"#/components/schemas/IntegrationVisibility"}},"additionalProperties":false,"type":"object","required":["expected_current","target"],"title":"VisibilityBody","description":"Switch a connected account between PERSONAL (private) and TEAM (whole company).\n\n``expected_current`` is a compare-and-set guard: the write only lands if the account is still at\nthat scope, so a concurrent flip surfaces a 409 instead of silently clobbering."},"WelcomePreviewResponse":{"properties":{"text":{"type":"string","title":"Text"},"workspace_name":{"type":"string","title":"Workspace Name"},"recipient_first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient First Name"},"admin_first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin First Name"}},"type":"object","required":["text","workspace_name","recipient_first_name","admin_first_name"],"title":"WelcomePreviewResponse","description":"The real welcome DM rendered for the authenticated workspace."},"WireContractBackfillResult":{"properties":{"task_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Id","description":"Broker task id, for tracing the sweep's logs."}},"type":"object","title":"WireContractBackfillResult","description":"Ack that the fleet wire-contract-digest backfill was enqueued."},"WireContractDigestFailure":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"tool_definition_id":{"type":"string","title":"Tool Definition Id"},"name":{"type":"string","title":"Name","description":"The tool's dispatch name within its tenant."},"tool_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Ref","description":"Provider action this row dispatches, from its config."},"provider":{"type":"string","title":"Provider"},"reason":{"type":"string","title":"Reason","description":"``missing`` (no digest recorded), ``mismatched`` (the recorded digest no longer describes the row's own stored state), or ``unverifiable`` (the provider publishes no contract for this ref: retired, unknown, or unconfigured)."},"blocked_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocked By","description":"Why no usable live digest could be obtained, when that is the reason. Deployment faults: ``provider_not_configured`` (no adapter registered in this process), ``publisher_capability_missing`` (a provider we ship a contract for whose adapter is not offering it), or ``digest_error`` (the capability raised, or returned something that is not a string). Data faults: ``provider_publishes_no_contract`` (this provider has no fixed wire), ``digest_blank`` (it answered with an empty string), or ``no_tool_ref`` (the row's own config carries no usable ref). Null for an ordinary retired or unknown ref, which is the one case the provider answered normally."}},"type":"object","required":["tenant_id","tool_definition_id","name","provider","reason"],"title":"WireContractDigestFailure","description":"One enabled tool row whose recorded wire-contract digest does not hold."},"WireContractDigestReport":{"properties":{"ok":{"type":"boolean","title":"Ok","description":"True only when nothing is missing, mismatched, or unverifiable."},"checked":{"type":"integer","title":"Checked"},"verified":{"type":"integer","title":"Verified"},"missing":{"type":"integer","title":"Missing"},"mismatched":{"type":"integer","title":"Mismatched"},"unverifiable":{"type":"integer","title":"Unverifiable"},"failures":{"items":{"$ref":"#/components/schemas/WireContractDigestFailure"},"type":"array","title":"Failures","description":"A capped sample of the offending rows, for diagnosis."},"failures_truncated":{"type":"boolean","title":"Failures Truncated","description":"True when more rows failed than the sample lists."}},"type":"object","required":["ok","checked","verified","missing","mismatched","unverifiable","failures_truncated"],"title":"WireContractDigestReport","description":"Whether every enabled tool row of an approval-mandatory provider records a wire contract."},"WorkspaceDefaultRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"True gives the skill back to the workspace (deleting any suppressing row); false stops it. Both are idempotent."}},"type":"object","required":["enabled"],"title":"WorkspaceDefaultRequest","description":"Whether this workspace should run a default-on catalog skill."},"WorkspaceDefaultState":{"properties":{"slug":{"type":"string","title":"Slug"},"enabled":{"type":"boolean","title":"Enabled"},"changed":{"type":"boolean","title":"Changed"}},"type":"object","required":["slug","enabled","changed"],"title":"WorkspaceDefaultState","description":"What the workspace's default now is for one skill."},"models__api_key__ApiKey__CreateValidator":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"role_code":{"$ref":"#/components/schemas/Role"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"additionalProperties":false,"type":"object","required":["name","role_code"],"title":"CreateValidator","description":"POST body. ``tenant_id`` + key material are server-assigned."},"models__api_key__ApiKey__CreatedValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"role_code":{"$ref":"#/components/schemas/Role"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"plaintext_key":{"type":"string","title":"Plaintext Key"}},"type":"object","required":["id","tenant_id","name","prefix","role_code","created_at","updated_at","plaintext_key"],"title":"CreatedValidator","description":"POST response: carries the one-time plaintext key."},"models__api_key__ApiKey__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"role_code":{"$ref":"#/components/schemas/Role"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","name","prefix","role_code","created_at","updated_at"],"title":"FullValidator","description":"Response shape: never includes the stored hash or the plaintext key."},"models__api_key__ApiKey__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__api_key__ApiKey__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response ({items, first, next, previous})."},"models__audit__AuditLog__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target"},"risk_tier_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Tier Code"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape.\n\nAll fields optional so ``fields=`` projection validates (runflow audit\npattern). ``metadata_`` reads the ORM attr by name and serializes under\nthe public key ``metadata`` via ``serialization_alias``."},"models__audit__AuditLog__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__audit__AuditLog__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin audit read."},"models__billing__AdminCreditAdjustment__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount"},"applied_credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Applied Credits"},"applied_retail_micro_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Applied Retail Micro Usd"},"balance_after":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Balance After"},"retail_balance_after_micro_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Retail Balance After Micro Usd"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"},"created_by_principal_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Principal Id"},"created_by_principal_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Principal Type"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__billing__AdminCreditAdjustment__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__billing__AdminCreditAdjustment__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__billing__InvoiceLine__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"invoice_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Invoice Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"},"unit_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Amount Cents"},"amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Cents"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__billing__InvoiceLine__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__billing__InvoiceLine__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__billing__Invoice__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"invoice_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Number"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"issued_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Issued At"},"currency_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency Code"},"subtotal_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subtotal Cents"},"tax_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tax Cents"},"total_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Cents"},"bill_to_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bill To Name"},"bill_to_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bill To Details"},"stripe_payment_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Payment Intent Id"},"stripe_checkout_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Checkout Session Id"},"stripe_invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Invoice Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__billing__Invoice__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__billing__Invoice__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__billing__Subscription__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"seats":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"credit_balance_micro_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credit Balance Micro Usd"},"cancel_at_period_end":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cancel At Period End"},"credit_balance":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Credit Balance"},"monthly_credit_grant":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Credit Grant"},"credit_rollover":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Credit Rollover"},"last_grant_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Grant At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__billing__Subscription__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__billing__Subscription__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__billing__UsageRecord__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"},"usage_shard_key":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Usage Shard Key"},"run_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Run Count"},"input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Tokens"},"output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Tokens"},"cache_read_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Read Tokens"},"cache_write_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Write Tokens"},"tool_calls":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Calls"},"cost_micro_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cost Micro Usd"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__billing__UsageRecord__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__billing__UsageRecord__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__brain__BrainDocRevision__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"brain_doc_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brain Doc Id"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"updated_by_run":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By Run"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__brain__BrainDocRevision__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__brain__BrainDocRevision__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__brain__BrainDoc__CreateValidator":{"properties":{"path":{"type":"string","title":"Path"},"title":{"type":"string","title":"Title"},"summary":{"type":"string","title":"Summary","default":""},"body":{"type":"string","title":"Body","default":""},"scope_code":{"$ref":"#/components/schemas/BrainDocScope","default":"company"},"status_code":{"$ref":"#/components/schemas/DocStatus","default":"active"},"pinned":{"type":"boolean","title":"Pinned","default":false},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},"additionalProperties":false,"type":"object","required":["path","title"],"title":"CreateValidator","description":"POST body. ``tenant_id`` is server-assigned from the request context."},"models__brain__BrainDoc__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"path":{"type":"string","title":"Path"},"title":{"type":"string","title":"Title"},"summary":{"type":"string","title":"Summary"},"body":{"type":"string","title":"Body"},"scope_code":{"$ref":"#/components/schemas/BrainDocScope"},"status_code":{"$ref":"#/components/schemas/DocStatus"},"pinned":{"type":"boolean","title":"Pinned"},"version":{"type":"integer","title":"Version"},"token_count":{"type":"integer","title":"Token Count"},"hit_count":{"type":"integer","title":"Hit Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"updated_by_run":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By Run"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","path","title","summary","body","scope_code","status_code","pinned","version","token_count","hit_count","created_at","updated_at"],"title":"FullValidator","description":"Response shape for GET / POST / PUT / PATCH."},"models__brain__BrainDoc__MergeValidator":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"scope_code":{"anyOf":[{"$ref":"#/components/schemas/BrainDocScope"},{"type":"null"}]},"status_code":{"anyOf":[{"$ref":"#/components/schemas/DocStatus"},{"type":"null"}]},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator","description":"PATCH body: every field optional; only those set are written."},"models__brain__BrainDoc__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__brain__BrainDoc__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__brain__BrainDoc__UpdateValidator":{"properties":{"title":{"type":"string","title":"Title"},"summary":{"type":"string","title":"Summary","default":""},"body":{"type":"string","title":"Body","default":""},"scope_code":{"$ref":"#/components/schemas/BrainDocScope"},"status_code":{"$ref":"#/components/schemas/DocStatus"},"pinned":{"type":"boolean","title":"Pinned","default":false},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["title","scope_code","status_code","updated_at"],"title":"UpdateValidator","description":"PUT body: full update of mutable fields (carries ``updated_at`` for the stale check)."},"models__brain__Lesson__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"status_code":{"anyOf":[{"$ref":"#/components/schemas/LessonStatus"},{"type":"null"}]},"evidence":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Evidence"},"eval_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eval Score"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__brain__Lesson__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__brain__Lesson__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__brain__MemoryItem__CreateValidator":{"properties":{"scope_code":{"$ref":"#/components/schemas/MemoryScope","default":"tenant"},"scope_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Ref"},"kind_code":{"$ref":"#/components/schemas/MemoryKind"},"content":{"type":"string","minLength":1,"title":"Content"},"salience":{"type":"number","title":"Salience","default":0.5},"pinned":{"type":"boolean","title":"Pinned","default":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"source":{"type":"string","title":"Source"}},"additionalProperties":false,"type":"object","required":["kind_code","content","source"],"title":"CreateValidator","description":"POST body. ``tenant_id`` is server-assigned; the memory is stored without a vector."},"models__brain__MemoryItem__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"scope_code":{"$ref":"#/components/schemas/MemoryScope"},"scope_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Ref"},"kind_code":{"$ref":"#/components/schemas/MemoryKind"},"content":{"type":"string","title":"Content"},"salience":{"type":"number","title":"Salience"},"hit_count":{"type":"integer","title":"Hit Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"pruned_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pruned At"},"pinned":{"type":"boolean","title":"Pinned"},"source":{"type":"string","title":"Source"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","scope_code","kind_code","content","salience","hit_count","pinned","source","created_at","updated_at"],"title":"FullValidator","description":"Response shape for GET / POST / PUT / PATCH. The raw vector is never exposed."},"models__brain__MemoryItem__MergeValidator":{"properties":{"scope_code":{"anyOf":[{"$ref":"#/components/schemas/MemoryScope"},{"type":"null"}]},"scope_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Ref"},"kind_code":{"anyOf":[{"$ref":"#/components/schemas/MemoryKind"},{"type":"null"}]},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"salience":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Salience"},"hit_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hit Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"pruned_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pruned At"},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator","description":"PATCH body: every field optional; only those set are written."},"models__brain__MemoryItem__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__brain__MemoryItem__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__brain__MemoryItem__UpdateValidator":{"properties":{"scope_code":{"$ref":"#/components/schemas/MemoryScope"},"scope_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Ref"},"kind_code":{"$ref":"#/components/schemas/MemoryKind"},"content":{"type":"string","title":"Content"},"salience":{"type":"number","title":"Salience","default":0.5},"hit_count":{"type":"integer","title":"Hit Count","default":0},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"pruned_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pruned At"},"pinned":{"type":"boolean","title":"Pinned","default":false},"source":{"type":"string","title":"Source"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["scope_code","kind_code","content","source","updated_at"],"title":"UpdateValidator","description":"PUT body: full update of mutable fields (carries ``updated_at`` for the stale check)."},"models__brain__SkillFile__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"kind":{"type":"string","title":"Kind"},"path":{"type":"string","title":"Path"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","skill_id","kind","path","content","created_at","updated_at"],"title":"FullValidator","description":"Read-only response shape for the skill-file listing."},"models__brain__Skill__CreateValidator":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"content":{"type":"string","maxLength":100000,"title":"Content"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"version":{"type":"integer","title":"Version","default":1},"status_code":{"$ref":"#/components/schemas/LessonStatus","default":"proposed"},"eval_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eval Score"}},"additionalProperties":false,"type":"object","required":["name","content"],"title":"CreateValidator","description":"POST body. ``tenant_id`` and ``created_by`` are server-assigned.\n\nNo ``created_by``: it is the provenance label, and a body that could set it could stamp a\nworkspace's own skill ``patricia`` and wear the platform's badge. ``extra=\"forbid\"`` turns\nsuch a body into a 422 rather than ignoring the field, so a caller who thinks they are\nchoosing the provenance is told they are not. The repository assigns ``custom``.\n\nThe 422 is a DELIBERATE contract break, chosen against the accept-and-discard bargain\nPUT/PATCH make. Those verbs round-trip GET bodies of existing rows, so silence there keeps\nworking clients working. Create is where a forged label would be minted, and the published\ncreate contract never honoured the field for anyone: every user-principal request 500'd\nfrom the day the route shipped, and an API-key caller's body value was silently overwritten\nby the factory's injection. Refusing loudly beats continuing either of those."},"models__brain__Skill__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"content":{"type":"string","title":"Content"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"version":{"type":"integer","title":"Version"},"status_code":{"$ref":"#/components/schemas/LessonStatus"},"eval_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eval Score"},"created_by":{"type":"string","title":"Created By"},"hit_count":{"type":"integer","title":"Hit Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","content","version","status_code","created_by","hit_count","created_at","updated_at"],"title":"FullValidator","description":"Response shape for GET / POST / PUT / PATCH."},"models__brain__Skill__MergeValidator":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"content":{"anyOf":[{"type":"string","maxLength":100000},{"type":"null"}],"title":"Content"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"},"status_code":{"anyOf":[{"$ref":"#/components/schemas/LessonStatus"},{"type":"null"}]},"eval_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eval Score"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator","description":"PATCH body: every field optional; only those set are written.\n\n``created_by`` is declared but never written: it is in ``readonly_fields``, so the\nrepository accepts and DISCARDS it, exactly as PUT does. That was the hole this branch\nclosed: PATCH used to write every field it was given, which let a tenant rewrite an\nexisting skill's provenance to ``patricia`` after the fact. The fix belongs in the\nrepository, not here. Forbidding the field instead would 422 every client that round-trips\na GET body back, and read-modify-write is at least as common on PATCH as on PUT."},"models__brain__Skill__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__brain__Skill__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__brain__Skill__UpdateValidator":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"content":{"type":"string","maxLength":100000,"title":"Content"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"version":{"type":"integer","title":"Version","default":1},"status_code":{"$ref":"#/components/schemas/LessonStatus"},"eval_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eval Score"},"created_by":{"type":"string","title":"Created By"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["name","content","status_code","created_by","updated_at"],"title":"UpdateValidator","description":"PUT body: full update of mutable fields (carries ``updated_at`` for the stale check)."},"models__conversation__Conversation__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"platform_code":{"$ref":"#/components/schemas/Platform"},"kind_code":{"$ref":"#/components/schemas/ConversationKind"},"source_code":{"$ref":"#/components/schemas/ConversationSource"},"external_id":{"type":"string","title":"External Id"},"thread_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Ref"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"type":"string","title":"Status"},"locked_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locked By"},"lock_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Lock Expires At"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"streaming_turn_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Streaming Turn Id"},"streaming_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Streaming Expires At"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","platform_code","kind_code","source_code","external_id","status","metadata","created_at","updated_at"],"title":"FullValidator","description":"Response shape for GET / POST / PUT / PATCH.\n\nThe ORM attribute ``metadata_`` dodges the SQLAlchemy-reserved\n``metadata`` attribute; the PUBLIC field is exposed cleanly as\n``metadata`` (runflow alias pattern: ``from_attributes`` reads the ORM\nattr by field name, ``serialization_alias`` is the public/serialized key)."},"models__conversation__Conversation__MergeValidator":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator","description":"PATCH body: every field optional; only those set are written."},"models__conversation__Conversation__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__conversation__Conversation__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__conversation__Conversation__UpdateValidator":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"type":"string","title":"Status"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["status","updated_at"],"title":"UpdateValidator","description":"PUT body: full update of mutable fields (carries ``updated_at`` for the stale check)."},"models__conversation__Message__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"author_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Author Actor Id"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"card":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Card"},"platform_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Message Id"},"token_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Token Count"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","title":"FullValidator","description":"Read-only response shape for the conversation transcript.\n\nAll fields optional so ``fields=`` projection validates (runflow read\npattern). Append-only, with no Create/Update/Merge validators."},"models__conversation__Message__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__conversation__Message__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated transcript list response."},"models__cron__CronJob__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Run At"},"kind_code":{"$ref":"#/components/schemas/CronKind"},"delivery_conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Delivery Conversation Id"},"delivery_channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Channel Id"},"created_by_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Actor Id"},"prompt":{"type":"string","title":"Prompt"},"condition_script":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition Script"},"enabled":{"type":"boolean","title":"Enabled"},"model":{"type":"string","title":"Model"},"cost_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Tier"},"locked_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locked By"},"lease_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Lease Expires At"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At"},"next_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Run At"},"run_count":{"type":"integer","title":"Run Count"},"max_runs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Runs"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","name","kind_code","prompt","enabled","model","run_count","created_at","updated_at"],"title":"FullValidator","description":"Response shape for GET / POST / PUT / PATCH."},"models__cron__CronJob__MergeValidator":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Run At"},"kind_code":{"anyOf":[{"$ref":"#/components/schemas/CronKind"},{"type":"null"}]},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"condition_script":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition Script"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"cost_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Tier"},"max_runs":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Runs"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator","description":"PATCH body: every field optional; only those set are written."},"models__cron__CronJob__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__cron__CronJob__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__cron__CronJob__UpdateValidator":{"properties":{"name":{"type":"string","title":"Name"},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Run At"},"kind_code":{"$ref":"#/components/schemas/CronKind","default":"task"},"prompt":{"type":"string","title":"Prompt"},"condition_script":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition Script"},"enabled":{"type":"boolean","title":"Enabled"},"model":{"type":"string","title":"Model"},"cost_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Tier"},"max_runs":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Runs"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["name","prompt","enabled","model","updated_at"],"title":"UpdateValidator","description":"PUT body: full update of mutable fields (carries ``updated_at`` for the stale check)."},"models__group__GroupChannel__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"added_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Added By"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","title":"FullValidator","description":"Response shape. All-optional so admin ``fields=`` projection validates."},"models__group__GroupChannel__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__group__GroupChannel__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response (admin browser)."},"models__group__GroupSuggestion__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"kind":{"type":"string","title":"Kind"},"status_code":{"$ref":"#/components/schemas/GroupSuggestionStatus"},"title":{"type":"string","title":"Title"},"rationale":{"type":"string","title":"Rationale"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"confidence":{"type":"number","title":"Confidence"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"},"created_by_run":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Run"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","kind","status_code","title","rationale","payload","confidence","created_at","updated_at"],"title":"FullValidator"},"models__group__GroupSuggestion__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__group__GroupSuggestion__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__group__Group__CreateValidator":{"properties":{"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"description":{"type":"string","title":"Description","default":""},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"status_code":{"$ref":"#/components/schemas/GroupStatus","default":"active"},"pinned":{"type":"boolean","title":"Pinned","default":false}},"additionalProperties":false,"type":"object","required":["name"],"title":"CreateValidator"},"models__group__Group__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"type":"string","title":"Description"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"status_code":{"$ref":"#/components/schemas/GroupStatus"},"pinned":{"type":"boolean","title":"Pinned"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","name","slug","description","status_code","pinned","created_at","updated_at"],"title":"FullValidator"},"models__group__Group__MergeValidator":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"status_code":{"anyOf":[{"$ref":"#/components/schemas/GroupStatus"},{"type":"null"}]},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator"},"models__group__Group__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__group__Group__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__group__Group__UpdateValidator":{"properties":{"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"type":"string","title":"Description","default":""},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"status_code":{"$ref":"#/components/schemas/GroupStatus"},"pinned":{"type":"boolean","title":"Pinned","default":false},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["name","slug","status_code","updated_at"],"title":"UpdateValidator"},"models__identity__Actor__CreateValidator":{"properties":{"platform_code":{"$ref":"#/components/schemas/Platform"},"external_id":{"type":"string","title":"External Id"},"kind_code":{"$ref":"#/components/schemas/ActorKind","default":"human"},"display_name":{"type":"string","title":"Display Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"profile":{"additionalProperties":true,"type":"object","title":"Profile"}},"additionalProperties":false,"type":"object","required":["platform_code","external_id","display_name"],"title":"CreateValidator","description":"POST body. ``tenant_id`` is server-assigned from the request context."},"models__identity__Actor__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"platform_code":{"$ref":"#/components/schemas/Platform"},"external_id":{"type":"string","title":"External Id"},"kind_code":{"$ref":"#/components/schemas/ActorKind"},"display_name":{"type":"string","title":"Display Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"profile":{"additionalProperties":true,"type":"object","title":"Profile"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","platform_code","external_id","kind_code","display_name","profile","created_at","updated_at"],"title":"FullValidator","description":"Response shape for GET / POST / PUT / PATCH."},"models__identity__Actor__MergeValidator":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"kind_code":{"anyOf":[{"$ref":"#/components/schemas/ActorKind"},{"type":"null"}]},"profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Profile"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator","description":"PATCH body: every field optional; only those set are written."},"models__identity__Actor__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__identity__Actor__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response ({items, first, next, previous})."},"models__identity__Actor__UpdateValidator":{"properties":{"display_name":{"type":"string","title":"Display Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"kind_code":{"$ref":"#/components/schemas/ActorKind"},"profile":{"additionalProperties":true,"type":"object","title":"Profile"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["display_name","kind_code","updated_at"],"title":"UpdateValidator","description":"PUT body: full update of mutable fields.\n\n``updated_at`` is carried for the engine's optimistic-concurrency check\n(stale value → 409)."},"models__identity__PlatformInstallation__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"platform_code":{"anyOf":[{"$ref":"#/components/schemas/Platform"},{"type":"null"}]},"platform_tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Tenant Id"},"platform_bot_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Bot User Id"},"token_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Token Expires At"},"status_code":{"anyOf":[{"$ref":"#/components/schemas/TenantStatus"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only shape: NEVER exposes the encrypted ``*_enc`` credentials."},"models__identity__PlatformInstallation__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__identity__PlatformInstallation__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__identity__Tenant__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"display_name":{"type":"string","title":"Display Name"},"status_code":{"$ref":"#/components/schemas/TenantStatus"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"monthly_cap_micro_usd":{"type":"integer","title":"Monthly Cap Micro Usd"},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","display_name","status_code","settings","monthly_cap_micro_usd","onboarding_completed","created_at","updated_at"],"title":"FullValidator","description":"Response shape for GET / POST / PUT / PATCH."},"models__identity__Tenant__MergeValidator":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"monthly_cap_micro_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Cap Micro Usd"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator","description":"PATCH body: every field optional; only those set are written.\n\nNo ``status_code``, for the reason ``UpdateValidator`` gives."},"models__identity__Tenant__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__identity__Tenant__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__identity__Tenant__UpdateValidator":{"properties":{"display_name":{"type":"string","title":"Display Name"},"monthly_cap_micro_usd":{"type":"integer","title":"Monthly Cap Micro Usd"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["display_name","monthly_cap_micro_usd","updated_at"],"title":"UpdateValidator","description":"PUT body: full update of mutable fields (carries ``updated_at`` for the stale check).\n\nNo ``status_code``: workspace liveness is not a client-writable field. See the column."},"models__integration__IntegrationAccount__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"provider":{"type":"string","title":"Provider"},"app_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Slug"},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Name"},"external_account_id":{"type":"string","title":"External Account Id"},"status_code":{"$ref":"#/components/schemas/IntegrationStatus"},"visibility_code":{"$ref":"#/components/schemas/IntegrationVisibility","default":"team"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"scopes":{"items":{},"type":"array","title":"Scopes","default":[]},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","provider","external_account_id","status_code","created_at","updated_at"],"title":"FullValidator","description":"Response shape for GET / POST / PUT / PATCH."},"models__integration__IntegrationAccount__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__integration__IntegrationAccount__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__mcp_personal_token__McpPersonalToken__CreateValidator":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"additionalProperties":false,"type":"object","required":["name"],"title":"CreateValidator","description":"A self-mint request. The server supplies all identity fields."},"models__mcp_personal_token__McpPersonalToken__CreatedValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"plaintext_token":{"type":"string","title":"Plaintext Token"}},"type":"object","required":["id","tenant_id","user_id","name","prefix","expires_at","created_at","updated_at","plaintext_token"],"title":"CreatedValidator","description":"The create response with the one-time plaintext token."},"models__mcp_personal_token__McpPersonalToken__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","user_id","name","prefix","expires_at","created_at","updated_at"],"title":"FullValidator","description":"A stored token without its hash or one-time plaintext."},"models__preference__ActorPreference__CreateValidator":{"properties":{"actor_id":{"type":"string","format":"uuid","title":"Actor Id"},"key":{"type":"string","title":"Key"},"value":{"type":"string","title":"Value"},"source_code":{"$ref":"#/components/schemas/PreferenceSource","default":"explicit"}},"additionalProperties":false,"type":"object","required":["actor_id","key","value"],"title":"CreateValidator","description":"Upsert body: ``POST /actor-preferences`` sets (or overwrites) one key."},"models__preference__ActorPreference__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"actor_id":{"type":"string","format":"uuid","title":"Actor Id"},"key":{"type":"string","title":"Key"},"value":{"type":"string","title":"Value"},"source_code":{"$ref":"#/components/schemas/PreferenceSource"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","actor_id","key","value","source_code","created_at","updated_at"],"title":"FullValidator"},"models__preference__ActorPreference__MergeValidator":{"properties":{"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"source_code":{"anyOf":[{"$ref":"#/components/schemas/PreferenceSource"},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":false,"type":"object","title":"MergeValidator","description":"PATCH body: edit an existing preference by id."},"models__preference__ActorPreference__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__preference__ActorPreference__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__rbac__Membership__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"role_code":{"anyOf":[{"$ref":"#/components/schemas/Role"},{"type":"null"}]},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__rbac__Membership__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__rbac__Membership__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__reply_review__ReplyScoreReview__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"reply_score_id":{"type":"string","format":"uuid","title":"Reply Score Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"status_code":{"type":"string","title":"Status Code"},"verdict_code":{"type":"string","title":"Verdict Code"},"failure_code":{"type":"string","title":"Failure Code"},"note":{"type":"string","title":"Note"},"reviewed_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reviewed By"},"reviewed_by_type":{"type":"string","title":"Reviewed By Type"},"reviewed_at":{"type":"string","format":"date-time","title":"Reviewed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","reply_score_id","tenant_id","status_code","verdict_code","failure_code","note","reviewed_by_type","reviewed_at","created_at","updated_at"],"title":"FullValidator","description":"The review as it rides along on an admin scorecard row."},"models__run__AgentRun__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"trigger_code":{"$ref":"#/components/schemas/RunTrigger"},"trigger_context":{"anyOf":[{"$ref":"#/components/schemas/RunTriggerContext"},{"type":"null"}]},"message_excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Excerpt"},"status_code":{"$ref":"#/components/schemas/RunStatus"},"truncated":{"type":"boolean","title":"Truncated","default":false},"no_result":{"type":"boolean","title":"No Result","default":false},"silent":{"type":"boolean","title":"Silent","default":false},"model":{"type":"string","title":"Model"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"cache_read_tokens":{"type":"integer","title":"Cache Read Tokens"},"cache_write_tokens":{"type":"integer","title":"Cache Write Tokens"},"cost_micro_usd":{"type":"integer","title":"Cost Micro Usd"},"budget_micro_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Micro Usd"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"credits":{"type":"integer","title":"Credits","description":"Credits consumed by this run (metered COGS → whole credits), the dashboard usage unit.","readOnly":true}},"type":"object","required":["id","tenant_id","trigger_code","status_code","model","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","cost_micro_usd","created_at","updated_at","credits"],"title":"FullValidator","description":"Response shape for the read routes (GET detail / list). Runs are read-only to clients.\n\n``credits`` is the customer-facing consumption for the run: the metered\n``cost_micro_usd`` COGS converted to whole credits (half-up, the same\nledger conversion), so a run detail can show credits without the dashboard\ndoing token→cost math. ``input_tokens`` / ``output_tokens`` / ``cost_micro_usd``\nremain on the payload for internal + admin callers (audit precision) but are\nnever rendered on a normal-user screen (per pricing-v2 §8a).\n\n``checkpoint`` is deliberately NOT here: it is the run's full saved loop\nstate (message history, tool schemas, the pending tool-call vector with raw\narguments), i.e. runtime-internal data, exactly like ``pending_snapshot`` and\n``sandbox_seconds_used``. Exposing it handed every ``runs:read`` holder the raw\npending args the approval surfaces redact per caller. The run timeline is served\nby the nested messages / tool-calls / approval reads instead.\n\n``message_excerpt`` is the first line of the opening message of a DIRECTED run\n(mention/DM/message), so a run list can say what was asked rather than only how it\narrived. It is not a column on this table — the text lives in the run's first user\n``Message`` row — so it is attached by the LIST route alone\n(``routers.runs._attach_message_excerpts``) and is absent from the detail response,\nwhose caller reads the transcript itself. Like ``credits`` it is derived, so it can\nnever be named in ``fields=``. A scheduled run's instruction is NOT carried here:\nthat text is ``trigger_context.prompt``, which stays approver-gated."},"models__run__AgentRun__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__run__AgentRun__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"models__run__PermissionRequest__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name"},"risk_tier_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Tier Code"},"input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input"},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code"},"request_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Hash"},"approver_actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Approver Actor Id"},"delivery_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Ref"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"FullValidator","description":"Admin read-only response shape (all-optional so ``fields=`` projection validates)."},"models__run__PermissionRequest__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__run__PermissionRequest__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response for the admin read."},"models__run__ToolCall__FullValidator":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name"},"kind_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind Code"},"risk_tier_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Tier Code"},"input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input","description":"Tool arguments, sanitized. Present only for callers holding runs:execute; null for read-only callers, which receive input_summary instead. Null with no input_summary means the call had no stored arguments."},"input_summary":{"anyOf":[{"items":{"$ref":"#/components/schemas/ArgSummaryEntry"},"type":"array"},{"type":"null"}],"title":"Input Summary","description":"Value-free per-argument summary, populated in place of input for callers without runs:execute."},"output":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output","description":"Tool result, sanitized like input: visible (control-token-stripped, size-capped) only for callers holding runs:execute, null for read-only callers. Results often echo the arguments, so they follow the same visibility rule."},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Failure diagnostic, sanitized like input: visible only for callers holding runs:execute, null for read-only callers. Error messages routinely quote the failing call's arguments, so they follow the same visibility rule."},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","title":"FullValidator","description":"Read-only response shape for the run's tool-call timeline.\n\nAll fields optional so ``fields=`` projection validates (runflow read\npattern). ``input_`` reads the ORM attr by name and serializes under the\npublic key ``input`` via ``serialization_alias``. Append-only, with no\nCreate/Update/Merge validators.\n\n``input`` values are shaped per caller by the route's post-serialize hook\n(``routers/run_tool_calls_nested.py``): sanitized for approval-scope callers,\nnulled with ``input_summary`` populated for plain ``runs:read`` callers."},"models__run__ToolCall__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__run__ToolCall__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated tool-call list response."},"models__service_api_key__ServiceApiKey__CreateValidator":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"additionalProperties":false,"type":"object","required":["name","expires_at"],"title":"CreateValidator","description":"POST body. Key material is server-assigned; ``expires_at`` is REQUIRED."},"models__service_api_key__ServiceApiKey__CreatedValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Disabled At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"plaintext_key":{"type":"string","title":"Plaintext Key"}},"type":"object","required":["id","name","key_prefix","expires_at","created_at","updated_at","plaintext_key"],"title":"CreatedValidator","description":"POST response: carries the one-time plaintext key."},"models__service_api_key__ServiceApiKey__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Disabled At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","key_prefix","expires_at","created_at","updated_at"],"title":"FullValidator","description":"Response shape: never includes the stored hash or the plaintext key."},"models__service_api_key__ServiceApiKey__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__service_api_key__ServiceApiKey__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response ({items, first, next, previous})."},"models__tool__ToolDefinition__FullValidator":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"kind_code":{"$ref":"#/components/schemas/ToolKind"},"risk_tier_code":{"$ref":"#/components/schemas/RiskTier"},"schema":{"additionalProperties":true,"type":"object","title":"Schema"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"enabled":{"type":"boolean","title":"Enabled"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","name","kind_code","risk_tier_code","schema","enabled","config","created_at","updated_at"],"title":"FullValidator","description":"Response shape for tenant-scoped list and detail reads."},"models__tool__ToolDefinition__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/models__tool__ToolDefinition__FullValidator"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated list response."},"queries__actor_directory__ActorDirectoryQuery__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ActorDirectoryRow"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated response envelope for the actor directory."},"queries__approvals_feed__ApprovalsFeedQuery__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ApprovalsFeedRow"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated response envelope for the unified approvals feed."},"queries__conversation_directory__ConversationDirectoryQuery__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConversationDirectoryRow"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated response envelope for the conversation directory."},"queries__permission_request_queue__PermissionRequestQueueQuery__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PermissionRequestRow"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated response envelope for the approval queue."},"queries__run_history__RunHistoryQuery__SearchValidator":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RunHistoryRow"},"type":"array","title":"Items"},"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"previous":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous"}},"type":"object","required":["items"],"title":"SearchValidator","description":"Typed cursor-paginated response envelope for the run history."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}