openapi: 3.2.0 info: title: V12 Repositories API version: 2.0.0 description: Findings, runs and context documents of one V12 organization. Every path but /me sits under /orgs/{org}, where {org} is the organization's slug (GET /me returns it); a token reaches only its own organization, and any other slug answers 404. servers: - url: https://v12.sh/api/v2 tags: - name: Repositories paths: /orgs/{org}/repositories: get: operationId: listRepositories summary: List repositories description: Repositories registered in the organization, sorted by full name, with their GitHub access and mirror state. tags: - Repositories security: - bearer: [] - oauth2: - repos:read x-mcp-tool: list_repositories parameters: - name: org in: path required: true description: Organization slug; must be the token's organization. schema: type: string responses: '200': description: List repositories content: application/json: schema: type: object properties: nextCursor: anyOf: - type: string - type: 'null' items: type: array items: type: object properties: slug: type: string description: Addresses the repository in V12, "owner/name". fullName: type: string defaultBranch: anyOf: - type: string - type: 'null' access: type: string enum: - active - unknown - revoked mirror: type: object properties: state: type: string enum: - not-linked - never-synced - syncing - current - stale - failed - disconnected syncedAt: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' historySince: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' required: - state - syncedAt - historySince additionalProperties: false webUrl: type: string required: - slug - fullName - defaultBranch - access - mirror - webUrl additionalProperties: false required: - nextCursor - items additionalProperties: false '400': description: The request is invalid content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '401': description: Missing or invalid bearer token content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '403': description: The token lacks a scope, or its user lacks a permission content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '404': description: Not found in the token organization content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '409': description: The request conflicts with the current state content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '429': description: Rate limited; see Retry-After content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '503': description: Temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' post: operationId: addRepository summary: Add a repository description: Add a GitHub repository to this organization. Members can add public repositories; private repositories must be granted by the workspace GitHub connection and added by an owner. Repeating an add returns the existing registration. This does not start a run. tags: - Repositories security: - bearer: [] - oauth2: - repos:write x-mcp-tool: add_repository parameters: - name: org in: path required: true description: Organization slug; must be the token's organization. schema: type: string requestBody: required: true content: application/json: schema: type: object additionalProperties: false properties: repository: type: string minLength: 1 maxLength: 300 description: 'Repository: "owner/name", its github.com URL, or its clone URL.' required: - repository responses: '200': description: The repository was already added content: application/json: schema: type: object properties: added: type: boolean tracking: type: string enum: - grant - public repository: type: object properties: slug: type: string description: Addresses the repository in V12, "owner/name". fullName: type: string defaultBranch: anyOf: - type: string - type: 'null' access: type: string enum: - active - unknown - revoked mirror: type: object properties: state: type: string enum: - not-linked - never-synced - syncing - current - stale - failed - disconnected syncedAt: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' historySince: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' required: - state - syncedAt - historySince additionalProperties: false webUrl: type: string required: - slug - fullName - defaultBranch - access - mirror - webUrl additionalProperties: false required: - added - tracking - repository additionalProperties: false '201': description: Add a repository content: application/json: schema: type: object properties: added: type: boolean tracking: type: string enum: - grant - public repository: type: object properties: slug: type: string description: Addresses the repository in V12, "owner/name". fullName: type: string defaultBranch: anyOf: - type: string - type: 'null' access: type: string enum: - active - unknown - revoked mirror: type: object properties: state: type: string enum: - not-linked - never-synced - syncing - current - stale - failed - disconnected syncedAt: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' historySince: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' required: - state - syncedAt - historySince additionalProperties: false webUrl: type: string required: - slug - fullName - defaultBranch - access - mirror - webUrl additionalProperties: false required: - added - tracking - repository additionalProperties: false '400': description: The request is invalid content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '401': description: Missing or invalid bearer token content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '403': description: The token lacks a scope, or its user lacks a permission content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '404': description: Not found in the token organization content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '409': description: The request conflicts with the current state content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '413': description: The body exceeds 1 MiB content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '415': description: The body is not application/json content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '429': description: Rate limited; see Retry-After content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '503': description: Temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' /orgs/{org}/repositories/{owner}/{repo}: get: operationId: getRepository summary: Get a repository description: One registered repository by its slug or full name ("owner/name"). tags: - Repositories security: - bearer: [] - oauth2: - repos:read parameters: - name: org in: path required: true description: Organization slug; must be the token's organization. schema: type: string - name: owner in: path required: true description: Repository owner. schema: type: string - name: repo in: path required: true description: Repository name. schema: type: string responses: '200': description: Get a repository content: application/json: schema: type: object properties: slug: type: string description: Addresses the repository in V12, "owner/name". fullName: type: string defaultBranch: anyOf: - type: string - type: 'null' access: type: string enum: - active - unknown - revoked mirror: type: object properties: state: type: string enum: - not-linked - never-synced - syncing - current - stale - failed - disconnected syncedAt: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' historySince: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' required: - state - syncedAt - historySince additionalProperties: false webUrl: type: string required: - slug - fullName - defaultBranch - access - mirror - webUrl additionalProperties: false '400': description: The request is invalid content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '401': description: Missing or invalid bearer token content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '403': description: The token lacks a scope, or its user lacks a permission content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '404': description: Not found in the token organization content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '409': description: The request conflicts with the current state content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '429': description: Rate limited; see Retry-After content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '503': description: Temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' /orgs/{org}/repositories/{owner}/{repo}/refs: get: operationId: listRefs summary: List branches, pull requests and tags description: 'Branches, pull requests and tags V12 has mirrored for a repository, with whether each head was reviewed. Each list stops at limit (default 100, max 200): truncated says which may hold more and branchCount counts every matching branch. Not paginated; narrow with q. mirror is the repository''s sync state.' tags: - Repositories security: - bearer: [] - oauth2: - repos:read x-mcp-tool: list_refs parameters: - name: org in: path required: true description: Organization slug; must be the token's organization. schema: type: string - name: owner in: path required: true description: Repository owner. schema: type: string - name: repo in: path required: true description: Repository name. schema: type: string - name: q in: query required: false schema: description: Case-insensitive name filter. type: string maxLength: 200 - name: limit in: query required: false schema: default: 100 type: integer minimum: 1 maximum: 200 responses: '200': description: List branches, pull requests and tags content: application/json: schema: type: object properties: defaultBranch: anyOf: - type: string - type: 'null' branches: type: array items: type: object properties: name: type: string sha: type: string pullRequest: anyOf: - type: integer minimum: -9007199254740991 maximum: 9007199254740991 - type: 'null' reviewed: type: boolean required: - name - sha - pullRequest - reviewed additionalProperties: false pullRequests: type: array items: type: object properties: number: type: integer minimum: -9007199254740991 maximum: 9007199254740991 title: type: string state: type: string enum: - open - closed - merged draft: type: boolean headRef: type: string baseRef: type: string sha: type: string author: anyOf: - type: string - type: 'null' openedAt: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ reviewed: type: boolean required: - number - title - state - draft - headRef - baseRef - sha - author - openedAt - reviewed additionalProperties: false tags: type: array items: type: object properties: name: type: string sha: type: string required: - name - sha additionalProperties: false asOf: type: integer minimum: -9007199254740991 maximum: 9007199254740991 branchCount: type: integer minimum: 0 maximum: 9007199254740991 description: Every branch matching q, before limit. truncated: type: object properties: branches: type: boolean pullRequests: type: boolean tags: type: boolean required: - branches - pullRequests - tags additionalProperties: false description: True where a list may hold more than limit; narrow with q. mirror: type: object properties: state: type: string enum: - not-linked - never-synced - syncing - current - stale - failed - disconnected syncedAt: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' historySince: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' required: - state - syncedAt - historySince additionalProperties: false nextCursor: type: 'null' required: - defaultBranch - branches - pullRequests - tags - asOf - branchCount - truncated - mirror - nextCursor additionalProperties: false '400': description: The request is invalid content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '401': description: Missing or invalid bearer token content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '403': description: The token lacks a scope, or its user lacks a permission content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '404': description: Not found in the token organization content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '409': description: The request conflicts with the current state content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '429': description: Rate limited; see Retry-After content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '503': description: Temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' /orgs/{org}/repositories/hosted: post: operationId: createHostedRepository summary: Create a hosted repository description: Create an empty Git repository that V12 hosts, addressed as "v12/". Push code to it with a URL from createPushCredential; V12 imports each push. Only owners may create one, and a name already in use is a conflict. This does not start a run. tags: - Repositories security: - bearer: [] - oauth2: - repos:write x-mcp-tool: create_hosted_repository parameters: - name: org in: path required: true description: Organization slug; must be the token's organization. schema: type: string requestBody: required: true content: application/json: schema: type: object additionalProperties: false properties: name: type: string minLength: 1 maxLength: 100 pattern: ^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$ description: Lowercase letters, numbers, dots, underscores and hyphens, e.g. "payments-api". required: - name responses: '201': description: Create a hosted repository content: application/json: schema: type: object properties: repository: type: object properties: slug: type: string description: Addresses the repository in V12, "owner/name". fullName: type: string defaultBranch: anyOf: - type: string - type: 'null' access: type: string enum: - active - unknown - revoked mirror: type: object properties: state: type: string enum: - not-linked - never-synced - syncing - current - stale - failed - disconnected syncedAt: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' historySince: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' required: - state - syncedAt - historySince additionalProperties: false webUrl: type: string required: - slug - fullName - defaultBranch - access - mirror - webUrl additionalProperties: false required: - repository additionalProperties: false '400': description: The request is invalid content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '401': description: Missing or invalid bearer token content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '403': description: The token lacks a scope, or its user lacks a permission content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '404': description: Not found in the token organization content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '409': description: The request conflicts with the current state content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '413': description: The body exceeds 1 MiB content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '415': description: The body is not application/json content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '429': description: Rate limited; see Retry-After content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '503': description: Temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' /orgs/{org}/repositories/{owner}/{repo}/push-credentials: post: operationId: createPushCredential summary: Get a push URL for a hosted repository description: 'A Git remote URL that can push to one branch of a repository V12 hosts, valid for one hour: `git push HEAD:`. The URL is the credential; treat it as a secret. Only owners may get one, and GitHub repositories have none.' tags: - Repositories security: - bearer: [] - oauth2: - repos:write x-mcp-tool: create_push_credential parameters: - name: org in: path required: true description: Organization slug; must be the token's organization. schema: type: string - name: owner in: path required: true description: Repository owner. schema: type: string - name: repo in: path required: true description: Repository name. schema: type: string requestBody: required: true content: application/json: schema: type: object additionalProperties: false properties: branch: type: string minLength: 1 maxLength: 255 description: The one branch the URL may push to, e.g. "main". required: - branch responses: '201': description: Get a push URL for a hosted repository content: application/json: schema: type: object properties: branch: type: string url: type: string description: Git remote URL with an embedded credential. expiresAt: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ - type: 'null' description: When the URL stops working; null when it does not expire. required: - branch - url - expiresAt additionalProperties: false '400': description: The request is invalid content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '401': description: Missing or invalid bearer token content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '403': description: The token lacks a scope, or its user lacks a permission content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '404': description: Not found in the token organization content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '409': description: The request conflicts with the current state content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '413': description: The body exceeds 1 MiB content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '415': description: The body is not application/json content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '429': description: Rate limited; see Retry-After content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' '503': description: Temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ApiErrorEnvelope' components: schemas: ApiErrorEnvelope: type: object properties: error: type: object properties: code: type: string enum: - invalid_request - repository_required - unauthenticated - insufficient_credits - spend_cap_reached - insufficient_scope - forbidden - not_found - repository_not_visible - repository_not_added - method_not_allowed - position_unavailable - decision_active - conflict - price_exceeds_max - quote_stale - change_refused - nothing_to_review - repository_not_runnable - idempotency_key_reused - api_version_retired - payload_too_large - unsupported_media_type - rate_limited - internal_error - upstream_error - platform_unavailable - repository_access_unavailable - rate_limit_unavailable - public_api_disabled message: type: string details: type: object propertyNames: type: string additionalProperties: {} required: - code - message additionalProperties: false requestId: type: string required: - error - requestId additionalProperties: false securitySchemes: bearer: type: http scheme: bearer description: A personal access token (v12p_…) or an OAuth access token (v12a_…). oauth2: type: oauth2 flows: authorizationCode: authorizationUrl: https://v12.sh/oauth/authorize tokenUrl: https://v12.sh/api/oauth/token refreshUrl: https://v12.sh/api/oauth/token scopes: user:read: 'The member directory: usernames, emails and roles. Any key reads its own account, organization and credit balance without it.' repos:read: Repositories, branches, pull requests, tags and Steer instructions. repos:write: Add public repositories to the workspace; owners can also add private repositories granted by GitHub, create repositories V12 hosts and push code to them. steers:write: Create, edit, archive and restore Steers. Archiving detaches them from Autopilot rules; finding tags and run history are kept. runs:read: Runs, their progress and context documents. runs:write: Estimate and start runs; add or archive context documents. runs:manage: Cancel runs. runs:share: Create, change and revoke guest links that open a run to people outside the organization. findings:read: 'The inbox: findings, their status, reports and comments.' findings:write: Change status, comment and update triage decisions.