{"components":{"schemas":{"Error":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"type":"object"}},"securitySchemes":{"bearer":{"description":"tqs_ session, tqt_ technical account or tqp_ personal access token","scheme":"bearer","type":"http"}}},"info":{"description":"Public REST API of tq-server. Stability per operation in x-tq-stability: stable (only additive changes within /api/v1), experimental (may change in a minor release), internal (admin panel and tq admin, versioned with the server), external (UnrealGameSync protocol). Deprecated operations answer with Deprecation, Sunset and Link headers.","title":"TouchQuill REST API","version":"1 (server 0.9.0)"},"openapi":"3.0.3","paths":{"/":{"get":{"operationId":"get_root","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Landing page (HTML) linking the admin panel, API docs and health","tags":["server","internal"],"x-tq-stability":"internal"}},"/admin":{"get":{"operationId":"get_admin","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Admin panel (single HTML page; it calls the admin API with a token)","tags":["server","internal"],"x-tq-stability":"internal"}},"/api/v1/admin/audit":{"get":{"operationId":"get_api_v1_admin_audit","parameters":[{"description":"How many entries","in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"description":"Event type prefix","in":"query","name":"event","required":false,"schema":{"type":"string"}},{"description":"Actor","in":"query","name":"user","required":false,"schema":{"type":"string"}},{"description":"Only denials","in":"query","name":"denied","required":false,"schema":{"type":"string"}},{"description":"Cursor: entries with a lower seq (next_before of the previous page)","in":"query","name":"before","required":false,"schema":{"type":"string"}},{"description":"From this time (unix ms, inclusive)","in":"query","name":"since_ms","required":false,"schema":{"type":"string"}},{"description":"Up to this time (unix ms, inclusive)","in":"query","name":"until_ms","required":false,"schema":{"type":"string"}},{"description":"Part of the resource field","in":"query","name":"resource","required":false,"schema":{"type":"string"}},{"description":"Channel name (exact)","in":"query","name":"channel","required":false,"schema":{"type":"string"}},{"description":"Repository name (exact)","in":"query","name":"repo","required":false,"schema":{"type":"string"}},{"description":"success, denied or failed","in":"query","name":"outcome","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Audit log entries","tags":["admin","internal"],"x-tq-permission":"admin.audit","x-tq-stability":"internal"}},"/api/v1/admin/audit/verify":{"get":{"operationId":"get_api_v1_admin_audit_verify","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Verify the audit hash chain","tags":["admin","internal"],"x-tq-permission":"admin.audit","x-tq-stability":"internal"}},"/api/v1/admin/audit/{id}":{"get":{"operationId":"get_api_v1_admin_audit_id","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"One audit entry (seq or au-*) with verified: hash, signature and link to the previous entry","tags":["admin","internal"],"x-tq-permission":"admin.audit","x-tq-stability":"internal"}},"/api/v1/admin/config/reload":{"post":{"operationId":"post_api_v1_admin_config_reload","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Check the configuration and apply what works without a restart (422 and nothing applied on errors)","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/config/validate":{"get":{"operationId":"get_api_v1_admin_config_validate","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Check server.toml, ci.toml and users.toml: errors per file, warnings, settings that need a restart","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/maintenance":{"delete":{"operationId":"delete_api_v1_admin_maintenance","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Turn maintenance mode off","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"get":{"operationId":"get_api_v1_admin_maintenance","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Maintenance mode state","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"post":{"operationId":"post_api_v1_admin_maintenance","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Turn maintenance mode on {reason}","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/pats":{"get":{"operationId":"get_api_v1_admin_pats","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Personal access tokens with scopes and expiry","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"},"post":{"operationId":"post_api_v1_admin_pats","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Issue a PAT {name, user, scopes, ttl?, repos?} - the token is shown once","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/pats/{name}":{"delete":{"operationId":"delete_api_v1_admin_pats_name","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Revoke a PAT","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/protections":{"get":{"operationId":"get_api_v1_admin_protections","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Path protections (read/write restrictions)","tags":["admin","internal"],"x-tq-permission":"admin.roles","x-tq-stability":"internal"},"put":{"operationId":"put_api_v1_admin_protections","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Replace path protections","tags":["admin","internal"],"x-tq-permission":"admin.roles","x-tq-stability":"internal"}},"/api/v1/admin/roles":{"get":{"operationId":"get_api_v1_admin_roles","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Roles and their permissions","tags":["admin","internal"],"x-tq-permission":"admin.roles","x-tq-stability":"internal"},"post":{"operationId":"post_api_v1_admin_roles","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Create or change a custom role","tags":["admin","internal"],"x-tq-permission":"admin.roles","x-tq-stability":"internal"}},"/api/v1/admin/roles/{name}":{"delete":{"operationId":"delete_api_v1_admin_roles_name","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Remove a custom role","tags":["admin","internal"],"x-tq-permission":"admin.roles","x-tq-stability":"internal"}},"/api/v1/admin/scribe/rebuild":{"post":{"operationId":"post_api_v1_admin_scribe_rebuild","parameters":[{"description":"Repository name","in":"query","name":"repo","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Ask the server to rebuild a repository's Scribe index (in the background)","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/status":{"get":{"operationId":"get_api_v1_admin_status","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Server status for the dashboard","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/telemetry":{"get":{"operationId":"get_api_v1_admin_telemetry","parameters":[{"description":"Window in days","in":"query","name":"days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Client timings and errors (ADR-0019)","tags":["admin","internal"],"x-tq-permission":"admin.audit","x-tq-stability":"internal"}},"/api/v1/admin/users":{"get":{"operationId":"get_api_v1_admin_users","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Accounts with roles and token expiry","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"},"post":{"operationId":"post_api_v1_admin_users","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Create an account (password by default; technical: token with ttl, scopes, repos)","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}":{"delete":{"operationId":"delete_api_v1_admin_users_name","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Remove an account","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}/custom-role":{"post":{"operationId":"post_api_v1_admin_users_name_custom_role","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Assign a custom role","tags":["admin","internal"],"x-tq-permission":"admin.roles","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}/grant":{"post":{"operationId":"post_api_v1_admin_users_name_grant","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Grant or revoke single permissions","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}/logout":{"post":{"operationId":"post_api_v1_admin_users_name_logout","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"End all sessions of the account","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}/passwd":{"post":{"operationId":"post_api_v1_admin_users_name_passwd","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Set a password","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}/role":{"post":{"operationId":"post_api_v1_admin_users_name_role","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Change the role","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}/token":{"post":{"operationId":"post_api_v1_admin_users_name_token","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Rotate the token of a technical account (optional ttl)","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/docs":{"get":{"operationId":"get_api_v1_docs","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Human-readable list of endpoints (HTML, no external assets)","tags":["server"],"x-tq-stability":"stable"}},"/api/v1/health":{"get":{"operationId":"get_api_v1_health","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Liveness with version and uptime","tags":["server"],"x-tq-stability":"stable"}},"/api/v1/login":{"post":{"operationId":"post_api_v1_login","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Log in with a password (and 2FA code) - returns a session token tqs_*","tags":["auth"],"x-tq-stability":"stable"}},"/api/v1/me":{"get":{"operationId":"get_api_v1_me","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"User and role of the token","tags":["auth"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/openapi.json":{"get":{"operationId":"get_api_v1_openapi_json","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"This specification (OpenAPI 3.0)","tags":["server"],"x-tq-stability":"stable"}},"/api/v1/repos":{"get":{"operationId":"get_api_v1_repos","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Repositories visible to the caller","tags":["repos"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}":{"get":{"operationId":"get_api_v1_repos_repo","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"One repository: channels, abandoned ones, default channel and its head","tags":["repos"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/blobs":{"put":{"operationId":"put_api_v1_repos_repo_blobs","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"File path inside the repository","in":"query","name":"path","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Upload file bytes (up to 1 GiB) for a server-side commit","tags":["commits"],"x-tq-permission":"repo.write","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/changes/{change_id}":{"get":{"operationId":"get_api_v1_repos_repo_changes_change_id","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"change_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"A logical change (ch-*): current revision with files and earlier materializations","tags":["revisions"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/channels":{"get":{"operationId":"get_api_v1_repos_repo_channels","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Channels with type and parent, plus abandoned ones","tags":["channels"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/channels/{channel}":{"get":{"operationId":"get_api_v1_repos_repo_channels_channel","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"channel","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"One channel (name percent-encoded, task%2Fx): type, parent, state, owner, ticket, head, locks, open conflicts, review gate","tags":["channels"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/commits":{"post":{"operationId":"post_api_v1_repos_repo_commits","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Server-side commit from uploaded blobs {channel, message, changes, deletes}","tags":["commits"],"x-tq-permission":"repo.write","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/conflicts":{"get":{"operationId":"get_api_v1_repos_repo_conflicts","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Channel (default main)","in":"query","name":"channel","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Conflict records","tags":["conflicts"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/conflicts/{id}":{"get":{"operationId":"get_api_v1_repos_repo_conflicts_id","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Full conflict record","tags":["conflicts"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/conflicts/{id}/assign":{"post":{"operationId":"post_api_v1_repos_repo_conflicts_id_assign","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Assign a conflict record kept on the server to a person or role:<role> ({to, message?})","tags":["conflicts","experimental"],"x-tq-permission":"conflict.assign","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/diff/{rev}":{"get":{"operationId":"get_api_v1_repos_repo_diff_rev","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"rev","required":true,"schema":{"type":"string"}},{"description":"rev:N, ch-* or hash to compare with (default: parent commit)","in":"query","name":"base","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Files changed by a revision against the parent commit or base","tags":["browse","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/events":{"get":{"operationId":"get_api_v1_repos_repo_events","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Event type prefixes, comma separated (lock. or lock.*)","in":"query","name":"types","required":false,"schema":{"type":"string"}},{"description":"Alias of types","in":"query","name":"events","required":false,"schema":{"type":"string"}},{"description":"Channels, comma separated (events without a channel always pass)","in":"query","name":"channels","required":false,"schema":{"type":"string"}},{"description":"Resume after this id (same as the Last-Event-ID header)","in":"query","name":"last_event_id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Server-sent events with id: and Last-Event-ID resume","tags":["events"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/file/{rev}":{"get":{"operationId":"get_api_v1_repos_repo_file_rev","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"rev","required":true,"schema":{"type":"string"}},{"description":"File path inside the repository","in":"query","name":"path","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"File content at a revision (text preview)","tags":["browse","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/filediff/{rev}":{"get":{"operationId":"get_api_v1_repos_repo_filediff_rev","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"rev","required":true,"schema":{"type":"string"}},{"description":"File path inside the repository","in":"query","name":"path","required":false,"schema":{"type":"string"}},{"description":"rev:N, ch-* or hash to compare with (default: parent commit)","in":"query","name":"base","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Diff of one file against the parent commit or base","tags":["browse","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/locks":{"get":{"operationId":"get_api_v1_repos_repo_locks","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Channel (default main)","in":"query","name":"channel","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Locks of a channel with queue, requests and disputes","tags":["locks"],"x-tq-permission":"repo.read","x-tq-stability":"stable"},"post":{"operationId":"post_api_v1_repos_repo_locks","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Acquire a lock {path, channel?}","tags":["locks"],"x-tq-permission":"lock.acquire","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/locks/{path}":{"delete":{"operationId":"delete_api_v1_repos_repo_locks_path","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"path","required":true,"schema":{"type":"string"}},{"description":"Channel (default main)","in":"query","name":"channel","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Release a lock (the path is percent-encoded)","tags":["locks"],"x-tq-permission":"lock.acquire","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/notify/prefs":{"get":{"operationId":"get_api_v1_repos_repo_notify_prefs","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Notification preferences of the caller","tags":["notifications"],"x-tq-permission":"repo.read","x-tq-stability":"stable"},"put":{"operationId":"put_api_v1_repos_repo_notify_prefs","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Set notification preferences of the caller","tags":["notifications"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/notify/test":{"post":{"operationId":"post_api_v1_repos_repo_notify_test","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Test notification for the caller {event?, email?}: the event template in the account language with example data goes to the inbox (and e-mail)","tags":["notifications","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/raw/{rev}":{"get":{"operationId":"get_api_v1_repos_repo_raw_rev","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"rev","required":true,"schema":{"type":"string"}},{"description":"File path inside the repository","in":"query","name":"path","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Raw bytes of a file (application/octet-stream), outside the request limit","tags":["browse"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/review":{"get":{"operationId":"get_api_v1_repos_repo_review","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Channel (default main)","in":"query","name":"channel","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Review comments, verdicts, gate and the pending review request of a channel","tags":["review","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"},"post":{"operationId":"post_api_v1_repos_repo_review","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Add a review comment","tags":["review","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/review/verdict":{"post":{"operationId":"post_api_v1_repos_repo_review_verdict","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Approve or request changes (not on your own change)","tags":["review","experimental"],"x-tq-permission":"review.verdict","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/revisions":{"get":{"operationId":"get_api_v1_repos_repo_revisions","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Page size (default 20, at most 200)","in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"description":"Cursor from next_page_token of the previous page","in":"query","name":"page_token","required":false,"schema":{"type":"string"}},{"description":"Channel (default main)","in":"query","name":"channel","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Revisions of a channel, newest first, cursor pagination","tags":["revisions"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/revisions/{rev}":{"get":{"operationId":"get_api_v1_repos_repo_revisions_rev","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"rev","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"One revision (number without rev:, or ch-*) with its files","tags":["revisions"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/revisions/{rev}/flags":{"get":{"operationId":"get_api_v1_repos_repo_revisions_rev_flags","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"rev","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Build flags of a revision and whether it is stable","tags":["revisions","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/annotate":{"get":{"operationId":"get_api_v1_repos_repo_scribe_annotate","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"File path","in":"query","name":"path","required":false,"schema":{"type":"string"}},{"description":"Revision (default: HEAD)","in":"query","name":"rev","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Per-symbol blame of a file","tags":["scribe","experimental"],"x-tq-permission":"scribe.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/blame":{"get":{"operationId":"get_api_v1_repos_repo_scribe_blame","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Qualified or bare symbol name","in":"query","name":"symbol","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"History of a symbol across renames and moves","tags":["scribe"],"x-tq-permission":"scribe.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/scribe/diff":{"get":{"operationId":"get_api_v1_repos_repo_scribe_diff","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Older revision","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"Newer revision (default: HEAD)","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"Path prefix filter","in":"query","name":"path","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Semantic diff of two revisions: symbols added, removed, changed, renamed, moved","tags":["scribe","experimental"],"x-tq-permission":"scribe.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/link":{"delete":{"operationId":"delete_api_v1_repos_repo_scribe_link","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Symbol whose link is removed","in":"query","name":"symbol","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Remove a manual link","tags":["scribe","experimental"],"x-tq-permission":"repo.write","x-tq-stability":"experimental"},"post":{"operationId":"post_api_v1_repos_repo_scribe_link","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Link two symbols by hand {newer, older} (resolves Ambiguous)","tags":["scribe","experimental"],"x-tq-permission":"repo.write","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/notes":{"delete":{"operationId":"delete_api_v1_repos_repo_scribe_notes","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Symbol","in":"query","name":"symbol","required":false,"schema":{"type":"string"}},{"description":"Note tag","in":"query","name":"tag","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Remove a note","tags":["scribe","experimental"],"x-tq-permission":"repo.write","x-tq-stability":"experimental"},"get":{"operationId":"get_api_v1_repos_repo_scribe_notes","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Qualified or bare symbol name","in":"query","name":"symbol","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Notes attached to a symbol","tags":["scribe","experimental"],"x-tq-permission":"scribe.read","x-tq-stability":"experimental"},"post":{"operationId":"post_api_v1_repos_repo_scribe_notes","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Attach a note to a symbol {symbol, tag, note}","tags":["scribe","experimental"],"x-tq-permission":"repo.write","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/relations":{"get":{"operationId":"get_api_v1_repos_repo_scribe_relations","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Qualified or bare symbol name","in":"query","name":"symbol","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Typed links of a symbol (must-sync, derived-from, replaces, depends-on)","tags":["scribe","experimental"],"x-tq-permission":"scribe.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/search":{"get":{"operationId":"get_api_v1_repos_repo_scribe_search","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Name or fragment","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Symbol kind filter","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"Language filter","in":"query","name":"lang","required":false,"schema":{"type":"string"}},{"description":"Path prefix filter","in":"query","name":"path","required":false,"schema":{"type":"string"}},{"description":"Revision (default: HEAD)","in":"query","name":"rev","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Find symbols by name (exact, prefix, substring; case-insensitive)","tags":["scribe","experimental"],"x-tq-permission":"scribe.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/symbols":{"get":{"operationId":"get_api_v1_repos_repo_scribe_symbols","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"File path inside the repository","in":"query","name":"path","required":false,"schema":{"type":"string"}},{"description":"Revision (default HEAD)","in":"query","name":"rev","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Symbols of a file (also Blueprints)","tags":["scribe"],"x-tq-permission":"scribe.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/scribe/timeline":{"get":{"operationId":"get_api_v1_repos_repo_scribe_timeline","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Qualified or bare symbol name","in":"query","name":"symbol","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Names, files and authors of a symbol over time","tags":["scribe","experimental"],"x-tq-permission":"scribe.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/trace":{"get":{"operationId":"get_api_v1_repos_repo_scribe_trace","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Qualified or bare symbol name","in":"query","name":"symbol","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Full lineage of a symbol","tags":["scribe","experimental"],"x-tq-permission":"scribe.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/scribe/usages":{"get":{"operationId":"get_api_v1_repos_repo_scribe_usages","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Qualified or bare symbol name, or asset path","in":"query","name":"symbol","required":false,"schema":{"type":"string"}},{"description":"Revision (default: HEAD)","in":"query","name":"rev","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Where a symbol or asset is used (code and Blueprint nodes)","tags":["scribe","experimental"],"x-tq-permission":"scribe.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/shelves":{"get":{"operationId":"get_api_v1_repos_repo_shelves","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"Channel (default main)","in":"query","name":"channel","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Shelves visible to the caller","tags":["shelves"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/shelves/{id}":{"get":{"operationId":"get_api_v1_repos_repo_shelves_id","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Shelf record with files","tags":["shelves"],"x-tq-permission":"repo.read","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/shelves/{id}/raw":{"get":{"operationId":"get_api_v1_repos_repo_shelves_id_raw","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"File path inside the repository","in":"query","name":"path","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Bytes of a shelved file","tags":["shelves","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/tree/{rev}":{"get":{"operationId":"get_api_v1_repos_repo_tree_rev","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"rev","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"All files at a revision (HEAD, number or commit hash) with size and blob hash","tags":["browse","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/webhooks":{"get":{"operationId":"get_api_v1_repos_repo_webhooks","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Webhook subscriptions","tags":["webhooks"],"x-tq-permission":"webhook.manage","x-tq-stability":"stable"},"post":{"operationId":"post_api_v1_repos_repo_webhooks","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Subscribe {url, events, channels?, secret?, kind?} - HMAC-SHA256 signed deliveries","tags":["webhooks"],"x-tq-permission":"webhook.manage","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/webhooks/{id}":{"delete":{"operationId":"delete_api_v1_repos_repo_webhooks_id","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Delete a subscription","tags":["webhooks"],"x-tq-permission":"webhook.manage","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/webhooks/{id}/deliveries":{"get":{"operationId":"get_api_v1_repos_repo_webhooks_id_deliveries","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Delivery attempts of a subscription","tags":["webhooks"],"x-tq-permission":"webhook.manage","x-tq-stability":"stable"}},"/api/v1/repos/{repo}/webhooks/{id}/redeliver/{seq}":{"post":{"operationId":"post_api_v1_repos_repo_webhooks_id_redeliver_seq","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"seq","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Deliver an event again","tags":["webhooks"],"x-tq-permission":"webhook.manage","x-tq-stability":"stable"}},"/health":{"get":{"deprecated":true,"operationId":"get_health","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Liveness with version and uptime (old address)","tags":["server"],"x-tq-deprecated-since":"2026-10-11","x-tq-stability":"stable","x-tq-successor":"/api/v1/health","x-tq-sunset":"Fri, 01 Oct 2027 00:00:00 GMT"}},"/healthz":{"get":{"operationId":"get_healthz","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Process is alive (always 200, no details)","tags":["server"],"x-tq-stability":"stable"}},"/metrics":{"get":{"operationId":"get_metrics","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Prometheus metrics","tags":["server","experimental"],"x-tq-permission":"admin.server","x-tq-stability":"experimental"}},"/readyz":{"get":{"operationId":"get_readyz","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Ready for traffic: metadata store answers, data directory writable, no maintenance (503 with a reason otherwise)","tags":["server"],"x-tq-stability":"stable"}},"/ugs/api/latest":{"get":{"operationId":"get_ugs_api_latest","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"UnrealGameSync metadata protocol version ({version: 2})","tags":["ugs","external"],"x-tq-stability":"external"}},"/ugs/api/metadata":{"get":{"operationId":"get_ugs_api_metadata","parameters":[{"description":"//<repo>/<channel>","in":"query","name":"stream","required":false,"schema":{"type":"string"}},{"description":"Lowest change","in":"query","name":"minchange","required":false,"schema":{"type":"string"}},{"description":"Highest change","in":"query","name":"maxchange","required":false,"schema":{"type":"string"}},{"description":"One change","in":"query","name":"change","required":false,"schema":{"type":"string"}},{"description":"Project","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"Only changes modified after this sequence number","in":"query","name":"sequence","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"UGS/Horde build metadata of changes","tags":["ugs","external"],"x-tq-permission":"repo.read","x-tq-stability":"external"},"post":{"operationId":"post_ugs_api_metadata","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"UGS UpdateMetadataRequest: sync, vote, comment, badges (badges need build-flag.set)","tags":["ugs","external"],"x-tq-permission":"repo.read","x-tq-stability":"external"}},"/updates/v1/{path}":{"get":{"operationId":"get_updates_v1_path","parameters":[{"in":"path","name":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Organisation update mirror: signed manifest and packages (ADR-0018)","tags":["updates","internal"],"x-tq-stability":"internal"}}}}