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

# Read sender profile limits

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

## Request

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

The sender profile's sending limits as gtm-api holds them. result.linkedin is one smart-limit row per outreach action type (daily cap, target, the limit in force today, the pacing delay, today's and the week's counts, the two switches, status and hold_till), read live, never mirrored; empty with no LinkedIn account. result.mailboxes is each mailbox's limits and warm-up off the mirror. Edit with update_sender_profile_linkedin_limit or update_sender_profile_mailbox.

Contract:
- MCP tool `read_sender_profile_limits`, 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_…).

## Response `200`

`action` success envelope.

- ReadSenderProfileLimitsResponse
  - `success` true, required
  - `operation` 'action', required
  - `action` string, required: kebab-case verb; matches the route segment.
  - `item` object, nullable, required
  - `result` object, required
    - `linkedin` object[], required: One row per outreach action type, read live from gtm. Empty on a sender profile with no LinkedIn account.
      - `sid` string, required: The smart-limit row (ln_sm_…): pass it to update_sender_profile_linkedin_limit.
      - `limit_type` string, required: The action the row budgets: send_connection_requests, send_messages, send_inmails, visit_profiles, react_posts, comment_posts, endorse_skills, and the two umbrella buckets networking_general and messaging_general.
      - `daily_limit` integer, nullable, required
      - `target_limit` integer, nullable, required
      - `smart_limit` integer, nullable, required: The cap gtm is actually applying today when smart limits are on.
      - `learned_ceiling` integer, nullable, required: What the learner has worked the account up to.
      - `delay_in_seconds` integer, nullable, required
      - `batch_size` integer, nullable, required
      - `done_today_count` integer, nullable, required
      - `done_7d_count` integer, nullable, required
      - `smart_limits_enabled` boolean, nullable, required: The account's switch, mirrored on every row (gtm keeps one per account).
      - `learning_enabled` boolean, nullable, required
      - `status` string, nullable, required: gtm's own row status, e.g. active or held.
      - `hold_till` string, nullable, required: ISO 8601 UTC: nothing of this type goes out before then. reset_hold lifts it.
      - `linkedin_quota_hit_till` string, nullable, required: ISO 8601 UTC: LinkedIn's own quota refuses until then.
      - `last_reset_at` string, nullable, required
    - `smart_limits_enabled` boolean, nullable, required: gtm's account-wide smart-limits switch (one per account); every row's smart_limits_enabled mirrors it. Flip it with set_sender_profile_linkedin_smart_limits. null on a sender profile with no LinkedIn account, or one gtm's roster does not list.
    - `mailboxes` object[], required: Each mailbox's limits off the sender profile mirror (gtm keeps no per-mailbox counters to show).
      - `email_account_sid` string, required
      - `address` string, nullable, required
      - `status` string, nullable, required
      - `is_primary` boolean, nullable, required
      - `sending_limits` object, nullable, required
      - `warmup_config` object, nullable, required
  - `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)
