{"openapi":"3.1.0","info":{"title":"Salesteam API","version":"1.7.0","summary":"Find, add and change leads, lists and campaigns; stop or pause people; read conversations, accounts and stats; get events as they happen.","description":"Find, add and change leads, lists and campaigns, stop or pause people, read conversations, LinkedIn accounts and stats, and get events as they happen.\n\nNothing in this API sends a LinkedIn message by itself. People you add join their campaign, and Salesteam contacts them within each account’s daily limits, working hours and safety checks, as it does for people added in the app. Every change runs the same rules as the app’s own buttons and shows in the activity as made via API, with the key’s name.\n\n## Quickstart\n\n1. In Salesteam, open **Settings → API keys** and click **Create API key**. Copy it now: it’s shown once.\n2. Check the key. The answer names the workspace it belongs to.\n\n```bash\ncurl https://app.salesteam.dev/api/v1/me \\\n  -H \"Authorization: Bearer $SALESTEAM_API_KEY\"\n```\n\n3. Find a campaign with `GET /campaigns`, then add a lead to it:\n\n```bash\ncurl -X POST https://app.salesteam.dev/api/v1/campaigns/CAMPAIGN_ID/leads \\\n  -H \"Authorization: Bearer $SALESTEAM_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Idempotency-Key: $(uuidgen)\" \\\n  -d '{\"leads\":[{\"linkedinUrl\":\"https://www.linkedin.com/in/jamie-lee-example\",\"firstName\":\"Jamie\",\"email\":\"jamie@example.co\"}]}'\n```\n\nThe answer lists every lead as added, updated or skipped, and why.\n\n## Authentication\n\nSend your workspace API key with every request as `Authorization: Bearer <key>`. `X-API-Key: <key>` works too.\n\n- Keys start with `st_live_` and belong to one workspace. A workspace can have 10.\n- A **Read only** key starts with `st_read_`: it reads everything and changes nothing. A change with it answers `403 read_only_key`. Choose Full access or Read only when you create a key; to change it, make a new key.\n- Rename or revoke a key in Settings. Revoking it also removes the webhooks it subscribed.\n- Keep keys in your tool’s secret storage, never in a page or an app people download.\n\n## Errors\n\nEvery error has the same shape: a `code` to check in your code, a `message` to show a person, and the `requestId` of the call.\n\n```json\n{ \"error\": { \"code\": \"not_found\", \"message\": \"This campaign wasn’t found in this workspace.\", \"requestId\": \"req_9c41e2a07b5d3f6e8a1c2b4d\" } }\n```\n\n| Code | Status | Meaning |\n|---|---|---|\n| `invalid_request` | 400 | A field is missing or wrong. The message says which. |\n| `invalid_json` | 400 | The body isn’t valid JSON. |\n| `duplicate_in_request` | 400 | In a bulk request: a row names a lead an earlier row already named. Send each lead once. |\n| `unauthorized` | 401 | No key, an unknown key, or a revoked one. |\n| `forbidden` | 403 | This key can’t do that in this workspace. |\n| `read_only_key` | 403 | This key is read-only: it can read everything and change nothing. Use a Full access key to make changes. |\n| `billing_hold` | 402 | The workspace’s plan isn’t paid, so it’s read-only: adding leads and resuming campaigns wait for a plan. Reading and tidying still work. |\n| `not_found` | 404 | The campaign, list, lead or path isn’t in this workspace. |\n| `not_in_campaign` | 404 | The person isn’t in that campaign. |\n| `method_not_allowed` | 405 | The path exists, but not with this method. |\n| `conflict` | 409 | The change doesn’t fit the current state, like resuming someone who isn’t paused. |\n| `idempotency_in_progress` | 409 | A request with this Idempotency-Key is still running. Try again after Retry-After seconds. |\n| `workspace_busy` | 409 | A scheduled action is finishing. Try again after Retry-After seconds. |\n| `campaign_finished` | 409 | The campaign has finished; add people to another one. |\n| `campaign_without_list` | 409 | The campaign has no lead list yet. |\n| `tag_limit` | 409 | The workspace already has 100 tags. |\n| `lead_has_history` | 409 | The lead can’t be deleted: you’ve already been in touch with them or marked them Do not contact. Stop them in their campaign instead. |\n| `campaign_not_launched` | 409 | The campaign is a draft. Launch it in Salesteam first; a draft never goes live through the API. |\n| `campaign_cannot_resume` | 409 | The campaign can’t run right now. The message says why: an account to reconnect, live sending off, or nobody left who can join. |\n| `ambiguous_email` | 409 | Several people in the workspace have this email. Send their linkedinUrl instead. |\n| `too_large` | 413 | The body is larger than 1 MB. |\n| `idempotency_key_reused` | 422 | This Idempotency-Key was already used for a different request. |\n| `unsupported_media_type` | 415 | Send the body as JSON. |\n| `rate_limited` | 429 | More than 300 requests this minute. Try again after Retry-After seconds. |\n| `server_error` | 500 | Something went wrong at Salesteam. Try again in a minute. |\n| `error` | 503 | A service Salesteam relies on didn’t answer. Try again in a minute. |\n\n## Rate limits\n\nEach key can make **300 requests a minute**. Every answer carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (Unix seconds). Past the limit the answer is `429 rate_limited` with `Retry-After`.\n\n## Pagination\n\nEvery list answers `{ \"data\": [...], \"nextCursor\": ... }`. When `nextCursor` isn’t null, send it back as `?cursor=` for the next page. A list that fits in one answer ends with `\"nextCursor\": null`.\n\n## Empty fields\n\nLeave out any optional field you don’t use. If your tool sends it anyway, as `null` or `\"\"`, Salesteam reads it as not set. That’s what Make does with a field left empty. List fields such as `campaignIds` also accept `[]` in the same way, or a comma-separated string. In `customFields`, an empty value leaves the field as it is, and `null` clears it. To empty a lead’s field with PATCH, list it in `clear`.\n\n## Changing leads\n\n`PATCH /leads/{leadId}` changes only the fields you send: first and last name, `companyShort` (what `{{company_short}}` says in messages), company, job title, email, custom fields and tags.\n\n```bash\ncurl -X PATCH https://app.salesteam.dev/api/v1/leads/LEAD_ID \\\n  -H \"Authorization: Bearer $SALESTEAM_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"firstName\":\"James\",\"companyShort\":\"Proper Sky\"}'\n```\n\n- `{\"clear\":[\"companyShort\"]}` goes back to the automatic short name. A new `company` does that too, unless you send `companyShort` with it.\n- `PATCH /leads` changes up to 1,000 leads in one call. Name each by `leadId`, `linkedinUrl` or `email`. Each row stands alone: one that fails changes nothing, and the others still save.\n- `POST /lists/{listId}/leads/remove` takes people off a list. A campaign that already has them keeps going: stop them with `POST /campaigns/{campaignId}/leads/stop`.\n\n## Idempotency\n\nSend an `Idempotency-Key` header with any change (`POST`, `PATCH` or `DELETE`) to make it safe to retry: any unique value up to 255 characters, like a UUID.\n\n- The request runs once. For 24 hours, a repeat gets the first answer again, with `Idempotent-Replayed: true`.\n- The same key with a different request gets `422 idempotency_key_reused`.\n- While the first request is still running, a repeat gets `409 idempotency_in_progress` with `Retry-After`.\n- Answers worth retrying (`429`, `409 workspace_busy` and `5xx`) free the key.\n\n## Request IDs\n\nEvery answer has an `X-Request-Id` header, and every error repeats it as `requestId`. Include it when you contact support.\n\n## Changes\n\nVersion 1 only grows. New endpoints, fields and event types can appear; existing ones keep their names and meaning. Ignore fields you don’t know."},"servers":[{"url":"https://app.salesteam.dev/api/v1"}],"security":[{"bearer":[]},{"apiKeyHeader":[]}],"tags":[{"name":"Workspace"},{"name":"Campaigns"},{"name":"Lists"},{"name":"Leads"},{"name":"Tags"},{"name":"Accounts","description":"The workspace’s LinkedIn accounts: state, limits and today’s use. Connecting accounts stays in the app."},{"name":"Stats","description":"The Analytics page’s numbers."},{"name":"Conversations"},{"name":"Webhooks"},{"name":"Events","description":"Standard events: connection.sent, connection.accepted, message.sent, message.first_reply, inmail.first_reply, message.replied, inmail.replied, inmail.sent, profile.followed, post.liked, profile.viewed, campaign.completed, lead.tagged, lead.auto_tagged_positive, lead.auto_tagged_negative, lead.auto_tagged_generic. Extras: lead.finished, account.disconnected, campaign.requests_paused"}],"paths":{"/me":{"get":{"operationId":"getMe","tags":["Workspace"],"summary":"Check a key","description":"The workspace a key belongs to and its rate limit. Use it to test a connection.","responses":{"200":{"description":"The key’s workspace.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Me"}},"required":["data"]},"example":{"data":{"workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"key":{"id":"key_Ab12Cd34Ef56Gh78","name":"Zapier"},"rateLimit":{"limit":300,"windowSeconds":60}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/leads":{"get":{"operationId":"findLeads","tags":["Leads"],"summary":"List and find leads","description":"The workspace’s leads, newest first, a page at a time. Filters combine: a list, a campaign (and each person’s status in it), the lead’s Stage or status, a tag, the app’s search (name, job title, company or LinkedIn link), or what changed since a time. linkedinUrl or email finds one person: everyone saved for them.","parameters":[{"name":"search","in":"query","required":false,"description":"The app’s search: matches first and last name, job title, company and LinkedIn link.","schema":{"type":"string","maxLength":200},"example":"acme"},{"name":"listId","in":"query","required":false,"description":"Only people in this list.","schema":{"type":"string"}},{"name":"campaignId","in":"query","required":false,"description":"Only people in this campaign.","schema":{"type":"string"}},{"name":"campaignStatus","in":"query","required":false,"description":"With campaignId: only people at this point in it.","schema":{"$ref":"#/components/schemas/EnrollmentStatus"}},{"name":"stage","in":"query","required":false,"description":"Only leads at this Stage, as the Leads table’s Stage filter.","schema":{"$ref":"#/components/schemas/LeadStage"}},{"name":"status","in":"query","required":false,"description":"Only leads with this status.","schema":{"type":"string","enum":["new","queued","contacted","connected","replied","suppressed"]}},{"name":"tag","in":"query","required":false,"description":"Only people with this tag (name or ID).","schema":{"type":"string"}},{"name":"updatedSince","in":"query","required":false,"description":"Only leads that changed at or after this time (see updatedAt). To sync, keep the time you started and send it next time.","schema":{"type":"string","format":"date-time"}},{"name":"linkedinUrl","in":"query","required":false,"description":"Find one person by their LinkedIn link.","schema":{"type":"string"},"example":"https://www.linkedin.com/in/jamie-lee-example"},{"name":"email","in":"query","required":false,"description":"Find one person by email: the one Salesteam found or was sent.","schema":{"type":"string","format":"email"},"example":"jamie@example.co"},{"name":"limit","in":"query","required":false,"description":"Leads per page.","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"cursor","in":"query","required":false,"description":"nextCursor from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Leads.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Lead"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"patch":{"operationId":"updateLeads","tags":["Leads"],"summary":"Change many leads","description":"Up to 1,000 leads’ changes in one call: names, the short company name, company, job title, email, custom fields and tags, as PATCH /leads/{leadId} makes them. Each row stands alone: one that fails changes nothing, and the others still save. Repeating the call is safe.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLeadsRequest"},"example":{"leads":[{"leadId":"lead_8f2c","firstName":"James","companyShort":"Proper Sky"},{"linkedinUrl":"https://www.linkedin.com/in/ana-ruiz-example","clear":["companyShort"]}]}}}},"responses":{"200":{"description":"One result per row.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/UpdateLeadsResult"}},"required":["data"]},"example":{"data":{"updated":1,"unchanged":1,"failed":0,"results":[{"index":0,"leadId":"lead_8f2c","status":"updated","changed":["firstName","companyShort"]},{"index":1,"leadId":"lead_31d0","status":"unchanged","changed":[]}]}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/leads/{leadId}":{"get":{"operationId":"getLead","tags":["Leads"],"summary":"Get a lead","description":"A lead with tags, custom fields, lists and where they are in each campaign.","parameters":[{"name":"leadId","in":"path","required":true,"description":"The lead.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}}],"responses":{"200":{"description":"The lead.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Lead"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"patch":{"operationId":"updateLead","tags":["Leads"],"summary":"Change a lead","description":"Changes how a person is named and what Salesteam knows about them, with the same rules as the app: first and last name ({{first_name}}), the short company name ({{company_short}}), company, job title, email, custom fields, and tags to add or take off. Only the fields you send change; list a field in clear to empty it. Returns the lead.","parameters":[{"name":"leadId","in":"path","required":true,"description":"The lead.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadPatch"},"example":{"firstName":"James","lastName":"Lee","companyShort":"Proper Sky","tags":{"add":["Hot"]}}}}},"responses":{"200":{"description":"The lead, changed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Lead"}},"required":["data"]},"example":{"data":{"id":"lead_8f2c","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Founder","company":"Proper Sky Holdings, Inc.","companyShort":"Proper Sky","companyShortSet":true,"location":"London","industry":"Software","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"unknown","status":"contacted","stage":"contacted","tags":["Hot"],"customFields":{},"lists":[{"id":"list_5a1b","name":"Founders"}],"fromPost":null,"createdAt":"2026-11-01T09:00:00.000Z","updatedAt":"2026-11-12T10:30:00.000Z","campaigns":[]}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"delete":{"operationId":"deleteLead","tags":["Leads"],"summary":"Delete a lead","description":"Deletes a lead, as the app’s Delete does: they leave every list and any campaign that hasn’t reached them. Someone you’ve already been in touch with, or marked Do not contact, stays (lead_has_history): stop them in their campaign instead.","parameters":[{"name":"leadId","in":"path","required":true,"description":"The lead.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Deleted.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Deleted"}},"required":["data"]},"example":{"data":{"id":"lead_8f2c","deleted":true}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/leads/tags":{"post":{"operationId":"addTags","tags":["Tags"],"summary":"Tag a lead","description":"Adds tags by name. A tag that doesn’t exist yet is created.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsRequest"},"example":{"linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","tags":["Hot lead"]}}}},"responses":{"200":{"description":"The lead’s tags now.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TagsResult"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/leads/tags/remove":{"post":{"operationId":"removeTags","tags":["Tags"],"summary":"Remove tags from a lead","description":"Removes tags from a lead and its conversations.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsRequest"},"example":{"leadId":"lead_8f2c","tags":["Hot lead"]}}}},"responses":{"200":{"description":"The lead’s tags now.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TagsResult"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/custom-fields":{"get":{"operationId":"listCustomFields","tags":["Leads"],"summary":"List custom fields","description":"The workspace's custom fields, in the order Salesteam shows them. Leads carry their values in customFields, by key.","responses":{"200":{"description":"Every custom field.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomFieldInfo"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."},"example":{"data":[{"key":"service_word","name":"Service word","type":"select","typeLabel":"Single select","options":["ads","marketing","PR"]}],"nextCursor":null}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/tags":{"get":{"operationId":"listTags","tags":["Tags"],"summary":"List tags","responses":{"200":{"description":"Tags.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tag"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"description":"The workspace’s tags, with their colors. Use their names in tags.add and tags.remove when changing a lead."}},"/lists":{"get":{"operationId":"listLists","tags":["Lists"],"summary":"List lead lists","responses":{"200":{"description":"Lists.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/List"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"description":"Every list, with how many people are in it and the campaigns that take people from it."},"post":{"operationId":"createList","tags":["Lists"],"summary":"Create a list","description":"A new, empty list. Names can repeat, as in the app; send an Idempotency-Key to retry safely.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListRequest"},"example":{"name":"Tier 1 founders"}}}},"responses":{"201":{"description":"The new list.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/List"}},"required":["data"]},"example":{"data":{"id":"list_5a1b","name":"Tier 1 founders","createdAt":"2026-11-12T10:30:00.000Z","leads":0,"campaigns":[]}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/lists/{listId}":{"get":{"operationId":"getList","tags":["Lists"],"summary":"Get a list","parameters":[{"name":"listId","in":"path","required":true,"description":"The list.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}}],"responses":{"200":{"description":"The list.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/List"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"description":"One list, with how many people are in it and the campaigns that take people from it."},"patch":{"operationId":"renameList","tags":["Lists"],"summary":"Rename a list","description":"Gives a list a new name. Two lists can’t share a name.","parameters":[{"name":"listId","in":"path","required":true,"description":"The list.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListRequest"},"example":{"name":"Tier 1 founders (Q1)"}}}},"responses":{"200":{"description":"The list, renamed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/List"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"delete":{"operationId":"deleteList","tags":["Lists"],"summary":"Delete a list","description":"Deletes a list as the app does: its leads stay in your leads, a draft campaign that used it needs another list, and a running campaign keeps the people already in it. A list still importing can’t be deleted yet.","parameters":[{"name":"listId","in":"path","required":true,"description":"The list.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Deleted.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Deleted"}},"required":["data"]},"example":{"data":{"id":"list_5a1b","deleted":true}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/lists/{listId}/leads":{"post":{"operationId":"addLeadsToList","tags":["Leads"],"summary":"Add leads to a list","description":"Adds up to 1,000 people to a list, with the same body and results as adding to a campaign: leads to import by LinkedIn link, or people already saved by leadId or email. Campaigns that use the list take them on their next run.","parameters":[{"name":"listId","in":"path","required":true,"description":"The list.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddLeadsRequest"},"example":{"leads":[{"linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co"}]}}}},"responses":{"200":{"description":"One result per lead.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/AddLeadsResult"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"$ref":"#/components/responses/NotFound"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/lists/{listId}/leads/remove":{"post":{"operationId":"removeLeadsFromList","tags":["Lists"],"summary":"Take leads off a list","description":"Takes up to 1,000 people off a list, as the app’s Remove from list does. They stay in your leads, and a campaign that already has them keeps going: stop them in the campaign to end their outreach (the result notes who that applies to). Repeating the call is safe.","parameters":[{"name":"listId","in":"path","required":true,"description":"The list.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadReferences"},"example":{"leads":[{"leadId":"lead_8f2c"},{"email":"ana@example.co"}]}}}},"responses":{"200":{"description":"One result per lead sent.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/RemoveLeadsResult"}},"required":["data"]},"example":{"data":{"list":{"id":"list_5a1b","name":"Founders"},"removed":1,"skipped":1,"results":[{"index":0,"leadId":"lead_8f2c","status":"removed"},{"index":1,"leadId":"lead_31d0","status":"skipped","reason":"not_in_list","message":"This person isn’t in this list."}]}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/lists/{listId}/leads/move":{"post":{"operationId":"moveLeadsToList","tags":["Lists"],"summary":"Move leads to another list","description":"Moves people from this list to another: they join that list and leave this one. Send up to 1,000 leads, or all: true for everyone in the list. A campaign that already has them keeps going.","parameters":[{"name":"listId","in":"path","required":true,"description":"The list they’re in now.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveLeadsRequest"},"example":{"toListId":"list_77c2","leads":[{"leadId":"lead_8f2c"}]}}}},"responses":{"200":{"description":"What was moved.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MoveLeadsResult"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/lists/{listId}/leads/copy":{"post":{"operationId":"copyLeadsToList","tags":["Lists"],"summary":"Copy leads to another list","description":"Copies people from this list into another: they stay here and join that list too. Send up to 1,000 leads, or all: true for everyone in the list.","parameters":[{"name":"listId","in":"path","required":true,"description":"The list they’re in now.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveLeadsRequest"},"example":{"toListId":"list_77c2","leads":[{"leadId":"lead_8f2c"}]}}}},"responses":{"200":{"description":"What was copied.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MoveLeadsResult"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/campaigns":{"get":{"operationId":"listCampaigns","tags":["Campaigns"],"summary":"List campaigns","description":"Every campaign, with how many people are in each state.","responses":{"200":{"description":"Campaigns.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Campaign"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/campaigns/{campaignId}":{"get":{"operationId":"getCampaign","tags":["Campaigns"],"summary":"Get a campaign","parameters":[{"name":"campaignId","in":"path","required":true,"description":"The campaign.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}}],"responses":{"200":{"description":"The campaign.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Campaign"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"description":"One campaign: its status, its list, how many steps it has, and how many people are in each state."}},"/campaigns/{campaignId}/pause":{"post":{"operationId":"pauseCampaign","tags":["Campaigns"],"summary":"Pause a campaign","description":"Pauses a running campaign: nobody in it gets their next step until it resumes. Repeating the call is safe.","parameters":[{"name":"campaignId","in":"path","required":true,"description":"The campaign.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The campaign.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CampaignChange"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/campaigns/{campaignId}/resume":{"post":{"operationId":"resumeCampaign","tags":["Campaigns"],"summary":"Resume a campaign","description":"Resumes a paused campaign with every check a launch makes: connected accounts, live sending, the plan, who can still join. Only a campaign that was launched in Salesteam before can resume here; a draft never goes live through the API. Repeating the call is safe.","parameters":[{"name":"campaignId","in":"path","required":true,"description":"The campaign.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The campaign.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CampaignChange"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/campaigns/{campaignId}/leads":{"post":{"operationId":"addLeadsToCampaign","tags":["Leads"],"summary":"Add leads to a campaign","description":"Adds up to 1,000 people to a campaign’s list: leads to import by LinkedIn link (with their details), or people already saved by leadId or email. An active campaign takes them right away, with its skip rules applied exactly as in the app; anyone a rule leaves out stays in its list with the reason in `skip`, and joins once the rule lets them. A draft takes them when it launches. The scheduler contacts people within each account’s limits, hours and safety checks; nothing is sent on LinkedIn by this call itself.","parameters":[{"name":"campaignId","in":"path","required":true,"description":"The campaign.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddLeadsRequest"},"example":{"leads":[{"linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","firstName":"Jamie","lastName":"Lee","title":"Head of Sales","company":"Example Co","location":"London","customFields":{"source":"Webinar","score":42}}]}}}},"responses":{"200":{"description":"One result per lead, in request order.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/AddLeadsResult"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/campaigns/{campaignId}/leads/stop":{"post":{"operationId":"stopCampaignLead","tags":["Leads"],"summary":"Stop a lead in a campaign","description":"Takes a person out of a campaign for good, for example once they booked a call elsewhere. Repeating the call is safe.","parameters":[{"name":"campaignId","in":"path","required":true,"description":"The campaign.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRef"},"example":{"linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example"}}}},"responses":{"200":{"description":"What changed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeadControlResult"}},"required":["data"]},"example":{"data":{"lead":{"id":"lead_8f2c","fullName":"Jamie Lee","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example"},"campaign":{"id":"camp_7d1e","name":"EU founders"},"status":"stopped","changed":true}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/campaigns/{campaignId}/leads/pause":{"post":{"operationId":"pauseCampaignLead","tags":["Leads"],"summary":"Pause a lead in a campaign","description":"Nothing is sent to the person until they are resumed, and no other campaign takes them meanwhile.","parameters":[{"name":"campaignId","in":"path","required":true,"description":"The campaign.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRef"},"example":{"linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example"}}}},"responses":{"200":{"description":"What changed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeadControlResult"}},"required":["data"]},"example":{"data":{"lead":{"id":"lead_8f2c","fullName":"Jamie Lee","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example"},"campaign":{"id":"camp_7d1e","name":"EU founders"},"status":"paused","changed":true}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/campaigns/{campaignId}/leads/resume":{"post":{"operationId":"resumeCampaignLead","tags":["Leads"],"summary":"Resume a paused lead","description":"Resumes a person on hold, at the step where they paused.","parameters":[{"name":"campaignId","in":"path","required":true,"description":"The campaign.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRef"},"example":{"linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example"}}}},"responses":{"200":{"description":"What changed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeadControlResult"}},"required":["data"]},"example":{"data":{"lead":{"id":"lead_8f2c","fullName":"Jamie Lee","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example"},"campaign":{"id":"camp_7d1e","name":"EU founders"},"status":"active","changed":true}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/accounts":{"get":{"operationId":"listAccounts","tags":["Accounts"],"summary":"List LinkedIn accounts","description":"The workspace’s LinkedIn accounts, with the state the app shows (Sending, Waiting, Not sending, Limit reached, Paused, Disconnected), their limits and today’s use. Never their session, cookies or IP.","responses":{"200":{"description":"Accounts.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Account"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/stats":{"get":{"operationId":"getStats","tags":["Stats"],"summary":"Get stats","description":"The Analytics page’s numbers: connection requests, acceptance, messages, replies, Interested and meetings, for a time range, a campaign or a LinkedIn account. Leave out from and to for all time.","parameters":[{"name":"from","in":"query","required":false,"description":"The start: a date (2026-11-01) or a date and time.","schema":{"type":"string"},"example":"2026-11-01"},{"name":"to","in":"query","required":false,"description":"The end, not included. A date alone counts through that whole day (UTC).","schema":{"type":"string"},"example":"2026-11-12"},{"name":"campaignId","in":"query","required":false,"description":"One campaign.","schema":{"type":"string"}},{"name":"accountId","in":"query","required":false,"description":"One LinkedIn account (an ID from GET /accounts).","schema":{"type":"string"}}],"responses":{"200":{"description":"The numbers.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Stats"}},"required":["data"]},"example":{"data":{"from":"2026-11-01T00:00:00.000Z","to":"2026-11-13T00:00:00.000Z","campaignId":null,"accountId":null,"connectionRequestsSent":240,"accepted":72,"acceptanceRate":30,"messagesSent":190,"contacted":250,"replies":31,"replyRate":12,"interested":9,"interestedRate":29,"meetingsBooked":4,"meetingsAttended":3,"incompleteHistory":false}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/conversations":{"get":{"operationId":"listConversations","tags":["Conversations"],"summary":"List conversations","description":"Conversations the inbox shows, newest first. Inbox privacy applies.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","description":"nextCursor from the previous page.","schema":{"type":"string"}},{"name":"updatedSince","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"leadId","in":"query","schema":{"type":"string"}},{"name":"campaignId","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of conversations.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Conversation"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/conversations/{conversationId}":{"get":{"operationId":"getConversation","tags":["Conversations"],"summary":"Get a conversation","description":"One conversation with its messages, oldest first.","parameters":[{"name":"conversationId","in":"path","required":true,"description":"The conversation.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}}],"responses":{"200":{"description":"The conversation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Conversation"}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks":{"get":{"operationId":"listWebhooks","tags":["Webhooks"],"summary":"List API webhooks","description":"Webhooks this API subscribed, without their secrets. Webhooks added in Settings aren’t listed.","responses":{"200":{"description":"Webhooks.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"operationId":"subscribeWebhook","tags":["Webhooks"],"summary":"Subscribe a webhook","description":"Subscribes an address to events (REST hooks, for Zapier, Make and n8n triggers). The signing secret is in this answer. Sending the same address, events and campaigns again with the same key returns that webhook and its secret instead of making a second one, so a retry never doubles deliveries.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookRequest"},"example":{"url":"https://hooks.zapier.com/hooks/catch/123/abc/","events":["lead.replied","meeting.booked"]}}}},"responses":{"201":{"description":"The new webhook and its secret.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookCreated"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/{webhookId}/test":{"post":{"operationId":"testWebhook","tags":["Webhooks"],"summary":"Send a test event","description":"Sends a webhook this API subscribed a signed sample of any event (fictional people), or a test.ping, right away. The try shows in its delivery log. A failed test still answers 200, with sent: false and the answer the address gave.","parameters":[{"name":"webhookId","in":"path","required":true,"description":"The webhook.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestRequest"},"example":{"event":"lead.replied"}}}},"responses":{"200":{"description":"What happened.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookTestResult"}},"required":["data"]},"example":{"data":{"sent":true,"message":"Sample lead.replied sent to API webhook.","delivery":{"id":"dlv_00017617470000000a1b2c3d4e5f6","destinationId":"int_5b7e0c9d2a4f6b8e1c3d","eventId":"evt_test_4c2a1e9b7d5f3a8c","event":"lead.replied","status":"sent","attempts":1,"statusCode":200,"createdAt":"2026-10-29T14:05:00.000Z","updatedAt":"2026-10-29T14:05:00.000Z"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/{webhookId}":{"delete":{"operationId":"unsubscribeWebhook","tags":["Webhooks"],"summary":"Remove an API webhook","description":"Removes a webhook this API subscribed. Webhooks added in Settings stay.","parameters":[{"name":"webhookId","in":"path","required":true,"description":"The webhook.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,180}$"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Removed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean","const":true}},"required":["id","deleted"]}},"required":["data"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/sample":{"get":{"operationId":"sampleEvents","tags":["Webhooks"],"summary":"Sample events","description":"Recent real events of one type, newest first, or an example when there are none yet. Zapier and Make use it to map fields.","parameters":[{"name":"event","in":"query","required":true,"schema":{"$ref":"#/components/schemas/EventType"}}],"responses":{"200":{"description":"Up to 3 events.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/event-types":{"get":{"operationId":"listEventTypes","tags":["Webhooks"],"summary":"List event types","responses":{"200":{"description":"Every event type.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventTypeInfo"}},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","nextCursor"],"description":"One page."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}}},"webhooks":{"connection.sent":{"post":{"operationId":"event_connection_sent","tags":["Events"],"summary":"Connection Request Sent","description":"A campaign sent someone a connection request.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"connection.sent"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_connection_sent","type":"connection.sent","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":null,"link":"https://app.salesteam.dev/campaigns"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"connection.accepted":{"post":{"operationId":"event_connection_accepted","tags":["Events"],"summary":"Connection Request Accepted","description":"Someone accepted a connection request from a campaign.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"connection.accepted"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_connection_accepted","type":"connection.accepted","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"message.sent":{"post":{"operationId":"event_message_sent","tags":["Events"],"summary":"Message Sent","description":"A LinkedIn message went out in a conversation Salesteam shows.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"message.sent"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_message_sent","type":"message.sent","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Hi Jamie, saw Example Co is hiring SDRs. Open to comparing notes on outbound?","direction":"outbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.replied":{"post":{"operationId":"event_lead_replied","tags":["Events"],"summary":"First Reply","description":"A lead a campaign reached replied for the first time, by message or InMail. conversation.channel says which.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.replied"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_replied","type":"lead.replied","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Thanks for reaching out. Can you send times for a quick call next week?","direction":"inbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"message.replied":{"post":{"operationId":"event_message_replied","tags":["Events"],"summary":"Every Message Reply Received","description":"A lead sent a LinkedIn message. Fires for every reply.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"message.replied"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_message_replied","type":"message.replied","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Thanks for reaching out. Can you send times for a quick call next week?","direction":"inbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"inmail.sent":{"post":{"operationId":"event_inmail_sent","tags":["Events"],"summary":"InMail Sent","description":"A campaign sent an InMail.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"inmail.sent"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_inmail_sent","type":"inmail.sent","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Hi Jamie, saw Example Co is hiring SDRs. Open to comparing notes on outbound?","subject":"Quick question about outbound","direction":"outbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"inmail","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"inmail.replied":{"post":{"operationId":"event_inmail_replied","tags":["Events"],"summary":"Every InMail Reply Received","description":"A lead answered an InMail. Fires for every answer.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"inmail.replied"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_inmail_replied","type":"inmail.replied","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Thanks for reaching out. Can you send times for a quick call next week?","subject":"Quick question about outbound","direction":"inbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"inmail","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.finished":{"post":{"operationId":"event_lead_finished","tags":["Events"],"summary":"Sequence Finished","description":"A lead left a campaign: the sequence ended, they replied, or they were stopped.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.finished"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_finished","type":"lead.finished","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample","finish":{"reason":"completed"}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.tagged":{"post":{"operationId":"event_lead_tagged","tags":["Events"],"summary":"Lead Tag Updated","description":"A lead got a tag: in the inbox, from a campaign step or through the API.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.tagged"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_tagged","type":"lead.tagged","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":["Hot lead"],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample","tag":{"id":"tag_sample","name":"Hot lead"}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.interested":{"post":{"operationId":"event_lead_interested","tags":["Events"],"summary":"Lead Marked Interested","description":"A lead was marked Interested, with the tag or the outcome: in the inbox, by a campaign step or through the API.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.interested"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_interested","type":"lead.interested","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"meeting.booked":{"post":{"operationId":"event_meeting_booked","tags":["Events"],"summary":"Meeting Booked","description":"A meeting was booked with a lead.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"meeting.booked"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_meeting_booked","type":"meeting.booked","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample","meeting":{"at":"2026-11-03T15:00:00.000Z"}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"profile.viewed":{"post":{"operationId":"event_profile_viewed","tags":["Events"],"summary":"Viewed Profile","description":"A campaign viewed a lead’s LinkedIn profile.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"profile.viewed"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_profile_viewed","type":"profile.viewed","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":null,"link":"https://app.salesteam.dev/campaigns"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"post.liked":{"post":{"operationId":"event_post_liked","tags":["Events"],"summary":"Liked Post","description":"A campaign liked a lead’s latest LinkedIn post. post.url links to it.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"post.liked"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_post_liked","type":"post.liked","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":null,"link":"https://app.salesteam.dev/campaigns","post":{"url":"https://www.linkedin.com/feed/update/urn:li:activity:7390000000000000001/"}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"profile.followed":{"post":{"operationId":"event_profile_followed","tags":["Events"],"summary":"Follow Sent","description":"A campaign followed a lead on LinkedIn.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"profile.followed"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_profile_followed","type":"profile.followed","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":null,"link":"https://app.salesteam.dev/campaigns"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.not_interested":{"post":{"operationId":"event_lead_not_interested","tags":["Events"],"summary":"Lead Marked Not Interested","description":"A lead was marked Not interested, or their outcome was set to Lost.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.not_interested"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_not_interested","type":"lead.not_interested","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":["Not interested"],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.outcome_changed":{"post":{"operationId":"event_lead_outcome_changed","tags":["Events"],"summary":"Outcome Changed","description":"A lead’s outcome changed: Interested, Qualified, Meeting booked, Attended, No-show, Won or Lost.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.outcome_changed"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_outcome_changed","type":"lead.outcome_changed","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample","outcome":{"status":"booked","label":"Meeting booked","previous":"interested"},"meeting":{"at":"2026-11-03T15:00:00.000Z"}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"campaign.completed":{"post":{"operationId":"event_campaign_completed","tags":["Events"],"summary":"Campaign Completed","description":"A campaign finished: everyone in it is done. results has its numbers.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"campaign.completed"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_campaign_completed","type":"campaign.completed","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":null,"campaign":{"id":"camp_sample","name":"EU founders"},"sender":null,"message":null,"conversation":null,"link":"https://app.salesteam.dev/campaigns","results":{"leads":120,"contacted":118,"accepted":41,"replied":14}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"campaign.requests_paused":{"post":{"operationId":"event_campaign_requests_paused","tags":["Events"],"summary":"Requests Paused for Low Acceptance","description":"Few people accepted a campaign’s connection requests, so new ones paused to protect the account. Messages go on.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"campaign.requests_paused"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_campaign_requests_paused","type":"campaign.requests_paused","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":null,"campaign":{"id":"camp_sample","name":"EU founders"},"sender":null,"message":null,"conversation":null,"link":"https://app.salesteam.dev/campaigns","acceptance":{"sent":64,"accepted":7,"percent":10.9,"threshold":15}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"account.disconnected":{"post":{"operationId":"event_account_disconnected","tags":["Events"],"summary":"LinkedIn Account Disconnected","description":"A LinkedIn account was disconnected. Its campaigns wait until it’s reconnected.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"account.disconnected"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_account_disconnected","type":"account.disconnected","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":null,"campaign":null,"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":null,"conversation":null,"link":"https://app.salesteam.dev/senders","account":{"status":"disconnected","campaigns":2}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"message.first_reply":{"post":{"operationId":"event_message_first_reply","tags":["Events"],"summary":"First Message Reply Received","description":"A lead a campaign reached replied to a LinkedIn message for the first time.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"message.first_reply"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_message_first_reply","type":"message.first_reply","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Thanks for reaching out. Can you send times for a quick call next week?","direction":"inbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"inmail.first_reply":{"post":{"operationId":"event_inmail_first_reply","tags":["Events"],"summary":"First InMail Reply Received","description":"A lead a campaign reached answered an InMail for the first time.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"inmail.first_reply"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_inmail_first_reply","type":"inmail.first_reply","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Thanks for reaching out. Can you send times for a quick call next week?","subject":"Quick question about outbound","direction":"inbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"inmail","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.auto_tagged_positive":{"post":{"operationId":"event_lead_auto_tagged_positive","tags":["Events"],"summary":"Lead Auto Tagged Positive","description":"Salesteam read a lead’s first reply and it was a yes, like asking for a call. The conversation is tagged Interested.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.auto_tagged_positive"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_auto_tagged_positive","type":"lead.auto_tagged_positive","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":["Interested"],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Thanks for reaching out. Can you send times for a quick call next week?","direction":"inbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample","sentiment":"positive","tag":{"id":"tag_interested","name":"Interested"}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.auto_tagged_negative":{"post":{"operationId":"event_lead_auto_tagged_negative","tags":["Events"],"summary":"Lead Auto Tagged Negative","description":"Salesteam read a lead’s first reply and it was a no. The conversation is tagged Not interested.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.auto_tagged_negative"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_auto_tagged_negative","type":"lead.auto_tagged_negative","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":["Not interested"],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Thanks, but we’re all set for now. Please take me off your list.","direction":"inbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample","sentiment":"negative","tag":{"id":"tag_not_interested","name":"Not interested"}}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"lead.auto_tagged_generic":{"post":{"operationId":"event_lead_auto_tagged_generic","tags":["Events"],"summary":"Lead Auto Tagged Generic","description":"Salesteam read a lead’s first reply and it was neither a yes nor a no, like a thank-you or an out-of-office. No tag is added.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"lead.auto_tagged_generic"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_lead_auto_tagged_generic","type":"lead.auto_tagged_generic","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":{"id":"lead_sample","firstName":"Jamie","lastName":"Lee","fullName":"Jamie Lee","title":"Head of Sales","company":"Example Co","location":"London, United Kingdom","linkedinUrl":"https://www.linkedin.com/in/jamie-lee-example","email":"jamie@example.co","emailStatus":"deliverable","tags":[],"customFields":{"source":"Webinar"}},"campaign":{"id":"camp_sample","name":"EU founders"},"sender":{"id":"sender_sample","name":"Alex Morgan"},"message":{"id":"msg_sample","text":"Thanks for the note. I’m out of the office until Monday.","direction":"inbound","sentAt":"2026-10-29T14:05:00.000Z"},"conversation":{"id":"conv_sample","channel":"linkedin","link":"https://app.salesteam.dev/inbox?conversation=conv_sample"},"link":"https://app.salesteam.dev/inbox?conversation=conv_sample","sentiment":"generic"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}},"test.ping":{"post":{"operationId":"event_test_ping","tags":["Events"],"summary":"Send test","description":"What the Send test button sends.","parameters":[{"name":"X-Salesteam-Event","in":"header","required":true,"schema":{"type":"string","example":"test.ping"}},{"name":"X-Salesteam-Delivery","in":"header","required":true,"description":"The event ID, the same on every retry.","schema":{"type":"string"}},{"name":"X-Salesteam-Timestamp","in":"header","required":true,"description":"Unix seconds when this try was signed.","schema":{"type":"string"}},{"name":"X-Salesteam-Signature","in":"header","required":true,"description":"v1= and the hex HMAC-SHA256 of `${timestamp}.${rawBody}` with the webhook’s signing secret.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"},"example":{"id":"evt_sample_test_ping","type":"test.ping","occurredAt":"2026-10-29T14:05:00.000Z","workspace":{"id":"ws_5f2a9c0e7b14d3a6c8e1f027","name":"Acme outbound"},"lead":null,"campaign":null,"sender":null,"message":null,"conversation":null,"link":"https://app.salesteam.dev/settings?tab=integrations"}}}},"responses":{"408":{"description":"Tried again later (also 429, 5xx and no answer)."},"2XX":{"description":"Received. Answer within 10 seconds."}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"A workspace API key from Settings → API keys: st_live_… for full access, or st_read_… for a read-only key, which can read everything and change nothing (changes answer 403 read_only_key)."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"description":"Any unique value up to 255 characters, like a UUID. The request runs once; repeats within 24 hours get the first answer, with Idempotent-Replayed: true.","schema":{"type":"string","maxLength":255}}},"headers":{"X-Request-Id":{"description":"This call’s ID. Include it when you contact support.","schema":{"type":"string","example":"req_9c41e2a07b5d3f6e8a1c2b4d"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute for this key.","schema":{"type":"integer","example":300}},"X-RateLimit-Remaining":{"description":"Requests left in this minute.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds when the window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}},"responses":{"BadRequest":{"description":"The request is wrong. The message says what to fix.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"invalid_request","message":"leads: Send up to 1,000 leads per request."}}}}},"Unauthorized":{"description":"No key, an unknown key, or a revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"unauthorized","message":"This API key isn’t valid. It may have been revoked."}}}}},"NotFound":{"description":"Not in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"not_found","message":"This campaign wasn’t found in this workspace."}}}}},"Conflict":{"description":"The change doesn’t fit the current state, or the workspace is busy (workspace_busy, with Retry-After).","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"workspace_busy","message":"Another change to this workspace is still finishing. Try again in a few seconds."}}}}},"TooLarge":{"description":"The body is larger than 1 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"too_large","message":"The request is larger than 1 MB."}}}}},"IdempotencyKeyReused":{"description":"The Idempotency-Key was used for a different request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"idempotency_key_reused","message":"This Idempotency-Key was already used for a different request. Use a new key for each new request."}}}}},"UnsupportedMediaType":{"description":"The body isn’t JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"unsupported_media_type","message":"Send the body as JSON with Content-Type: application/json."}}}}},"RateLimited":{"description":"More than 300 requests this minute.","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"rate_limited","message":"This key made more than 300 requests this minute. Wait and try again."}}}}},"ServerError":{"description":"Something went wrong at Salesteam.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"server_error","message":"Something went wrong on Salesteam’s side. Try again in a minute."}}}}},"PaymentRequired":{"description":"The workspace is read-only until its plan is paid (billing_hold).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"billing_hold","message":"Adding leads needs an active subscription. Choose a plan in Settings → Billing."}}}}}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A stable code to check in your code.","enum":["invalid_request","invalid_json","duplicate_in_request","unauthorized","forbidden","read_only_key","billing_hold","not_found","not_in_campaign","method_not_allowed","conflict","idempotency_in_progress","workspace_busy","campaign_finished","campaign_without_list","tag_limit","lead_has_history","campaign_not_launched","campaign_cannot_resume","ambiguous_email","too_large","idempotency_key_reused","unsupported_media_type","rate_limited","server_error","error"]},"message":{"type":"string","description":"A plain sentence to show a person."},"requestId":{"type":"string","description":"The X-Request-Id of this call. Include it when you contact support."}},"required":["code","message","requestId"]}},"required":["error"],"example":{"error":{"code":"not_found","message":"This campaign wasn’t found in this workspace.","requestId":"req_9c41e2a07b5d3f6e8a1c2b4d"}}},"Workspace":{"type":"object","properties":{"id":{"type":"string","description":"The workspace ID. Events carry the same one."},"name":{"type":"string","description":"The workspace’s name."}},"required":["id","name"]},"Me":{"type":"object","properties":{"workspace":{"$ref":"#/components/schemas/Workspace"},"key":{"type":"object","properties":{"id":{"type":"string","description":"The key’s ID."},"name":{"type":"string","description":"The name given to the key in Salesteam."}},"required":["id","name"]},"rateLimit":{"type":"object","properties":{"limit":{"type":"integer","description":"Requests allowed per window."},"windowSeconds":{"type":"integer","description":"Window length in seconds."}},"required":["limit","windowSeconds"]}},"required":["workspace","key","rateLimit"]},"CampaignStatus":{"type":"string","description":"draft: not launched. active: running. paused: stopped by the owner. completed: finished.","enum":["draft","active","paused","completed"]},"Campaign":{"type":"object","properties":{"id":{"type":"string","description":"Campaign ID."},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/CampaignStatus"},"archived":{"type":"boolean","description":"Archived in Salesteam: hidden from the Campaigns list. Resuming brings it back."},"listId":{"type":["string","null"],"description":"The lead list this campaign takes people from."},"steps":{"type":"integer","description":"How many steps the sequence has."},"audience":{"type":"integer","description":"People in the campaign’s list."},"leads":{"type":"object","properties":{"total":{"type":"integer"},"active":{"type":"integer"},"waitingForAcceptance":{"type":"integer"},"paused":{"type":"integer"},"finished":{"type":"integer"},"replied":{"type":"integer"}},"required":["total","active","waitingForAcceptance","paused","finished","replied"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","status","archived","listId","steps","audience","leads","createdAt","updatedAt"]},"List":{"type":"object","properties":{"id":{"type":"string","description":"List ID."},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"leads":{"type":"integer","description":"People in the list."},"campaigns":{"type":"array","description":"Campaigns that take people from this list.","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/CampaignStatus"}},"required":["id","name","status"]}}},"required":["id","name","createdAt","leads","campaigns"]},"LeadInput":{"type":"object","properties":{"linkedinUrl":{"type":"string","description":"The person’s LinkedIn profile link. People are matched by it, so sending someone twice never adds them twice.","maxLength":1000},"email":{"type":["string","null"],"description":"Their email. It fills in an email Salesteam doesn’t have yet; a found or verified one stays.","format":"email","maxLength":254},"firstName":{"type":["string","null"],"maxLength":100},"lastName":{"type":["string","null"],"maxLength":100},"title":{"type":["string","null"],"maxLength":200},"company":{"type":["string","null"],"maxLength":200},"location":{"type":["string","null"],"maxLength":200},"industry":{"type":["string","null"],"maxLength":100},"headline":{"type":["string","null"],"maxLength":300},"customFields":{"type":["object","null"],"description":"Values for the workspace's custom fields, by field key or name (`service_word` or `Service word`; see GET /custom-fields). A name the workspace doesn't have yet becomes a new field: a number makes a Number field, a list a Multi-select, anything else Text. Values are checked against the field's type: a URL needs a web address, a Number a number, a Date a date (saved as YYYY-MM-DD), and a choice that isn't an option yet is added. null removes a value; an empty string or an empty list leaves it as it is. Up to 50 per lead.","maxProperties":50,"additionalProperties":{"type":["string","number","boolean","array","null"],"items":{"type":["string","number"]}}}},"required":["linkedinUrl"],"additionalProperties":false},"AddLeadsRequest":{"type":"object","properties":{"leads":{"type":"array","minItems":1,"maxItems":1000,"items":{"anyOf":[{"$ref":"#/components/schemas/LeadInput"},{"$ref":"#/components/schemas/SavedLead"}]}}},"required":["leads"],"additionalProperties":false},"LeadResult":{"type":"object","properties":{"index":{"type":"integer","description":"Position of this lead in the request."},"linkedinUrl":{"type":["string","null"]},"status":{"type":"string","enum":["added","updated","skipped"]},"leadId":{"type":"string","description":"The lead’s ID. A person skipped because they’re already in Salesteam (already in the campaign or list, in another campaign, replied, suppressed) has theirs too. Missing only for rows that couldn’t be read or found."},"reason":{"type":"string","description":"Why it was skipped.","enum":["duplicate_in_request","already_in_campaign","already_in_list","in_another_campaign","replied","suppressed","blacklisted","not_found","ambiguous_email","invalid_linkedin_url","invalid_lead","invalid_custom_fields","not_available"]},"message":{"type":"string","description":"Why it was skipped, in words."},"enrolled":{"type":"boolean","description":"Campaign only: the person is in the campaign now."},"note":{"type":"string","description":"Campaign only: when the person will join, if not yet."},"skip":{"type":"object","description":"Campaign only: why the campaign’s skip rules leave them out for now, as its launch review shows it. They stay in its list and join once the rule lets them.","properties":{"rule":{"type":"string","enum":["do_not_contact","excluded_list","in_campaign","conversation","not_interested","contacted","inmailed","cant_inmail"]},"reason":{"type":"string","description":"In words, like “Contacted 12 days ago”."}},"required":["rule","reason"]}},"required":["index","linkedinUrl","status"]},"AddLeadsResult":{"type":"object","properties":{"campaign":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/CampaignStatus"}},"required":["id","name","status"]},"list":{"type":"object","properties":{"id":{"type":"string","description":"The list's ID."},"name":{"type":"string","description":"The list's name."}},"required":["id","name"]},"added":{"type":"integer"},"updated":{"type":"integer"},"skipped":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/LeadResult"}}},"required":["added","updated","skipped","results"]},"EnrollmentStatus":{"type":"string","description":"Where the person is in a campaign.","enum":["active","waiting_for_acceptance","retrying","paused","needs_review","replied","suppressed","finished","stopped"]},"LeadCampaign":{"type":"object","properties":{"campaign":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/CampaignStatus"}},"required":["id","name","status"]},"status":{"$ref":"#/components/schemas/EnrollmentStatus"},"step":{"type":"integer","description":"The step they are on, from 1."},"steps":{"type":"integer"},"sender":{"type":["object","null"],"properties":{"id":{"type":"string"},"name":{"type":"string"}},"description":"The LinkedIn account reaching out."},"connectionRequestSentAt":{"type":["string","null"],"format":"date-time"},"acceptedAt":{"type":["string","null"],"format":"date-time"},"lastContactedAt":{"type":["string","null"],"format":"date-time"},"messagesSent":{"type":"integer"},"repliedAt":{"type":["string","null"],"format":"date-time"},"finishedAt":{"type":["string","null"],"format":"date-time"},"nextStepAt":{"type":["string","null"],"description":"When the next step is due, while active.","format":"date-time"},"pausedReason":{"type":["string","null"]}},"required":["campaign","status","step","steps","sender","connectionRequestSentAt","acceptedAt","lastContactedAt","messagesSent","repliedAt","finishedAt","nextStepAt","pausedReason"]},"Lead":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"title":{"type":"string"},"company":{"type":"string"},"companyShort":{"type":"string","description":"What {{company_short}} (and {{company_name}}) say for this lead in messages: the short name set for them, or the company name cleaned up (no Inc., no tagline)."},"companyShortSet":{"type":"boolean","description":"A short company name was set for this lead; false means the automatic one."},"location":{"type":"string"},"industry":{"type":"string"},"linkedinUrl":{"type":"string"},"email":{"type":["string","null"],"description":"A found email, when it is usable."},"emailStatus":{"type":["string","null"],"enum":["deliverable","catch_all","unknown"]},"status":{"type":"string","enum":["new","queued","contacted","connected","replied","suppressed"]},"stage":{"$ref":"#/components/schemas/LeadStage"},"tags":{"type":"array","items":{"type":"string"}},"customFields":{"type":"object","description":"The lead's custom field values by field key: text, numbers, dates as YYYY-MM-DD, web addresses, and lists for Multi-select fields.","additionalProperties":{"$ref":"#/components/schemas/CustomFieldValue"}},"lists":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The list's ID."},"name":{"type":"string","description":"The list's name."}},"required":["id","name"]}},"fromPost":{"type":["object","null"],"description":"The LinkedIn post this person liked or commented on when they were saved from it (Posts › Engagers), kept beside how they were first added. Null when they weren't saved from a post.","properties":{"postUrl":{"type":"string"},"topic":{"type":["string","null"],"description":"What the post was about, in the workspace's words: what {{post_topic}} says in messages."},"interaction":{"type":"string","enum":["like","comment"]},"comment":{"type":["string","null"],"description":"Their comment, up to 300 characters."},"yourPost":{"type":"boolean","description":"The post is one of the workspace's own."},"engagedAt":{"type":"string","format":"date-time"},"savedAt":{"type":"string","format":"date-time"}},"required":["postUrl","topic","interaction","comment","yourPost","engagedAt","savedAt"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time","description":"The last time anything about this person changed: their details, lists or tags, an email found, outreach or a reply. What updatedSince filters on."},"campaigns":{"type":"array","items":{"$ref":"#/components/schemas/LeadCampaign"}}},"required":["id","firstName","lastName","fullName","title","company","companyShort","companyShortSet","location","industry","linkedinUrl","email","emailStatus","status","stage","tags","customFields","lists","fromPost","createdAt","updatedAt","campaigns"]},"LeadRef":{"type":"object","description":"The person, as leadId, linkedinUrl or email.","properties":{"leadId":{"type":["string","null"],"maxLength":180},"linkedinUrl":{"type":["string","null"],"maxLength":1000},"email":{"type":["string","null"],"format":"email","maxLength":254,"description":"The lead’s email: the one Salesteam found or was sent. Handy when a calendar or CRM knows only the email."}},"additionalProperties":false},"LeadControlResult":{"type":"object","properties":{"lead":{"type":"object","properties":{"id":{"type":"string"},"fullName":{"type":"string"},"linkedinUrl":{"type":"string"}},"required":["id","fullName","linkedinUrl"]},"campaign":{"type":"object","properties":{"id":{"type":"string","description":"The campaign's ID."},"name":{"type":"string","description":"The campaign's name."}},"required":["id","name"]},"status":{"$ref":"#/components/schemas/EnrollmentStatus"},"changed":{"type":"boolean","description":"false when nothing needed to change, so repeating a call is safe."}},"required":["lead","campaign","status","changed"]},"TagsRequest":{"type":"object","properties":{"leadId":{"type":["string","null"]},"linkedinUrl":{"type":["string","null"]},"tags":{"type":["array","string"],"description":"Tag names, or one tag as a string.","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":40}},"email":{"type":["string","null"],"format":"email","maxLength":254,"description":"The lead’s email: the one Salesteam found or was sent. Handy when a calendar or CRM knows only the email."}},"required":["tags"],"additionalProperties":false},"TagsResult":{"type":"object","properties":{"leadId":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["leadId","tags"]},"Tag":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]},"MessageSummary":{"type":"object","properties":{"id":{"type":"string"},"direction":{"type":"string","enum":["inbound","outbound"]},"text":{"type":"string","description":"Up to 500 characters."},"sentAt":{"type":"string","format":"date-time"}},"required":["id","direction","text","sentAt"]},"Message":{"type":"object","properties":{"id":{"type":"string"},"direction":{"type":"string","enum":["inbound","outbound"]},"text":{"type":"string"},"subject":{"type":"string","description":"InMail only."},"sentAt":{"type":"string","format":"date-time"}},"required":["id","direction","text","sentAt"]},"Conversation":{"type":"object","properties":{"id":{"type":"string"},"lead":{"type":["object","null"],"properties":{"id":{"type":"string"},"fullName":{"type":"string"},"linkedinUrl":{"type":"string"}}},"sender":{"type":["object","null"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"channel":{"type":"string","enum":["linkedin","inmail"]},"campaigns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The campaign's ID."},"name":{"type":"string","description":"The campaign's name."}},"required":["id","name"]}},"unread":{"type":"boolean"},"archived":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"lastMessage":{"oneOf":[{"$ref":"#/components/schemas/MessageSummary"},{"type":"null"}]},"messageCount":{"type":"integer"},"updatedAt":{"type":"string","format":"date-time"},"link":{"type":"string","description":"Opens the conversation in Salesteam.","format":"uri"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/Message"},"description":"Only on GET /conversations/{conversationId}, oldest first."}},"required":["id","lead","sender","channel","campaigns","unread","archived","tags","lastMessage","messageCount","updatedAt","link"]},"EventType":{"type":"string","description":"An event type.","enum":["connection.sent","connection.accepted","message.sent","lead.replied","message.replied","inmail.sent","inmail.replied","lead.finished","lead.tagged","lead.interested","meeting.booked","profile.viewed","post.liked","profile.followed","lead.not_interested","lead.outcome_changed","campaign.completed","campaign.requests_paused","account.disconnected","message.first_reply","inmail.first_reply","lead.auto_tagged_positive","lead.auto_tagged_negative","lead.auto_tagged_generic"]},"WebhookRequest":{"type":"object","properties":{"url":{"type":["string","null"],"description":"Public https address to call.","maxLength":2000},"target_url":{"type":["string","null"],"description":"Another name for url (Zapier REST hooks).","maxLength":2000},"events":{"type":["array","string","null"],"minItems":1,"items":{"$ref":"#/components/schemas/EventType"},"description":"The events to send. A comma-separated string also works."},"event":{"anyOf":[{"$ref":"#/components/schemas/EventType"},{"type":"null"}],"description":"One event, instead of events."},"campaignIds":{"type":["array","string","null"],"maxItems":50,"items":{"type":"string"},"description":"Only events from these campaigns. Left out, null, an empty string or an empty list: every campaign. A comma-separated string of IDs also works."},"name":{"type":["string","null"],"maxLength":60}},"additionalProperties":false},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","description":"Masked address."},"events":{"type":"array","items":{"$ref":"#/components/schemas/EventType"}},"campaignIds":{"type":"array","items":{"type":"string"}},"enabled":{"type":"boolean"},"pausedReason":{"type":["string","null"],"enum":["failing","gone",null],"description":"Why Salesteam paused it: failing (3 days of failed deliveries) or gone (the address answered 410)."},"createdAt":{"type":"string","format":"date-time"},"lastSentAt":{"type":["string","null"],"format":"date-time"},"lastError":{"type":["string","null"]}},"required":["id","name","url","events","campaignIds","enabled","pausedReason","createdAt","lastSentAt","lastError"]},"WebhookTestRequest":{"type":"object","properties":{"event":{"anyOf":[{"$ref":"#/components/schemas/EventType"},{"const":"test.ping"},{"type":"null"}],"description":"The event to send a sample of. Without it (or null), a test.ping."}},"additionalProperties":false},"Delivery":{"type":"object","properties":{"id":{"type":"string"},"destinationId":{"type":"string"},"eventId":{"type":"string"},"event":{"anyOf":[{"$ref":"#/components/schemas/EventType"},{"const":"test.ping"}]},"status":{"type":"string","enum":["queued","retrying","sent","failed"]},"attempts":{"type":"integer"},"statusCode":{"type":"integer","description":"The answer the address gave."},"error":{"type":"string"},"nextAttemptAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","destinationId","eventId","event","status","attempts","createdAt","updatedAt"]},"WebhookTestResult":{"type":"object","properties":{"sent":{"type":"boolean"},"message":{"type":"string"},"delivery":{"$ref":"#/components/schemas/Delivery"}},"required":["sent","message","delivery"]},"WebhookCreated":{"allOf":[{"$ref":"#/components/schemas/Webhook"},{"type":"object","properties":{"secret":{"type":"string","description":"Signing secret (whsec_…). Shown only in this answer."}},"required":["secret"]}]},"CustomFieldValue":{"type":["string","number","array"],"items":{"type":"string"},"description":"Text for Text, Single select, Date (YYYY-MM-DD) and URL fields; a number for Number fields; a list of choices for Multi-select fields."},"CustomFieldInfo":{"type":"object","properties":{"key":{"type":"string","description":"What the field is called in customFields and in messages: {{custom.<key>}}. It never changes, even when the field is renamed."},"name":{"type":"string"},"type":{"type":"string","enum":["text","select","multi_select","number","date","url"]},"typeLabel":{"type":"string","description":"The type as Salesteam shows it, such as Single select."},"options":{"type":"array","items":{"type":"string"},"description":"The choices of a Single select or Multi-select field; empty for other types."}},"required":["key","name","type","typeLabel","options"]},"EventTypeInfo":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/EventType"},"label":{"type":"string"},"description":{"type":"string"}},"required":["type","label","description"]},"EventLead":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"title":{"type":"string"},"company":{"type":"string"},"location":{"type":"string"},"linkedinUrl":{"type":"string"},"email":{"type":["string","null"]},"emailStatus":{"type":["string","null"],"enum":["deliverable","catch_all","unknown"]},"tags":{"type":"array","items":{"type":"string"}},"customFields":{"type":"object","description":"The lead's custom field values by field key: text, numbers, dates as YYYY-MM-DD, web addresses, and lists for Multi-select fields.","additionalProperties":{"$ref":"#/components/schemas/CustomFieldValue"}}},"required":["id","firstName","lastName","fullName","title","company","location","linkedinUrl","email","emailStatus","tags","customFields"]},"Event":{"type":"object","description":"Every event has the same shape. Parts an event doesn’t have are null, so mapped fields never disappear.","properties":{"id":{"type":"string","description":"Event ID, the same on every retry. Use it to skip repeats."},"type":{"anyOf":[{"$ref":"#/components/schemas/EventType"},{"const":"test.ping"}]},"occurredAt":{"type":"string","format":"date-time"},"workspace":{"oneOf":[{"$ref":"#/components/schemas/Workspace"},{"type":"null"}]},"lead":{"oneOf":[{"$ref":"#/components/schemas/EventLead"},{"type":"null"}]},"campaign":{"type":["object","null"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"sender":{"type":["object","null"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"message":{"oneOf":[{"$ref":"#/components/schemas/Message"},{"type":"null"}]},"conversation":{"type":["object","null"],"properties":{"id":{"type":"string"},"channel":{"type":"string","enum":["linkedin","inmail"]},"link":{"type":"string"}}},"link":{"type":"string","description":"Where to open this in Salesteam."},"tag":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"meeting":{"type":"object","properties":{"at":{"type":"string","format":"date-time"}}},"finish":{"type":"object","properties":{"reason":{"type":"string","enum":["completed","replied","stopped","not_accepted","moved","suppressed"]}},"required":["reason"]},"post":{"type":"object","description":"post.liked: the post that was liked. url is null when LinkedIn didn’t name it.","properties":{"url":{"type":["string","null"]}},"required":["url"]},"outcome":{"type":"object","description":"lead.outcome_changed, and lead.not_interested from a Lost outcome: the new outcome and the one before it.","properties":{"status":{"type":"string","enum":["interested","qualified","booked","attended","no_show","won","lost"]},"label":{"type":"string","description":"How the app names it, like \"Meeting booked\"."},"previous":{"oneOf":[{"type":"string","enum":["interested","qualified","booked","attended","no_show","won","lost"]},{"type":"null"}]}},"required":["status","label","previous"]},"results":{"type":"object","description":"campaign.completed: the campaign’s numbers.","properties":{"leads":{"type":"integer","description":"People in the campaign."},"contacted":{"type":"integer"},"accepted":{"type":"integer","description":"Connection requests accepted."},"replied":{"type":"integer"}},"required":["leads","contacted","accepted","replied"]},"acceptance":{"type":"object","description":"campaign.requests_paused: of the requests old enough to answer, how many were accepted, against the workspace’s safety line.","properties":{"sent":{"type":"integer"},"accepted":{"type":"integer"},"percent":{"type":"number"},"threshold":{"type":"integer","description":"The safety line, in percent."}},"required":["sent","accepted","percent","threshold"]},"account":{"type":"object","description":"account.disconnected: the account is sender. campaigns is how many active or paused campaigns wait for it.","properties":{"status":{"type":"string","enum":["disconnected"]},"campaigns":{"type":"integer"}},"required":["status","campaigns"]},"sentiment":{"type":"string","enum":["positive","negative","generic"],"description":"Lead Auto Tagged events: how Salesteam read the first reply, which is in message. tag is the tag it added: Interested for positive, Not interested for negative, none for generic."}},"required":["id","type","occurredAt","workspace","lead","campaign","sender","message","conversation","link"]},"SavedLead":{"type":"object","description":"Someone already in Salesteam, named by leadId (or id) or email alone: they join as they are, as the app’s Add to list does.","properties":{"leadId":{"type":["string","null"],"maxLength":180},"id":{"type":["string","null"],"maxLength":180,"description":"The same as leadId."},"email":{"type":["string","null"],"format":"email","maxLength":254}},"additionalProperties":false},"LeadPatch":{"type":"object","description":"Only the fields you send change. Empty values (null or \"\") change nothing: list a field in `clear` to empty it.","properties":{"firstName":{"type":["string","null"],"maxLength":100,"description":"What {{first_name}} says. It can’t be emptied."},"lastName":{"type":["string","null"],"maxLength":100},"company":{"type":["string","null"],"maxLength":200,"description":"A new company resets companyShort to the automatic one, unless you send companyShort too."},"companyShort":{"type":["string","null"],"maxLength":100,"description":"The short company name {{company_short}} and {{company_name}} use, like “Acme” for “Acme Holdings, Inc.”. Clear it to go back to the automatic one."},"title":{"type":["string","null"],"maxLength":200,"description":"Their job title."},"email":{"type":["string","null"],"format":"email","maxLength":254,"description":"The email Salesteam uses for them from now on."},"customFields":{"type":["object","null"],"description":"Values for the workspace's custom fields, by field key or name (`service_word` or `Service word`; see GET /custom-fields). A name the workspace doesn't have yet becomes a new field: a number makes a Number field, a list a Multi-select, anything else Text. Values are checked against the field's type: a URL needs a web address, a Number a number, a Date a date (saved as YYYY-MM-DD), and a choice that isn't an option yet is added. null removes a value; an empty string or an empty list leaves it as it is. Up to 50 per lead.","maxProperties":50,"additionalProperties":{"type":["string","number","boolean","array","null"],"items":{"type":["string","number"]}}},"tags":{"type":["object","null"],"description":"Tags to add (a new name becomes a workspace tag) and tags to take off, by name.","properties":{"add":{"type":["array","string","null"],"description":"Tag names (or IDs); one name can be a string.","maxItems":20,"items":{"type":"string","maxLength":40}},"remove":{"type":["array","string","null"],"description":"Tag names (or IDs); one name can be a string.","maxItems":20,"items":{"type":"string","maxLength":40}}},"additionalProperties":false},"clear":{"type":["array","null"],"description":"Fields to empty: lastName, company, companyShort (back to the automatic one), title or email. A cleared company or title shows what LinkedIn says, if anything.","items":{"type":"string","enum":["lastName","company","companyShort","title","email"]}}},"additionalProperties":false},"LeadPatchRow":{"type":"object","description":"One lead’s change. Name the lead with leadId (or id), linkedinUrl or email: the first one given counts. A row named by its email doesn’t change the email.","properties":{"leadId":{"type":["string","null"],"maxLength":180},"id":{"type":["string","null"],"maxLength":180,"description":"The same as leadId."},"linkedinUrl":{"type":["string","null"],"maxLength":1000},"firstName":{"type":["string","null"],"maxLength":100,"description":"What {{first_name}} says. It can’t be emptied."},"lastName":{"type":["string","null"],"maxLength":100},"company":{"type":["string","null"],"maxLength":200,"description":"A new company resets companyShort to the automatic one, unless you send companyShort too."},"companyShort":{"type":["string","null"],"maxLength":100,"description":"The short company name {{company_short}} and {{company_name}} use, like “Acme” for “Acme Holdings, Inc.”. Clear it to go back to the automatic one."},"title":{"type":["string","null"],"maxLength":200,"description":"Their job title."},"email":{"type":["string","null"],"format":"email","maxLength":254,"description":"The email Salesteam uses for them from now on."},"customFields":{"type":["object","null"],"description":"Values for the workspace's custom fields, by field key or name (`service_word` or `Service word`; see GET /custom-fields). A name the workspace doesn't have yet becomes a new field: a number makes a Number field, a list a Multi-select, anything else Text. Values are checked against the field's type: a URL needs a web address, a Number a number, a Date a date (saved as YYYY-MM-DD), and a choice that isn't an option yet is added. null removes a value; an empty string or an empty list leaves it as it is. Up to 50 per lead.","maxProperties":50,"additionalProperties":{"type":["string","number","boolean","array","null"],"items":{"type":["string","number"]}}},"tags":{"type":["object","null"],"description":"Tags to add (a new name becomes a workspace tag) and tags to take off, by name.","properties":{"add":{"type":["array","string","null"],"description":"Tag names (or IDs); one name can be a string.","maxItems":20,"items":{"type":"string","maxLength":40}},"remove":{"type":["array","string","null"],"description":"Tag names (or IDs); one name can be a string.","maxItems":20,"items":{"type":"string","maxLength":40}}},"additionalProperties":false},"clear":{"type":["array","null"],"description":"Fields to empty: lastName, company, companyShort (back to the automatic one), title or email. A cleared company or title shows what LinkedIn says, if anything.","items":{"type":"string","enum":["lastName","company","companyShort","title","email"]}}},"additionalProperties":false},"UpdateLeadsRequest":{"type":"object","properties":{"leads":{"type":"array","minItems":1,"maxItems":1000,"items":{"$ref":"#/components/schemas/LeadPatchRow"}}},"required":["leads"],"additionalProperties":false},"UpdateLeadsResult":{"type":"object","properties":{"updated":{"type":"integer"},"unchanged":{"type":"integer"},"failed":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","description":"Position of this row in the request."},"leadId":{"type":["string","null"]},"status":{"type":"string","enum":["updated","unchanged","failed"],"description":"A failed row changed nothing; the other rows still saved."},"changed":{"type":"array","items":{"type":"string"},"description":"The fields that changed."},"error":{"type":"object","properties":{"code":{"type":"string","description":"An error code from the table above, as a whole request would get it."},"message":{"type":"string"}},"required":["code","message"]}},"required":["index","leadId","status"]}}},"required":["updated","unchanged","failed","results"]},"ListRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100}},"required":["name"],"additionalProperties":false},"LeadReference":{"type":"object","description":"Someone already in Salesteam, by leadId (or id), linkedinUrl or email: the first one given counts.","properties":{"leadId":{"type":["string","null"],"maxLength":180},"id":{"type":["string","null"],"maxLength":180,"description":"The same as leadId."},"linkedinUrl":{"type":["string","null"],"maxLength":1000},"email":{"type":["string","null"],"format":"email","maxLength":254}},"additionalProperties":false},"LeadReferences":{"type":"object","properties":{"leads":{"type":"array","minItems":1,"maxItems":1000,"items":{"$ref":"#/components/schemas/LeadReference"}}},"required":["leads"],"additionalProperties":false},"MemberResult":{"type":"object","properties":{"index":{"type":"integer"},"leadId":{"type":["string","null"]},"status":{"type":"string","enum":["removed","moved","copied","skipped"]},"reason":{"type":"string","enum":["not_in_list","not_found","ambiguous_email","duplicate_in_request","invalid_request"]},"message":{"type":"string"},"note":{"type":"string","description":"Set when the person is still in a campaign that uses the list: taking them off the list doesn’t stop it."}},"required":["index","leadId","status"]},"RemoveLeadsResult":{"type":"object","properties":{"list":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"removed":{"type":"integer"},"skipped":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/MemberResult"}}},"required":["list","removed","skipped","results"]},"MoveLeadsRequest":{"type":"object","description":"Send `leads` (up to 1,000), or `all: true` for everyone in the list.","properties":{"toListId":{"type":"string","description":"The list they go to."},"leads":{"type":["array","null"],"minItems":1,"maxItems":1000,"items":{"$ref":"#/components/schemas/LeadReference"}},"all":{"type":["boolean","null"],"enum":[true,null],"description":"true: everyone in the list."}},"required":["toListId"],"additionalProperties":false},"MoveLeadsResult":{"type":"object","properties":{"from":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"to":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"moved":{"type":"integer","description":"Move: how many left this list for the other."},"copied":{"type":"integer","description":"Copy: how many are in both lists now."},"alreadyInList":{"type":"integer","description":"Of those, how many were in the other list already."},"skipped":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/MemberResult"},"description":"One per lead sent; left out for all: true."}},"required":["from","to","alreadyInList","skipped"]},"CampaignChange":{"allOf":[{"$ref":"#/components/schemas/Campaign"},{"type":"object","properties":{"changed":{"type":"boolean","description":"false when it was already paused (or running), so repeating a call is safe."}},"required":["changed"]}]},"Deleted":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean","const":true}},"required":["id","deleted"]},"Account":{"type":"object","properties":{"id":{"type":"string","description":"The account’s ID (accountId in GET /stats)."},"name":{"type":"string"},"headline":{"type":"string"},"status":{"type":"string","enum":["connected","paused","disconnected"]},"state":{"type":"object","description":"What the account is doing now, as Salesteam’s LinkedIn accounts page says it.","properties":{"key":{"type":"string","enum":["sending","waiting","idle","limit","paused","disconnected"]},"label":{"type":"string","description":"Sending, Waiting, Not sending, Limit reached, Paused or Disconnected."},"detail":{"type":"string","description":"One line, like “3 of 25 invites today” or “Reconnect to resume”."},"needsAttention":{"type":"boolean","description":"Something only you can fix: a reconnect, or a pause to review."}},"required":["key","label","detail","needsAttention"]},"activeCampaigns":{"type":"integer"},"limits":{"type":"object","properties":{"connectionRequestsToday":{"type":"integer","description":"Today’s allowance: lower than the daily limit while a newly connected account starts slow."},"connectionRequestsPerDay":{"type":"integer"},"connectionRequestsPerWeek":{"type":"integer"},"messagesPerDay":{"type":"integer"},"inmailsPerDay":{"type":"integer"},"profileViewsPerDay":{"type":"integer"},"likesPerDay":{"type":"integer"},"followsPerDay":{"type":"integer"}},"required":["connectionRequestsToday","connectionRequestsPerDay","connectionRequestsPerWeek","messagesPerDay","inmailsPerDay","profileViewsPerDay","likesPerDay","followsPerDay"]},"today":{"type":"object","description":"Sent today, in the account’s time zone.","properties":{"connectionRequests":{"type":"integer"},"messages":{"type":"integer"},"inmails":{"type":"integer"},"profileViews":{"type":"integer"},"likes":{"type":"integer"},"follows":{"type":"integer"}},"required":["connectionRequests","messages","inmails","profileViews","likes","follows"]},"connectionRequestsThisWeek":{"type":"integer"},"workingHours":{"type":"object","properties":{"timezone":{"type":"string"},"start":{"type":"integer","description":"Hour, 0–23."},"end":{"type":"integer"},"weekdays":{"type":"array","items":{"type":"integer"},"description":"0 is Sunday."}},"required":["timezone","start","end","weekdays"]},"connectedAt":{"type":"string","format":"date-time"},"disconnectedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","name","headline","status","state","activeCampaigns","limits","today","connectionRequestsThisWeek","workingHours","connectedAt","disconnectedAt"]},"Stats":{"type":"object","description":"The Analytics page’s numbers for the range, campaign and account asked for.","properties":{"from":{"type":["string","null"],"format":"date-time"},"to":{"type":["string","null"],"format":"date-time","description":"The end, not included."},"campaignId":{"type":["string","null"]},"accountId":{"type":["string","null"]},"connectionRequestsSent":{"type":"integer"},"accepted":{"type":"integer"},"acceptanceRate":{"type":["integer","null"],"description":"Accepted out of people sent a request, in percent. Null when there’s nothing to divide by."},"messagesSent":{"type":"integer","description":"Messages and InMails."},"contacted":{"type":"integer","description":"People sent a request, a message or an InMail."},"replies":{"type":"integer","description":"People who replied."},"replyRate":{"type":["integer","null"],"description":"Replied out of contacted, in percent. Null when there’s nothing to divide by."},"interested":{"type":"integer","description":"People who replied and are Interested now (tagged by you or by AI reply tags, or with a later outcome)."},"interestedRate":{"type":["integer","null"],"description":"Interested out of replied, in percent. Null when there’s nothing to divide by."},"meetingsBooked":{"type":"integer"},"meetingsAttended":{"type":"integer"},"incompleteHistory":{"type":"boolean","description":"Some older sends in the range can’t be dated exactly, so message counts may be a little low."}},"required":["from","to","campaignId","accountId","connectionRequestsSent","accepted","acceptanceRate","messagesSent","contacted","replies","replyRate","interested","interestedRate","meetingsBooked","meetingsAttended","incompleteHistory"]},"LeadStage":{"type":"string","description":"Where the person is, as the Leads table’s Stage column says it: Blacklisted or Do not contact (suppressed) first, then an outcome you recorded (interested, qualified, booked, attended, won, no_show, lost), then Interested or Not interested from tags and AI reply tags, else the automatic status (new, queued, contacted, connected, replied).","enum":["new","queued","contacted","connected","replied","interested","qualified","booked","attended","won","not_interested","no_show","lost","suppressed","blacklisted"]}}},"x-error-codes":[{"code":"invalid_request","status":400,"meaning":"A field is missing or wrong. The message says which."},{"code":"invalid_json","status":400,"meaning":"The body isn’t valid JSON."},{"code":"duplicate_in_request","status":400,"meaning":"In a bulk request: a row names a lead an earlier row already named. Send each lead once."},{"code":"unauthorized","status":401,"meaning":"No key, an unknown key, or a revoked one."},{"code":"forbidden","status":403,"meaning":"This key can’t do that in this workspace."},{"code":"read_only_key","status":403,"meaning":"This key is read-only: it can read everything and change nothing. Use a Full access key to make changes."},{"code":"billing_hold","status":402,"meaning":"The workspace’s plan isn’t paid, so it’s read-only: adding leads and resuming campaigns wait for a plan. Reading and tidying still work."},{"code":"not_found","status":404,"meaning":"The campaign, list, lead or path isn’t in this workspace."},{"code":"not_in_campaign","status":404,"meaning":"The person isn’t in that campaign."},{"code":"method_not_allowed","status":405,"meaning":"The path exists, but not with this method."},{"code":"conflict","status":409,"meaning":"The change doesn’t fit the current state, like resuming someone who isn’t paused."},{"code":"idempotency_in_progress","status":409,"meaning":"A request with this Idempotency-Key is still running. Try again after Retry-After seconds."},{"code":"workspace_busy","status":409,"meaning":"A scheduled action is finishing. Try again after Retry-After seconds."},{"code":"campaign_finished","status":409,"meaning":"The campaign has finished; add people to another one."},{"code":"campaign_without_list","status":409,"meaning":"The campaign has no lead list yet."},{"code":"tag_limit","status":409,"meaning":"The workspace already has 100 tags."},{"code":"lead_has_history","status":409,"meaning":"The lead can’t be deleted: you’ve already been in touch with them or marked them Do not contact. Stop them in their campaign instead."},{"code":"campaign_not_launched","status":409,"meaning":"The campaign is a draft. Launch it in Salesteam first; a draft never goes live through the API."},{"code":"campaign_cannot_resume","status":409,"meaning":"The campaign can’t run right now. The message says why: an account to reconnect, live sending off, or nobody left who can join."},{"code":"ambiguous_email","status":409,"meaning":"Several people in the workspace have this email. Send their linkedinUrl instead."},{"code":"too_large","status":413,"meaning":"The body is larger than 1 MB."},{"code":"idempotency_key_reused","status":422,"meaning":"This Idempotency-Key was already used for a different request."},{"code":"unsupported_media_type","status":415,"meaning":"Send the body as JSON."},{"code":"rate_limited","status":429,"meaning":"More than 300 requests this minute. Try again after Retry-After seconds."},{"code":"server_error","status":500,"meaning":"Something went wrong at Salesteam. Try again in a minute."},{"code":"error","status":503,"meaning":"A service Salesteam relies on didn’t answer. Try again in a minute."}]}