openapi: 3.2.0 info: title: Gtm Linkedin Connection Requests API version: '1.0' contact: name: GTM API url: https://gtm-api.com email: support@gtm-api.com license: name: Proprietary url: https://gtm-api.com/license description: 'Operations tagged linkedin_connection_requests across 2 of this provider''s published API definitions: gtm-api-openapi-openapi.yml, gtm-api-linkedin-openapi.yaml. Each path carries the servers of the definition it was published in.' servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway security: - BearerJwt: [] TeamSid: [] tags: - name: linkedin_connection_requests description: Registry package `mcp.linkedin/linkedin_connection_requests`, served on MCP mount `linkedin.network`. paths: /api/linkedin-connection-requests/check-sent: post: operationId: check_linkedin_connection_request_sent summary: Check whether a LinkedIn connection request went out description: 'Ask what a LinkedIn connection request came to, without sending: by the client_reference it went out under (optionally for one person: profile_id or ln_member_id), or by the activity_log_sid a 409 named. result.outcome: sent (item is the request, or null with reason request_row_pending or caller_confirmed), in_flight, unknown (the answer was lost and the sent invitations have not shown it yet; retry_after, send_decisive_at), or not_sent (no_send_under_key, refused, not_in_invitations, caller_confirmed). Send the same request again only on not_sent, under the same key. result.activity_log_sid is the attempt a person''s word names (confirmed_not_sent / confirmed_sent on the send). An invitation in doubt has the sent invitations read now when the last look is old enough, so a call can take as long as a head read. A key sent to several persons is 422 place_required (context.places). Contract: - MCP tool `check_linkedin_connection_request_sent`, registry package `mcp.linkedin/linkedin_connection_requests`, mount `linkedin.network`. - Operation `action`, response envelope `action`. - Flags: none.' tags: - linkedin_connection_requests requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CheckLinkedinConnectionRequestSentRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/CheckLinkedinConnectionRequestSentResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: check_linkedin_connection_request_sent x-gtm-mcp-mount: linkedin.network x-gtm-entity: linkedin_connection_requests x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: complex servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/linkedin-connection-requests/get-my-latest: post: operationId: get_my_latest_linkedin_connection_requests summary: Get my latest connection requests description: 'Always-fresh head read of pending outbound requests: refresh the newest from LinkedIn in-request (§5.8), then return the last N (sent_at DESC). The first page (cursor null) triggers the refresh; continuation pages read the already-refreshed DB. Account-scoped. Runs through the account''s browser: a stopped or idle one is cold-started first (about 50 s, or 503 browser_starting), which also releases that account''s overdue syncs. Contract: - MCP tool `get_my_latest_linkedin_connection_requests`, registry package `mcp.linkedin/linkedin_connection_requests`, mount `linkedin.network`. - Operation `action`, response envelope `search`. - Flags: paced: a call spends the `self_account_sync` smart-limit bucket of the account it runs on, and calls of one bucket are spaced per account. A short wait is slept by the server; a longer one answers 429 `rate_limited` with `context.retry_after`, and the same call succeeds from that moment. Parallel calls on one account queue behind each other.' tags: - linkedin_connection_requests requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GetMyLatestLinkedinConnectionRequestsRequest' responses: '200': description: '`search` success envelope.' content: application/json: schema: $ref: '#/components/schemas/GetMyLatestLinkedinConnectionRequestsResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: get_my_latest_linkedin_connection_requests x-gtm-mcp-mount: linkedin.network x-gtm-entity: linkedin_connection_requests x-gtm-operation: action x-gtm-envelope: search x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical x-gtm-paced-bucket: self_account_sync servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/linkedin-connection-requests/metrics: post: operationId: get_linkedin_connection_requests_metrics summary: Connection requests metrics description: 'Period-bound aggregates over one account''s sent requests. Requires period {from,to} and filter.linkedin_account_sid (.eq or .in) - that is the ONLY filter axis the aggregation applies, unlike search. Returns avg_note_length_of_accepted and avg_time_to_accept_seconds; acceptance / withdraw / expiry rates are derived client-side from the counts block. Contract: - MCP tool `get_linkedin_connection_requests_metrics`, registry package `mcp.linkedin/linkedin_connection_requests`, mount `linkedin.network`. - Operation `metrics`, response envelope `metrics`. - Flags: read only.' tags: - linkedin_connection_requests requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GetLinkedinConnectionRequestsMetricsRequest' responses: '200': description: '`metrics` success envelope.' content: application/json: schema: $ref: '#/components/schemas/GetLinkedinConnectionRequestsMetricsResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: get_linkedin_connection_requests_metrics x-gtm-mcp-mount: linkedin.network x-gtm-entity: linkedin_connection_requests x-gtm-operation: metrics x-gtm-envelope: metrics x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/linkedin-connection-requests/search: post: operationId: search_linkedin_connection_requests summary: Search connection requests description: 'List outbound LinkedIn connection requests (invitations we sent) with filters, sorting, cursor pagination and filter.q, a LIKE (substring) over the note. Pending rows have removal_kind IS NULL; terminal rows are accepted / withdrawn / expired (deleted_at set). include[] can eager-load linkedin_account. Contract: - MCP tool `search_linkedin_connection_requests`, registry package `mcp.linkedin/linkedin_connection_requests`, mount `linkedin.network`. - Operation `search`, response envelope `search`. - Flags: read only.' tags: - linkedin_connection_requests requestBody: required: false content: application/json: schema: $ref: '#/components/schemas/SearchLinkedinConnectionRequestsRequest' responses: '200': description: '`search` success envelope.' content: application/json: schema: $ref: '#/components/schemas/SearchLinkedinConnectionRequestsResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: search_linkedin_connection_requests x-gtm-mcp-mount: linkedin.network x-gtm-entity: linkedin_connection_requests x-gtm-operation: search x-gtm-envelope: search x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/linkedin-connection-requests/send: post: operationId: send_linkedin_connection_request summary: Send connection request description: 'Send one outbound LinkedIn connection request (outward action). Address the person by profile_id (the URN, ln_id or sn_id) or by public_identifier (slug or /in/ URL). Checks: daily limit, note cap (200 free / 300 premium), 21-day resend cooldown. Fire-on-success: a row only when LinkedIn confirms. Sends once per client_reference and person: a repeat is answered, never sent twice; on a 409 read error.context.send_outcome, never resend under a new key. A request on record under another key or none: 422 resend_not_available, context.cause pending, accepted, cooldown (resend_available_at) or sync_reset; an accepted one is probed on LinkedIn first (context.probe); a person who removed the account, or whom it removed, is invited again. 422 target_blocked: they blocked the account (context.block_log_sid; never retry). 422 target_unavailable: nobody in the team can see their account (retry after context.retry_after). check_linkedin_connection_request_sent asks what an invitation came to without sending. Contract: - MCP tool `send_linkedin_connection_request`, registry package `mcp.linkedin/linkedin_connection_requests`, mount `linkedin.network`. - Operation `action`, response envelope `action`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API; step eligible: gtm.service.orchestration can run this verb as a mass-action plan step, once per item; paced: a call spends the `send_connection_requests` smart-limit bucket of the account it runs on, and calls of one bucket are spaced per account. A short wait is slept by the server; a longer one answers 429 `rate_limited` with `context.retry_after`, and the same call succeeds from that moment. Parallel calls on one account queue behind each other.' tags: - linkedin_connection_requests requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SendLinkedinConnectionRequestRequest' responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/SendLinkedinConnectionRequestResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: send_linkedin_connection_request x-gtm-mcp-mount: linkedin.network x-gtm-entity: linkedin_connection_requests x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: true x-gtm-schedule-required: false x-gtm-tool-class: complex x-gtm-paced-bucket: send_connection_requests servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/linkedin-connection-requests/sync-linkedin-connection-requests: post: operationId: sync_linkedin_connection_requests summary: Sync connection requests description: 'Refresh the outbound sent-invitations snapshot for one account by inserting a sync_run (upsert-only). ASYNC: returns pending refs to poll or await the linkedin-connection-requests.sync-completed webhook. Contract: - MCP tool `sync_linkedin_connection_requests`, registry package `mcp.linkedin/linkedin_connection_requests`, mount `linkedin.network`. - Operation `action`, response envelope `action_async`. - Flags: none.' tags: - linkedin_connection_requests requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SyncLinkedinConnectionRequestsRequest' responses: '200': description: '`action_async` success envelope.' content: application/json: schema: $ref: '#/components/schemas/SyncLinkedinConnectionRequestsResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: sync_linkedin_connection_requests x-gtm-mcp-mount: linkedin.network x-gtm-entity: linkedin_connection_requests x-gtm-operation: action x-gtm-envelope: action_async x-gtm-availability: ga x-gtm-dangerous: false x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway /api/linkedin-connection-requests/{sid}/withdraw: post: operationId: withdraw_linkedin_connection_request summary: Withdraw connection request description: 'Withdraw a pending outbound connection request (outward, destructive). Dispatches the withdraw-invitation browser verb (networking_general bucket); on terminal success the row is soft-deleted (removal_kind=withdrawn) and a 21-day resend cooldown begins. Identify the request by its ln_cr_ sid. Contract: - MCP tool `withdraw_linkedin_connection_request`, registry package `mcp.linkedin/linkedin_connection_requests`, mount `linkedin.network`. - Operation `action`, response envelope `action`. - Flags: dangerous: the MCP layer gates it behind a preview/commit token, and the effect cannot be undone through this API; paced: a call spends the `networking_general` smart-limit bucket of the account it runs on, and calls of one bucket are spaced per account. A short wait is slept by the server; a longer one answers 429 `rate_limited` with `context.retry_after`, and the same call succeeds from that moment. Parallel calls on one account queue behind each other.' tags: - linkedin_connection_requests parameters: - name: sid in: path required: true description: LinkedIn connection-request sid (ln_cr_…). schema: type: string minLength: 18 maxLength: 18 pattern: ^ln_cr_ description: LinkedIn connection-request sid (ln_cr_…). responses: '200': description: '`action` success envelope.' content: application/json: schema: $ref: '#/components/schemas/WithdrawLinkedinConnectionRequestResponse' 4XX: $ref: '#/components/responses/McpClientError' 5XX: $ref: '#/components/responses/McpServerError' x-gtm-mcp-tool: withdraw_linkedin_connection_request x-gtm-mcp-mount: linkedin.network x-gtm-entity: linkedin_connection_requests x-gtm-operation: action x-gtm-envelope: action x-gtm-availability: ga x-gtm-dangerous: true x-gtm-mass-action: false x-gtm-step-eligible: false x-gtm-schedule-required: false x-gtm-tool-class: typical x-gtm-paced-bucket: networking_general servers: - url: https://app.gtm-api.com/linkedin/v4 description: Production, through the app.gtm-api.com gateway components: schemas: SendLinkedinConnectionRequestRequest: type: object description: Request body of `send_linkedin_connection_request`. properties: linkedin_account_sid: type: string minLength: 18 maxLength: 18 pattern: ^ln_ac_ description: LinkedIn account sid (ln_ac_…) of the sending account. profile_id: type: string maxLength: 128 description: 'Target URN: ln_id (ACoAA…) OR sn_id (ACwAA…); both accepted as profile_id. Exactly one of profile_id / public_identifier.' public_identifier: type: string maxLength: 2048 description: 'The person''s vanity slug (jane-doe) or their linkedin.com/in/ URL, when that is all you have (a signup, a CRM). Resolved server-side to the URN: the team''s own rows first (connections, invitations, followers), then the corpus, then a lite-profile read on the sender (spends enrichment, one extra browser call, cached afterwards). Exactly one of profile_id / public_identifier.' note: type: - string - 'null' maxLength: 300 description: 'Invitation note; server caps at 200 chars when the sender is not premium. Over the cap it is 422 unless allow_no_note_fallback is set. Sent verbatim: the platform renders no merge fields, a {{first_name}} goes out as those braces.' allow_no_note_fallback: type: boolean description: 'Default false. When the note is longer than the sender''s cap (200 free / 300 premium), send the invite WITHOUT it instead of refusing 422, for campaigns where reaching the person beats personalizing. The response says which happened in result.note_fallback_used, and the stored row carries note=null, so a follow-up does not assume a note the prospect never saw. Scope, stated plainly: this covers the length cap, which the server evaluates itself. LinkedIn''s own monthly with-note quota is only visible at send time and arrives untyped, so a refusal there still fails the call rather than being retried blind (a retry after an ambiguous send can invite the person twice).' client_reference: type: - string - 'null' maxLength: 255 description: 'Your key for this ONE invitation (max 255, byte for byte): one key per invitation, the same key on every repeat of it. The key and the person (the member the URN decodes to) are one invitation whatever its note says, and a repeat never goes out twice: it answers 200 with the request the first send stored (result.idempotent_replay, result.content_differs when this note differs) or 409 naming error.context.send_outcome (in_flight, unknown with retry_after and send_decisive_at, or sent; not_sent with blocking_activity_log_sid when another invitation to the person is on its way or in doubt). Without a key the same note to the same person counts as a repeat for an hour after it went out. Stored on the row and searchable; check_linkedin_connection_request_sent asks by it.' confirmed_not_sent: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^ln_al_ description: 'A person''s word that an earlier attempt of THIS invitation is not on LinkedIn: its activity_log_sid (ln_al_...), from the 409 or check_linkedin_connection_request_sent, given only after someone looked at the account''s sent invitations. Taken once the attempt can no longer land (before that: 409 send_outcome_unknown, waiting_for may_still_land, retry_after and send_decisive_at that moment): it settles that attempt not_sent and this request goes out. Moot when the attempt is no longer in doubt; another invitation''s sid is 422 not_this_message.' confirmed_sent: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^ln_al_ description: 'A person''s word that an earlier attempt of THIS invitation IS on LinkedIn: its activity_log_sid, as for confirmed_not_sent (never both). Taken at once; it settles the attempt sent and sends nothing: the answer is 409 concurrent_send_in_flight with send_outcome sent, or 200 with the request once it is stored. Another invitation''s sid is 422 not_this_message; an attempt already proved not sent is 409 confirmed_sent_contradicts.' required: - linkedin_account_sid 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 - 'null' 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 - 'null' 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 - 'null' 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 GetLinkedinConnectionRequestsMetricsResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - metrics metrics: type: object properties: filter: type: object additionalProperties: {} period: type: object properties: from: type: string to: type: string required: - from - to aggregated: type: object properties: counts: type: object additionalProperties: {} metrics: type: object properties: avg_note_length_of_accepted: type: - number - 'null' avg_time_to_accept_seconds: type: - number - 'null' required: - avg_note_length_of_accepted - avg_time_to_accept_seconds metrics: type: object properties: avg_note_length_of_accepted: type: - number - 'null' avg_time_to_accept_seconds: type: - number - 'null' required: - avg_note_length_of_accepted - avg_time_to_accept_seconds applied_filters: type: object additionalProperties: {} 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 - 'null' 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 - 'null' 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 - metrics - meta GetMyLatestLinkedinConnectionRequestsRequest: type: object description: Request body of `get_my_latest_linkedin_connection_requests`. properties: linkedin_account_sid: type: string minLength: 18 maxLength: 18 pattern: ^ln_ac_ description: LinkedIn account sid (ln_ac_…) of the sending account. page_size: type: integer minimum: 1 maximum: 100 description: Freshest rows to return / refresh coverage target (1..100, default 50). cursor: type: - string - 'null' description: Opaque forward cursor; the LinkedIn-side refresh runs only on the first page (cursor null). required: - linkedin_account_sid SearchLinkedinConnectionRequestsResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - search items: type: array items: type: object properties: item: type: object properties: sid: type: string team_sid: type: string linkedin_account_sid: type: string ln_member_id: type: string ln_id: type: - string - 'null' sn_id: type: - string - 'null' nickname: type: - string - 'null' note: type: - string - 'null' client_reference: type: - string - 'null' sent_at: type: - string - 'null' invitation_id: type: - string - 'null' resend_available_at: type: - string - 'null' last_check_at: type: - string - 'null' removal_kind: type: - string - 'null' enum: - accepted - withdrawn - expired created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - ln_member_id - ln_id - sn_id - nickname - note - client_reference - sent_at - invitation_id - resend_available_at - last_check_at - removal_kind - created_at - updated_at - deleted_at included: type: object additionalProperties: {} required: - item - included pagination: type: object properties: next_cursor: type: - string - 'null' has_more: type: boolean total_count: type: - integer - 'null' required: - next_cursor - has_more - total_count applied_filters: type: object additionalProperties: {} includes: type: array items: type: string 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 - 'null' 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 - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms counts: type: object additionalProperties: {} required: - success - operation - items - pagination - applied_filters - includes - meta SendLinkedinConnectionRequestResponse: 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: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: string ln_member_id: type: string ln_id: type: - string - 'null' sn_id: type: - string - 'null' nickname: type: - string - 'null' note: type: - string - 'null' client_reference: type: - string - 'null' sent_at: type: - string - 'null' invitation_id: type: - string - 'null' resend_available_at: type: - string - 'null' last_check_at: type: - string - 'null' removal_kind: type: - string - 'null' enum: - accepted - withdrawn - expired created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - ln_member_id - ln_id - sn_id - nickname - note - client_reference - sent_at - invitation_id - resend_available_at - last_check_at - removal_kind - created_at - updated_at - deleted_at result: type: object additionalProperties: {} 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 - 'null' 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 - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms pacing: type: object properties: linkedin_account_sid: type: string description: The account whose bucket the call spent. limit_type: type: string description: The smart-limit bucket the call spent, e.g. send_messages. next_call_after: type: string description: 'ISO 8601, the same form as retry_after: the moment this same call goes through again without waiting. The next pacing slot while the day has budget left, the daily reset when it has none, the end of a LinkedIn lock while one stands.' remaining_today: type: integer minimum: 0 description: daily_limit minus done_today_count of that bucket, after this call. required: - linkedin_account_sid - limit_type - next_call_after - remaining_today required: - success - operation - action - item - result - meta GetLinkedinConnectionRequestsMetricsRequest: type: object description: Request body of `get_linkedin_connection_requests_metrics`. properties: filter: type: object properties: linkedin_account_sid: type: object properties: eq: type: string in: type: array items: type: string additionalProperties: false period: type: object properties: from: type: string description: ISO 8601 UTC window start (inclusive). to: type: string description: ISO 8601 UTC window end (exclusive); must be after from. required: - from - to description: Required metrics window [from, to). required: - period SyncLinkedinConnectionRequestsRequest: type: object description: Request body of `sync_linkedin_connection_requests`. properties: linkedin_account_sid: type: string minLength: 18 maxLength: 18 pattern: ^ln_ac_ description: LinkedIn account sid (ln_ac_…) of the sending account. required: - linkedin_account_sid SearchLinkedinConnectionRequestsRequest: type: object description: Request body of `search_linkedin_connection_requests`. properties: filter: type: object properties: sid: type: object properties: eq: type: string in: type: array items: type: string additionalProperties: false linkedin_account_sid: type: object properties: eq: type: string in: type: array items: type: string additionalProperties: false ln_id: type: object properties: eq: type: string in: type: array items: type: string additionalProperties: false ln_member_id: type: object properties: eq: type: string ne: type: string in: type: array items: type: string nin: type: array items: type: string is_null: type: boolean additionalProperties: false sn_id: type: object properties: eq: type: string in: type: array items: type: string additionalProperties: false nickname: type: object properties: eq: type: string in: type: array items: type: string is_null: type: boolean additionalProperties: false client_reference: type: object properties: eq: type: string ne: type: string in: type: array items: type: string nin: type: array items: type: string is_null: type: boolean additionalProperties: false description: The key the caller gave at send time; exact match, is_null:true = sends made without one. removal_kind: type: object properties: eq: type: string enum: - accepted - withdrawn - expired ne: type: string enum: - accepted - withdrawn - expired in: type: array items: type: string enum: - accepted - withdrawn - expired nin: type: array items: type: string enum: - accepted - withdrawn - expired is_null: type: boolean additionalProperties: false description: is_null:true = pending; eq to split accepted / withdrawn / expired. sent_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string is_null: type: boolean additionalProperties: false resend_available_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string is_null: type: boolean additionalProperties: false created_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string additionalProperties: false updated_at: type: object properties: gte: type: string lte: type: string gt: type: string lt: type: string additionalProperties: false deleted_at: type: object properties: gte: type: string lte: type: string is_null: type: boolean additionalProperties: false description: 'Default scope is { is_null: true } (pending rows).' include: type: array items: type: string enum: - linkedin_account description: Relations to eager-load (see entity Includes). sort: type: object properties: field: type: string enum: - sent_at - resend_available_at - deleted_at - created_at direction: type: string enum: - asc - desc description: Default desc. required: - field page_size: type: integer minimum: 0 maximum: 200 description: 0..200, default 50. page_size=0 = count-only, page_size=1 = getFirst. cursor: type: - string - 'null' description: Opaque forward cursor from a previous response pagination.next_cursor. CheckLinkedinConnectionRequestSentResponse: 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: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: string ln_member_id: type: string ln_id: type: - string - 'null' sn_id: type: - string - 'null' nickname: type: - string - 'null' note: type: - string - 'null' client_reference: type: - string - 'null' sent_at: type: - string - 'null' invitation_id: type: - string - 'null' resend_available_at: type: - string - 'null' last_check_at: type: - string - 'null' removal_kind: type: - string - 'null' enum: - accepted - withdrawn - expired created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - ln_member_id - ln_id - sn_id - nickname - note - client_reference - sent_at - invitation_id - resend_available_at - last_check_at - removal_kind - created_at - updated_at - deleted_at result: type: object properties: outcome: type: string description: sent | not_sent | in_flight | unknown. Send the same request again only on not_sent; on in_flight or unknown ask again after retry_after. reason: type: - string - 'null' description: 'Why. sent: null (item is the request), request_row_pending (it went out, its row comes later), caller_confirmed (a person said so; no row). not_sent: no_send_under_key, refused, not_in_invitations, caller_confirmed. unknown: answer_lost, may_still_land, unreadable, unexplained.' retry_after: type: string description: 'ISO 8601: for an invitation in doubt, when the sent invitations are read next.' activity_log_sid: type: string description: 'The attempt the answer is about (in flight, in doubt or landed): what confirmed_not_sent / confirmed_sent name on send_linkedin_connection_request.' send_decisive_at: type: string description: 'ISO 8601: the moment an invitation in doubt can no longer land; a person''s confirmed_not_sent is taken from then on.' required: - outcome - reason 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 - 'null' 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 - 'null' 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 GetMyLatestLinkedinConnectionRequestsResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - search items: type: array items: type: object properties: item: type: object properties: sid: type: string team_sid: type: string linkedin_account_sid: type: string ln_member_id: type: string ln_id: type: - string - 'null' sn_id: type: - string - 'null' nickname: type: - string - 'null' note: type: - string - 'null' client_reference: type: - string - 'null' sent_at: type: - string - 'null' invitation_id: type: - string - 'null' resend_available_at: type: - string - 'null' last_check_at: type: - string - 'null' removal_kind: type: - string - 'null' enum: - accepted - withdrawn - expired created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - ln_member_id - ln_id - sn_id - nickname - note - client_reference - sent_at - invitation_id - resend_available_at - last_check_at - removal_kind - created_at - updated_at - deleted_at included: type: object additionalProperties: {} required: - item - included pagination: type: object properties: next_cursor: type: - string - 'null' has_more: type: boolean total_count: type: - integer - 'null' required: - next_cursor - has_more - total_count applied_filters: type: object additionalProperties: {} includes: type: array items: type: string 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 - 'null' 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 - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms counts: type: object additionalProperties: {} pacing: type: object properties: linkedin_account_sid: type: string description: The account whose bucket the call spent. limit_type: type: string description: The smart-limit bucket the call spent, e.g. send_messages. next_call_after: type: string description: 'ISO 8601, the same form as retry_after: the moment this same call goes through again without waiting. The next pacing slot while the day has budget left, the daily reset when it has none, the end of a LinkedIn lock while one stands.' remaining_today: type: integer minimum: 0 description: daily_limit minus done_today_count of that bucket, after this call. required: - linkedin_account_sid - limit_type - next_call_after - remaining_today required: - success - operation - items - pagination - applied_filters - includes - meta SyncLinkedinConnectionRequestsResponse: type: object properties: success: type: boolean enum: - true operation: type: string enum: - action action: type: string async: type: boolean enum: - true item: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: string ln_member_id: type: string ln_id: type: - string - 'null' sn_id: type: - string - 'null' nickname: type: - string - 'null' note: type: - string - 'null' client_reference: type: - string - 'null' sent_at: type: - string - 'null' invitation_id: type: - string - 'null' resend_available_at: type: - string - 'null' last_check_at: type: - string - 'null' removal_kind: type: - string - 'null' enum: - accepted - withdrawn - expired created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - ln_member_id - ln_id - sn_id - nickname - note - client_reference - sent_at - invitation_id - resend_available_at - last_check_at - removal_kind - created_at - updated_at - deleted_at pending: type: array items: type: object properties: activity_log_sid: type: string expected_completion_seconds: type: integer minimum: 0 webhook_events: type: array items: type: string required: - expected_completion_seconds - webhook_events result: type: object additionalProperties: {} 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 - 'null' 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 - 'null' 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 - async - item - pending - result - meta WithdrawLinkedinConnectionRequestResponse: 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: type: - object - 'null' properties: sid: type: string team_sid: type: string linkedin_account_sid: type: string ln_member_id: type: string ln_id: type: - string - 'null' sn_id: type: - string - 'null' nickname: type: - string - 'null' note: type: - string - 'null' client_reference: type: - string - 'null' sent_at: type: - string - 'null' invitation_id: type: - string - 'null' resend_available_at: type: - string - 'null' last_check_at: type: - string - 'null' removal_kind: type: - string - 'null' enum: - accepted - withdrawn - expired created_at: type: string updated_at: type: string deleted_at: type: - string - 'null' required: - sid - team_sid - linkedin_account_sid - ln_member_id - ln_id - sn_id - nickname - note - client_reference - sent_at - invitation_id - resend_available_at - last_check_at - removal_kind - created_at - updated_at - deleted_at result: type: object additionalProperties: {} 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 - 'null' 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 - 'null' description: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends. required: - trace_id - span_id - timestamp - duration_ms pacing: type: object properties: linkedin_account_sid: type: string description: The account whose bucket the call spent. limit_type: type: string description: The smart-limit bucket the call spent, e.g. send_messages. next_call_after: type: string description: 'ISO 8601, the same form as retry_after: the moment this same call goes through again without waiting. The next pacing slot while the day has budget left, the daily reset when it has none, the end of a LinkedIn lock while one stands.' remaining_today: type: integer minimum: 0 description: daily_limit minus done_today_count of that bucket, after this call. required: - linkedin_account_sid - limit_type - next_call_after - remaining_today required: - success - operation - action - item - result - meta CheckLinkedinConnectionRequestSentRequest: type: object description: Request body of `check_linkedin_connection_request_sent`. properties: linkedin_account_sid: type: string minLength: 18 maxLength: 18 pattern: ^ln_ac_ description: The account that sent (ln_ac_…). A key is looked up on this account only. client_reference: type: - string - 'null' minLength: 1 maxLength: 255 description: 'The key the invitation went out under, byte for byte. Exactly one of client_reference / activity_log_sid. Found at any age: an invitation in doubt never ages out of its key.' activity_log_sid: type: - string - 'null' minLength: 18 maxLength: 18 pattern: ^ln_al_ description: The attempt a 409 or an earlier check named (ln_al_…); it takes no person. An attempt of another account, or one that is no invitation, is 404. profile_id: type: - string - 'null' maxLength: 128 description: 'The person, next to client_reference: the URN the send was given (ln_id ACoAA… or sn_id ACwAA…). At most one of profile_id / ln_member_id.' ln_member_id: type: - string - 'null' maxLength: 64 description: 'The person, next to client_reference: their member id (digits).' required: - linkedin_account_sid responses: McpServerError: description: MCP error envelope with `error.code` internal_error or service_unavailable. content: application/json: schema: $ref: '#/components/schemas/McpError' 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' securitySchemes: BearerJwt: type: http scheme: bearer bearerFormat: JWT description: Access token issued by gtm.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. x-refined-from: - gtm-api-openapi-openapi.yml - gtm-api-linkedin-openapi.yaml