---
title: "Update a sender profile LinkedIn limit"
method: PATCH
path: "/api/sender-profiles/{sid}/limits/linkedin/{smartLimitSid}"
tags: ["sender_profiles"]
---

# Update a sender profile LinkedIn limit

`PATCH /api/sender-profiles/{sid}/limits/linkedin/{smartLimitSid}`

## Request

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

Edit one LinkedIn smart-limit row of the sender profile (smart_limit_sid from read_sender_profile_limits): cap, target, pacing delay, learning switch, reset_hold. gtm enforces it at the next send and clamps it to the plan. The switch itself: set_sender_profile_linkedin_smart_limits. Refusals in error.context.reason: 403 gtm_scope_missing, 409 smart_limits_governed, limit_row_gone, gtm_refused, 429 gtm_busy, 503 gtm_unavailable; field rule 422 limit_over_plan_cap, limit_out_of_range.

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

## Path parameters

- `sid` string, required: Sender profile sid (ub_sp_…).
- `smartLimitSid` string, required: The smart-limit row to edit (ln_sm_…), taken from read_sender_profile_limits result.linkedin[].sid. A row belonging to another account is a 404.

## Request body

- UpdateSenderProfileLinkedinLimitRequest: Request body of `update_sender_profile_linkedin_limit`.
  - `daily_limit` integer: Actions a day for this limit type. gtm clamps it to the workspace plan, so the stored value can come back lower.
  - `target_limit` integer, nullable: The volume the learner ramps towards; null = no target.
  - `delay_in_seconds` integer: Pacing: the minimum gap between two actions of this type.
  - `learning_enabled` boolean: Let gtm raise the learned ceiling over time towards target_limit.
  - `reset_hold` boolean: true lifts an active hold (hold_till) in the same write, so the account resumes now instead of waiting it out.

## Response `200`

`action` success envelope.

- UpdateSenderProfileLinkedinLimitResponse
  - `success` true, required
  - `operation` 'action', required
  - `action` string, required: kebab-case verb; matches the route segment.
  - `item` object, nullable, required
  - `result` object, required
    - `limit` object, required: The row as gtm holds it after the write, the plan clamps already applied.
  - `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)
