{"openapi":"3.1.0","info":{"title":"Wannalead API","version":"0.1.0","description":"Create LinkedIn, Instagram, X and Facebook data and action jobs from a Wannalead workspace."},"servers":[{"url":"https://wannalead.co"}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"tags":[{"name":"Signals","description":"Sourced web and business research."},{"name":"X","description":"X reads, guarded writes, account quotas, and health."},{"name":"Facebook","description":"Visible Facebook reads and individually confirmed actions through a connected account."},{"name":"Platform","description":"Health, API discovery, OpenAPI, and installation endpoints."},{"name":"Workspace & billing","description":"Workspace onboarding, billing state, and API-key permissions."},{"name":"Connections & clients","description":"LinkedIn account connections, CLI authorization, and extension pairing."},{"name":"API jobs","description":"Create, inspect, and cancel asynchronous LinkedIn jobs."},{"name":"Agent runs","description":"Persist compact, idempotent daily agent run journals linked to metered API jobs."},{"name":"Feedback","description":"Send product feedback and bug reports from authenticated clients."},{"name":"Profiles","description":"Resolve, enrich, and explore LinkedIn profiles and connections."},{"name":"Enrichment","description":"Find verified mobile phone numbers with budgeted enrichment jobs."},{"name":"Companies","description":"Resolve, enrich, and explore LinkedIn companies."},{"name":"Search","description":"Search people, companies, posts, ads, and job-change signals."},{"name":"Job listings","description":"Search and enrich LinkedIn job postings."},{"name":"Content","description":"Read posts, feeds, newsletters, and saved content."},{"name":"Communities & events","description":"Explore LinkedIn groups and events."},{"name":"Messaging & outreach","description":"Read conversations and perform guarded messaging or invitation actions."},{"name":"Instagram","description":"Run allowlisted Instagram reads and guarded writes, and query the stored Instagram mirror."},{"name":"Campaigns","description":"Build, review, launch, and manage automation campaigns."},{"name":"Campaign targets","description":"Manage the lifecycle and context of campaign recipients."},{"name":"Message drafts","description":"Create, approve, or reject generated campaign messages."},{"name":"Lemlist","description":"Connect Lemlist and synchronize campaign leads."},{"name":"Webhooks","description":"Receive signed HTTP callbacks for new LinkedIn messages, new connections, and account status changes."}],"x-tagGroups":[{"name":"Getting started","tags":["Platform","Workspace & billing","Connections & clients","API jobs","Agent runs","Feedback"]},{"name":"Prospecting","tags":["Profiles","Enrichment","Companies","Search","Job listings","Signals"]},{"name":"Content & audiences","tags":["Content","Communities & events"]},{"name":"Engagement","tags":["Messaging & outreach","Instagram","X","Facebook"]},{"name":"Automation & integrations","tags":["Campaigns","Campaign targets","Message drafts","Lemlist","Webhooks"]}],"paths":{"/v1/facebook/status":{"get":{"summary":"Facebook account status","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"account_id":{"type":"string","nullable":true},"facebook_user_id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"status":{"type":"string","enum":["active","verifying","needs_login","restricted","disconnected"]},"permission":{"type":"string"},"browser_connected":{"type":"boolean"},"writes_enabled":{"type":"boolean"},"paused_until":{"type":"string","nullable":true},"last_status_at":{"type":"string","nullable":true},"messenger":{"type":"object","description":"Messenger in the linked Chrome. pin_ready: whether that browser holds the end-to-end encryption keys (Messenger PIN entered), as seen by the last Messenger tab action; null until one ran. The PIN is per browser profile.","properties":{"extension_ready":{"type":"boolean"},"pin_ready":{"type":"boolean","nullable":true},"pin_checked_at":{"type":"string","nullable":true}}}}},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/me":{"get":{"summary":"Connected Facebook account","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"picture_url":{"type":"string"},"verified":{"type":"boolean"},"bio":{"type":"string"},"intro":{"type":"array","items":{"type":"string"},"description":"Visible intro lines (city, work, school); never gender or similar fields."},"url":{"type":"string"}}},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/me/groups":{"get":{"summary":"List groups the account joined","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"privacy":{"type":"string"},"picture_url":{"type":"string"},"url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/routes":{"get":{"summary":"Enabled Facebook routes","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/limits":{"get":{"summary":"Facebook pacing and limits","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/resolve":{"post":{"summary":"Resolve a Facebook URL","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string","format":"uri"}}}}}},"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","description":"Bare object (no data envelope), kept for compatibility.","properties":{"type":{"type":"string","enum":["profile","page","group","event","post"]},"id":{"type":"string"},"canonical_url":{"type":"string"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/search":{"get":{"summary":"Search people, Pages, groups, events or posts","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"query","in":"query","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["people","pages","groups","events","posts"],"default":"people"}}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"people/pages/groups/events rows carry name, summary and prominent lines (events also start_local, the local start date/time parsed from the date line); posts rows follow the post shape.","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["people","pages","groups","events","posts"]},"name":{"type":"string"},"summary":{"type":"string"},"prominent":{"type":"array","items":{"type":"string"}},"start_local":{"type":"string","description":"YYYY-MM-DD or YYYY-MM-DDTHH:MM in the event's local time, no offset."},"verified":{"type":"boolean"},"picture_url":{"type":"string"},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/profiles/{id}":{"get":{"summary":"Read a Facebook profile","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"picture_url":{"type":"string"},"verified":{"type":"boolean"},"bio":{"type":"string"},"intro":{"type":"array","items":{"type":"string"},"description":"Visible intro lines (city, work, school); never gender or similar fields."},"url":{"type":"string"}}},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/profiles/{id}/posts":{"get":{"summary":"List profile posts","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Base64 story id; pass it to posts/{id}."},"post_id":{"type":"string"},"type":{"type":"string"},"text":{"type":"string"},"actor":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}},"created_at":{"type":"integer","description":"Unix seconds."},"counts":{"type":"object","description":"Totals Facebook displays; absent when not visible.","properties":{"reactions":{"type":"integer"},"comments":{"type":"integer"},"shares":{"type":"integer"}}},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/profiles/{id}/about":{"get":{"summary":"Read visible profile About fields","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/profiles/{id}/friends":{"get":{"summary":"List visible friends","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"picture_url":{"type":"string"},"verified":{"type":"boolean"},"bio":{"type":"string"},"joined":{"type":"string"},"role":{"type":"array","items":{"type":"string"}},"is_friend":{"type":"boolean"},"friendship_status":{"type":"string"},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/pages/{id}/about":{"get":{"summary":"Read visible Page About fields","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/pages/{id}/posts":{"get":{"summary":"List Page posts","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Base64 story id; pass it to posts/{id}."},"post_id":{"type":"string"},"type":{"type":"string"},"text":{"type":"string"},"actor":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}},"created_at":{"type":"integer","description":"Unix seconds."},"counts":{"type":"object","description":"Totals Facebook displays; absent when not visible.","properties":{"reactions":{"type":"integer"},"comments":{"type":"integer"},"shares":{"type":"integer"}}},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/pages/{id}/reviews":{"get":{"summary":"List Page reviews","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Base64 story id; pass it to posts/{id}."},"post_id":{"type":"string"},"type":{"type":"string"},"text":{"type":"string"},"actor":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}},"created_at":{"type":"integer","description":"Unix seconds."},"counts":{"type":"object","description":"Totals Facebook displays; absent when not visible.","properties":{"reactions":{"type":"integer"},"comments":{"type":"integer"},"shares":{"type":"integer"}}},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/groups/{id}":{"get":{"summary":"Read a Facebook group","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"privacy":{"type":"string"},"privacy_description":{"type":"string"},"visibility":{"type":"string"},"member_count":{"type":"integer"},"member_count_text":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"posts_last_day":{"type":"integer"},"posts_last_month":{"type":"integer"},"locations":{"type":"array","items":{"type":"string"}},"admins":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}}},"vanity":{"type":"string"},"url":{"type":"string"}}},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/groups/{id}/posts":{"get":{"summary":"List visible group posts","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["TOP_POSTS","CHRONOLOGICAL"],"default":"TOP_POSTS"}}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Base64 story id; pass it to posts/{id}."},"post_id":{"type":"string"},"type":{"type":"string"},"text":{"type":"string"},"actor":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}},"created_at":{"type":"integer","description":"Unix seconds."},"counts":{"type":"object","description":"Totals Facebook displays; absent when not visible.","properties":{"reactions":{"type":"integer"},"comments":{"type":"integer"},"shares":{"type":"integer"}}},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/groups/{id}/search":{"get":{"summary":"Search posts inside a group","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"query","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Base64 story id; pass it to posts/{id}."},"post_id":{"type":"string"},"type":{"type":"string"},"text":{"type":"string"},"actor":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}},"created_at":{"type":"integer","description":"Unix seconds."},"counts":{"type":"object","description":"Totals Facebook displays; absent when not visible.","properties":{"reactions":{"type":"integer"},"comments":{"type":"integer"},"shares":{"type":"integer"}}},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/groups/{id}/members":{"get":{"summary":"List visible group members","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"section","in":"query","required":false,"schema":{"type":"string","enum":["new","admins","all"],"default":"new"},"description":"new: newest members (paginated); admins: admins and moderators; all: every section of the members page (first page only)."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"picture_url":{"type":"string"},"verified":{"type":"boolean"},"bio":{"type":"string"},"joined":{"type":"string"},"role":{"type":"array","items":{"type":"string"}},"is_friend":{"type":"boolean"},"friendship_status":{"type":"string"},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/groups/{id}/members/search":{"get":{"summary":"Search group members","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"query","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"picture_url":{"type":"string"},"verified":{"type":"boolean"},"bio":{"type":"string"},"joined":{"type":"string"},"role":{"type":"array","items":{"type":"string"}},"is_friend":{"type":"boolean"},"friendship_status":{"type":"string"},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/posts/{id}":{"get":{"summary":"Read a Facebook post","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_+/=:.-]{1,512}$"},"description":"Post id from a list or search (base64 story id), a numeric post id, or <owner_id>_<post_id>; numeric forms are resolved first."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Base64 story id; pass it to posts/{id}."},"post_id":{"type":"string"},"type":{"type":"string"},"text":{"type":"string"},"actor":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}},"created_at":{"type":"integer","description":"Unix seconds."},"counts":{"type":"object","description":"Totals Facebook displays; absent when not visible.","properties":{"reactions":{"type":"integer"},"comments":{"type":"integer"},"shares":{"type":"integer"}}},"url":{"type":"string"},"source_url":{"type":"string"}}},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Delete own post","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_+/=:.-]{1,512}$"},"description":"Post id from a list or search (base64 story id), a numeric post id, or <owner_id>_<post_id>; numeric forms are resolved first."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/posts/{id}/comments":{"get":{"summary":"List post comments","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_+/=:.-]{1,512}$"},"description":"Post id from a list or search (base64 story id), a numeric post id, or <owner_id>_<post_id>; numeric forms are resolved first."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"text":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}},"created_at":{"type":"integer"},"url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Create one post comment","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_+/=:.-]{1,512}$"},"description":"Post id from a list or search (base64 story id), a numeric post id, or <owner_id>_<post_id>; numeric forms are resolved first."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":2000}}}}}},"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/posts/{id}/reactors":{"get":{"summary":"List visible post reactors (partial)","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_+/=:.-]{1,512}$"},"description":"Post id from a list or search (base64 story id), a numeric post id, or <owner_id>_<post_id>; numeric forms are resolved first."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"picture_url":{"type":"string"},"verified":{"type":"boolean"},"bio":{"type":"string"},"joined":{"type":"string"},"role":{"type":"array","items":{"type":"string"}},"is_friend":{"type":"boolean"},"friendship_status":{"type":"string"},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/events/{id}":{"get":{"summary":"Read a Facebook event","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"when":{"type":"string"},"is_online":{"type":"boolean"},"is_canceled":{"type":"boolean"},"is_past":{"type":"boolean"},"location":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"}}},"hosts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}}},"counts":{"type":"object","description":"As visible to the account: responded is public; going/interested count people the account knows.","properties":{"responded":{"type":"integer"},"going":{"type":"integer"},"interested":{"type":"integer"}}},"ticket_url":{"type":"string"},"description":{"type":"string"},"url":{"type":"string"}}},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/marketplace/search":{"get":{"summary":"Search Marketplace listings","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"query","in":"query","required":true,"schema":{"type":"string"}},{"name":"lat","in":"query","required":false,"schema":{"type":"string"}},{"name":"lng","in":"query","required":false,"schema":{"type":"string"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"string"}},{"name":"price_min","in":"query","required":false,"schema":{"type":"string"}},{"name":"price_max","in":"query","required":false,"schema":{"type":"string"}},{"name":"condition","in":"query","required":false,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string"}},{"name":"sold","in":"query","required":false,"schema":{"type":"string"}},{"name":"pickup_only","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"title":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"city":{"type":"string"},"seller":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"nullable":true},"url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/marketplace/items/{id}":{"get":{"summary":"Read a Marketplace listing","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/friend-requests":{"get":{"summary":"List incoming or outgoing friend requests","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"direction","in":"query","required":false,"schema":{"type":"string","enum":["incoming","outgoing"],"default":"incoming"}}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"picture_url":{"type":"string"},"verified":{"type":"boolean"},"bio":{"type":"string"},"joined":{"type":"string"},"role":{"type":"array","items":{"type":"string"}},"is_friend":{"type":"boolean"},"friendship_status":{"type":"string"},"url":{"type":"string"},"source_url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/notifications":{"get":{"summary":"List Facebook notifications","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"text":{"type":"string"},"notification_type":{"type":"string"},"seen_state":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/jobs/{job_id}":{"get":{"summary":"Inspect a Facebook job","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"description":"Job id returned by a 202 response (data.job_id)."}],"responses":{"200":{"description":"Job state; a failed job is reported here with its public error","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/jobs/{job_id}/result":{"get":{"summary":"Read a normalized Facebook job result","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"description":"Job id returned by a 202 response (data.job_id)."}],"responses":{"200":{"description":"Job state; a failed job is reported here with its public error","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/posts/{id}/reactions":{"post":{"summary":"React to one post","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_+/=:.-]{1,512}$"},"description":"Post id from a list or search (base64 story id), a numeric post id, or <owner_id>_<post_id>; numeric forms are resolved first."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["reaction"],"properties":{"reaction":{"type":"string","enum":["like","love","care","haha","wow","sad","angry","remove"]}}}}}},"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Remove own reaction","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_+/=:.-]{1,512}$"},"description":"Post id from a list or search (base64 story id), a numeric post id, or <owner_id>_<post_id>; numeric forms are resolved first."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/comments/{id}":{"delete":{"summary":"Delete own comment","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/users/{id}/friend-request":{"post":{"summary":"Send one friend request","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Cancel own friend request","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/friend-requests/{id}/accept":{"post":{"summary":"Accept one incoming friend request","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/friend-requests/{id}":{"delete":{"summary":"Delete one incoming friend request","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/groups/{id}/join":{"post":{"summary":"Join one group","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/groups/{id}/membership":{"delete":{"summary":"Leave one group","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,100}$"},"description":"Numeric Facebook id, or a vanity name (resolved within the same call)."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/events/{id}/rsvp":{"post":{"summary":"Set one event RSVP","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status"],"properties":{"status":{"type":"string","enum":["going","interested","declined","remove"]}}}}}},"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/posts":{"post":{"summary":"Create one self-only text post","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","privacy"],"properties":{"text":{"type":"string","minLength":1,"maxLength":2000},"privacy":{"type":"string","enum":["SELF"]}}}}}},"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/messenger/threads":{"get":{"summary":"List Messenger threads or message requests","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"folder","in":"query","required":false,"schema":{"type":"string","enum":["inbox","requests","all"],"default":"inbox"}}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Thread id; pass it to messenger/threads/{id}/…"},"type":{"type":"string","enum":["one_to_one","group","marketplace","page","other"]},"e2ee":{"type":"boolean","description":"End-to-end encrypted: content readable only in the linked browser (messages, mode=auto or browser)."},"folder":{"type":"string"},"is_request":{"type":"boolean","description":"A message request (pending or filtered folder)."},"name":{"type":"string","nullable":true},"other_user_id":{"type":"string","nullable":true},"participants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true}}}},"snippet":{"type":"string","nullable":true},"last_activity_at":{"type":"string","format":"date-time","nullable":true},"unread":{"type":"boolean"},"last_message":{"type":"object","nullable":true},"url":{"type":"string"}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/messenger/threads/{id}/messages":{"get":{"summary":"Read a Messenger thread's messages","tags":["Facebook"],"description":"Requires facebook:read and an enabled workspace. Returns only fields visible to the connected account. A pending read returns 202 with Location and result_url; partial lists are marked. Lists fill up to limit by chaining at most 5 Facebook pages per call.","x-required-scope":"facebook:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^fbcursor_[a-f0-9]{32}$"},"description":"Opaque account-bound cursor (next_cursor), valid 30 minutes."},{"name":"mode","in":"query","required":false,"schema":{"type":"string","enum":["auto","sync","browser"],"default":"auto"},"description":"auto: HTTP for a non-encrypted thread (last messages), the linked Chrome for an e2ee thread. Opening a thread in Chrome marks it as seen. If that browser never entered the Messenger PIN, only the messages it sent or received itself have text; older ones come back with text null and the warning facebook_messenger_history_not_restored."}],"responses":{"200":{"description":"Normalized visible result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"thread_id":{"type":"string"},"sender_id":{"type":"string","nullable":true},"outgoing":{"type":"boolean"},"text":{"type":"string","nullable":true,"description":"null when unsent, media only, or not decrypted on that device."},"unsent":{"type":"boolean"},"sent_at":{"type":"string","format":"date-time","nullable":true}}}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true},"partial":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"fetched_at":{"type":"string","format":"date-time"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Send one Messenger text to a thread","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":2000}}}}}},"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/messenger/users/{id}/messages":{"post":{"summary":"Send one Messenger text to a person","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":2000}}}}}},"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/messenger/requests/{id}/accept":{"post":{"summary":"Accept one Messenger message request","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/facebook/messenger/requests/{id}":{"delete":{"summary":"Delete one Messenger message request","tags":["Facebook"],"description":"Requires facebook:write, an enabled account, exact target/content approval, Idempotency-Key and X-Wannalead-Confirm-Write: true. A provider-accepted mutation is not proof of its final effect; verify before a new intent after an uncertain outcome.","x-required-scope":"facebook:write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,24}$"},"description":"Numeric Facebook id from resolve or a prior result."},{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Provider accepted the guarded action","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"}}}}}},"202":{"description":"Job still running; poll Location or result_url","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^fbjob_[a-f0-9]{32}$"},"status":{"type":"string","enum":["queued","running","succeeded","failed","outcome_unknown"]},"result_url":{"type":"string"},"error":{"type":"string"},"http_status":{"type":"integer"},"message":{"type":"string"},"completed_at":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"description":"facebook_addon_required: the workspace has no Facebook add-on"},"403":{"description":"insufficient_permissions (message names the missing facebook:read/facebook:write scope), facebook_route_not_allowed, facebook_account_restricted or facebook_visibility_limited"},"404":{"description":"facebook_route_not_found, facebook_not_found or facebook_job_not_found"},"409":{"$ref":"#/components/responses/Error"},"429":{"description":"facebook_rate_limited: the account is paused; honour Retry-After"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"facebook_transport_unavailable (browser offline: queued work expires after ~120 s) or facebook_catalog_unavailable"},"504":{"$ref":"#/components/responses/Error"}}}},"/v1/x/users/{screen_name}":{"get":{"summary":"Read an X profile","description":"Returns the public profile of an X account: identity, bio, follower, following and post counts, verification, protection, whether it accepts direct messages from the connected account, location, website and profile picture. Pass the screen name, or id:<user id> for a numeric X user id.","x-required-scope":"x:read","parameters":[{"name":"screen_name","in":"path","required":true,"schema":{"type":"string"},"description":"X screen name (with or without @), or id:<numeric user id>.","example":"jack"},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Read an X profile","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/XUser"}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_user_not_found: unknown, renamed or suspended account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/users/{screen_name}/tweets":{"get":{"summary":"List an X account's posts","description":"Returns the account's latest posts, newest first with a pinned post on top: full text (long posts included), engagement and view counts, media, links, mentions and hashtags. Reposts carry retweeted_tweet_id. include_replies=true adds the account's replies. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"screen_name","in":"path","required":true,"schema":{"type":"string"},"description":"X screen name (with or without @), or id:<numeric user id>.","example":"jack"},{"name":"include_replies","in":"query","schema":{"type":"boolean","default":false}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"List an X account's posts","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XTweet"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_user_not_found: unknown account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/users/{screen_name}/followers":{"get":{"summary":"List an X account's followers","description":"Returns the accounts that follow this account, most recent first, as X profiles. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"screen_name","in":"path","required":true,"schema":{"type":"string"},"description":"X screen name (with or without @), or id:<numeric user id>.","example":"jack"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"List an X account's followers","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XUser"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_user_not_found: unknown account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/users/{screen_name}/following":{"get":{"summary":"List the accounts an X account follows","description":"Returns the accounts this account follows, most recent first, as X profiles. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"screen_name","in":"path","required":true,"schema":{"type":"string"},"description":"X screen name (with or without @), or id:<numeric user id>.","example":"jack"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"List the accounts an X account follows","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XUser"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_user_not_found: unknown account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/users/{screen_name}/relationship":{"get":{"summary":"Read the connected account's relationship with an X account","description":"Returns whether the connected X account follows this account, is followed back, has a pending follow request, can send it a direct message, blocks or mutes it.","x-required-scope":"x:read","parameters":[{"name":"screen_name","in":"path","required":true,"schema":{"type":"string"},"description":"X screen name (with or without @), or id:<numeric user id>.","example":"jack"},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Read the connected account's relationship with an X account","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/XRelationship"}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_user_not_found: unknown account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/users/{screen_name}/follow":{"post":{"summary":"Follow an X account","description":"Follows the account from the connected X account, within the account's follow quota and pacing. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"screen_name","in":"path","required":true,"schema":{"type":"string"},"description":"X screen name (with or without @), or id:<numeric user id>.","example":"jack"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Follow an X account","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"user_id":{"type":["string","null"]},"screen_name":{"type":["string","null"]},"following":{"type":"boolean"},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/users/{screen_name}/unfollow":{"post":{"summary":"Unfollow an X account","description":"Stops following the account from the connected X account, within the account's unfollow quota. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"screen_name","in":"path","required":true,"schema":{"type":"string"},"description":"X screen name (with or without @), or id:<numeric user id>.","example":"jack"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Unfollow an X account","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"user_id":{"type":["string","null"]},"screen_name":{"type":["string","null"]},"following":{"type":"boolean"},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/tweets":{"post":{"summary":"Publish an X post","description":"Publishes one approved post from the connected X account: text, optional reply_to_tweet_id or quote_tweet_id, and up to 4 media_ids from x.media.upload. Posts over 280 weighted characters are published as long posts when the account has X Premium. 409 x_duplicate_tweet when X refuses an identical post. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Exact approved text with real line breaks. May be empty only when media_ids is set."},"reply_to_tweet_id":{"type":"string","pattern":"^[0-9]+$"},"quote_tweet_id":{"type":"string","pattern":"^[0-9]+$"},"media_ids":{"type":"array","maxItems":4,"items":{"type":"string","pattern":"^[0-9]+$"}}}},"example":{"text":"APPROVED_TEXT","reply_to_tweet_id":"20"}}}},"responses":{"200":{"description":"Publish an X post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"allOf":[{"$ref":"#/components/schemas/XTweet"},{"type":"object","properties":{"job_id":{"type":"string"},"status":{"type":"string","enum":["posted"]}}}]}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}":{"get":{"summary":"Read an X post","description":"Returns one post: full text (long posts included), author, reply, quote and repost references, engagement and view counts, media, links, mentions and hashtags.","x-required-scope":"x:read","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Read an X post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/XTweet"}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_tweet_not_found: deleted or hidden post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/replies":{"get":{"summary":"List the replies to an X post","description":"Returns the replies below a post, in X's ranking order, in the same shape as a single post. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"List the replies to an X post","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XTweet"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_tweet_not_found: deleted or hidden post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/retweeters":{"get":{"summary":"List the accounts that reposted an X post","description":"Returns the accounts that reposted the post, as X profiles. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"List the accounts that reposted an X post","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XUser"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_tweet_not_found: deleted or hidden post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/likers":{"get":{"summary":"List the accounts that liked an X post","description":"Returns the accounts that liked the post, as X profiles. X shows likes only on the connected account's own posts: for other posts the list is empty. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"List the accounts that liked an X post","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XUser"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_tweet_not_found: deleted or hidden post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/delete":{"post":{"summary":"Delete an X post","description":"Deletes a post of the connected X account. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Delete an X post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"tweet_id":{"type":"string"},"deleted":{"type":"boolean"},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/like":{"post":{"summary":"Like an X post","description":"Likes the post from the connected X account; liking an already liked post succeeds with already_done=true. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Like an X post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"tweet_id":{"type":"string"},"liked":{"type":"boolean"},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/unlike":{"post":{"summary":"Remove a like from an X post","description":"Removes the connected account's like from the post. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Remove a like from an X post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"tweet_id":{"type":"string"},"liked":{"type":"boolean"},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/retweet":{"post":{"summary":"Repost an X post","description":"Reposts the post from the connected X account and returns retweet_id. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Repost an X post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"tweet_id":{"type":"string"},"retweeted":{"type":"boolean"},"retweet_id":{"type":["string","null"]},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/unretweet":{"post":{"summary":"Undo a repost of an X post","description":"Removes the connected account's repost of the post. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Undo a repost of an X post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"tweet_id":{"type":"string"},"retweeted":{"type":"boolean"},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/bookmark":{"post":{"summary":"Bookmark an X post","description":"Adds the post to the connected account's bookmarks. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Bookmark an X post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"tweet_id":{"type":"string"},"bookmarked":{"type":"boolean"},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/tweets/{tweet_id}/unbookmark":{"post":{"summary":"Remove an X bookmark","description":"Removes the post from the connected account's bookmarks. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Numeric post id (the digits after /status/ in the post URL).","example":"20"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Remove an X bookmark","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"tweet_id":{"type":"string"},"bookmarked":{"type":"boolean"},"already_done":{"type":"boolean"},"job_id":{"type":"string"},"status":{"type":"string","enum":["done"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/bookmarks":{"get":{"summary":"List the connected account's X bookmarks","description":"Returns the connected account's bookmarked posts, most recently bookmarked first, in the same shape as a single post. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"List the connected account's X bookmarks","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XTweet"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"Not used","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/search":{"get":{"summary":"Search X posts","description":"Searches posts like the X search box. query accepts X search operators (from:, to:, since:, until:, filter:, lang:, quoted phrases); type is latest (default) or top. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","maxLength":500},"example":"linkedin outreach since:2026-10-01"},{"name":"type","in":"query","schema":{"type":"string","enum":["latest","top"],"default":"latest"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Search X posts","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XTweet"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"Not used","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/notifications":{"get":{"summary":"List the connected account's X notifications","description":"Returns the connected account's notifications, newest first. type is all (default) or mentions. limit is 1 to 100 (default 20); pass next_cursor as cursor for the next page (null on the last page).","x-required-scope":"x:read","parameters":[{"name":"type","in":"query","schema":{"type":"string","enum":["all","mentions"],"default":"all"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"List the connected account's X notifications","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/XNotification"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"First page still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"Not used","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/articles/{article_id}":{"get":{"summary":"Read an X Article","description":"Returns an X Article of the connected account: title, preview, plain text, status (draft or published), cover image, publication time and the post that shares it.","x-required-scope":"x:read","parameters":[{"name":"article_id","in":"path","required":true,"schema":{"type":"string"},"description":"Numeric article id or the article URL."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"responses":{"200":{"description":"Read an X Article","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/XArticle"}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"x_article_not_found: no article of the connected account matches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["X"]}},"/v1/x/messages":{"post":{"summary":"Send an X direct message","description":"Sends one approved text to recipient_user_id (a numeric X user id) or to a one-to-one conversation_id, exactly one of the two. For a few approved DMs to several people, call this endpoint once per recipient; do not build a campaign for that. Wannalead first checks that the recipient accepts messages from the connected account and answers 409 x_dm_closed otherwise. Requires x:write, workspace X writes enabled, a stable Idempotency-Key and the confirmation header. A write still queued returns 202: retry the same call with the same Idempotency-Key to read its outcome. A 504 x_outcome_unknown must be checked on X before any new attempt.","x-required-scope":"x:write","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the exact action and content were approved."},{"name":"account_id","in":"query","schema":{"type":"string"},"description":"Connected X account to use when several are connected (or the X-Wannalead-Account header)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"recipient_user_id":{"type":"string","pattern":"^[0-9]+$"},"conversation_id":{"type":"string","pattern":"^[0-9]+-[0-9]+$"},"text":{"type":"string","minLength":1,"maxLength":10000}}},"example":{"recipient_user_id":"12","text":"APPROVED_TEXT"}}}},"responses":{"200":{"description":"Send an X direct message","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"message_id":{"type":"string"},"conversation_id":{"type":["string","null"]},"sent_at":{"type":["string","null"],"format":"date-time"},"recipient_user_id":{"type":"string"},"job_id":{"type":"string"},"status":{"type":"string","enum":["sent"]}}}}}}}},"202":{"description":"Write queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"},"504":{"description":"x_outcome_unknown: verify on X before any new attempt"}},"tags":["X"]}},"/v1/x/media/upload":{"post":{"summary":"Transfer and upload a bounded image to X","x-required-scope":"x:write","description":"INIT creates a receiving upload (total_bytes <= 5242880; JPEG, PNG or WebP). APPEND sends ordered 256 KiB base64 chunks with upload_id and segment_index. FINALIZE queues native browser upload; follow Location until ready. STATUS reads the upload. Each POST requires Idempotency-Key; repeated chunks must match byte-for-byte. GIF/video are not supported.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["command"],"properties":{"command":{"type":"string","enum":["INIT","APPEND","FINALIZE","STATUS"]},"total_bytes":{"type":"integer","minimum":1,"maximum":5242880},"media_type":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"upload_id":{"type":"string"},"segment_index":{"type":"integer","minimum":0},"data_base64":{"type":"string","maxLength":349528}}}}}},"responses":{"200":{"description":"Upload accepted or current status"},"202":{"description":"Native upload queued; poll Location"},"409":{"description":"Upload or chunk conflicts"}},"tags":["X"]}},"/v1/x/media/upload/{upload_id}":{"get":{"summary":"Inspect X image upload progress","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Upload state and media_id once ready"},"404":{"description":"Unknown or expired upload"}},"tags":["X"]}},"/v1/x/mirror/status":{"get":{"summary":"Inspect X mirror coverage and freshness","x-required-scope":"x:read","description":"Workspace scoped. DMs and relationship events require owner/admin membership. Records include observation timestamps; connections use complete snapshot generations.","parameters":[],"responses":{"200":{"description":"Mirror data with cursor and freshness"},"403":{"description":"Membership or private-data access denied"}},"tags":["X"]}},"/v1/x/mirror/conversations":{"get":{"summary":"List stored X DM conversations","x-required-scope":"x:read","description":"Workspace scoped. DMs and relationship events require owner/admin membership. Records include observation timestamps; connections use complete snapshot generations.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Mirror data with cursor and freshness"},"403":{"description":"Membership or private-data access denied"}},"tags":["X"]}},"/v1/x/mirror/conversations/{conversation_id}/messages":{"get":{"summary":"Read stored X DM messages","x-required-scope":"x:read","description":"Workspace scoped. DMs and relationship events require owner/admin membership. Records include observation timestamps; connections use complete snapshot generations.","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Mirror data with cursor and freshness"},"403":{"description":"Membership or private-data access denied"}},"tags":["X"]}},"/v1/x/mirror/mentions":{"get":{"summary":"Read stored X mentions and replies","x-required-scope":"x:read","description":"Workspace scoped. DMs and relationship events require owner/admin membership. Records include observation timestamps; connections use complete snapshot generations.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Mirror data with cursor and freshness"},"403":{"description":"Membership or private-data access denied"}},"tags":["X"]}},"/v1/x/mirror/posts":{"get":{"summary":"Read own X posts and observed metrics","x-required-scope":"x:read","description":"Workspace scoped. DMs and relationship events require owner/admin membership. Records include observation timestamps; connections use complete snapshot generations.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Mirror data with cursor and freshness"},"403":{"description":"Membership or private-data access denied"}},"tags":["X"]}},"/v1/x/mirror/connections":{"get":{"summary":"Read a completed X connection snapshot","x-required-scope":"x:read","description":"Workspace scoped. DMs and relationship events require owner/admin membership. Records include observation timestamps; connections use complete snapshot generations.","parameters":[{"name":"direction","in":"query","required":true,"schema":{"type":"string","enum":["followers","following"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Mirror data with cursor and freshness"},"403":{"description":"Membership or private-data access denied"}},"tags":["X"]}},"/v1/x/mirror/relationship-events":{"get":{"summary":"Read X follow-back and reply events","x-required-scope":"x:read","description":"Workspace scoped. DMs and relationship events require owner/admin membership. Records include observation timestamps; connections use complete snapshot generations.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Mirror data with cursor and freshness"},"403":{"description":"Membership or private-data access denied"}},"tags":["X"]}},"/v1/x/campaigns/preview":{"post":{"summary":"Preview a personalized X campaign","x-required-scope":"x:write","description":"Use a campaign only when the user asks for one or for a multi-step sequence; to send a few approved DMs, call x.messages.send once per recipient instead. Up to 100 targets and 20 expanded steps per target. Supply x_user_id, optional tweet_id and texts keyed by step key (or its zero-based index). A DM text may be an array of bubbles. hot_only steps skip targets not marked hot. Preview expires after 15 minutes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["steps","targets"],"properties":{"name":{"type":"string"},"timezone":{"type":"string","default":"UTC"},"window":{"type":"object"},"steps":{"type":"array","maxItems":20,"items":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["reply_to_tweet","like_tweet","follow","dm","wait","if_followed_back","stop_on_reply"]},"key":{"type":"string"},"wait_seconds":{"type":"integer","minimum":1},"hot_only":{"type":"boolean"}}}},"targets":{"type":"array","maxItems":100,"items":{"type":"object","required":["x_user_id"],"properties":{"x_user_id":{"type":"string"},"tweet_id":{"type":"string"},"texts":{"type":"object"},"hot":{"type":"boolean"}}}}}}}}},"responses":{"200":{"description":"Reviewable preview and preview_id"}},"tags":["X"]}},"/v1/x/campaigns":{"post":{"summary":"Create an X campaign from a preview","x-required-scope":"x:write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["preview_id"],"properties":{"preview_id":{"type":"string"}}}}}},"responses":{"201":{"description":"Draft campaign; launch separately"}},"tags":["X"]}},"/v1/x/campaigns/{campaign_id}":{"get":{"summary":"Read X campaign state","x-required-scope":"x:read","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Campaign result"},"404":{"description":"Campaign not found in workspace"}},"tags":["X"]}},"/v1/x/campaigns/{campaign_id}/targets":{"get":{"summary":"List X campaign targets","x-required-scope":"x:read","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Campaign result"},"404":{"description":"Campaign not found in workspace"}},"tags":["X"]}},"/v1/x/campaigns/{campaign_id}/kpis":{"get":{"summary":"Read X campaign metrics by step and day","x-required-scope":"x:read","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Campaign result"},"404":{"description":"Campaign not found in workspace"}},"tags":["X"]}},"/v1/x/campaigns/{campaign_id}/launch":{"post":{"summary":"Launch an X campaign","x-required-scope":"x:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Campaign result"},"404":{"description":"Campaign not found in workspace"}},"tags":["X"]}},"/v1/x/campaigns/{campaign_id}/pause":{"post":{"summary":"Pause an X campaign","x-required-scope":"x:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Campaign result"},"404":{"description":"Campaign not found in workspace"}},"tags":["X"]}},"/v1/x/campaigns/{campaign_id}/resume":{"post":{"summary":"Resume an X campaign","x-required-scope":"x:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Campaign result"},"404":{"description":"Campaign not found in workspace"}},"tags":["X"]}},"/v1/x/campaigns/{campaign_id}/cancel":{"post":{"summary":"Cancel an X campaign","x-required-scope":"x:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Campaign result"},"404":{"description":"Campaign not found in workspace"}},"tags":["X"]}},"/v1/x/threads/{tweet_id}/engagers":{"get":{"summary":"Collect a thread author, repliers and quote authors with bios","x-required-scope":"x:read","description":"Traverses the main and nested reply cursors, then quoted_tweet_id search. People are deduplicated across roles. A running collection returns 202 and Location; completed results paginate with next_cursor and run_id.","parameters":[{"name":"tweet_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"query","schema":{"type":"string"}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Completed deduplicated audience page"},"202":{"description":"Collection in progress; poll Location"}},"tags":["X"]}},"/onboarding/x-state":{"get":{"summary":"Read workspace X connection and health state","security":[],"responses":{"200":{"description":"Session workspace state and availability"}},"tags":["Workspace & billing"]}},"/onboarding/x-confirm-account":{"post":{"summary":"Confirm a new X account for this browser","security":[],"description":"Owner/admin only. Requires the exact observed pending account ID. Revokes the previous browser session and returns a one-time pairing token; previous history and campaigns retain their original account.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["account_id","expected_x_user_id"],"properties":{"account_id":{"type":"string"},"expected_x_user_id":{"type":"string"}}}}}},"responses":{"200":{"description":"New constrained pairing token"},"409":{"description":"Observed account changed or is already bound"}},"tags":["Workspace & billing"]}},"/v1/x/status":{"get":{"summary":"X account and add-on status","responses":{"200":{"description":"Connected accounts and entitlement"}},"tags":["X"]}},"/v1/x/routes":{"get":{"summary":"List the X business routes","responses":{"200":{"description":"Wrapped X routes with method, path, quota kind and whether they write"}},"tags":["X"]}},"/v1/x/jobs/{job_id}":{"get":{"summary":"Inspect an X API job","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job status, upstream status and result_url"}},"tags":["X"]}},"/v1/x/jobs/{job_id}/result":{"get":{"summary":"Read the raw result of a completed X API job","description":"Returns the unprocessed upstream answer of a finished job. Prefer the wrapped X endpoints, which return Wannalead shapes.","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Unprocessed upstream result"},"202":{"description":"Pending"}},"tags":["X"]}},"/v1/x/limits":{"get":{"summary":"X rolling quotas and cooldowns","x-required-scope":"x:read","responses":{"200":{"description":"Used and remaining quotas by action kind"}},"tags":["X"]},"patch":{"summary":"Set bounded X quota overrides","x-required-scope":"x:write","description":"Owner/admin only. Increasing posts above 60/day requires seven healthy days.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["overrides"],"properties":{"overrides":{"type":"array","items":{"type":"object","required":["kind"],"properties":{"kind":{"type":"string"},"daily":{"type":"integer","minimum":1},"weekly":{"type":"integer","minimum":1},"short":{"type":"integer","minimum":1}}}}}}}}},"responses":{"200":{"description":"Overrides updated"},"403":{"description":"Admin required"}},"tags":["X"]}},"/v1/x/health":{"get":{"summary":"X account health and history readiness","responses":{"200":{"description":"Health status, pauses, and available history"}},"tags":["X"]}},"/extension/x/pairing-token":{"post":{"summary":"Create an X browser pairing token","security":[],"description":"Requires a web session and an approved extension or same-origin request.","responses":{"200":{"description":"Single-use pairing token"},"402":{"description":"X add-on required"}},"tags":["Connections & clients"]}},"/onboarding/linkedin-pricing":{"post":{"summary":"LinkedIn plan pricing for the session workspace","security":[],"responses":{"200":{"description":"Base or add-on LinkedIn price and billing interval (monthly, or yearly when offered), depending on the channel subscriptions held"}},"tags":["Workspace & billing"]}},"/onboarding/billing-interval":{"post":{"summary":"Switch the session workspace's monthly channels to yearly","security":[],"description":"{\"preview\": true} (default) returns the amount due today; {\"preview\": false} with an Idempotency-Key charges it and switches every monthly channel.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"preview":{"type":"boolean","default":true}}}}}},"responses":{"200":{"description":"Preview of the amount due, or the switched channels"},"400":{"description":"Idempotency-Key required to charge"},"402":{"description":"Payment pending"},"403":{"description":"Workspace admin required"},"409":{"description":"Nothing to switch, or the switch is blocked"},"503":{"description":"Switch temporarily unavailable"}},"tags":["Workspace & billing"]}},"/onboarding/plan-upgrade":{"post":{"summary":"Move the session workspace from a launch first-channel Price to the 69 Pro Price","security":[],"description":"For workspaces still billed $15 or $30 for their first channel. {\"preview\": true} (default) returns the new monthly price and the prorated amount due today; {\"preview\": false} with an Idempotency-Key charges it and switches the existing subscription (Signals included).","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"preview":{"type":"boolean","default":true}}}}}},"responses":{"200":{"description":"Preview of the amount due, or the upgraded channel"},"400":{"description":"Idempotency-Key required to charge"},"402":{"description":"Payment pending"},"403":{"description":"Workspace admin required"},"409":{"description":"Nothing to upgrade, or the upgrade is blocked"},"503":{"description":"Upgrade temporarily unavailable"}},"tags":["Workspace & billing"]}},"/onboarding/linkedin-checkout":{"post":{"summary":"Create LinkedIn add-on checkout","security":[],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Stripe Checkout URL"},"403":{"description":"Workspace admin required"}},"tags":["Workspace & billing"]}},"/onboarding/x-billing-state":{"post":{"summary":"X add-on billing state","security":[],"responses":{"200":{"description":"Session workspace X billing"}},"tags":["Workspace & billing"]}},"/onboarding/x-checkout":{"post":{"summary":"Create X add-on checkout","security":[],"description":"An add-on bills on the interval of the channels already paid; yearly checkouts take no promotion code.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"interval":{"type":"string","enum":["month","year"],"default":"month"}}}}}},"responses":{"200":{"description":"Stripe Checkout URL"},"403":{"description":"Workspace admin required"}},"tags":["Workspace & billing"]}},"/onboarding/facebook-billing-state":{"post":{"summary":"Facebook add-on billing state","security":[],"responses":{"200":{"description":"Session workspace Facebook billing, availability and access"}},"tags":["Workspace & billing"]}},"/onboarding/facebook-checkout":{"post":{"summary":"Create Facebook add-on checkout","security":[],"description":"An add-on bills on the interval of the channels already paid; yearly checkouts take no promotion code.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"interval":{"type":"string","enum":["month","year"],"default":"month"}}}}}},"responses":{"200":{"description":"Stripe Checkout URL"},"403":{"description":"Workspace admin required"},"409":{"description":"Add-on already active, or Facebook not yet sold"}},"tags":["Workspace & billing"]}},"/v1/instagram/status":{"get":{"summary":"Instagram account and feature status","responses":{"200":{"description":"Bound account status"}},"tags":["Instagram"]}},"/v1/instagram/routes":{"get":{"summary":"List the current Instagram route allowlist","responses":{"200":{"description":"Allowed method/path pairs"}},"tags":["Instagram"]}},"/v1/instagram/jobs/{job_id}":{"get":{"summary":"Inspect an Instagram API job","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job state and result"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/jobs/{job_id}/result":{"get":{"summary":"Read the raw result of a completed Instagram API job","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Instagram JSON response"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/profiles/{username}":{"get":{"summary":"Read an Instagram profile","description":"Returns the public profile of an Instagram account through the connected Instagram account. Pass the username, or id:<user id> for a numeric Instagram user id. A 202 means the read is still running: retry the same call a few seconds later.","x-required-scope":"instagram:read","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram username (with or without @), or id:<numeric user id>.","example":"jbaptisten"}],"responses":{"200":{"description":"Profile","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramProfile"}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_profile_not_found: unknown or private account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/profiles/{username}/similar":{"get":{"summary":"List Instagram accounts similar to a profile","description":"Returns the accounts Instagram suggests next to this profile (its \"Suggested for you\" list), in Instagram's order. Instagram answers one list of up to 80 accounts without pagination. Suggestions mix peers, brands and fan accounts; qualify them with GET /v1/instagram/profiles/{username}. A seed the connected account already follows returns its personal suggestions instead.","x-required-scope":"instagram:read","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"},"description":"Seed Instagram username, or id:<numeric user id>."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":80,"default":80}}],"responses":{"200":{"description":"Similar accounts","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramSimilarProfile"}}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_profile_not_found: unknown account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/profiles/{username}/stories":{"get":{"summary":"List an Instagram account's live stories","description":"Returns the account's current 24-hour stories (not its highlights), in play order, with the story_media_id, reel_id and recipient_user_id that POST /v1/instagram/stories/reply and /v1/instagram/stories/react take. An account without a live story returns an empty list.","x-required-scope":"instagram:read","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram username, or id:<numeric user id>."}],"responses":{"200":{"description":"Live stories","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramStory"}}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_profile_not_found: unknown account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/profiles/{username}/posts":{"get":{"summary":"List an Instagram profile's posts","description":"Returns the account's latest posts in profile order with engagement, partnerships, co-authors, tagged users, mentions and hashtags. Likes are null when the author hides them. Pass next_cursor as cursor for the next page; it is null on the last page. View counts come from GET /v1/instagram/posts/{post_id}.","x-required-scope":"instagram:read","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram username, or id:<numeric user id>."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":12}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page."}],"responses":{"200":{"description":"A page of posts","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramPost"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_profile_not_found: unknown or private account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/posts/{post_id}":{"get":{"summary":"Read an Instagram post with its views","description":"Returns one post in the same shape as the profile posts list, plus views_count (all plays) and views_instagram (plays on Instagram). Pass the numeric post id or the shortcode from the post URL.","x-required-scope":"instagram:read","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"},"description":"Numeric post id, or the shortcode from instagram.com/p/<shortcode>/ or /reel/<shortcode>/.","example":"DecLqVPIh7f"}],"responses":{"200":{"description":"Post","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"allOf":[{"$ref":"#/components/schemas/InstagramPost"},{"type":"object","properties":{"views_count":{"type":["integer","null"]},"views_instagram":{"type":["integer","null"]}}}]}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_post_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/profiles/{username}/followers":{"get":{"summary":"List the followers of an Instagram account","description":"Returns the followers of a public account in Instagram's order, as normalised profiles. Pass next_cursor as cursor for the next page; it is null on the last page. A private account the connected account does not follow is refused by Instagram (404). Experimental: Instagram may change this list without notice. Each Instagram page is one read of the connected account and counts against its read pacing.","x-required-scope":"instagram:read","x-reliability":"experimental","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram username, or id:<numeric user id>."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page."}],"responses":{"200":{"description":"A page of accounts","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramSourceProfile"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"total_count":{"type":["integer","null"],"description":"Instagram's own total (likes or comments) when it gives one."}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_profile_not_found: unknown or private account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/profiles/{username}/following":{"get":{"summary":"List the accounts an Instagram account follows","description":"Returns the accounts a public account follows, in Instagram's order, as normalised profiles. Pass next_cursor as cursor for the next page; it is null on the last page. Experimental: Instagram may change this list without notice. Each Instagram page is one read of the connected account and counts against its read pacing.","x-required-scope":"instagram:read","x-reliability":"experimental","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram username, or id:<numeric user id>."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page."}],"responses":{"200":{"description":"A page of accounts","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramSourceProfile"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"total_count":{"type":["integer","null"],"description":"Instagram's own total (likes or comments) when it gives one."}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_profile_not_found: unknown or private account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/posts/{post_id}/likers":{"get":{"summary":"List the accounts that liked an Instagram post","description":"Returns the accounts that liked a post or reel. Instagram shows at most 100 likers per post, without pagination, whatever the like count: total_count is the full like count, next_cursor is always null. Experimental: Instagram may change this list without notice. Each Instagram page is one read of the connected account and counts against its read pacing.","x-required-scope":"instagram:read","x-reliability":"experimental","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"},"description":"Numeric post id (media_pk), the shortcode, or the URL-encoded post URL.","example":"DecLqVPIh7f"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":100}}],"responses":{"200":{"description":"A page of accounts","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramSourceProfile"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"total_count":{"type":["integer","null"],"description":"Instagram's own total (likes or comments) when it gives one."}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_post_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/posts/{post_id}/commenters":{"get":{"summary":"List the comments of an Instagram post with their authors","description":"Returns the top-level comments of a post or reel, each with its author's profile and the comment text, date, likes and reply count. sort is recent (default) or popular. unique_authors=true keeps one row per author within the page; deduplicate across pages by ig_user_id. Experimental: Instagram may change this list without notice. Each Instagram page is one read of the connected account and counts against its read pacing.","x-required-scope":"instagram:read","x-reliability":"experimental","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"},"description":"Numeric post id (media_pk), the shortcode, or the URL-encoded post URL.","example":"DecLqVPIh7f"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"sort","in":"query","required":false,"schema":{"enum":["recent","popular"],"default":"recent"}},{"name":"unique_authors","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Keep only the first row of each author within this page."}],"responses":{"200":{"description":"A page of accounts","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCommenter"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"total_count":{"type":["integer","null"],"description":"Instagram's own total (likes or comments) when it gives one."}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_post_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/hashtags/{tag}/posts":{"get":{"summary":"List the posts under an Instagram hashtag with their authors","description":"Returns the posts Instagram ranks for a hashtag (its keyword grid, top posts first; Instagram Web has no recent-only hashtag feed any more), each with its author's profile and the post's media_pk, URL, type, date, caption and counts. unique_authors=true keeps one post per author within the page. Requires Chrome extension 0.1.30 or newer. Experimental: Instagram may change this list without notice. Each Instagram page is one read of the connected account and counts against its read pacing.","x-required-scope":"instagram:read","x-reliability":"experimental","parameters":[{"name":"tag","in":"path","required":true,"schema":{"type":"string"},"description":"Hashtag, with or without # (URL-encode it as %23).","example":"growthmarketing"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"unique_authors","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Keep only the first row of each author within this page."}],"responses":{"200":{"description":"A page of accounts","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramHashtagPost"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"total_count":{"type":["integer","null"],"description":"Instagram's own total (likes or comments) when it gives one."}}}}}},"202":{"description":"Read still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_hashtag_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages":{"post":{"summary":"Send an Instagram Direct text message","description":"Sends one approved text to a recipient or an existing conversation through the connected Instagram account. For a few approved DMs to several people, call this endpoint once per recipient: the server spaces the sends, so do not build a campaign for that. Send exactly one of recipient_user_id or thread_id. Approve the recipient and the exact text before setting the confirmation header. Sends are spaced about 20 seconds apart per account: a 202 means the send is queued; retry the same call with the same Idempotency-Key to read its outcome. A 504 outcome-unknown must be checked in the conversation before any new send. The same text to the same recipient within 24 hours, under any Idempotency-Key, is refused with 409 instagram_duplicate_message and the existing job_id and message_id. To list what was sent, use GET /v1/instagram/messages/sent rather than the mirror, which can lag behind.","x-required-scope":"instagram:write","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]},"description":"Explicit confirmation that the recipient and the exact text were approved."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"recipient_user_id":{"type":"string","pattern":"^[0-9]+$","description":"Numeric Instagram user id of the recipient."},"thread_id":{"type":"string","description":"Existing Direct conversation id."},"text":{"type":"string","minLength":1,"maxLength":1000},"reply_to_message_id":{"type":"string","description":"Optional Direct message id to reply to; requires thread_id."}}},"example":{"recipient_user_id":"49354775","text":"APPROVED_TEXT"}}}},"responses":{"200":{"description":"Message sent","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"message_id":{"type":["string","null"]},"thread_id":{"type":["string","null"]},"sent_at":{"type":["string","null"],"format":"date-time"},"job_id":{"type":"string"},"status":{"type":"string","enum":["sent"]}}}}}}}},"202":{"description":"Send queued; retry with the same Idempotency-Key or poll Location"},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"description":"instagram_recipient_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages/reply":{"post":{"summary":"Reply to an Instagram Direct message","x-required-scope":"instagram:write","description":"Send one approved text as a reply in an existing thread. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_id","reply_to_message_id","text"],"properties":{"thread_id":{"type":"string"},"reply_to_message_id":{"type":"string"},"text":{"type":"string","minLength":1,"maxLength":1000}}}}}},"responses":{"200":{"description":"Reply sent with message_id, thread_id, sent_at and job_id"},"202":{"description":"Reply queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages/share":{"post":{"summary":"Share Instagram content in Direct","x-required-scope":"instagram:write","description":"Share an existing post, reel, story, GIF or sticker with one approved recipient or thread. Send exactly one of thread_id or recipient_user_id. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["kind","content_id"],"properties":{"kind":{"type":"string","enum":["media","reel","story","gif","sticker","cutout_sticker","music_sticker","store_sticker"]},"thread_id":{"type":"string"},"recipient_user_id":{"type":"string","pattern":"^[0-9]+$"},"content_id":{"type":"string"},"reel_id":{"type":"string","description":"Required for story shares."},"text":{"type":"string","maxLength":1000,"description":"Optional for reel and story shares only."}}}}}},"responses":{"200":{"description":"Content sent with message_id and job_id"},"202":{"description":"Share queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages/edit":{"post":{"summary":"Edit an Instagram Direct message","x-required-scope":"instagram:write","description":"Replace the text of one sent message. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_id","message_id","text"],"properties":{"thread_id":{"type":"string"},"message_id":{"type":"string"},"text":{"type":"string","minLength":1,"maxLength":1000}}}}}},"responses":{"200":{"description":"Message edited"},"202":{"description":"Edit queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages/forward":{"post":{"summary":"Forward an Instagram Direct media item","x-required-scope":"instagram:write","description":"Forward an existing media attachment with its source thread and item identifiers. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source_thread_id","source_item_id","attachment_fbid","is_own_message"],"properties":{"thread_id":{"type":"string"},"recipient_user_id":{"type":"string","pattern":"^[0-9]+$"},"source_thread_id":{"type":"string"},"source_item_id":{"type":"string"},"attachment_fbid":{"type":"string"},"is_own_message":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Media forwarded with message_id and job_id"},"202":{"description":"Forward queued; poll Location"},"400":{"$ref":"#/components/responses/Error"},"409":{"description":"Instagram extension 0.1.28 or newer required"}},"tags":["Instagram"]}},"/v1/instagram/messages/media":{"post":{"summary":"Send an uploaded Instagram Direct media attachment","x-required-scope":"instagram:write","description":"Send a photo, video or voice attachment already uploaded through Instagram Mercury. attachment_fbid is the numeric fbid from that upload, not a post id. This route does not transfer the binary. Requires an existing thread, Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_id","attachment_fbid"],"properties":{"thread_id":{"type":"string"},"attachment_fbid":{"type":"string","pattern":"^[0-9]+$"},"reply_to_message_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Media message sent with message_id and job_id"},"202":{"description":"Send queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages/unsend":{"post":{"summary":"Unsend an Instagram Direct message","x-required-scope":"instagram:write","description":"Remove one sent message for everyone after approval of the exact thread and message id. Only outgoing Relay messages already present in the mirror are eligible; older REST-only or not-yet-mirrored messages return 409. The mirror redacts its copy when the provider job completes. Requires Chrome extension 0.1.29 or newer, Idempotency-Key and X-Wannalead-Confirm-Write: true. Check an uncertain outcome before using a new key.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_id","message_id"],"properties":{"thread_id":{"type":"string"},"message_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Message unsent and mirrored copy redacted"},"202":{"description":"Unsend queued; poll Location"},"400":{"$ref":"#/components/responses/Error"},"409":{"description":"Message not mirrored or extension update required"}},"tags":["Instagram"]}},"/v1/instagram/conversations/mute":{"post":{"summary":"Mute or unmute an Instagram Direct conversation","x-required-scope":"instagram:write","description":"Set the connected account's notification mute duration. Use thread_v2_id from the conversation mirror; 0 unmutes, -1 mutes indefinitely. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_v2_id","mute_seconds"],"properties":{"thread_v2_id":{"type":"string"},"mute_seconds":{"type":"integer","enum":[0,-1,3600,28800,86400]}}}}}},"responses":{"200":{"description":"Mute state applied"},"202":{"description":"Change queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/conversations/unread":{"post":{"summary":"Set an Instagram Direct conversation's unread marker","x-required-scope":"instagram:write","description":"Mark a conversation unread or clear its manual unread marker. Use thread_v2_id from the mirror. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_v2_id","unread"],"properties":{"thread_v2_id":{"type":"string"},"unread":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Unread marker applied"},"202":{"description":"Change queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/conversations/hide":{"post":{"summary":"Hide a one-to-one Instagram Direct conversation","x-required-scope":"instagram:write","description":"Remove one verified one-to-one conversation from the connected account's Instagram inbox. Group and channel deletion is refused. Requires matching thread_id and thread_v2_id from the mirror, Chrome extension 0.1.29 or newer, Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_id","thread_v2_id"],"properties":{"thread_id":{"type":"string"},"thread_v2_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Conversation hidden in Instagram"},"202":{"description":"Hide queued; poll Location"},"400":{"$ref":"#/components/responses/Error"},"403":{"description":"Group or channel hide refused"},"404":{"description":"Conversation not found in the mirror"},"409":{"description":"Extension update required"}},"tags":["Instagram"]}},"/v1/instagram/conversations/group":{"post":{"summary":"Create an Instagram Direct group","x-required-scope":"instagram:write","description":"Create one group from 2 to 32 distinct messaging_user_id values returned by the Direct recipient search. Approve the exact members before setting the confirmation header. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["recipient_messaging_user_ids"],"properties":{"recipient_messaging_user_ids":{"type":"array","minItems":2,"maxItems":32,"uniqueItems":true,"items":{"type":"string","pattern":"^[0-9]+$"}}}}}}},"responses":{"201":{"description":"Group created with thread_key and job_id"},"202":{"description":"Creation queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/stories/reply":{"post":{"summary":"Reply to an Instagram story","x-required-scope":"instagram:write","description":"Send one approved text reply to a visible story. Take story_media_id, reel_id and recipient_user_id from GET /v1/instagram/profiles/{username}/stories. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true. The same reply to the same story within 24 hours is refused with 409 instagram_duplicate_message and the existing job_id and message_id.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["story_media_id","reel_id","recipient_user_id","text"],"properties":{"story_media_id":{"type":"string","pattern":"^[0-9]+$"},"reel_id":{"type":"string","pattern":"^[0-9]+$"},"recipient_user_id":{"type":"string","pattern":"^[0-9]+$"},"text":{"type":"string","minLength":1,"maxLength":1000}}}}}},"responses":{"200":{"description":"Story reply sent with message_id, sent_at and job_id"},"202":{"description":"Reply queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/stories/react":{"post":{"summary":"React to an Instagram story","x-required-scope":"instagram:write","description":"Send one approved emoji reaction to a visible story. Take story_media_id, reel_id and recipient_user_id from GET /v1/instagram/profiles/{username}/stories. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["story_media_id","reel_id","recipient_user_id","emoji"],"properties":{"story_media_id":{"type":"string","pattern":"^[0-9]+$"},"reel_id":{"type":"string","pattern":"^[0-9]+$"},"recipient_user_id":{"type":"string","pattern":"^[0-9]+$"},"emoji":{"type":"string","minLength":1}}}}}},"responses":{"200":{"description":"Story reaction sent with message_id and job_id"},"202":{"description":"Reaction queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages/react":{"post":{"summary":"React to an Instagram Direct message","x-required-scope":"instagram:write","description":"Add an approved emoji reaction to one message. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_id","message_id","emoji"],"properties":{"thread_id":{"type":"string"},"message_id":{"type":"string"},"emoji":{"type":"string","minLength":1}}}}}},"responses":{"200":{"description":"Reaction applied"},"202":{"description":"Reaction queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages/unreact":{"post":{"summary":"Remove a reaction from an Instagram Direct message","x-required-scope":"instagram:write","description":"Remove the connected account's emoji reaction from one message. Requires Idempotency-Key and X-Wannalead-Confirm-Write: true.","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thread_id","message_id","emoji"],"properties":{"thread_id":{"type":"string"},"message_id":{"type":"string"},"emoji":{"type":"string","minLength":1}}}}}},"responses":{"200":{"description":"Reaction removed"},"202":{"description":"Removal queued; poll Location"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/users/search":{"get":{"summary":"Search Instagram accounts","description":"Searches accounts by name or handle through the connected Instagram account, like the Instagram Web search box, and returns them in Instagram's ranking order. followers_count is filled only when Instagram shows a follower count for the account (often verified accounts); otherwise social_context carries what Instagram shows instead, such as mutual followers, and followers_count is null. Pass personalized=false for Instagram's non-personalized search (the EU option that ignores the connected account's follows): same name and handle matching, at most 20 accounts, and followers_count on every row, so follower ranges can be filtered without one profile read per account. Chain a returned user_id into the other Instagram endpoints. A 202 means the search is still running: retry the same call a few seconds later.","x-required-scope":"instagram:read","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Name or handle to search for."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":"Maximum number of accounts to return."},{"name":"personalized","in":"query","required":false,"schema":{"type":"boolean","default":true},"description":"false runs Instagram's non-personalized search: ranking independent of the connected account, at most 20 accounts, followers_count set on every row."}],"responses":{"200":{"description":"Matching accounts","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["user_id","username"],"properties":{"user_id":{"type":"string"},"username":{"type":"string"},"full_name":{"type":["string","null"]},"is_verified":{"type":"boolean"},"is_private":{"type":["boolean","null"]},"followers_count":{"type":["integer","null"]},"followers_label":{"type":["string","null"],"description":"The follower count as Instagram displays it, in the connected account's language."},"social_context":{"type":["string","null"],"description":"The line Instagram shows under the account (follower count or mutual followers)."},"profile_pic_url":{"type":["string","null"]}}}}}}}}},"202":{"description":"Search still running; retry the same call"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/direct/recipients/search":{"get":{"summary":"Search Instagram Direct recipients","x-required-scope":"instagram:read","description":"Search the Direct recipient picker. Each user has a profile user_id and a distinct messaging_user_id required for group creation.","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":20,"default":20}}],"responses":{"200":{"description":"Matching Direct recipients"},"202":{"description":"Search queued; retry"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/messages/sent":{"get":{"summary":"List Instagram messages sent through the API","description":"Direct messages, story replies and story reactions this user sent through Wannalead, newest first, read from the send jobs: a message is listed as soon as Instagram confirms it, before the mirror shows the conversation. Use it to update a CRM or to check a send before anything else; never resend because a message is missing from the mirror. Rows: type (message, story_reply, story_reaction), message_id, recipient_user_id, thread_id, text, emoji, story_media_id, sent_at, job_id. Campaign sends are listed by the campaign endpoints.","x-required-scope":"instagram:read","parameters":[{"name":"since","in":"query","schema":{"type":"string","format":"date-time"},"description":"Oldest send to include. Defaults to 7 days ago."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."}],"responses":{"200":{"description":"Sent messages with next_cursor"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/mirror/status":{"get":{"summary":"Instagram mirror synchronization status","description":"Reads the stored Instagram account archive without calling Instagram. Direct messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"instagram:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/mirror/conversations":{"get":{"summary":"Stored Instagram Direct conversations","description":"Reads the stored Instagram account archive without calling Instagram. Direct messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"instagram:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/mirror/conversations/{thread_id}/messages":{"get":{"summary":"Stored Instagram Direct messages","description":"Reads the stored Instagram account archive without calling Instagram. Direct messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"instagram:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string"},"description":"URL-encoded Instagram Direct thread id."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/mirror/connections":{"get":{"summary":"Followers or following in the last complete snapshot","description":"Reads the stored Instagram account archive without calling Instagram. Direct messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"instagram:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"direction","in":"query","required":true,"schema":{"enum":["followers","following"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/mirror/relationship-events":{"get":{"summary":"Observed Instagram relationship transitions","description":"Reads the stored Instagram account archive without calling Instagram. Direct messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"instagram:read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/preview":{"post":{"summary":"Validate an Instagram campaign and create a short-lived preview","description":"Validates a step sequence against explicit targets and/or list sources and freezes the exact recipients and rendered copy; nothing is sent. Use a campaign only when the user asks for one or for a multi-step sequence (follow, wait, follow-up, stop on reply); to send a few approved DMs, call instagram.messages.send once per recipient instead. Steps: follow, like_post and comment_post (post: \"latest\" or a media_pk), send_dm, reply_story and react_story (max_wait_days 0-14), unfollow_if_no_follow_back (after_days 1-60, default 7), wait (wait_seconds of at least 60), if_followed_back, stop_on_reply; like_latest_post and comment_latest_post remain as aliases that need a target media_pk. Templates: {{first_name}}, {{username}}, {{full_name}}, {{var.<key>}}, with a fallback as {{name|default}}; literal \\n or \\uXXXX escapes are rejected. Returns 200 when ready, or 202 while usernames and sources resolve: poll instagram.campaigns.previews.get. The preview lists skipped targets (in_other_campaign, already_replied, opted_out), invalid ones, copy warnings, account readiness with an ETA, and rendered samples.","x-required-scope":"instagram:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstagramCampaignPreviewRequest"},"example":{"steps":[{"action":"follow"},{"action":"wait","wait_seconds":86400},{"action":"send_dm","text":"Hi {{first_name|there}}, loved {{var.topic|your last post}}"},{"action":"stop_on_reply"}],"targets":[{"ig_user_id":"49354775","first_name":"Ada","variables":{"topic":"your post on outbound"}}],"sources":[{"type":"followers","ref":"acme","limit":200,"exclude_private":true}]}}}},"responses":{"200":{"description":"Preview ready (status ready or failed)","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignPreview"}}}}}},"202":{"description":"Usernames or list sources still resolving; poll instagram.campaigns.previews.get","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignPreview"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/previews/{preview_token}":{"get":{"summary":"Poll an Instagram campaign preview","description":"Returns the same preview as instagram.campaigns.preview. Poll it while status is resolving (progress in resolution); create the campaign once status is ready. A failed preview carries its error code.","x-required-scope":"instagram:read","parameters":[{"name":"preview_token","in":"path","required":true,"schema":{"type":"string"},"description":"preview_token from instagram.campaigns.preview."}],"responses":{"200":{"description":"Preview","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignPreview"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns":{"get":{"summary":"List Instagram campaigns","description":"Lists the workspace's Instagram campaigns, newest first. Filter with status (draft, running, paused, completed, canceled, archived); limit is 1 to 100 (default 25); pass next_cursor as cursor for the next page.","x-required-scope":"instagram:read","parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["draft","running","paused","completed","canceled","archived"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."}],"responses":{"200":{"description":"A page of campaigns","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaign"}},"next_cursor":{"type":["string","null"],"description":"Pass as cursor for the next page; null on the last page."},"has_more":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]},"post":{"summary":"Create an Instagram campaign from an approved preview","description":"Creates a draft from a ready preview_token with a stable Idempotency-Key; nothing is sent until launch. timezone is an IANA zone (default UTC). window {days 0-6 with 0 = Sunday, start \"HH:MM\", end \"HH:MM\"} defaults to weekdays 09:00-20:00 in that zone; {} sends at any time. 409 instagram_campaign_preview_resolving while the preview is still resolving.","x-required-scope":"instagram:write","parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["preview_token"],"properties":{"preview_token":{"type":"string"},"name":{"type":"string","default":"Instagram campaign"},"timezone":{"type":"string","default":"UTC","description":"IANA time zone of the sending window."},"window":{"$ref":"#/components/schemas/InstagramCampaignWindow"}}},"example":{"preview_token":"igpreview_...","name":"Founders Paris","timezone":"Europe/Paris","window":{"days":[1,2,3,4,5],"start":"09:00","end":"20:00"}}}}},"responses":{"201":{"description":"Draft campaign","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaign"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}":{"get":{"summary":"Get an Instagram campaign","description":"Returns the campaign with its status (archived included), pause_reason and resume_at, window, dedupe, per-action counters (follows_sent, dms_sent, likes_sent, comments_sent, story_replies_sent, unfollows_sent; sent_count is a deprecated total) and last_progress_at.","x-required-scope":"instagram:read","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."}],"responses":{"200":{"description":"Campaign","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaign"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]},"patch":{"summary":"Update an Instagram campaign","description":"Changes name, timezone or window of a campaign that is not canceled or archived; the new window applies to the next due steps. Steps are immutable: a body with steps returns 400 instagram_campaign_steps_immutable (create a new campaign instead).","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":160},"timezone":{"type":"string","description":"IANA time zone."},"window":{"$ref":"#/components/schemas/InstagramCampaignWindow"}}},"example":{"window":{"days":[1,2,3,4,5],"start":"10:00","end":"18:00"}}}}},"responses":{"200":{"description":"Updated campaign","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaign"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/targets":{"get":{"summary":"List Instagram campaign targets","description":"Lists the campaign's targets with their status, status_reason, follow state, DM delivery (inbox or requests) and timestamps. limit is 1 to 100 (default 25); pass next_cursor as cursor for the next page.","x-required-scope":"instagram:read","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."}],"responses":{"200":{"description":"A page of targets","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignTarget"}},"next_cursor":{"type":["string","null"],"description":"Pass as cursor for the next page; null on the last page."},"has_more":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]},"post":{"summary":"Add targets to an Instagram campaign","description":"Adds up to 1000 targets to a draft, running or paused campaign; each needs a numeric ig_user_id (same fields as the preview targets). Requires a stable Idempotency-Key: a replay returns the first result. Rendered copy is checked per target; people already in the campaign, in another campaign, already replied or opted out are skipped (or 409 instagram_campaign_duplicate_contact with dedupe error). Returns 201 {accepted, target_ids, skipped, invalid}.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"$ref":"#/components/parameters/RequiredIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["targets"],"properties":{"targets":{"type":"array","minItems":1,"maxItems":1000,"items":{"$ref":"#/components/schemas/InstagramCampaignTargetInput"}}}},"example":{"targets":[{"ig_user_id":"49354775","first_name":"Ada"}]}}}},"responses":{"201":{"description":"Targets added","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["accepted","target_ids","skipped","invalid"],"properties":{"accepted":{"type":"integer"},"target_ids":{"type":"array","items":{"type":"string"}},"skipped":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignTargetIssue"}},"invalid":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignTargetIssue"}}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/targets/{target_id}":{"get":{"summary":"Get an Instagram campaign target and its steps","description":"Returns one target with its steps: position, action, status, verifying (an outcome still being checked), rendered text, media_pk, due_at, dispatch_started_at, dm_message_id, resend_count and error_code.","x-required-scope":"instagram:read","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"target_id","in":"path","required":true,"schema":{"type":"string"},"description":"Campaign target id from instagram.campaigns.targets or targets.add."}],"responses":{"200":{"description":"Target and steps","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignTargetDetail"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/targets/{target_id}/pause":{"post":{"summary":"Pause one Instagram campaign target","description":"Holds an open target (pending, active or waiting) without touching the rest of the campaign; resume it with instagram.campaigns.targets.resume.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"target_id","in":"path","required":true,"schema":{"type":"string"},"description":"Campaign target id from instagram.campaigns.targets or targets.add."}],"responses":{"200":{"description":"Updated target","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignTarget"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/targets/{target_id}/resume":{"post":{"summary":"Resume one Instagram campaign target","description":"Resumes a target paused with instagram.campaigns.targets.pause; 409 when it is not paused.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"target_id","in":"path","required":true,"schema":{"type":"string"},"description":"Campaign target id from instagram.campaigns.targets or targets.add."}],"responses":{"200":{"description":"Updated target","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignTarget"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/targets/{target_id}/stop":{"post":{"summary":"Stop one Instagram campaign target","description":"Ends the sequence for this target (status stopped). Final: it cannot be resumed.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"target_id","in":"path","required":true,"schema":{"type":"string"},"description":"Campaign target id from instagram.campaigns.targets or targets.add."}],"responses":{"200":{"description":"Updated target","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignTarget"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/targets/{target_id}/opt-out":{"post":{"summary":"Opt one Instagram campaign target out","description":"Ends the sequence for this target (status opted_out) and excludes the person from every future campaign of the connected Instagram account. Final.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"target_id","in":"path","required":true,"schema":{"type":"string"},"description":"Campaign target id from instagram.campaigns.targets or targets.add."}],"responses":{"200":{"description":"Updated target","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignTarget"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/targets/{target_id}/skip-next":{"post":{"summary":"Skip the next step of an Instagram campaign target","description":"Skips the next pending action step of an open target, if it has not started dispatching; 409 when there is no step to skip.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"target_id","in":"path","required":true,"schema":{"type":"string"},"description":"Campaign target id from instagram.campaigns.targets or targets.add."}],"responses":{"200":{"description":"Updated target","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignTarget"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/targets/{target_id}/rearm":{"post":{"summary":"Re-arm a canceled follow-up of an Instagram campaign target","description":"Re-opens a follow-up canceled with follow_up_tracking_unavailable (its thread could not be read) on a completed target that has not replied; 409 instagram_campaign_target_not_rearmable otherwise.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"target_id","in":"path","required":true,"schema":{"type":"string"},"description":"Campaign target id from instagram.campaigns.targets or targets.add."}],"responses":{"200":{"description":"Updated target","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignTarget"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/kpis":{"get":{"summary":"Get Instagram campaign KPIs","description":"Per-action counters, follow-back and reply rates, and per-step and per-day breakdowns. reply_rate is replies / (DMs + story replies sent); follow_back_rate is follow backs / follows sent.","x-required-scope":"instagram:read","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."}],"responses":{"200":{"description":"Campaign KPIs","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaignKpis"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/activities":{"get":{"summary":"List Instagram campaign activities","description":"The campaign's event log, newest first: campaign.created, launched, paused, resumed, updated, canceled, completed, archived, reconciled; targets.added; step.sent, skipped, resend, recovered; target.completed, replied, stopped, opted_out, failed, paused, resumed, rearmed. limit is 1 to 100 (default 25); pass next_cursor as cursor for the next page.","x-required-scope":"instagram:read","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."}],"responses":{"200":{"description":"A page of events","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignActivity"}},"next_cursor":{"type":["string","null"],"description":"Pass as cursor for the next page; null on the last page."},"has_more":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/launch":{"post":{"summary":"Launch an approved Instagram campaign","description":"Approve every recipient and exact message text before launching. Requires a stable Idempotency-Key and X-Wannalead-Confirm-Write: true. A blocking readiness issue (billing_required, writes_disabled, instagram_session_missing, instagram_verification_required) returns 409 instagram_campaign_not_ready with issues[]. An uncertain DM outcome is never retried automatically.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"name":"X-Wannalead-Confirm-Write","in":"header","required":true,"schema":{"type":"string","enum":["true"]}}],"responses":{"200":{"description":"Campaign launched","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaign"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"description":"Campaign not launchable: instagram_campaign_not_ready (with issues[]) or a status conflict","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignReadinessIssue"}}}}}}}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/pause":{"post":{"summary":"Pause an Instagram campaign","description":"Pauses a running campaign (pause_reason user); queued steps wait until it is resumed.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."}],"responses":{"200":{"description":"Campaign paused","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaign"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/resume":{"post":{"summary":"Resume an Instagram campaign","description":"Resumes a paused campaign, including one paused automatically (see pause_reason) once its cause is fixed.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."}],"responses":{"200":{"description":"Campaign resumed","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaign"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/cancel":{"post":{"summary":"Cancel an Instagram campaign","description":"Cancels the campaign and every open target. Final.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."}],"responses":{"200":{"description":"Campaign canceled","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaign"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/v1/instagram/campaigns/{campaign_id}/archive":{"post":{"summary":"Archive an Instagram campaign","description":"Archives a completed or canceled campaign (409 instagram_campaign_not_terminal otherwise); it stays readable and is listed with status archived.","x-required-scope":"instagram:write","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"},"description":"Instagram campaign id (igcampaign_...)."}],"responses":{"200":{"description":"Campaign archived","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/InstagramCampaign"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Instagram"]}},"/extension/instagram/pairing-token":{"post":{"summary":"Create a short-lived Instagram extension pairing token","security":[],"responses":{"200":{"description":"Pairing token and service URL"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/onboarding/instagram-state":{"get":{"summary":"Get the signed-in workspace Instagram state","security":[],"responses":{"200":{"description":"Add-on, write flag and connected account state"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/v1/linkedin/mirror/accounts":{"get":{"summary":"Accounts available in the workspace archive","description":"Owner/admin only. Lists stable account identifiers and names, including accounts whose slot has been released. Does not expose browser routing or connection diagnostics.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/mirror/status":{"get":{"summary":"Account synchronization status","description":"Reads the stored account archive without calling LinkedIn. Private messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"account_public_id","in":"query","required":false,"schema":{"type":"string"},"description":"Optional compatibility selector. Omit it to use the LinkedIn account associated with the API key."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque signed cursor. Expires after 24 hours."}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/mirror/conversations":{"get":{"summary":"Saved conversations","description":"Reads the stored account archive without calling LinkedIn. Private messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"account_public_id","in":"query","required":false,"schema":{"type":"string"},"description":"Optional compatibility selector. Omit it to use the LinkedIn account associated with the API key."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque signed cursor. Expires after 24 hours."}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/mirror/conversations/{conversation_id}/messages":{"get":{"summary":"Saved conversation messages","description":"Reads the stored account archive without calling LinkedIn. Private messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"account_public_id","in":"query","required":false,"schema":{"type":"string"},"description":"Optional compatibility selector. Omit it to use the LinkedIn account associated with the API key."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque signed cursor. Expires after 24 hours."},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string"},"description":"URL-encoded conversation URN from the archive."}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/mirror/connections":{"get":{"summary":"Connections in the last complete snapshot","description":"Reads the stored account archive without calling LinkedIn. Private messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"account_public_id","in":"query","required":false,"schema":{"type":"string"},"description":"Optional compatibility selector. Omit it to use the LinkedIn account associated with the API key."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque signed cursor. Expires after 24 hours."}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/mirror/relationship-events":{"get":{"summary":"Observed relationship transitions","description":"Reads the stored account archive without calling LinkedIn. Private messages require the workspace owner or admin role. Responses include coverage and observation timestamps.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"account_public_id","in":"query","required":false,"schema":{"type":"string"},"description":"Optional compatibility selector. Omit it to use the LinkedIn account associated with the API key."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque signed cursor. Expires after 24 hours."}],"responses":{"200":{"description":"Stored data, pagination and coverage; offline accounts return their saved observations.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"observed_at":{"type":["number","null"]},"last_successful_sync_at":{"type":["number","null"]},"initial_backfill_complete":{"type":"boolean"},"freshness":{"enum":["fresh","stale","unknown"]},"gaps":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/mirror/refresh":{"post":{"summary":"Request or join an account archive refresh","x-required-scope":"read","description":"Requires owner/admin. Creates durable read-only synchronization work within the internal sync budget. Reuses compatible work, waits while offline, and does not send messages or invitations.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["account_public_id"],"properties":{"account_public_id":{"type":"string"},"surface":{"enum":["all","conversations","connections","messages"],"default":"all"},"conversation_id":{"type":"string"},"max_age_seconds":{"type":"integer","minimum":0,"maximum":604800,"default":900}}}}}},"responses":{"200":{"description":"Already fresh enough"},"202":{"description":"Refresh queued or joined; poll the returned status_url"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/health":{"get":{"summary":"Service health","security":[],"responses":{"200":{"description":"Service health","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Platform"]}},"/openapi.json":{"get":{"summary":"OpenAPI document","security":[],"responses":{"200":{"description":"OpenAPI 3.1 document","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Platform"]}},"/v1/endpoints":{"get":{"summary":"List public endpoints catalogue","description":"Returns the full public endpoint catalogue derived from this OpenAPI document, including canonical names, compatibility aliases, methods, paths, descriptions, and request schemas. Public and cacheable.","security":[],"responses":{"200":{"description":"Public endpoints catalogue","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Platform"]}},"/v1/endpoints/{name}":{"get":{"summary":"Get one public endpoint","description":"Returns one public endpoint by canonical name or compatibility alias. Public and cacheable.","security":[],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public endpoint entry","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown endpoint name","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Platform"]}},"/launch.sh":{"get":{"summary":"Wannalead installer","description":"Returns a shell bootstrap script that installs the Wannalead CLI and sends the authenticated dashboard flow to the Chrome Web Store extension install.","security":[],"responses":{"200":{"description":"Shell installer bootstrap","content":{"text/x-shellscript":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}}},"tags":["Platform"]}},"/llms.txt":{"get":{"summary":"Wannalead agent documentation index","description":"Returns the short public first-time setup guide for AI agents.","security":[],"responses":{"200":{"description":"Agent documentation index","content":{"text/markdown":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}}},"tags":["Platform"]}},"/launch.ps1":{"get":{"summary":"Wannalead Windows installer","description":"Returns a PowerShell bootstrap script that verifies and launches the native Wannalead Windows setup executable.","security":[],"responses":{"200":{"description":"PowerShell installer bootstrap","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["Platform"]}},"/v1/me":{"get":{"summary":"Inspect API credential","description":"Returns the authenticated workspace and credential, plus independent LinkedIn, Instagram, X, and Facebook entitlements and read permissions in network_access. The legacy billing field covers LinkedIn only. For Facebook, call facebook.status and facebook.routes next: 402 facebook_addon_required means the add-on is not active, 403 means the credential lacks facebook:read or facebook:write.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Authenticated API principal","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"authenticated":{"type":"boolean"},"api_key_id":{"type":"string"},"org_id":{"type":"string"},"org_name":{"type":["string","null"]},"user_id":{"type":"string"},"client_id":{"type":["string","null"]},"permissions":{"type":"object"},"linkedin_profile":{"type":["object","null"],"description":"User-facing identity fields from the last successful LinkedIn profile check.","properties":{"output_schema_version":{"const":"linkedin.health_me.v1"},"publicIdentifier":{"type":"string"},"displayName":{"type":"string"}},"additionalProperties":false},"billing":{"type":"object","description":"LinkedIn billing only. Instagram, X and Facebook have separate add-ons and credential scopes in network_access.","properties":{"active":{"type":"boolean"},"product":{"const":"linkedin"},"reason":{"enum":["subscription_required","billing_action_required","workspace_unavailable"]},"billing_url":{"type":"string","format":"uri"}},"required":["active","product"],"additionalProperties":false},"network_access":{"type":"object","properties":{"linkedin":{"type":"object","properties":{"subscription_active":{"type":"boolean"},"read_permission":{"type":"boolean"}},"required":["subscription_active","read_permission"],"additionalProperties":false},"instagram":{"type":"object","properties":{"addon_active":{"type":"boolean"},"addon_status":{"type":"string"},"read_permission":{"type":"boolean"}},"required":["addon_active","addon_status","read_permission"],"additionalProperties":false},"x":{"type":"object","properties":{"addon_active":{"type":"boolean"},"addon_status":{"type":"string"},"read_permission":{"type":"boolean"}},"required":["addon_active","addon_status","read_permission"],"additionalProperties":false},"facebook":{"type":"object","properties":{"addon_active":{"type":"boolean"},"addon_status":{"type":"string"},"access_active":{"type":"boolean"},"read_permission":{"type":"boolean"}},"required":["addon_active","addon_status","access_active","read_permission"],"additionalProperties":false}},"required":["linkedin","instagram","x","facebook"],"additionalProperties":false}},"required":["authenticated","api_key_id","org_id","org_name","user_id","client_id","permissions","linkedin_profile","billing","network_access"]}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/v1/linkedin/agent-onboarding":{"get":{"summary":"Read agent onboarding context","description":"Returns the current user's workspace-scoped commercial onboarding progress and confirmed context. Call before any prospecting workflow.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Agent onboarding context"},"401":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]},"patch":{"summary":"Save agent onboarding context","description":"Save user-confirmed roleGoal, offer, icp, outreachStyle, crmExclusions, or nextTopic. Set complete=true and userConfirmed=true only after the user confirms the summary; roleGoal, offer, icp, and outreachStyle are required for completion.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"roleGoal":{"type":"string","maxLength":8000},"offer":{"type":"string","maxLength":8000},"icp":{"type":"string","maxLength":8000},"outreachStyle":{"type":"string","maxLength":8000},"crmExclusions":{"type":"string","maxLength":8000},"nextTopic":{"type":"string","maxLength":8000},"complete":{"type":"boolean"},"userConfirmed":{"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Saved agent onboarding context"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/v1/linkedin/agent-runs":{"post":{"summary":"Create or replay an agent run","description":"Creates an idempotent daily agent run in the authenticated workspace. The journal is not a second usage meter: LinkedIn effects remain metered Wannalead jobs and can be linked from run events by job_id.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRunCreateRequest"}}}},"tags":["Agent runs"]}},"/v1/linkedin/agent-runs/{run_id}":{"get":{"summary":"Get an agent run","description":"Returns one agent-safe run. Provider URLs, browser routing, credentials, and unprocessed response bodies are never part of this contract; provider URNs and ACoAA identifiers may be preserved for agent continuity.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/AgentRunID"}],"tags":["Agent runs"]}},"/v1/linkedin/agent-runs/{run_id}/events":{"get":{"summary":"List agent run events","description":"Lists compact product-safe events for one agent run in occurrence order.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/AgentRunID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}}],"tags":["Agent runs"]},"post":{"summary":"Append or replay an agent run event","description":"Appends an idempotent event. job_id, when present, must belong to the workspace and anchors the event to the existing metered Wannalead job. Payloads are limited to compact product-safe summaries.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AgentRunID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRunEventRequest"}}}},"tags":["Agent runs"]}},"/v1/linkedin/feedback":{"post":{"summary":"Send product feedback","description":"Records product feedback or a bug report in the authenticated workspace. Provide message or sentiment (1-5), with optional context. JSON and multipart image attachments are accepted; feedback is rate-limited separately from LinkedIn job quotas.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FeedbackMultipartRequest"}}}},"tags":["Feedback"]}},"/v1/linkedin/media/voice":{"post":{"summary":"Upload a voice message","description":"Stores an audio file for a LinkedIn voice message and returns a voice_media_id to send in place of text with the message send endpoints or in a voice campaign variant. The file must be AAC audio in an MP4/M4A container (audio/mp4), up to 20 MiB, audio only; the bytes are inspected and other formats are rejected with 415. Send the file as the raw request body or as the `file` field of a multipart form. Requires linkedin:write scope.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"audio/mp4":{"schema":{"type":"string","format":"binary"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/VoiceMediaMultipartRequest"}}}},"tags":["Messaging & outreach"]}},"/v1/linkedin/media/attachment":{"post":{"summary":"Upload a message attachment","description":"Stores a file or photo to send as a LinkedIn message attachment and returns an attachment_media_id for messages.send, messages.send-profile or messages.send-inmail (alone or with text), or for a first_dm or follow_up campaign message variant (automation.campaigns.message-variants). Up to 20 MiB. Send the file as the `file` field of a multipart form, or as the raw request body with ?filename= (or an x-filename header) and its content-type; LinkedIn shows the file name to the recipient. image/* is sent as a photo, anything else as a file. Video and audio are rejected with 415 (voice messages use POST /v1/linkedin/media/voice). Requires linkedin:write scope.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AttachmentMediaMultipartRequest"}}}},"tags":["Messaging & outreach"]}},"/v1/linkedin/automation/campaigns":{"get":{"summary":"List automation campaigns","description":"Lists automation campaigns in the authenticated workspace. Supports status filtering and cursor pagination.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["draft","running","paused","completed","archived","canceled"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Campaigns"]},"post":{"summary":"Create an automation campaign","description":"Creates a campaign shell with optional initial targets (up to 500). Large target lists are stored in small idempotent batches: if the request fails with 503 `retryable_conflict`, retry it unchanged with the same Idempotency-Key and the remaining targets are appended without duplicates. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationCampaignCreateRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaign-previews":{"post":{"summary":"Preview a complete LinkedIn campaign","description":"Validates recipients, exact messages, and timing for the standard invitation-to-follow-up playbook without creating a campaign.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimpleAutomationCampaignRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaign-activations":{"post":{"summary":"Create and launch a complete LinkedIn campaign","description":"Creates the campaign, sequence, frozen per-target messages, validation, launch, review, and scheduling in one idempotent operation after preview confirmation. Scheduling is owned by the server: when the request cannot start every approved target in time (for example after concurrency conflicts on a busy account), it still succeeds with `scheduling` = `in_progress` and `pending_schedule_count`, and the remaining targets are scheduled in the background with retries; the campaign is sealed once all have started. Replaying the same request never starts a target twice.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimpleAutomationCampaignActivationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}":{"get":{"summary":"Get an automation campaign","description":"Returns campaign metadata for one automation campaign in the authenticated workspace.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/AutomationCampaignID"}],"tags":["Campaigns"]},"patch":{"summary":"Update an automation campaign","description":"Updates campaign name or campaign settings fields. `schedule_policy` sets a sending window for visible actions (invitations, messages, likes, comments), e.g. {\"timezone\":\"Europe/Paris\",\"weekdays\":[1,2,3,4,5],\"start_time\":\"09:00\",\"end_time\":\"18:00\"} (weekdays 0 = Sunday); actions due outside it wait for the next opening while reads keep running, and `null` removes it. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/summary":{"get":{"summary":"Get automation campaign summary","description":"Returns aggregate campaign counters and last activity timestamp.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/AutomationCampaignID"}],"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/targets":{"get":{"summary":"List automation campaign targets","description":"Lists targets for a campaign with optional state filtering and cursor pagination.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/AutomationCampaignID"},{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["staged","imported","needs_review","scheduled","active","waiting_event","completed"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/activities":{"get":{"summary":"List automation campaign activities","description":"Lists campaign activity events with optional target_id filtering and cursor pagination.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/AutomationCampaignID"},{"name":"target_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/validate":{"post":{"summary":"Validate automation campaign readiness","description":"Computes readiness issues before launch or scheduling. A draft campaign may use the workspace's healthy LinkedIn account even though launch has not bound it yet. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/launch":{"post":{"summary":"Launch an automation campaign","description":"Selects and binds the workspace's healthy LinkedIn account, then launches a ready draft campaign. Launch does not approve or schedule targets. Paused campaigns must use the durable resume preview and confirmation flow. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/seal":{"post":{"summary":"Seal an automation campaign intake","description":"Closes a running campaign to new intake. Once all current targets reach terminal states, the campaign is marked completed. Repeating this command is idempotent. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/pause":{"post":{"summary":"Pause an automation campaign","description":"Pauses a running campaign. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/resume":{"post":{"summary":"Resume an automation campaign","description":"Confirms a durable gradual resume plan. plan_id is always required; an overdue backlog also requires the confirmation_token from the preview route. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"202":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationCampaignResumeConfirmRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/resume/preview":{"post":{"summary":"Preview a gradual campaign resume","description":"Builds a durable, side-effect-free snapshot of blocked campaign jobs. Poll the same request while the plan is planning; overdue jobs return a short-lived confirmation token when ready. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"202":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationCampaignResumePreviewRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/resume-plans/{plan_id}":{"get":{"summary":"Get campaign resume plan status","description":"Returns durable resume planning, preparation, activation, exclusion, and estimate progress.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/AutomationCampaignID"},{"$ref":"#/components/parameters/AutomationResumePlanID"}],"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/cancel":{"post":{"summary":"Cancel an automation campaign","description":"Cancels a campaign and blocks outstanding campaign jobs when applicable. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/archive":{"post":{"summary":"Archive an automation campaign","description":"Archives a paused or completed campaign. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/sequences":{"get":{"summary":"List automation campaign sequences","description":"Lists sequence versions for an automation campaign.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/AutomationCampaignID"}],"tags":["Campaigns"]},"post":{"summary":"Create an automation campaign sequence","description":"Creates a campaign sequence version with steps and optional publish flag. To message existing first-degree connections without invitations, use relationship.check as the root and route relationship.first_degree to a profile-targeted message step. Invitation-only campaigns may use invitations.send as the root; the server resolves missing identity internally and performs a fresh relationship preflight before dispatch. A posts.like step likes one recent post of the target before the next step: branch post.liked and post.skipped (no eligible post) to continue, for example to invitations.send after a delay. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationCampaignSequenceRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/sequences/{sequence_id}":{"patch":{"summary":"Update an automation campaign sequence","description":"Patches a campaign sequence version and optionally publishes it. A draft version accepts any change. The active version accepts timing-only changes in place: send the same steps with different step `delay_ms` or branch `delayMs` values; targets use the new delays at their next transition, jobs already scheduled keep their time, and any structural change returns `sequence_version_locked` (publish a new version instead). Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"},{"$ref":"#/components/parameters/AutomationSequenceID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationCampaignSequenceRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/message-variants":{"post":{"summary":"Mutate automation message variants","description":"Creates, updates, archives, or safely replaces the full A/B variant set for a campaign step. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationMessageVariantRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/imports":{"post":{"summary":"Stage automation campaign targets","description":"Stages imported campaign targets for later commit. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationCampaignImportRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/imports/{batch_id}/commit":{"post":{"summary":"Commit staged automation campaign targets","description":"Commits a staged import batch into campaign targets. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"},{"$ref":"#/components/parameters/AutomationImportBatchID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/campaigns/{campaign_id}/reviews":{"post":{"summary":"Review or schedule automation campaign targets","description":"Approves, rejects, or schedules targets after the campaign is running. More than 100 targets require the confirmation token returned by the first review call; the token stays valid for the same target set until it expires, so an interrupted review can be retried with it. Approved targets can be scheduled in the same request with schedule=true. Targets are processed in small idempotent batches: scheduling skips targets already started on the sequence version and reports them in `already_scheduled_count`, so retrying after a 503 `retryable_conflict` never starts a target twice. A large schedule answers within about 40 seconds: when targets remain, the schedule result has `complete: false` and lists them in `pending_target_ids`; resend the same request to finish. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationCampaignID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationCampaignReviewRequest"}}}},"tags":["Campaigns"]}},"/v1/linkedin/automation/targets/{target_id}/pause":{"post":{"summary":"Pause an automation target","description":"Pauses one target in a campaign. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/targets/{target_id}/resume":{"post":{"summary":"Resume an automation target","description":"Resumes one target in a campaign. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/targets/{target_id}/stop":{"post":{"summary":"Stop an automation target","description":"Stops one target in a campaign. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/targets/{target_id}/skip-next":{"post":{"summary":"Skip an automation target's next step","description":"Skips the next scheduled step for one campaign target. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/targets/{target_id}/opt-out":{"post":{"summary":"Opt out an automation target","description":"Marks one campaign target as opted out. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/targets/{target_id}/unreview":{"post":{"summary":"Remove automation target review","description":"Moves a reviewed target back to review state. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/targets/{target_id}/unschedule":{"post":{"summary":"Unschedule an automation target","description":"Unschedules one target's future campaign work. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/targets/{target_id}/delete":{"post":{"summary":"Delete an automation target","description":"Soft-deletes one campaign target. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/targets/{target_id}/context":{"post":{"summary":"Upsert automation target context","description":"Adds facts, evidence references, personalization hints, and proposed copy for one target. Requires campaign_id in the request body, linkedin:write scope, and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationTargetID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationTargetContextRequest"}}}},"tags":["Campaign targets"]}},"/v1/linkedin/automation/message-drafts":{"post":{"summary":"Create an automation message draft","description":"Creates a reviewed message draft for one campaign target step. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"201":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationMessageDraftRequest"}}}},"tags":["Message drafts"]}},"/v1/linkedin/automation/message-drafts/{draft_id}/approve":{"post":{"summary":"Approve an automation message draft","description":"Approves a pending message draft, optionally with edited_text. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationMessageDraftID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Message drafts"]}},"/v1/linkedin/automation/message-drafts/{draft_id}/reject":{"post":{"summary":"Reject an automation message draft","description":"Rejects a pending message draft. Requires linkedin:write scope and Idempotency-Key.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"$ref":"#/components/responses/AutomationData"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/BatchTooLarge"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/RetryableConflict"}},"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/AutomationMessageDraftID"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRequest"}}}},"tags":["Message drafts"]}},"/v1/integrations/lemlist/connections":{"get":{"summary":"List Lemlist connections","description":"Lists active or invalid Lemlist API-key connections for the authenticated workspace. API key secrets are never returned.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Lemlist connections","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LemlistConnection"}}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Lemlist"]},"post":{"summary":"Create a Lemlist connection","description":"Stores and verifies a Lemlist API key for the authenticated workspace. Requires write permission and returns only redacted key metadata.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LemlistConnectionCreateRequest"}}}},"responses":{"201":{"description":"Created Lemlist connection","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LemlistConnection"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Lemlist"]}},"/v1/integrations/lemlist/connections/{connection_id}":{"delete":{"summary":"Delete a Lemlist connection","description":"Revokes a Lemlist connection for the authenticated workspace. The stored API key is no longer used for future pushes.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/LemlistConnectionID"}],"responses":{"200":{"description":"Revoked Lemlist connection","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LemlistConnection"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Lemlist"]}},"/v1/integrations/lemlist/campaigns":{"get":{"summary":"List Lemlist campaigns","description":"Lists campaigns from the selected Lemlist connection. If the workspace has multiple connections, pass connection_id as a query parameter.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lemlist campaigns","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LemlistCampaign"}}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"}},"tags":["Lemlist"]},"post":{"summary":"Create a Lemlist campaign shell","description":"Creates a Lemlist campaign with a name. V1 does not author Lemlist sequences, senders, or schedules.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LemlistCampaignCreateRequest"}}}},"responses":{"201":{"description":"Created Lemlist campaign","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LemlistCampaign"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"}},"tags":["Lemlist"]}},"/v1/integrations/lemlist/campaigns/{campaign_id}/leads/{lead_id}":{"delete":{"summary":"Delete a Lemlist campaign lead","description":"Deletes a lead from a Lemlist campaign. By default this passes action=remove to Lemlist for a real delete; pass action=unsubscribe to only unsubscribe the lead from that campaign.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/LemlistCampaignID"},{"$ref":"#/components/parameters/LemlistLeadID"},{"name":"connection_id","in":"query","required":false,"schema":{"type":"string"},"description":"Required when the workspace has multiple Lemlist connections."},{"name":"action","in":"query","required":false,"schema":{"type":"string","enum":["remove","unsubscribe"],"default":"remove"},"description":"`remove` force deletes the lead; `unsubscribe` only unsubscribes it from the campaign."}],"responses":{"200":{"description":"Deleted Lemlist lead","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LemlistLeadDelete"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"}},"tags":["Lemlist"]}},"/v1/integrations/lemlist/pushes":{"post":{"summary":"Push leads to a Lemlist campaign","description":"Pushes up to 100 normalized Wannalead leads to a Lemlist campaign. Requires Idempotency-Key. Leads without email are recorded as item-level failures; candidateEmail is not promoted automatically.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LemlistPushRequest"}}}},"responses":{"200":{"description":"Push completed or idempotently replayed","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LemlistPush"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"}},"tags":["Lemlist"]}},"/v1/integrations/lemlist/pushes/{push_id}":{"get":{"summary":"Get a Lemlist push","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/LemlistPushID"}],"responses":{"200":{"description":"Lemlist push state","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LemlistPush"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Lemlist"]}},"/v1/webhooks":{"get":{"summary":"List webhooks","description":"Lists the workspace's webhook subscriptions (active and disabled) with delivery health. Signing secrets are never returned after creation.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Webhook subscriptions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Webhooks"]},"post":{"summary":"Create a webhook","description":"Subscribes an https URL to workspace events: `message.received` (new inbound LinkedIn message observed by the mirror), `relation.new` (invitation accepted / new first-degree connection) and `account.status` (LinkedIn account status transition such as healthy -> needs_login). Each delivery is a JSON POST with a 10 s timeout, signed with `x-wannalead-signature: v1=<hex HMAC-SHA256(secret, timestamp + \".\" + raw_body)>` and `x-wannalead-timestamp` (Unix seconds). Non-2xx responses are retried with backoff up to 8 attempts; the webhook is disabled after 20 consecutive failed attempts. The signing secret (yours, or a generated `whsec_` value) is returned only in this response. At most 10 webhooks per workspace. Events that happened before the webhook was created are not delivered.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateRequest"}}}},"responses":{"201":{"description":"Created webhook, including the signing secret (shown once)","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookWithSecret"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Webhooks"]}},"/v1/webhooks/{webhook_id}":{"delete":{"summary":"Delete a webhook","description":"Deletes a webhook subscription. Pending retries for it are abandoned.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/WebhookID"}],"responses":{"200":{"description":"Deleted webhook","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Webhook"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Webhooks"]}},"/stripe/org-webhook":{"post":{"summary":"Stripe organization billing webhook","description":"Receives signed Stripe events with org metadata and updates organization billing state, plan, and optional quota limits.","security":[],"responses":{"200":{"description":"Webhook received","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/bootstrap":{"post":{"summary":"Create or select a workspace and issue an API key","description":"Requires a signed-in Wannalead web session. The server derives the user from that session and rejects workspaces without membership.","security":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingBootstrapRequest"}}}},"responses":{"200":{"description":"Workspace API key"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/state":{"get":{"summary":"Read the signed-in user's onboarding state","description":"Resolves the active workspace and returns only public LinkedIn identity, agent-key presence, and per-user completion state.","security":[],"responses":{"200":{"description":"Current onboarding state"},"401":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/complete":{"post":{"summary":"Complete onboarding for the signed-in user and workspace","description":"Requires a current LinkedIn connection and active onboarding agent key before recording completion.","security":[],"responses":{"200":{"description":"Onboarding completed"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/agent-key/rotate":{"post":{"summary":"Rotate the onboarding agent key","description":"Revokes the expected onboarding key and reveals one replacement after explicit user confirmation in the web UI.","security":[],"responses":{"200":{"description":"Replacement key revealed once"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/workspace":{"post":{"summary":"Create or select the signed-in user's billing workspace","description":"Requires a signed-in Wannalead web session. The server creates or selects the user's workspace and returns the billing reference used for Stripe checkout.","security":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingWorkspaceRequest"}}}},"responses":{"200":{"description":"Workspace billing reference","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingWorkspaceResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/api-key/permissions":{"post":{"summary":"Update an API key's read/write permissions","description":"Requires a signed-in Wannalead web session. The server resolves the key's workspace, rejects keys the user does not own, and updates LinkedIn read/write scopes.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyPermissionsRequest"}}}},"responses":{"200":{"description":"Updated API key permissions"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/accounts":{"post":{"summary":"List the workspace's connected LinkedIn accounts","description":"Requires a signed-in Wannalead web session and returns the connected LinkedIn accounts for the user's workspace.","security":[],"responses":{"200":{"description":"Connected LinkedIn accounts"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/onboarding/usage-activity":{"post":{"summary":"Read the workspace's API usage activity","description":"Requires a signed-in Wannalead web session and returns the daily API usage of the user's workspace for the dashboard heatmap.","security":[],"responses":{"200":{"description":"Daily usage activity"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/accounts/disconnect":{"post":{"summary":"Disconnect a workspace LinkedIn account","description":"Same-origin owner/admin action. Disables the current account, releases its stable slot and blocks its paired devices until a new pairing.","security":[],"responses":{"200":{"description":"LinkedIn account disconnected"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/onboarding/accounts/replace":{"post":{"summary":"Start replacement of a workspace LinkedIn account","description":"Same-origin owner/admin action. Keeps the current account active until a freshly verified replacement identity is ready for the stable slot.","security":[],"responses":{"200":{"description":"LinkedIn account replacement started"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/onboarding/campaigns/confirm-account-rebind":{"post":{"summary":"Confirm a paused campaign's LinkedIn sender","description":"Same-origin owner/admin action. Rebinds only future non-leased campaign jobs to the freshly verified account in the campaign's stable slot.","security":[],"responses":{"200":{"description":"Campaign account rebind confirmed"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/onboarding/campaigns/resume-preview":{"post":{"summary":"Preview a paused campaign resume","description":"Same-origin session action. Builds or polls a durable side-effect-free resume snapshot for the dashboard confirmation dialog.","security":[],"responses":{"200":{"description":"Resume preview ready"},"202":{"description":"Resume preview planning"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/onboarding/campaigns/resume-confirm":{"post":{"summary":"Confirm a paused campaign resume plan","description":"Same-origin session action. Applies only the durable resume plan and short-lived confirmation token displayed by the dashboard.","security":[],"responses":{"202":{"description":"Resume plan accepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/onboarding/campaigns/resume-status":{"post":{"summary":"Read a campaign resume plan","description":"Same-origin session read used by the dashboard while a durable resume plan is applying.","security":[],"responses":{"200":{"description":"Resume plan status"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/onboarding/billing-state":{"post":{"summary":"Read the workspace's billing state","description":"Requires a signed-in Wannalead web session and returns the billing projection for the user's workspace: plan, status, current period and included daily limits.","security":[],"responses":{"200":{"description":"Workspace billing state"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/enrichment-billing-state":{"post":{"summary":"Read the workspace's enrichment credit balance","description":"Same-origin session read. Returns separate monthly and prepaid-pack credit balances plus the server-controlled enrichment offers.","security":[],"responses":{"200":{"description":"Workspace enrichment wallet state"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/enrichment-checkout":{"post":{"summary":"Create an enrichment credit checkout","description":"Same-origin owner/admin action. Accepts one of the fixed pack_100, pack_500 or monthly_100 offers and returns a Stripe Checkout URL.","security":[],"responses":{"200":{"description":"Stripe Checkout URL"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/instagram-billing-state":{"post":{"summary":"Read the workspace's Instagram add-on billing state","description":"Same-origin session read. Returns entitlement status and the Stripe-hosted monthly price when the add-on catalog is configured.","security":[],"responses":{"200":{"description":"Instagram add-on billing state"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/onboarding/instagram-checkout":{"post":{"summary":"Create an Instagram add-on subscription checkout","description":"Same-origin owner/admin action. Resolves the configured monthly or yearly Price by lookup key and returns a Stripe Checkout URL. An add-on bills on the interval of the channels already paid; yearly checkouts take no promotion code.","security":[],"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"interval":{"type":"string","enum":["month","year"],"default":"month"}}}}}},"responses":{"200":{"description":"Stripe Checkout URL"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"tags":["Workspace & billing"]}},"/cli/auth/start":{"post":{"summary":"Start CLI browser authorization","description":"Creates a short-lived CLI authorization request. The CLI opens verification_uri_complete in the browser, then polls /cli/auth/token with the returned poll_token. No local LinkedIn session data is exposed to the CLI.","security":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthStartRequest"}}}},"responses":{"200":{"description":"CLI authorization request"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/cli/auth":{"get":{"summary":"Render CLI authorization page","description":"Requires a signed-in Wannalead web session. The user approves the CLI for a workspace.","security":[],"responses":{"200":{"description":"HTML CLI authorization page","content":{"text/html":{"schema":{"type":"string"}}}},"302":{"description":"Redirect to login when no session exists"},"400":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/cli/auth/approve":{"post":{"summary":"Approve a CLI authorization request","description":"Requires a signed-in Wannalead web session. The server stores only the approved workspace and scope until the CLI claims the request.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthApproveRequest"}}}},"responses":{"200":{"description":"CLI request approved"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/cli/auth/token":{"post":{"summary":"Claim a CLI API key","description":"Public polling endpoint for the CLI. It accepts the request id and secret poll token from /cli/auth/start. Once the browser has approved the request, the server creates an API key and returns it once.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthTokenRequest"}}}},"responses":{"200":{"description":"Pending status or claimed API key"},"400":{"$ref":"#/components/responses/Error"},"410":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/extension/pairing-token":{"post":{"summary":"Create a Chrome extension pairing token for the current user","description":"Requires a signed-in Wannalead web session. The selected workspace must belong to the current user. If the user has no workspace and no org_id is supplied, this creates a workspace without issuing an API key.","security":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtensionPairingRequest"}}}},"responses":{"200":{"description":"Extension pairing token"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/extension/browser-disconnect":{"post":{"summary":"Disconnect the current Chrome extension browser","description":"Idempotently revokes the opaque browser resume credential supplied by the Chrome extension. The server returns the same response when the credential is absent or already revoked.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["browser_id","browser_resume_token"],"properties":{"browser_id":{"type":"string"},"browser_resume_token":{"type":"string","writeOnly":true}}}}}},"responses":{"204":{"description":"Browser disconnected or already disconnected"}},"tags":["Connections & clients"]}},"/extension/pairing-status":{"get":{"summary":"Read Chrome extension pairing status","description":"Requires a signed-in Wannalead web session. Polls a short-lived pairing code until the extension connection is ready.","security":[],"parameters":[{"name":"pairing_code_id","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Pairing status"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Connections & clients"]}},"/v1/linkedin/jobs":{"post":{"summary":"Create a generic LinkedIn job","description":"Creates a job for an explicit endpoint_key and params payload.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["API jobs"]}},"/v1/linkedin/jobs/{job_id}":{"get":{"summary":"Get a job","description":"While the job is not terminal, the response carries `Retry-After` and `data.poll_after_ms`: wait at least that long before polling again. Terminal jobs (succeeded, failed, queue_failed, parse_failed, timed_out, canceled) never change, so stop polling them. Polling one job too often returns 429 with `retry_after_ms`.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/JobID"}],"responses":{"200":{"description":"Job state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["API jobs"]}},"/v1/linkedin/jobs/{job_id}/cancel":{"post":{"summary":"Cancel a queued or running job","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/JobID"}],"responses":{"200":{"description":"Canceled job"},"404":{"$ref":"#/components/responses/Error"}},"tags":["API jobs"]}},"/v1/linkedin/contacts/enrich":{"post":{"summary":"Find verified mobile phone numbers","description":"Creates a telephone-only enrichment job. The request is deduplicated before provider calls, reserves at most $0.35 per eligible contact, and charges only accepted E.164 mobile results.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentRequest"}}}},"responses":{"200":{"description":"Preflight or completed enrichment job"},"202":{"description":"Enrichment job accepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"tags":["Enrichment"]}},"/v1/enrichment/jobs/{job_id}":{"get":{"summary":"Get an enrichment job","description":"Returns a redacted, paginated result page. Provider identities and raw provider payloads are never exposed.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/JobID"},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":200}}],"responses":{"200":{"description":"Enrichment job state and result page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentJob"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Enrichment"]}},"/v1/enrichment/jobs/{job_id}/cancel":{"post":{"summary":"Cancel an enrichment job","description":"Cancels queued or running work and releases all unsettled credits.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/JobID"}],"responses":{"200":{"description":"Cancelled enrichment job"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"tags":["Enrichment"]}},"/v1/linkedin/profiles/resolve":{"post":{"summary":"Resolve a LinkedIn profile","description":"Resolves one LinkedIn profile. Cache hits return the same complete projection as live reads; force_refresh controls freshness only. For more than one profile, use profiles.enrich in bulk instead of calling this once per profile.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/enrich":{"post":{"summary":"Enrich LinkedIn profiles in bulk","description":"Bulk profile enrichment: send the whole list in one call, up to 99 profiles (split longer lists into calls of 99); never loop one call per profile. Valid ACoAA ids are read together; out-of-network ACoAJ/ACr__ ids are skipped and listed in meta.skipped_invalid_acoaa. Profile URLs and slugs are accepted in the same call and read one by one. Cache hits return the same complete projection as live reads; force_refresh controls freshness only.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/me/connections":{"post":{"summary":"List authenticated user's connections","description":"Creates a viewer.connections job for the authenticated LinkedIn account's direct connections.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/connections":{"post":{"summary":"List target profile connections","description":"Creates a profile.connections job for connections visible on a target profile.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/in-common":{"post":{"summary":"List in-common profile connections","description":"Creates a profile.in_common job listing the mutual connections between the connected account and a target profile (profile_id, acoaa, or slug). Offset-paginated with count (default and max 100) and start; job data returns next_start, has_more, requested_count, and returned_count. For keyword or geo filtering inside the mutual set, use people.search with connection_of.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/similar":{"post":{"summary":"Find similar profiles (browsemap)","description":"Backward-compatible LinkedIn-close alias for profiles.lookalikes. Creates a profiles.lookalikes job for the LinkedIn browsemap (\"Other Similar Profiles\") of a seed person. Provide vanity_name, public_identifier, slug, or profile_url. Returns up to ~10 lookalike profiles; detail_view=false returns the ~5-profile sidebar widget.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/lookalikes":{"post":{"summary":"Find profile lookalikes","description":"Creates a profiles.lookalikes job for the LinkedIn browsemap (\"Other Similar Profiles\") of a seed person and returns lookalike people (name, publicIdentifier, profileUrl, memberId, connectionDistance). Use publicIdentifier or profileUrl for follow-up enrichment; numeric memberId is evidence only.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/following":{"post":{"summary":"List followed entities","description":"Creates a profile.following job.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/posts":{"post":{"summary":"Fetch profile posts","description":"Creates a profile.posts job from an ACoAA, profile URL, public identifier, or slug. Profiles not yet known are resolved first in the same call.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/actions":{"post":{"summary":"Fetch profile actions","description":"Creates a profile.actions auxiliary enrichment job from profile URL, public identifier, slug, or a known profile identifier.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/presence":{"post":{"summary":"Fetch profile presence statuses","description":"Creates a presence.statuses auxiliary messaging/reachability job for known profiles.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/companies/resolve":{"post":{"summary":"Resolve a company","description":"Creates a company.resolve job.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/enrich":{"post":{"summary":"Enrich companies","description":"Creates a company batch or resolve job.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/similar":{"post":{"summary":"Find similar companies","description":"Backward-compatible LinkedIn-close alias for companies.lookalikes. Creates a companies.lookalikes job.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/lookalikes":{"post":{"summary":"Find company lookalikes","description":"Creates a companies.lookalikes job from company_id and returns LinkedIn companies similar to the seed account.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/feed":{"post":{"summary":"Fetch company feed","description":"Creates a company.feed job for official company page updates.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/about":{"post":{"summary":"Fetch company about details","description":"Creates a company.about job from the public LinkedIn /company/{slug}/ SSR page.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/followers":{"post":{"summary":"Search visible company followers","description":"Creates a companies.followers job through LinkedIn people search with followerOf. Provide company_id; optional keywords, current_company, past_company, geo_id, function, industry, seniority, network, start, and count refine the audience. Results are visibility-limited to what LinkedIn exposes to the connected account and are not an exhaustive follower export. An empty visible page carries empty_result_reason=no_visible_results.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/admin-followers":{"post":{"summary":"List company followers as page admin","description":"Creates a companies.admin_followers job through LinkedIn's page-admin follower list, newest follower first, each row with followedAtLabel (LinkedIn's month label, e.g. \"September 2026\"). Provide company_id plus optional start/count; paginate with next_start until has_more is false. The connected account must be allowed to manage that organizational page; otherwise the job returns reason_code LINKEDIN_PAGE_ADMIN_REQUIRED.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/employees":{"post":{"summary":"List company employees","description":"Creates a companies.employees job from the LinkedIn company People/alumni search surface. Provide company_id plus optional keywords, start, and count.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/products":{"post":{"summary":"List company products","description":"Creates a companies.products job for B2B product signals on a company page. Provide company_id plus optional start/count pagination.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/services":{"post":{"summary":"List company services","description":"Creates a companies.services job for Services Marketplace signals on a company page. Provide company_id.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/jobs":{"post":{"summary":"List company jobs","description":"Creates a companies.jobs job for company-level hiring signals. Provide company_id; add geo_id, keywords, and start to list the company's open roles in one location or function (10 per page).","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/workplace-policies":{"post":{"summary":"Fetch company workplace policies","description":"Creates a companies.workplace_policies job for remote/hybrid/onsite workplace policy signals. Provide universal_name, slug, or company_url.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/credibility":{"post":{"summary":"Fetch company credibility signals","description":"Creates a companies.credibility job for LinkedIn page credibility metadata. Provide company_id.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/verification":{"post":{"summary":"Fetch company verification signals","description":"Creates a companies.verification job for LinkedIn page verification metadata. Provide company_id.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/posts/resolve":{"post":{"summary":"Resolve a post","description":"Creates a post.resolve job. Provide post_url, activity_id, or a post URN (activity/share/ugcPost). Returns exactly one enriched target row.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/comments":{"post":{"summary":"Fetch post comments","description":"Creates a post.comments job. Provide post_url, activity_id, a post URN (activity/share/ugcPost), or social_detail_urn. A slow post resolution returns 202 post_resolve_pending with resolve_job_id; poll it, then pass its parsed socialDetailUrn as social_detail_urn. count limits top-level comments; one included reply per thread can make the flattened row count larger. start paginates top-level comments; deduplicate pages by commentUrn.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/reactions":{"post":{"summary":"Fetch post reactions","description":"Creates a post.reactions job. Provide post_url, activity_id, a post URN (activity/share/ugcPost), or thread_urn. Wannalead resolves the post and fetches reactions on its social-detail thread (urn:li:activity for ordinary posts, urn:li:ugcPost for native media), never the urn:li:share root content. Paginate with start/count (count up to 100, default 50): job data returns next_start, has_more, requested_count and returned_count; keep calling with start=next_start until has_more is false. LinkedIn exposes roughly 90% of the reactions shown in the post counter.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/like":{"post":{"summary":"Like a post","description":"Creates a guarded posts.like write job that reacts to a post or, with comment_urn, to a comment. Accepts post_url, activity_id, post_urn, or canonical thread_urn and preserves resolved activity/share/ugcPost identifiers. reaction_type is LIKE (default), PRAISE (celebrate), EMPATHY (love), INTEREST (insightful), APPRECIATION (support) or ENTERTAINMENT (funny); comment_urn takes a urn:li:comment:(activity:…,…) or urn:li:fsd_comment URN from post.comments. Requires linkedin:write scope, Idempotency-Key, and confirm_send=true. Set dry_run=true or preflight=true to validate without creating a job. The deployment flag LINKEDIN_POST_ENGAGEMENT_ENABLED must be true.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/comment":{"post":{"summary":"Comment on a post","description":"Creates a guarded posts.comment write job. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, text (max 700 characters), and post_url, activity_id, post_urn, or thread_urn. Wannalead resolves non-canonical post identifiers before the mutation. Set dry_run=true or preflight=true to validate without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/comment-reply":{"post":{"summary":"Reply to a post comment","description":"Creates a guarded posts.comment_reply write job. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, parent_comment_urn, and text (max 700 characters). Canonical urn:li:comment and urn:li:fsd_comment shapes are accepted.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/repost":{"post":{"summary":"Repost a post","description":"Creates a guarded posts.repost write job. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, and post_url, activity_id, post_urn, or root_content_urn. Wannalead resolves the root content URN before the mutation.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts":{"post":{"summary":"Publish a post","description":"Creates a guarded posts.create write job for immediate publication. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, and final text. Optional image_url must be public HTTPS and at most 10 MiB. Set dry_run=true or preflight=true to validate without creating a job. The deployment flag LINKEDIN_POST_PUBLISH_ENABLED must be true.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCreateRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/schedule":{"post":{"summary":"Schedule a post","description":"Creates a guarded posts.schedule write job. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, text, and scheduled_at as ISO 8601 with timezone. Optional image_url must be public HTTPS and at most 10 MiB. Set dry_run=true or preflight=true to validate without creating a job. The deployment flag LINKEDIN_POST_SCHEDULE_ENABLED must be true.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostScheduleRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/reposters":{"post":{"summary":"Fetch post reposters","description":"Creates a post.reposters SDUI job for the repost modal. Provide post_url, activity_id, a post URN, or thread_urn; the API resolves the activity id when a URL or non-activity URN is supplied. Use pagination_token for subsequent pages.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/posts/engagers":{"post":{"summary":"List all post engagers","description":"Composed endpoint that resolves a post then enqueues comments, reactions, and reposters sub-jobs and returns their job_ids in one call. Provide post_url, activity_id, a post URN, or social_detail_urn. Optional include=comments,reactions,reposters scopes which sub-fetches run; count caps each sub-fetch (default 50, max 100); start offsets the comments and reactions sub-fetches (reposters page with their own pagination_token). Returns sub_jobs[] with engagement_type + job_id + status; poll each job to fetch parsed rows. dataQualityFlags explain any skipped sub-fetch.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/feed/updates":{"post":{"summary":"Fetch feed updates","description":"Creates a feed.updates job.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/search/people":{"post":{"summary":"Search people","description":"Creates a structured Search Dash people job. Keyword-only discovery is supported, as are optional company, geography, function, industry, seniority, follower, and network scopes. Results expose the visible name, profile identifier, headline, location, and connection distance without parsing the LinkedIn HTML page. Use start/count for pagination; page remains a backward-compatible 1-based alias and is converted to start when start is absent.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/seat":{"post":{"summary":"Check the Sales Navigator seat","description":"Creates a salesnav.seat job that reports whether the connected LinkedIn account holds an active Sales Navigator seat (one linkedin.salesnav_seat.v1 row with hasSeat, productName, contractUrn, seatUrn). Call it before any salesnav.* endpoint.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/leads/search":{"post":{"summary":"Search Sales Navigator leads","description":"Creates a salesnav.leads.search job on Sales Navigator lead search. Requires an active Sales Navigator seat on the connected account (check salesnav.seat first; accounts without a seat fail with LINKEDIN_SALES_NAVIGATOR_SEAT_REQUIRED). Combine keywords with typed filters: function (id or name), seniority (id, name, or decision_makers = Director/VP/CXO), company_headcount (A-I letters or ranges such as 51-200), region (numeric geo id), industry, current_title, current_company, past_company, recently_changed_jobs (changed jobs in the last 90 days) and posted_on_linkedin. Rows are linkedin.salesnav_lead.v1 with salesProfileId (Sales Navigator scoped ACwAA, not a flagship ACoAA), memberId, current positions with start month, RECENTLY_HIRED/RECENTLY_PROMOTED signals and mutual connections. count up to 100; Sales Navigator stops at 2,500 results per query. Job data returns next_start, has_more, total, requested_count, returned_count and result_cap.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavLeadSearchRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/facets/typeahead":{"post":{"summary":"Resolve Sales Navigator filter ids","description":"Creates a salesnav.facets.typeahead job that resolves free text to Sales Navigator filter ids. Provide type (title, industry, or company) and query; returns linkedin.salesnav_facet.v1 rows {id, displayValue, headline}. Use the ids in salesnav.leads.search current_title/industry or salesnav.accounts.search industry. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavFacetsTypeaheadRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/accounts/search":{"post":{"summary":"Search Sales Navigator accounts","description":"Creates a salesnav.accounts.search job on Sales Navigator account search. Combine keywords with company_headcount (A-I letters or ranges), industry (numeric id) and region (numeric geo id). Rows are linkedin.salesnav_account.v1 {companyId, name, industry, description, employeeCountRange, employeeDisplayCount, searchTotal}. count up to 25; job data returns next_start, has_more and total. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavAccountsSearchRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/companies/get":{"post":{"summary":"Get a Sales Navigator account","description":"Creates a salesnav.companies.get job returning one linkedin.salesnav_account.v1 row for company_id: name, description, website, industry, employeeCount, employeeCountRange, headquarters address, location and saved state. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavCompaniesGetRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/companies/insights":{"post":{"summary":"Get Sales Navigator company insights","description":"Creates a salesnav.companies.insights job for company_id and one insight: headcount (monthly headcount history, growth and median tenure), functional_headcount (headcount by function over 3/6/12 months), new_hires (monthly new hires and senior new hires over 24 months) or job_openings (open roles by function with 3/6-month change). Returns one linkedin.salesnav_company_insight.v1 row {insight, data} with LinkedIn's series. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavCompaniesInsightsRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/companies/also-viewed":{"post":{"summary":"List companies also viewed","description":"Creates a salesnav.companies.also_viewed job listing the accounts Sales Navigator users also viewed next to company_id (LinkedIn's account lookalikes): linkedin.salesnav_account.v1 rows with name, industry, location, employeeCountRange and employeeGrowth. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavCompaniesAlsoViewedRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/profiles/get":{"post":{"summary":"Get a Sales Navigator lead profile","description":"Creates a salesnav.profiles.get job for one lead. Provide sales_profile_urn from a salesnav.leads.search row, or a bare sales_profile_id (ACwAA) or acoaa (a flagship ACoAA id). Returns one linkedin.salesnav_profile.v1 row, including profileUrl (the /in/ URL): headline, summary, location, connections, sharedConnections, positions (with startedOn, current, new and addedAt, the time the position was added) and educations. Viewing a lead can register a profile view. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavProfilesGetRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/profiles/unmask":{"post":{"summary":"Unmask a LinkedIn Member search hit","description":"Finds who is behind an out-of-network « LinkedIn Member » people-search hit, whose ACoAJ…/ACr__… id no LinkedIn endpoint resolves. Pass the hit's photo_id (exact match on its profile picture) and/or headline and location, plus the current_company id the search used: the server runs the matching Sales Navigator lead search, keeps the one lead with that picture (or whose current title and location fit), and reads its /in/ URL. Returns full_name, title, location, member_id, sales_profile_urn, profile_url and public_identifier (feed it to profiles.enrich for the full profile and ACoAA). Typically ~5 s; past 10 s it answers 202 with the job ids to poll. 404 no_match, 409 ambiguous_match with candidates. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavProfilesUnmaskRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/leads/similar":{"post":{"summary":"List similar Sales Navigator leads","description":"Creates a salesnav.leads.similar job listing colleagues in similar roles at the same company as a lead (Sales Navigator \"similar leads\", useful for account mapping). Provide sales_profile_urn or sales_profile_id plus company_id. Rows are linkedin.salesnav_lead.v1; the first row can be the lead itself. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavLeadsSimilarRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/saved-searches":{"post":{"summary":"List Sales Navigator saved searches","description":"Creates a salesnav.saved_searches.list job listing the connected seat's saved searches (kind leads by default, or accounts). Rows are linkedin.salesnav_saved_search.v1 {savedSearchId, name, keywords, filters, newHitsCount, lastViewedAt}; newHitsCount is Sales Navigator's count of new results since the search was last viewed, a native daily trigger. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavSavedSearchesListRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/lists":{"post":{"summary":"List Sales Navigator lists","description":"Creates a salesnav.lists.list job listing the connected seat's Sales Navigator lists: kind leads (default) or accounts, with start/count (count 1-100, default 25), newest first. Rows are linkedin.salesnav_list.v1 {listId, name, listType, listSource (MANUAL, SYSTEM, RECOMMENDATION, LEADS_TO_FOLLOW_UP, FLAGSHIP...), role, shared, entityCount, createdAt, lastModifiedAt, total}. Use listId with salesnav.lists.items, salesnav.leads.save or salesnav.accounts.save. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavListsRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/lists/items":{"post":{"summary":"List the members of a Sales Navigator list","description":"Creates a salesnav.lists.items job reading the members of one Sales Navigator list. Provide list_id (from salesnav.lists.list) and kind leads (default) or accounts, plus start/count (leads up to 100, accounts up to 25). Lead rows are linkedin.salesnav_list_item.v1 with entityType lead, salesProfileUrn, salesProfileId, memberId, name, location, distance, current positions and addedToListAt; account rows have entityType account, companyId, companyName, industry, employeeCount, mutualConnectionCount and buyerIntentLevel. total is the list size. Requires a Sales Navigator seat.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavListsItemsRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/leads/save":{"post":{"summary":"Save a Sales Navigator lead","description":"Creates a guarded salesnav.leads.save write job that saves one lead in Sales Navigator (salesApiLeads saveByMember), optionally into one or more lead lists. Provide sales_profile_urn from a salesnav.leads.search or salesnav.lists.items row (or sales_profile_id with auth_type/auth_token), optional list_id (one id, comma-separated ids or an array, from salesnav.lists.list) and optional company_id to attach the lead to an account. Requires linkedin:write scope, Idempotency-Key, confirm_send=true and a Sales Navigator seat. Set dry_run=true or preflight=true to validate without creating a job. Built from the Sales Navigator web bundle; not yet live-probed.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavLeadsSaveRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/accounts/save":{"post":{"summary":"Save a Sales Navigator account","description":"Creates a guarded salesnav.accounts.save write job that saves up to 25 companies as Sales Navigator accounts (salesApiCompanies save), optionally into account lists. Provide company_id (numeric id, comma-separated ids or an array) and optional list_id (from salesnav.lists.list with kind accounts). Requires linkedin:write scope, Idempotency-Key, confirm_send=true and a Sales Navigator seat. Set dry_run=true or preflight=true to validate without creating a job. Built from the Sales Navigator web bundle; not yet live-probed.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavAccountsSaveRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/contracts":{"post":{"summary":"List LinkedIn premium contracts","description":"Creates a salesnav.contracts.list job listing every premium contract the connected member can log into (salesApiIdentity findLicensesByCurrentMember). Rows are linkedin.premium_contract.v1 {product (sales_navigator, recruiter or other), name, description, contractUrn, contractId, seatUrn, identityType, ssoEnabled}. Pass contractUrn and seatUrn to salesnav.contracts.select to switch the session to that contract.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/salesnav/contracts/select":{"post":{"summary":"Select a LinkedIn premium contract","description":"Creates a guarded salesnav.contracts.select job that selects one Sales Navigator contract for subsequent reads on the connected account. Provide contract_urn and seat_urn from salesnav.contracts.list, plus optional contract_name. Wannalead already runs this login automatically when a Sales Navigator read answers SEAT_REQUIRED; call it to pick a contract explicitly when the member holds several. Requires linkedin:write scope, Idempotency-Key and confirm_send=true. Set dry_run=true or preflight=true to validate without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesNavContractsSelectRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/recruiter/projects":{"post":{"summary":"List Recruiter hiring projects","description":"Creates a recruiter.projects.list job listing the LinkedIn Recruiter hiring projects of the connected seat (talent hiringProjectsByCriteria), most recently accessed first. Optional keyword filters by project name; start/count (count 1-50, default 10). Rows are linkedin.recruiter_project.v1 {hiringProjectUrn, hiringProjectId, contractId, name, type, total}. Needs a talent session on the connected account (a Recruiter seat or LinkedIn job-posting contract); accounts without one fail with HTTP 401. Live-validated 2026-10-22 on a job-posting contract.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruiterProjectsListRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/recruiter/projects/get":{"post":{"summary":"Get a Recruiter hiring project","description":"Creates a recruiter.projects.get job reading one LinkedIn Recruiter hiring project by hiring_project_urn (urn:li:ts_hiring_project:(urn:li:ts_contract:<contract>,<project>), from recruiter.projects.list) or contract_id plus hiring_project_id. Returns one linkedin.recruiter_project.v1 row with sourcingChannels {urn, channelType, name} (the channel URNs recruiter.candidates.add needs) and the linked jobPosting {jobPostingId, title, state, location}. Needs a talent session on the connected account (a Recruiter seat or LinkedIn job-posting contract); accounts without one fail with HTTP 401. Live-validated 2026-10-22 on a job-posting contract.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruiterProjectsGetRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/recruiter/candidates/add":{"post":{"summary":"Add a candidate to a Recruiter project","description":"Creates a guarded recruiter.candidates.add write job that adds one profile to a LinkedIn Recruiter hiring project pipeline (talentSourcingChannelCandidateCreations batch create). Provide hiring_project_urn (or contract_id plus hiring_project_id), candidate_urn (the Recruiter profile's candidate URN) and sourcing_channel_urn (from recruiter.projects.get). Requires linkedin:write scope, Idempotency-Key, confirm_send=true and a LinkedIn Recruiter seat. Set dry_run=true or preflight=true to validate without creating a job. Built from the Recruiter web bundle; not yet live-probed.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruiterCandidatesAddRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/posts/target-audience":{"post":{"summary":"Estimate a post target audience","description":"Creates a posts.target_audience job estimating how many LinkedIn members match an organic post targeting, as the company page share box does (voyagerTalentbrandDashTargetedContents matchTarget, which only computes). Provide at least one facet: job_function, seniority, industry, location (geo), school (numeric ids or urn:li: URNs), language (locales such as fr_FR) or headcount (ranges such as 51-200 or 10001-). Optional organization_id restricts the count to that page's followers, which is what a targeted page post reaches. Returns one linkedin.post_target_audience.v1 row {matchingMembers, tooBroad}; LinkedIn answers -1 (tooBroad) when the audience is too broad to estimate.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostsTargetAudienceRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/raw":{"post":{"summary":"Read any LinkedIn API path","description":"Creates a raw.get job: a read-only passthrough that sends one GET to a LinkedIn API path through the connected browser and returns the response body as JSON. Provide a supported API-relative path or absolute API URL, with query values already percent-encoded; optional query_params are appended. Only GET is sent, and Rest.li action= queries are refused, so it cannot change anything on LinkedIn. Returns one linkedin.raw_response.v1 row {path, bytes, data}; bodies over 8 MiB fail. Billed as a profile read. Prefer a typed endpoint when one exists.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawGetRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["API jobs"]}},"/v1/linkedin/search/parameters":{"post":{"summary":"Look up LinkedIn search parameter ids","description":"Creates a search.parameters job that turns text into the ids LinkedIn search filters take, through the classic LinkedIn search typeahead (Unipile's Retrieve LinkedIn search parameters). Provide type and keywords, plus optional limit (1-100, default 10; LinkedIn returns at most 20). type is LOCATION (alias GEO, REGION), COMPANY, SCHOOL, INDUSTRY, JOB_TITLE (alias TITLE), SKILL, PEOPLE or CONNECTIONS (1st-degree only). Returns linkedin.search_parameter.v1 rows with type, id, label, subtitle, urn, profileUrn for members and searchParams, the Wannalead inputs that take the id as-is: LOCATION id -> people.search geo_id (also profiles.followers / companies.followers geo_id, salesnav.leads.search region); COMPANY id -> people.search current_company / past_company, companies.employees company_id; SCHOOL id -> people.search school; INDUSTRY id -> people.search industry, companies.search industry_company_vertical, salesnav.leads.search industry; JOB_TITLE id -> salesnav.leads.search current_title (classic people.search has no title id filter, put the title in keywords); PEOPLE / CONNECTIONS id (an ACoAA) -> people.search connection_of or follower_of, profiles.followers profile, messages.conversations.by-profile profile. SKILL ids are LinkedIn standardized skill ids (no Wannalead search input takes them yet). LinkedIn has no typeahead for FUNCTION or SENIORITY: people.search function takes the 1-26 function ids or names (Sales, Marketing, ...) directly.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/people/search":{"post":{"summary":"Search LinkedIn profiles","description":"Product alias for structured Search Dash people discovery. Provide keywords alone for broad discovery, or combine keywords with current_company/company_id, geo, past_company, school, function, industry, seniority, follower_of, connection_of (mutual connections with an ACoAA), or network scopes. A scope without keywords is also accepted. geo and function accept a LinkedIn id or a human name (geo:'Paris', function:'Sales') resolved server-side; industry/seniority/school take numeric ids (look them up with search.parameters). Use start/count for pagination; page remains a backward-compatible 1-based alias and is converted to start when start is absent.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeopleSearchRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/search/groups":{"post":{"summary":"Search groups","description":"Creates a search.groups job.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/search/schools":{"post":{"summary":"Search schools","description":"Creates a search.schools job.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/search/events":{"post":{"summary":"Search events","description":"Creates a search.events job restricted to LinkedIn Events entities. Events hosted on external platforms (Luma, Somo, Sillage, Eventbrite, Meetup) are NOT indexed here — LinkedIn Events search only returns events created as a linkedin.event entity. For events announced in posts but hosted externally, use posts.search (see hashtag search hint on that endpoint) and then posts.resolve, which surfaces extractedEvents (URL, platform, slug, eventSourceKind) from the commentary text.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/search/companies":{"post":{"summary":"Search companies","description":"Creates a search.companies job from the LinkedIn company search results page.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/companies/search":{"post":{"summary":"Search LinkedIn companies","description":"Product alias for search.companies_srp. Use this for ICP company discovery with keywords, company_hq_geo, industry_company_vertical, company_size, has_jobs, network, start, and count.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanySearchRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/posts/search":{"post":{"summary":"Search LinkedIn posts","description":"Product alias for search.content. Use this to discover intent-bearing posts before calling comments/reactions/reposters, and prefer postUrl or canonicalActivityUrn when chaining. canonicalActivityUrn is omitted unless LinkedIn exposes an explicit activity mapping; an ugcPost/share id is never relabeled as an activity id. For hashtag discovery pass the concatenated hashtag as keywords (with or without leading '#'): LinkedIn tokenises `#AgenticGTMHackathon` as one opaque token, so posts.search with keywords `agenticgtmhackathon` or `#agenticgtmhackathon` returns hashtag matches that keyword search on `Agentic GTM Hackathon` misses. Filter by recency with date_posted (past-24h, past-week or past-month) and order with sort_by (relevance, the default, or date_posted for latest first); any other value is rejected with 400 invalid_argument because LinkedIn would silently ignore it.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/job-changes/search":{"post":{"summary":"Search job-change triggers","description":"Product alias for search.job_changes. Use this for champion-change / new-role trigger discovery.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/ads/search":{"post":{"summary":"Search LinkedIn ads","description":"Product alias for ad_library.search. Supports keyword/keywords, countries, date_option, ad_type, account_owner, pagination_token, or ad_id for detail lookup.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Search"]}},"/v1/linkedin/jobs/search":{"post":{"summary":"Search LinkedIn jobs","description":"Product alias for jobs.search_companies. Use this for hiring-intent discovery; supports keywords, geo_id, company_id, job_id, and start.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/detail":{"post":{"summary":"Enrich a job posting","description":"Creates a jobs.detail job for deep job-posting enrichment. Provide job_id.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/postings/list":{"post":{"summary":"List the jobs the connected account posted","description":"Creates a jobs.postings.list job. Optional state active (default, LISTED), closed or draft, plus start/count (count 1-100, default 25). Returns linkedin.hirer_job_posting.v1 rows: jobId, state, title, description, company, location, employmentStatus, workplaceTypes, applicantsCount, listedAt, apply method and manageUrl. Accounts that never posted a job get an empty page.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/postings/get":{"post":{"summary":"Read one job posting","description":"Creates a jobs.postings.get job. Provide job_id (numeric id, urn:li:fsd_jobPosting URN, or a /jobs/view/ or /hiring/jobs/ URL). Returns one linkedin.hirer_job_posting.v1 row with state, title, full description (text and HTML), company, location, employment status, workplace types and applicantsCount.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/postings/create":{"post":{"summary":"Create a job posting draft","description":"Creates a guarded jobs.postings.create write job that saves a DRAFT job posting (nothing is published). Provide title (or title_id), company_id or company_name, location_id (LinkedIn geo id), optional workplace ON_SITE|HYBRID|REMOTE (default ON_SITE), employment_status (default FULL_TIME), description (HTML, max 10,000 characters) and either contact_email (apply on LinkedIn) or apply_url (external). Returns linkedin.job_posting_write.v1 with the new jobId. Requires linkedin:write scope, Idempotency-Key and confirm_send=true; dry_run=true or preflight=true validates without creating a job. Runs only through the connected browser extension. The deployment flag LINKEDIN_JOB_POSTINGS_WRITE_ENABLED must be true.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobPostingsWriteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/postings/update":{"post":{"summary":"Edit a job posting","description":"Creates a guarded jobs.postings.update write job that patches the given fields of a posting you own. Provide job_id plus at least one of title, title_id, company_id, company_name, location_id, workplace, employment_status, description, contact_email, apply_url. Requires linkedin:write scope, Idempotency-Key and confirm_send=true; dry_run=true or preflight=true validates without creating a job. Runs only through the connected browser extension. The deployment flag LINKEDIN_JOB_POSTINGS_WRITE_ENABLED must be true.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobPostingsWriteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/postings/publish":{"post":{"summary":"Publish a job posting draft for free","description":"Creates a guarded jobs.postings.publish write job that lists a draft for free (jobState LISTED). Promoted (paid) listings are not supported. LinkedIn may hold the job in review or require company email verification; read jobs.postings.get afterwards to see the resulting state. Requires linkedin:write scope, Idempotency-Key and confirm_send=true; dry_run=true or preflight=true validates without creating a job. Runs only through the connected browser extension. The deployment flag LINKEDIN_JOB_POSTINGS_WRITE_ENABLED must be true.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobPostingsWriteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/postings/close":{"post":{"summary":"Close a job posting","description":"Creates a guarded jobs.postings.close write job that closes a posting you own (jobState CLOSED). Provide job_id. Requires linkedin:write scope, Idempotency-Key and confirm_send=true; dry_run=true or preflight=true validates without creating a job. Runs only through the connected browser extension. The deployment flag LINKEDIN_JOB_POSTINGS_WRITE_ENABLED must be true.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobPostingsWriteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/applicants/list":{"post":{"summary":"List applicants to a job posting","description":"Creates a jobs.applicants.list job for a job the connected account posted. Provide job_id plus optional ratings (comma list of UNRATED, GOOD_FIT, MAYBE, NOT_A_FIT), keywords, sort (applied_date default, first_name, last_name) and start/count (count 1-100, default 25). Returns linkedin.job_applicant.v1 rows: applicantId, applicant profile (name, headline, location, profileAcoaa, publicIdentifier), appliedAt, rating, work experience, education and screening answers. A job you do not own answers 403.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/applicants/get":{"post":{"summary":"Read one job applicant","description":"Creates a jobs.applicants.get job. Provide applicant_id (numeric job application id or urn:li:fsd_jobApplication URN from jobs.applicants.list). Returns one linkedin.job_applicant.v1 row including contact email and phone, screening question answers, top-choice message and resumes.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/jobs/applicants/resume":{"post":{"summary":"Get an applicant resume download URL","description":"Creates a jobs.applicants.resume job. Provide applicant_id. Returns linkedin.job_applicant_resume.v1 rows with the signed, short-lived downloadUrl, fileName, fileType and virusScanStatus of each resume attached to the application; no rows means the applicant attached none.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Job listings"]}},"/v1/linkedin/groups/members":{"post":{"summary":"List group members","description":"Creates a groups.members job for topical-affinity lead discovery. Provide group_id plus optional start/count pagination.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Communities & events"]}},"/v1/linkedin/groups/feed":{"post":{"summary":"Fetch posts inside a group","description":"Creates a groups.feed job. Provide group_id plus optional start/count. Returns posts published inside the group (author, ACoAA, text, activityUrn, socialDetailUrn); complements groups.members. May be gated when the group is private and the viewer is not a member.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Communities & events"]}},"/v1/linkedin/profiles/comments":{"post":{"summary":"Discover posts a profile commented on","description":"Creates a profiles.comments job. Provide acoaa (or profile_id) plus optional start/count. Returns the posts the member commented on (post author, text, activityUrn, socialDetailUrn) as a warm-audience post-discovery surface. Parse as post discovery, not as the member's comment text.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/recommendations":{"post":{"summary":"Read a profile's written recommendations","description":"Creates a profiles.recommendations job. Provide profile (ACoAA id, profile URN, public identifier, or /in/ URL) plus optional direction (received, the default, or given) and start/count (count 1-100, default 50). Returns linkedin.profile_recommendation.v1 rows: full text, LinkedIn relationship enum (for example RECOMMENDER_IS_CLIENT_OF_RECOMMENDEE or RECOMMENDER_MANAGED_RECOMMENDEE), status, visibility, createdAt/lastModifiedAt epoch ms, and the recommender and recommendee (name, headline, profile identifiers). received only lists VISIBLE recommendations. Many profiles have none; an empty result is normal. profiles.enrich does not include recommendations.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/followers":{"post":{"summary":"List another member's followers","description":"Creates a profiles.followers job: people who follow another member's profile, through LinkedIn people search with followerOf=<member>. Provide profile (ACoAA id or urn:li:fsd_profile URN; resolve a slug or /in/ URL with profiles.resolve first) plus optional keywords, current_company, past_company, geo_id, function, industry, seniority, network, start and count (1-50, default 10). Rows use the standard people-search projection; followerCount on every row is LinkedIn's match count (metadata.totalResultCount). Results are visibility-limited: an account past LinkedIn's free monthly search limit sees about 3 rows per query. For the connected account's own followers use me.followers.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/reactions":{"post":{"summary":"List posts a member reacted to","description":"Creates a profiles.reactions job: posts a member reacted to (profile Activity > Reactions). Provide profile (ACoAA id or urn:li:fsd_profile URN) plus optional count (1-100, default 20) and pagination_token (nextPaginationToken from the previous page; LinkedIn ignores start on this list). Returns linkedin.profile_reaction.v1 rows: reactionType (LIKE, PRAISE, EMPATHY, APPRECIATION, INTEREST or ENTERTAINMENT, derived from LinkedIn's header text kept in reactionText), activityUrn, postUrl, socialDetailUrn, post text and counts, and the post author (authorName plus authorProfileAcoaa or authorCompanyId). An empty page ends the list.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/skills":{"post":{"summary":"List a member's skills and endorsements","description":"Creates a profiles.skills job: the skills on a member's profile with their endorsement state. Provide profile (ACoAA id or urn:li:fsd_profile URN). Returns linkedin.profile_skill.v1 rows: name, skillId, skillUrn, endorsedSkillUrn (the input of profiles.endorse), endorsementCount, endorsedByViewer and canEndorse. LinkedIn shows the endorse action only on 1st-degree connections, so endorsedSkillUrn is empty elsewhere. A profile without skills returns an empty list.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/endorse":{"post":{"summary":"Endorse a connection's skill","description":"Creates a guarded profiles.endorse write job that endorses one skill of a 1st-degree connection from the connected LinkedIn account. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, and endorsed_skill_urn from profiles.skills (or profile plus skill_id, or skill_urn). Set dry_run=true or preflight=true to validate the write contract without creating a job. This mutation runs through the connected browser extension path.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesEndorseRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/follow":{"post":{"summary":"Follow a member","description":"Creates a guarded profiles.follow write job that makes the connected LinkedIn account follow a member's profile (their posts reach its feed; no invitation is sent). Requires linkedin:write scope, Idempotency-Key, confirm_send=true, and profile (ACoAA id or urn:li:fsd_profile URN). Set dry_run=true or preflight=true to validate the write contract without creating a job. This mutation runs through the connected browser extension path.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesFollowRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/profiles/unfollow":{"post":{"summary":"Unfollow a member","description":"Creates a guarded profiles.unfollow write job that makes the connected LinkedIn account stop following a member's profile; an existing connection is kept. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, and profile (ACoAA id or urn:li:fsd_profile URN). Set dry_run=true or preflight=true to validate the write contract without creating a job. This mutation runs through the connected browser extension path.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesFollowRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/me/profile/update":{"post":{"summary":"Edit the connected account's profile","description":"Creates a guarded me.profile.update write job that edits the connected LinkedIn account's own profile: headline (at most 220 characters) or summary (the About section, at most 2,600). Send one field per call, as LinkedIn's profile editor saves them. Requires linkedin:write scope, Idempotency-Key and confirm_send=true. Set dry_run=true or preflight=true to validate the write contract without creating a job. This mutation runs through the connected browser extension path.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeProfileUpdateRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/companies/related":{"post":{"summary":"Discover related pages for a company","description":"Creates a companies.related job for account expansion beyond companies.similar. Provide universal_name (page slug) plus optional tab (HOME, ABOUT, POSTS, PRODUCTS, JOBS, LIFE). Returns related pages, affiliated/showcase pages, products people also use, and people-also-follow cards, each tagged with its source group.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/companies/newsletters":{"post":{"summary":"List company-owned newsletters","description":"Creates a companies.newsletters job. Provide company_id. Returns newsletters owned by that company with content-series ids, titles, descriptions, subscriber counts, issue counts, authors, and shareable links.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/newsletters/posts":{"post":{"summary":"Fetch newsletter articles","description":"Creates a newsletters.posts job. Provide series_id (numeric content series id), series_urn, or a newsletter URL; plus optional start/count. Returns the articles/editions published in the newsletter (title, article URN, socialDetailUrn).","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/newsletters/detail":{"post":{"summary":"Resolve a newsletter","description":"Creates a newsletters.detail job. Provide slug (the full newsletter slug, e.g. the-insider-7050147416884289537). Returns the content series URN, title, description, subscriber count, issue count, and author so you can then call newsletters.posts.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/me/saved-posts":{"post":{"summary":"List the viewer's saved posts","description":"Creates a me.saved_posts job. Viewer-scoped: reads the connected LinkedIn account's own saved posts/bookmarks, not generic discovery. Requires an active LinkedIn session. Returns saved post activity URNs in LinkedIn result order, each with nextPaginationToken; paginate with pagination_token, not start (start is inert on this surface). The last row of each page carries savedAt, the bookmark timestamp decoded from the cursor.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/me/article-drafts":{"post":{"summary":"List the viewer's article drafts","description":"Creates a me.article_drafts job. Viewer-scoped: reads the connected LinkedIn account's own LinkedIn-article drafts (the /post/drafts article editor), not post-composer drafts and not scheduled posts. Requires an active LinkedIn session. state defaults to DRAFT and also accepts PUBLISHED. Rows are raw-first: articleUrn plus the untouched rawElement.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/me/recommended-people":{"post":{"summary":"List people recommended to the viewer","description":"Creates a me.recommended_people job from LinkedIn's My Network people-to-follow curation surface. Viewer-scoped and non-deterministic; supports optional start/count pagination and returns visible profile cards in LinkedIn recommendation order.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/me/followers":{"post":{"summary":"List the viewer's followers","description":"Creates a me.followers job. Viewer-scoped: lists the people who follow the connected LinkedIn account's own profile (My Network > Followers). Paginate with start/count (count 1-100, default 50): the job result carries next_start, has_more and total (the account's follower count); request next_start until has_more is false. LinkedIn keeps serving pages past its advertised 1000-row paging total, and a page can hold a few rows less than requested mid-list, so only an empty page or has_more=false ends the export. Rows use the standard people-search projection (name, headline, member id); this hub identifies followers by ACoAA member id (publicIdentifier/profileAcoaa), so chain profiles.enrich for vanity slugs, positions and companies. Dedupe on profileAcoaa. Cannot list another member's followers.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Profiles"]}},"/v1/linkedin/me/notifications":{"post":{"summary":"List viewer notifications","description":"Creates a viewer-scoped me.notifications job. Returns normalized notification cards with type, read state, timestamp, headline, and chaining identifiers such as activityUrn, profileAcoaa/profileUrn, or companyId when LinkedIn exposes them.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Content"]}},"/v1/linkedin/events/attendees":{"post":{"summary":"Search event attendees","description":"Creates an events.attendees job through LinkedIn People Search eventAttending pagination. Provide event_id and optional page; page is 1-based and effective page size is controlled by LinkedIn, usually 10.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventsAttendeesRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Communities & events"]}},"/v1/linkedin/events/detail-batch":{"post":{"summary":"Fetch event details","description":"Creates an events.detail_batch job. Provide event_id as one id or comma-separated ids, or event_ids as an array. Empty event rows are dropped and partial metadata is flagged in parsed output.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventsDetailBatchRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Communities & events"]}},"/v1/linkedin/companies/follow":{"post":{"summary":"Follow a company page","description":"Creates a guarded companies.follow write job that makes the connected LinkedIn account follow (or, with following=false, unfollow) a company page. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, and the numeric company_id (from companies.resolve or search.companies). Set dry_run=true or preflight=true to validate the write contract without creating a job. This mutation runs through the connected browser extension path.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompaniesFollowRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Companies"]}},"/v1/linkedin/events/register":{"post":{"summary":"Register for a LinkedIn event","description":"Creates a guarded events.register write job. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, and event_id. Optional viewer_status accepts REGISTERED for LGF/register flows or INTERESTED for regular join flows; omitted defaults to REGISTERED. Set dry_run=true or preflight=true to validate the write contract without creating a job. This mutation must run through the connected browser extension path; direct server execution is not available. The deployment flag LINKEDIN_EVENTS_REGISTER_ENABLED must be true.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventsRegisterRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Communities & events"]}},"/v1/linkedin/messages/mailbox-counts":{"post":{"summary":"Fetch messaging mailbox counts","description":"Creates a messages.mailbox_counts job for unread counters by mailbox category.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/conversations":{"post":{"summary":"Fetch messaging conversations","description":"Creates a messages.conversations job for one mailbox/category page. A completed job projects next_cursor and has_more at data top level; pass next_cursor back in the next request until has_more is false. sync_token is reserved for incremental synchronization.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/conversations/by-profile":{"post":{"summary":"List conversations with one member","description":"Creates a messages.conversations.by_profile job: the connected account's conversations with one LinkedIn member (LinkedIn find-conversations-by-recipients), the equivalent of Unipile's chats-by-attendee. Provide profile as an ACoAA member id or urn:li:fsd_profile URN (from people.search, search.parameters type PEOPLE/CONNECTIONS, profiles.resolve or a messages.conversations participant), or a slug / public_identifier / profile_url Wannalead already has in its profile cache. Returns the same linkedin.message_conversation.v1 rows as messages.conversations (conversationUrn, participants, unreadCount, lastActivityAt); an empty list means no conversation exists. To read the messages exchanged with that member, pass each conversationUrn to messages.thread. Requires a workspace owner or admin credential, like the other private-message reads.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/thread":{"post":{"summary":"Fetch messaging thread messages","description":"Creates a messages.thread job for one existing conversation URN. Continue toward older messages with the returned nextDeliveredBefore as delivered_before and stop on an empty page.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/seen-receipts":{"post":{"summary":"Fetch messaging seen receipts","description":"Creates a messages.seen_receipts job for one existing conversation URN.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/seen":{"post":{"summary":"Check whether a LinkedIn message was seen","description":"Creates a messages.seen read job for one message in an existing conversation. Requires conversation_urn and message_urn and returns seen plus available read time and reader metadata without marking the conversation as read.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/send":{"post":{"summary":"Send a LinkedIn message","description":"Creates a guarded messages.send job for an existing conversation. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, a connected LinkedIn session, conversation_urn, and text, voice_media_id (a voice message uploaded with POST /v1/linkedin/media/voice), or attachment_media_id (a file or photo uploaded with POST /v1/linkedin/media/attachment, optionally with text). Wannalead resolves the connected sender internally. Set dry_run=true or preflight=true to validate the write contract without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/send-profile":{"post":{"summary":"Send a LinkedIn message to a profile","description":"Creates a guarded messages.send_profile job for a profile-targeted message. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, text, voice_media_id (a voice message uploaded with POST /v1/linkedin/media/voice), or attachment_media_id (a file or photo uploaded with POST /v1/linkedin/media/attachment, optionally with text), and a recipient (profile_url, public_identifier, slug, recipient_profile_urn, or recipient_acoaa). Wannalead resolves the connected sender internally. Set dry_run=true or preflight=true to validate the write contract without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/edit":{"post":{"summary":"Edit a sent LinkedIn message","description":"Creates a guarded messages.edit job for a message sent by the connected account. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, message_urn, and replacement text. LinkedIn permits edits only within its current edit window. Set dry_run=true or preflight=true to validate the write contract without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/react":{"post":{"summary":"React to a LinkedIn message","description":"Creates a guarded messages.react job that adds (action=add, default) or removes (action=remove) one emoji reaction on a message. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, message_urn (urn:li:msg_message:... from messages.thread) and emoji. LinkedIn's picker shows 👍 ❤️ 👏 😂 😮 😢; other emojis may be refused. Set dry_run=true or preflight=true to validate the write contract without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/delete":{"post":{"summary":"Delete (recall) a sent LinkedIn message","description":"Creates a guarded messages.delete job that recalls a message the connected account sent; every participant then sees it as deleted. LinkedIn only allows it for the sender and within about 60 minutes of sending. Requires linkedin:write scope, Idempotency-Key, confirm_send=true and message_urn. Set dry_run=true or preflight=true to validate the write contract without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/conversations/update":{"post":{"summary":"Update a LinkedIn conversation","description":"Creates a guarded messages.conversations.update job. action is one of mark_read, mark_unread, mute, unmute, archive, unarchive, star, unstar. Provide conversation_urn (urn:li:msg_conversation:...), thread_url or thread_id. Requires linkedin:write scope, Idempotency-Key and confirm_send=true. Only the connected account's own inbox view changes. Set dry_run=true or preflight=true to validate the write contract without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/conversations/delete":{"post":{"summary":"Delete a LinkedIn conversation","description":"Creates a guarded messages.conversations.delete job that deletes one conversation from the connected account's inbox; the other participants keep their copy. Irreversible. Provide conversation_urn, thread_url or thread_id. Requires linkedin:write scope, Idempotency-Key and confirm_send=true. Set dry_run=true or preflight=true to validate the write contract without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/attachments/get":{"post":{"summary":"Download a message attachment","description":"Creates a messages.attachments.get job that downloads one message attachment (file, image, voice message or video) through the connected account's session. Provide attachment_url from a messages.thread attachments[].url (use the signed URL as returned; re-read the thread when it expires) plus optional mime_type and filename from the same row. Returns linkedin.message_attachment.v1 with content_type, byte_size, sha256, filename and data_base64. Attachments up to 600 KiB are returned inline; larger ones fail with PAYLOAD_TOO_LARGE. Requires a workspace owner or admin credential.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/messages/send-inmail":{"post":{"summary":"Send a LinkedIn InMail","description":"Creates a guarded messages.send_inmail job: a first message with a subject to a member outside the connected account's network. Premium InMail credits and Sales Navigator InMail credits are separate: source=premium sends from the LinkedIn inbox and only spends Premium credits (Open Profiles are free); source=sales_navigator sends from the Sales Navigator inbox and spends the seat's credits (needs an active Sales Navigator seat; text only, no attachment). source=auto (default) reads me.inmail-balance first and uses Sales Navigator when there is no Premium credit left but the Sales Navigator inbox has some, Premium otherwise. Recruiter InMail is not supported. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, subject (max 200 characters), text (max 1900 characters) and a recipient (profile_url, public_identifier, slug, recipient_profile_urn, or recipient_acoaa). Optional attachment_media_id (Premium path only). A refusal for lack of Premium credit fails with LINKEDIN_INMAIL_NO_PREMIUM_CREDITS; other LinkedIn refusals carry linkedin_code=<CODE> in the error message. For 1st-degree connections use messages.send-profile. Set dry_run=true or preflight=true to validate the write contract without creating a job.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/me/inmail-balance":{"post":{"summary":"Read the InMail credit balance","description":"Creates a me.inmail_balance job for the connected account's remaining InMail credits. Default source=mailboxes returns the Sales Navigator inbox credits (sales_navigator.credits_remaining), the Recruiter mailbox when present and the company page mailboxes the member administers; source=premium reads the Premium (flagship) InMail counter (premium_credits). Returns linkedin.inmail_balance.v1.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/invitations/send":{"post":{"summary":"Send a LinkedIn connection invitation","description":"Creates a guarded invitations.send job. Requires linkedin:write scope, Idempotency-Key, confirm_send=true, a connected LinkedIn session, and a target profile_url/public_identifier/slug. dry_run=true validates the write contract but does not fetch live relationship actions. A confirmed send immediately reserves the idempotency key for the original target and message, resolves user-facing profile aliases through an internal unmetered read when needed, then reuses matching relationship evidence from the current account binding for 60 seconds or creates an internal unmetered profile.actions preflight. If either prerequisite is still running after the bounded wait, the API returns 202 with its preflight_job_id; poll it and retry the exact request with the same Idempotency-Key. The CLI does this automatically with --poll. No invitation job or quota entry exists until CONNECT is confirmed. Stale relationship evidence is refreshed under the same durable invitation key. Replaying a successful invitation returns 200 with the original job; replaying a failed terminal invitation returns 409 invitation_attempt_failed with the original job. A confirmed LinkedIn HTTP 429 requires reviewing the rate limit and a new Idempotency-Key for any later approved attempt. The same key never sends again.","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/invitations/received":{"post":{"summary":"List received connection invitations","description":"Creates an invitations.received job listing the connection invitations waiting on the connected account, newest first. Optional start/count (count 1-100, default 40). Returns linkedin.invitation_received.v1 rows: invitationId, invitationUrn, sharedSecret (needed by invitations.accept and invitations.decline), inviter (inviterAcoaa, inviterProfileUrn, inviterPublicIdentifier, first/last name, occupation), message and customMessage, sentAt epoch ms, unseen, and pageElementCount. Page, newsletter and event invitations are not returned, so a page can hold fewer rows than count; follow next_start/has_more. LinkedIn reports no total.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/invitations/sent":{"post":{"summary":"List pending sent invitations","description":"Creates an invitations.sent job listing the connection invitations the connected account sent that are still pending, newest first. Optional start/count (count 1-100, default 40). Returns linkedin.invitation_sent.v1 rows: invitationId and invitationUrn (pass invitationId to invitations.withdraw), invitee (inviteeAcoaa, inviteeProfileUrn, inviteePublicIdentifier, first/last name, occupation), message and customMessage, sentAt epoch ms, and pageElementCount. Follow next_start/has_more; LinkedIn reports no total.","x-required-scope":"read","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/invitations/accept":{"post":{"summary":"Accept a received invitation","description":"Creates a guarded invitations.accept write job that accepts one connection invitation received by the connected account. Pass invitation_id plus shared_secret from invitations.received, or the inviter's acoaa/profile_urn/profile: the server then pages invitations.received (up to 500 invitations, metered reads) to find it, returns 404 invitation_not_found when there is none, and 202 invitation_lookup_pending with lookup_job_id while a page is still loading (retry with the same Idempotency-Key). Requires linkedin:write scope, Idempotency-Key, and confirm_send=true; dry_run=true validates without creating a job. Does not consume the invitation send quota. Returns linkedin.invitation_accept.v1 (success, invitationUrn, inviterAcoaa).","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/invitations/decline":{"post":{"summary":"Decline a received invitation","description":"Creates a guarded invitations.decline write job that declines (LinkedIn \"Ignore\") one connection invitation received by the connected account; the inviter is not notified. Pass invitation_id plus shared_secret from invitations.received, or the inviter's acoaa/profile_urn/profile: the server then pages invitations.received (up to 500 invitations, metered reads) to find it, returns 404 invitation_not_found when there is none, and 202 invitation_lookup_pending with lookup_job_id while a page is still loading (retry with the same Idempotency-Key). Requires linkedin:write scope, Idempotency-Key, and confirm_send=true; dry_run=true validates without creating a job. Returns linkedin.invitation_action.v1 (action ignore, success, invitationUrn).","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/linkedin/invitations/withdraw":{"post":{"summary":"Withdraw a sent invitation","description":"Creates a guarded invitations.withdraw write job that cancels one pending connection invitation sent by the connected account. Pass invitation_id from invitations.sent (shared_secret optional), or the invitee's acoaa/profile_urn/profile: the server then pages invitations.sent (the 500 most recent, metered reads) to find it, returns 404 invitation_not_found when there is none, and 202 invitation_lookup_pending with lookup_job_id while a page is still loading (retry with the same Idempotency-Key). LinkedIn blocks a new invitation to the same member for about three weeks after a withdrawal. Requires linkedin:write scope, Idempotency-Key, and confirm_send=true; dry_run=true validates without creating a job. Returns linkedin.invitation_action.v1 (action withdraw, success, invitationUrn).","x-required-scope":"write","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Wait"},{"$ref":"#/components/parameters/TimeoutMs"},{"$ref":"#/components/parameters/RequiredIdempotencyKey"},{"$ref":"#/components/parameters/Prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInJobRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/JobOrData"},"202":{"$ref":"#/components/responses/JobAccepted"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/BillingRequired"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"504":{"$ref":"#/components/responses/Error"}},"tags":["Messaging & outreach"]}},"/v1/signals/web-search":{"post":{"summary":"Search web pages. Returns a bounded sample with sources.","description":"Search web pages. Returns a bounded sample with sources. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"num_results":{"type":"integer","default":5,"minimum":1,"maximum":10},"text_max_chars":{"type":"integer","default":300,"minimum":1,"maximum":5000},"published_after":{"type":"string","minLength":1,"maxLength":4000},"include_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}},"exclude_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"published_at":{"type":"string","nullable":true},"snippet":{"type":"string","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/news-search":{"post":{"summary":"Search news. Returns a bounded sample with sources.","description":"Search news. Returns a bounded sample with sources. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"num_results":{"type":"integer","default":5,"minimum":1,"maximum":10},"text_max_chars":{"type":"integer","default":300,"minimum":1,"maximum":5000},"published_after":{"type":"string","minLength":1,"maxLength":4000},"include_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}},"exclude_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"published_at":{"type":"string","nullable":true},"snippet":{"type":"string","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/deep-search":{"post":{"summary":"Search web pages with deeper research. Returns a bounded sample with sources.","description":"Search web pages with deeper research. Returns a bounded sample with sources. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"num_results":{"type":"integer","default":5,"minimum":1,"maximum":10},"text_max_chars":{"type":"integer","default":300,"minimum":1,"maximum":5000},"published_after":{"type":"string","minLength":1,"maxLength":4000},"include_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}},"exclude_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"published_at":{"type":"string","nullable":true},"snippet":{"type":"string","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/company-search":{"post":{"summary":"Search company. Returns a bounded sample with sources.","description":"Search company. Returns a bounded sample with sources. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"num_results":{"type":"integer","default":5,"minimum":1,"maximum":10},"text_max_chars":{"type":"integer","default":300,"minimum":1,"maximum":5000},"published_after":{"type":"string","minLength":1,"maxLength":4000},"include_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}},"exclude_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"website":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"employee_count":{"type":"number","nullable":true},"headquarters":{"type":"object","properties":{"city":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}}}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/people-search":{"post":{"summary":"Search people. Returns a bounded sample with sources.","description":"Search people. Returns a bounded sample with sources. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry. Available only when the workspace cannot search people with its connected account.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"num_results":{"type":"integer","default":5,"minimum":1,"maximum":10},"text_max_chars":{"type":"integer","default":300,"minimum":1,"maximum":5000},"published_after":{"type":"string","minLength":1,"maxLength":4000},"include_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}},"exclude_domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"full_name":{"type":"string","nullable":true},"headline":{"type":"string","nullable":true},"current_title":{"type":"string","nullable":true},"current_company":{"type":"string","nullable":true},"location":{"type":"string","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/page-read":{"post":{"summary":"Read up to five public pages with per-page failures.","description":"Read up to five public pages with per-page failures. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["urls"],"properties":{"urls":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"string","minLength":1,"maxLength":4000}},"text_max_chars":{"type":"integer","default":3000,"minimum":1,"maximum":5000}}},"example":{"urls":["https://business.com/about"]}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"text":{"type":"string","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/answer":{"post":{"summary":"Answer a short research question with cited sources.","description":"Answer a short research question with cited sources. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/similar-sites":{"post":{"summary":"Find related coverage of a known site; these are not guaranteed company lookalikes.","description":"Find related coverage of a known site; these are not guaranteed company lookalikes. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string","minLength":1,"maxLength":4000},"num_results":{"type":"integer","default":5,"minimum":1,"maximum":10},"text_max_chars":{"type":"integer","default":300,"minimum":1,"maximum":5000}}},"example":{"url":"https://www.facebook.com/business"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"published_at":{"type":"string","nullable":true},"snippet":{"type":"string","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/maps-search":{"post":{"summary":"Find local businesses by activity and location.","description":"Find local businesses by activity and location. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query","location"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"location":{"type":"string","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":20}}},"example":{"query":"home builders in Philadelphia","location":"Philadelphia, PA"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"website":{"type":"string","nullable":true},"category":{"type":"string","nullable":true},"place_id":{"type":"string","nullable":true},"maps_url":{"type":"string","nullable":true},"rating":{"type":"number","nullable":true},"review_count":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/maps-reviews":{"post":{"summary":"Read recent reviews of a known place; reviews do not prove footfall.","description":"Read recent reviews of a known place; reviews do not prove footfall. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["place_id"],"properties":{"place_id":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25},"language":{"type":"string","default":"en","minLength":1,"maxLength":4000}}},"example":{"place_id":"ChIJPlaceIdentifier"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"text":{"type":"string","nullable":true},"date":{"type":"string","nullable":true},"author_role":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"rating":{"type":"number","nullable":true},"rating_scale":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/jobs-search":{"post":{"summary":"Find companies hiring specific roles, with optional country and recency filters.","description":"Find companies hiring specific roles, with optional country and recency filters. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["titles"],"properties":{"titles":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}},"exclude_titles":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}},"countries":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":4000}},"posted_within_days":{"type":"integer","minimum":1,"maximum":365},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"titles":["Estimator"]}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true},"posted_at":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"salary":{"type":"string","nullable":true},"location":{"oneOf":[{"type":"string","nullable":true},{"type":"object","properties":{"city":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}}}]}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/indeed-jobs":{"post":{"summary":"Find US job postings outside the professional network.","description":"Find US job postings outside the professional network. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query","location"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"location":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","enum":["US"],"minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"query":"home builders in Philadelphia","location":"Philadelphia, PA"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true},"posted_at":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"salary":{"type":"string","nullable":true},"location":{"oneOf":[{"type":"string","nullable":true},{"type":"object","properties":{"city":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}}}]}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/google-search":{"post":{"summary":"Search Google for directories, company lists and public evidence.","description":"Search Google for directories, company lists and public evidence. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":10},"text_max_chars":{"type":"integer","default":300,"minimum":1,"maximum":5000}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"published_at":{"type":"string","nullable":true},"snippet":{"type":"string","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/funding-feed":{"post":{"summary":"Find recently announced funding rounds with source articles.","description":"Find recently announced funding rounds with source articles. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"limit":{"type":"integer","default":5,"minimum":1,"maximum":25},"region":{"type":"string","default":"GLOBAL","enum":["US","EU","GLOBAL"],"minLength":1,"maxLength":4000},"since":{"type":"string","minLength":1,"maxLength":4000}}},"example":{}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true},"round_type":{"type":"string","nullable":true},"currency":{"type":"string","nullable":true},"announced_at":{"type":"string","nullable":true},"amount":{"type":"number","nullable":true},"investors":{"type":"array","items":{"type":"string"}}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/funding-rounds":{"post":{"summary":"Read a company's funding history; check announcement dates.","description":"Read a company's funding history; check announcement dates. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"domain":"business.com"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true},"round_type":{"type":"string","nullable":true},"currency":{"type":"string","nullable":true},"announced_at":{"type":"string","nullable":true},"amount":{"type":"number","nullable":true},"investors":{"type":"array","items":{"type":"string"}}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/google-ads":{"post":{"summary":"Find Google ads for a company domain; active ads do not establish spend.","description":"Find Google ads for a company domain; active ads do not establish spend. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"domain":"business.com"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"advertiser_name":{"type":"string","nullable":true},"ad_url":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"first_shown":{"type":"string","nullable":true},"last_shown":{"type":"string","nullable":true},"landing_url":{"type":"string","nullable":true},"is_active":{"type":"boolean","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/meta-ads":{"post":{"summary":"Find Facebook and Instagram ads; verify the advertiser identity.","description":"Find Facebook and Instagram ads; verify the advertiser identity. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"advertiser_name":{"type":"string","nullable":true},"ad_url":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"first_shown":{"type":"string","nullable":true},"last_shown":{"type":"string","nullable":true},"landing_url":{"type":"string","nullable":true},"is_active":{"type":"boolean","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/tiktok-ads":{"post":{"summary":"Find TikTok ads by advertiser name or keyword.","description":"Find TikTok ads by advertiser name or keyword. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"advertiser_name":{"type":"string","nullable":true},"ad_url":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"first_shown":{"type":"string","nullable":true},"last_shown":{"type":"string","nullable":true},"landing_url":{"type":"string","nullable":true},"is_active":{"type":"boolean","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/tech-stack":{"post":{"summary":"Identify technologies detected on a public company website.","description":"Identify technologies detected on a public company website. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","minLength":1,"maxLength":4000}}},"example":{"domain":"business.com"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"technologies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","nullable":true},"category":{"type":"string","nullable":true}}}}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/producthunt-launches":{"post":{"summary":"Read today's product launches.","description":"Read today's product launches. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"tagline":{"type":"string","nullable":true},"topic":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"votes":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/seo-overview":{"post":{"summary":"Read monthly traffic and advertising estimates for a domain.","description":"Read monthly traffic and advertising estimates for a domain. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","minLength":1,"maxLength":4000},"months":{"type":"integer","default":1,"minimum":1,"maximum":12}}},"example":{"domain":"business.com"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"month":{"type":"string","nullable":true},"monthly_organic_clicks":{"type":"number","nullable":true},"monthly_paid_clicks":{"type":"number","nullable":true},"monthly_ads_budget":{"type":"number","nullable":true},"organic_keywords":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/seo-competitors":{"post":{"summary":"Find domains sharing organic or paid search keywords.","description":"Find domains sharing organic or paid search keywords. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":20}}},"example":{"domain":"business.com"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"common_keywords":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/ppc-competitors":{"post":{"summary":"Find domains sharing organic or paid search keywords.","description":"Find domains sharing organic or paid search keywords. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":20}}},"example":{"domain":"business.com"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"common_keywords":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/backlinks":{"post":{"summary":"Read referring domains and backlink metrics.","description":"Read referring domains and backlink metrics. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","minLength":1,"maxLength":4000}}},"example":{"domain":"business.com"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"referring_domains":{"type":"number","nullable":true},"referring_domains_change":{"type":"number","nullable":true},"backlinks":{"type":"number","nullable":true},"domain_rank":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/trustpilot-reviews":{"post":{"summary":"Read customer reviews for a business domain.","description":"Read customer reviews for a business domain. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"domain":"business.com"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"text":{"type":"string","nullable":true},"date":{"type":"string","nullable":true},"author_role":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"rating":{"type":"number","nullable":true},"rating_scale":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/glassdoor-reviews":{"post":{"summary":"Read employee reviews using a known company review slug.","description":"Read employee reviews using a known company review slug. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["company"],"properties":{"company":{"type":"string","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"company":"Business-Reviews-E123"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"text":{"type":"string","nullable":true},"date":{"type":"string","nullable":true},"author_role":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"rating":{"type":"number","nullable":true},"rating_scale":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/app-reviews":{"post":{"summary":"Read recent public app reviews from one store.","description":"Read recent public app reviews from one store. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["store","app_id"],"properties":{"store":{"type":"string","enum":["google_play","app_store"],"minLength":1,"maxLength":4000},"app_id":{"type":"string","minLength":1,"maxLength":4000},"country":{"type":"string","default":"US","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"store":"google_play","app_id":"com.business.app"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"text":{"type":"string","nullable":true},"date":{"type":"string","nullable":true},"author_role":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"rating":{"type":"number","nullable":true},"rating_scale":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/reddit-search":{"post":{"summary":"Find public discussions, complaints and requests for alternatives.","description":"Find public discussions, complaints and requests for alternatives. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"subreddit":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"text":{"type":"string","nullable":true},"created_at":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"score":{"type":"number","nullable":true},"comments":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/youtube-search":{"post":{"summary":"Find public videos about a subject.","description":"Find public videos about a subject. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"query":"home builders in Philadelphia"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"channel":{"type":"string","nullable":true},"published":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"views":{"type":"number","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}},"/v1/signals/facebook-events":{"post":{"summary":"Read public events for a known Facebook page.","description":"Read public events for a known Facebook page. Requires linkedin:read and an active Pro subscription. Synchronous response; keep the same Idempotency-Key on retry.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string","minLength":1,"maxLength":4000},"limit":{"type":"integer","default":5,"minimum":1,"maximum":25}}},"example":{"url":"https://www.facebook.com/business"}}}},"responses":{"200":{"description":"Sourced research result","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["items","answer","next_cursor"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["ids","source_url"],"properties":{"ids":{"type":"object","additionalProperties":false,"properties":{"acoaa":{"type":"string","nullable":true},"linkedin_profile_url":{"type":"string","nullable":true},"linkedin_company_url":{"type":"string","nullable":true},"linkedin_company_id":{"type":"string","nullable":true},"domain":{"type":"string","nullable":true},"company_name":{"type":"string","nullable":true}}},"source_url":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"starts_at":{"type":"string","nullable":true},"place":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"is_online":{"type":"boolean","nullable":true}}}},"answer":{"type":"object","nullable":true,"properties":{"text":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}}}}}},"next_cursor":{"type":"string","nullable":true,"description":"Always null in V1; results are a bounded sample."},"errors":{"type":"array","items":{"type":"object","properties":{"input_index":{"type":"integer"},"url":{"type":"string"},"code":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","capability","cached","cached_at","count","fetched_at","partial","truncated","warnings"],"properties":{"request_id":{"type":"string"},"capability":{"type":"string"},"cached":{"type":"boolean"},"cached_at":{"type":"string","nullable":true},"count":{"type":"integer"},"fetched_at":{"type":"string"},"partial":{"type":"boolean"},"truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"401":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"402":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"403":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"409":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"429":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"502":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"503":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}},"504":{"description":"Signals request rejected or temporarily unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"available_again_at":{"type":"string","nullable":true}}}}}}},"tags":["Signals"]}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Wannalead API key (prefix `wlk_`). Rights are two scopes: `read` (required on every operation) and `write` (additionally required on mutating operations, marked `x-required-scope: write`). OpenAPI does not carry scopes on apiKey/http schemes, so the required scope is declared per-operation via the `x-required-scope` extension. Enforced server-side (missing scope → 403 insufficient_permissions)."},"BearerAuth":{"type":"http","scheme":"bearer"}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"}},"RequiredIdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}},"Prefer":{"name":"Prefer","in":"header","required":false,"schema":{"type":"string","examples":["wait=25","respond-async"]}},"Wait":{"name":"wait","in":"query","required":false,"schema":{"type":"boolean"}},"TimeoutMs":{"name":"timeout_ms","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25000}},"JobID":{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}},"LemlistConnectionID":{"name":"connection_id","in":"path","required":true,"schema":{"type":"string"}},"LemlistCampaignID":{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}},"LemlistLeadID":{"name":"lead_id","in":"path","required":true,"schema":{"type":"string"}},"WebhookID":{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","pattern":"^whk_[0-9a-f]+$"}},"LemlistPushID":{"name":"push_id","in":"path","required":true,"schema":{"type":"string"}},"AutomationCampaignID":{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string"}},"AgentRunID":{"name":"run_id","in":"path","required":true,"schema":{"type":"string","pattern":"^arun_[a-zA-Z0-9]+$"}},"AutomationResumePlanID":{"name":"plan_id","in":"path","required":true,"schema":{"type":"string"}},"AutomationSequenceID":{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string"}},"AutomationImportBatchID":{"name":"batch_id","in":"path","required":true,"schema":{"type":"string"}},"AutomationTargetID":{"name":"target_id","in":"path","required":true,"schema":{"type":"string"}},"AutomationMessageDraftID":{"name":"draft_id","in":"path","required":true,"schema":{"type":"string"}},"LinkedInAccountID":{"name":"linkedin_account_id","in":"path","required":true,"schema":{"type":"string"}}},"responses":{"JobAccepted":{"description":"Job accepted","headers":{"Location":{"schema":{"type":"string"}},"Retry-After":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}},"JobOrData":{"description":"Completed data when bounded wait finishes, otherwise job state","content":{"application/json":{"schema":{"type":"object"}}}},"Error":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Rate limited or quota exceeded","headers":{"Retry-After":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RetryableConflict":{"description":"`retryable_conflict`: the campaign was busy with concurrent updates (write conflict) and the request did not finish. Wait `Retry-After` seconds and retry the identical request with the same Idempotency-Key. Multi-target operations are applied in small idempotent batches, so work that already committed is skipped on retry rather than repeated.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"BatchTooLarge":{"description":"`batch_too_large`: the request did more work than one transaction allows. Do not retry it unchanged; split `targets` / `target_ids` into batches of at most `recommended_batch_size` (50) and send them as separate requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"BillingRequired":{"description":"An active LinkedIn plan or billing action is required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"AutomationData":{"description":"Automation response envelope","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","additionalProperties":true},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"latency_ms":{"type":"number"}},"required":["request_id","latency_ms"],"additionalProperties":true}},"required":["data","meta"],"additionalProperties":false}}}}},"schemas":{"EnrichmentRequest":{"type":"object","properties":{"targets":{"type":"array","prefixItems":[{"type":"string","const":"telephone"}],"minItems":1,"maxItems":1},"mode":{"type":"string","enum":["cost_saver","balanced","max_coverage"],"default":"balanced"},"campaign_id":{"type":"string"},"preflight_only":{"type":"boolean","default":false},"telephone":{"type":"object","properties":{"type":{"type":"string","const":"mobile"},"require_e164":{"type":"boolean","const":true},"filter_landline":{"type":"boolean","const":true}},"additionalProperties":false},"budget":{"type":"object","properties":{"max_billable_amount":{"type":"number","minimum":0},"max_billable_amount_per_item":{"type":"number","minimum":0},"stop_when_budget_exceeded":{"type":"boolean","const":true}},"additionalProperties":false},"items":{"type":"array","minItems":1,"maxItems":2000,"items":{"type":"object","properties":{"external_id":{"type":"string"},"campaign_target_id":{"type":"string"},"linkedin_url":{"type":"string"},"linkedin_profile_urn":{"type":"string"},"member_profile_urn":{"type":"string"},"acoaa":{"type":"string"},"public_identifier":{"type":"string"},"linkedin_slug":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company_name":{"type":"string"},"domain":{"type":"string"},"country":{"type":"string"}},"additionalProperties":false}}},"required":["targets","items"],"additionalProperties":false},"EnrichmentJob":{"type":"object","properties":{"job_id":{"type":"string"},"status":{"type":"string"},"targets":{"type":"array","items":{"type":"string","const":"telephone"}},"billing":{"type":"object","additionalProperties":true},"items":{"type":"array","items":{"type":"object"}},"next_cursor":{"type":["string","null"]}},"required":["job_id","status","targets","billing","items","next_cursor"],"additionalProperties":false},"AgentRunCreateRequest":{"type":"object","properties":{"client_run_id":{"type":"string","minLength":1,"maxLength":200,"description":"Stable caller-owned run key, for example the workflow name plus UTC business date."},"channel":{"type":"string","minLength":1,"maxLength":80},"objective":{"type":"string","maxLength":500},"started_at":{"type":"integer","minimum":0}},"required":["client_run_id","channel"],"additionalProperties":false},"AgentRunEventRequest":{"type":"object","properties":{"client_event_id":{"type":"string","minLength":1,"maxLength":200,"description":"Stable caller-owned event key. Reusing it with the same body is a replay; changing the body returns 409."},"event_type":{"type":"string","pattern":"^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$"},"status":{"type":"string","enum":["planned","queued","running","succeeded","failed","blocked","skipped","deferred"]},"endpoint_key":{"type":"string"},"job_id":{"type":"string","description":"Public Wannalead job ID. The API verifies workspace ownership and derives endpoint_key from the job."},"occurred_at":{"type":"integer","minimum":0},"payload":{"type":"object","maxProperties":64,"description":"Agent-safe summary up to 8 KiB. Provider URLs, credentials, browser routing, and unprocessed response bodies are rejected; provider URNs and ACoAA identifiers are allowed.","additionalProperties":true}},"required":["client_event_id","event_type","status"],"additionalProperties":false},"OnboardingBootstrapRequest":{"type":"object","properties":{"org_id":{"type":"string"},"org_name":{"type":"string"},"client_id":{"type":"string"},"api_key_name":{"type":"string"},"scope":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"OnboardingWorkspaceRequest":{"type":"object","properties":{"org_name":{"type":"string"}},"additionalProperties":false},"OnboardingWorkspaceResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"org_id":{"type":"string"},"org_name":{"type":"string"},"billing_reference_id":{"type":"string"},"created_org":{"type":"boolean"}},"required":["org_id","org_name","billing_reference_id","created_org"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"ApiKeyPermissionsRequest":{"type":"object","properties":{"api_key_id":{"type":"string"},"scope":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}}},"required":["api_key_id"],"additionalProperties":false},"ExtensionPairingRequest":{"type":"object","properties":{"org_id":{"type":"string"},"org_name":{"type":"string"},"label":{"type":"string"}},"additionalProperties":false},"CliAuthStartRequest":{"type":"object","properties":{"client_id":{"type":"string"},"api_key_name":{"type":"string"},"scope":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CliAuthApproveRequest":{"type":"object","properties":{"request_id":{"type":"string"},"user_code":{"type":"string"},"org_id":{"type":"string"},"org_name":{"type":"string"}},"required":["request_id","user_code"],"additionalProperties":false},"CliAuthTokenRequest":{"type":"object","properties":{"request_id":{"type":"string"},"poll_token":{"type":"string"}},"required":["request_id","poll_token"],"additionalProperties":false},"WebhookEventType":{"type":"string","enum":["message.received","relation.new","account.status"]},"WebhookCreateRequest":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public https endpoint receiving POST deliveries."},"events":{"type":"array","minItems":1,"uniqueItems":true,"items":{"$ref":"#/components/schemas/WebhookEventType"}},"name":{"type":"string","maxLength":100},"secret":{"type":"string","minLength":16,"maxLength":256,"description":"Optional signing secret. When omitted a `whsec_` secret is generated. Returned once in the create response."}},"required":["url","events"],"additionalProperties":false},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"events":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEventType"}},"name":{"type":["string","null"]},"status":{"type":"string","enum":["active","disabled","deleted"]},"disabled_reason":{"type":["string","null"],"enum":["consecutive_failures",null]},"secret_last4":{"type":"string"},"consecutive_failures":{"type":"integer"},"last_success_at":{"type":["number","null"]},"last_failure_at":{"type":["number","null"]},"created_at":{"type":"number"},"updated_at":{"type":"number"}},"required":["id","url","events","name","status","disabled_reason","secret_last4","consecutive_failures","last_success_at","last_failure_at","created_at","updated_at"]},"WebhookWithSecret":{"allOf":[{"$ref":"#/components/schemas/Webhook"},{"type":"object","properties":{"secret":{"type":"string"}},"required":["secret"]}]},"WebhookEvent":{"type":"object","description":"Body of every delivery. Headers: x-wannalead-event, x-wannalead-event-id, x-wannalead-delivery, x-wannalead-webhook-id, x-wannalead-attempt, x-wannalead-timestamp, x-wannalead-signature. `data.account` is the LinkedIn account the event belongs to. message.received data: conversation_urn, message_urn, sender {key, name}, text, subject, content_type, attachments, delivered_at. relation.new data: profile {key, public_identifier, name, headline}, connected_at, source (mirror|campaign). account.status data: previous_status, status (healthy|needs_login|checkpoint|disabled), reason.","properties":{"id":{"type":"string"},"type":{"$ref":"#/components/schemas/WebhookEventType"},"created_at":{"type":"string","format":"date-time"},"occurred_at":{"type":"string","format":"date-time"},"workspace_id":{"type":"string"},"data":{"type":"object","additionalProperties":true}},"required":["id","type","created_at","occurred_at","workspace_id","data"]},"LemlistConnectionCreateRequest":{"type":"object","properties":{"name":{"type":"string"},"api_key":{"type":"string","description":"Lemlist API key. The secret is verified and stored server-side only; it is never returned."}},"required":["api_key"],"additionalProperties":false},"LemlistConnection":{"type":"object","properties":{"connection_id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["active","invalid","revoked"]},"api_key_last4":{"type":"string"},"external_team_id":{"type":["string","null"]},"external_team_name":{"type":["string","null"]},"last_verified_at":{"type":["number","null"]},"created_at":{"type":"number"},"updated_at":{"type":"number"}},"required":["connection_id","name","status","api_key_last4","external_team_id","external_team_name","last_verified_at","created_at","updated_at"],"additionalProperties":false},"LemlistCampaignCreateRequest":{"type":"object","properties":{"connection_id":{"type":"string","description":"Required when the workspace has multiple Lemlist connections."},"name":{"type":"string"}},"required":["name"],"additionalProperties":false},"LemlistCampaign":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":["string","null"]},"sequence_id":{"type":["string","null"]},"labels":{"type":"array","items":{}},"created_at":{"type":["string","null"]}},"required":["id","name","status","sequence_id","labels","created_at"],"additionalProperties":true},"LemlistLeadDelete":{"type":"object","properties":{"connection_id":{"type":"string"},"campaign_id":{"type":"string"},"lead_id":{"type":"string"},"action":{"type":"string","enum":["remove","unsubscribe"]},"removed":{"type":"boolean"},"lead":{"type":"object","properties":{"id":{"type":"string"},"campaign_id":{"type":"string"},"email":{"type":["string","null"]},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"company_name":{"type":["string","null"]},"job_title":{"type":["string","null"]},"company_domain":{"type":["string","null"]},"is_paused":{"type":["boolean","null"]}},"required":["id","campaign_id","email","first_name","last_name","company_name","job_title","company_domain","is_paused"],"additionalProperties":false}},"required":["connection_id","campaign_id","lead_id","action","removed","lead"],"additionalProperties":false},"LemlistPushLead":{"type":"object","properties":{"leadId":{"type":"string"},"sourceLeadId":{"type":"string"},"sourceJobId":{"type":"string"},"email":{"type":"string"},"candidateEmail":{"type":"string","description":"Unverified inferred email. It is not promoted to email automatically."},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"companyName":{"type":"string"},"jobTitle":{"type":"string"},"headline":{"type":"string"},"location":{"type":"string"},"linkedinUrl":{"type":"string"},"profileUrl":{"type":"string"},"publicIdentifier":{"type":"string"},"companyDomain":{"type":"string"},"companyWebsiteUrl":{"type":"string"},"companyLinkedinUrl":{"type":"string"},"companyLinkedinId":{"type":"string"},"sourceEndpoint":{"type":"string"},"sourceQuery":{"type":"string"},"sourceSignal":{"type":"string"}},"additionalProperties":true},"LemlistPushRequest":{"type":"object","properties":{"connection_id":{"type":"string","description":"Required when the workspace has multiple Lemlist connections."},"campaign_id":{"type":"string"},"deduplicate":{"type":"boolean","default":true},"leads":{"type":"array","minItems":1,"maxItems":100,"items":{"$ref":"#/components/schemas/LemlistPushLead"}}},"required":["campaign_id","leads"],"additionalProperties":false},"LemlistPushItem":{"type":"object","properties":{"item_key":{"type":"string"},"source_lead_id":{"type":["string","null"]},"source_job_id":{"type":["string","null"]},"email":{"type":["string","null"]},"linkedin_url":{"type":["string","null"]},"company_domain":{"type":["string","null"]},"lemlist_lead_id":{"type":["string","null"]},"status":{"type":"string","enum":["pending","accepted","skipped","failed"]},"error_code":{"type":["string","null"]},"error_message":{"type":["string","null"]}},"required":["item_key","source_lead_id","source_job_id","email","linkedin_url","company_domain","lemlist_lead_id","status","error_code","error_message"],"additionalProperties":false},"LemlistPush":{"type":"object","properties":{"push_id":{"type":"string"},"status":{"type":"string","enum":["running","succeeded","partial_failed","failed"]},"connection_id":{"type":"string"},"campaign_id":{"type":"string"},"counts":{"type":"object","properties":{"total":{"type":"integer"},"accepted":{"type":"integer"},"skipped":{"type":"integer"},"failed":{"type":"integer"}},"required":["total","accepted","skipped","failed"],"additionalProperties":false},"error_code":{"type":["string","null"]},"error_message":{"type":["string","null"]},"created_at":{"type":"number"},"updated_at":{"type":"number"},"finished_at":{"type":["number","null"]},"items":{"type":"array","items":{"$ref":"#/components/schemas/LemlistPushItem"}}},"required":["push_id","status","connection_id","campaign_id","counts","error_code","error_message","created_at","updated_at","finished_at","items"],"additionalProperties":false},"AutomationRequest":{"type":"object","additionalProperties":true},"FeedbackRequest":{"type":"object","properties":{"message":{"type":"string","maxLength":5000},"sentiment":{"type":"integer","minimum":1,"maximum":5},"context":{"type":"string","maxLength":2000}},"additionalProperties":false,"anyOf":[{"required":["message"]},{"required":["sentiment"]}]},"AttachmentMediaMultipartRequest":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"The file or photo to attach, up to 20 MiB, with its file name. Video and audio are rejected."}}},"VoiceMediaMultipartRequest":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"AAC audio in an MP4/M4A container (audio/mp4), up to 20 MiB. Convert other formats first, for example `ffmpeg -i input -c:a aac -b:a 32k -ac 1 voice.m4a`."}},"additionalProperties":false},"FeedbackMultipartRequest":{"type":"object","properties":{"message":{"type":"string","maxLength":5000},"sentiment":{"type":"integer","minimum":1,"maximum":5},"context":{"type":"string","maxLength":2000},"attachment":{"type":"string","format":"binary","description":"PNG, JPG, WebP, or GIF image up to 5 MiB."}},"additionalProperties":false,"anyOf":[{"required":["message"]},{"required":["sentiment"]}]},"AutomationMessageVariantRequest":{"type":"object","description":"Creates, updates, archives, or replaces a message variant set. replace_set defaults to a read-only dry run; pass dry_run=false to apply to a paused campaign. Sent and completed targets are preserved, while unsent frozen drafts and queued jobs are rebound atomically.","properties":{"operation":{"type":"string","enum":["create","update","archive","replace_set"],"default":"create"},"variant_id":{"type":"string"},"step_key":{"type":"string"},"channel":{"type":"string","enum":["invitation_note","first_dm","follow_up"]},"variant_key":{"type":"string"},"weight":{"type":"number","exclusiveMinimum":0},"holdout":{"type":"boolean"},"voice_media_id":{"type":"string","description":"Makes this a voice variant: first_dm and follow_up steps send this uploaded voice message (POST /v1/linkedin/media/voice) instead of text. Requires llm_mode=none, no template_text and no holdout. On update, swaps the audio of an existing voice variant."},"attachment_media_id":{"type":"string","description":"Attaches this uploaded file or photo (POST /v1/linkedin/media/attachment) to every first_dm or follow_up message of the variant, with the rendered text or alone when template_text is omitted. Not with voice_media_id, a holdout or an invitation_note. On update, a new id swaps the file and an empty string removes it. Each draft keeps the file it was created with."},"template_text":{"type":"string","maxLength":4000,"description":"User-configurable message template. Supports {{variable}} and {{variable|fallback}}. Custom placeholders such as {{postUrl}} must be declared in variable_schema. sender.*, signature, plainTextSignature, and unsubscribeUrl are reserved.","example":"Hi {{firstName|there}}, I saw your comment ({{postUrl}})."},"variable_schema":{"type":"object","description":"Custom variable names mapped to human-readable descriptions. Native lead/profile variables do not need to be declared.","additionalProperties":{"type":"string"},"example":{"postUrl":"LinkedIn post URL"}},"max_chars":{"type":"integer","minimum":1,"maximum":4000},"review_policy":{"type":"string","enum":["none","required","auto_allowed"]},"llm_mode":{"type":"string","enum":["none","context_variables","proposed_copy"]},"dry_run":{"type":"boolean","default":true,"description":"For replace_set, previews counts and rendered messages without writing. Set false to apply after review."},"variables":{"type":"object","description":"Campaign-wide values used while rendering replacement templates, for example postUrl.","additionalProperties":{"type":"string"},"example":{"postUrl":"https://example.invalid/post/7480970842437459968"}},"target_variables":{"type":"object","maxProperties":500,"description":"Per-target template and routing values keyed by public target_id. Omit messageLanguage to use the server-detected FR/EN value from visit_profile; a clearly classifiable commentExcerpt takes priority over profile signals. Supplying messageLanguage is an explicit user override. The combined UTF-8 size of target ids, variable keys, and values must not exceed 786,432 bytes (768 KiB); the complete message-variant request body is limited to 768 KiB.","additionalProperties":{"type":"object","maxProperties":20,"additionalProperties":{"type":"string","maxLength":2000}},"example":{"tgt_example":{"firstName":"Ariane","messageLanguage":"fr","commentExcerpt":"agir pendant que le signal est frais"}}},"groups":{"type":"array","minItems":1,"maxItems":10,"description":"For replace_set, maps exact colon-delimited external_key signal tokens (plus optional variable_equals) to a user-authored weighted A/B template set. Variants may carry their own attachment_media_id, so each routed group can send a different file.","items":{"type":"object","properties":{"group_key":{"type":"string"},"external_key_tokens":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string"}},"variable_equals":{"type":"object","maxProperties":20,"description":"Optional exact per-target variable matches combined with the external_key token selector, for example messageLanguage=fr.","additionalProperties":{"type":"string","maxLength":200},"example":{"messageLanguage":"fr"}},"variants":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","properties":{"variant_key":{"type":"string"},"weight":{"type":"number","exclusiveMinimum":0},"template_text":{"type":"string","maxLength":4000},"attachment_media_id":{"type":"string","description":"Uploaded file or photo (POST /v1/linkedin/media/attachment) sent with this variant's first_dm or follow_up message. Route leads to different files with one group per file and variable_equals on a target_variables value. template_text is optional when set."}},"required":["variant_key","weight"],"anyOf":[{"required":["template_text"]},{"required":["attachment_media_id"]}],"additionalProperties":false}}},"required":["group_key","external_key_tokens","variants"],"additionalProperties":false}}},"additionalProperties":false},"AutomationCampaignTargetInput":{"type":"object","properties":{"external_key":{"type":"string"},"profile_url":{"type":"string"},"public_identifier":{"type":"string"},"slug":{"type":"string"},"acoaa":{"type":"string"},"member_profile_urn":{"type":"string"}},"additionalProperties":false},"AutomationCampaignCreateRequest":{"type":"object","properties":{"name":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/components/schemas/AutomationCampaignTargetInput"}}},"required":["name"],"additionalProperties":false},"SimpleAutomationCampaignTarget":{"type":"object","properties":{"profile_url":{"type":"string"},"public_identifier":{"type":"string"},"slug":{"type":"string"},"first_message":{"type":"string","minLength":1,"maxLength":2000,"description":"Exact first direct message sent after the invitation is accepted (the invitation itself carries no note)."},"follow_up":{"type":"string","minLength":1,"maxLength":2000,"description":"Exact follow-up direct message."}},"required":["first_message","follow_up"],"additionalProperties":false},"SimpleAutomationCampaignRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"acceptance_window_days":{"type":"integer","minimum":1,"maximum":31,"default":30},"first_message_delay_hours":{"type":"integer","minimum":0,"maximum":168,"default":24},"follow_up_delay_days":{"type":"integer","minimum":1,"maximum":30,"default":4},"schedule_policy":{"type":["object","null"],"description":"Sending window for visible actions (invitations, messages, likes, comments). Actions due outside it wait for the next opening; reads keep running. Omit or null to send at any hour.","required":["timezone"],"properties":{"timezone":{"type":"string","description":"IANA time zone, e.g. Europe/Paris."},"weekdays":{"type":"array","minItems":1,"items":{"type":"integer","minimum":0,"maximum":6},"description":"0 = Sunday to 6 = Saturday. Defaults to every day."},"start_time":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","default":"00:00"},"end_time":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","default":"24:00"}}},"targets":{"type":"array","minItems":1,"maxItems":100,"items":{"$ref":"#/components/schemas/SimpleAutomationCampaignTarget"}}},"required":["name","targets"],"additionalProperties":false},"SimpleAutomationCampaignActivationRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"acceptance_window_days":{"type":"integer","minimum":1,"maximum":31,"default":30},"first_message_delay_hours":{"type":"integer","minimum":0,"maximum":168,"default":24},"follow_up_delay_days":{"type":"integer","minimum":1,"maximum":30,"default":4},"schedule_policy":{"type":["object","null"],"description":"Sending window for visible actions (invitations, messages, likes, comments). Actions due outside it wait for the next opening; reads keep running. Omit or null to send at any hour.","required":["timezone"],"properties":{"timezone":{"type":"string","description":"IANA time zone, e.g. Europe/Paris."},"weekdays":{"type":"array","minItems":1,"items":{"type":"integer","minimum":0,"maximum":6},"description":"0 = Sunday to 6 = Saturday. Defaults to every day."},"start_time":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","default":"00:00"},"end_time":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","default":"24:00"}}},"targets":{"type":"array","minItems":1,"maxItems":100,"items":{"$ref":"#/components/schemas/SimpleAutomationCampaignTarget"}},"preview_token":{"type":"string","pattern":"^scpv1_[a-f0-9]{64}$"},"confirm":{"type":"boolean","const":true}},"required":["name","targets","preview_token","confirm"],"additionalProperties":false},"AutomationCampaignResumePreviewRequest":{"type":"object","properties":{"policy":{"type":"string","enum":["spread"],"default":"spread"}},"additionalProperties":false},"AutomationCampaignResumeConfirmRequest":{"type":"object","required":["plan_id"],"properties":{"plan_id":{"type":"string"},"confirmation_token":{"type":"string"}},"additionalProperties":false},"AutomationCampaignSequenceRequest":{"type":"object","properties":{"source":{"type":"string","enum":["proposal","manual_edit","imported_template","bootstrap"]},"root_step_key":{"type":"string","description":"step_key of the first step. That step must have order 0 and delay_ms 0."},"branch_policy":{"type":"object","additionalProperties":true},"publish":{"type":"boolean"},"steps":{"type":"array","items":{"type":"object","properties":{"step_key":{"type":"string"},"type":{"type":"string","enum":["noop","profile.resolve","profile.visit","invitations.send","relationship.check","messages.send","messages.send_profile","posts.like"],"description":"Step type. `posts.like` (endpoint_key `posts.like`) discovers the target's recent posts and likes one; route its `post.liked` and `post.skipped` outcomes with branch_edges."},"channel":{"type":"string","enum":["control","linkedin"]},"step_kind":{"type":"string","enum":["channel_step","content_step","ai_generated","noop"]},"order":{"type":"number","description":"Unique step position, numbered from 0. The step named by root_step_key must have order 0."},"delay_ms":{"type":"number","description":"Wait before this step runs. Must be 0 on the root step; put waits on later steps or on branch_edges delayMs."},"endpoint_key":{"type":"string"},"review_policy":{"type":"string","enum":["none","required","auto_allowed"]},"canary_requirement":{"type":"string","enum":["none","browserless_fresh"]},"product_class":{"type":"string"},"risk_class":{"type":"string"},"limit_bucket":{"type":"string"},"branch_edges":{"type":"object","description":"Outcome-to-step routing. Event names are keys; each target object uses camelCase stepKey and optional delayMs/branchPath fields.","additionalProperties":{"type":"object","required":["stepKey"],"properties":{"stepKey":{"type":"string"},"delayMs":{"type":"number","minimum":0,"maximum":7776000000},"branchPath":{"type":"string"}},"additionalProperties":false}},"content":{"type":"object","additionalProperties":true}},"required":["step_key","type","order","delay_ms"],"additionalProperties":true}}},"additionalProperties":false},"AutomationCampaignImportRequest":{"type":"object","properties":{"source":{"type":"string"},"dedupe_policy":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/components/schemas/AutomationCampaignTargetInput"}}},"required":["targets"],"additionalProperties":false},"AutomationCampaignReviewRequest":{"type":"object","properties":{"target_ids":{"type":"array","items":{"type":"string"}},"decision":{"type":"string","enum":["approve","reject"]},"operation":{"type":"string","enum":["schedule"]},"confirmation_token":{"type":"string"},"sequence_version":{"type":"number"},"not_before_at":{"type":"number"},"schedule":{"type":"boolean"}},"required":["target_ids"],"additionalProperties":false},"AutomationTargetContextRequest":{"type":"object","properties":{"campaign_id":{"type":"string"},"source":{"type":"string","enum":["api","llm","browser_capture","manual"]},"observed_at":{"type":"number"},"facts":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"},"evidence_ref":{"type":"string"},"confidence":{"type":"number"}},"required":["key","value"],"additionalProperties":false}},"evidence_refs":{"type":"array","items":{"type":"string"}},"personalization_hints":{"type":"object","additionalProperties":{"type":"string"}},"prohibited_claims":{"type":"array","items":{"type":"string"}},"proposed_copy":{"type":"object","properties":{"step_key":{"type":"string"},"text":{"type":"string"}},"required":["step_key","text"],"additionalProperties":false},"confidence":{"type":"number"},"freshness":{"type":"number"}},"required":["campaign_id"],"additionalProperties":false},"AutomationMessageDraftRequest":{"type":"object","properties":{"campaign_id":{"type":"string"},"target_id":{"type":"string"},"step_key":{"type":"string"},"context_ids":{"type":"array","items":{"type":"string"}},"variables":{"type":"object","description":"Per-target values used to render the selected variant. Supports native variables (for example firstName and linkedinUrl) and custom variables declared by the variant (for example postUrl). sender.* and system variables are reserved.","additionalProperties":{"type":"string"},"example":{"firstName":"Ariane","postUrl":"https://example.invalid/post/123"}},"variant_id":{"type":"string"},"proposed_text":{"type":"string"},"model_provider_ref":{"type":"string"}},"required":["campaign_id","target_id","step_key"],"additionalProperties":false},"SalesNavLeadSearchRequest":{"type":"object","description":"Provide keywords or at least one filter.","properties":{"lang":{"type":"string","pattern":"^[a-z]{2}_[A-Z]{2}$","description":"Optional LinkedIn locale (e.g. fr_FR) for localized labels; the title typeahead only matches titles in this locale."},"keywords":{"type":"string","minLength":1,"description":"Free-text keywords (title, skill, company words)."},"function":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Function id or name (functionV2 taxonomy), e.g. 12 or human resources, 25 or sales."},"seniority":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Seniority id or name: 100 in training, 110 entry, 120 senior, 130 strategic, 200 entry level manager, 210 experienced manager, 220 director, 300 vp, 310 cxo, 320 owner/partner; decision_makers = 220,300,310."},"company_headcount":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Company size letters A-I or ranges: self-employed, 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+."},"region":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Numeric LinkedIn geo id, e.g. 105015875 (France). Alias: geo_id."},"geo_id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for region."},"industry":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Numeric LinkedIn industry id."},"current_title":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Numeric Sales Navigator title id (e.g. 1837 = DRH). Use keywords for free text."},"current_company":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Numeric LinkedIn company id(s). Alias: company_id."},"company_id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for current_company."},"past_company":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Numeric LinkedIn company id(s) the lead worked at."},"recently_changed_jobs":{"type":"boolean","description":"Only leads who changed jobs in the last 90 days."},"posted_on_linkedin":{"type":"boolean","description":"Only leads who posted on LinkedIn in the last 30 days."},"start":{"type":"integer","minimum":0,"maximum":2499,"description":"Pagination offset; pass next_start."},"count":{"type":"integer","minimum":1,"maximum":100,"description":"Rows per page (default 25, max 100)."}}},"SalesNavFacetsTypeaheadRequest":{"type":"object","required":["type","query"],"properties":{"lang":{"type":"string","pattern":"^[a-z]{2}_[A-Z]{2}$","description":"Optional LinkedIn locale (e.g. fr_FR) for localized labels; the title typeahead only matches titles in this locale."},"type":{"type":"string","enum":["title","industry","company"],"description":"Facet to search."},"query":{"type":"string","minLength":1,"description":"Text to resolve, e.g. DRH."},"count":{"type":"integer","minimum":1,"maximum":25}}},"SalesNavAccountsSearchRequest":{"type":"object","properties":{"lang":{"type":"string","pattern":"^[a-z]{2}_[A-Z]{2}$","description":"Optional LinkedIn locale (e.g. fr_FR) for localized labels; the title typeahead only matches titles in this locale."},"keywords":{"type":"string"},"company_headcount":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"industry":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"region":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"start":{"type":"integer","minimum":0},"count":{"type":"integer","minimum":1,"maximum":25}}},"SalesNavCompaniesGetRequest":{"type":"object","required":["company_id"],"properties":{"company_id":{"type":"string","description":"Numeric LinkedIn company id (fs_salesCompany / organization id)."}}},"SalesNavCompaniesInsightsRequest":{"type":"object","required":["company_id","insight"],"properties":{"company_id":{"type":"string"},"insight":{"type":"string","enum":["headcount","functional_headcount","new_hires","job_openings"]}}},"SalesNavCompaniesAlsoViewedRequest":{"type":"object","required":["company_id"],"properties":{"company_id":{"type":"string"}}},"SalesNavProfilesGetRequest":{"type":"object","properties":{"sales_profile_urn":{"type":"string","description":"urn:li:fs_salesProfile:(ACwAA…,NAME_SEARCH,token) from a search row."},"sales_profile_id":{"type":"string"},"auth_type":{"type":"string"},"auth_token":{"type":"string"},"acoaa":{"type":"string","description":"Flagship ACoAA id; Sales Navigator resolves it like an ACwAA id."}}},"SalesNavProfilesUnmaskRequest":{"type":"object","required":["current_company"],"properties":{"photo_id":{"type":"string","description":"photoId of the headless search.people_srp row: exact match on the profile picture."},"headline":{"type":"string","description":"Headline of the LinkedIn Member hit, e.g. \"Commerciale chez Groupe SMB\"."},"location":{"type":"string","description":"Location of the hit, e.g. \"Petit-Bourg\"."},"current_company":{"type":"string","description":"LinkedIn company id the people search filtered on."},"keywords":{"type":"string","description":"Overrides the title keywords derived from headline."},"region":{"type":"string"},"industry":{"type":"string"}}},"SalesNavLeadsSimilarRequest":{"type":"object","required":["company_id"],"properties":{"sales_profile_urn":{"type":"string"},"sales_profile_id":{"type":"string"},"company_id":{"type":"string"},"count":{"type":"integer","minimum":1,"maximum":25}}},"SalesNavListsRequest":{"type":"object","properties":{"kind":{"type":"string","enum":["leads","accounts"]},"start":{"type":"integer","minimum":0},"count":{"type":"integer","minimum":1,"maximum":100}}},"SalesNavListsItemsRequest":{"type":"object","required":["list_id"],"properties":{"list_id":{"type":"string","description":"Numeric Sales Navigator list id from salesnav.lists.list."},"kind":{"type":"string","enum":["leads","accounts"]},"start":{"type":"integer","minimum":0},"count":{"type":"integer","minimum":1,"maximum":100,"description":"Up to 100 for leads, 25 for accounts."}}},"SalesNavLeadsSaveRequest":{"type":"object","properties":{"sales_profile_urn":{"type":"string","description":"urn:li:fs_salesProfile:(ACwAA…,NAME_SEARCH,token) from salesnav.leads.search or salesnav.lists.items."},"sales_profile_id":{"type":"string","description":"Sales Navigator ACwAA id, with optional auth_type/auth_token."},"auth_type":{"type":"string"},"auth_token":{"type":"string"},"list_id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Lead list id(s) to save into; omit to only save the lead."},"company_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"Optional account to attach the lead to."},"confirm_send":{"type":"boolean"},"dry_run":{"type":"boolean"}}},"SalesNavAccountsSaveRequest":{"type":"object","required":["company_id"],"properties":{"company_id":{"oneOf":[{"type":"integer"},{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Numeric company id(s), up to 25."},"list_id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Account list id(s) to save into."},"confirm_send":{"type":"boolean"},"dry_run":{"type":"boolean"}}},"SalesNavContractsSelectRequest":{"type":"object","required":["contract_urn","seat_urn"],"properties":{"contract_urn":{"type":"string","description":"urn:li:contract:<id> from salesnav.contracts.list."},"seat_urn":{"type":"string","description":"urn:li:seat:<id> from salesnav.contracts.list."},"contract_name":{"type":"string"},"confirm_send":{"type":"boolean"},"dry_run":{"type":"boolean"}}},"RecruiterProjectsListRequest":{"type":"object","properties":{"keyword":{"type":"string"},"start":{"type":"integer","minimum":0},"count":{"type":"integer","minimum":1,"maximum":50}}},"RecruiterProjectsGetRequest":{"type":"object","properties":{"hiring_project_urn":{"type":"string","description":"urn:li:ts_hiring_project:(urn:li:ts_hiring_context:<contract>,<project>)."},"contract_id":{"type":"string"},"hiring_project_id":{"type":"string"}}},"RecruiterCandidatesAddRequest":{"type":"object","required":["candidate_urn","sourcing_channel_urn"],"properties":{"hiring_project_urn":{"type":"string"},"contract_id":{"type":"string"},"hiring_project_id":{"type":"string"},"candidate_urn":{"type":"string"},"sourcing_channel_urn":{"type":"string"},"confirm_send":{"type":"boolean"},"dry_run":{"type":"boolean"}}},"PostsTargetAudienceRequest":{"type":"object","properties":{"job_function":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"seniority":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"industry":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"location":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"school":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"language":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Locales such as fr_FR or en_US."},"headcount":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Company size ranges such as 51-200 or 10001-."},"organization_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"Optional page id: count only that page's followers."}}},"RawGetRequest":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":"Supported API-relative path or absolute API URL, with query values percent-encoded."},"query_params":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional query parameters appended to path (values are URL-encoded)."}}},"SalesNavSavedSearchesListRequest":{"type":"object","properties":{"kind":{"type":"string","enum":["leads","accounts"]},"count":{"type":"integer","minimum":1,"maximum":50}}},"PeopleSearchRequest":{"type":"object","properties":{"keywords":{"type":"string","minLength":1,"description":"Optional title, persona, role, or skill keywords."},"q":{"type":"string","minLength":1,"description":"Alias for keywords."},"current_company":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"company_id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for current_company."},"companyId":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for current_company."},"past_company":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"pastCompany":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for past_company."},"geo":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Human geography name resolved server-side, or a search geography id."},"geo_id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"geoUrn":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for geo_id."},"function":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"LinkedIn functionV2 id or supported human function name."},"functionV2":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for function."},"industry":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"school":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"School ids (search.parameters type SCHOOL), e.g. 235785 for HEC Paris. Members who studied there."},"seniority":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"seniorityV2":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for seniority."},"follower_of":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"followerOf":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for follower_of."},"connection_of":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"ACoAA profile id(s) whose mutual connections with the connected account are searched (the profile page's \"N mutual connections\" link). Only ACoAA ids are accepted; resolve slugs with profiles.resolve first. Defaults network to F because LinkedIn only exposes shared 1st-degree connections behind this facet."},"connectionOf":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for connection_of."},"network":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"start":{"type":"integer","minimum":0,"maximum":999},"page":{"type":"integer","minimum":1,"maximum":100,"description":"Backward-compatible 1-based alias for start. Ignored when start is provided."},"count":{"type":"integer","minimum":1,"maximum":50,"default":10,"description":"Rows per page. LinkedIn returns an empty page above 50, so larger values are clamped to 50; paginate with start/next_start."}},"anyOf":[{"required":["keywords"]},{"required":["q"]},{"required":["current_company"]},{"required":["company_id"]},{"required":["companyId"]},{"required":["past_company"]},{"required":["pastCompany"]},{"required":["geo"]},{"required":["geo_id"]},{"required":["geoUrn"]},{"required":["function"]},{"required":["functionV2"]},{"required":["industry"]},{"required":["seniority"]},{"required":["seniorityV2"]},{"required":["follower_of"]},{"required":["followerOf"]},{"required":["connection_of"]},{"required":["connectionOf"]},{"required":["network"]}],"additionalProperties":false},"CompanySearchRequest":{"type":"object","properties":{"keywords":{"type":"string","minLength":1,"description":"Company, category, product, or market keywords."},"company_hq_geo":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"companyHqGeo":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for company_hq_geo."},"industry_company_vertical":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"industryCompanyVertical":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for industry_company_vertical."},"company_size":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Human company-size buckets (for example 51-200) or LinkedIn A-I codes."},"companySize":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Alias for company_size."},"has_jobs":{"type":"boolean"},"hasJobs":{"type":"boolean","description":"Alias for has_jobs."},"network":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"start":{"type":"integer","minimum":0,"maximum":999},"count":{"type":"integer","minimum":1,"maximum":50,"default":10,"description":"Rows per page. LinkedIn returns an empty page above 50, so larger values are clamped to 50; paginate with start/next_start."}},"required":["keywords"],"additionalProperties":false},"LinkedInJobRequest":{"type":"object","properties":{"endpoint_key":{"type":"string","enum":["profile.full_unary","viewer.connections","profile.connections","profile.in_common","profile.following","profile.posts","profile.actions","presence.statuses","company.resolve","company.batch_modern","company.batch_legacy","companies.lookalikes","company.similar","company.feed","company.about","post.resolve","post.comments","post.reactions","post.reposters","feed.updates","search.people","search.groups","search.schools","search.events","search.companies","search.companies_srp","search.people_srp","search.job_changes","salesnav.seat","salesnav.leads.search","salesnav.facets.typeahead","salesnav.accounts.search","salesnav.companies.get","salesnav.companies.insights","salesnav.companies.also_viewed","salesnav.profiles.get","salesnav.leads.similar","salesnav.saved_searches.list","salesnav.lists.list","salesnav.lists.items","salesnav.leads.save","salesnav.accounts.save","salesnav.contracts.list","salesnav.contracts.select","recruiter.projects.list","recruiter.projects.get","recruiter.candidates.add","posts.target_audience","raw.get","search.content","ad_library.search","jobs.search_companies","jobs.detail","jobs.postings.list","jobs.postings.get","jobs.postings.create","jobs.postings.update","jobs.postings.publish","jobs.postings.close","jobs.applicants.list","jobs.applicants.get","jobs.applicants.resume","companies.followers","companies.admin_followers","companies.employees","companies.products","companies.services","companies.jobs","companies.workplace_policies","companies.credibility","companies.verification","groups.members","events.attendees","events.detail_batch","events.register","companies.follow","messages.mailbox_counts","messages.conversations","messages.thread","messages.seen_receipts","messages.seen","messages.send","messages.send_profile","messages.react","messages.delete","messages.conversations.update","messages.conversations.delete","messages.attachments.get","messages.send_inmail","messages.conversations.by_profile","search.parameters","me.inmail_balance","invitations.send","invitations.received","invitations.sent","invitations.accept","invitations.decline","invitations.withdraw","posts.like","posts.comment","posts.comment_reply","posts.repost","posts.create","posts.schedule","profiles.comments","profiles.recommendations","profiles.followers","profiles.reactions","profiles.skills","profiles.endorse","profiles.follow","profiles.unfollow","me.profile.update","profiles.lookalikes","profiles.similar","groups.feed","companies.related","companies.newsletters","newsletters.posts","newsletters.detail","me.recommended_people","me.followers","me.notifications","me.saved_posts","me.article_drafts"]},"params":{"type":"object","additionalProperties":{"type":"string"}},"profile_url":{"type":"string"},"public_identifier":{"type":"string"},"slug":{"type":"string"},"profile_urls":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"public_identifiers":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"slugs":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"company_url":{"type":"string"},"universal_name":{"type":"string"},"company_id":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"force_refresh":{"type":"boolean"},"allow_stale":{"type":"boolean"},"allow_partial":{"type":"boolean"},"enrich_missing":{"type":"boolean"},"max_age_seconds":{"type":"integer"},"activity_id":{"type":"string"},"post_url":{"type":"string"},"post_urn":{"type":"string"},"thread_urn":{"type":"string"},"parent_comment_urn":{"type":"string"},"root_content_urn":{"type":"string"},"conversation_urn":{"type":"string"},"message_urn":{"type":"string"},"category":{"type":"string","enum":["PRIMARY_INBOX","SECONDARY_INBOX","INBOX","MESSAGE_REQUEST_PENDING","ARCHIVE","SPAM"]},"last_updated_before":{"oneOf":[{"type":"integer"},{"type":"string"}]},"next_cursor":{"type":"string"},"sync_token":{"type":"string"},"delivered_before":{"oneOf":[{"type":"integer"},{"type":"string"}]},"count_before":{"type":"integer","minimum":1,"maximum":100},"count_after":{"type":"integer","minimum":0,"maximum":100},"text":{"type":"string"},"voice_media_id":{"type":"string","description":"messages.send and messages.send_profile: sends this uploaded voice message (POST /v1/linkedin/media/voice) instead of text. Mutually exclusive with text."},"recipient_profile_urn":{"type":"string"},"host_recipient_urn":{"type":"string"},"recipient_acoaa":{"type":"string"},"invitee_profile_urn":{"type":"string"},"invitee_acoaa":{"type":"string"},"reaction_type":{"type":"string","enum":["LIKE"]},"pagination_token":{"type":"string"},"dedupe_by_client_generated_token":{"type":"boolean"},"custom_message":{"type":"string","maxLength":300,"description":"Optional invitation note for /v1/linkedin/invitations/send."},"message":{"type":"string","maxLength":300,"description":"Compatibility alias for custom_message on invitations.send."},"confirm_send":{"type":"boolean","description":"Required as true for write endpoints such as /v1/linkedin/messages/send and /v1/linkedin/invitations/send."},"allow_write":{"type":"boolean","deprecated":true,"description":"Compatibility alias for confirm_send."},"dry_run":{"type":"boolean","description":"For guarded write endpoints, validate auth, scope, feature flag, and required fields without creating a job."},"preflight":{"type":"boolean","description":"Compatibility alias for dry_run."},"count":{"oneOf":[{"type":"integer"},{"type":"string"}]},"start":{"oneOf":[{"type":"integer"},{"type":"string"}]},"start_index":{"oneOf":[{"type":"integer"},{"type":"string"}]},"page":{"oneOf":[{"type":"integer"},{"type":"string"}]},"keywords":{"type":"string"},"keyword":{"type":"string"},"q":{"type":"string"},"company_hq_geo":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"industry_company_vertical":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"company_size":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"has_jobs":{"type":"boolean"},"network":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"date_posted":{"type":"string"},"sort_by":{"type":"string"},"countries":{"type":"string"},"country":{"type":"string"},"date_option":{"type":"string"},"ad_type":{"type":"string"},"account_owner":{"type":"string"},"ad_id":{"type":"string"},"job_id":{"oneOf":[{"type":"integer"},{"type":"string"}]},"geo_id":{"oneOf":[{"type":"integer"},{"type":"string"}]},"group_id":{"oneOf":[{"type":"integer"},{"type":"string"}]},"event_id":{"oneOf":[{"type":"integer"},{"type":"string"}]},"current_company":{"oneOf":[{"type":"integer"},{"type":"string"}]}},"additionalProperties":true},"PostCreateRequest":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":3000,"description":"Final LinkedIn post text, preserved exactly."},"image_url":{"type":"string","format":"uri","maxLength":2048,"description":"Optional public HTTPS PNG, JPEG, GIF, or WebP image URL. Redirects, private-network targets, and files over 10 MiB are rejected."},"confirm_send":{"type":"boolean","description":"Must be true to authorize this LinkedIn write."},"dry_run":{"type":"boolean","description":"Validate auth, scope, feature flag, text, and image URL without creating a job."},"preflight":{"type":"boolean","description":"Compatibility alias for dry_run."}},"required":["text"],"additionalProperties":false},"PostScheduleRequest":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":3000,"description":"Final LinkedIn post text, preserved exactly."},"scheduled_at":{"type":"string","format":"date-time","description":"ISO 8601 publication time with Z or an explicit UTC offset. Must be 15 minutes to 90 days in the future."},"image_url":{"type":"string","format":"uri","maxLength":2048,"description":"Optional public HTTPS PNG, JPEG, GIF, or WebP image URL. Redirects, private-network targets, and files over 10 MiB are rejected."},"confirm_send":{"type":"boolean","description":"Must be true to authorize this LinkedIn write."},"dry_run":{"type":"boolean","description":"Validate auth, scope, feature flag, schedule, text, and image URL without creating a job."},"preflight":{"type":"boolean","description":"Compatibility alias for dry_run."}},"required":["text","scheduled_at"],"additionalProperties":false},"EventsAttendeesRequest":{"type":"object","properties":{"event_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"LinkedIn professional event id."},"page":{"oneOf":[{"type":"integer","minimum":1},{"type":"string"}],"description":"1-based People Search page. start/start_index/count are not reliable on this LinkedIn surface."}},"required":["event_id"],"additionalProperties":false},"EventsDetailBatchRequest":{"type":"object","properties":{"event_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"One event id or a comma-separated list of event ids."},"event_ids":{"type":"array","items":{"oneOf":[{"type":"integer"},{"type":"string"}]},"description":"Array alternative to event_id CSV."}},"additionalProperties":false},"CompaniesFollowRequest":{"type":"object","required":["company_id"],"properties":{"company_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"Numeric LinkedIn company id, or urn:li:fsd_company:<id>. Get it from companies.resolve or search.companies."},"following":{"type":"boolean","description":"true follows the page (default), false unfollows it."},"confirm_send":{"type":"boolean","description":"Must be true for this LinkedIn write endpoint."},"dry_run":{"type":"boolean","description":"Validate the write contract without creating a job."}}},"ProfilesEndorseRequest":{"type":"object","properties":{"endorsed_skill_urn":{"type":"string","description":"urn:li:fsd_profileEndorsedSkill:(<ACoAA>,<skill id>) from profiles.skills (endorsedSkillUrn)."},"profile":{"type":"string","description":"Connection's ACoAA id or urn:li:fsd_profile URN; with skill_id instead of endorsed_skill_urn."},"skill_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"Numeric skill id from profiles.skills (skillId)."},"skill_urn":{"type":"string","description":"urn:li:fsd_skill:(<ACoAA>,<skill id>), as returned by profiles.skills."},"confirm_send":{"type":"boolean","description":"Must be true for this LinkedIn write endpoint."},"dry_run":{"type":"boolean","description":"Validate the write contract without creating a job."}}},"ProfilesFollowRequest":{"type":"object","required":["profile"],"properties":{"profile":{"type":"string","description":"Member ACoAA id or urn:li:fsd_profile URN. Resolve a slug or /in/ URL with profiles.resolve first."},"confirm_send":{"type":"boolean","description":"Must be true for this LinkedIn write endpoint."},"dry_run":{"type":"boolean","description":"Validate the write contract without creating a job."}}},"MeProfileUpdateRequest":{"type":"object","properties":{"headline":{"type":"string","maxLength":220,"description":"New profile headline. Send either headline or summary."},"summary":{"type":"string","maxLength":2600,"description":"New About section. Send either headline or summary."},"confirm_send":{"type":"boolean","description":"Must be true for this LinkedIn write endpoint."},"dry_run":{"type":"boolean","description":"Validate the write contract without creating a job."}}},"JobPostingsWriteRequest":{"type":"object","description":"Body of the guarded jobs.postings.* writes. create needs title (or title_id), company_id or company_name and location_id; update needs job_id plus at least one field; publish and close need job_id only.","properties":{"job_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"Job posting id, urn:li:fsd_jobPosting URN or /hiring/jobs/ URL (update, publish, close)."},"title":{"type":"string","description":"Job title text."},"title_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"LinkedIn standardized title id."},"company_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"LinkedIn company id or URN."},"company_name":{"type":"string","description":"Free-text company name when there is no company page."},"location_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"LinkedIn geo id of the job location."},"workplace":{"type":"string","enum":["ON_SITE","HYBRID","REMOTE"]},"employment_status":{"type":"string","enum":["FULL_TIME","PART_TIME","CONTRACT","TEMPORARY","OTHER","VOLUNTEER","INTERNSHIP"]},"description":{"type":"string","maxLength":10000,"description":"Job description; HTML tags allowed."},"contact_email":{"type":"string","description":"Email that receives applications made on LinkedIn."},"apply_url":{"type":"string","description":"External http(s) apply URL (instead of contact_email)."},"confirm_send":{"type":"boolean","description":"Must be true for this LinkedIn write endpoint."},"dry_run":{"type":"boolean","description":"Validate auth, linkedin:write scope, feature flag, and fields without creating a job."},"preflight":{"type":"boolean","description":"Compatibility alias for dry_run."}}},"EventsRegisterRequest":{"type":"object","properties":{"event_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"LinkedIn professional event id."},"viewer_status":{"type":"string","enum":["REGISTERED","INTERESTED"],"description":"REGISTERED for LGF/register flows, INTERESTED for regular join flows. Defaults to REGISTERED."},"confirm_send":{"type":"boolean","description":"Must be true for this LinkedIn write endpoint."},"dry_run":{"type":"boolean","description":"Validate auth, linkedin:write scope, feature flag, and event fields without creating a job."},"preflight":{"type":"boolean","description":"Compatibility alias for dry_run."}},"required":["event_id"],"additionalProperties":false},"JobAccepted":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"job_id":{"type":"string"},"status":{"type":"string"},"poll_url":{"type":"string"}},"required":["job_id","status","poll_url"]},{"type":"object","properties":{"status":{"type":"string","enum":["invitation_profile_resolve_pending","relationship_preflight_pending"]},"preflight_job_id":{"type":"string"},"poll_url":{"type":"string"},"invitation_job_created":{"const":false},"retry_after_seconds":{"type":"integer","minimum":1},"retry_with_same_idempotency_key":{"const":true},"next_step":{"type":"string"}},"required":["status","preflight_job_id","poll_url","invitation_job_created","retry_after_seconds","retry_with_same_idempotency_key","next_step"]},{"type":"object","properties":{"status":{"const":"post_resolve_pending"},"resolve_job_id":{"type":"string"},"poll_url":{"type":"string"},"retry_after_seconds":{"type":"integer","minimum":1},"next_step":{"type":"string"}},"required":["status","resolve_job_id","poll_url","retry_after_seconds","next_step"]}]},"meta":{"type":"object"}},"required":["data"]},"Job":{"type":"object","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string"},"status":{"type":"string","enum":["starting","queued","running","succeeded","failed","queue_failed","parse_failed","timed_out","canceled"],"description":"Terminal statuses: succeeded, failed, queue_failed, parse_failed, timed_out, canceled."},"endpoint_key":{"type":"string"},"result_expires_at":{"oneOf":[{"type":"number"},{"type":"null"}],"description":"Earliest Unix millisecond time when a large completed result may be pruned; null for small or unfinished results."},"empty_result_reason":{"type":"string","enum":["no_visible_results"],"description":"Present when companies.followers returns an empty visible page; the company may still have followers LinkedIn does not expose to this account."},"empty_result_message":{"type":"string"},"poll_after_ms":{"type":"integer","description":"Present only while the job is not terminal: minimum wait before polling again."},"parsed_export_schema_version":{"const":"wannalead.linkedin.dataset.v1"},"parsed":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileParsedList"},{"$ref":"#/components/schemas/ProfileConnectionParsedList"},{"$ref":"#/components/schemas/FollowingEntityParsedList"},{"$ref":"#/components/schemas/ProfileActionParsedList"},{"$ref":"#/components/schemas/PresenceStatusParsedList"},{"$ref":"#/components/schemas/CompanyParsedList"},{"$ref":"#/components/schemas/CompanySearchParsedList"},{"$ref":"#/components/schemas/AdvertiserParsedList"},{"$ref":"#/components/schemas/JobCompanySignalParsedList"},{"$ref":"#/components/schemas/CompanySignalParsedList"},{"$ref":"#/components/schemas/CompanyFollowerParsedList"},{"$ref":"#/components/schemas/GroupMemberParsedList"},{"$ref":"#/components/schemas/PostParsedList"},{"$ref":"#/components/schemas/PostCommentParsedList"},{"$ref":"#/components/schemas/PostReactionParsedList"},{"$ref":"#/components/schemas/PostReposterParsedList"},{"$ref":"#/components/schemas/PeopleSearchParsedList"},{"$ref":"#/components/schemas/GroupSearchParsedList"},{"$ref":"#/components/schemas/SchoolSearchParsedList"},{"$ref":"#/components/schemas/EventAttendeeParsedList"},{"$ref":"#/components/schemas/EventParsedList"},{"$ref":"#/components/schemas/MessageMailboxCountParsedList"},{"$ref":"#/components/schemas/MessageConversationParsedList"},{"$ref":"#/components/schemas/MessageThreadMessageParsedList"},{"$ref":"#/components/schemas/MessageSeenReceiptParsedList"},{"$ref":"#/components/schemas/MessageSeenParsed"},{"$ref":"#/components/schemas/NotificationParsedList"},{"$ref":"#/components/schemas/MessageSendParsed"},{"$ref":"#/components/schemas/InvitationSendParsed"},{"$ref":"#/components/schemas/PostEngagementWriteParsed"},{"$ref":"#/components/schemas/RawPassthroughParsed"}]},"next_cursor":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Top-level historical continuation for messages.conversations jobs. Pass it as next_cursor in the next request."},"has_more":{"type":"boolean","description":"Whether another page should be requested. Present for messages.conversations, offset-paginated product searches, and profiles.in-common."},"next_start":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Next offset for people.search, companies.search, and profiles.in-common, or null at the LinkedIn-visible ceiling/empty page (profiles.in-common infers it from a full page, since LinkedIn's paging.total is not surfaced)."},"requested_count":{"type":"integer","description":"Effective page size used for the LinkedIn call (Search Dash searches clamp count to 50)."},"returned_count":{"type":"integer"},"visibility_limited":{"type":"boolean","description":"Always true on product searches: rows reflect what LinkedIn shows the connected account (1st/2nd/3rd+ degree, capped at result_cap). It is a static caveat, not a restriction signal; an empty page is not evidence of a limit or block."},"result_cap":{"type":"integer","description":"Maximum visible results for the search query."},"search_limit_reached":{"type":"boolean","description":"Present and true when the connected LinkedIn account has hit LinkedIn's monthly profile-search limit (free accounts). LinkedIn then renders only ~3 results per page; paging or retrying will not return more until the limit resets or the account upgrades. Affected rows also carry dataQualityFlags: [\"LINKEDIN_SEARCH_MONTHLY_LIMIT_REACHED\"]."},"search_limit_message":{"type":"string","description":"Human-readable explanation accompanying search_limit_reached."},"error":{"description":"Null on success. A succeeded job reports code RESULT_EXPIRED once a large result is pruned: after 1 hour for ordinary product reads, 24 hours for searches, or 7 days for full profiles and internal pipelines, measured from job creation. Run the request again to get fresh data.","oneOf":[{"type":"null"},{"type":"object","properties":{"code":{"type":"string"},"reason_code":{"type":"string","description":"Optional machine-readable refinement for parser/upstream failures. Examples: NO_PARSEABLE_RESULTS, LINKEDIN_UPSTREAM_ERROR."},"message":{"type":"string"}}}]},"timings":{"type":"object","properties":{"elapsed_ms":{"oneOf":[{"type":"number"},{"type":"null"}],"description":"LinkedIn browser fetch duration."},"queue_ms":{"oneOf":[{"type":"number"},{"type":"null"}]},"total_ms":{"type":"number"}},"additionalProperties":false},"created_at":{"type":"number"},"updated_at":{"type":"number"}}}}},"ProfileParsedList":{"type":"array","items":{"$ref":"#/components/schemas/ProfileParsed"}},"ProfileParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.profile.v1"},"acoaa":{"type":"string"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"headline":{"type":"string"},"summary":{"type":"string"},"primaryLocale":{"type":"string"},"location":{"type":"string"},"countryCode":{"type":"string"},"industry":{"type":"string"},"positions":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"companyName":{"type":"string"},"companyId":{"type":"string"},"companyUrl":{"type":"string"},"startYear":{"type":"integer"},"startMonth":{"type":"integer"},"endYear":{"type":"integer"},"endMonth":{"type":"integer"},"isCurrent":{"type":"boolean"},"description":{"type":"string"}}}},"educations":{"type":"array","items":{"type":"object","properties":{"schoolName":{"type":"string"},"schoolId":{"type":"string"},"degree":{"type":"string"},"fieldOfStudy":{"type":"string"},"startYear":{"type":"integer"},"endYear":{"type":"integer"},"activities":{"type":"string"},"description":{"type":"string"}}}},"skills":{"type":"array","items":{"type":"string"}},"languages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"proficiency":{"type":"string"}}}},"certifications":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"authority":{"type":"string"},"companyId":{"type":"string"},"companyUrl":{"type":"string"},"url":{"type":"string"},"licenseNumber":{"type":"string"},"startYear":{"type":"integer"},"endYear":{"type":"integer"}}}},"items":{"type":"array","description":"Projects and other lower-frequency profile sections.","items":{"type":"object","properties":{"itemType":{"type":"string"},"title":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"companyName":{"type":"string"},"companyId":{"type":"string"},"companyUrl":{"type":"string"},"url":{"type":"string"},"startYear":{"type":"integer"},"endYear":{"type":"integer"},"description":{"type":"string"}}}},"dataQualityFlags":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"PublicProfileSummary":{"type":"object","properties":{"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"headline":{"type":"string"},"location":{"type":"string"},"countryCode":{"type":"string"},"industry":{"type":"string"},"messageLanguage":{"type":"string","enum":["fr","en","es","de","it","pt","nl","pl"],"description":"Server-detected outreach language. This is a language preference heuristic, not nationality: non-English profile signals and the country's business language win over an English locale or headline."},"messageLanguageSource":{"type":"string","enum":["comment","profile_locale","profile_languages","profile_text","country","default"]},"messageLanguageConfidence":{"type":"number"},"messageLanguageDetectedAt":{"type":"integer"},"enriched_at":{"type":"integer"}},"additionalProperties":true},"ProfileConnectionParsedList":{"type":"array","items":{"$ref":"#/components/schemas/ProfileConnectionParsed"}},"ProfileConnectionParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.profile_connection.v1"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"fullName":{"type":"string"},"headline":{"type":"string"},"location":{"type":"string"},"connectionSource":{"type":"string"}},"additionalProperties":true},"FollowingEntityParsedList":{"type":"array","items":{"$ref":"#/components/schemas/FollowingEntityParsed"}},"FollowingEntityParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.following_entity.v1"},"entityType":{"type":"string","enum":["company","profile"]},"publicIdentifier":{"type":"string"},"companyId":{"type":"string"},"universalName":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"additionalProperties":true},"ProfileActionParsedList":{"type":"array","items":{"$ref":"#/components/schemas/ProfileActionParsed"}},"ProfileActionParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.profile_action.v1"},"publicIdentifier":{"type":"string"},"actions":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"PresenceStatusParsedList":{"type":"array","items":{"$ref":"#/components/schemas/PresenceStatusParsed"}},"PresenceStatusParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.presence_status.v1"},"status":{"type":"string"},"lastSeenAt":{"type":"integer"}},"additionalProperties":true},"CompanyParsedList":{"type":"array","items":{"$ref":"#/components/schemas/CompanyParsed"}},"CompanyParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.company.v1"},"companyId":{"type":"string"},"universalName":{"type":"string"},"companyUrl":{"type":"string"},"name":{"type":"string"},"websiteUrl":{"type":"string"},"companyWebsiteUrl":{"type":"string"},"companyDomain":{"type":"string"},"industry":{"type":"string"},"employeeCount":{"type":"integer"},"employeeCountRange":{"type":"string"},"headquarters":{"type":"string"},"companyType":{"type":"string"},"founded":{"type":"string"},"specialties":{"type":"array","items":{"type":"string"}},"followerCount":{"type":"integer"},"description":{"type":"string"}},"additionalProperties":true},"SourceMetadata":{"type":"object","properties":{"endpoint":{"type":"string"},"query":{"type":"string"},"companyId":{"type":"string"},"eventId":{"type":"string"},"start":{"type":"integer"},"count":{"type":"integer"},"page":{"type":"integer"},"rank":{"type":"integer"},"cursor":{"type":"string"}},"additionalProperties":true},"DatasetExportFields":{"type":"object","description":"Common additive fields added to parsed rows for Apify/LinkedHelper-style dataset exports. Endpoint-specific fields remain present.","properties":{"export_schema_version":{"const":"wannalead.linkedin.dataset.v1"},"outputSchemaVersion":{"type":"string"},"entityType":{"type":"string"},"endpointKey":{"type":"string"},"scrapedAt":{"type":"string","format":"date-time"},"rank":{"type":"number"},"url":{"type":"string"},"linkedinUrl":{"type":"string"},"publicId":{"type":"string"},"profileId":{"type":"string"},"profileUrn":{"type":"string"},"name":{"type":"string"},"jobTitle":{"type":"string"},"location":{"type":"string"},"employmentType":{"type":"string"},"salary":{"type":"string"},"applicantsCount":{"type":"number"},"viewsCount":{"type":"number"},"companyLinkedinId":{"type":"string"},"companyLinkedinUrl":{"type":"string"},"companyWebsiteUrl":{"type":"string"},"companyDomain":{"type":"string"},"sourceEndpoint":{"type":"string"},"sourceQuery":{"type":"string"},"sourceCompanyId":{"type":"string"},"sourceCursor":{"type":"string"},"sourceStart":{"type":"number"},"sourceCount":{"type":"number"},"sourcePage":{"type":"number"},"sourceGeoId":{"type":"string"},"sourceJobId":{"type":"string"},"sourceActivityId":{"type":"string","description":"Echo of the activity_id supplied to the source request. It is provenance, not a newly resolved canonical identifier."},"sourceSocialDetailUrn":{"type":"string"},"sourceGroupId":{"type":"string"},"sourceEventId":{"type":"string"}},"additionalProperties":true},"CompanySearchParsedList":{"type":"array","items":{"$ref":"#/components/schemas/CompanySearchParsed"}},"CompanySearchParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.company_search.v1"},"companyId":{"type":"string"},"universalName":{"type":"string"},"companyUrl":{"type":"string"},"name":{"type":"string"},"headline":{"type":"string"},"description":{"type":"string"},"industry":{"type":"string"},"employeeCountRange":{"type":"string"},"followerCount":{"type":"integer"},"source":{"$ref":"#/components/schemas/SourceMetadata"}},"additionalProperties":true},"AdvertiserParsedList":{"type":"array","items":{"$ref":"#/components/schemas/AdvertiserParsed"}},"AdvertiserParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.advertiser.v1"},"adId":{"type":"string"},"advertiserCompanyId":{"type":"string"},"advertiserName":{"type":"string"},"country":{"type":"string"},"dateRange":{"type":"string"},"adType":{"type":"string"},"creativePreview":{"type":"string"},"adLibraryUrl":{"type":"string"},"nextPaginationToken":{"type":"string"},"isLastPage":{"type":"boolean"},"source":{"$ref":"#/components/schemas/SourceMetadata"}},"additionalProperties":true},"JobCompanySignalParsedList":{"type":"array","items":{"$ref":"#/components/schemas/JobCompanySignalParsed"}},"JobCompanySignalParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.job_company_signal.v1"},"jobId":{"type":"string"},"companyId":{"type":"string"},"companyName":{"type":"string"},"title":{"type":"string"},"geo":{"type":"string"},"postedAt":{"type":"string"},"description":{"type":"string"},"employmentStatus":{"type":"string"},"workRemoteAllowed":{"type":"boolean"},"formattedSalary":{"type":"string"},"applies":{"type":"number"},"views":{"type":"number"},"skills":{"type":"array","items":{"type":"string"}},"jobUrl":{"type":"string"},"source":{"$ref":"#/components/schemas/SourceMetadata"}},"additionalProperties":true},"CompanySignalParsedList":{"type":"array","items":{"$ref":"#/components/schemas/CompanySignalParsed"}},"CompanySignalParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.company_signal.v1"},"signalType":{"type":"string"},"companyId":{"type":"string"},"entityUrn":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"url":{"type":"string"},"source":{"$ref":"#/components/schemas/SourceMetadata"}},"additionalProperties":true},"CompanyFollowerParsedList":{"type":"array","items":{"$ref":"#/components/schemas/CompanyFollowerParsed"}},"CompanyFollowerParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.company_follower.v1"},"companyId":{"type":"string"},"publicIdentifier":{"type":"string"},"fullName":{"type":"string"},"headline":{"type":"string"},"distance":{"type":"string"},"profileUrl":{"type":"string"},"source":{"$ref":"#/components/schemas/SourceMetadata"}},"additionalProperties":true},"GroupMemberParsedList":{"type":"array","items":{"$ref":"#/components/schemas/GroupMemberParsed"}},"GroupMemberParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.group_member.v1"},"groupId":{"type":"string"},"publicIdentifier":{"type":"string"},"fullName":{"type":"string"},"headline":{"type":"string"},"membershipStatus":{"type":"string"},"profileUrl":{"type":"string"},"source":{"$ref":"#/components/schemas/SourceMetadata"}},"additionalProperties":true},"PostParsedList":{"type":"array","items":{"$ref":"#/components/schemas/PostParsed"}},"PostParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.post.v1"},"activityUrn":{"type":"string"},"postUrl":{"type":"string"},"socialDetailUrn":{"type":"string"},"threadUrn":{"type":"string"},"rootContentUrn":{"type":"string"},"text":{"type":"string"},"canonicalActivityUrn":{"type":"string","description":"Canonical activity URN only when LinkedIn exposes an explicit mapping. It is omitted rather than inferred from an unrelated share or ugcPost numeric id."},"authorCompanyId":{"type":"string"},"authorUrn":{"type":"string"},"authorName":{"type":"string"},"authorPublicIdentifier":{"type":"string"},"authorProfileUrl":{"type":"string"},"authorFullName":{"type":"string"},"authorHeadline":{"type":"string"},"authorLocation":{"type":"string"},"authorCountryCode":{"type":"string"},"createdAt":{"type":"integer"},"source":{"$ref":"#/components/schemas/SourceMetadata"}},"additionalProperties":true},"PostCommentParsedList":{"type":"array","items":{"$ref":"#/components/schemas/PostCommentParsed"}},"PostCommentParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.post_comment.v1"},"commentUrn":{"type":"string"},"activityUrn":{"type":"string"},"text":{"type":"string"},"commenterName":{"type":"string"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"createdAt":{"type":"integer"}},"additionalProperties":true},"PostReactionParsedList":{"type":"array","items":{"$ref":"#/components/schemas/PostReactionParsed"}},"PostReactionParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.post_reaction.v1"},"reactionUrn":{"type":"string"},"activityUrn":{"type":"string"},"reactionType":{"type":"string"},"actorName":{"type":"string"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"actorProfile":{"$ref":"#/components/schemas/PublicProfileSummary"}},"additionalProperties":true},"PostReposterParsedList":{"type":"array","items":{"$ref":"#/components/schemas/PostReposterParsed"}},"PostReposterParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.post_reposter.v1"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"reshareActivityUrn":{"type":"string"},"nextPageToken":{"type":"string"}},"additionalProperties":true},"PeopleSearchParsedList":{"type":"array","items":{"$ref":"#/components/schemas/PeopleSearchParsed"}},"PeopleSearchParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.people_search.v1"},"fullName":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"headline":{"type":"string"},"location":{"type":"string"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"distance":{"type":"string"},"mutualConnectionsText":{"type":"string"},"mutualConnectionsCount":{"type":"integer"},"mutualConnectionsExtraCount":{"type":"integer"},"mutualConnectionsPreview":{"type":"array","items":{"$ref":"#/components/schemas/PeopleSearchMutualConnection"}},"source":{"$ref":"#/components/schemas/SourceMetadata"}},"additionalProperties":true},"PeopleSearchMutualConnection":{"type":"object","properties":{"fullName":{"type":"string"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"}},"additionalProperties":true},"GroupSearchParsedList":{"type":"array","items":{"$ref":"#/components/schemas/GroupSearchParsed"}},"GroupSearchParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.group_search.v1"},"groupId":{"type":"string"},"groupUrn":{"type":"string"},"groupUrl":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"memberCount":{"type":"integer"}},"additionalProperties":true},"SchoolSearchParsedList":{"type":"array","items":{"$ref":"#/components/schemas/SchoolSearchParsed"}},"SchoolSearchParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.school_search.v1"},"schoolId":{"type":"string"},"schoolUrn":{"type":"string"},"schoolUrl":{"type":"string"},"name":{"type":"string"},"location":{"type":"string"}},"additionalProperties":true},"EventAttendeeParsedList":{"type":"array","items":{"$ref":"#/components/schemas/EventAttendeeParsed"}},"EventAttendeeParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.event_attendee.v1"},"profileAcoaa":{"type":"string"},"fullName":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"headline":{"type":"string"},"location":{"type":"string"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"distance":{"type":"string"},"attendanceSource":{"type":"string"},"requestedCount":{"type":"integer"},"pageSizeEffective":{"type":"integer"},"possibleViewerFallback":{"type":"boolean"},"source":{"$ref":"#/components/schemas/SourceMetadata"},"dataQualityFlags":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"EventParsedList":{"type":"array","items":{"$ref":"#/components/schemas/EventParsed"}},"EventParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.event.v1"},"eventId":{"type":"string"},"eventUrn":{"type":"string"},"eventUrl":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"startAt":{"type":"integer"},"endAt":{"type":"integer"},"timezone":{"type":"string"},"attendeeCount":{"type":"integer"},"attendeeCountSource":{"type":"string"},"socialProofText":{"type":"string"},"viewerAttendanceState":{"type":"string"},"isViewerAttending":{"type":"boolean"},"isViewerOrganizer":{"type":"boolean"},"registrationRequired":{"type":"boolean"},"organizerCompanyId":{"type":"string"},"organizerProfileAcoaa":{"type":"string"},"organizerProfileUrl":{"type":"string"},"organizerName":{"type":"string"},"dataQualityFlags":{"type":"array","items":{"type":"string"}},"requestedEventCount":{"type":"integer"},"droppedEventRowCount":{"type":"integer"}},"additionalProperties":true},"MessageSendParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.message_send.v1"},"messageUrn":{"type":"string"},"conversationUrn":{"type":"string"},"createdAt":{"type":"integer"},"deliveredAt":{"type":"integer"}},"additionalProperties":true},"MessageEditParsed":{"type":"object","required":["output_schema_version","success"],"properties":{"output_schema_version":{"const":"linkedin.message_edit.v1"},"success":{"type":"boolean"},"messageUrn":{"type":"string"}},"additionalProperties":false},"InvitationSendParsed":{"type":"object","required":["output_schema_version","success"],"properties":{"output_schema_version":{"const":"linkedin.invitation_send.v1"},"success":{"type":"boolean"},"invitationUrn":{"type":"string"},"status":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}},"additionalProperties":true},"PostEngagementWriteParsed":{"type":"object","required":["output_schema_version","endpoint_key","success"],"properties":{"output_schema_version":{"const":"linkedin.post_engagement_write.v1"},"endpoint_key":{"type":"string"},"success":{"type":"boolean"},"entityUrn":{"type":"string"},"threadUrn":{"type":"string"},"parentCommentUrn":{"type":"string"},"rootContentUrn":{"type":"string"}},"additionalProperties":false},"MessageMailboxCountParsedList":{"type":"array","items":{"$ref":"#/components/schemas/MessageMailboxCountParsed"}},"MessageMailboxCountParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.message_mailbox_count.v1"},"category":{"type":"string"},"unreadConversationCount":{"type":"integer"}},"additionalProperties":true},"MessageConversationParsedList":{"type":"array","items":{"$ref":"#/components/schemas/MessageConversationParsed"}},"MessageConversationParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.message_conversation.v1"},"conversationUrn":{"type":"string"},"backendConversationUrn":{"type":"string"},"title":{"type":"string"},"unreadCount":{"type":"integer"},"read":{"type":"boolean"},"lastActivityAt":{"type":"integer"},"createdAt":{"type":"integer"},"participantCount":{"type":"integer"},"nextCursor":{"type":"string","description":"Legacy row-level continuation. Prefer the job response data.next_cursor field."},"participants":{"type":"array","items":{"$ref":"#/components/schemas/MessageParticipantParsed"}}},"additionalProperties":true},"MessageParticipantParsed":{"type":"object","properties":{"participantUrn":{"type":"string"},"participantKind":{"type":"string","enum":["member","organization"]},"profileUrn":{"type":"string"},"profileAcoaa":{"type":"string"},"memberUrn":{"type":"string"},"publicIdentifier":{"type":"string"},"profileUrl":{"type":"string"},"fullName":{"type":"string"},"headline":{"type":"string"},"distance":{"type":"string"}},"additionalProperties":true},"MessageThreadMessageParsedList":{"type":"array","items":{"$ref":"#/components/schemas/MessageThreadMessageParsed"}},"MessageThreadMessageParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.message_thread_message.v1"},"messageUrn":{"type":"string"},"conversationUrn":{"type":"string"},"senderUrn":{"type":"string"},"senderProfileUrn":{"type":"string"},"senderAcoaa":{"type":"string"},"senderPublicIdentifier":{"type":"string"},"senderProfileUrl":{"type":"string"},"senderName":{"type":"string"},"text":{"type":"string"},"contentType":{"type":"string","description":"text, image, file, audio, video, gif or post when the message carries only that kind of content, otherwise mixed."},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/MessageAttachment"}},"deliveredAt":{"type":"integer"},"createdAt":{"type":"integer"},"nextDeliveredBefore":{"type":"integer"}},"additionalProperties":true},"MessageAttachment":{"type":"object","description":"Media attached to a message. Image, file, audio and video URLs are private to the connected LinkedIn session and expire; post URLs are public feed links.","required":["type"],"properties":{"type":{"type":"string","enum":["image","file","audio","video","gif","post"]},"mediaUrn":{"type":"string"},"url":{"type":"string"},"name":{"type":"string"},"mimeType":{"type":"string"},"byteSize":{"type":"integer"},"width":{"type":"integer"},"height":{"type":"integer"},"durationMs":{"type":"integer"}},"additionalProperties":false},"MessageSeenReceiptParsedList":{"type":"array","items":{"$ref":"#/components/schemas/MessageSeenReceiptParsed"}},"MessageSeenReceiptParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.message_seen_receipt.v1"},"conversationUrn":{"type":"string"},"messageUrn":{"type":"string"},"actorUrn":{"type":"string"},"actorProfileUrn":{"type":"string"},"actorAcoaa":{"type":"string"},"actorName":{"type":"string"},"actorProfilePictureUrl":{"type":"string","description":"Best-effort LinkedIn CDN avatar URL; it may expire and should not be treated as durable identity."},"seenAt":{"type":"integer"}},"additionalProperties":true},"MessageSeenParsed":{"type":"object","required":["output_schema_version","seen","messageUrn"],"properties":{"output_schema_version":{"const":"linkedin.message_seen.v1"},"seen":{"type":"boolean"},"messageUrn":{"type":"string"},"seenAt":{"type":"integer","description":"LinkedIn read timestamp in Unix milliseconds."},"actorUrn":{"type":"string"},"actorProfileUrn":{"type":"string"},"actorAcoaa":{"type":"string"},"actorName":{"type":"string"},"actorProfilePictureUrl":{"type":"string","description":"Best-effort LinkedIn CDN avatar URL; it may expire and should not be treated as durable identity."}},"additionalProperties":true},"NotificationParsedList":{"type":"array","items":{"$ref":"#/components/schemas/NotificationParsed"}},"NotificationParsed":{"type":"object","required":["output_schema_version"],"properties":{"output_schema_version":{"const":"linkedin.notification.v1"},"notificationUrn":{"type":"string"},"notificationType":{"type":"string"},"publishedAt":{"type":"integer"},"read":{"type":"boolean"},"headline":{"type":"string"},"activityUrn":{"type":"string"},"profileAcoaa":{"type":"string"},"profileUrn":{"type":"string"},"companyId":{"type":"string"}},"additionalProperties":true},"RawPassthroughParsed":{"type":"object","required":["output_schema_version","endpoint_key","sha256","bytes","looks_json"],"properties":{"output_schema_version":{"const":"linkedin.raw_passthrough.v1"},"endpoint_key":{"type":"string"},"sha256":{"type":"string"},"bytes":{"type":"integer"},"looks_json":{"type":"boolean"}},"additionalProperties":false},"XUser":{"type":"object","required":["user_id","screen_name"],"properties":{"user_id":{"type":"string"},"screen_name":{"type":"string"},"name":{"type":["string","null"]},"description":{"type":["string","null"],"description":"Bio with short links expanded."},"followers_count":{"type":["integer","null"]},"following_count":{"type":["integer","null"]},"tweets_count":{"type":["integer","null"]},"verified":{"type":"boolean"},"protected":{"type":"boolean"},"can_dm":{"type":["boolean","null"],"description":"Whether the connected account can message it; null when X does not say."},"created_at":{"type":["string","null"],"format":"date-time"},"location":{"type":["string","null"]},"url":{"type":["string","null"]},"profile_image_url":{"type":["string","null"]}}},"XTweet":{"type":"object","required":["tweet_id","url","text"],"properties":{"tweet_id":{"type":"string"},"url":{"type":"string"},"author":{"type":["object","null"],"properties":{"user_id":{"type":"string"},"screen_name":{"type":["string","null"]},"name":{"type":["string","null"]}}},"text":{"type":"string","description":"Full text, long posts included, with short links expanded."},"created_at":{"type":["string","null"],"format":"date-time"},"conversation_id":{"type":["string","null"]},"reply_to_tweet_id":{"type":["string","null"]},"reply_to_user_id":{"type":["string","null"]},"quoted_tweet_id":{"type":["string","null"]},"retweeted_tweet_id":{"type":["string","null"],"description":"Set when the item is a repost."},"likes_count":{"type":["integer","null"]},"retweets_count":{"type":["integer","null"]},"replies_count":{"type":["integer","null"]},"quotes_count":{"type":["integer","null"]},"bookmarks_count":{"type":["integer","null"]},"views_count":{"type":["integer","null"]},"lang":{"type":["string","null"]},"media":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["photo","video","animated_gif"]},"url":{"type":"string"}}}},"urls":{"type":"array","items":{"type":"string"}},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned screen names."},"hashtags":{"type":"array","items":{"type":"string"}}}},"XNotification":{"type":"object","properties":{"notification_id":{"type":"string"},"type":{"type":"string","enum":["like","retweet","follow","mention","reply","quote","other"]},"text":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"url":{"type":["string","null"]},"users":{"type":"array","items":{"type":"object","properties":{"user_id":{"type":"string"},"screen_name":{"type":["string","null"]},"name":{"type":["string","null"]}}}},"tweet":{"oneOf":[{"$ref":"#/components/schemas/XTweet"},{"type":"null"}]}}},"XRelationship":{"type":"object","properties":{"user_id":{"type":["string","null"]},"screen_name":{"type":["string","null"]},"following":{"type":"boolean"},"followed_by":{"type":"boolean"},"follow_request_sent":{"type":"boolean"},"can_dm":{"type":["boolean","null"]},"blocking":{"type":"boolean"},"muting":{"type":"boolean"}}},"XArticle":{"type":"object","required":["article_id"],"properties":{"article_id":{"type":"string"},"title":{"type":["string","null"]},"preview_text":{"type":["string","null"]},"text":{"type":"string"},"status":{"type":["string","null"],"description":"draft or published."},"cover_image_url":{"type":["string","null"]},"tweet_id":{"type":["string","null"],"description":"Post that shares the article once published."},"published_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"InstagramStory":{"type":"object","required":["story_media_id","reel_id","recipient_user_id","type","can_reply","has_liked","is_paid_partnership","link_urls"],"properties":{"story_media_id":{"type":"string"},"reel_id":{"type":"string"},"recipient_user_id":{"type":"string","description":"The story owner."},"username":{"type":["string","null"]},"type":{"type":"string","enum":["photo","video"]},"taken_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"},"can_reply":{"type":"boolean","description":"false when the owner limits replies."},"has_liked":{"type":"boolean"},"is_paid_partnership":{"type":"boolean"},"link_urls":{"type":"array","items":{"type":"string"}}}},"InstagramSimilarProfile":{"type":"object","required":["user_id","username","is_verified","followed_by_viewer"],"properties":{"user_id":{"type":"string"},"username":{"type":"string"},"full_name":{"type":["string","null"]},"is_verified":{"type":"boolean"},"is_private":{"type":["boolean","null"]},"followed_by_viewer":{"type":"boolean","description":"The connected account already follows this suggestion."},"social_context":{"type":["string","null"]},"profile_pic_url":{"type":["string","null"]}}},"InstagramSourceProfile":{"type":"object","required":["ig_user_id","username","is_verified"],"properties":{"ig_user_id":{"type":"string","description":"Numeric Instagram user id (what campaign targets take)."},"username":{"type":"string"},"full_name":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"is_verified":{"type":"boolean"},"profile_pic_url":{"type":["string","null"]},"follower_count":{"type":"integer","description":"Present only when Instagram includes it in the list."}}},"InstagramCommenter":{"allOf":[{"$ref":"#/components/schemas/InstagramSourceProfile"},{"type":"object","required":["comment_id"],"properties":{"comment_id":{"type":"string"},"comment_text":{"type":["string","null"]},"commented_at":{"type":["string","null"],"format":"date-time"},"comment_like_count":{"type":["integer","null"]},"comment_reply_count":{"type":["integer","null"]}}}]},"InstagramHashtagPost":{"allOf":[{"$ref":"#/components/schemas/InstagramSourceProfile"},{"type":"object","required":["media_pk","post_type"],"properties":{"media_pk":{"type":"string","description":"Numeric post id of the post found under the hashtag."},"shortcode":{"type":["string","null"]},"post_url":{"type":["string","null"]},"post_type":{"enum":["photo","video","reel","carousel"]},"posted_at":{"type":["string","null"],"format":"date-time"},"caption":{"type":["string","null"]},"likes_count":{"type":["integer","null"]},"comments_count":{"type":["integer","null"]}}}]},"InstagramProfile":{"type":"object","required":["user_id","username"],"properties":{"user_id":{"type":"string"},"username":{"type":"string"},"full_name":{"type":["string","null"]},"biography":{"type":["string","null"]},"followers_count":{"type":["integer","null"]},"following_count":{"type":["integer","null"]},"posts_count":{"type":["integer","null"]},"reels_count":{"type":["integer","null"]},"category":{"type":["string","null"]},"is_verified":{"type":"boolean"},"is_private":{"type":"boolean"},"is_business":{"type":"boolean"},"external_url":{"type":["string","null"]},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":["string","null"]}}}},"profile_pic_url":{"type":["string","null"]}}},"InstagramPost":{"type":"object","required":["post_id","type"],"properties":{"post_id":{"type":"string"},"shortcode":{"type":["string","null"]},"url":{"type":["string","null"]},"type":{"type":"string","enum":["photo","video","reel","carousel"]},"posted_at":{"type":["string","null"],"format":"date-time"},"owner":{"type":"object","properties":{"user_id":{"type":["string","null"]},"username":{"type":["string","null"]}}},"caption":{"type":["string","null"]},"likes_count":{"type":["integer","null"],"description":"Null when the author hides likes."},"likes_hidden":{"type":"boolean"},"comments_count":{"type":["integer","null"]},"reposts_count":{"type":["integer","null"]},"is_pinned":{"type":"boolean"},"is_paid_partnership":{"type":"boolean"},"sponsors":{"type":"array","items":{"type":"string"},"description":"Usernames of paid-partnership sponsors."},"coauthors":{"type":"array","items":{"type":"string"}},"tagged_users":{"type":"array","items":{"type":"string"}},"mentions":{"type":"array","items":{"type":"string"},"description":"Handles written in the caption, except the author."},"hashtags":{"type":"array","items":{"type":"string"}}}},"InstagramCampaignWindow":{"type":"object","description":"Sending window in the campaign time zone. Default: weekdays 09:00-20:00. {} sends at any time.","properties":{"days":{"type":"array","minItems":1,"items":{"type":"integer","minimum":0,"maximum":6},"description":"0 = Sunday."},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","example":"09:00"},"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","example":"20:00","description":"Later than start."}}},"InstagramCampaignStepInput":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["follow","like_post","comment_post","send_dm","reply_story","react_story","unfollow_if_no_follow_back","wait","if_followed_back","stop_on_reply","like_latest_post","comment_latest_post"],"description":"like_latest_post and comment_latest_post are legacy aliases that need a target media_pk."},"text":{"type":"string","description":"Required for send_dm and reply_story (max 1000 rendered characters) and comment_post (max 2200). Templates: {{first_name}}, {{username}}, {{full_name}}, {{var.<key>}}, with a fallback as {{name|default}}. Literal \\n or \\uXXXX escapes are rejected."},"post":{"type":"string","default":"latest","description":"like_post and comment_post: \"latest\" or a numeric media_pk."},"emoji":{"type":"string","description":"Required for react_story."},"max_wait_days":{"type":"integer","minimum":0,"maximum":14,"description":"reply_story and react_story: days to wait for a story before skipping."},"after_days":{"type":"integer","minimum":1,"maximum":60,"default":7,"description":"unfollow_if_no_follow_back: days to wait for a follow back."},"wait_seconds":{"type":"integer","minimum":60,"description":"Required for wait."}}},"InstagramCampaignTargetInput":{"type":"object","description":"One of ig_user_id, username or profile_url. Usernames and profile URLs are resolved to ig_user_id in the background.","properties":{"ig_user_id":{"type":"string","pattern":"^[0-9]+$"},"username":{"type":"string"},"profile_url":{"type":"string","example":"https://www.instagram.com/acme/"},"first_name":{"type":"string"},"full_name":{"type":"string"},"media_pk":{"type":"string","description":"Post for the legacy like_latest_post and comment_latest_post."},"variables":{"type":"object","additionalProperties":{"type":"string","maxLength":200},"description":"Values for {{var.<key>}}; keys are 1-40 letters, digits or underscores."}}},"InstagramCampaignSourceInput":{"type":"object","required":["type","ref"],"properties":{"type":{"type":"string","enum":["followers","following","post_likers","post_commenters","hashtag"]},"ref":{"type":"string","description":"Username for followers and following, post URL, shortcode or media_pk for post_likers and post_commenters, tag for hashtag."},"limit":{"type":"integer","minimum":1,"maximum":5000,"default":500},"min_followers":{"type":"integer","minimum":0},"max_followers":{"type":"integer","minimum":0},"exclude_private":{"type":"boolean","default":false},"exclude_verified":{"type":"boolean","default":false}}},"InstagramCampaignPreviewRequest":{"type":"object","required":["steps"],"description":"Give targets, sources, or both.","properties":{"steps":{"type":"array","minItems":1,"maxItems":20,"items":{"$ref":"#/components/schemas/InstagramCampaignStepInput"}},"targets":{"type":"array","maxItems":10000,"items":{"$ref":"#/components/schemas/InstagramCampaignTargetInput"}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignSourceInput"}},"dedupe":{"type":"string","enum":["skip","error"],"default":"skip","description":"skip drops people already contacted; error rejects the preview with 409 instagram_campaign_duplicate_contact."},"window":{"$ref":"#/components/schemas/InstagramCampaignWindow","description":"Only used for readiness.window_closed_now and the ETA; set the real window on create."}}},"InstagramCampaignTargetIssue":{"type":"object","properties":{"index":{"type":"integer"},"ig_user_id":{"type":"string"},"username":{"type":"string"},"reason":{"type":"string","description":"skipped: in_other_campaign, already_replied, opted_out (already_in_campaign on targets.add); invalid: an error code."}}},"InstagramCampaignReadinessIssue":{"type":"object","required":["code","blocking"],"properties":{"code":{"type":"string","description":"Blocking: billing_required, writes_disabled, instagram_session_missing, instagram_verification_required. Informational: action_blocked_until, extension_offline, extension_outdated, slowed_after_block."},"blocking":{"type":"boolean"},"until":{"type":"number","description":"Epoch milliseconds, when the issue has an end."}}},"InstagramCampaignPreview":{"type":"object","required":["preview_token","status","expires_at","target_count","step_count"],"properties":{"preview_token":{"type":"string"},"status":{"type":"string","enum":["resolving","ready","failed"]},"resolution":{"type":["object","null"],"properties":{"total":{"type":"integer"},"resolved":{"type":"integer"},"invalid":{"type":"integer"},"skipped":{"type":"integer"}}},"error":{"type":["string","null"]},"expires_at":{"type":"number","description":"Epoch milliseconds."},"target_count":{"type":"integer"},"step_count":{"type":"integer"},"skipped":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignTargetIssue"}},"invalid":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignTargetIssue"}},"warnings":{"type":"array","items":{"type":"string","enum":["link_in_first_dm","follow_up_wait_under_24h"]}},"readiness":{"type":"object","properties":{"ok":{"type":"boolean"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignReadinessIssue"}},"window_closed_now":{"type":"boolean"},"estimated_completion_days":{"type":"number"}}},"samples":{"type":"array","items":{"type":"object","properties":{"username":{"type":["string","null"]},"ig_user_id":{"type":["string","null"]},"texts":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string"},"text":{"type":"string"}}}}}}}}},"InstagramCampaign":{"type":"object","required":["campaign_id","name","status"],"properties":{"campaign_id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","running","paused","completed","canceled","archived"]},"timezone":{"type":"string"},"window":{"$ref":"#/components/schemas/InstagramCampaignWindow"},"dedupe":{"type":"string","enum":["skip","error"]},"target_count":{"type":"integer"},"sent_count":{"type":"integer","deprecated":true,"description":"Every successful write step; use the per-action counters."},"follows_sent":{"type":"integer"},"dms_sent":{"type":"integer"},"likes_sent":{"type":"integer"},"comments_sent":{"type":"integer"},"story_replies_sent":{"type":"integer"},"unfollows_sent":{"type":"integer"},"follow_back_count":{"type":"integer"},"reply_count":{"type":"integer"},"failed_count":{"type":"integer"},"pause_reason":{"type":["string","null"],"enum":["user","instagram_limit_reached","billing_required","instagram_writes_disabled","account_disconnected","instagram_action_blocked","instagram_action_blocked_repeat","instagram_verification_required",null]},"resume_at":{"type":["number","null"],"description":"Epoch milliseconds of an automatic resume."},"launched_at":{"type":["number","null"]},"paused_at":{"type":["number","null"]},"completed_at":{"type":["number","null"]},"archived_at":{"type":["number","null"]},"last_progress_at":{"type":["number","null"]},"created_at":{"type":"number"},"updated_at":{"type":"number"}}},"InstagramCampaignTarget":{"type":"object","required":["target_id","status"],"properties":{"target_id":{"type":"string"},"ig_user_id":{"type":["string","null"]},"username":{"type":["string","null"]},"first_name":{"type":["string","null"]},"full_name":{"type":["string","null"]},"media_pk":{"type":["string","null"]},"status":{"type":"string","enum":["pending","active","waiting","paused","completed","replied","failed","canceled","stopped","opted_out","skipped"]},"status_reason":{"type":["string","null"],"description":"Why the target stopped or paused, e.g. human_takeover, prior_contact, manual, reply, opt_out_reply, follow_up_tracking_unavailable."},"current_step_position":{"type":"integer"},"follow_state":{"type":["string","null"]},"dm_delivered_to":{"type":["string","null"],"enum":["inbox","requests",null]},"thread_id":{"type":["string","null"]},"seen_at":{"type":["number","null"]},"seen_unavailable":{"type":["string","null"],"description":"message_request when the DM landed in requests, where seen receipts are not shown."},"enrolled_at":{"type":["number","null"]},"replied_at":{"type":["number","null"]},"followed_back_at":{"type":["number","null"]},"human_takeover_at":{"type":["number","null"]},"created_at":{"type":"number"},"updated_at":{"type":"number"}}},"InstagramCampaignStep":{"type":"object","properties":{"position":{"type":"integer"},"action":{"type":"string"},"status":{"type":"string"},"verifying":{"type":"boolean","description":"The outcome is still being checked; never resend while true."},"check_state":{"type":["string","null"]},"text":{"type":["string","null"],"description":"Rendered text."},"media_pk":{"type":["string","null"]},"due_at":{"type":["number","null"]},"dispatch_started_at":{"type":["number","null"]},"dm_message_id":{"type":["string","null"]},"resend_count":{"type":"integer"},"error_code":{"type":["string","null"]},"updated_at":{"type":"number"}}},"InstagramCampaignTargetDetail":{"allOf":[{"$ref":"#/components/schemas/InstagramCampaignTarget"},{"type":"object","properties":{"campaign_id":{"type":"string"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/InstagramCampaignStep"}}}}]},"InstagramCampaignActivity":{"type":"object","required":["type","at"],"properties":{"type":{"type":"string","example":"step.sent"},"at":{"type":"string","format":"date-time"},"target_id":{"type":["string","null"]},"reason":{"type":["string","null"]},"position":{"type":["integer","null"]},"action":{"type":["string","null"]},"detail":{"type":["object","null"]}}},"InstagramCampaignKpis":{"type":"object","properties":{"targets":{"type":"integer"},"sent":{"type":"integer","deprecated":true,"description":"Every successful write step; use the per-action counters."},"follows_sent":{"type":"integer"},"dms_sent":{"type":"integer"},"likes_sent":{"type":"integer"},"comments_sent":{"type":"integer"},"story_replies_sent":{"type":"integer"},"unfollows_sent":{"type":"integer"},"follow_backs":{"type":"integer"},"replies":{"type":"integer"},"failed":{"type":"integer"},"follow_back_rate":{"type":"number","description":"follow_backs / follows_sent."},"reply_rate":{"type":"number","description":"replies / (dms_sent + story_replies_sent)."},"by_step":{"type":"array","items":{"type":"object","description":"position, action, sent, already_done, skipped, failed, unknown_outcome, follow_backs, replies."}},"by_day":{"type":"array","items":{"type":"object","description":"day, sent, already_done, skipped, failed, unknown_outcome, follow_backs, replies."}}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"billing_plan":{"type":["string","null"]},"billing_status":{"type":["string","null"]},"action_required":{"type":"string","enum":["upgrade_to_pro","resolve_billing"]},"billing_url":{"type":"string"},"retryable":{"type":"boolean","description":"Present on transient and batch-size failures: true for `retryable_conflict` (retry the same request), false for `batch_too_large` (split it)."},"retry_after_seconds":{"type":"integer","description":"Seconds to wait before retrying a `retryable_conflict`."},"recommended_batch_size":{"type":"integer","description":"Maximum targets per request after a `batch_too_large`."}},"required":["error"]}}}}