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

# Call automations.repair_step

> 'why did the email step fail?', 'fix the step that broke on the last run' — repair ONE step of an automation in this workspace, named by its board_id, that failed on its last run. With just step_key it reads how that step failed and how it is configured today, and changes nothing. With a fix it answers in two calls: without confirmation_id it proposes the change and shows that one step before and after, changing nothing; the same call again with that confirmation_id, on a member's own API key, saves it as a new draft that does not run until it is switched on. A fix that would touch any other step, the order or what starts the automation is refused. Not for rewriting the whole automation — that is `automations.author`.

Every result names the workspace it ran in. Say which workspace the answer is about. When the account has more than one workspace and none is selected, this tool refuses with `workspace_ambiguous` and lists the choices — offer them, never pick one.



## OpenAPI

````yaml /openapi.json post /api/v1/tools/automations.repair_step
openapi: 3.1.0
info:
  title: Goosy Bear API
  version: 1.0.0-beta
  summary: Manage workspace content, projects, Data tables, Pages, library and credits.
  description: >-
    BETA. This API is in beta: paths, request shapes and response envelopes may
    change, and every response carries an `x-goosy-api: beta` header for as long
    as that is true. A change is additive, or it is deprecated first: a response
    to a call that uses a deprecated feature carries `Deprecation` and `Sunset`
    headers, and nothing is removed until at least 90 days after its
    deprecation. Pin the OpenAPI document you generated against and re-generate
    when it changes.
servers:
  - url: https://app.goosybear.ai
    description: Production
security:
  - tenantApiKey: []
paths:
  /api/v1/tools/automations.repair_step:
    post:
      tags:
        - automations
      summary: Call automations.repair_step
      description: >-
        'why did the email step fail?', 'fix the step that broke on the last
        run' — repair ONE step of an automation in this workspace, named by its
        board_id, that failed on its last run. With just step_key it reads how
        that step failed and how it is configured today, and changes nothing.
        With a fix it answers in two calls: without confirmation_id it proposes
        the change and shows that one step before and after, changing nothing;
        the same call again with that confirmation_id, on a member's own API
        key, saves it as a new draft that does not run until it is switched on.
        A fix that would touch any other step, the order or what starts the
        automation is refused. Not for rewriting the whole automation — that is
        `automations.author`.


        Every result names the workspace it ran in. Say which workspace the
        answer is about. When the account has more than one workspace and none
        is selected, this tool refuses with `workspace_ambiguous` and lists the
        choices — offer them, never pick one.
      operationId: call_automations_repair_step
      parameters:
        - name: x-request-id
          in: header
          required: false
          description: >-
            Your own id for this request, echoed back and recorded on the audit
            trail. 1–128 characters from `A–Z a–z 0–9 . _ : -`, starting with a
            letter or digit; anything else is replaced by a generated id.
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                board_id:
                  type: string
                  minLength: 1
                  maxLength: 64
                step_key:
                  type: string
                  minLength: 1
                  maxLength: 64
                fix:
                  type: object
                  properties:
                    label:
                      type: string
                      minLength: 1
                      maxLength: 80
                    description:
                      type: string
                      maxLength: 400
                    implementation:
                      type: string
                      minLength: 1
                      maxLength: 64
                      pattern: ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
                    params:
                      type: object
                      additionalProperties: {}
                    delay:
                      type: object
                      properties:
                        duration:
                          type: object
                          properties:
                            days:
                              type: integer
                              minimum: 0
                            hours:
                              type: integer
                              minimum: 0
                            minutes:
                              type: integer
                              minimum: 0
                          additionalProperties: false
                        until:
                          type: string
                          minLength: 1
                          maxLength: 32
                        timezone:
                          type: string
                          minLength: 1
                          maxLength: 64
                      additionalProperties: false
                    waitForEvent:
                      type: object
                      properties:
                        event:
                          type: string
                          enum:
                            - tag_added
                            - reply_received
                        tag:
                          type: string
                          minLength: 1
                          maxLength: 200
                        timeoutMinutes:
                          type: integer
                          minimum: 5
                          maximum: 43200
                      required:
                        - event
                        - timeoutMinutes
                      additionalProperties: false
                  additionalProperties: false
                confirmation_id:
                  type: string
                  format: uuid
                  description: >-
                    Omit to propose: the first call says what would happen,
                    returns a confirmation_id and changes nothing. To go ahead,
                    send the same arguments again with that confirmation_id, on
                    a member's own API key; a service account's key can propose
                    but never confirm.
                workspace:
                  type: string
                  minLength: 1
                  description: >-
                    Which workspace to run in — its slug. Omit to use your
                    default. With more than one reachable workspace and no
                    default, the call is refused and the choices are listed.
              required:
                - step_key
              additionalProperties: false
      responses:
        '200':
          description: >-
            The call was admitted and dispatched. `ok` says whether the tool
            succeeded — a refusal the tool itself produced is still a 200,
            exactly as it is a successful JSON-RPC result over MCP.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            x-request-id:
              description: >-
                This request's id: the `x-request-id` you sent when it was well
                formed, otherwise one generated for you. Quote it to support; it
                is recorded on every audit row the call wrote.
              schema:
                type: string
            RateLimit-Limit:
              description: Requests this key may make in a rolling minute.
              schema:
                type: integer
                minimum: 1
            RateLimit-Remaining:
              description: Requests left in the current rolling minute.
              schema:
                type: integer
                minimum: 0
            RateLimit-Reset:
              description: Whole seconds until the window frees more requests.
              schema:
                type: integer
                minimum: 1
            x-goosy-tool-error:
              description: >-
                `true` when a boundary step refused the call — workspace
                resolution failed or could not be read. A tool that ran and
                returned its own typed `ok: false` reports `false` here.
                **Branch on `ok` in the body for the outcome; this header is the
                transport-level hint.**
              schema:
                type: string
                enum:
                  - 'true'
                  - 'false'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    description: The tool ran and answered.
                    properties:
                      ok:
                        type: boolean
                        const: true
                      state:
                        anyOf:
                          - type: string
                            const: diagnosis
                          - type: string
                            const: confirmation_required
                          - type: string
                            const: repaired
                      board_id:
                        type: string
                      step_key:
                        type: string
                      step_label:
                        type: string
                      error_message:
                        type:
                          - string
                          - 'null'
                      step:
                        type: object
                        properties:
                          key:
                            type: string
                            minLength: 1
                            maxLength: 64
                            pattern: ^[a-z][a-z0-9_]*$
                          label:
                            type: string
                            minLength: 1
                            maxLength: 80
                          kind:
                            type: string
                            enum:
                              - automated
                              - approval
                              - code_step
                              - delay
                              - conversation
                              - wait_for_event
                              - compute
                            default: automated
                          description:
                            type: string
                            maxLength: 400
                          implementation:
                            type: string
                            minLength: 1
                            maxLength: 64
                            pattern: ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
                          params:
                            type: object
                            additionalProperties: {}
                          delay:
                            type: object
                            properties:
                              duration:
                                type: object
                                properties:
                                  days:
                                    type: integer
                                    minimum: 0
                                  hours:
                                    type: integer
                                    minimum: 0
                                  minutes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              until:
                                type: string
                                minLength: 1
                                maxLength: 32
                              timezone:
                                type: string
                                minLength: 1
                                maxLength: 64
                            additionalProperties: false
                          waitForEvent:
                            type: object
                            properties:
                              event:
                                type: string
                                enum:
                                  - tag_added
                                  - reply_received
                              tag:
                                type: string
                                minLength: 1
                                maxLength: 200
                              timeoutMinutes:
                                type: integer
                                minimum: 5
                                maximum: 43200
                            required:
                              - event
                              - timeoutMinutes
                            additionalProperties: false
                        required:
                          - key
                          - label
                        additionalProperties: false
                      run_id:
                        type: string
                      test_run:
                        type: boolean
                      confirmation_id:
                        type: string
                        format: uuid
                      expires_in_seconds:
                        type: integer
                        exclusiveMinimum: 0
                      request_summary:
                        type: string
                        description: >-
                          What will happen, in one sentence, for a person to
                          approve before confirming.
                      applies_to_version:
                        type: integer
                        exclusiveMinimum: 0
                      expected_latest_version:
                        anyOf:
                          - type: integer
                            exclusiveMinimum: 0
                          - type: 'null'
                      step_before:
                        type: object
                        properties:
                          key:
                            type: string
                            minLength: 1
                            maxLength: 64
                            pattern: ^[a-z][a-z0-9_]*$
                          label:
                            type: string
                            minLength: 1
                            maxLength: 80
                          kind:
                            type: string
                            enum:
                              - automated
                              - approval
                              - code_step
                              - delay
                              - conversation
                              - wait_for_event
                              - compute
                            default: automated
                          description:
                            type: string
                            maxLength: 400
                          implementation:
                            type: string
                            minLength: 1
                            maxLength: 64
                            pattern: ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
                          params:
                            type: object
                            additionalProperties: {}
                          delay:
                            type: object
                            properties:
                              duration:
                                type: object
                                properties:
                                  days:
                                    type: integer
                                    minimum: 0
                                  hours:
                                    type: integer
                                    minimum: 0
                                  minutes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              until:
                                type: string
                                minLength: 1
                                maxLength: 32
                              timezone:
                                type: string
                                minLength: 1
                                maxLength: 64
                            additionalProperties: false
                          waitForEvent:
                            type: object
                            properties:
                              event:
                                type: string
                                enum:
                                  - tag_added
                                  - reply_received
                              tag:
                                type: string
                                minLength: 1
                                maxLength: 200
                              timeoutMinutes:
                                type: integer
                                minimum: 5
                                maximum: 43200
                            required:
                              - event
                              - timeoutMinutes
                            additionalProperties: false
                        required:
                          - key
                          - label
                        additionalProperties: false
                      step_after:
                        type: object
                        properties:
                          key:
                            type: string
                            minLength: 1
                            maxLength: 64
                            pattern: ^[a-z][a-z0-9_]*$
                          label:
                            type: string
                            minLength: 1
                            maxLength: 80
                          kind:
                            type: string
                            enum:
                              - automated
                              - approval
                              - code_step
                              - delay
                              - conversation
                              - wait_for_event
                              - compute
                            default: automated
                          description:
                            type: string
                            maxLength: 400
                          implementation:
                            type: string
                            minLength: 1
                            maxLength: 64
                            pattern: ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
                          params:
                            type: object
                            additionalProperties: {}
                          delay:
                            type: object
                            properties:
                              duration:
                                type: object
                                properties:
                                  days:
                                    type: integer
                                    minimum: 0
                                  hours:
                                    type: integer
                                    minimum: 0
                                  minutes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              until:
                                type: string
                                minLength: 1
                                maxLength: 32
                              timezone:
                                type: string
                                minLength: 1
                                maxLength: 64
                            additionalProperties: false
                          waitForEvent:
                            type: object
                            properties:
                              event:
                                type: string
                                enum:
                                  - tag_added
                                  - reply_received
                              tag:
                                type: string
                                minLength: 1
                                maxLength: 200
                              timeoutMinutes:
                                type: integer
                                minimum: 5
                                maximum: 43200
                            required:
                              - event
                              - timeoutMinutes
                            additionalProperties: false
                        required:
                          - key
                          - label
                        additionalProperties: false
                      version:
                        type: integer
                        exclusiveMinimum: 0
                      workspace:
                        type: string
                        description: The slug of the workspace this call ran in.
                      working_in:
                        type: object
                        properties:
                          label:
                            type: string
                            description: 'The chip words — e.g. "working in: Acme Main".'
                          note:
                            type: string
                            description: >-
                              Why this workspace — e.g. "your default", "this
                              call only".
                          workspace:
                            type: string
                            description: The resolved workspace's slug.
                          source:
                            type: string
                            enum:
                              - call-override
                              - key-pin
                              - stored-default
                              - sole-reachable
                            description: >-
                              Which rung of the R7 precedence resolved the
                              workspace.
                        required:
                          - label
                          - note
                          - workspace
                          - source
                        additionalProperties: false
                        description: >-
                          Which workspace this call ran in, and how that was
                          decided. Present on every workspace-scoped result.
                    required:
                      - ok
                      - board_id
                      - state
                      - step_key
                      - working_in
                      - workspace
                  - $ref: '#/components/schemas/ToolRefusal'
        '400':
          description: >-
            The request could not be used: the body is present but not a JSON
            object (`tenant_api.malformed_body`); it is a top-level array
            carrying more messages than this endpoint accepts
            (`tenant_mcp.batch_too_large`); or the `Idempotency-Key` header is
            malformed (`tenant_api.idempotency_key_invalid`), disagrees with the
            body's `idempotency_key` (`tenant_api.idempotency_key_conflict`), or
            was sent to an action that cannot replay a retry
            (`tenant_api.idempotency_unsupported`). Nothing ran.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            x-request-id:
              description: >-
                This request's id: the `x-request-id` you sent when it was well
                formed, otherwise one generated for you. Quote it to support; it
                is recorded on every audit row the call wrote.
              schema:
                type: string
            Deprecation:
              description: >-
                RFC 9745: this refusal's nested `error` object is deprecated,
                since this instant (`@<unix seconds>`).
              schema:
                type: string
            Sunset:
              description: >-
                RFC 8594: the nested `error` object may be removed after this
                date (2026-12-31).
              schema:
                type: string
            Link:
              description: The page that says what to read instead (`rel="deprecation"`).
              schema:
                type: string
            RateLimit-Limit:
              description: Requests this key may make in a rolling minute.
              schema:
                type: integer
                minimum: 1
            RateLimit-Remaining:
              description: Requests left in the current rolling minute.
              schema:
                type: integer
                minimum: 0
            RateLimit-Reset:
              description: Whole seconds until the window frees more requests.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: >-
            No bearer credential, or one that did not resolve. Deliberately ONE
            undifferentiated answer for absent / unknown / revoked / expired, so
            the endpoint is never an oracle over the key space.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            x-request-id:
              description: >-
                This request's id: the `x-request-id` you sent when it was well
                formed, otherwise one generated for you. Quote it to support; it
                is recorded on every audit row the call wrote.
              schema:
                type: string
            Deprecation:
              description: >-
                RFC 9745: this refusal's nested `error` object is deprecated,
                since this instant (`@<unix seconds>`).
              schema:
                type: string
            Sunset:
              description: >-
                RFC 8594: the nested `error` object may be removed after this
                date (2026-12-31).
              schema:
                type: string
            Link:
              description: The page that says what to read instead (`rel="deprecation"`).
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            The credential is good but the surface is not open to it — the
            platform or account API switch is off, or the holder lacks the
            `api.access` capability. The `code` says which.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            x-request-id:
              description: >-
                This request's id: the `x-request-id` you sent when it was well
                formed, otherwise one generated for you. Quote it to support; it
                is recorded on every audit row the call wrote.
              schema:
                type: string
            Deprecation:
              description: >-
                RFC 9745: this refusal's nested `error` object is deprecated,
                since this instant (`@<unix seconds>`).
              schema:
                type: string
            Sunset:
              description: >-
                RFC 8594: the nested `error` object may be removed after this
                date (2026-12-31).
              schema:
                type: string
            Link:
              description: The page that says what to read instead (`rel="deprecation"`).
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            No such tool. The body names no tool and is identical for every
            unrecognised name.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            x-request-id:
              description: >-
                This request's id: the `x-request-id` you sent when it was well
                formed, otherwise one generated for you. Quote it to support; it
                is recorded on every audit row the call wrote.
              schema:
                type: string
            Deprecation:
              description: >-
                RFC 9745: this refusal's nested `error` object is deprecated,
                since this instant (`@<unix seconds>`).
              schema:
                type: string
            Sunset:
              description: >-
                RFC 8594: the nested `error` object may be removed after this
                date (2026-12-31).
              schema:
                type: string
            Link:
              description: The page that says what to read instead (`rel="deprecation"`).
              schema:
                type: string
            RateLimit-Limit:
              description: Requests this key may make in a rolling minute.
              schema:
                type: integer
                minimum: 1
            RateLimit-Remaining:
              description: Requests left in the current rolling minute.
              schema:
                type: integer
                minimum: 0
            RateLimit-Reset:
              description: Whole seconds until the window frees more requests.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            Over this key's per-minute cap. Carries `Retry-After` and
            `error.retry_after_seconds`.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            x-request-id:
              description: >-
                This request's id: the `x-request-id` you sent when it was well
                formed, otherwise one generated for you. Quote it to support; it
                is recorded on every audit row the call wrote.
              schema:
                type: string
            Deprecation:
              description: >-
                RFC 9745: this refusal's nested `error` object is deprecated,
                since this instant (`@<unix seconds>`).
              schema:
                type: string
            Sunset:
              description: >-
                RFC 8594: the nested `error` object may be removed after this
                date (2026-12-31).
              schema:
                type: string
            Link:
              description: The page that says what to read instead (`rel="deprecation"`).
              schema:
                type: string
            RateLimit-Limit:
              description: Requests this key may make in a rolling minute.
              schema:
                type: integer
                minimum: 1
            RateLimit-Remaining:
              description: Requests left in the current rolling minute.
              schema:
                type: integer
                minimum: 0
            RateLimit-Reset:
              description: Whole seconds until the window frees more requests.
              schema:
                type: integer
                minimum: 1
            Retry-After:
              description: Whole seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    ToolRefusal:
      type: object
      properties:
        ok:
          type: boolean
          const: false
        code:
          type: string
          description: >-
            The typed reason — e.g. `workspace_ambiguous`, `invalid_arguments`,
            or the tool's own failure code.
        message:
          type: string
          description: A sentence a person can act on.
        workspaces:
          type: array
          items:
            type: string
          description: 'On a workspace refusal: the slugs this key may pass as `workspace`.'
        issues:
          type: array
          items:
            type: object
            properties:
              path:
                type: string
              message:
                type: string
            required:
              - path
              - message
            additionalProperties: false
          description: 'On `invalid_arguments`: which fields failed, and why.'
      required:
        - ok
        - code
        - message
      additionalProperties: false
      description: A call that was admitted and dispatched, and did not succeed.
    Error:
      type: object
      properties:
        ok:
          type: boolean
          const: false
        code:
          type: string
          description: >-
            The typed refusal code — e.g. `tenant_mcp.surface_disabled`,
            `tenant_mcp.rate_limited`.
        message:
          type: string
          description: A sentence a person can act on.
        retry_after_seconds:
          type: number
          description: 'On a 429: whole seconds to wait. Mirrors `Retry-After`.'
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            retry_after_seconds:
              type: number
          required:
            - code
            - message
          additionalProperties: false
          description: >-
            Deprecated: the same values as the top-level fields, kept until
            2026-12-31. Read `code` and `message` at the top level.
      required:
        - ok
        - code
        - message
        - error
      additionalProperties: false
      description: >-
        A request the boundary refused before dispatching anything. The same
        shape the MCP endpoint answers its own refusals with, and the same
        top-level fields a dispatched call's refusal carries, so one client
        branch covers both.
  securitySchemes:
    tenantApiKey:
      type: http
      scheme: bearer
      description: >-
        An API key minted at Settings › API & MCP. Send it as `Authorization:
        Bearer <key>`. A key carries its holder's own permissions, resolved on
        every call — revoking a membership closes the key's reach immediately.
        Keep it in an environment variable (`GOOSY_API_KEY`), never in a
        committed file.

````