{"openapi":"3.1.0","info":{"title":"MCP Reach","description":"## MCP Reach API overview\n\nThis API lets you manage LinkedIn accounts connected to MCP Reach and query account activity.\nThe documented endpoints cover:\n\n- listing and deleting LinkedIn accounts\n- reading and updating account quotas\n- reading request logs and aggregated request-log statistics\n- querying LinkedIn `/me` through the account proxy\n\n## API documentation\n\nInteractive reference (Scalar): **`/scalar`** (alias: `/api/scalar`). Swagger UI: `/docs`. ReDoc: `/redoc`.\n\n## Authentication\n\n1. Open the MCP Reach frontend.\n2. Go to **API Keys** and create/retrieve your API key.\n3. Send this key in every request header:\n\n   `X-API-Key: <your_api_key>`\n\nRequests without a valid `X-API-Key` are rejected.\n\n## Errors\n\nEvery error response carries `detail` (unchanged, for existing clients) and an `error` object built for agents: `code` (stable identifier such as `daily_quota_reached`), `message`, `status`, `safe_to_retry` (whether the same call can succeed if repeated), `retry_at` (ISO 8601, when it can) and `remediation` (what to do instead). Act on `code`, never on the wording of `message`.\n\n## Idempotency\n\nSend an `Idempotency-Key` header (any string up to 200 characters, a UUID is fine) on any POST/PATCH/DELETE under `/api/linkedin/`. Repeating the request with the same key returns the stored response with `Idempotent-Replayed: true` and does nothing on LinkedIn; the same key with a different body is refused with `409 idempotency_key_reused`. Only successful responses are kept; keys expire after 24 hours.\n\n## Webhooks\n\nRegister an endpoint under `/api/webhooks/endpoints` to be called when a conversation gets a new message, the account gains a new connection, an account changes connection state, or a daily quota is close to or at its limit (`GET /api/webhooks/events` lists the types). Deliveries are signed: `Reach-Signature: t=<unix>,v1=<hex HMAC-SHA256(secret, '<t>.<body>')>`, retried for about 15 hours, and replayable from the dashboard or the API.","version":"0.1.0"},"paths":{"/api/linkedin-accounts":{"get":{"tags":["linkedin-accounts"],"summary":"List LinkedIn accounts","description":"Return all LinkedIn accounts owned by the authenticated user. When called through an API key with account restrictions, only allowed accounts are returned.","operationId":"list_accounts_api_linkedin_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LinkedInAccountOut"},"type":"array","title":"Response List Accounts Api Linkedin Accounts Get"}}}}},"security":[{"XApiKeyAuth":[]}]}},"/api/linkedin-accounts/{account_id}":{"delete":{"tags":["linkedin-accounts"],"summary":"Delete a LinkedIn account","description":"Permanently delete a LinkedIn account. Related invitation references are cleared before deletion to preserve FK integrity.","operationId":"delete_account_api_linkedin_accounts__account_id__delete","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin-accounts/{account_id}/quotas":{"get":{"tags":["linkedin-accounts"],"summary":"Get account quotas","description":"Return current quotas configuration and usage counters for the specified LinkedIn account.","operationId":"get_quotas_api_linkedin_accounts__account_id__quotas_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotasOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["linkedin-accounts"],"summary":"Update account quotas","description":"Update one or more quota configuration fields for the specified LinkedIn account. Only provided fields are updated.","operationId":"update_quotas_api_linkedin_accounts__account_id__quotas_patch","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotasUpdateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotasOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin-accounts/{account_id}/logs":{"get":{"tags":["linkedin-accounts"],"summary":"Get request logs","description":"Return request logs for the specified LinkedIn account. Supports filtering by request type and pagination.","operationId":"get_request_logs_api_linkedin_accounts__account_id__logs_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"request_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional request type filter.","title":"Request Type"},"description":"Optional request type filter."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"description":"Maximum number of log entries to return.","default":50,"title":"Limit"},"description":"Maximum number of log entries to return."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of log entries to skip.","default":0,"title":"Offset"},"description":"Number of log entries to skip."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RequestLogOut"},"title":"Response Get Request Logs Api Linkedin Accounts  Account Id  Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin-accounts/{account_id}/logs/stats":{"get":{"tags":["linkedin-accounts"],"summary":"Get request logs statistics","description":"Return aggregated request-log counts for the specified LinkedIn account. Data can be grouped by day, week, or month, and filtered by request type and date range.","operationId":"get_request_logs_stats_api_linkedin_accounts__account_id__logs_stats_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"group_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(day|week|month)$","description":"Aggregation granularity.","default":"day","title":"Group By"},"description":"Aggregation granularity."},{"name":"request_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional request type filter.","title":"Request Type"},"description":"Optional request type filter."},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter start timestamp (inclusive, UTC).","title":"Start Date"},"description":"Filter start timestamp (inclusive, UTC)."},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter end timestamp (inclusive, UTC).","title":"End Date"},"description":"Filter end timestamp (inclusive, UTC)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogStatsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/events":{"get":{"tags":["webhooks"],"summary":"Event types Reach can send","operationId":"list_event_types_api_webhooks_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Event Types Api Webhooks Events Get"}}}}},"security":[{"XApiKeyAuth":[]}]}},"/api/webhooks/endpoints":{"get":{"tags":["webhooks"],"summary":"List webhook endpoints","operationId":"list_endpoints_api_webhooks_endpoints_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Endpoints Api Webhooks Endpoints Get"}}}}},"security":[{"XApiKeyAuth":[]}]},"post":{"tags":["webhooks"],"summary":"Create a webhook endpoint (returns the secret once)","operationId":"create_endpoint_api_webhooks_endpoints_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreateIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Endpoint Api Webhooks Endpoints Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"XApiKeyAuth":[]}]}},"/api/webhooks/endpoints/{endpoint_id}":{"patch":{"tags":["webhooks"],"summary":"Update url, events, accounts or active state","operationId":"update_endpoint_api_webhooks_endpoints__endpoint_id__patch","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"integer","title":"Endpoint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointUpdateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Endpoint Api Webhooks Endpoints  Endpoint Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["webhooks"],"summary":"Delete a webhook endpoint","operationId":"delete_endpoint_api_webhooks_endpoints__endpoint_id__delete","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"integer","title":"Endpoint Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/endpoints/{endpoint_id}/secret":{"get":{"tags":["webhooks"],"summary":"Reveal the signing secret","operationId":"reveal_secret_api_webhooks_endpoints__endpoint_id__secret_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"integer","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reveal Secret Api Webhooks Endpoints  Endpoint Id  Secret Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/endpoints/{endpoint_id}/rotate-secret":{"post":{"tags":["webhooks"],"summary":"Replace the signing secret","operationId":"rotate_secret_api_webhooks_endpoints__endpoint_id__rotate_secret_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"integer","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rotate Secret Api Webhooks Endpoints  Endpoint Id  Rotate Secret Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/endpoints/{endpoint_id}/test":{"post":{"tags":["webhooks"],"summary":"Send a signed ping now","operationId":"test_endpoint_api_webhooks_endpoints__endpoint_id__test_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"integer","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Endpoint Api Webhooks Endpoints  Endpoint Id  Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/endpoints/{endpoint_id}/deliveries":{"get":{"tags":["webhooks"],"summary":"Recent deliveries to this endpoint","operationId":"list_deliveries_api_webhooks_endpoints__endpoint_id__deliveries_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"integer","title":"Endpoint Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Deliveries Api Webhooks Endpoints  Endpoint Id  Deliveries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/deliveries/{delivery_id}/replay":{"post":{"tags":["webhooks"],"summary":"Send this event again, now","operationId":"replay_delivery_api_webhooks_deliveries__delivery_id__replay_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"delivery_id","in":"path","required":true,"schema":{"type":"integer","title":"Delivery Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Replay Delivery Api Webhooks Deliveries  Delivery Id  Replay Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/me":{"get":{"tags":["LinkedIn – Account"],"summary":"LinkedIn proxy: get /me","description":"Calls Voyager /me with stored cookies/proxy, then returns normalized profile fields (same shape as Kanbox syncs onto the account), not the raw LinkedIn JSON.","operationId":"linkedin_me_api_linkedin__account_id__me_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInMeProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/connections":{"get":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: list connections (paged)","description":"Fetches Voyager ``relationships/dash/connections`` with the same query as Kanbox ``sync_connections_linkedin`` and returns normalized rows (same fields as ``sync_connections``).","operationId":"linkedin_connections_api_linkedin__account_id__connections_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Paging offset (Kanbox ``start``).","default":0,"title":"Start"},"description":"Paging offset (Kanbox ``start``)."},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size (max 100 per request).","default":100,"title":"Count"},"description":"Page size (max 100 per request)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInConnectionsPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/conversations":{"get":{"tags":["LinkedIn – Inbox"],"summary":"LinkedIn proxy: list messenger conversations (paged)","description":"Uses the same Voyager Messaging GraphQL calls as Kanbox (``sync_conversations``, ``sync_archived_conversations``, unread search) and returns rows shaped like ``sync_linkedin_conversations_new_format``.","operationId":"linkedin_conversations_api_linkedin__account_id__conversations_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean","description":"Archived folder (``category:ARCHIVE`` when not using unread search).","default":false,"title":"Archived"},"description":"Archived folder (``category:ARCHIVE`` when not using unread search)."},{"name":"unread","in":"query","required":false,"schema":{"type":"boolean","description":"Only unread threads (search query with ``read:false``).","default":false,"title":"Unread"},"description":"Only unread threads (search query with ``read:false``)."},{"name":"starred","in":"query","required":false,"schema":{"type":"boolean","description":"Starred only: ``category:STARRED`` for primary inbox; combined with archived/unread, results are filtered to ``STARRED`` in ``categories``.","default":false,"title":"Starred"},"description":"Starred only: ``category:STARRED`` for primary inbox; combined with archived/unread, results are filtered to ``STARRED`` in ``categories``."},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Page size (Kanbox uses 25).","default":25,"title":"Count"},"description":"Page size (Kanbox uses 25)."},{"name":"next_cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor from the previous response for the same filters.","title":"Next Cursor"},"description":"Cursor from the previous response for the same filters."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInMessengerConversationsPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/conversations/{conversation_linkedin_id}/messages":{"get":{"tags":["LinkedIn – Inbox"],"summary":"LinkedIn proxy: list messages in a conversation","description":"Calls Voyager ``GET /messaging/conversations/{id}/events`` as in Kanbox ``get_conversation_messages``, with optional ``created_before`` paging (same cursor as Kanbox public API).","operationId":"linkedin_conversation_messages_api_linkedin__account_id__conversations__conversation_linkedin_id__messages_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"conversation_linkedin_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Linkedin Id"}},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Unix ms (string) of the oldest message from the previous page — fetches older events.","title":"Created Before"},"description":"Unix ms (string) of the oldest message from the previous page — fetches older events."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInConversationMessagesPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/messages":{"post":{"tags":["LinkedIn – Inbox"],"summary":"LinkedIn proxy: send a message","description":"POST ``voyagerMessagingDashMessengerMessages?action=createMessage`` as in Kanbox ``send_message``: either ``conversation_linkedin_id`` (existing thread) or ``recipient_linkedin_id`` (DM to member), optionally ``in_mail_premium`` for new InMail-style payloads.","operationId":"linkedin_send_message_api_linkedin__account_id__messages_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInSendMessageIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/conversations/{conversation_linkedin_id}/star":{"post":{"tags":["LinkedIn – Inbox"],"summary":"LinkedIn proxy: star or unstar a conversation","description":"Stars or unstars a LinkedIn conversation.\n\nSet ``star=false`` to remove the star (unstar).\n\nCalls ``voyagerMessagingDashMessengerConversations?action=addCategory`` (star) or ``?action=removeCategory`` (unstar) with category ``STARRED``.","operationId":"linkedin_star_conversation_api_linkedin__account_id__conversations__conversation_linkedin_id__star_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"conversation_linkedin_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Linkedin Id"}},{"name":"star","in":"query","required":false,"schema":{"type":"boolean","description":"True to star, False to unstar.","default":true,"title":"Star"},"description":"True to star, False to unstar."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/conversations/{conversation_linkedin_id}/archive":{"post":{"tags":["LinkedIn – Inbox"],"summary":"LinkedIn proxy: archive or unarchive a conversation","description":"Archives or unarchives a LinkedIn conversation.\n\nSet ``archive=false`` to unarchive.\n\nCalls ``PATCH /voyager/api/messaging/conversations/{id}`` with ``{\\\"patch\\\": {\\\"$set\\\": {\\\"archived\\\": true/false}}}``.","operationId":"linkedin_archive_conversation_api_linkedin__account_id__conversations__conversation_linkedin_id__archive_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"conversation_linkedin_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Linkedin Id"}},{"name":"archive","in":"query","required":false,"schema":{"type":"boolean","description":"True to archive, False to unarchive.","default":true,"title":"Archive"},"description":"True to archive, False to unarchive."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/react-message":{"post":{"tags":["LinkedIn – Inbox"],"summary":"LinkedIn proxy: react to a message with an emoji","description":"Adds or removes an emoji reaction on a LinkedIn message.\n\nSet ``react=false`` to remove the reaction.\n\n``message_urn`` is the full message URN returned by the ``/conversations/{id}/messages`` endpoint (e.g. ``urn:li:msg_message:(urn:li:fsd_profile:…,123456789)``).\n\n``emoji`` is the Unicode emoji character (e.g. ``👍``, ``❤️``).\n\nCalls ``voyagerMessagingDashMessengerMessages?action=reactWithEmoji`` or ``?action=unreactWithEmoji``.","operationId":"linkedin_react_message_api_linkedin__account_id__react_message_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"message_urn","in":"query","required":true,"schema":{"type":"string","description":"Full message URN to react to.","title":"Message Urn"},"description":"Full message URN to react to."},{"name":"emoji","in":"query","required":true,"schema":{"type":"string","description":"Unicode emoji character (e.g. 👍, ❤️).","title":"Emoji"},"description":"Unicode emoji character (e.g. 👍, ❤️)."},{"name":"react","in":"query","required":false,"schema":{"type":"boolean","description":"True to add the reaction, False to remove it.","default":true,"title":"React"},"description":"True to add the reaction, False to remove it."},{"name":"conversation_linkedin_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conversation ID — when provided the conversation is marked as read.","title":"Conversation Linkedin Id"},"description":"Conversation ID — when provided the conversation is marked as read."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/conversations/{conversation_linkedin_id}":{"delete":{"tags":["LinkedIn – Inbox"],"summary":"LinkedIn proxy: delete a conversation","description":"Permanently deletes a LinkedIn conversation.\n\nCalls ``DELETE /voyager/api/messaging/conversations/{id}``.\n\nReturns ``{\\\"deleted\\\": true}`` on success.","operationId":"linkedin_delete_conversation_api_linkedin__account_id__conversations__conversation_linkedin_id__delete","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"conversation_linkedin_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Linkedin Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/scrape-post":{"get":{"tags":["LinkedIn – Posts"],"summary":"LinkedIn proxy: scrape likers and/or commenters of a post","description":"Fetches up to 1 000 likers and/or up to 799 comments for a LinkedIn post using ``Voyager updatesV2?q=postSlug``.\n\n**Input** (``post_id_or_url``):\n\n- Full post URL: ``https://www.linkedin.com/posts/john-doe_title-7460167012225363968-iRyb``\n- Feed update URL: ``https://www.linkedin.com/feed/update/urn:li:activity:7460167012225363968``\n- Activity URN: ``urn:li:activity:7460167012225363968``\n- Bare numeric ID: ``7460167012225363968``\n- Post slug: ``john-doe_some-title-7460167012225363968-iRyb``\n\nAt least one of ``liked`` or ``comments`` must be ``true``.\n\nEach item in ``items`` has ``type='like'`` or ``type='comment'``. Comment items also carry ``comment_id`` (full URN), ``comment_text``, and ``is_reply=true`` for nested replies.","operationId":"linkedin_scrape_post_api_linkedin__account_id__scrape_post_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"post_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn post URL or post slug.","title":"Post Id Or Url"},"description":"LinkedIn post URL or post slug."},{"name":"liked","in":"query","required":false,"schema":{"type":"boolean","description":"Include people who liked the post.","default":false,"title":"Liked"},"description":"Include people who liked the post."},{"name":"comments","in":"query","required":false,"schema":{"type":"boolean","description":"Include people who commented on the post.","default":false,"title":"Comments"},"description":"Include people who commented on the post."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInScrapePostOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/scrape-my-posts":{"get":{"tags":["LinkedIn – Posts"],"summary":"LinkedIn proxy: scrape likers and/or commenters of the account's recent posts","description":"Fetches recent posts published by the connected LinkedIn account (via the ``MY_POSTS_ALL`` notification feed), then retrieves likers and/or commenters for each post using the Voyager GraphQL reactions/comments APIs.\n\n**Parameters:**\n\n- ``liked`` — include people who liked each post (paginated, up to all reactions)\n- ``comments`` — include people who commented on each post (paginated, up to all comments)\n- ``since_hours`` — only consider posts published within the last N hours (default 24)\n- ``max_posts`` — maximum number of posts to process (default 10, max 20)\n\nAt least one of ``liked`` or ``comments`` must be ``true``.\n\nEach item in ``items`` has ``type='like'`` or ``type='comment'``. Comment items also carry ``comment_id`` (full URN) and ``comment_text``.","operationId":"linkedin_scrape_my_posts_api_linkedin__account_id__scrape_my_posts_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"liked","in":"query","required":false,"schema":{"type":"boolean","description":"Include people who liked each post.","default":false,"title":"Liked"},"description":"Include people who liked each post."},{"name":"comments","in":"query","required":false,"schema":{"type":"boolean","description":"Include people who commented on each post.","default":false,"title":"Comments"},"description":"Include people who commented on each post."},{"name":"since_hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"description":"Only consider posts published within the last N hours.","default":24,"title":"Since Hours"},"description":"Only consider posts published within the last N hours."},{"name":"max_posts","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum number of posts to process.","default":10,"title":"Max Posts"},"description":"Maximum number of posts to process."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInScrapeMyPostsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/like-post":{"post":{"tags":["LinkedIn – Posts"],"summary":"LinkedIn proxy: like a post","description":"Likes a LinkedIn post on behalf of the connected account.\n\n**Input** (``post_url_or_urn``):\n\n- Full LinkedIn post URL: ``https://www.linkedin.com/posts/...``\n- Post slug: ``john-doe_some-title-7460167012225363968-iRyb``\n- Post URN: ``urn:li:activity:7460167012225363968``","operationId":"linkedin_like_post_api_linkedin__account_id__like_post_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"post_url_or_urn","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn post URL, slug, or URN (urn:li:activity:...).","title":"Post Url Or Urn"},"description":"LinkedIn post URL, slug, or URN (urn:li:activity:...)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/comment-post":{"post":{"tags":["LinkedIn – Posts"],"summary":"LinkedIn proxy: comment on a post","description":"Posts a comment on a LinkedIn post on behalf of the connected account.\n\n**Input** (``post_url_or_urn``):\n\n- Full LinkedIn post URL: ``https://www.linkedin.com/posts/...``\n- Post slug: ``john-doe_some-title-7460167012225363968-iRyb``\n- Post URN: ``urn:li:activity:7460167012225363968``","operationId":"linkedin_comment_post_api_linkedin__account_id__comment_post_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"post_url_or_urn","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn post URL, slug, or URN.","title":"Post Url Or Urn"},"description":"LinkedIn post URL, slug, or URN."},{"name":"text","in":"query","required":true,"schema":{"type":"string","description":"Comment text to post.","title":"Text"},"description":"Comment text to post."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/reply-comment":{"post":{"tags":["LinkedIn – Posts"],"summary":"LinkedIn proxy: reply to a comment","description":"Posts a reply to an existing LinkedIn comment.\n\n``comment_urn`` is the ``comment_id`` (URN) returned by the ``scrape-post`` endpoint — it is used directly as ``threadUrn`` in the LinkedIn API.","operationId":"linkedin_reply_comment_api_linkedin__account_id__reply_comment_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"comment_urn","in":"query","required":true,"schema":{"type":"string","description":"URN of the comment to reply to (comment_id from scrape-post).","title":"Comment Urn"},"description":"URN of the comment to reply to (comment_id from scrape-post)."},{"name":"text","in":"query","required":true,"schema":{"type":"string","description":"Reply text.","title":"Text"},"description":"Reply text."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/connect":{"post":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: send a connection request","description":"Sends a connection request to a LinkedIn member on behalf of the connected account.\n\n**Input** (``linkedin_id_or_url``):\n\n- Internal member ID: ``ACoAABcDEFg...``\n- Vanity name: ``john-doe``\n- Full profile URL: ``https://www.linkedin.com/in/john-doe``\n\nThe optional ``message`` is capped at **300 characters** for premium accounts, **200** otherwise.","operationId":"linkedin_connect_api_linkedin__account_id__connect_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."},{"name":"message","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional personalised invitation note (max 300 chars for premium, 200 otherwise).","title":"Message"},"description":"Optional personalised invitation note (max 300 chars for premium, 200 otherwise)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/invitation-status":{"get":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: get invitation/connection status with a member","description":"Returns the connection and invitation status between the connected account and a LinkedIn member.\n\n**Input** (``linkedin_id_or_url``):\n\n- Internal member ID: ``ACoAABcDEFg...``\n- Vanity name: ``john-doe``\n- Full profile URL: ``https://www.linkedin.com/in/john-doe``\n\n**``invitation_type``** values:\n\n- ``SENT`` — invitation sent, awaiting acceptance\n- ``PENDING`` — invitation received, not yet accepted\n- ``WITHDRAWN`` — invitation was withdrawn\n- ``REFUSED`` — invitation was declined","operationId":"linkedin_invitation_status_api_linkedin__account_id__invitation_status_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInInvitationStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/withdraw-invitation":{"post":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: withdraw a sent invitation","description":"Withdraws a pending sent connection request.\n\nReturns ``{\"withdrawn\": true}`` on success, ``{\"withdrawn\": false}`` if no SENT invitation exists.","operationId":"linkedin_withdraw_invitation_api_linkedin__account_id__withdraw_invitation_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/accept-invitation":{"post":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: accept a received invitation","description":"Accepts a pending received connection request.","operationId":"linkedin_accept_invitation_api_linkedin__account_id__accept_invitation_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/decline-invitation":{"post":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: decline a received invitation","description":"Ignores/declines a pending received connection request.","operationId":"linkedin_decline_invitation_api_linkedin__account_id__decline_invitation_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/remove-connection":{"post":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: remove a 1st-degree connection","description":"Removes an existing connection. Returns ``{\"removed\": false}`` if the member is not a connection.","operationId":"linkedin_remove_connection_api_linkedin__account_id__remove_connection_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/follow":{"post":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: follow or unfollow a member","description":"Follows or unfollows a LinkedIn member without connecting.\n\nSet ``follow=false`` to unfollow.","operationId":"linkedin_follow_api_linkedin__account_id__follow_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."},{"name":"follow","in":"query","required":false,"schema":{"type":"boolean","description":"True to follow, False to unfollow.","default":true,"title":"Follow"},"description":"True to follow, False to unfollow."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/received-invitations":{"get":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: list received pending invitations","description":"Returns pending connection invitations received by the account, with invitation_secret to accept them.","operationId":"linkedin_received_invitations_api_linkedin__account_id__received_invitations_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInInvitationsPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/sent-invitations":{"get":{"tags":["LinkedIn – Connections"],"summary":"LinkedIn proxy: list sent pending invitations","description":"Returns connection invitations sent by the account that are still pending.","operationId":"linkedin_sent_invitations_api_linkedin__account_id__sent_invitations_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInInvitationsPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/visit-profile":{"post":{"tags":["LinkedIn – Profiles"],"summary":"LinkedIn proxy: simulate a profile visit","description":"Simulates a profile view, triggering a 'viewed your profile' notification for the target member.\n\nRequires the account to have ``linkedin_plain_id`` and ``meta_client_page_instance_id`` configured.","operationId":"linkedin_visit_profile_api_linkedin__account_id__visit_profile_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/profile-viewers":{"get":{"tags":["LinkedIn – Profiles"],"summary":"LinkedIn proxy: get recent profile viewers (premium only)","description":"Returns members who recently viewed the account's profile. Requires a LinkedIn Premium account.","operationId":"linkedin_profile_viewers_api_linkedin__account_id__profile_viewers_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/user-posts":{"get":{"tags":["LinkedIn – Posts"],"summary":"LinkedIn proxy: get recent posts of a LinkedIn member","description":"Fetches recent posts published by a LinkedIn member via ``profileUpdatesV2``.\n\n**Input** (``linkedin_id_or_url``):\n\n- Internal member ID: ``ACoAABcDEFg...``\n- Vanity name: ``john-doe``\n- Full profile URL: ``https://www.linkedin.com/in/john-doe``\n\nUse ``count`` and ``start`` for pagination.","operationId":"linkedin_user_posts_api_linkedin__account_id__user_posts_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn member ID, vanity name, or profile URL.","title":"Linkedin Id Or Url"},"description":"LinkedIn member ID, vanity name, or profile URL."},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of posts to fetch.","default":10,"title":"Count"},"description":"Number of posts to fetch."},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset.","default":0,"title":"Start"},"description":"Pagination offset."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInUserPostsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/scrape-profile":{"get":{"tags":["LinkedIn – Profiles"],"summary":"LinkedIn proxy: scrape a single profile","description":"Fetch a complete LinkedIn profile by LinkedIn URL or profile ID.\n\n**Input formats accepted** (``linkedin_id_or_url``):\n\n- Standard LinkedIn URL: ``https://www.linkedin.com/in/john-doe``\n- Vanity name: ``john-doe``\n- Sales Navigator lead URL: ``https://www.linkedin.com/sales/lead/ACwAABxxxx,...``\n- Internal member ID: ``ACwAABxxxx`` (base64 format)\n\n**Source selection:**\n\n- Sales Navigator URL or internal member ID + account has SalesNav → ``salesApiProfiles`` (richer, single call, includes full company/tenure data).\n- Vanity name / standard LinkedIn URL, or SalesNav unavailable → multi-call Voyager API (profile, detail, company, relations, skills, languages, experiences).\n\nNote: SalesNav **cannot** be used with a vanity name (``/in/john-doe``) — it requires the internal member ID.","operationId":"linkedin_scrape_profile_api_linkedin__account_id__scrape_profile_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"linkedin_id_or_url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn profile URL, vanity name, SalesNav URL, or internal member ID.","title":"Linkedin Id Or Url"},"description":"LinkedIn profile URL, vanity name, SalesNav URL, or internal member ID."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInScrapedUserOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/scrape-search":{"get":{"tags":["LinkedIn – Profiles"],"summary":"LinkedIn proxy: scrape a search page","description":"Execute one page of a LinkedIn, Sales Navigator, or Recruiter search and return normalized profile rows.  The search type is detected automatically from ``url``:\n\n- ``linkedin.com/talent`` → Recruiter (``talentRecruiterSearchHits``)\n- ``linkedin.com/sales`` → Sales Navigator (``salesApiLeadSearch`` / ``salesApiPeopleSearch``)\n- otherwise → Standard LinkedIn (Voyager ``searchDashClusters`` GraphQL)\n\nUse ``start`` + ``count`` to paginate.\n\n**Page size notes:**\n- Sales Navigator / Recruiter: ``count`` is respected (max 25).\n- Standard LinkedIn: ``count`` is **ignored** — the Voyager GraphQL endpoint uses a fixed page size of ~10 results per call imposed by LinkedIn.  Iterate with ``start`` += 10.","operationId":"linkedin_scrape_search_api_linkedin__account_id__scrape_search_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn / SalesNav / Recruiter search URL.","title":"Url"},"description":"LinkedIn / SalesNav / Recruiter search URL."},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Paging offset.","default":0,"title":"Start"},"description":"Paging offset."},{"name":"count","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Page size (max 25, default 25). Ignored for standard LinkedIn — LinkedIn fixes the page size at ~10 results per call.","title":"Count"},"description":"Page size (max 25, default 25). Ignored for standard LinkedIn — LinkedIn fixes the page size at ~10 results per call."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInScrapeSearchPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/scheduled-posts":{"get":{"tags":["LinkedIn – Publishing"],"summary":"LinkedIn proxy: list scheduled posts","description":"Returns the account's scheduled posts via the Voyager ``voyagerContentcreationDashSharePreviews`` GraphQL endpoint.\n\nEach item contains ``post_urn``, ``post_text``, ``scheduled_at`` (Unix ms), and ``scheduled_at_label`` (human-readable date from LinkedIn).\n\nUse ``start`` and ``count`` to paginate.","operationId":"linkedin_scheduled_posts_api_linkedin__account_id__scheduled_posts_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Paging offset.","default":0,"title":"Start"},"description":"Paging offset."},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Page size (max 50).","default":10,"title":"Count"},"description":"Page size (max 50)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInScheduledPostsPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["LinkedIn – Publishing"],"summary":"LinkedIn proxy: update a scheduled post","description":"Updates the text and/or scheduled time of a scheduled LinkedIn post via the Voyager ``voyagerContentcreationDashShares`` GraphQL mutation.\n\n``post_urn`` is the URN returned by the list endpoint (e.g. ``urn:li:ugcPost:…``).\n\nAt least one of ``text`` or ``scheduled_at`` must be provided.","operationId":"linkedin_update_scheduled_post_api_linkedin__account_id__scheduled_posts_patch","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInUpdateScheduledPostIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["LinkedIn – Publishing"],"summary":"LinkedIn proxy: delete a scheduled post","description":"Deletes a scheduled LinkedIn post via the Voyager ``voyagerContentcreationDashShares`` GraphQL mutation.\n\n``post_urn`` is the URN returned by the list endpoint (e.g. ``urn:li:ugcPost:…``).","operationId":"linkedin_delete_scheduled_post_api_linkedin__account_id__scheduled_posts_delete","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"post_urn","in":"query","required":true,"schema":{"type":"string","description":"Post URN to delete (e.g. urn:li:ugcPost:…).","title":"Post Urn"},"description":"Post URN to delete (e.g. urn:li:ugcPost:…)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/create-post":{"post":{"tags":["LinkedIn – Publishing"],"summary":"LinkedIn proxy: create or schedule a post","description":"Creates or schedules a LinkedIn post, with optional media attachment.\n\n**Media options:**\n- Text-only: omit ``media_urn``.\n- Single image: pass a ``urn:li:digitalmediaAsset:…`` URN (obtained via ``/upload-media``).\n- Multiple images: pass a ``urn:li:fsd_multiPhoto:…`` URN (obtained via ``/create-multi-photo``).\n\n**Scheduling:** set ``scheduled_at`` to a Unix timestamp in milliseconds to schedule the post; omit it to publish immediately.\n\nReturns the ``resource_key`` (``urn:li:fsd_share:urn:li:ugcPost:…``) of the created post.","operationId":"linkedin_create_post_api_linkedin__account_id__create_post_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInCreatePostIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInCreatePostOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/create-multi-photo":{"post":{"tags":["LinkedIn – Publishing"],"summary":"LinkedIn proxy: create a multi-photo object","description":"Creates a LinkedIn multi-photo object from a list of ``digitalmediaAsset`` URNs (obtained via the ``/upload-media`` endpoint).\n\nReturns the ``identifierUrn`` (``urn:li:fsd_multiPhoto:…``) which must be passed when creating a post that contains multiple images.\n\n``author_urn`` is the ``urn:li:fsd_profile:…`` of the connected account — retrieve it from the ``/me`` endpoint.","operationId":"linkedin_create_multi_photo_api_linkedin__account_id__create_multi_photo_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInCreateMultiPhotoIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInMultiPhotoOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/upload-media":{"post":{"tags":["LinkedIn – Publishing"],"summary":"LinkedIn proxy: upload a media file","description":"Uploads a media file (e.g. an image) to LinkedIn using the two-step upload flow:\n\n1. Requests upload metadata from LinkedIn to obtain a signed upload URL and asset URN.\n2. PUTs the raw file bytes to the signed URL.\n\nReturns the ``digitalmediaAsset`` URN (e.g. ``urn:li:digitalmediaAsset:…``) which can be passed to post-creation endpoints to attach the image to a post.\n\n``media_upload_type`` defaults to ``IMAGE_SHARING``.","operationId":"linkedin_upload_media_api_linkedin__account_id__upload_media_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"media_upload_type","in":"query","required":false,"schema":{"type":"string","description":"LinkedIn media upload type.","default":"IMAGE_SHARING","title":"Media Upload Type"},"description":"LinkedIn media upload type."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_linkedin_upload_media_api_linkedin__account_id__upload_media_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInMediaUploadOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/upload-media-url":{"post":{"tags":["LinkedIn – Publishing"],"summary":"LinkedIn proxy: upload a media file from a URL","description":"Fetches an image from a publicly accessible URL and uploads it to LinkedIn.\n\nThis is the agent-friendly alternative to ``/upload-media`` (which requires a binary file upload). Pass any public image URL; the backend will download it and execute the two-step LinkedIn upload flow.\n\nReturns the ``digitalmediaAsset`` URN (e.g. ``urn:li:digitalmediaAsset:…``) which can be passed to ``/create-post`` or ``/create-multi-photo``.","operationId":"linkedin_upload_media_from_url_api_linkedin__account_id__upload_media_url_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInMediaUploadFromUrlIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInMediaUploadOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/salesnav/messaging/threads":{"get":{"tags":["LinkedIn – Sales Navigator"],"summary":"Sales Navigator proxy: list messaging threads (paged)","description":"Calls the Sales Navigator ``salesApiMessagingThreads`` endpoint and returns normalised threads.\n\nRequires the account to have a Sales Navigator subscription (``has_sales_nav``).\n\n**Pagination**: pass ``page_starts_at`` from the previous response's ``next_page_starts_at`` to fetch the next (older) page of threads.","operationId":"salesnav_messaging_threads_api_linkedin__account_id__salesnav_messaging_threads_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"filter","in":"query","required":false,"schema":{"type":"string","description":"Conversation folder: INBOX, ARCHIVE, UNREAD, INMAIL_PENDING, INMAIL_ACCEPTED, or INMAIL_DECLINED.","default":"INBOX","title":"Filter"},"description":"Conversation folder: INBOX, ARCHIVE, UNREAD, INMAIL_PENDING, INMAIL_ACCEPTED, or INMAIL_DECLINED."},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of threads per page (default 20, max 50).","default":20,"title":"Count"},"description":"Number of threads per page (default 20, max 50)."},{"name":"page_starts_at","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Cursor for pagination — value of next_page_starts_at from the previous response.","title":"Page Starts At"},"description":"Cursor for pagination — value of next_page_starts_at from the previous response."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavThreadsPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/linkedin/{account_id}/salesnav/messaging/threads/{thread_id}/messages":{"post":{"tags":["LinkedIn – Sales Navigator"],"summary":"Sales Navigator proxy: send a message in a thread","description":"POST ``salesApiMessageActions?action=createMessage`` to send a message in an existing Sales Navigator thread.\n\nRequires a Sales Navigator subscription (``has_sales_nav``). Use the ``id`` field from ``GET /salesnav/messaging/threads`` as ``thread_id``.","operationId":"salesnav_send_message_api_linkedin__account_id__salesnav_messaging_threads__thread_id__messages_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavSendMessageIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavSendMessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["LinkedIn – Sales Navigator"],"summary":"Sales Navigator proxy: list messages in a thread","description":"Calls ``salesApiMessagingThreads/{thread_id}`` to fetch a single thread with its messages and participants.\n\nRequires a Sales Navigator subscription (``has_sales_nav``). Use the ``id`` field from ``GET /salesnav/messaging/threads`` as ``thread_id``.\n\n**Pagination**: ``message_count`` controls how many (most recent) messages are returned. Check ``total_message_count`` in the response to know if more exist.","operationId":"salesnav_thread_messages_api_linkedin__account_id__salesnav_messaging_threads__thread_id__messages_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"message_count","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of most-recent messages to return.","default":20,"title":"Message Count"},"description":"Number of most-recent messages to return."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavThreadOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/actions":{"get":{"tags":["jobs"],"summary":"Actions a job can run, with their payload fields","operationId":"list_actions_api_jobs_actions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Actions Api Jobs Actions Get"}}}}},"security":[{"XApiKeyAuth":[]}]}},"/api/jobs":{"post":{"tags":["jobs"],"summary":"Create a job: a batch of actions spread over the account's working window","operationId":"create_job_api_jobs_post","security":[{"XApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreateIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Job Api Jobs Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["jobs"],"summary":"List jobs","operationId":"list_jobs_api_jobs_get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Jobs Api Jobs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"One job with its items","operationId":"get_job_api_jobs__job_id__get","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Job Api Jobs  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/cancel":{"post":{"tags":["jobs"],"summary":"Cancel the pending items of a job","operationId":"cancel_job_api_jobs__job_id__cancel_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cancel Job Api Jobs  Job Id  Cancel Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/pause":{"post":{"tags":["jobs"],"summary":"Pause a job","operationId":"pause_job_api_jobs__job_id__pause_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pause Job Api Jobs  Job Id  Pause Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/resume":{"post":{"tags":["jobs"],"summary":"Resume a paused job; pending items are re-planned from now","operationId":"resume_job_api_jobs__job_id__resume_post","security":[{"XApiKeyAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Resume Job Api Jobs  Job Id  Resume Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountStatus":{"type":"string","enum":["connected","disconnected","proxy_error","pending"],"title":"AccountStatus"},"ActivationOut":{"properties":{"step":{"type":"string","enum":["connect_linkedin","connect_client","first_call","done"],"title":"Step"},"linkedin_accounts":{"type":"integer","title":"Linkedin Accounts"},"linkedin_accounts_connected":{"type":"integer","title":"Linkedin Accounts Connected"},"client_connected":{"type":"boolean","title":"Client Connected"},"client_names":{"items":{"type":"string"},"type":"array","title":"Client Names"},"api_key_used":{"type":"boolean","title":"Api Key Used"},"tool_calls_total":{"type":"integer","title":"Tool Calls Total"},"first_tool_call_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Tool Call At"},"last_tool_call_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Tool Call At"}},"type":"object","required":["step","linkedin_accounts","linkedin_accounts_connected","client_connected","client_names","api_key_used","tool_calls_total","first_tool_call_at","last_tool_call_at"],"title":"ActivationOut","description":"The activation funnel for one user, as far as the data can tell."},"ApiKeyCreateIn":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"allowed_account_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Allowed Account Ids"}},"type":"object","required":["name"],"title":"ApiKeyCreateIn"},"ApiKeyCreatedOut":{"properties":{"id":{"type":"integer","title":"Id"},"key_prefix":{"type":"string","title":"Key Prefix"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"allowed_account_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Allowed Account Ids"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"full_key":{"type":"string","title":"Full Key"}},"type":"object","required":["id","key_prefix","name","is_active","full_key"],"title":"ApiKeyCreatedOut","description":"Returned only at creation time with the full key."},"ApiKeyOut":{"properties":{"id":{"type":"integer","title":"Id"},"key_prefix":{"type":"string","title":"Key Prefix"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"allowed_account_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Allowed Account Ids"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","key_prefix","name","is_active"],"title":"ApiKeyOut"},"ApiKeySecretOut":{"properties":{"full_key":{"type":"string","title":"Full Key"}},"type":"object","required":["full_key"],"title":"ApiKeySecretOut"},"AppSumoWebhookOut":{"properties":{"event":{"type":"string","title":"Event"},"success":{"type":"boolean","title":"Success","default":true}},"type":"object","required":["event"],"title":"AppSumoWebhookOut","description":"Exactly what AppSumo requires back, and nothing else: anything but a 200\nwith ``success`` true is read as a failed delivery and retried."},"AttributionIn":{"properties":{"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term"},"click_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Click Id"},"referrer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer"},"landing_page":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landing Page"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"},"first_seen":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First Seen"}},"type":"object","title":"AttributionIn","description":"Where the visitor came from, as the browser recorded it — see\napp/services/attribution.py. No length limits on purpose: values are\ntruncated on the way in, because a malformed UTM must never fail a signup."},"BillingPortalOut":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"BillingPortalOut"},"Body_linkedin_upload_media_api_linkedin__account_id__upload_media_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Media file to upload (e.g. PNG, JPEG)."}},"type":"object","required":["file"],"title":"Body_linkedin_upload_media_api_linkedin__account_id__upload_media_post"},"Body_token_api_oauth_token_post":{"properties":{"grant_type":{"type":"string","title":"Grant Type"},"code":{"type":"string","title":"Code"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"client_id":{"type":"string","title":"Client Id"},"code_verifier":{"type":"string","title":"Code Verifier"}},"type":"object","required":["grant_type","code","redirect_uri","client_id","code_verifier"],"title":"Body_token_api_oauth_token_post"},"BrandingIn":{"properties":{"brand_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Brand Name"},"brand_logo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Brand Logo Url"}},"type":"object","title":"BrandingIn"},"BrandingOut":{"properties":{"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"brand_logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Logo Url"}},"type":"object","title":"BrandingOut"},"ChangePasswordIn":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordIn"},"ConnectViaInviteIn":{"properties":{"token":{"type":"string","title":"Token"},"linkedin_cookie":{"type":"string","title":"Linkedin Cookie"},"premium_cookie":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Premium Cookie"},"jsessionid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jsessionid"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"accept_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accept Language"},"has_sales_nav":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Sales Nav"},"sales_nav_plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sales Nav Plan"},"has_recruiter":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Recruiter"}},"type":"object","required":["token","linkedin_cookie"],"title":"ConnectViaInviteIn"},"ConnectViaInviteOut":{"properties":{"detail":{"type":"string","title":"Detail"},"account_id":{"type":"integer","title":"Account Id"},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture"},"linkedin_public_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Public Id"},"linkedin_verified":{"type":"boolean","title":"Linkedin Verified","default":false}},"type":"object","required":["detail","account_id"],"title":"ConnectViaInviteOut"},"GoogleAuthIn":{"properties":{"client_id":{"type":"string","title":"Client Id"},"credential":{"type":"string","title":"Credential"},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"job":{"anyOf":[{"$ref":"#/components/schemas/JobType"},{"type":"null"}]},"linkedin_count_plan":{"anyOf":[{"$ref":"#/components/schemas/LinkedInCountPlan"},{"type":"null"}]},"attribution":{"anyOf":[{"$ref":"#/components/schemas/AttributionIn"},{"type":"null"}]}},"type":"object","required":["client_id","credential"],"title":"GoogleAuthIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InviteLinkOut":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"InviteLinkOut"},"InviteMetaOut":{"properties":{"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"brand_logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Logo Url"}},"type":"object","title":"InviteMetaOut"},"JobCreateIn":{"properties":{"account_id":{"type":"integer","title":"Account Id"},"action":{"type":"string","title":"Action","description":"send_message | connect | visit_profile | comment_post"},"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":500,"minItems":1,"title":"Items","description":"One object per action; fields depend on the action (GET /api/jobs/actions)."},"label":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Label","description":"Free text shown in the dashboard and in webhook events."},"window_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window Start","description":"HH:MM in the job's timezone; default 09:00."},"window_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window End","description":"HH:MM in the job's timezone; default 18:00."},"days":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Days","description":"Weekdays the job may run, e.g. [\"mon\", \"tue\"]; default Monday to Friday."},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"IANA zone; default derived from the account's proxy country."}},"type":"object","required":["account_id","action","items"],"title":"JobCreateIn","description":"A batch of LinkedIn actions Reach executes over time (see app/services/jobs.py)."},"JobType":{"type":"string","enum":["freelance","startup_founder","agency","sales_team","other"],"title":"JobType"},"LinkedInAccountOut":{"properties":{"id":{"type":"integer","title":"Id"},"linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Id"},"linkedin_public_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Public Id"},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture"},"status":{"$ref":"#/components/schemas/AccountStatus"},"is_premium":{"type":"boolean","title":"Is Premium"},"has_sales_nav":{"type":"boolean","title":"Has Sales Nav"},"sales_nav_plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sales Nav Plan"},"has_recruiter":{"type":"boolean","title":"Has Recruiter","default":false},"has_premium_cookie":{"type":"boolean","title":"Has Premium Cookie","default":false},"proxy_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Domain"},"proxy_port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proxy Port"},"use_default_proxy":{"type":"boolean","title":"Use Default Proxy"},"proxy_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Country"},"proxy_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy City"},"seat_assigned":{"type":"boolean","title":"Seat Assigned","default":false},"free_trial_blocked":{"type":"boolean","title":"Free Trial Blocked","default":false},"connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Connected At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","status","is_premium","has_sales_nav","use_default_proxy"],"title":"LinkedInAccountOut"},"LinkedInConnectIn":{"properties":{"linkedin_username":{"type":"string","title":"Linkedin Username"},"linkedin_password":{"type":"string","title":"Linkedin Password"},"use_default_proxy":{"type":"boolean","title":"Use Default Proxy","default":true},"proxy_host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Host"},"proxy_port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proxy Port"},"proxy_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Username"},"proxy_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Password"},"proxy_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Country"},"proxy_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy City"}},"type":"object","required":["linkedin_username","linkedin_password"],"title":"LinkedInConnectIn"},"LinkedInConnectPinIn":{"properties":{"reconnect_url":{"type":"string","title":"Reconnect Url"},"pin":{"type":"string","title":"Pin"}},"type":"object","required":["reconnect_url","pin"],"title":"LinkedInConnectPinIn"},"LinkedInConnectViaExtensionIn":{"properties":{"linkedin_cookie":{"type":"string","title":"Linkedin Cookie"},"premium_cookie":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Premium Cookie"},"jsessionid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jsessionid"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"accept_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accept Language"},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"linkedin_public_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Public Id"},"has_sales_nav":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Sales Nav"},"sales_nav_plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sales Nav Plan"},"has_recruiter":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Recruiter"}},"type":"object","required":["linkedin_cookie"],"title":"LinkedInConnectViaExtensionIn"},"LinkedInConnectionItemOut":{"properties":{"linkedin_id":{"type":"string","title":"Linkedin Id","description":"Connection id from entityUrn (fsd_connection:…)."},"linkedin_public_id":{"type":"string","title":"Linkedin Public Id","description":"Vanity id when known, else same as linkedin_id."},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture","description":"Photo URL from profilePicture vectorImage."},"connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Connected At","description":"Connection time from Voyager ``createdAt`` (UTC)."}},"type":"object","required":["linkedin_id","linkedin_public_id"],"title":"LinkedInConnectionItemOut","description":"One connection row: same extraction as Kanbox ``sync_connections`` (lead fields)."},"LinkedInConnectionsPageOut":{"properties":{"start":{"type":"integer","title":"Start","description":"Offset used for this request."},"count":{"type":"integer","title":"Count","description":"Requested page size."},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total connections reported by LinkedIn ``paging.total``."},"items":{"items":{"$ref":"#/components/schemas/LinkedInConnectionItemOut"},"type":"array","title":"Items"},"next_start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Start","description":"If set, use as the ``start`` query param for the next page (Kanbox-style paging)."}},"type":"object","required":["start","count","items"],"title":"LinkedInConnectionsPageOut","description":"Paged list of connections (Voyager dash connections API)."},"LinkedInConversationListItemOut":{"properties":{"conversation_id":{"type":"string","title":"Conversation Id","description":"LinkedIn messaging thread id (``backendUrn`` → ``messagingThread:<id>``). Use this as ``conversation_linkedin_id`` when fetching messages or replying."},"thread_id":{"type":"string","title":"Thread Id","description":"Same as ``conversation_id`` — kept for backward compatibility."},"recipient_linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Linkedin Id","description":"``fsd_profile`` id of the other participant (1:1 chats only; ``None`` for group chats). Use this as ``recipient_linkedin_id`` when sending a new message."},"is_groupchat":{"type":"boolean","title":"Is Groupchat","default":false},"unread_count":{"type":"integer","title":"Unread Count","default":0},"is_read":{"type":"boolean","title":"Is Read","default":true},"is_archived":{"type":"boolean","title":"Is Archived","default":false},"is_starred":{"type":"boolean","title":"Is Starred","default":false},"is_muted":{"type":"boolean","title":"Is Muted","default":false},"last_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity At"},"last_read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Read At"},"last_message_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Text"},"participant_firstname":{"type":"string","title":"Participant Firstname","default":""},"participant_lastname":{"type":"string","title":"Participant Lastname","default":""},"participant_headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Participant Headline"},"participant_picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Participant Picture"},"participant_linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Participant Linkedin Id","description":"Same as ``recipient_linkedin_id`` — kept for backward compatibility."}},"type":"object","required":["conversation_id","thread_id"],"title":"LinkedInConversationListItemOut","description":"One conversation row — same core fields Kanbox fills from ``sync_linkedin_conversations_new_format``."},"LinkedInConversationMessageOut":{"properties":{"id":{"type":"string","title":"Id","description":"Message id from ``backendUrn`` (messagingMessage:…)."},"message_urn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Urn","description":"Full message URN (entityUrn) — pass this to proxy_react_message."},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html"},"attachment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Url"},"attachment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Name"},"attachment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type"},"from_linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Linkedin Id"},"from_firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Firstname"},"from_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Lastname"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"is_inbound":{"type":"boolean","title":"Is Inbound","description":"True when the sender is not the connected account (incoming message)."},"message_type":{"type":"string","title":"Message Type","description":"e.g. text, html, gif, or media hint.","default":"text"}},"type":"object","required":["id","is_inbound"],"title":"LinkedInConversationMessageOut","description":"One message from ``/messaging/conversations/{id}/events`` (Kanbox ``parse_linkedin_message``)."},"LinkedInConversationMessagesPageOut":{"properties":{"conversation_linkedin_id":{"type":"string","title":"Conversation Linkedin Id","description":"Kanbox ``Conversation.linkedin_id`` / conversation key."},"messages":{"items":{"$ref":"#/components/schemas/LinkedInConversationMessageOut"},"type":"array","title":"Messages"},"total_count":{"type":"integer","title":"Total Count","description":"Number of messages in this response."},"has_more":{"type":"boolean","title":"Has More","description":"True when LinkedIn likely has older events (page size 20)."},"next_created_before":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Created Before","description":"Pass as ``created_before`` to fetch the next (older) page."}},"type":"object","required":["conversation_linkedin_id","messages","total_count","has_more"],"title":"LinkedInConversationMessagesPageOut","description":"Messages for a conversation (Kanbox ``get_conversation_messages`` + public API paging)."},"LinkedInCountPlan":{"type":"string","enum":["1","2_5","5_20","20_plus"],"title":"LinkedInCountPlan"},"LinkedInCreateMultiPhotoIn":{"properties":{"author_urn":{"type":"string","title":"Author Urn","description":"Author profile URN (e.g. urn:li:fsd_profile:…). Retrieve it from the /me endpoint."},"media_urns":{"items":{"type":"string"},"type":"array","title":"Media Urns","description":"List of digitalmediaAsset URNs to include (e.g. [urn:li:digitalmediaAsset:…, …])."},"alt_texts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Alt Texts","description":"Alt text per image (same order as media_urns). Defaults to empty strings."}},"type":"object","required":["author_urn","media_urns"],"title":"LinkedInCreateMultiPhotoIn","description":"Request body for creating a LinkedIn multi-photo object."},"LinkedInCreatePostIn":{"properties":{"text":{"type":"string","title":"Text","description":"Post text content."},"media_urn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Urn","description":"Media URN to attach. Use ``urn:li:digitalmediaAsset:…`` for a single image or ``urn:li:fsd_multiPhoto:…`` (from /create-multi-photo) for multiple images. Omit for a text-only post."},"scheduled_at":{"anyOf":[{"type":"integer","minimum":1000000000000.0},{"type":"null"}],"title":"Scheduled At","description":"Scheduled publish time as Unix timestamp in **milliseconds** (13-digit epoch, e.g. 1779446566000). Omit to publish immediately."},"visibility":{"type":"string","title":"Visibility","description":"Post visibility: 'ANYONE' (public) or 'CONNECTIONS_ONLY'.","default":"ANYONE"},"allowed_commenters_scope":{"type":"string","title":"Allowed Commenters Scope","description":"Who can comment: 'ALL' or 'CONNECTIONS_ONLY'.","default":"ALL"}},"type":"object","required":["text"],"title":"LinkedInCreatePostIn","description":"Request body for creating or scheduling a LinkedIn post."},"LinkedInCreatePostOut":{"properties":{"resource_key":{"type":"string","title":"Resource Key","description":"Post URN (e.g. urn:li:fsd_share:urn:li:ugcPost:…)."}},"type":"object","required":["resource_key"],"title":"LinkedInCreatePostOut","description":"Result of creating or scheduling a LinkedIn post."},"LinkedInInvitationCreateIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"}},"type":"object","required":["email"],"title":"LinkedInInvitationCreateIn"},"LinkedInInvitationItemOut":{"properties":{"invitation_id":{"type":"string","title":"Invitation Id","description":"Invitation URN."},"invitation_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invitation Secret","description":"Shared secret (only on received invitations, needed to accept)."},"linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Id","description":"Internal LinkedIn member ID of the other party."},"linkedin_public_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Public Id","description":"Vanity name of the other party."},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture"},"profile_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Url"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At","description":"ISO 8601 UTC timestamp when the invitation was sent."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Personalised note attached to the invitation."}},"type":"object","required":["invitation_id"],"title":"LinkedInInvitationItemOut","description":"A single invitation entry (received or sent)."},"LinkedInInvitationOut":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"accepted":{"type":"boolean","title":"Accepted"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","accepted"],"title":"LinkedInInvitationOut"},"LinkedInInvitationStatusOut":{"properties":{"is_connection":{"type":"boolean","title":"Is Connection","description":"True if the member is a 1st-degree connection."},"degree":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Degree","description":"Connection distance (1, 2 or 3)."},"invitation_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invitation Type","description":"'SENT' (pending sent), 'PENDING' (received, awaiting acceptance), 'WITHDRAWN', or 'REFUSED'."},"invitation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invitation Id","description":"Invitation URN, if any."},"invitation_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invitation Secret","description":"Shared secret, required to accept a received invitation."}},"type":"object","required":["is_connection"],"title":"LinkedInInvitationStatusOut","description":"Connection / invitation status between the connected account and a LinkedIn member."},"LinkedInInvitationsPageOut":{"properties":{"invitations":{"items":{"$ref":"#/components/schemas/LinkedInInvitationItemOut"},"type":"array","title":"Invitations"},"total":{"type":"integer","title":"Total"},"start":{"type":"integer","title":"Start"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["invitations","total","start","count"],"title":"LinkedInInvitationsPageOut","description":"Paged list of invitations."},"LinkedInMeProfileOut":{"properties":{"linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Id","description":"MiniProfile id (entityUrn suffix after fs_miniProfile:)."},"linkedin_public_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Public Id","description":"Public / vanity identifier."},"linkedin_plain_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Linkedin Plain Id","description":"Numeric member id from objectUrn."},"firstname":{"type":"string","title":"Firstname","default":""},"lastname":{"type":"string","title":"Lastname","default":""},"headline":{"type":"string","title":"Headline","default":""},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture","description":"Profile picture URL derived from VectorImage artifacts."},"is_premium":{"type":"boolean","title":"Is Premium","default":false}},"type":"object","title":"LinkedInMeProfileOut","description":"Profile fields extracted from Voyager ``GET /voyager/api/me``, matching what Kanbox persists on accounts."},"LinkedInMediaUploadFromUrlIn":{"properties":{"image_url":{"type":"string","title":"Image Url","description":"Publicly accessible URL of the image to upload (JPEG, PNG, GIF…)."},"media_upload_type":{"type":"string","title":"Media Upload Type","description":"LinkedIn media upload type (default: IMAGE_SHARING).","default":"IMAGE_SHARING"}},"type":"object","required":["image_url"],"title":"LinkedInMediaUploadFromUrlIn","description":"Request body for uploading a media file to LinkedIn from a public URL."},"LinkedInMediaUploadOut":{"properties":{"urn":{"type":"string","title":"Urn","description":"digitalmediaAsset URN (e.g. urn:li:digitalmediaAsset:…). Use this when creating a post with an image."}},"type":"object","required":["urn"],"title":"LinkedInMediaUploadOut","description":"Result of a media upload to LinkedIn."},"LinkedInMessengerConversationsPageOut":{"properties":{"archived":{"type":"boolean","title":"Archived","description":"Matches query: archived folder (``category:ARCHIVE``) when not unread."},"unread":{"type":"boolean","title":"Unread","description":"Matches query: unread filter (search query with ``read:false``)."},"starred":{"type":"boolean","title":"Starred","description":"Matches query: starred folder or client filter when combined."},"count":{"type":"integer","title":"Count","description":"Requested page size (LinkedIn typically caps at 25)."},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Pass as ``next_cursor`` for the following page when present."},"items":{"items":{"$ref":"#/components/schemas/LinkedInConversationListItemOut"},"type":"array","title":"Items"}},"type":"object","required":["archived","unread","starred","count","items"],"title":"LinkedInMessengerConversationsPageOut","description":"Paged messenger list (Voyager Messaging GraphQL)."},"LinkedInMultiPhotoOut":{"properties":{"identifier_urn":{"type":"string","title":"Identifier Urn","description":"Multi-photo URN (e.g. urn:li:fsd_multiPhoto:…). Pass this when creating a post with multiple images."}},"type":"object","required":["identifier_urn"],"title":"LinkedInMultiPhotoOut","description":"Result of creating a LinkedIn multi-photo object."},"LinkedInMyPostOut":{"properties":{"post_urn":{"type":"string","title":"Post Urn"},"post_url":{"type":"string","title":"Post Url","description":"Public LinkedIn URL of the post."},"post_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Text","description":"Excerpt of the post text (from the notification card)."},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At","description":"ISO 8601 UTC timestamp of the post."},"total_likes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Likes"},"total_comments":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Comments"},"items":{"items":{"$ref":"#/components/schemas/LinkedInPostEngagerOut"},"type":"array","title":"Items"}},"type":"object","required":["post_urn","post_url","items"],"title":"LinkedInMyPostOut","description":"One of the account owner's posts with its engagers."},"LinkedInPostEngagerOut":{"properties":{"type":{"type":"string","title":"Type","description":"``like`` or ``comment``."},"linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Id"},"linkedin_public_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Public Id"},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture"},"comment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment Id","description":"Full comment URN (comments only)."},"comment_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment Text"},"reply_to_comment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply To Comment Id","description":"URN of the parent comment when this item is a reply."},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"ISO 8601 UTC timestamp of the like or comment."}},"type":"object","required":["type"],"title":"LinkedInPostEngagerOut","description":"A person who liked or commented on a LinkedIn post."},"LinkedInPostSearchItemOut":{"properties":{"post_urn":{"type":"string","title":"Post Urn","description":"Post URN; pass it (or post_url) to scrape_post, like_post or comment_post."},"post_url":{"type":"string","title":"Post Url","description":"LinkedIn URL of the post."},"post_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Text","description":"Post content text."},"published_at_relative":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At Relative","description":"Relative publish time as LinkedIn shows it (e.g. '2 weeks ago')."},"total_likes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Likes"},"total_comments":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Comments"},"total_shares":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Shares"},"author_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Type","description":"member or company."},"author_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Name"},"author_headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Headline","description":"Member headline, or follower count for a company page."},"author_linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Linkedin Id","description":"Member id (ACoA…) accepted by scrape_profile, send_invitation and send_message. Null for company pages."},"author_profile_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Profile Url"},"author_degree":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Author Degree","description":"1, 2 or 3 (3 also covers 3rd+); null when LinkedIn does not say."}},"type":"object","required":["post_urn","post_url"],"title":"LinkedInPostSearchItemOut","description":"A post found by keyword search, with its author in the shape other tools take."},"LinkedInPostSearchOut":{"properties":{"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Matches LinkedIn reports for the query; approximate, and LinkedIn stops paging well before very large totals."},"start":{"type":"integer","title":"Start"},"posts":{"items":{"$ref":"#/components/schemas/LinkedInPostSearchItemOut"},"type":"array","title":"Posts"}},"type":"object","required":["start","posts"],"title":"LinkedInPostSearchOut","description":"One page of LinkedIn post search results."},"LinkedInScheduledPostOut":{"properties":{"post_urn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Urn","description":"Post URN (e.g. urn:li:ugcPost:…)."},"post_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Text","description":"Text content of the post."},"scheduled_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scheduled At","description":"Scheduled publish time as Unix timestamp in milliseconds."},"scheduled_at_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At Label","description":"Human-readable scheduled time (e.g. 'Publication le mer. 20 mai à 14:30')."}},"type":"object","title":"LinkedInScheduledPostOut","description":"A scheduled post returned by the Voyager SharePreviews API."},"LinkedInScheduledPostsPageOut":{"properties":{"posts":{"items":{"$ref":"#/components/schemas/LinkedInScheduledPostOut"},"type":"array","title":"Posts"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of scheduled posts."},"start":{"type":"integer","title":"Start"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["posts","start","count"],"title":"LinkedInScheduledPostsPageOut","description":"Paged list of scheduled posts."},"LinkedInScrapeMyPostsOut":{"properties":{"posts":{"items":{"$ref":"#/components/schemas/LinkedInMyPostOut"},"type":"array","title":"Posts"},"total_posts":{"type":"integer","title":"Total Posts"}},"type":"object","required":["posts","total_posts"],"title":"LinkedInScrapeMyPostsOut","description":"Engagers across recent posts published by the connected account."},"LinkedInScrapePostOut":{"properties":{"post_id":{"type":"string","title":"Post Id"},"total_likes":{"type":"integer","title":"Total Likes","default":0},"total_comments":{"type":"integer","title":"Total Comments","default":0},"items":{"items":{"$ref":"#/components/schemas/LinkedInPostEngagerOut"},"type":"array","title":"Items"}},"type":"object","required":["post_id","items"],"title":"LinkedInScrapePostOut","description":"Aggregated likers and commenters for a LinkedIn post."},"LinkedInScrapeSearchPageOut":{"properties":{"start":{"type":"integer","title":"Start","description":"Offset used for this request."},"count":{"type":"integer","title":"Count","description":"Requested page size."},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total results reported by LinkedIn."},"items":{"items":{"$ref":"#/components/schemas/LinkedInScrapedUserOut"},"type":"array","title":"Items"},"next_start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Start","description":"Pass as ``start`` for the next page when present."}},"type":"object","required":["start","count","items"],"title":"LinkedInScrapeSearchPageOut","description":"Paged results from a LinkedIn, Sales Navigator, or Recruiter search URL."},"LinkedInScrapedUserOut":{"properties":{"linkedin_id":{"type":"string","title":"Linkedin Id","description":"Profile ID (fsd_profile or ts_profile suffix)."},"linkedin_public_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Public Id","description":"Vanity URL slug (/in/<slug>)."},"linkedin_plain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Plain Id","description":"Numeric member ID (objectUrn suffix)."},"salesnavigator_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salesnavigator Url","description":"Sales Navigator profile URL (SalesNav searches only)."},"profile_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Url","description":"Public LinkedIn profile URL."},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"Full name as returned by LinkedIn (standard search only)."},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture","description":"Profile picture URL."},"job":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job","description":"Current job title."},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company","description":"Current company name."},"company_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Id","description":"LinkedIn company ID."},"company_industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Industry"},"company_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Location"},"company_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Website"},"company_employee_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Employee Count"},"company_employee_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Employee Range"},"company_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Logo"},"company_linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Linkedin","description":"LinkedIn company page URL."},"job_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Description"},"startyear_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Startyear Position"},"startmonth_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Startmonth Position"},"year_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Position","description":"Tenure at current position (years)."},"month_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Month Position","description":"Tenure at current position (months)."},"year_company":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Company","description":"Tenure at current company (years)."},"month_company":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Month Company","description":"Tenure at current company (months)."},"company_specialties":{"anyOf":[{},{"type":"null"}],"title":"Company Specialties"},"company_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Description"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"},"company_year_founded":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Year Founded"},"is_premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Premium"},"is_open_profile":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Profile"},"is_opentowork":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Opentowork"},"connections":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Connections"},"degree":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Degree","description":"Network degree: 1, 2, or 3."},"skills":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Skills"},"languages":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Languages"}},"type":"object","required":["linkedin_id"],"title":"LinkedInScrapedUserOut","description":"Normalized profile from a LinkedIn, Sales Navigator, or Recruiter search result.\n\nMirrors the fields Kanbox persists via ``scrap_leads`` / ``enrich_lead`` /\n``enrich_lead_talent``.  Fields not available for a given search type are ``None``."},"LinkedInSendMessageIn":{"properties":{"text":{"type":"string","maxLength":16000,"title":"Text","description":"Message body (plain text).","default":""},"conversation_linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Linkedin Id","description":"Kanbox ``Conversation.linkedin_id`` — sends inside an existing thread (takes precedence)."},"recipient_linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Linkedin Id","description":"Peer ``fsd_profile`` id — starts/sends a direct message without conversation id."},"in_mail_premium":{"type":"boolean","title":"In Mail Premium","description":"Use Premium InMail payload (requires ``recipient_linkedin_id``, no conversation id).","default":false}},"type":"object","title":"LinkedInSendMessageIn","description":"Body for Kanbox-style ``send_message`` (conversation thread or recipient profile id)."},"LinkedInUpdateScheduledPostIn":{"properties":{"post_urn":{"type":"string","title":"Post Urn","description":"Post URN to update (e.g. urn:li:ugcPost:…)."},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text","description":"New post text. Omit to keep existing."},"scheduled_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scheduled At","description":"New scheduled time as Unix timestamp in milliseconds. Omit to keep existing."}},"type":"object","required":["post_urn"],"title":"LinkedInUpdateScheduledPostIn"},"LinkedInUserPostOut":{"properties":{"post_urn":{"type":"string","title":"Post Urn"},"post_url":{"type":"string","title":"Post Url","description":"Public LinkedIn URL of the post."},"post_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Text","description":"Post content text."},"published_at_relative":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At Relative","description":"Human-readable relative publish time (e.g. '3 days ago')."},"total_likes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Likes"},"total_comments":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Comments"}},"type":"object","required":["post_urn","post_url"],"title":"LinkedInUserPostOut","description":"A post published by a LinkedIn member."},"LinkedInUserPostsOut":{"properties":{"posts":{"items":{"$ref":"#/components/schemas/LinkedInUserPostOut"},"type":"array","title":"Posts"},"total_posts":{"type":"integer","title":"Total Posts"}},"type":"object","required":["posts","total_posts"],"title":"LinkedInUserPostsOut","description":"Recent posts published by a LinkedIn member."},"LoginIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginIn"},"OnboardingEventIn":{"properties":{"event":{"type":"string","title":"Event"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"}},"type":"object","required":["event"],"title":"OnboardingEventIn"},"PasswordResetIn":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"PasswordResetIn"},"PasswordResetRequestIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"PasswordResetRequestIn"},"PlanChoiceIn":{"properties":{"plan":{"type":"string","maxLength":30,"minLength":1,"title":"Plan"}},"type":"object","required":["plan"],"title":"PlanChoiceIn"},"ProxyLocationCityOut":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label"}},"type":"object","required":["value","label"],"title":"ProxyLocationCityOut"},"ProxyLocationCountryOut":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label"},"cities":{"items":{"$ref":"#/components/schemas/ProxyLocationCityOut"},"type":"array","title":"Cities"}},"type":"object","required":["value","label","cities"],"title":"ProxyLocationCountryOut"},"QuotasOut":{"properties":{"id":{"type":"integer","title":"Id"},"daily_invitations_conf":{"type":"integer","title":"Daily Invitations Conf"},"daily_invitations_used":{"type":"integer","title":"Daily Invitations Used"},"daily_messages_conf":{"type":"integer","title":"Daily Messages Conf"},"daily_messages_used":{"type":"integer","title":"Daily Messages Used"},"daily_visits_conf":{"type":"integer","title":"Daily Visits Conf"},"daily_visits_used":{"type":"integer","title":"Daily Visits Used"},"daily_imports_standard_conf":{"type":"integer","title":"Daily Imports Standard Conf"},"daily_imports_standard_used":{"type":"integer","title":"Daily Imports Standard Used"},"daily_imports_salesnav_conf":{"type":"integer","title":"Daily Imports Salesnav Conf"},"daily_imports_salesnav_used":{"type":"integer","title":"Daily Imports Salesnav Used"},"daily_imports_recruiter_conf":{"type":"integer","title":"Daily Imports Recruiter Conf"},"daily_imports_recruiter_used":{"type":"integer","title":"Daily Imports Recruiter Used"},"daily_posts_conf":{"type":"integer","title":"Daily Posts Conf"},"daily_posts_used":{"type":"integer","title":"Daily Posts Used"},"daily_comments_conf":{"type":"integer","title":"Daily Comments Conf"},"daily_comments_used":{"type":"integer","title":"Daily Comments Used"},"daily_reactions_conf":{"type":"integer","title":"Daily Reactions Conf"},"daily_reactions_used":{"type":"integer","title":"Daily Reactions Used"},"daily_linkedin_requests_conf":{"type":"integer","title":"Daily Linkedin Requests Conf"},"daily_linkedin_requests_used":{"type":"integer","title":"Daily Linkedin Requests Used","default":0},"daily_linkedin_requests_max":{"type":"integer","title":"Daily Linkedin Requests Max"},"daily_messaging_reads_conf":{"type":"integer","title":"Daily Messaging Reads Conf"},"daily_messaging_reads_used":{"type":"integer","title":"Daily Messaging Reads Used","default":0},"messaging_min_interval_seconds":{"type":"integer","title":"Messaging Min Interval Seconds"},"window_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window Start"},"window_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window End"},"window_days":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Window Days"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},"type":"object","required":["id","daily_invitations_conf","daily_invitations_used","daily_messages_conf","daily_messages_used","daily_visits_conf","daily_visits_used","daily_imports_standard_conf","daily_imports_standard_used","daily_imports_salesnav_conf","daily_imports_salesnav_used","daily_imports_recruiter_conf","daily_imports_recruiter_used","daily_posts_conf","daily_posts_used","daily_comments_conf","daily_comments_used","daily_reactions_conf","daily_reactions_used","daily_linkedin_requests_conf","daily_linkedin_requests_max","daily_messaging_reads_conf","messaging_min_interval_seconds"],"title":"QuotasOut"},"QuotasUpdateIn":{"properties":{"window_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window Start","description":"HH:MM; jobs on this account start no earlier. Empty string resets to default."},"window_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window End","description":"HH:MM; jobs on this account stop at this time. Empty string resets to default."},"window_days":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Window Days","description":"Weekdays jobs may run: mon…sun or 0…6. Empty list resets to default."},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"IANA zone for the window. Empty string resets to the proxy country's zone."},"daily_invitations_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Invitations Conf"},"daily_messages_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Messages Conf"},"daily_visits_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Visits Conf"},"daily_imports_standard_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Imports Standard Conf"},"daily_imports_salesnav_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Imports Salesnav Conf"},"daily_imports_recruiter_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Imports Recruiter Conf"},"daily_posts_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Posts Conf"},"daily_comments_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Comments Conf"},"daily_reactions_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Reactions Conf"},"daily_linkedin_requests_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Linkedin Requests Conf","description":"All LinkedIn requests per UTC day, 1 to 2000 (MAX_DAILY_LINKEDIN_REQUESTS)."},"daily_messaging_reads_conf":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Messaging Reads Conf","description":"Inbox reads per UTC day; 0 = not limited."},"messaging_min_interval_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Messaging Min Interval Seconds","description":"Seconds before the same inbox page or conversation can be read again; 0 = off."}},"type":"object","title":"QuotasUpdateIn"},"ReconnectOut":{"properties":{"status":{"type":"string","title":"Status"},"reconnect_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reconnect Url"},"pin_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pin Type"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture"}},"type":"object","required":["status"],"title":"ReconnectOut"},"RefreshIn":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshIn"},"RequestLogOut":{"properties":{"id":{"type":"integer","title":"Id"},"request_type":{"type":"string","title":"Request Type"},"method":{"type":"string","title":"Method"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","request_type","method"],"title":"RequestLogOut"},"RequestLogStatsBucketOut":{"properties":{"bucket_start":{"type":"string","format":"date-time","title":"Bucket Start"},"action":{"type":"string","title":"Action"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["bucket_start","action","count"],"title":"RequestLogStatsBucketOut"},"RequestLogStatsOut":{"properties":{"group_by":{"type":"string","title":"Group By"},"start_date":{"type":"string","format":"date-time","title":"Start Date"},"end_date":{"type":"string","format":"date-time","title":"End Date"},"request_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Type"},"available_actions":{"items":{"type":"string"},"type":"array","title":"Available Actions"},"buckets":{"items":{"$ref":"#/components/schemas/RequestLogStatsBucketOut"},"type":"array","title":"Buckets"}},"type":"object","required":["group_by","start_date","end_date","available_actions","buckets"],"title":"RequestLogStatsOut"},"SalesNavAttachmentOut":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"media_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Type"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"},"asset_urn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Urn"}},"type":"object","title":"SalesNavAttachmentOut"},"SalesNavProfileOut":{"properties":{"entity_urn":{"type":"string","title":"Entity Urn","description":"Full fs_salesProfile URN."},"salesnav_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salesnav Id","description":"Sales Navigator ID (first segment of the URN)."},"linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Id","description":"LinkedIn member ID (from objectUrn)."},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"fullname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fullname"},"degree":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Degree"},"profile_picture_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Picture Url"},"inmail_restriction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inmail Restriction"}},"type":"object","required":["entity_urn"],"title":"SalesNavProfileOut"},"SalesNavSendMessageIn":{"properties":{"text":{"type":"string","maxLength":16000,"title":"Text","description":"Message body (plain text)."},"copy_to_crm":{"type":"boolean","title":"Copy To Crm","description":"Copy the message to CRM.","default":false}},"type":"object","required":["text"],"title":"SalesNavSendMessageIn"},"SalesNavSendMessageOut":{"properties":{"success":{"type":"boolean","title":"Success"},"thread_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Id"},"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["success","status_code"],"title":"SalesNavSendMessageOut"},"SalesNavThreadMessageOut":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type","description":"Message type: INMAIL, MESSAGE, INMAIL_ACCEPT, INMAIL_REPLY, etc."},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"},"author_urn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Urn","description":"Full fs_salesProfile URN of the author."},"author_salesnav_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Salesnav Id","description":"Sales Navigator ID extracted from author URN."},"attachments":{"items":{"$ref":"#/components/schemas/SalesNavAttachmentOut"},"type":"array","title":"Attachments"}},"type":"object","required":["id","type"],"title":"SalesNavThreadMessageOut"},"SalesNavThreadOut":{"properties":{"id":{"type":"string","title":"Id","description":"Sales Navigator thread ID."},"archived":{"type":"boolean","title":"Archived"},"unread_count":{"type":"integer","title":"Unread Count"},"total_message_count":{"type":"integer","title":"Total Message Count"},"restrictions":{"items":{"type":"string"},"type":"array","title":"Restrictions"},"next_page_starts_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Page Starts At","description":"Unix ms timestamp — value from the oldest thread, used as page_starts_at cursor."},"messages":{"items":{"$ref":"#/components/schemas/SalesNavThreadMessageOut"},"type":"array","title":"Messages"},"participants":{"items":{"$ref":"#/components/schemas/SalesNavProfileOut"},"type":"array","title":"Participants"}},"type":"object","required":["id","archived","unread_count","total_message_count","messages","participants"],"title":"SalesNavThreadOut"},"SalesNavThreadsPageOut":{"properties":{"filter":{"type":"string","title":"Filter","description":"Filter used: INBOX or ARCHIVE."},"count":{"type":"integer","title":"Count"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of threads matching the filter."},"page_starts_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Starts At","description":"Cursor passed in the request (None for first page)."},"next_page_starts_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Page Starts At","description":"Pass as page_starts_at to fetch the next (older) page. None when there are no more results."},"items":{"items":{"$ref":"#/components/schemas/SalesNavThreadOut"},"type":"array","title":"Items"}},"type":"object","required":["filter","count","items"],"title":"SalesNavThreadsPageOut"},"SeatAssignmentIn":{"properties":{"account_id":{"type":"integer","title":"Account Id"},"assigned":{"type":"boolean","title":"Assigned"}},"type":"object","required":["account_id","assigned"],"title":"SeatAssignmentIn"},"SeatAssignmentsUpdateIn":{"properties":{"assignments":{"items":{"$ref":"#/components/schemas/SeatAssignmentIn"},"type":"array","title":"Assignments"}},"type":"object","required":["assignments"],"title":"SeatAssignmentsUpdateIn"},"SignupIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"firstname":{"type":"string","maxLength":200,"minLength":1,"title":"Firstname"},"lastname":{"type":"string","maxLength":200,"minLength":1,"title":"Lastname"},"job":{"anyOf":[{"$ref":"#/components/schemas/JobType"},{"type":"null"}]},"linkedin_count_plan":{"anyOf":[{"$ref":"#/components/schemas/LinkedInCountPlan"},{"type":"null"}]},"pricing_plan":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Pricing Plan"},"attribution":{"anyOf":[{"$ref":"#/components/schemas/AttributionIn"},{"type":"null"}]}},"type":"object","required":["email","password","firstname","lastname"],"title":"SignupIn"},"SubscriptionCheckoutIn":{"properties":{"seats":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Seats"}},"type":"object","required":["seats"],"title":"SubscriptionCheckoutIn"},"SubscriptionCheckoutOut":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"SubscriptionCheckoutOut"},"SubscriptionSummaryOut":{"properties":{"status":{"type":"string","title":"Status"},"seats_purchased":{"type":"integer","title":"Seats Purchased"},"appsumo_seats":{"type":"integer","title":"Appsumo Seats","default":0},"seats_entitled":{"type":"integer","title":"Seats Entitled","default":0},"seats_assigned":{"type":"integer","title":"Seats Assigned"},"plan":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Plan"},"can_change_plan":{"type":"boolean","title":"Can Change Plan","default":true},"trial_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Ends At"},"trial_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Started At"},"appsumo_licenses":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Appsumo Licenses"}},"type":"object","required":["status","seats_purchased","seats_assigned"],"title":"SubscriptionSummaryOut"},"TeamCreateIn":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"TeamCreateIn"},"TeamInviteIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"TeamInviteIn"},"TeamInviteOut":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","title":"Email"},"accepted":{"type":"boolean","title":"Accepted"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","email","accepted"],"title":"TeamInviteOut"},"TeamMemberOut":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","title":"Email"},"firstname":{"type":"string","title":"Firstname"},"lastname":{"type":"string","title":"Lastname"},"is_team_owner":{"type":"boolean","title":"Is Team Owner"}},"type":"object","required":["id","email","firstname","lastname","is_team_owner"],"title":"TeamMemberOut"},"TeamOut":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"invite_code":{"type":"string","title":"Invite Code"},"owner_id":{"type":"integer","title":"Owner Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","name","invite_code","owner_id"],"title":"TeamOut"},"TokenOut":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token","refresh_token"],"title":"TokenOut"},"UserOut":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","title":"Email"},"firstname":{"type":"string","title":"Firstname"},"lastname":{"type":"string","title":"Lastname"},"job":{"anyOf":[{"$ref":"#/components/schemas/JobType"},{"type":"null"}]},"linkedin_count_plan":{"anyOf":[{"$ref":"#/components/schemas/LinkedInCountPlan"},{"type":"null"}]},"is_active":{"type":"boolean","title":"Is Active"},"email_verified":{"type":"boolean","title":"Email Verified"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"is_team_owner":{"type":"boolean","title":"Is Team Owner"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"is_admin":{"type":"boolean","title":"Is Admin","default":false}},"type":"object","required":["id","email","firstname","lastname","is_active","email_verified","is_team_owner"],"title":"UserOut"},"UserUpdateIn":{"properties":{"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"job":{"anyOf":[{"$ref":"#/components/schemas/JobType"},{"type":"null"}]},"linkedin_count_plan":{"anyOf":[{"$ref":"#/components/schemas/LinkedInCountPlan"},{"type":"null"}]}},"type":"object","title":"UserUpdateIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookEndpointCreateIn":{"properties":{"url":{"type":"string","maxLength":2000,"minLength":8,"title":"Url"},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description"},"events":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Events"},"account_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Account Ids"}},"type":"object","required":["url","events"],"title":"WebhookEndpointCreateIn"},"WebhookEndpointUpdateIn":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2000,"minLength":8},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Events"},"account_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Account Ids"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"WebhookEndpointUpdateIn"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"},"XApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Create/retrieve the key in the frontend API Keys page and send it in this header."}}}}