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

# Search mass-action items

> Per-target drill-down of a mass action: one row per target with current_step, the object cursor (object_type / object_sid, on a generative run what the row created) and step_log[], one entry per plan step with status (running / deferred / succeeded / failed / skipped), executor_ref for async steps, created_object_sid for steps that minted one, credits_charged and error_message. The last step_log entry says what failed and why, earlier ones what completed: a failed item keeps the effects of its finished steps (fail-forward), created_object_sid is the cleanup surface. Filter by mass_action_sid, then narrow by status / current_step / wait_reason; object_sid is parent-scoped, so always pair it with mass_action_sid (unpaired it degrades to a full team scan). Sort defaults to position asc (insertion order; position 1 is the canary); page_size 0 returns pagination.total_count alone. No include[] and no counts block; run-level aggregation lives on the parent, mass-actions metrics.

Contract:
- MCP tool `search_mass_action_items`, registry package `mcp.orchestration/mass_action_items`, mount `orchestration.mass_actions`.
- Operation `search`, response envelope `search`.
- Flags: read only.



## OpenAPI

````yaml /api-reference/orchestration/openapi.yaml post /api/mass-action-items/search
openapi: 3.0.3
info:
  title: 'GTM API public contract: gtm.service.orchestration'
  description: >-
    The cross-service execution plane: the platform-wide webhook registry and
    delivery log, plus mass actions (preview, commit, pace, pause, resume,
    canary) and their per-item child rows.


    GENERATED. This document is projected from the Zod MCP tool registry in
    `product/mcp/gtm.mcp` (one tool per public endpoint, 1:1). Do not edit it by
    hand; edit the tool definition and regenerate with `pnpm openapi:public`.


    Surface: the public `/api` contract of `gtm.service.orchestration`, 21
    operations. Internal (`/internal`) and health endpoints are deliberately
    absent; the code-faithful spec that documents those lives in
    `product/openapi/gtm.openapi.tech`.


    Conventions:

    - Auth is a bearer JWT, optionally narrowed by the `Team-SID` header.

    - Every success body is an MCP envelope: `success: true` plus one typed
    `operation` shape (`search`, `get`, `create`, `update`, `delete`, `metrics`,
    `group_by`, `action`), and a `meta` block with `trace_id` for support.

    - Every failure is the same `McpError` envelope with a code from a fixed
    16-code taxonomy, so a client maps errors once.

    - Lists page with `page_size` (0 to 500, default 50) plus an opaque forward
    `cursor`; `page_size: 0` returns counts only.

    - On `GET` and `DELETE`, object-valued query parameters (`filter`, `sort`)
    travel as JSON text and array-valued ones repeat as `name[]=value`.

    - The MCP-only `_meta` field (usage analytics) never reaches the backend and
    is not part of this contract.
  version: '1.0'
  contact:
    name: GTM API
    url: https://gtm-api.com
    email: support@gtm-api.com
  license:
    name: Proprietary
    url: https://gtm-api.com/license
servers:
  - url: https://app.gtm-api.com/orchestration/v4
    description: Production, through the app.gtm-api.com gateway
  - url: http://localhost:8025
    description: Local Docker (gtm_orchestration_nginx_dev)
security:
  - BearerJwt: []
    TeamSid: []
tags:
  - name: mass_action_items
    description: >-
      Registry package `mcp.orchestration/mass_action_items`, served on MCP
      mount `orchestration.mass_actions`.
  - name: mass_actions
    description: >-
      Registry package `mcp.orchestration/mass_actions`, served on MCP mount
      `orchestration.mass_actions`.
  - name: webhook_logs
    description: >-
      Registry package `mcp.orchestration/webhook_logs`, served on MCP mount
      `orchestration.webhooks`.
  - name: webhooks
    description: >-
      Registry package `mcp.orchestration/webhooks`, served on MCP mount
      `orchestration.webhooks`.
paths:
  /api/mass-action-items/search:
    post:
      tags:
        - mass_action_items
      summary: Search mass-action items
      description: >-
        Per-target drill-down of a mass action: one row per target with
        current_step, the object cursor (object_type / object_sid, on a
        generative run what the row created) and step_log[], one entry per plan
        step with status (running / deferred / succeeded / failed / skipped),
        executor_ref for async steps, created_object_sid for steps that minted
        one, credits_charged and error_message. The last step_log entry says
        what failed and why, earlier ones what completed: a failed item keeps
        the effects of its finished steps (fail-forward), created_object_sid is
        the cleanup surface. Filter by mass_action_sid, then narrow by status /
        current_step / wait_reason; object_sid is parent-scoped, so always pair
        it with mass_action_sid (unpaired it degrades to a full team scan). Sort
        defaults to position asc (insertion order; position 1 is the canary);
        page_size 0 returns pagination.total_count alone. No include[] and no
        counts block; run-level aggregation lives on the parent, mass-actions
        metrics.


        Contract:

        - MCP tool `search_mass_action_items`, registry package
        `mcp.orchestration/mass_action_items`, mount
        `orchestration.mass_actions`.

        - Operation `search`, response envelope `search`.

        - Flags: read only.
      operationId: search_mass_action_items
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchMassActionItemsRequest'
      responses:
        '200':
          description: '`search` success envelope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchMassActionItemsResponse'
        4XX:
          $ref: '#/components/responses/McpClientError'
        5XX:
          $ref: '#/components/responses/McpServerError'
components:
  schemas:
    SearchMassActionItemsRequest:
      type: object
      description: Request body of `search_mass_action_items`.
      properties:
        filter:
          type: object
          properties:
            sid:
              type: object
              properties:
                eq:
                  type: string
                in:
                  type: array
                  items:
                    type: string
              additionalProperties: false
            team_sid:
              type: object
              properties:
                eq:
                  type: string
              additionalProperties: false
              description: >-
                Redundant in normal use: the backend already scopes every read
                to the caller's team.
            mass_action_sid:
              type: object
              properties:
                eq:
                  type: string
                in:
                  type: array
                  items:
                    type: string
              additionalProperties: false
              description: The parent run (ma_ac_…). The drill-down filter, start here.
            object_sid:
              type: object
              properties:
                eq:
                  type: string
                in:
                  type: array
                  items:
                    type: string
              additionalProperties: false
              description: >-
                Cursor sid, parent-scoped by contract: always pair it with
                mass_action_sid. "Which runs ever touched object X" is not a
                supported query (the contract reserves 422 bounded_scan_required
                for it); the index is (mass_action_sid, object_sid), so on its
                own it is a full team scan.
            status:
              type: object
              properties:
                eq:
                  type: string
                  enum:
                    - pending
                    - queued
                    - running
                    - succeeded
                    - failed
                    - skipped
                    - cancelled
                ne:
                  type: string
                  enum:
                    - pending
                    - queued
                    - running
                    - succeeded
                    - failed
                    - skipped
                    - cancelled
                in:
                  type: array
                  items:
                    type: string
                    enum:
                      - pending
                      - queued
                      - running
                      - succeeded
                      - failed
                      - skipped
                      - cancelled
                nin:
                  type: array
                  items:
                    type: string
                    enum:
                      - pending
                      - queued
                      - running
                      - succeeded
                      - failed
                      - skipped
                      - cancelled
              additionalProperties: false
            current_step:
              type: object
              properties:
                eq:
                  type: integer
                gte:
                  type: integer
                lte:
                  type: integer
                gt:
                  type: integer
                lt:
                  type: integer
              additionalProperties: false
              description: 'Which plan step the row sits on: "everyone stuck at step 2".'
            wait_reason:
              type: object
              properties:
                eq:
                  type: string
                  enum:
                    - task_pending
                is_null:
                  type: boolean
              additionalProperties: false
              description: eq:'task_pending' selects the items deferred on an async task.
            retry_count:
              type: object
              properties:
                eq:
                  type: integer
                gte:
                  type: integer
                lte:
                  type: integer
                gt:
                  type: integer
                lt:
                  type: integer
              additionalProperties: false
            scheduled_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
                is_null:
                  type: boolean
              additionalProperties: false
              description: 'Due horizon: what runs next and when.'
            started_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
                is_null:
                  type: boolean
              additionalProperties: false
            finished_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
                is_null:
                  type: boolean
              additionalProperties: false
            duration_ms:
              type: object
              properties:
                eq:
                  type: integer
                gte:
                  type: integer
                lte:
                  type: integer
                gt:
                  type: integer
                lt:
                  type: integer
                is_null:
                  type: boolean
              additionalProperties: false
            created_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
              additionalProperties: false
            updated_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
              additionalProperties: false
        sort:
          type: object
          properties:
            field:
              type: string
              enum:
                - position
                - created_at
                - scheduled_at
                - started_at
                - finished_at
                - duration_ms
                - retry_count
            direction:
              type: string
              enum:
                - asc
                - desc
              description: Default desc.
          required:
            - field
        page_size:
          type: integer
          minimum: 0
          maximum: 200
          description: >-
            0..200, default 50. page_size=0 = count-only, page_size=1 =
            getFirst.
        cursor:
          type: string
          nullable: true
          description: >-
            Opaque forward cursor from a previous response
            pagination.next_cursor.
    SearchMassActionItemsResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        operation:
          type: string
          enum:
            - search
        items:
          type: array
          items:
            type: object
            properties:
              item:
                type: object
                properties:
                  sid:
                    type: string
                  team_sid:
                    type: string
                  mass_action_sid:
                    type: string
                    description: Parent mass action (ma_ac_…).
                  position:
                    type: integer
                    description: >-
                      1-based insertion order, immutable. Position 1 is the
                      canary when the parent runs one.
                  current_step:
                    type: integer
                    description: >-
                      1-based ordinal into the parent plan: the step the item is
                      on, and the point a retry resumes from.
                  status:
                    type: string
                    enum:
                      - pending
                      - queued
                      - running
                      - succeeded
                      - failed
                      - skipped
                      - cancelled
                  retry_count:
                    type: integer
                  object_type:
                    type: string
                    nullable: true
                    description: >-
                      Cursor entity family in kebab route-group spelling, e.g.
                      'antidetect-browsers'. Starts as the parent's
                      target_entity; null for payload-kind rows and for
                      generative rows that have not minted anything yet.
                  object_sid:
                    type: string
                    nullable: true
                    description: >-
                      Cursor sid: the entity the next step acts on. For a
                      generative run this is what the row has created so far.
                  payload:
                    type: object
                    nullable: true
                    additionalProperties: {}
                    description: >-
                      Opaque per-item dispatch params (target identity +
                      per-target extras) for payload-kind runs; null for object
                      / generative rows.
                  step_log:
                    type: array
                    items:
                      type: object
                      properties:
                        step_id:
                          type: integer
                          description: >-
                            Ordinal of the parent plan step this entry records
                            (mass_actions.plan.steps[].id).
                        status:
                          type: string
                          enum:
                            - running
                            - deferred
                            - succeeded
                            - failed
                            - skipped
                        started_at:
                          type: string
                          description: >-
                            ISO 8601 UTC. Committed BEFORE the outbound call
                            (started-marker).
                        finished_at:
                          type: string
                          nullable: true
                          description: >-
                            Terminal commit of this step; null while running or
                            deferred.
                        duration_ms:
                          type: integer
                          nullable: true
                          description: Wall clock for the step, defer waits included.
                        executor_ref:
                          type: string
                          nullable: true
                          description: >-
                            Async steps: sid of the dispatched task. The poll
                            handle for a deferred item; null on sync steps.
                        created_object_type:
                          type: string
                          nullable: true
                          description: >-
                            creates-steps: entity family of the object this step
                            minted.
                        created_object_sid:
                          type: string
                          nullable: true
                          description: >-
                            creates-steps: sid of the minted object. Survives a
                            later failure, so it is the cleanup surface.
                        credits_charged:
                          type: integer
                          nullable: true
                          description: >-
                            Creditable steps: credits actually debited for this
                            step; null otherwise.
                        error_message:
                          type: string
                          nullable: true
                          description: >-
                            Step-local failure cause. The item-level
                            error_message repeats it behind a 'step {k} {tool}:'
                            prefix.
                      required:
                        - step_id
                        - status
                        - started_at
                        - finished_at
                        - duration_ms
                        - executor_ref
                        - created_object_type
                        - created_object_sid
                        - credits_charged
                        - error_message
                    description: >-
                      One entry per plan step of the CURRENT attempt, ≤3. Read
                      the last entry for the failure, the earlier ones for what
                      already completed (fail-forward: their effects stand).
                  scheduled_at:
                    type: string
                    nullable: true
                    description: >-
                      "Not before" moment: pacing chain slot, retry re-plan, or
                      the re-poll horizon of a deferred item.
                  wait_reason:
                    type: string
                    nullable: true
                    enum:
                      - task_pending
                    description: >-
                      Why the item is deferred mid-cascade. Null when it is not
                      waiting; a parent-level pause leaves this null.
                  error_message:
                    type: string
                    nullable: true
                    description: >-
                      Failure text with a machine-readable prefix: 'step {k}
                      {tool}:', 'insufficient_credits:', or 'item_timeout:'
                      (reaper force-fail, outcome unknown).
                  started_at:
                    type: string
                    nullable: true
                  finished_at:
                    type: string
                    nullable: true
                  duration_ms:
                    type: integer
                    nullable: true
                  created_at:
                    type: string
                  updated_at:
                    type: string
                required:
                  - sid
                  - team_sid
                  - mass_action_sid
                  - position
                  - current_step
                  - status
                  - retry_count
                  - object_type
                  - object_sid
                  - payload
                  - step_log
                  - scheduled_at
                  - wait_reason
                  - error_message
                  - started_at
                  - finished_at
                  - duration_ms
                  - created_at
                  - updated_at
              included:
                type: object
                additionalProperties: {}
            required:
              - item
              - included
        pagination:
          type: object
          properties:
            next_cursor:
              type: string
              nullable: true
            has_more:
              type: boolean
            total_count:
              type: integer
              nullable: true
          required:
            - next_cursor
            - has_more
            - total_count
        applied_filters:
          type: object
          additionalProperties: {}
        includes:
          type: array
          items:
            type: string
        meta:
          type: object
          properties:
            trace_id:
              type: string
              description: UUID v7; same 128-bit value as the X-Trace-Id header.
            span_id:
              type: string
              pattern: ^[0-9a-f]{16}$
              description: 16 hex chars, root span of this request.
            timestamp:
              type: string
              description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
            duration_ms:
              type: integer
              minimum: 0
              description: Server-side wall clock.
            debug_url:
              type: string
              description: Deep link to the post-call analysis UI.
          required:
            - trace_id
            - span_id
            - timestamp
            - duration_ms
            - debug_url
        counts:
          type: object
          additionalProperties: {}
      required:
        - success
        - operation
        - items
        - pagination
        - applied_filters
        - includes
        - meta
    McpError:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - false
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - validation_failed
                - nothing_to_update
                - not_found
                - relation_not_found
                - invalid_transition
                - limit_exceeded
                - payment_required
                - duplicate_rejected
                - conflict
                - delete_blocked
                - unauthorized
                - forbidden
                - rate_limited
                - internal_error
                - service_unavailable
                - not_implemented
            message:
              type: string
            recoverable:
              type: boolean
            suggestion:
              type: string
            field_errors:
              type: object
              additionalProperties:
                type: array
                items:
                  anyOf:
                    - type: string
                    - type: object
                      properties:
                        rule:
                          type: string
                        message:
                          type: string
                      required:
                        - rule
                        - message
            blockers:
              type: array
              items:
                type: object
                properties:
                  type:
                    type: string
                    description: >-
                      Machine-readable blocker type (active_flow, pending_tasks,
                      …).
                  severity:
                    type: string
                    enum:
                      - hard
                      - soft
                    description: >-
                      hard = external action required; soft = acknowledge is
                      enough.
                  description:
                    type: string
                  entity_sid:
                    type: string
                    nullable: true
                  count:
                    type: integer
                  resolution:
                    type: string
                    description: 'Hard: tool name to call. Soft: code for acknowledge[].'
                  resolution_hint:
                    type: string
                required:
                  - type
                  - severity
                  - description
                  - entity_sid
                  - resolution
                  - resolution_hint
            context:
              type: object
              additionalProperties: {}
          required:
            - code
            - message
            - recoverable
        meta:
          type: object
          properties:
            trace_id:
              type: string
              description: UUID v7; same 128-bit value as the X-Trace-Id header.
            span_id:
              type: string
              pattern: ^[0-9a-f]{16}$
              description: 16 hex chars, root span of this request.
            timestamp:
              type: string
              description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
            duration_ms:
              type: integer
              minimum: 0
              description: Server-side wall clock.
            debug_url:
              type: string
              description: Deep link to the post-call analysis UI.
          required:
            - trace_id
            - span_id
            - timestamp
            - duration_ms
            - debug_url
      required:
        - success
        - error
  responses:
    McpClientError:
      description: >-
        MCP error envelope. `error.code` is one of validation_failed,
        nothing_to_update, not_found, relation_not_found, invalid_transition,
        limit_exceeded, payment_required, duplicate_rejected, conflict,
        delete_blocked, unauthorized, forbidden, rate_limited, not_implemented.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/McpError'
    McpServerError:
      description: >-
        MCP error envelope with `error.code` internal_error or
        service_unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/McpError'
  securitySchemes:
    BearerJwt:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Access token issued by gtm.service.id. Its `access_identity` claim
        carries `team_sid`, `actor_sid` and `actor_type`, and that team scope is
        authoritative.
    TeamSid:
      type: apiKey
      in: header
      name: Team-SID
      description: >-
        Team scope for tokens that do not carry one. Ignored when the token
        already names a team.

````