> ## 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.

# Search sender profiles

> The team's sender profiles (ub_sp_): the one list, the one sid playtables names too. A row says who the team speaks as, the LinkedIn account and mailboxes it holds and their health (linkedin_status, status per mailboxes[] entry; none of its own), and what it can open (linkedin_has_sn, linkedin_recruiter_status active). Filter by linkedin_status, assignee_user_sid or an account ref; q matches the name; page_size 0 answers the LinkedIn health snapshot alone. No get tool: filter sid eq.

Contract:
- MCP tool `search_sender_profiles`, registry package `mcp.unibox/sender_profiles`, mount `unibox.sender-profiles`.
- Operation `search`, response envelope `search`.
- Flags: read only.



## OpenAPI

````yaml /api-reference/unibox/openapi.yaml post /api/sender-profiles/search
openapi: 3.0.3
info:
  title: 'GetSales public contract: gs.service.unibox'
  description: >-
    The team inbox and the AI SDR: every LinkedIn and email thread in one place
    (conversations, messages, the timeline events), the manual tasks a thread
    spawns, the sender profiles the team speaks through with their LinkedIn
    account and mailboxes, and the one agent per team with its scenarios, plans
    and runs.


    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.unibox`, 125 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/unibox/v1
    description: >-
      Production (the gateway path on the beta ring; the origin is provisioned
      per DEPLOY_MAP.md)
security:
  - BearerJwt: []
    TeamSid: []
tags:
  - name: agent_answers
    description: >-
      Registry package `mcp.unibox/agent_answers`, served on MCP mount
      `unibox.knowledge`.
  - name: agent_conversation_uploads
    description: >-
      Registry package `mcp.unibox/agent_conversation_uploads`, served on MCP
      mount `unibox.agent-memory`.
  - name: agent_examples
    description: >-
      Registry package `mcp.unibox/agent_examples`, served on MCP mount
      `unibox.agent-memory`.
  - name: agent_hints
    description: >-
      Registry package `mcp.unibox/agent_hints`, served on MCP mount
      `unibox.agent-memory`.
  - name: agent_plans
    description: >-
      Registry package `mcp.unibox/agent_plans`, served on MCP mount
      `unibox.agent`.
  - name: agent_runs
    description: >-
      Registry package `mcp.unibox/agent_runs`, served on MCP mount
      `unibox.agent-memory`.
  - name: agent_scenarios
    description: >-
      Registry package `mcp.unibox/agent_scenarios`, served on MCP mount
      `unibox.agent`.
  - name: agent_source_parses
    description: >-
      Registry package `mcp.unibox/agent_source_parses`, served on MCP mount
      `unibox.knowledge`.
  - name: agent_sources
    description: >-
      Registry package `mcp.unibox/agent_sources`, served on MCP mount
      `unibox.knowledge`.
  - name: agent_tests
    description: >-
      Registry package `mcp.unibox/agent_tests`, served on MCP mount
      `unibox.agent-memory`.
  - name: agents
    description: >-
      Registry package `mcp.unibox/agents`, served on MCP mount
      `unibox.website`.
  - name: conversation_events
    description: >-
      Registry package `mcp.unibox/conversation_events`, served on MCP mount
      `unibox.inbox`.
  - name: conversations
    description: >-
      Registry package `mcp.unibox/conversations`, served on MCP mount
      `unibox.inbox`.
  - name: messages
    description: >-
      Registry package `mcp.unibox/messages`, served on MCP mount
      `unibox.inbox`.
  - name: sender_profiles
    description: >-
      Registry package `mcp.unibox/sender_profiles`, served on MCP mount
      `unibox.sender-profiles`.
  - name: tasks
    description: Registry package `mcp.unibox/tasks`, served on MCP mount `unibox.inbox`.
  - name: timeline
    description: >-
      Registry package `mcp.unibox/timeline`, served on MCP mount
      `unibox.inbox`.
paths:
  /api/sender-profiles/search:
    post:
      tags:
        - sender_profiles
      summary: Search sender profiles
      description: >-
        The team's sender profiles (ub_sp_): the one list, the one sid
        playtables names too. A row says who the team speaks as, the LinkedIn
        account and mailboxes it holds and their health (linkedin_status, status
        per mailboxes[] entry; none of its own), and what it can open
        (linkedin_has_sn, linkedin_recruiter_status active). Filter by
        linkedin_status, assignee_user_sid or an account ref; q matches the
        name; page_size 0 answers the LinkedIn health snapshot alone. No get
        tool: filter sid eq.


        Contract:

        - MCP tool `search_sender_profiles`, registry package
        `mcp.unibox/sender_profiles`, mount `unibox.sender-profiles`.

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

        - Flags: read only.
      operationId: search_sender_profiles
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchSenderProfilesRequest'
      responses:
        '200':
          description: '`search` success envelope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchSenderProfilesResponse'
        4XX:
          $ref: '#/components/responses/McpClientError'
        5XX:
          $ref: '#/components/responses/McpServerError'
components:
  schemas:
    SearchSenderProfilesRequest:
      type: object
      description: Request body of `search_sender_profiles`.
      properties:
        filter:
          type: object
          properties:
            q:
              type: string
              maxLength: 128
              description: >-
                Free text over the sender profile NAME only (MySQL LIKE, small
                per-team set). Labels and addresses are not searched.
            sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^ub_sp_
                  description: Sender profile sid (ub_sp_…).
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^ub_sp_
                    description: Sender profile sid (ub_sp_…).
              additionalProperties: false
              description: >-
                Sender profile sid(s), ub_sp_ prefix. This is the point-lookup
                path: there is no get tool.
            linkedin_status:
              type: object
              properties:
                eq:
                  type: string
                  enum:
                    - active
                    - reconnect_required
                    - stalled
                    - disconnected
                    - stopped
                ne:
                  type: string
                  enum:
                    - active
                    - reconnect_required
                    - stalled
                    - disconnected
                    - stopped
                in:
                  type: array
                  items:
                    type: string
                    enum:
                      - active
                      - reconnect_required
                      - stalled
                      - disconnected
                      - stopped
                nin:
                  type: array
                  items:
                    type: string
                    enum:
                      - active
                      - reconnect_required
                      - stalled
                      - disconnected
                      - stopped
              additionalProperties: false
              description: >-
                By the LinkedIn channel: signed out = {eq: reconnect_required};
                broken = {in: [reconnect_required, disconnected]}; silent, or
                failing its browser starts = {eq: stalled}; sending = {in:
                [active, stalled]}. No LinkedIn account = no value, matches
                none.
            linkedin_account_sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^ln_ac_
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^ln_ac_
                is_null:
                  type: boolean
              additionalProperties: false
              description: >-
                Which sender profile speaks through a given gtm-api LinkedIn
                account; is_null:true = sender profiles with no LinkedIn
                channel.
            email_account_sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^em_ac_
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^em_ac_
                is_null:
                  type: boolean
              additionalProperties: false
              description: >-
                By PRIMARY mailbox; is_null:true = sender profiles with no
                mailbox. A secondary mailbox is not matched here.
            assignee_user_sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                is_null:
                  type: boolean
              additionalProperties: false
              description: >-
                Sender profiles by operator ("sender profiles I run");
                is_null:true = unassigned.
            created_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
              additionalProperties: false
              description: ISO 8601 range; combine both bounds in one object.
            deleted_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                is_null:
                  type: boolean
              additionalProperties: false
              description: 'Default scope is { is_null: true } (live sender profiles).'
          description: >-
            Field filters, ANDed: {field: {eq | ne | in | nin | gte | lte | gt |
            lt | is_null}}; q inside it is free text. Omit for every row.
        sort:
          type: object
          properties:
            field:
              type: string
              enum:
                - created_at
                - updated_at
                - name
              description: The column to order by.
            direction:
              type: string
              enum:
                - asc
                - desc
              description: asc or desc; default desc.
          required:
            - field
          description: One column and its direction; omit for the default order.
        page_size:
          type: integer
          minimum: 0
          maximum: 500
          description: 0..500, default 50; 0 = counts only, 1 = the first row.
        cursor:
          type: string
          nullable: true
          description: pagination.next_cursor of the previous page.
    SearchSenderProfilesResponse:
      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
                    description: Sender profile sid (ub_sp_…).
                  team_sid:
                    type: string
                    description: Owning team (ts_tm_…, external - gs.service.id).
                  name:
                    type: string
                    description: >-
                      Display persona name (1..255). The profile is the person:
                      connecting an account never renames it.
                  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
                    description: >-
                      Actor that created the sender profile
                      (AccessIdentityValue).
                  label:
                    type: string
                    nullable: true
                    description: >-
                      The free text under the name in the sender profile list
                      ("Outbound EU"), max 255; null = none.
                  linkedin_account_sid:
                    type: string
                    nullable: true
                    description: >-
                      The gtm-api LinkedIn account this sender profile speaks
                      through (ln_ac_…); null = no LinkedIn channel. Bound by
                      the channel verbs only, never by update_sender_profile.
                  linkedin_source:
                    type: string
                    nullable: true
                    enum:
                      - cloud
                      - own_proxy
                      - gologin
                      - attached
                    description: >-
                      How that account came in (the page's session badge): cloud
                      | own_proxy | gologin (the per-sender-profile connect
                      flows) | attached (an account gtm-api already held).
                      Read-only.
                  linkedin_status:
                    type: string
                    nullable: true
                    enum:
                      - active
                      - reconnect_required
                      - stalled
                      - disconnected
                      - stopped
                    description: >-
                      The LinkedIn channel as gtm-api reports it: active sends,
                      reconnect_required = the browser is signed out, stalled =
                      the account did nothing through a full day of its sync
                      hours, or its browser failed a start gtm-api still retries
                      (sends are still tried, nothing to sign in to;
                      linkedin_status_reason says which), disconnected = the
                      account is gone, refused or its browser parked after the
                      retries. null = no LinkedIn account bound. Read-only. The
                      sender profile has no status of its own: a mailbox carries
                      its state on its own mailboxes[] row.
                  linkedin_status_reason:
                    type: string
                    nullable: true
                    description: >-
                      gtm-api's cause token behind a non-active linkedin_status;
                      null while active. Read-only. Login: logged_out,
                      login_failed. Silence: heartbeat_stale (no cause known).
                      browser_unreachable (stalled, ours: the platform could not
                      run the browser, behind a silence or on a failed start
                      still retried). A browser fault the team fixes, parked
                      (disconnected) or not parked yet (stalled: a failed start
                      gtm-api still retries, or a silence): browser_proxy_failed
                      (the proxy does not answer), browser_profile_unavailable
                      (the GoLogin profile is deleted or unreadable),
                      browser_linkedin_session (LinkedIn wants a sign-in or a
                      check), browser_linkedin_restricted,
                      browser_other_workspace (the member is connected in
                      another workspace), browser_client_investigation (theirs,
                      cause not named). Ours, parked:
                      browser_support_investigation, sync_failed. Also
                      gtm_connection_revoked, gtm_access_lost, account_deleted,
                      subscription_required, browser_stopped.
                  linkedin_has_sn:
                    type: boolean
                    description: >-
                      Whether the LinkedIn account holds a Sales Navigator
                      licence, as gtm-api reports it. Read-only, and mirrored to
                      playtables, where a data source whose link opens in Sales
                      Navigator may only name a sender profile with this set
                      (the save answers 422 sales_nav_required otherwise). false
                      on a sender profile with no LinkedIn account.
                  linkedin_recruiter_status:
                    type: string
                    nullable: true
                    enum:
                      - active
                      - signed_out
                    description: >-
                      Whether the LinkedIn account holds a Recruiter licence and
                      its session is alive: active | signed_out, null = no
                      Recruiter licence. Read-only, and mirrored to playtables,
                      where a Recruiter data source needs active (422
                      recruiter_required on null, recruiter_signed_out on
                      signed_out).
                  linkedin_history_since:
                    type: string
                    nullable: true
                    description: >-
                      The LinkedIn history window; present with null = all
                      history, now = only what arrives from this change on. An
                      earlier day, or null, re-walks the account down to it
                      (history_sync pending); a later day, or now, deletes
                      nothing, only bounds later runs.
                  linkedin_history_scope:
                    type: string
                    enum:
                      - all
                      - playtable_people
                    description: >-
                      The LinkedIn import scope; present with null =
                      playtable_people, the default. Back to all re-walks the
                      account (history_sync pending) so the conversations the
                      people-only scope kept out come in; playtable_people
                      deletes nothing and narrows later runs.
                  email_account_sid:
                    type: string
                    nullable: true
                    description: >-
                      The PRIMARY mailbox (em_ac_…), the one `mailboxes` marks
                      is_primary; null = no mailbox.
                  avatar_url:
                    type: string
                    nullable: true
                    description: >-
                      Display photo (max 2048): the bound LinkedIn account's
                      photo, which the sender profile follows. Taken at the
                      attach, read again when gtm-api reports the account
                      created, restored or through its first sync, and by the
                      nightly sweep; the detach removes it. gtm-api deletes a
                      photo it replaced, so an old URL can be gone.
                  assignee_user_sid:
                    type: string
                    nullable: true
                    description: >-
                      Operator of the sender profile (external user sid,
                      gs.service.id): the default assignee of the tasks its
                      threads spawn; null = unassigned.
                  history_sync:
                    type: object
                    nullable: true
                    properties:
                      status:
                        type: string
                        enum:
                          - pending
                          - running
                          - completed
                          - failed
                        description: >-
                          pending | running | completed | failed. Non-terminal
                          states are polled; sync_sender_profile_history returns
                          the in-flight one instead of starting a second walk.
                      requested_at:
                        type: string
                        description: ISO 8601 UTC, when the walk was asked for.
                      started_at:
                        type: string
                        nullable: true
                      finished_at:
                        type: string
                        nullable: true
                      threads_seen:
                        type: integer
                        minimum: 0
                        description: gtm threads walked, skipped ones included.
                      threads_imported:
                        type: integer
                        minimum: 0
                        description: Local conversations created or grown by the walk.
                      messages_imported:
                        type: integer
                        minimum: 0
                        description: New local message rows.
                      skipped:
                        type: integer
                        minimum: 0
                        description: >-
                          Rows the walk could not map: group threads with no
                          single counterpart, recalled or attachment-only
                          messages, unknown kinds.
                      synced_through:
                        type: string
                        nullable: true
                        description: >-
                          ISO 8601 UTC watermark (the gtm-side updated_at) a
                          delta run resumes from; null after a full walk that
                          never completed.
                      error:
                        type: string
                        nullable: true
                        description: >-
                          Reason token on a failed run: gtm_read_failed |
                          gtm_bridge_unavailable | no_channel_account.
                    required:
                      - status
                      - requested_at
                      - started_at
                      - finished_at
                      - threads_seen
                      - threads_imported
                      - messages_imported
                      - skipped
                      - synced_through
                      - error
                    description: >-
                      State of the account history walk; null = never requested.
                      Written by the backfill job only.
                  mailboxes:
                    type: array
                    nullable: true
                    items:
                      type: object
                      properties:
                        email_account_sid:
                          type: string
                          description: >-
                            The gtm.service.email mailbox this entry mirrors
                            (em_ac_…).
                        address:
                          type: string
                          nullable: true
                          description: >-
                            The mailbox address as gtm holds it; null until the
                            first mirror read.
                        display_name:
                          type: string
                          nullable: true
                          description: >-
                            The From name gtm sends under; null = the account
                            default.
                        provider:
                          type: string
                          nullable: true
                          description: >-
                            google | microsoft | imap_smtp | gtm_hosted; null
                            while unknown.
                        status:
                          type: string
                          description: >-
                            gtm's own words, mirrored by the health webhook and
                            every re-read: active | reconnect_required |
                            disconnected | subscription_required |
                            sending_paused | deleted. gtm keeps a sending pause
                            next to an active status; the mirror reads such a
                            mailbox as sending_paused. Only active is sendable.
                        status_reason:
                          type: string
                          nullable: true
                          description: >-
                            The cause behind a non-active status; null
                            otherwise. On sending_paused it is the pause's
                            cause: manual
                            (pause_sender_profile_mailbox_sending), or a
                            guardrail of gtm's (bounce_rate, complaint_rate,
                            provider_block, warmup_guard), which
                            resume_sender_profile_mailbox_sending lifts only
                            with a reason.
                        is_primary:
                          type: boolean
                          description: >-
                            Exactly one mailbox is primary while any exists: the
                            one the sender profile's email_account_sid points at
                            (the composer default). A detached primary hands the
                            role on.
                        sending_limits:
                          type: object
                          nullable: true
                          properties:
                            daily_limit:
                              type: integer
                            min_interval_seconds:
                              type: integer
                            sending_window:
                              anyOf:
                                - type: object
                                  additionalProperties: {}
                                - type: array
                                  items: {}
                                - {}
                          description: >-
                            Mirrored from gtm: the mailbox's daily cap, its
                            minimum gap between sends and its own window. Edited
                            through update_sender_profile_mailbox.
                        warmup_config:
                          type: object
                          nullable: true
                          properties:
                            enabled:
                              type: boolean
                            ramp_start_daily:
                              type: integer
                            ramp_step_per_day:
                              type: integer
                            target_daily:
                              type: integer
                          description: >-
                            Mirrored from gtm: the warm-up ramp (start volume,
                            daily step, target).
                        signature_html:
                          type: string
                          nullable: true
                          description: HTML signature appended by gtm on send; null = none.
                        bcc:
                          type: array
                          nullable: true
                          items:
                            type: string
                          description: >-
                            The mailbox's standing blind copies. LOCAL to this
                            sender profile (gtm has no bcc on the account); at
                            most 5 addresses.
                        track_opens:
                          type: boolean
                          nullable: true
                        track_clicks:
                          type: boolean
                          nullable: true
                        email_tracking_domain_sid:
                          type: string
                          nullable: true
                          description: >-
                            The gtm tracking domain used for open and click
                            links (em_td_…); null = none.
                        history_since:
                          type: string
                          nullable: true
                          description: >-
                            The mailbox's history window, LOCAL to the sender
                            profile; present with null = all history, now = from
                            this change on. An earlier day, or null, re-walks
                            this mailbox down to it (the people's activity too);
                            a later day, or now, deletes nothing.
                        history_scope:
                          type: string
                          enum:
                            - all
                            - playtable_people
                          description: >-
                            The mailbox's import scope, LOCAL to this sender
                            profile like bcc: all = every thread of the mailbox
                            reaches the inbox, playtable_people = only the
                            threads whose counterpart is a person in one of the
                            workspace's playtables (a thread that exists keeps
                            syncing; a person added to a playtable later brings
                            its threads in); playtable_people is the default.
                            Changed through update_sender_profile_mailbox: back
                            to all re-walks the mailbox.
                        connected_at:
                          type: string
                          nullable: true
                          description: ISO 8601 UTC, when the mailbox was connected on gtm.
                        synced_at:
                          type: string
                          nullable: true
                          description: ISO 8601 UTC, when this mirror last read gtm.
                      required:
                        - email_account_sid
                        - address
                        - display_name
                        - provider
                        - status
                        - status_reason
                        - is_primary
                        - sending_limits
                        - warmup_config
                        - signature_html
                        - bcc
                        - track_opens
                        - track_clicks
                        - email_tracking_domain_sid
                        - history_since
                        - history_scope
                        - connected_at
                        - synced_at
                    description: >-
                      The sender profile's mailboxes, the primary one first in
                      meaning (is_primary); null = none. A sender profile holds
                      several and an email step rotates across the sendable
                      ones.
                  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
                    description: >-
                      Actor that soft-deleted the sender profile; null while
                      live.
                  created_at:
                    type: string
                    description: ISO 8601 UTC.
                  updated_at:
                    type: string
                    description: >-
                      ISO 8601 UTC; bumped by config edits AND by channel state
                      changes, the health-mirror ones included.
                  deleted_at:
                    type: string
                    nullable: true
                    description: ISO 8601 UTC; null = live (mandatory soft delete).
                required:
                  - sid
                  - team_sid
                  - name
                  - created_by
                  - label
                  - linkedin_account_sid
                  - linkedin_source
                  - linkedin_status
                  - linkedin_status_reason
                  - linkedin_has_sn
                  - linkedin_recruiter_status
                  - linkedin_history_since
                  - linkedin_history_scope
                  - email_account_sid
                  - avatar_url
                  - assignee_user_sid
                  - history_sync
                  - mailboxes
                  - deleted_by
                  - created_at
                  - updated_at
                  - deleted_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.
            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
        counts:
          type: object
          properties:
            total_count:
              type: integer
              minimum: 0
              description: >-
                Sender profiles matching the filter (full filter scope, not the
                page).
            groups:
              type: object
              properties:
                linkedin_status:
                  anyOf:
                    - type: object
                      properties:
                        active:
                          type: integer
                          minimum: 0
                        reconnect_required:
                          type: integer
                          minimum: 0
                        stalled:
                          type: integer
                          minimum: 0
                        disconnected:
                          type: integer
                          minimum: 0
                    - type: array
                      items: {}
                  description: >-
                    The team's LinkedIn health snapshot, over the sender
                    profiles that hold a LinkedIn account; an absent key means
                    zero (PHP serialises an empty map as []).
              required:
                - linkedin_status
          required:
            - total_count
            - groups
      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:
                  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.