> ## Documentation Index
> Fetch the complete documentation index at: https://docs.guidinghand.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Send input to an open start state

> Clicks, typing and keys, in order, through the hypervisor’s keyboard and mouse: they work on admin prompts too. Needs the admin role or an API key.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/start_states/{start_state_id}/input
openapi: 3.1.0
info:
  title: GuidingHand API
  version: 1.0.0
  description: >-
    Create sessions (an invite link with a code for the person at the computer),
    run tasks on their computer with one of your agents, follow them, answer
    their questions and approvals, and fetch history and recordings. Test your
    agents with evals: test cases on fresh machines, run in test sets, scored by
    a check script or a rubric. Agents are versioned (save a draft, publish it),
    have tools (their own file system, and your HTTP endpoints), and every
    change is in the org’s audit log.
servers:
  - url: https://guidinghand.ai
    description: Production
  - url: https://dev.guidinghand.ai
    description: Development (Stripe test mode)
security:
  - bearerAuth: []
tags:
  - name: Agents
  - name: Agent files
  - name: Agent tools
  - name: Sessions
  - name: Tasks
  - name: Webhooks
  - name: Audit log
  - name: Test cases
  - name: Test sets
  - name: Test runs
  - name: Start states
  - name: Runners
paths:
  /v1/start_states/{start_state_id}/input:
    parameters:
      - name: start_state_id
        in: path
        required: true
        description: The start state’s id (`ss_…`), or an image’s id (e.g. `win10-22h2`).
        schema:
          type: string
    post:
      tags:
        - Start states
      summary: Send input to an open start state
      description: >-
        Clicks, typing and keys, in order, through the hypervisor’s keyboard and
        mouse: they work on admin prompts too. Needs the admin role or an API
        key.
      operationId: sendStartStateInput
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - events
              properties:
                events:
                  type: array
                  items:
                    $ref: '#/components/schemas/InputEvent'
                  minItems: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '403':
          $ref: '#/components/responses/E403'
        '404':
          $ref: '#/components/responses/E404'
        '409':
          $ref: '#/components/responses/E409'
components:
  schemas:
    InputEvent:
      description: >-
        Keyboard and mouse input for an open machine, at the hypervisor level:
        it works on admin prompts and the sign-in screen too. Coordinates are
        the screen’s pixels.
      oneOf:
        - type: object
          title: click
          required:
            - type
            - x
            - 'y'
          properties:
            type:
              const: click
            x:
              type: integer
            'y':
              type: integer
            button:
              type: string
              enum:
                - left
                - right
                - middle
              default: left
        - type: object
          title: double_click
          required:
            - type
            - x
            - 'y'
          properties:
            type:
              const: double_click
            x:
              type: integer
            'y':
              type: integer
        - type: object
          title: move
          required:
            - type
            - x
            - 'y'
          properties:
            type:
              const: move
            x:
              type: integer
            'y':
              type: integer
        - type: object
          title: scroll
          required:
            - type
            - x
            - 'y'
            - dy
          properties:
            type:
              const: scroll
            x:
              type: integer
            'y':
              type: integer
            dy:
              type: integer
              description: Positive scrolls down.
        - type: object
          title: type
          required:
            - type
            - text
          properties:
            type:
              const: type
            text:
              type: string
        - type: object
          title: key
          required:
            - type
            - keys
          properties:
            type:
              const: key
            keys:
              type: array
              items:
                type: string
              description: Pressed together, with the key names the agent uses.
              example:
                - CTRL
                - ALT
                - DELETE
      discriminator:
        propertyName: type
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - type
            - message
          properties:
            type:
              type: string
              enum:
                - invalid_request
                - authentication
                - payment_required
                - permission
                - not_found
                - conflict
                - rate_limit
                - server_error
            message:
              type: string
            code:
              type: string
              description: >-
                Why it was refused, when there’s more to say than the status.
                Starting a task: `insufficient_balance`,
                `auto_topup_limit_reached` or `card_needs_attention` (402: the
                balance can’t cover a minute; add funds, raise the auto top-up
                limit, or update the card), `concurrency_limit` (429),
                `model_unavailable` (503: the agent’s `model` can’t run on this
                server; choose another). On `/respond`: `already_answered`
                (someone answered or decided first: see `answered_by`) or
                `not_pending` (that question or approval isn’t open any more).
                The GuidingHand app hears two more, which the API never returns:
                `customer_answers_off` and `customer_approvals_off` (the agent
                keeps its questions or approvals for your team). Deleting a
                start state that test cases use: `in_use` (409, with
                `test_case_ids`).
            answered_by:
              type: string
              enum:
                - customer
                - operator
                - timeout
              description: >-
                With `already_answered`: who answered or decided first
                (`customer`: the person at the computer; `timeout`: nobody
                decided an approval within the agent’s
                `approval_timeout_minutes`, so it was denied).
            test_case_ids:
              type: array
              items:
                type: string
              description: 'With `in_use`: the test cases that use the start state.'
  responses:
    E400:
      description: The request is invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E401:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E403:
      description: Your role can’t do this.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E404:
      description: Not found in this org.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E409:
      description: >-
        Conflicts with the current state (e.g. no computer connected, a task
        already running, nothing pending, no draft to publish, an agent’s file
        limits).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An org API key (`gh_live_…`) from Settings → API keys in the console.

````