{"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.12.14)"},"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"}},"/.well-known/touchquill":{"get":{"operationId":"get__well_known_touchquill","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[],"summary":"Ports of this instance for the requesting host (ADR-0039): grpc, api, server_version — clients find the server from the host name alone","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/access":{"get":{"operationId":"get_api_v1_admin_access","parameters":[{"description":"Account","in":"query","name":"user","required":false,"schema":{"type":"string"}},{"description":"Only this repository","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":"Access check: per repository - visible and why, the role there, the permissions","tags":["admin","internal"],"x-tq-permission":"admin.users","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/authors/remap":{"delete":{"operationId":"delete_api_v1_admin_authors_remap","parameters":[{"description":"Author text","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"Repository or * (default)","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":"Remove an author remap","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"get":{"operationId":"get_api_v1_admin_authors_remap","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Author remaps: revisions without an author id whose author text is {from} show the account {to} (ADR-0034)","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"post":{"operationId":"post_api_v1_admin_authors_remap","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Add or replace an author remap {from, to: existing account, repo: name or *}; nothing is rewritten, hashes stay","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/config":{"put":{"operationId":"put_api_v1_admin_config","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Change a setting that config reload applies {key, value}: written to server.toml, checked, reloaded (422 and server.toml restored on errors; value null = default)","tags":["admin","internal"],"x-tq-permission":"admin.server","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/diagnostics":{"get":{"operationId":"get_api_v1_admin_diagnostics","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Diagnostics bundles (ADR-0036): account, host, time, product, version, reason, size, repo; filters ?account=, ?host=, ?repo=","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/diagnostics/request":{"delete":{"operationId":"delete_api_v1_admin_diagnostics_request","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Cancel a pending diagnostics request (?account=&hostname=)","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"post":{"operationId":"post_api_v1_admin_diagnostics_request","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Ask a station for a diagnostics bundle {account, hostname, repo?, note?}; delivered at its next contact, expires after 7 days","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/diagnostics/requests":{"get":{"operationId":"get_api_v1_admin_diagnostics_requests","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Pending diagnostics requests","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/diagnostics/{id}":{"delete":{"operationId":"delete_api_v1_admin_diagnostics_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":"Delete a diagnostics bundle","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"get":{"operationId":"get_api_v1_admin_diagnostics_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 diagnostics bundle: metadata, a readable summary and the JSON","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/diagnostics/{id}/download":{"get":{"operationId":"get_api_v1_admin_diagnostics_id_download","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":"Download a diagnostics bundle as a JSON file","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/license":{"get":{"operationId":"get_api_v1_admin_license","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Server license (ADR-0029): state and reason, licensee, dates, limits, instance fingerprint, last check-in, lease","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"put":{"operationId":"put_api_v1_admin_license","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Install a license key {key}: verified offline, saved to the license file, check-in in the background (422 for an invalid key)","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/license/checkin":{"post":{"operationId":"post_api_v1_admin_license_checkin","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"License check-in now; the state afterwards with checkin_ok and checkin_error","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/license/release":{"post":{"operationId":"post_api_v1_admin_license_release","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Release this server instance at the license server (moving to another machine): the key file is moved to <file>.released and the server becomes unlicensed; installing a key registers it again (502 when the license server refuses or is unreachable, 409 for a key in server.toml)","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/protection":{"get":{"operationId":"get_api_v1_admin_protection","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Connection protection (ADR-0039): [protection] settings, rejection counters, banned addresses, login lockouts","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"patch":{"operationId":"patch_api_v1_admin_protection","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Change [protection] settings at once (saved in server.toml; audited protection.settings)","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/protection/unban":{"post":{"operationId":"post_api_v1_admin_protection_unban","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Lift the ban of an address {ip} (audited protection.unbanned)","tags":["admin","internal"],"x-tq-permission":"admin.server","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/repairs":{"get":{"operationId":"get_api_v1_admin_repairs","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Repair tasks (ADR-0035): newest first, filters ?account= and ?host=; state pending/delivered/done/rejected/expired/cancelled and the station's result","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"post":{"operationId":"post_api_v1_admin_repairs","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Create a repair task for a station {account, hostname, repo, kind: tq|script, commands | script {name, body}, note}; signed with the instance key, runs on the station without asking the user","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/repairs/{id}":{"delete":{"operationId":"delete_api_v1_admin_repairs_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":"Cancel a repair task that has not reached the station yet (pending)","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"},"get":{"operationId":"get_api_v1_admin_repairs_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 repair task with its full content (script body) and signature","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/repos/{repo}/channels/{channel}":{"patch":{"operationId":"patch_api_v1_admin_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":"Set a channel's parent and/or type (body {parent?, type?}; parent null = none, only for main and release; the parent must be an open, non-virtual channel not based on this one). For channels created before v0.4.0, which have no parent on the server; audited as channel.updated","tags":["admin","internal"],"x-tq-permission":"admin.server","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/roles/{name}/repos":{"get":{"operationId":"get_api_v1_admin_roles_name_repos","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":"Repositories of a custom role","tags":["admin","internal"],"x-tq-permission":"admin.roles","x-tq-stability":"internal"},"put":{"operationId":"put_api_v1_admin_roles_name_repos","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":"Replace the repositories of a custom role {repos: [...]}","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/settings":{"get":{"operationId":"get_api_v1_admin_settings","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Every server setting: effective value, source (flag, server.toml, env, default), when a change applies (restart, reload, panel) and whether the panel can change it","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/stations":{"get":{"operationId":"get_api_v1_admin_stations","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Client stations seen in the last 30 days (ADR-0029): account, computer name, OS user, IP, OS, client version, product, first and last seen; the station limit from the license","tags":["admin","internal"],"x-tq-permission":"admin.server","x-tq-stability":"internal"}},"/api/v1/admin/stations/{key}":{"delete":{"operationId":"delete_api_v1_admin_stations_key","parameters":[{"in":"path","name":"key","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":"Free a station's place (account@computer); it counts as new on its next use","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) with the repositories it may see {repos} - none by default","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}/disable":{"post":{"operationId":"post_api_v1_admin_users_name_disable","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":"Disable the account (tokens and sessions refused, workspaces locked: access none); {wipe: true} also removes the project files from all its workspaces (ADR-0035)","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}/enable":{"post":{"operationId":"post_api_v1_admin_users_name_enable","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":"Enable a disabled account (its wipe requests are cleared)","tags":["admin","internal"],"x-tq-permission":"admin.users","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}/rename":{"post":{"operationId":"post_api_v1_admin_users_name_rename","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":"Rename the account {name}: the id stays, history shows the new name at once; locks, shelves, the inbox, notification settings, workspaces, reviews, conflicts, issues and stations move to the new name (`moved` in the answer); refused while it has a pending wipe (ADR-0034)","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/users/{name}/repos":{"get":{"operationId":"get_api_v1_admin_users_name_repos","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":"Repositories the account may see: its own list, the list of its custom role (ADR-0032)","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"},"put":{"operationId":"put_api_v1_admin_users_name_repos","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":"Replace the account's repository list {repos: [\"Name\", \"Name:role\", \"*\"]}; {wipe_removed: true} also removes the project files of the revoked repositories from the account's workspaces","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/admin/users/{name}/wipe":{"delete":{"operationId":"delete_api_v1_admin_users_name_wipe","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":"Cancel a wipe request (?repo=)","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"},"post":{"operationId":"post_api_v1_admin_users_name_wipe","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":"Request removing the project files of {repo} (or *) from the account's workspaces while it has no access (ADR-0035)","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/wipes":{"get":{"operationId":"get_api_v1_admin_wipes","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Wipe requests with their state: pending, or done with host and time","tags":["admin","internal"],"x-tq-permission":"admin.users","x-tq-stability":"internal"}},"/api/v1/admin/workspaces":{"get":{"operationId":"get_api_v1_admin_workspaces","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Workspaces of every account in the repositories where the caller has workspace.list-all (role in that repository), elsewhere the caller's own; each entry carries can{list_all, edit_any, force_unlock}; 403 without workspace.list-all anywhere (admin panel)","tags":["admin","internal"],"x-tq-permission":"repo.read","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}/channels/{channel}/rewind":{"post":{"operationId":"post_api_v1_repos_repo_channels_channel_rewind","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":"Remove the revisions after `to` from a channel's history (ADR-0031; global server-admin role, audited; body {to, reason, dry_run, expected_head, affected_channels, record_manual, from_hash, hashes, from_seq})","tags":["admin","internal"],"x-tq-permission":"channel.rewind","x-tq-stability":"internal"}},"/api/v1/repos/{repo}/channels/{channel}/rewinds":{"get":{"operationId":"get_api_v1_repos_repo_channels_channel_rewinds","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"channel","required":true,"schema":{"type":"string"}},{"description":"how many (default 50)","in":"query","name":"limit","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 removed from a channel by an administrator, newest first, with reason and author (ADR-0031), the copies that had them and the protection state (ADR-0037)","tags":["admin","internal"],"x-tq-permission":"channel.rewind","x-tq-stability":"internal"}},"/api/v1/repos/{repo}/channels/{channel}/rewinds/{id}/allow-content":{"post":{"operationId":"post_api_v1_repos_repo_channels_channel_rewinds_id_allow_content","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"channel","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":"Allow the content removed by a rewind back: pushes with it stop being refused; the revisions stay removed (ADR-0037)","tags":["admin","internal"],"x-tq-permission":"channel.rewind","x-tq-stability":"internal"}},"/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/activity":{"post":{"operationId":"post_api_v1_repos_repo_locks_activity","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":"Report local edits of files you hold locks on {paths, channel?} — the activity timeout of those locks starts over (TQ-44); returns {confirmed: [{path, timeout_ms}]}","tags":["locks","experimental"],"x-tq-permission":"lock.acquire","x-tq-stability":"experimental"}},"/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}/revisions/{rev}/message":{"patch":{"operationId":"patch_api_v1_repos_repo_revisions_rev_message","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":"Change the description of a revision already on the server {message} (like p4 change -u): the hash, Change ID and number stay, no new revision. Your own revisions need repo.write, other people's revision.describe (lead, server-admin) or `describe` in the channel's [permissions]; the server policy message_require applies; audited as revision.message_edited. Returns the description state as in …/message/history; 409 on a replica or proxy","tags":["revisions","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/revisions/{rev}/message/history":{"get":{"operationId":"get_api_v1_repos_repo_revisions_rev_message_history","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":"Description of a revision: current text, message_edited {by, by_id, at_ms, versions} (null = never changed), original_message and previous versions newest first (at most 20)","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"}},"/api/v1/repos/{repo}/workspaces":{"get":{"operationId":"get_api_v1_repos_repo_workspaces","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"description":"1 = workspaces of every account (workspace.list-all)","in":"query","name":"all","required":false,"schema":{"type":"string"}},{"description":"Workspaces of this account (someone else's: workspace.list-all)","in":"query","name":"owner","required":false,"schema":{"type":"string"}},{"description":"0 = without workspaces known only from machine heartbeats (default 1)","in":"query","name":"unregistered","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":"Workspaces with machines (online, last seen, offline since, files being edited, locks held): yours; all=1 every account, owner=<account> one account (other accounts: workspace.list-all)","tags":["workspaces","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/workspaces/{name}":{"delete":{"operationId":"delete_api_v1_repos_repo_workspaces_name","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Owner account (default: the caller)","in":"query","name":"owner","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 workspace from the registry (files on the machines stay); someone else's (owner=) needs workspace.edit-any and is audited","tags":["workspaces","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"},"put":{"operationId":"put_api_v1_repos_repo_workspaces_name","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Owner account (default: the caller)","in":"query","name":"owner","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":"Change (or register) a workspace definition {channel?, profile?, sparse?}; someone else's (owner=) needs workspace.edit-any and is audited","tags":["workspaces","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/api/v1/repos/{repo}/workspaces/{name}/force-unlock":{"post":{"operationId":"post_api_v1_repos_repo_workspaces_name_force_unlock","parameters":[{"in":"path","name":"repo","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Owner account (default: the caller)","in":"query","name":"owner","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":"Force-unlock a machine of a workspace {machine}: its files being edited stop being read-only elsewhere (audited)","tags":["workspaces","experimental"],"x-tq-permission":"lock.steal","x-tq-stability":"experimental"}},"/api/v1/workspaces":{"get":{"operationId":"get_api_v1_workspaces","parameters":[],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error with the TQ code"}},"security":[{"bearer":[]}],"summary":"Your workspaces in every repository you see; each entry carries can{list_all, edit_any, force_unlock} for its repository, can.list_all on top = workspace.list-all in at least one repository","tags":["workspaces","experimental"],"x-tq-permission":"repo.read","x-tq-stability":"experimental"}},"/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"}}}}