V12

V12 Steers API

The Steers API from V12 — 3 operation(s) for steers.

Operations 6

GET /orgs/{org}/steers List Steers #
POST /orgs/{org}/steers Create a Steer #
GET /orgs/{org}/steers/{steer} Get a Steer #
PATCH /orgs/{org}/steers/{steer} Edit a Steer #
DELETE /orgs/{org}/steers/{steer} Archive a Steer #
POST /orgs/{org}/steers/{steer}/restore Restore a Steer #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/v12:v12-steers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

v12-steers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: V12 Steers 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: Steers
paths:
  /orgs/{org}/steers:
    get:
      operationId: listSteers
      summary: List Steers
      description: 'Organization-wide Steer documents that guide runs and Autopilot rules. Lists active Steers by default; archived: true lists only archived Steers.'
      tags:
      - Steers
      security:
      - bearer: []
      - oauth2:
        - repos:read
      x-mcp-tool: list_steers
      parameters:
      - name: org
        in: path
        required: true
        description: Organization slug; must be the token's organization.
        schema:
          type: string
      - name: archived
        in: query
        required: false
        schema:
          default: false
          type: boolean
      responses:
        '200':
          description: List Steers
          content:
            application/json:
              schema:
                type: object
                properties:
                  nextCursor:
                    anyOf:
                    - type: string
                    - type: 'null'
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        slug:
                          type: string
                        title:
                          type: string
                        emoji:
                          type: string
                        revision:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        archivedAt:
                          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))$
                          - type: 'null'
                          description: Archive time, or null while active.
                        webUrl:
                          type: string
                      required:
                      - slug
                      - title
                      - emoji
                      - revision
                      - archivedAt
                      - 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: createSteer
      summary: Create a Steer
      description: Create an organization Steer with a title, emoji and instructions. The returned slug is its stable address. Repeating this request creates another Steer; it does not attach to Autopilot rules.
      tags:
      - Steers
      security:
      - bearer: []
      - oauth2:
        - steers:write
      x-mcp-tool: create_steer
      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:
                title:
                  type: string
                  minLength: 1
                  maxLength: 120
                emoji:
                  type: string
                  minLength: 1
                instructions:
                  type: string
                  maxLength: 65536
              required:
              - title
              - emoji
              - instructions
      responses:
        '201':
          description: Create a Steer
          content:
            application/json:
              schema:
                type: object
                properties:
                  slug:
                    type: string
                  title:
                    type: string
                  emoji:
                    type: string
                  revision:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  archivedAt:
                    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))$
                    - type: 'null'
                    description: Archive time, or null while active.
                  webUrl:
                    type: string
                  instructions:
                    type: string
                required:
                - slug
                - title
                - emoji
                - revision
                - archivedAt
                - webUrl
                - instructions
                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}/steers/{steer}:
    get:
      operationId: getSteer
      summary: Get a Steer
      description: One active or archived Steer by slug, including its instructions and archive status. Archived Steers remain readable for historical references.
      tags:
      - Steers
      security:
      - bearer: []
      - oauth2:
        - repos:read
      x-mcp-tool: get_steer
      parameters:
      - name: org
        in: path
        required: true
        description: Organization slug; must be the token's organization.
        schema:
          type: string
      - name: steer
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 200
          description: Steer slug.
      responses:
        '200':
          description: Get a Steer
          content:
            application/json:
              schema:
                type: object
                properties:
                  slug:
                    type: string
                  title:
                    type: string
                  emoji:
                    type: string
                  revision:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  archivedAt:
                    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))$
                    - type: 'null'
                    description: Archive time, or null while active.
                  webUrl:
                    type: string
                  instructions:
                    type: string
                required:
                - slug
                - title
                - emoji
                - revision
                - archivedAt
                - webUrl
                - instructions
                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'
    patch:
      operationId: updateSteer
      summary: Edit a Steer
      description: Update the supplied fields of an active Steer, preserving omitted fields and its slug. Instructions changes advance its revision; existing run snapshots stay unchanged. Restore an archived Steer before editing it.
      tags:
      - Steers
      security:
      - bearer: []
      - oauth2:
        - steers:write
      x-mcp-tool: update_steer
      parameters:
      - name: org
        in: path
        required: true
        description: Organization slug; must be the token's organization.
        schema:
          type: string
      - name: steer
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 200
          description: Steer slug.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                title:
                  type: string
                  minLength: 1
                  maxLength: 120
                emoji:
                  type: string
                  minLength: 1
                instructions:
                  type: string
                  maxLength: 65536
              required: []
      responses:
        '200':
          description: Edit a Steer
          content:
            application/json:
              schema:
                type: object
                properties:
                  slug:
                    type: string
                  title:
                    type: string
                  emoji:
                    type: string
                  revision:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  archivedAt:
                    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))$
                    - type: 'null'
                    description: Archive time, or null while active.
                  webUrl:
                    type: string
                  instructions:
                    type: string
                required:
                - slug
                - title
                - emoji
                - revision
                - archivedAt
                - webUrl
                - instructions
                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'
    delete:
      operationId: archiveSteer
      summary: Archive a Steer
      description: Archive a Steer and detach it from every Autopilot rule. Rules keep their active or paused state; a rule with no remaining Steers uses its default review. New runs refuse the Steer, while finding tags and queued, running and completed run snapshots remain intact. Repeating archive is safe.
      tags:
      - Steers
      security:
      - bearer: []
      - oauth2:
        - steers:write
      x-mcp-tool: archive_steer
      parameters:
      - name: org
        in: path
        required: true
        description: Organization slug; must be the token's organization.
        schema:
          type: string
      - name: steer
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 200
          description: Steer slug.
      responses:
        '200':
          description: Archive a Steer
          content:
            application/json:
              schema:
                type: object
                properties:
                  slug:
                    type: string
                  title:
                    type: string
                  emoji:
                    type: string
                  revision:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  archivedAt:
                    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))$
                    - type: 'null'
                    description: Archive time, or null while active.
                  webUrl:
                    type: string
                  instructions:
                    type: string
                required:
                - slug
                - title
                - emoji
                - revision
                - archivedAt
                - webUrl
                - instructions
                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}/steers/{steer}/restore:
    post:
      operationId: restoreSteer
      summary: Restore a Steer
      description: Make an archived Steer available for edits and new runs again, keeping its slug and revision. Former Autopilot attachments are not restored; add them again separately. Repeating restore is safe.
      tags:
      - Steers
      security:
      - bearer: []
      - oauth2:
        - steers:write
      x-mcp-tool: restore_steer
      parameters:
      - name: org
        in: path
        required: true
        description: Organization slug; must be the token's organization.
        schema:
          type: string
      - name: steer
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 200
          description: Steer slug.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties: {}
              required: []
      responses:
        '200':
          description: Restore a Steer
          content:
            application/json:
              schema:
                type: object
                properties:
                  slug:
                    type: string
                  title:
                    type: string
                  emoji:
                    type: string
                  revision:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  archivedAt:
                    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))$
                    - type: 'null'
                    description: Archive time, or null while active.
                  webUrl:
                    type: string
                  instructions:
                    type: string
                required:
                - slug
                - title
                - emoji
                - revision
                - archivedAt
                - webUrl
                - instructions
                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.