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

# Sender profile performance

> How one sender profile's outreach went, day by day in the workspace's timezone: per day the sends by type, the requests accepted, the people who replied, the bounces and the people moved to a positive stage after a reply. The series is 2 x days long, the previous window first, so a rate compares with the period before. Only outreach counts: a person this sender profile reached through a workflow, a reply only after that first touch. The fleet: search_sender_profiles, read_sender_profile_stats.

Contract:
- MCP tool `get_sender_profile_performance`, registry package `mcp.playtables/sender_profiles`, mount `playtables.sources`.
- Operation `action`, response envelope `action`.
- Flags: read only.



## OpenAPI

````yaml /api-reference/playtables/openapi.yaml post /api/sender-profiles/{sid}/performance
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/sender-profiles/{sid}/performance:
    post:
      tags:
        - sender_profiles
      summary: Sender profile performance
      description: >-
        How one sender profile's outreach went, day by day in the workspace's
        timezone: per day the sends by type, the requests accepted, the people
        who replied, the bounces and the people moved to a positive stage after
        a reply. The series is 2 x days long, the previous window first, so a
        rate compares with the period before. Only outreach counts: a person
        this sender profile reached through a workflow, a reply only after that
        first touch. The fleet: search_sender_profiles,
        read_sender_profile_stats.


        Contract:

        - MCP tool `get_sender_profile_performance`, registry package
        `mcp.playtables/sender_profiles`, mount `playtables.sources`.

        - Operation `action`, response envelope `action`.

        - Flags: read only.
      operationId: get_sender_profile_performance
      parameters:
        - name: sid
          in: path
          required: true
          description: >-
            Sender profile sid (ub_sp_…): the unibox sid, the same on the
            playtables copy.
          schema:
            type: string
            minLength: 18
            maxLength: 18
            pattern: ^ub_sp_
            description: >-
              Sender profile sid (ub_sp_…): the unibox sid, the same on the
              playtables copy.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetSenderProfilePerformanceRequest'
      responses:
        '200':
          description: '`action` success envelope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSenderProfilePerformanceResponse'
        4XX:
          $ref: '#/components/responses/McpClientError'
        5XX:
          $ref: '#/components/responses/McpServerError'
components:
  schemas:
    GetSenderProfilePerformanceRequest:
      type: object
      description: Request body of `get_sender_profile_performance`.
      properties:
        days:
          type: integer
          minimum: 1
          maximum: 90
          description: >-
            The window in the workspace's days, today included (the drawer shows
            30 by default; its 24 hours is 1, today). Either this or from + to,
            never both. The series covers twice as many days: this window and
            the one before it, to compare against.
        from:
          type: string
          description: >-
            A custom range instead of `days`: its first day, YYYY-MM-DD in the
            workspace's zone, with `to`.
        to:
          type: string
          description: >-
            The custom range's last day, YYYY-MM-DD, at or after `from` and at
            most 90 days after it; the window before it is as long, for the
            comparison.
    GetSenderProfilePerformanceResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        operation:
          type: string
          enum:
            - action
        action:
          type: string
          description: kebab-case verb; matches the route segment.
        item: {}
        result:
          type: object
          properties:
            sid:
              type: string
              description: The sender profile (ub_sp_…).
            zone:
              type: string
              description: >-
                The IANA timezone the days run in: the workspace's, UTC when
                unset.
            days:
              type: integer
            from:
              type: string
              description: 'The window shown: its first day, YYYY-MM-DD in the zone.'
            to:
              type: string
              description: >-
                The window shown: its last day, YYYY-MM-DD in the zone (today
                for a `days` read).
            caps:
              type: object
              properties:
                invites:
                  type: integer
                  nullable: true
                messages:
                  type: integer
                  nullable: true
                inmails:
                  type: integer
                  nullable: true
                emails:
                  type: integer
                  nullable: true
              required:
                - invites
                - messages
                - inmails
                - emails
              description: >-
                The sender profile's daily limits TODAY (the LinkedIn smart
                limits, the sum of the live mailboxes' limits); null where there
                is none. No history of the limits is kept.
            series:
              type: array
              items:
                type: object
                properties:
                  date:
                    type: string
                    description: The workspace's calendar day, YYYY-MM-DD.
                  invites:
                    type: integer
                    description: >-
                      Connection requests the ledger sent (done tasks, by
                      finished_at).
                  messages:
                    type: integer
                  inmails:
                    type: integer
                  emails:
                    type: integer
                  accepted:
                    type: integer
                    description: >-
                      Connection requests accepted by people this sender profile
                      invited.
                  notes_delivered:
                    type: integer
                    description: >-
                      Of those accepts, the ones that delivered the invite's
                      note as the thread's first message (the accept fact's
                      note_delivered, 2026-09-26): a message of this sender
                      profile that no task sent, counted with `messages` as the
                      base of the messages' reply rate.
                  linkedin_replies:
                    type: integer
                    description: >-
                      People who replied on LinkedIn after this sender profile
                      reached them, each once per window, on the day of their
                      first reply in it.
                  message_replies:
                    type: integer
                    description: >-
                      People who answered a message of this sender profile (a
                      reply at or after its first message to them: the first
                      done message, or the accept that delivered the invite's
                      note, whichever came first), once per window: the
                      messages' reply rate against `messages` +
                      `notes_delivered`. A reply to a note-less invite before
                      any message is in linkedin_replies only.
                  inmail_replies:
                    type: integer
                    description: >-
                      People who answered an InMail of this sender profile
                      (after its first InMail to them), once per window: the
                      InMails' reply rate against `inmails`.
                  email_replies:
                    type: integer
                    description: The same, by email.
                  bounced:
                    type: integer
                    description: >-
                      Emails that bounced, to people this sender profile
                      emailed.
                  linkedin_positive:
                    type: integer
                    description: >-
                      People moved into a positive pipeline stage after a reply
                      to this sender profile, the latest before the move on
                      LinkedIn; once per window, on the day of the move.
                  email_positive:
                    type: integer
                    description: The same, the latest reply by email.
                required:
                  - date
                  - invites
                  - messages
                  - inmails
                  - emails
                  - accepted
                  - notes_delivered
                  - linkedin_replies
                  - message_replies
                  - inmail_replies
                  - email_replies
                  - bounced
                  - linkedin_positive
                  - email_positive
              description: >-
                2 x days days, oldest first, today last: the window before, then
                the window asked for.
            funnel:
              type: object
              properties:
                before:
                  type: object
                  properties:
                    linkedin:
                      type: object
                      properties:
                        reached:
                          type: integer
                          description: >-
                            LinkedIn: people a done invite, message or InMail
                            went to in the window. Email: people emailed in it.
                        engaged:
                          type: integer
                          description: >-
                            LinkedIn: people who accepted in the window, of
                            those the ledger invited. Email: the reached minus
                            the ones whose email bounced in it (delivered).
                        messaged:
                          type: integer
                          description: >-
                            LinkedIn: people a message or an InMail went to in
                            the window, or whose accept delivered the invite's
                            note in it. Email: the delivered (a delivered email
                            is the message).
                        replied:
                          type: integer
                          description: >-
                            People who answered on the channel in the window, at
                            or after the sender profile's first message-class
                            touch of them, whenever that was.
                        positive:
                          type: integer
                          description: >-
                            People moved into a positive pipeline stage in the
                            window after a reply to this sender profile, the
                            latest reply before the move on this channel.
                      required:
                        - reached
                        - engaged
                        - messaged
                        - replied
                        - positive
                    email:
                      type: object
                      properties:
                        reached:
                          type: integer
                          description: >-
                            LinkedIn: people a done invite, message or InMail
                            went to in the window. Email: people emailed in it.
                        engaged:
                          type: integer
                          description: >-
                            LinkedIn: people who accepted in the window, of
                            those the ledger invited. Email: the reached minus
                            the ones whose email bounced in it (delivered).
                        messaged:
                          type: integer
                          description: >-
                            LinkedIn: people a message or an InMail went to in
                            the window, or whose accept delivered the invite's
                            note in it. Email: the delivered (a delivered email
                            is the message).
                        replied:
                          type: integer
                          description: >-
                            People who answered on the channel in the window, at
                            or after the sender profile's first message-class
                            touch of them, whenever that was.
                        positive:
                          type: integer
                          description: >-
                            People moved into a positive pipeline stage in the
                            window after a reply to this sender profile, the
                            latest reply before the move on this channel.
                      required:
                        - reached
                        - engaged
                        - messaged
                        - replied
                        - positive
                  required:
                    - linkedin
                    - email
                shown:
                  type: object
                  properties:
                    linkedin:
                      type: object
                      properties:
                        reached:
                          type: integer
                          description: >-
                            LinkedIn: people a done invite, message or InMail
                            went to in the window. Email: people emailed in it.
                        engaged:
                          type: integer
                          description: >-
                            LinkedIn: people who accepted in the window, of
                            those the ledger invited. Email: the reached minus
                            the ones whose email bounced in it (delivered).
                        messaged:
                          type: integer
                          description: >-
                            LinkedIn: people a message or an InMail went to in
                            the window, or whose accept delivered the invite's
                            note in it. Email: the delivered (a delivered email
                            is the message).
                        replied:
                          type: integer
                          description: >-
                            People who answered on the channel in the window, at
                            or after the sender profile's first message-class
                            touch of them, whenever that was.
                        positive:
                          type: integer
                          description: >-
                            People moved into a positive pipeline stage in the
                            window after a reply to this sender profile, the
                            latest reply before the move on this channel.
                      required:
                        - reached
                        - engaged
                        - messaged
                        - replied
                        - positive
                    email:
                      type: object
                      properties:
                        reached:
                          type: integer
                          description: >-
                            LinkedIn: people a done invite, message or InMail
                            went to in the window. Email: people emailed in it.
                        engaged:
                          type: integer
                          description: >-
                            LinkedIn: people who accepted in the window, of
                            those the ledger invited. Email: the reached minus
                            the ones whose email bounced in it (delivered).
                        messaged:
                          type: integer
                          description: >-
                            LinkedIn: people a message or an InMail went to in
                            the window, or whose accept delivered the invite's
                            note in it. Email: the delivered (a delivered email
                            is the message).
                        replied:
                          type: integer
                          description: >-
                            People who answered on the channel in the window, at
                            or after the sender profile's first message-class
                            touch of them, whenever that was.
                        positive:
                          type: integer
                          description: >-
                            People moved into a positive pipeline stage in the
                            window after a reply to this sender profile, the
                            latest reply before the move on this channel.
                      required:
                        - reached
                        - engaged
                        - messaged
                        - replied
                        - positive
                  required:
                    - linkedin
                    - email
              required:
                - before
                - shown
              description: >-
                The drawer's conversion board (2026-09-26): PEOPLE per stage and
                channel, for the window shown and the one before it, a person
                once per stage per window.
          required:
            - sid
            - zone
            - days
            - from
            - to
            - caps
            - series
            - funnel
        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
        - action
        - item
        - result
        - 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.