---
title: "Sender profile performance"
method: POST
path: "/api/sender-profiles/{sid}/performance"
tags: ["sender_profiles"]
---

# Sender profile performance

`POST /api/sender-profiles/{sid}/performance`

## Request

- Base URL: `https://beta.getsales.io/playtables/v1`
- URL: `https://beta.getsales.io/playtables/v1/api/sender-profiles/{sid}/performance`
- Auth: HTTP bearer and API key in header `Team-SID`

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.

## Path parameters

- `sid` string, required: Sender profile sid (ub_sp_…): the unibox sid, the same on the playtables copy.

## Request body

- GetSenderProfilePerformanceRequest: Request body of `get_sender_profile_performance`.
  - `days` integer: 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` string: A custom range instead of `days`: its first day, YYYY-MM-DD in the workspace's zone, with `to`.
  - `to` string: 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.

## Response `200`

`action` success envelope.

- GetSenderProfilePerformanceResponse
  - `success` true, required
  - `operation` 'action', required
  - `action` string, required: kebab-case verb; matches the route segment.
  - `item` unknown, required
  - `result` object, required
    - `sid` string, required: The sender profile (ub_sp_…).
    - `zone` string, required: The IANA timezone the days run in: the workspace's, UTC when unset.
    - `days` integer, required
    - `from` string, required: The window shown: its first day, YYYY-MM-DD in the zone.
    - `to` string, required: The window shown: its last day, YYYY-MM-DD in the zone (today for a `days` read).
    - `caps` object, required: 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.
      - `invites` integer, nullable, required
      - `messages` integer, nullable, required
      - `inmails` integer, nullable, required
      - `emails` integer, nullable, required
    - `series` object[], required: 2 x days days, oldest first, today last: the window before, then the window asked for.
      - `date` string, required: The workspace's calendar day, YYYY-MM-DD.
      - `invites` integer, required: Connection requests the ledger sent (done tasks, by finished_at).
      - `messages` integer, required
      - `inmails` integer, required
      - `emails` integer, required
      - `accepted` integer, required: Connection requests accepted by people this sender profile invited.
      - `notes_delivered` integer, required: 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` integer, required: 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` integer, required: 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` integer, required: 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` integer, required: The same, by email.
      - `bounced` integer, required: Emails that bounced, to people this sender profile emailed.
      - `linkedin_positive` integer, required: 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` integer, required: The same, the latest reply by email.
    - `funnel` object, required: 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.
      - `before` object, required
        - `linkedin` object, required
          - `reached` integer, required: LinkedIn: people a done invite, message or InMail went to in the window. Email: people emailed in it.
          - `engaged` integer, required: 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` integer, required: 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` integer, required: 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` integer, required: 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.
        - `email` object, required
          - `reached` integer, required: LinkedIn: people a done invite, message or InMail went to in the window. Email: people emailed in it.
          - `engaged` integer, required: 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` integer, required: 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` integer, required: 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` integer, required: 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.
      - `shown` object, required
        - `linkedin` object, required
          - `reached` integer, required: LinkedIn: people a done invite, message or InMail went to in the window. Email: people emailed in it.
          - `engaged` integer, required: 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` integer, required: 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` integer, required: 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` integer, required: 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.
        - `email` object, required
          - `reached` integer, required: LinkedIn: people a done invite, message or InMail went to in the window. Email: people emailed in it.
          - `engaged` integer, required: 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` integer, required: 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` integer, required: 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` integer, required: 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.
  - `meta` object, required
    - `trace_id` string, required: UUID v7; same 128-bit value as the X-Trace-Id header.
    - `span_id` string, required: 16 hex chars, root span of this request.
    - `timestamp` string, required: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
    - `duration_ms` integer, required: Server-side wall clock.
    - `team_sid` string, nullable: 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` string, nullable: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends.

## Other responses

- `4XX`: 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.
- `5XX`: MCP error envelope with `error.code` internal_error or service_unavailable.

---

[API](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-playtables.md) - [All operations](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-playtables/llms.txt) - [OpenAPI document](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-playtables/revisions/aa394506515d?raw)
