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

# Create play

> Create a play. The usual way: catalog_key alone (plus action.workflow_sid for a people play), which births the playbook's entry on the table as it is, once (a second create answers the existing row); then estimate_play, one sentence with the count and the credits, and run_play or the switch. The other way, a play saved from a view: an audience of one tab (the same filter AST a saved view carries), one action and a cadence. find_people over a company audience: the play owns a find_people source born at the first run; add_to_workflow over a people audience: the play owns a manual source born when the workflow is named (here, or later with update_play). A manual play runs on run_play (the click is the consent); a daily play runs by itself while enabled, and switching it on is the consent: estimate_play first, then say what one run does and what a day may spend (daily_credit_limit) in one sentence, and switch it on only after the yes. Refusals: an action that does not fit the object, a switch or a ceiling where it does not apply, a people play switched on with no workflow (422), an archived workflow (409 conflict), a workflow with no published version (409 invalid_transition), an audience the tab refuses (422 under audience).

Contract:
- MCP tool `create_play`, registry package `mcp.playtables/plays`, mount `playtables.pipeline`.
- Operation `create`, response envelope `create`.
- Flags: none.



## OpenAPI

````yaml /api-reference/playtables/openapi.yaml post /api/plays
openapi: 3.0.3
info:
  title: 'GetSales public contract: gs.service.playtables'
  description: >-
    The data platform and the outreach engine: tables of people and companies,
    their enrichment columns, cells and runs, the data sources that feed them,
    sender profiles, the stoplist, the activity feed, the credit ledger, and the
    multichannel workflows with their per-person journeys and tasks.


    GENERATED. This document is projected from the Zod MCP tool registry in
    `product/mcp/gs.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 `gs.service.playtables`, 142
    operations. This is the only OpenAPI document the platform publishes.
    Internal (`/internal`) and health endpoints are deliberately absent: they
    are not part of any contract, they can change without notice, and the
    service source is their only description.


    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: GetSales
    url: https://getsales.io
    email: support@getsales.io
  license:
    name: Proprietary
    url: https://getsales.io/terms
servers:
  - url: https://beta.getsales.io/playtables/v1
    description: >-
      Production (the gateway path on the beta ring; the origin is provisioned
      per DEPLOY_MAP.md)
security:
  - BearerJwt: []
    TeamSid: []
tags:
  - name: activities
    description: >-
      Registry package `mcp.playtables/activities`, served on MCP mount
      `playtables.journeys`.
  - name: activity_objects
    description: >-
      Registry package `mcp.playtables/activity_objects`, served on MCP mount
      `playtables.people`.
  - name: companies
    description: >-
      Registry package `mcp.playtables/companies`, served on MCP mount
      `playtables.people`.
  - name: credit_ledger_entries
    description: >-
      Registry package `mcp.playtables/credit_ledger_entries`, served on MCP
      mount `id.billing`.
  - name: data_source_items
    description: >-
      Registry package `mcp.playtables/data_source_items`, served on MCP mount
      `playtables.sources`.
  - name: data_sources
    description: >-
      Registry package `mcp.playtables/data_sources`, served on MCP mount
      `playtables.sources`.
  - name: notes
    description: >-
      Registry package `mcp.playtables/notes`, served on MCP mount
      `playtables.pipeline`.
  - name: people
    description: >-
      Registry package `mcp.playtables/people`, served on MCP mount
      `playtables.people`.
  - name: pipeline_stages
    description: >-
      Registry package `mcp.playtables/pipeline_stages`, served on MCP mount
      `playtables.pipeline`.
  - name: plays
    description: >-
      Registry package `mcp.playtables/plays`, served on MCP mount
      `playtables.pipeline`.
  - name: playtable_field_values
    description: >-
      Registry package `mcp.playtables/playtable_field_values`, served on MCP
      mount `playtables.columns`.
  - name: playtable_fields
    description: >-
      Registry package `mcp.playtables/playtable_fields`, served on MCP mount
      `playtables.columns`.
  - name: playtable_runs
    description: >-
      Registry package `mcp.playtables/playtable_runs`, served on MCP mount
      `playtables.columns`.
  - name: playtable_views
    description: >-
      Registry package `mcp.playtables/playtable_views`, served on MCP mount
      `playtables.tables`.
  - name: playtables
    description: >-
      Registry package `mcp.playtables/playtables`, served on MCP mount
      `playtables.tables`.
  - name: result_pages
    description: >-
      Registry package `mcp.playtables/result_pages`, served on MCP mount
      `playtables.tables`.
  - name: sender_profiles
    description: >-
      Registry package `mcp.playtables/sender_profiles`, served on MCP mount
      `playtables.sources`.
  - name: stoplist_entries
    description: >-
      Registry package `mcp.playtables/stoplist_entries`, served on MCP mount
      `playtables.stoplist`.
  - name: tags
    description: >-
      Registry package `mcp.playtables/tags`, served on MCP mount
      `playtables.pipeline`.
  - name: workflow_attachments
    description: >-
      Registry package `mcp.playtables/workflow_attachments`, served on MCP
      mount `playtables.workflows`.
  - name: workflow_records
    description: >-
      Registry package `mcp.playtables/workflow_records`, served on MCP mount
      `playtables.journeys`.
  - name: workflow_sources
    description: >-
      Registry package `mcp.playtables/workflow_sources`, served on MCP mount
      `playtables.workflows`.
  - name: workflow_tasks
    description: >-
      Registry package `mcp.playtables/workflow_tasks`, served on MCP mount
      `playtables.journeys`.
  - name: workflow_versions
    description: >-
      Registry package `mcp.playtables/workflow_versions`, served on MCP mount
      `playtables.workflows`.
  - name: workflows
    description: >-
      Registry package `mcp.playtables/workflows`, served on MCP mount
      `playtables.workflows`.
paths:
  /api/plays:
    post:
      tags:
        - plays
      summary: Create play
      description: >-
        Create a play. The usual way: catalog_key alone (plus
        action.workflow_sid for a people play), which births the playbook's
        entry on the table as it is, once (a second create answers the existing
        row); then estimate_play, one sentence with the count and the credits,
        and run_play or the switch. The other way, a play saved from a view: an
        audience of one tab (the same filter AST a saved view carries), one
        action and a cadence. find_people over a company audience: the play owns
        a find_people source born at the first run; add_to_workflow over a
        people audience: the play owns a manual source born when the workflow is
        named (here, or later with update_play). A manual play runs on run_play
        (the click is the consent); a daily play runs by itself while enabled,
        and switching it on is the consent: estimate_play first, then say what
        one run does and what a day may spend (daily_credit_limit) in one
        sentence, and switch it on only after the yes. Refusals: an action that
        does not fit the object, a switch or a ceiling where it does not apply,
        a people play switched on with no workflow (422), an archived workflow
        (409 conflict), a workflow with no published version (409
        invalid_transition), an audience the tab refuses (422 under audience).


        Contract:

        - MCP tool `create_play`, registry package `mcp.playtables/plays`, mount
        `playtables.pipeline`.

        - Operation `create`, response envelope `create`.

        - Flags: none.
      operationId: create_play
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePlayRequest'
      responses:
        '200':
          description: '`create` success envelope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatePlayResponse'
        4XX:
          $ref: '#/components/responses/McpClientError'
        5XX:
          $ref: '#/components/responses/McpServerError'
components:
  schemas:
    CreatePlayRequest:
      type: object
      description: Request body of `create_play`.
      properties:
        playtable_sid:
          type: string
          minLength: 18
          maxLength: 18
          pattern: ^pt_tb_
          description: The table the play lives in; its audience is resolved inside it.
        catalog_key:
          type: string
          enum:
            - keep_fresh
            - congratulate
            - on_job_change
            - engage_posts
            - on_website_visit
            - find_people_empty
            - top_up_thin
            - top_up_silent
            - top_up_no_reply
            - top_up_exhausted
            - find_decision_maker
            - reengage_dormant
            - reach_untouched
          description: >-
            A playbook play: the entry gives object, audience, action and name,
            so send only the table (plus action.workflow_sid for a people play;
            cadence, switch, ceiling if wanted). Born once per table: a repeat
            answers the existing row, already_exists true.
        name:
          type: string
          minLength: 1
          maxLength: 255
          description: Required without catalog_key; with it, a name over the entry's.
        object_type:
          type: string
          enum:
            - people
            - company
          description: >-
            Required without catalog_key. What the audience selects: company for
            find_people, people for add_to_workflow (422 otherwise).
        action_type:
          type: string
          enum:
            - find_people
            - add_to_workflow
            - refresh
            - congratulate
            - on_job_change
            - engage_posts
            - on_website_visit
          description: Required without catalog_key.
        action:
          type: object
          properties:
            prompt:
              type: string
              nullable: true
              maxLength: 2000
              description: >-
                find_people: who to find at each account; absent on a playbook
                play = the entry's default, empty otherwise = everyone the page
                gives.
            per_company_limit:
              type: integer
              nullable: true
              minimum: 1
              maximum: 25
              description: >-
                find_people: people per account; absent on a playbook play = the
                entry's default, absent otherwise = the whole first page.
            workflow_sid:
              type: string
              nullable: true
              minLength: 18
              maxLength: 18
              pattern: ^wf_wf_
              description: >-
                add_to_workflow: the workflow the audience enters, the team's,
                live, published (409 otherwise); the play's manual source is
                born in it. Omit to pick it later with update_play: until then
                the play neither estimates, runs nor switches on.
            moments:
              type: object
              properties:
                birthday:
                  type: object
                  properties:
                    'on':
                      type: boolean
                      description: The moment's switch.
                    do:
                      type: string
                      enum:
                        - send_message
                        - add_to_workflow
                      description: >-
                        While on: a message (the template, sent as the person's
                        connected sender profile) or the workflow the person
                        enters.
                    template:
                      type: string
                      nullable: true
                      maxLength: 2000
                      description: >-
                        The message, in the workflow template grammar
                        ({{people.first_name}}).
                    workflow_sid:
                      type: string
                      nullable: true
                      description: 'wf_wf_…: the workflow, when the Do is a workflow.'
                  required:
                    - 'on'
                    - do
                    - template
                    - workflow_sid
                work_anniversary:
                  type: object
                  properties:
                    'on':
                      type: boolean
                      description: The moment's switch.
                    do:
                      type: string
                      enum:
                        - send_message
                        - add_to_workflow
                      description: >-
                        While on: a message (the template, sent as the person's
                        connected sender profile) or the workflow the person
                        enters.
                    template:
                      type: string
                      nullable: true
                      maxLength: 2000
                      description: >-
                        The message, in the workflow template grammar
                        ({{people.first_name}}).
                    workflow_sid:
                      type: string
                      nullable: true
                      description: 'wf_wf_…: the workflow, when the Do is a workflow.'
                  required:
                    - 'on'
                    - do
                    - template
                    - workflow_sid
                job_change:
                  type: object
                  properties:
                    'on':
                      type: boolean
                      description: The moment's switch.
                    do:
                      type: string
                      enum:
                        - send_message
                        - add_to_workflow
                      description: >-
                        While on: a message (the template, sent as the person's
                        connected sender profile) or the workflow the person
                        enters.
                    template:
                      type: string
                      nullable: true
                      maxLength: 2000
                      description: >-
                        The message, in the workflow template grammar
                        ({{people.first_name}}).
                    workflow_sid:
                      type: string
                      nullable: true
                      description: 'wf_wf_…: the workflow, when the Do is a workflow.'
                  required:
                    - 'on'
                    - do
                    - template
                    - workflow_sid
              description: >-
                congratulate: the moments over the entry's defaults, each key
                deep (one moment's own keys over its default).
            do:
              type: string
              description: >-
                on_job_change: pause_and_ask | remove_from_workflows |
                move_to_workflow; on_website_visit: pause_and_ask |
                add_to_workflow.
            like:
              type: object
              properties:
                'on':
                  type: boolean
                reaction:
                  type: string
                  enum:
                    - ai
                    - like
                    - celebrate
                    - support
                    - love
                    - insightful
                    - funny
                  description: >-
                    ai = the AI reads the post and picks one of the six; else
                    always this one. One reaction a post, never changed later.
              required:
                - 'on'
                - reaction
            comment:
              type: object
              properties:
                'on':
                  type: boolean
                brief:
                  type: string
                  nullable: true
                  maxLength: 2000
                  description: What the AI writes the comment from; required while on.
              required:
                - 'on'
                - brief
            per_person_weekly_cap:
              type: integer
              minimum: 1
              maximum: 14
            sender_profile_sid:
              type: string
              nullable: true
              description: >-
                engage_posts: who acts on a person connected to no sender
                profile.
            pages:
              type: array
              nullable: true
              items:
                type: string
          description: >-
            The action's parameters (required without catalog_key), the keys of
            the action_type over the entry's defaults. The sids of the play's
            sources are never sent: the server births them. A workflow a typed
            action names must be the team's, live and published.
        watch:
          type: object
          nullable: true
          properties:
            profile_days:
              anyOf:
                - type: number
                  enum:
                    - 7
                - type: number
                  enum:
                    - 14
                - type: number
                  enum:
                    - 30
                - type: number
                  enum:
                    - 90
                - {}
              description: >-
                The LinkedIn profile every N days: 7 | 14 | 30 | 90; null = not
                watched.
            company_days:
              anyOf:
                - type: number
                  enum:
                    - 30
                - type: number
                  enum:
                    - 90
                - {}
              description: 'The company page every N days: 30 | 90; null = not watched.'
            posts_days:
              anyOf:
                - type: number
                  enum:
                    - 1
                - type: number
                  enum:
                    - 3
                - type: number
                  enum:
                    - 7
                - {}
              description: 'The person''s posts every N days: 1 | 3 | 7; null = not watched.'
            moments:
              type: boolean
              description: >-
                The network's moments (birthdays, work anniversaries, job
                changes) through the sender profiles' catch-up feed, daily,
                free.
          description: >-
            What the play keeps refreshed; absent on a playbook play = the
            entry's; a cadence outside the product's own is 422; null = nothing.
        mode:
          type: string
          enum:
            - ask_me
            - automatic
          description: >-
            ask_me | automatic; absent on a playbook play = the entry's (ask me
            for the plays that act).
        audience:
          description: >-
            Without catalog_key: the tab's filter AST, validated like a saved
            view. Signals by name: {field: signals, op: {in: [no_engagement]}};
            the category: {field: pipeline_stage_category, op: {in: [nurture]}};
            several under {and: [...]}. Omit = the whole tab.
        cadence:
          type: string
          enum:
            - manual
            - daily
          description: Default manual.
        enabled:
          type: boolean
          description: >-
            daily only: true is the consent, stated with the estimate; the first
            run follows within the minute. 422 on a manual play.
        daily_credit_limit:
          type: integer
          nullable: true
          minimum: 1
          description: >-
            find_people only: what one day may spend. 422 on an add_to_workflow
            play.
      required:
        - playtable_sid
    CreatePlayResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        operation:
          type: string
          enum:
            - create
        item:
          type: object
          properties:
            sid:
              type: string
              description: Play sid (pt_pl_…).
            team_sid:
              type: string
              description: Owning team (ts_tm_…).
            playtable_sid:
              type: string
              description: >-
                The table the play lives in (pt_tb_…): its tab, and the scope of
                its audience.
            catalog_key:
              type: string
              nullable: true
              enum:
                - keep_fresh
                - congratulate
                - on_job_change
                - engage_posts
                - on_website_visit
                - find_people_empty
                - top_up_thin
                - top_up_silent
                - top_up_no_reply
                - top_up_exhausted
                - find_decision_maker
                - reengage_dormant
                - reach_untouched
              description: >-
                The playbook entry the row was born from; null = a play saved
                from a view's filter.
            name:
              type: string
              description: The play's name, 1..255.
            object_type:
              type: string
              enum:
                - people
                - company
              description: 'What the audience selects: people, or company (accounts).'
            action_type:
              type: string
              enum:
                - find_people
                - add_to_workflow
                - refresh
                - congratulate
                - on_job_change
                - engage_posts
                - on_website_visit
              description: >-
                find_people (a company audience); every other kind runs on a
                people audience: add_to_workflow, refresh (Keep data fresh),
                congratulate, on_job_change, engage_posts, on_website_visit.
            action:
              anyOf:
                - type: object
                  properties:
                    prompt:
                      type: string
                      nullable: true
                      description: >-
                        Who to find at each account ("owner, founder, VP and
                        up"); planned once into a Sales Navigator filter by the
                        play's source. null = everyone the page gives.
                    per_company_limit:
                      type: integer
                      nullable: true
                      description: >-
                        People taken per account, 1..25; null = the whole first
                        page.
                    data_source_sid:
                      type: string
                      nullable: true
                      description: >-
                        The play's own find_people source (ds_sc_…), born at the
                        first run that had accounts; its queue and funnel are
                        read with get_data_source. null until then.
                  required:
                    - prompt
                    - per_company_limit
                    - data_source_sid
                - type: object
                  properties:
                    workflow_sid:
                      type: string
                      nullable: true
                      description: >-
                        The workflow the audience enters (wf_wf_…); null while
                        the play waits for one (picked once, with update_play),
                        and fixed from then on.
                    workflow_source_sid:
                      type: string
                      nullable: true
                      description: >-
                        The play's own manual source in that workflow (wf_sr_…),
                        born when the workflow is picked; its entry counters are
                        read with search_workflow_sources.
                  required:
                    - workflow_sid
                    - workflow_source_sid
                - type: object
                  properties:
                    moments:
                      type: object
                      properties:
                        birthday:
                          type: object
                          properties:
                            'on':
                              type: boolean
                              description: The moment's switch.
                            do:
                              type: string
                              enum:
                                - send_message
                                - add_to_workflow
                              description: >-
                                While on: a message (the template, sent as the
                                person's connected sender profile) or the
                                workflow the person enters.
                            template:
                              type: string
                              nullable: true
                              maxLength: 2000
                              description: >-
                                The message, in the workflow template grammar
                                ({{people.first_name}}).
                            workflow_sid:
                              type: string
                              nullable: true
                              description: >-
                                wf_wf_…: the workflow, when the Do is a
                                workflow.
                          required:
                            - 'on'
                            - do
                            - template
                            - workflow_sid
                        work_anniversary:
                          type: object
                          properties:
                            'on':
                              type: boolean
                              description: The moment's switch.
                            do:
                              type: string
                              enum:
                                - send_message
                                - add_to_workflow
                              description: >-
                                While on: a message (the template, sent as the
                                person's connected sender profile) or the
                                workflow the person enters.
                            template:
                              type: string
                              nullable: true
                              maxLength: 2000
                              description: >-
                                The message, in the workflow template grammar
                                ({{people.first_name}}).
                            workflow_sid:
                              type: string
                              nullable: true
                              description: >-
                                wf_wf_…: the workflow, when the Do is a
                                workflow.
                          required:
                            - 'on'
                            - do
                            - template
                            - workflow_sid
                        job_change:
                          type: object
                          properties:
                            'on':
                              type: boolean
                              description: The moment's switch.
                            do:
                              type: string
                              enum:
                                - send_message
                                - add_to_workflow
                              description: >-
                                While on: a message (the template, sent as the
                                person's connected sender profile) or the
                                workflow the person enters.
                            template:
                              type: string
                              nullable: true
                              maxLength: 2000
                              description: >-
                                The message, in the workflow template grammar
                                ({{people.first_name}}).
                            workflow_sid:
                              type: string
                              nullable: true
                              description: >-
                                wf_wf_…: the workflow, when the Do is a
                                workflow.
                          required:
                            - 'on'
                            - do
                            - template
                            - workflow_sid
                      description: >-
                        A switch per moment with its own Do under it; a kind
                        absent is off.
                  required:
                    - moments
                - type: object
                  properties:
                    do:
                      type: string
                      enum:
                        - pause_and_ask
                        - remove_from_workflows
                        - move_to_workflow
                      description: For a person in a workflow whose title or company moved.
                    workflow_sid:
                      type: string
                      nullable: true
                      description: >-
                        wf_wf_…: where move_to_workflow moves the person
                        (required then).
                  required:
                    - do
                    - workflow_sid
                - type: object
                  properties:
                    like:
                      type: object
                      properties:
                        'on':
                          type: boolean
                        reaction:
                          type: string
                          enum:
                            - ai
                            - like
                            - celebrate
                            - support
                            - love
                            - insightful
                            - funny
                          description: >-
                            ai = the AI reads the post and picks one of the six;
                            else always this one. One reaction a post, never
                            changed later.
                      required:
                        - 'on'
                        - reaction
                    comment:
                      type: object
                      properties:
                        'on':
                          type: boolean
                        brief:
                          type: string
                          nullable: true
                          maxLength: 2000
                          description: >-
                            What the AI writes the comment from; required while
                            on.
                      required:
                        - 'on'
                        - brief
                    per_person_weekly_cap:
                      type: integer
                      minimum: 1
                      maximum: 14
                      description: At most this many acts a week per person.
                    sender_profile_sid:
                      type: string
                      nullable: true
                      description: >-
                        ub_sp_…: who acts on a person connected to no sender
                        profile (the connected one acts otherwise; the social
                        workspace is the team's); null = the team's first that
                        can.
                  required:
                    - like
                    - comment
                    - per_person_weekly_cap
                    - sender_profile_sid
                - type: object
                  properties:
                    do:
                      type: string
                      enum:
                        - pause_and_ask
                        - add_to_workflow
                      description: >-
                        On a visit of a key page or a form: pause the journey
                        and ask, or the workflow named.
                    workflow_sid:
                      type: string
                      nullable: true
                      description: 'wf_wf_…: required when the Do is a workflow.'
                    pages:
                      type: array
                      nullable: true
                      items:
                        type: string
                      description: >-
                        Path prefixes of the team's site (/pricing) that count;
                        null = every visit the snippet reports.
                  required:
                    - do
                    - workflow_sid
                    - pages
                - type: object
                  properties: {}
                  description: >-
                    Keep data fresh acts on nothing: the refresh of what it
                    watches is the deed.
              description: >-
                The action's parameters, the shape of its action_type: the sids
                of the sources a find_people or add_to_workflow play owns; the
                moments of a congratulate play; the Do of on_job_change and
                on_website_visit; the like, the comment and the weekly cap of
                engage_posts; {} for refresh.
            audience:
              description: >-
                The tab's own filter AST (the §4.18 tree a saved view carries:
                {field: "signals", op: {in: ["no_engagement"]}},
                pipeline_stage_category, tag_sids, record.<slug> cells, and/or
                or and); null = the whole tab.
            watch:
              type: object
              nullable: true
              properties:
                profile_days:
                  anyOf:
                    - type: number
                      enum:
                        - 7
                    - type: number
                      enum:
                        - 14
                    - type: number
                      enum:
                        - 30
                    - type: number
                      enum:
                        - 90
                    - {}
                  description: >-
                    The LinkedIn profile every N days: 7 | 14 | 30 | 90; null =
                    not watched.
                company_days:
                  anyOf:
                    - type: number
                      enum:
                        - 30
                    - type: number
                      enum:
                        - 90
                    - {}
                  description: 'The company page every N days: 30 | 90; null = not watched.'
                posts_days:
                  anyOf:
                    - type: number
                      enum:
                        - 1
                    - type: number
                      enum:
                        - 3
                    - type: number
                      enum:
                        - 7
                    - {}
                  description: >-
                    The person's posts every N days: 1 | 3 | 7; null = not
                    watched.
                moments:
                  type: boolean
                  description: >-
                    The network's moments (birthdays, work anniversaries, job
                    changes) through the sender profiles' catch-up feed, daily,
                    free.
              required:
                - profile_days
                - company_days
                - posts_days
                - moments
              description: >-
                What the play keeps refreshed and how often; null = nothing
                (2026-10-13).
            cadence:
              type: string
              enum:
                - manual
                - daily
              description: >-
                manual: runs on run_play; daily: runs by itself every day while
                enabled.
            mode:
              type: string
              enum:
                - ask_me
                - automatic
              description: >-
                ask_me: the act waits for approval as a task in the Signals
                feed; automatic: it goes out by itself. The plays that act are
                born asking (2026-10-13).
            enabled:
              type: boolean
              description: The switch of a daily play; a manual play is always false.
            enabled_by:
              type: object
              nullable: true
              properties:
                actor_type:
                  type: string
                  enum:
                    - user
                    - support
                    - api_key
                    - system
                    - agent
                actor_sid:
                  type: string
                  nullable: true
                team_sid:
                  type: string
                actor_name:
                  type: string
                  nullable: true
                  description: >-
                    The OAuth client that acted ("Claude", "n8n"); null for a
                    user, an API key or a system job.
                oauth_client_sid:
                  type: string
                  nullable: true
                  description: The acting OAuth client (id_oc_*); null off the OAuth path.
                reason:
                  type: string
                  nullable: true
                  description: >-
                    Why a system actor wrote the row (snapshot_capture_job,
                    ...); null otherwise.
                permissions:
                  type: object
                  additionalProperties: {}
                  description: >-
                    Internal audit context: the grant set the actor held at
                    write time. Not a contract.
                cluster_id:
                  type: integer
                  nullable: true
                  description: 'Internal audit context: the cluster that served the write.'
                trace_id:
                  type: string
                  nullable: true
                  description: >-
                    Internal audit context: the trace id of the request that
                    wrote the row.
              required:
                - actor_type
                - actor_sid
                - team_sid
                - permissions
              description: Who gave the consent (switched the play on).
            enabled_at:
              type: string
              nullable: true
              description: 'ISO 8601 UTC: when.'
            daily_credit_limit:
              type: integer
              nullable: true
              description: >-
                The plays that spend (find_people, and a watching play's reads):
                the credits one day may spend; null = no ceiling (the queue's
                room and the 500-row cap still bound a run). 422 on
                add_to_workflow.
            last_run_at:
              type: string
              nullable: true
              description: ISO 8601 UTC.
            last_run_counts:
              type: object
              nullable: true
              properties:
                matched:
                  type: integer
                  minimum: 0
                  description: >-
                    Rows the audience matched at the run (the tab's count under
                    the filter).
                acted:
                  type: integer
                  minimum: 0
                  description: >-
                    Accounts appended to the queue, or people entered or
                    re-entered.
                skipped:
                  type: integer
                  minimum: 0
                  description: >-
                    Left alone: already queued or searched, in flight, held at
                    the door, past the ceiling or the 500-row cap.
                credits:
                  type: integer
                  minimum: 0
                  description: >-
                    What the run committed: the walk's estimate for the accounts
                    appended (one credit per account); 0 for an add_to_workflow
                    play.
              required:
                - matched
                - acted
                - skipped
                - credits
              description: What the last run did; null before the first run.
            next_run_at:
              type: string
              nullable: true
              description: >-
                ISO 8601 UTC: when the daily sweep runs it next; null on a
                manual or switched-off play.
            created_by:
              type: object
              properties:
                actor_type:
                  type: string
                  enum:
                    - user
                    - support
                    - api_key
                    - system
                    - agent
                actor_sid:
                  type: string
                  nullable: true
                team_sid:
                  type: string
                actor_name:
                  type: string
                  nullable: true
                  description: >-
                    The OAuth client that acted ("Claude", "n8n"); null for a
                    user, an API key or a system job.
                oauth_client_sid:
                  type: string
                  nullable: true
                  description: The acting OAuth client (id_oc_*); null off the OAuth path.
                reason:
                  type: string
                  nullable: true
                  description: >-
                    Why a system actor wrote the row (snapshot_capture_job,
                    ...); null otherwise.
                permissions:
                  type: object
                  additionalProperties: {}
                  description: >-
                    Internal audit context: the grant set the actor held at
                    write time. Not a contract.
                cluster_id:
                  type: integer
                  nullable: true
                  description: 'Internal audit context: the cluster that served the write.'
                trace_id:
                  type: string
                  nullable: true
                  description: >-
                    Internal audit context: the trace id of the request that
                    wrote the row.
              required:
                - actor_type
                - actor_sid
                - team_sid
                - permissions
            deleted_by:
              type: object
              nullable: true
              properties:
                actor_type:
                  type: string
                  enum:
                    - user
                    - support
                    - api_key
                    - system
                    - agent
                actor_sid:
                  type: string
                  nullable: true
                team_sid:
                  type: string
                actor_name:
                  type: string
                  nullable: true
                  description: >-
                    The OAuth client that acted ("Claude", "n8n"); null for a
                    user, an API key or a system job.
                oauth_client_sid:
                  type: string
                  nullable: true
                  description: The acting OAuth client (id_oc_*); null off the OAuth path.
                reason:
                  type: string
                  nullable: true
                  description: >-
                    Why a system actor wrote the row (snapshot_capture_job,
                    ...); null otherwise.
                permissions:
                  type: object
                  additionalProperties: {}
                  description: >-
                    Internal audit context: the grant set the actor held at
                    write time. Not a contract.
                cluster_id:
                  type: integer
                  nullable: true
                  description: 'Internal audit context: the cluster that served the write.'
                trace_id:
                  type: string
                  nullable: true
                  description: >-
                    Internal audit context: the trace id of the request that
                    wrote the row.
              required:
                - actor_type
                - actor_sid
                - team_sid
                - permissions
            created_at:
              type: string
              description: ISO 8601 UTC.
            updated_at:
              type: string
              description: ISO 8601 UTC.
            deleted_at:
              type: string
              nullable: true
              description: ISO 8601 UTC; null = live.
          required:
            - sid
            - team_sid
            - playtable_sid
            - catalog_key
            - name
            - object_type
            - action_type
            - action
            - watch
            - cadence
            - mode
            - enabled
            - enabled_by
            - enabled_at
            - daily_credit_limit
            - last_run_at
            - last_run_counts
            - next_run_at
            - created_by
            - deleted_by
            - created_at
            - updated_at
            - deleted_at
        already_exists:
          type: boolean
        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.
            team_sid:
              type: string
              nullable: true
              description: >-
                The team this call ran in (the token team, or the team_sid
                override). Null when unauthenticated; absent from pre-2026-08-20
                backends.
            actor_type:
              type: string
              nullable: true
              description: >-
                user | agent | api_key | system. Null when unauthenticated;
                absent from pre-2026-08-20 backends.
          required:
            - trace_id
            - span_id
            - timestamp
            - duration_ms
      required:
        - success
        - operation
        - item
        - already_exists
        - 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:
                  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.
            team_sid:
              type: string
              nullable: true
              description: >-
                The team this call ran in (the token team, or the team_sid
                override). Null when unauthenticated; absent from pre-2026-08-20
                backends.
            actor_type:
              type: string
              nullable: true
              description: >-
                user | agent | api_key | system. Null when unauthenticated;
                absent from pre-2026-08-20 backends.
          required:
            - trace_id
            - span_id
            - timestamp
            - duration_ms
      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 gs.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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.