---
title: "Read sender profile LinkedIn limit history"
method: POST
path: "/api/sender-profiles/{sid}/linkedin/limit-history"
tags: ["sender_profiles"]
---

# Read sender profile LinkedIn limit history

`POST /api/sender-profiles/{sid}/linkedin/limit-history`

## Request

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

The history under the sender profile's LinkedIn limits over the last days, read live from gtm-api. result.periods: from an instant on, the daily limit per action type the account ran under and the warmup score that set it, oldest first. result.quota_hits: every time LinkedIn itself refused an action on a limit, with the action type; the smart limit filling up is not a hit. The day's sends are get_sender_profile_performance's. gtm refusals in error.context.reason.

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

## Path parameters

- `sid` string, required: Sender profile sid (ub_sp_…).

## Request body

- ReadSenderProfileLinkedinLimitHistoryRequest: Request body of `read_sender_profile_linkedin_limit_history`.
  - `days` integer, required: How many days back to read, today included (the LinkedIn tab draws 30).

## Response `200`

`action` success envelope.

- ReadSenderProfileLinkedinLimitHistoryResponse
  - `success` true, required
  - `operation` 'action', required
  - `action` string, required: kebab-case verb; matches the route segment.
  - `item` unknown, required
  - `result` object, required
    - `linkedin_account_sid` string, nullable, required: The sender profile's LinkedIn account (ln_ac_…); null on a sender profile without one, which answers no periods and no hits.
    - `periods` object[], required: The limits the account ran under, oldest first, the first one opening the window. gtm snapshots an account and only then ramps its limits, so a snapshot records the limits of the period before it: each period carries the next snapshot's record, the last one the live rows. An account gtm never snapshotted has one period, from now, with the live limits.
      - `from` string, required: ISO 8601 UTC instant the period starts at, a snapshot gtm took of the account. It runs until the next period starts, the last one until now.
      - `warmup_score` integer, nullable, required: The account's warmup score (0..100) from that snapshot, the one that set the period's limits; null when gtm has not scored the account yet.
      - `daily_limits` object, required: The daily limit per action type the account ran under in the period; null when the account has no row for the type.
        - `send_connection_requests` integer, nullable, required
        - `send_messages` integer, nullable, required
        - `send_inmails` integer, nullable, required
    - `quota_hits` object[], required: Every time LinkedIn itself refused an action on a limit in the window, oldest first. The smart limit filling up is not one: that is the pacing doing its job.
      - `hit_at` string, required: ISO 8601 UTC instant LinkedIn refused the action.
      - `limit_type` string, nullable, required: The action type the refusal counts against (send_connection_requests, send_inmails, …); null when gtm could not attribute it.
      - `reason` string, nullable, required: gtm's reason token: connection_request | inmail | other.
  - `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-unibox.md) - [All operations](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-unibox/llms.txt) - [OpenAPI document](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-unibox/revisions/8f1bc317897f?raw)
