deactivateduser
05/06/2026, 10:46 AMDasha
05/14/2026, 4:53 PMlinkedin_account_alerts
Hey everyone! π
We've shipped a new webhook event that lets you stay on top of LinkedIn account health in real time. Instead of finding out after a sequence stalls, you'll get notified the moment something needs attention.
What you'll be alerted about:
β’ π Sales Navigator disconnected - reconnect needed to keep InMail steps running
β’ π¬ InMail credits depleted - the account can't send InMails until credits renew
β’ π Weekly connection request limit reached - sending resumes after LinkedIn resets the quota
Why this matters:
Build automations that auto-pause sequences, ping the account owner in Slack, open a ticket, or trigger any custom recovery flow, no more silent failures.
Example payloads:
Sales Navigator disconnected
{
"event": {
"date": "2026-05-13T10:45:46.3926107Z",
"id": "22ff637a-fd81-40ba-b597-0c8f26189dca",
"type": "linkedin_account_alerts",
"user_id": 12345,
"team_id": 67890,
"subscription_id": 492
},
"workspace_id": 67890,
"workspace_name": "Default Team",
"linkedin_owner_name": "Jane D.",
"linkedin_owner_email": "<mailto:jane.d@example.com|jane.d@example.com>",
"linkedin_id": 262,
"linkedin_name": "Jane Doe",
"linkedin_account_alert": "Sales Navigator is disconnected. Please reconnect your LinkedIn account to continue sending InMail steps.",
"sequence_fields": {}
}
InMail credits depleted
{
"event": {
"date": "2026-05-13T10:47:16.6543506Z",
"id": "7227258a-8624-410a-bf6c-bd5197810d66",
"type": "linkedin_account_alerts",
"user_id": 12345,
"team_id": 67890,
"subscription_id": 492
},
"workspace_id": 67890,
"workspace_name": "Default Team",
"linkedin_owner_name": "Jane D.",
"linkedin_owner_email": "<mailto:jane.d@example.com|jane.d@example.com>",
"linkedin_id": 262,
"linkedin_name": "Jane Doe",
"linkedin_account_alert": "InMail credits are used up β this account can't send InMails until credits renew.",
"sequence_fields": {}
}
Weekly connection limit reached
{
"event": {
"date": "2026-05-13T10:47:27.4486303Z",
"id": "654258f1-a426-4d3c-96a2-b3da5f78af29",
"type": "linkedin_account_alerts",
"user_id": 12345,
"team_id": 67890,
"subscription_id": 492
},
"workspace_id": 67890,
"workspace_name": "Default Team",
"linkedin_owner_name": "Jane D.",
"linkedin_owner_email": "<mailto:jane.d@example.com|jane.d@example.com>",
"linkedin_id": 262,
"linkedin_name": "Jane Doe",
"linkedin_account_alert": "Weekly connection request limit reached. Sending new connection requests will resume after LinkedIn resets the quota.",
"sequence_fields": {}
}
π Full docs: https://docs.reply.io/webhook-event-payloads#linkedin_account_alerts
Would love to hear what you build with it, drop a comment or share your workflow! πDasha
05/18/2026, 12:37 PMDasha
05/27/2026, 3:18 PMDasha
06/08/2026, 5:41 PMtotalCount removed from Contacts endpoints
AffectsΒ·GET /v3/contactsPOST /v3/contacts/filter
Response now returns only2οΈβ£ Sequence Preview feedback path moved β now under the+items. If you readhasMore, switch to cursor-style pagination usingtotalCount.hasMore
ai-sdr segment:
3οΈβ£ Tag renames/v3/sequences/ai-sdr/{id}/contacts/{id}/preview/steps/{step_id}/feedback
ββββββββββββββββββββββββββββββ β¨ AI SDR Sequences β now fully covered All 14 endpoints are live underβAI SDR Live DataΒ·Live DataβAI SDR Contact EnrichmentΒ·Contact EnrichmentβJasonAi creditsReply credits
/v3/sequences/ai-sdr/{id} (Create = base path, no {id}):
Action Method Path
Create sequence POST (base)
Get settings GET /settings
Update settings PATCH /settings
Enable autopilot POST /autopilot/enable
Disable autopilot POST /autopilot/disable
Force-start autopilot POST /autopilot/force-start
Set approval mode PUT /approval-mode
Set generated step types PUT /generated-step-types
Get/Set/Remove playbook GET/PUT/DELETE /playbook
Get/Set/Remove knowledge base GET/PUT/DELETE /knowledge-base
Heads up on force-start errors:β¨ More new endpoints β’ Intent Signals (typeahead) β(limit reached) Β·409 autopilotDisabledByContactsLimit(no contacts) Β·409 autopilotDisabledByLackOfContactson playbook/KB DELETE when nothing's attached.404
GET /v3/ai-sdr/intent-signals/industries Β· β¦/technologies
β οΈ These return Sales Navigator strings β different from Live Data filter-value industries (Reply taxonomy), so don't mix them up.
β’ Live Data Filter Values are live (finally off "coming soon" π) β 5 typeahead endpoints under `/v3/live-data/filter-values`: industries Β· departments Β· seniorities Β· locations Β· job-titles
ββββββββββββββββββββββββββββββ
π§ Smaller improvements
β’ Inbox β filter by owner via new `ownerUserId`: POST /v3/inbox/threads/filter (body, integer nullable) and GET /v3/inbox/threads/categories (query param, integer). Target user must be on your team, else 400.
β’ Rate limiting β all 429 responses now include a Retry-After header (integer, seconds) so you can back off cleanly.
β’ Sidebar reordered to strict AβZ, parent-first grouping.
β’ Auth guide rewritten β now covers Master API key + Organization API key (with impersonation details).
ββββββββββββββββββββββββββββββ
π Full docs: https://docs.reply.io/api-reference
Questions or hit a snag migrating? Drop them in the thread π§΅Dasha
06/15/2026, 5:12 PMAI voice LinkedIn message - playback speed removed
Before: body accepted textToSpeechSettings with a speed multiplier.
After: textToSpeechSettings / speed removed; only text is accepted.
Action required: remove textToSpeechSettings from your request body - it has no effect.π Full docs: https://docs.reply.io/api-reference
Dasha
06/30/2026, 3:45 PMTL;DR: Mostly AI SDR + Live Data roadmap β search, autopilot-preview, and per-contact personalization endpoints are now fully documented ahead of their mid-June 2026 launch (still Coming Soon, not callable yet). The one live change is cosmetic: direct-outreach sends moved into their own Direct Outreach section.π’ Now Live Direct Outreach β sends get their own section. The 6 direct-send endpoints (already beta) moved out of Contacts into a new Direct Outreach group. Paths, methods, and behavior are unchanged β docs grouping only, no action needed. π Coming Soon (not callable yet) Live Data β Search API β’ Preview a search β
POST /v3/live-data/searches/preview β 202 {jobId} (no prospects, no credits)
β’ Start a search β POST /v3/live-data/searches β 200 {searchId} (note: 200, not 202; consumes credits)
β’ List searches β GET /v3/live-data/searches (default top 100)
β’ Get a search β GET /v3/live-data/searches/{id}
New 422 liveDataSearch.noMatchingContacts. Status enum: inProgress / finished / noMoreContacts / manuallyPaused / pausedDueToInsufficientCredits.
AI SDR β Autopilot preview
β’ POST /v3/sequences/ai-sdr/{sequence_id}/autopilot/preview β 202 {jobId}, poll GET /v3/background-jobs/{id} for {contactsCount, companiesCount, sampleContacts}. Try-before-save: filter config doesn't need saving first.
AI SDR β Sequence preview & personalization
β’ Get preview β GET /v3/sequences/{sequence_id}/contacts/{contact_id}/preview (generic, not AI-SDR-only)
β’ Reset preview β POST .../preview/reset
β’ Personalize β POST /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/preview/personalize β 202 {jobId}, progress personalizedSteps/totalSteps
Early adopters: personalization endpoint renamed fromπ§ Housekeeping β’ New Direct Outreach tag (after Custom Fields) β’ Live Data list + AI SDR Approvals listto `.../preview/personalize`; bulk stub removed. Never shipped, so no live impact..../personalization/start
top default corrected 25 β 100
β’ Live Data search status enum casing fixed to camelCase
β’ totalSteps documented in the personalization job result
π Full docs: docs.reply.io/api-referenceDasha
07/08/2026, 3:51 PMDasha
07/17/2026, 11:17 AMTL;DR: Sequence sorting & date filters,π’ Now Live β’ Workspace βon contact accounts, new team-users endpoint. Counts, unarchive, CSV export & email stats documented ahead of July releases.emailProvider
GET /v3/whoami/team-users lists all users in your team: teamId, teamName, userId, userName, userEmail
β’ Sequences β GET /v3/sequences gains sortBy (`created`/`name`/`status`), sortDirection (`asc`/`desc`, requires sortBy), createdAfter (ISO-8601); invalid sort β 400 sequence.invalidSort
β’ Contact Accounts β single-account responses add read-only emailProvider, resolved from the domain's MX records (gSuite, office, gmail, β¦); null when undetermined
β’ AI SDR Reply Handlers (beta) β new deliveryMode (`draft`/`auto`/`stopAndNotify`) + `additionalNotificationEmail`; stopAndNotify is feature-gated β 403 knowledgeBase.stopAndNotifyNotEnabled
π Coming Soon
late July 2026:
β’ Counts (return {"count": N}): POST /v3/contacts/filter/count β’ GET /v3/sequences/count β’ GET /v3/sequences/{id}/contacts/count
β’ Unarchive: POST /v3/sequences/{id}/unarchive β’ POST /v3/sequences/unarchive (bulk, 1β100 ids, non-atomic)
β’ Email account stats: GET /v3/email-accounts/{id}/stats β’ POST /v3/email-accounts/stats (emailsSentToday, totalEmailsSent, dailySendingLimit)
mid-July 2026:
β’ GET /v3/holiday-calendars/{id}/export-csv β CSV download, filename = calendar name
πdocs.reply.io/api-reference/introductionDasha
07/27/2026, 3:27 PMcontact_replied webhook, email_replied now fires on every email reply (was first-reply-only), richer sequence_fields on all sequence webhooks β and one breaking change: email_replied dropped its reason field. All webhook changes are v3 only β v2 is untouched.
π’ Now Live
Contacts β inbox threads on a contact's timeline (Beta)
β’ GET /v3/contacts/{id}/inbox-threads β email/LinkedIn threads for a contact; paged top (default 25, max 1000) / `skip`; scope contacts:read. New Contact Inbox Thread schema.
Inbox β reply to a specific message
β’ messageId (string, nullable) now returned on email & LinkedIn messages.
β’ replyToMessageId (string, nullable) on the email send request β omit to reply to the last message in the thread.
Webhooks β email_replied now fires on every reply
β’ Previously it fired only on the first reply from a contact, so any replies after that weren't tracked. Now you get an event for every new email reply.
Webhooks β new contact_replied event
β’ Channel-agnostic status signal β fires whenever a contact's status changes to "Replied", regardless of how (email, LinkedIn, SMS, or manual/API mark). `reason`: EmailDetected / LinkedInDetected / SmsDetected / StatusSetManually.
β’ Payload: reply_date, reply_message_id, reason, contact_fields, contact_custom_fields, sequence_fields. Correlate to per-channel webhooks via reply_message_id.
Webhooks β richer sequence_fields
β’ Now consistently carries id + name + step_number across sequence events (was id-only or `id`+`step_number` on some).
β’ linkedin_reply_categorized now carries sequence_fields + opt-in linkedin_message (needs includeLinkedInMessageText).
Auth β stable error codes for Organization API keys
β’ Rejected impersonation β application/problem+json with a `code`: 403 USER_REQUIRED, 401 USER_NOT_FOUND, 403 TEAM_NOT_ACCESSIBLE.
Breaking Changes
email_replied β reason removed; scope narrowed
Before: fired only on the first detected reply or when contact status was set to "Replied"; payload had reason (`EmailDetected`/`StatusSetManually`).
After: no `reason`; fires on every detected email reply β and only on detected replies. Manual "Replied" marks now flow through contact_replied.
Action: stop reading `reason`; expect multiple events per contact; to catch manual marks subscribe to contact_replied (reason: StatusSetManually).
Note: these webhook changes apply to v3 webhooks only β v2 behavior is unchanged.
π Full docs: docs.reply.io/api-referenceDasha
08/11/2026, 1:16 PMTL;DR: The AI SDR API surface is now live in Beta β 39 endpoints across AI SDR sequences, pending approvals, Live Data, sequence preview, offer generation, intent signals, the Strategist, and Inbox AI drafts moved from "coming soon" to Beta. No breaking changes.π’ Now Live (Beta) AI SDR Sequences β full lifecycle via API β’
POST /v3/sequences/ai-sdr β create an AI SDR sequence
β’ `GET`/`PATCH /v3/sequences/ai-sdr/{sequence_id}/settings` β read / update AI settings
β’ POST β¦/autopilot/enable Β· β¦/disable Β· β¦/force-start Β· β¦/preview
β’ PUT β¦/approval-mode Β· PUT β¦/generated-step-types
β’ `GET`/`PUT`/`DELETE β¦/playbook` and β¦/knowledge-base
AI SDR Pending Approvals
β’ GET /v3/ai-sdr/approvals β list pending approvals
β’ POST /v3/ai-sdr/approvals/send-bulk β send up to 20 at once
β’ `GET`/`DELETE /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/approval` β inspect / reject
β’ POST β¦/approval/send Β· POST β¦/approval/regenerate
Live Data
β’ POST /v3/live-data/searches/preview β free preview (async job)
β’ `POST`/`GET /v3/live-data/searches` β start / list searches
β’ GET /v3/live-data/searches/{id} Β· GET /v3/live-data/filter-values/β¦ (typeaheads)
Sequence Preview & AI Personalization
β’ GET /v3/sequences/{sequence_id}/contacts/{contact_id}/preview Β· POST β¦/preview/reset
β’ POST /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/preview/personalize
More now in Beta: offer generation (POST /v3/ai-sdr/offers/generate + attachments), Strategist (POST /v3/ai-sdr/strategist/start), intent-signal typeaheads, Inbox AI drafts (POST /v3/inbox/threads/{id}/ai-draft/generate)
π Coming Soon
β’ Mid August 2026: duplicate offer / duplicate playbook, holiday-calendar CSV export
β’ Late August 2026: AI Insights, AI Web Search, Contact Enrichment (5 endpoints), count endpoints (contacts/sequences), sequence unarchive, email-account stats, AI feedback endpoints
π Docs: restructured into API Reference / MCP / Skills / CLI tabs, new MCP + CLI (reply-cli v0.3.0) + Skills + agent-guide sections, 8 task guides, and a new Slack developer community.
π Full documentationDasha
08/27/2026, 12:01 PMThree small additions and one correction. If you create schedules through the API, read the last part.π’ Now Live Inbox β reply to a different address.
POST /v3/inbox/threads/{id}/messages takes an optional to (string, format: email, nullable), for when a colleague or a shared inbox answered instead of the contact. Omit it and nothing changes. Note: setting it switches off link and open tracking for that message.
Settings β tracking and plain text. GET / PATCH /v3/settings now expose isLinksTrackingEnabled and isSendingPlainTextEnabled (both boolean, nullable) in the emails section. They don't mix β plain text can't be enabled while open or link tracking is on:
400 settings.invalidOperation
Cannot enable plain text mode together with open or click tracking
LinkedIn β delay between actions. PUT /v3/linkedin-accounts/{id}/limits takes actionDelayMinSeconds (>= 30, default 60) and actionDelayMaxSeconds (<= 86400`, default 120, with max - min>= 60`). Reply picks a random delay in [min, max] before each action.
β οΈ That PUT replaces the whole limits object β omit the two fields and you get the 60β120s defaults, which changes pacing even if your code doesn't change.
β οΈ Schedules β timezoneId never took IANA identifiers
Our docs said IANA ("America/New_York"). The API takes Windows identifiers and rejects IANA. Nothing changed in the API β the documentation was wrong, and anyone who trusted it has been getting rejections.
Map before calling POST /v3/schedules or `PUT /v3/schedules/{id}`:
"America/New_York" β "Eastern Standard Time", "Europe/London" β "GMT Standard Time".
π Also: 276 endpoint descriptions across 30 areas were rewritten. No contract changes, but they now spell out behavior that was always true β notably on PATCH /v3/settings, where an explicit null clears a text field but is ignored on booleans and numbers, and calls.resolutions replaces the whole list, so a custom resolution you omit is deleted.
π Full documentationDasha
09/17/2026, 12:18 PMSix AI Prompts endpoints, holiday-calendar CSV export and the AI SDR duplicate operations came out of Coming soon. Contact import gains aπ’ Now Live AI Prompts β all six operations out of Coming soon: β’dedup key, sequence contacts can be repointed at a different sending mailbox, and Mailbox Procurement is documented ahead of a late-September release.contactId
GET /v3/ai-prompts β List AI prompts
β’ POST /v3/ai-prompts β Create a personal AI prompt
β’ PUT /v3/ai-prompts/{id} β Update a personal AI prompt
β’ DELETE /v3/ai-prompts/{id} β Delete a personal AI prompt
β’ POST /v3/ai-prompts/preview/sample β Preview a comment prompt against a sample post
β’ POST /v3/ai-prompts/preview/linkedin-post β Preview a comment prompt against a LinkedIn post
Scopes unchanged: sequences:read to list, sequences:write to create/update/delete, sequences:operate for both previews.
Sequence Contacts β repoint contacts at a different sending mailbox:
β’ POST /v3/sequences/{id}/contacts/set-email-account (sequences:operate)
Body takes contactIds (1β100, positive, no duplicates) and emailAccountId. The mailbox must already be linked to the sequence β link it with POST /v3/sequences/{id}/email-account-links first, otherwise you get 400 sequenceContact.invalidInput. The 200 is non-atomic: assigned lists the ids now sending from that mailbox (including ones already on it, so repeating the call is safe), notProcessed maps the rest to a reason (notInSequence, unknown). Owner-only (403); archived sequence β 409 sequenceContact.sequenceArchived.
Also out of Coming soon:
β’ GET /v3/holiday-calendars/{id}/export-csv β Export a holiday calendar as CSV
β’ POST /v3/ai-sdr/offers/{id}/duplicate β Duplicate an offer
β’ POST /v3/ai-sdr/playbooks/{id}/duplicate β Duplicate a playbook
Contact import β match existing contacts by Reply contact id
POST /v3/contacts/import accepts options.keys.contactId (boolean, default false) and a contactId on each item (integer, nullable). Two rules worth noting: the key is not additive β when enabled it decides the match on its own and the other keys are not consulted; and every item must then carry a contactId, where an id that doesn't resolve inside your team is imported as a new contact rather than failing. Available only to teams it has been enabled for β otherwise 403 contact.forbidden with Matching contacts by contactId is not enabled for your team.
π Coming Soon
Mailbox Procurement β buy domains and mailboxes through the API (targeted: late September 2026, not callable yet):
β’ GET /v3/email-accounts/procurement/domains/available (channels:read)
β’ POST /v3/email-accounts/procurement/domains/estimate (channels:read)
β’ POST /v3/email-accounts/procurement/domains/purchase (channels:write)
β’ POST /v3/email-accounts/procurement/users (channels:write)
What to expect: every monetary amount is in cents (1299 = $12.99). Domain search takes one label (up to 63 chars, letters/digits/hyphens, no leading or trailing hyphen) against up to 5 TLDs from com, net, org, biz, live. Orders specify serviceProvider of google or microsoft and 1β5 mailboxes, with unique usernames and exactly one isAdmin: true. Purchase is async β 202 + jobId, poll GET /v3/background-jobs/{jobId}. Registration is a precondition: every other procurement endpoint returns 403 until POST /v3/email-accounts/procurement/users succeeds.
Contacts β bulk opt-out (targeted: late September 2026):
β’ POST /v3/contacts/set-opted-out (contacts:operate) β contactIds (1β100, no duplicates) + isOptedOut. Opting out finishes the contacts in every sequence they're in; the contact_opted_out webhook fires once per enrolled sequence, and not at all for a contact in no sequence. The 200 lists only per-item failures (notFound, invalidInput); {} means all succeeded.
β οΈ Breaking Changes
1. steps is now required when creating a sequence
Before:required onlyPOST /v3/sequences.name
After:is required withstepsβ a sequence with no steps has nothing to send and cannot be started.minItems: 1
Action required: if you create an empty sequence and add steps in a follow-up call, move at least one step into the create request body.2. Inbox category pages moved
Before:and six sibling pages./api-reference/inbox/list-inbox-categories
After: thetag split into Inbox (Threads, 13 ops) and Inbox Categories (7 ops); category pages now live atInbox./api-reference/inbox-categories/β¦
Action required: documentation links only β no endpoint, request or response changed. Redirects are in place, so existing links still resolve.Housekeeping β’ The per-endpoint Beta banner is replaced by a New banner across 57 operations, meaning "recently shipped" with an invitation to give feedback β never a breaking-change warning. The API-wide Beta signal now appears once, as a pill beside the version. β’ The API reference is regrouped into 12 top-level sections, including the new Mailbox Procurement. β’ New schema pages: Available Domain, Estimate Seats. β’ The spec now declares
openapi: 3.2.0 (was 3.1.0) to use hierarchical tags.
π Full documentationAndrii Samokysh
10/23/2026, 6:53 AMemail_to, email_cc, email_bcc (arrays of addresses from the message headers). Empty headers are omitted, so email_bcc is absent in practice. Not gated by includeEmailUrl / includeEmailText.
β’ `POST /v3/sequences`: every settings field is now optional and nullable; an omitted field takes its documented default (e.g. daysToFinishProspect 5, emailSendingDelaySeconds 60, dailyThrottling 100, disableOpensTracking true, repliesHandlingType markAsFinished, generatedTaskOwner `sequence`; emailsCountPerDay = your workspace default).
β’ `POST /v3/contacts/import`: options.keys.contactId (boolean, default false) + contactId per item. The key is not additive, every item must then carry a contactId, and an id that doesnβt resolve inside your team imports a new contact.
β’ Inbox: new message status code linkedInInvalidUrl (LinkedIn profile URL missing/invalid or contact deleted; resending fails until the URL is fixed).
β’ AI SDR: unknown personalization variables now return a descriptive 400 β offer.invalidParameter (create/patch), playbook.invalidParameter (create/patch), salesAgentSequence.invalidParameter (settings patch). Example: Text contains unknown variables. Unknown variables: {{Your_Company}}. Fields: callToActions.
October 8
β’ Billing: GET /v3/billing (billing:read) is out of Coming soon.
β’ LinkedIn Accounts: PUT / DELETE /v3/linkedin-accounts/{id}/voice (channels:write) are out of Coming soon. Unlinking falls back to the teamβs default voice.
β’ Accounts β custom field values: customFields[] on account responses, create and update (by id or name, value β€ 4000). PUT writes only the values you send; bad value β 400 contactAccount.invalidInput, feature off β `403 contactAccount.featureDisabled`; on bulk create only the failing item fails (error 3 / 6).
β’ Custom Fields: new entityType (contact / account) on the model, create (default contact), update (must match) and GET /v3/custom-fields?entityType=.
β’ Contacts: stage (name, nullable) on read, PATCH and import. null is the only value that clears a stage; unknown/blank name β 400 listing available names.
β’ `GET /v3/whoami/team-users`: new isOwner, teamRole, organizationRole.
β’ Sequences: GET /v3/sequences/{id}/steps is ordered by position (empty array when none, 404 sequenceStep.notFound); POST /v3/sequences documents sequence.invalidStep / sequence.emptySubject.
β’ Reporting / sequence stats: plain-date to covers the whole day, UTC-timestamp to is an exclusive bound, times are read in the userβs time zone (the Z suffix does not shift them).
β’ Rate limits: weekly quota documented β 100/min, 3,000/h, 150,000/week per user. Prompt Actions: up to 6 outputs (was 5).
π Coming Soon
AI SDR Sequence Structures (targeted: late October 2026)
β’ GET /v3/ai-sdr/sequence-structures, GET /v3/ai-sdr/sequence-structures/{id} (ai-sdr:read)
β’ GET / PUT /v3/sequences/ai-sdr/{sequence_id}/structure, POST /v3/sequences/ai-sdr/{sequence_id}/structure/save-as (ai-sdr:write for PUT / save-as)
Ids are g-{number} (library) or c-{number} (user-saved). PUT replaces the sequenceβs steps and returns 409 sequenceStructure.changeBlocked once messages were sent. POST /v3/sequences/ai-sdr takes an optional `structureId`; 502 salesAgentSequence.structureNotSuggested means the sequence was created without steps (id in detail).
Teams (targeted: early November 2026)
Notes API (late October 2026): GET /v3/contacts/{id}/notes, GET /v3/contacts/{id}/notes/{note_id}, GET / POST /v3/contact-accounts/{id}/notes, GET /v3/contact-accounts/{id}/notes/{note_id}.
AI SDR playbooks (late October 2026): playbook draft endpoints under /v3/sequences/ai-sdr/{sequence_id}/playbook-draft (generate, regenerate, example-files, save), POST /v3/ai-sdr/playbooks/{id}/regenerate, GET /v3/ai-sdr/playbooks/{id}/sequences. Drafts are deleted after 1 hour of inactivity.
Mailbox Procurement (late October 2026 β moved from late September): new GET /v3/email-accounts/procurement/domains, POST .../domains/{domainId}/mailboxes/estimate, POST .../domains/{domainId}/mailboxes/purchase, GET .../procurement/geo/states.
Rate limits (mid October 2026): GET /v3/rate-limits β your usage per limit and window.
β οΈ Breaking Changes
1. Unknown or malformed template variables are rejected with 400 (Oct 8)
> Before: variable names were documented as case-sensitive; no rejection of unknown names was documented.
> After: email template create/update, POST /v3/sequences and step/variant create/update/bulk (email and SMS steps) return 400, e.g. Unknown variable {{firstName}}. Did you mean {{FirstName}}? β¦. LinkedIn, WhatsApp, call and task steps are not checked.
> Action required: check variable names against GET /v3/email-templates/variables and use the exact casing.
2. AI SDR sequence steps now come from sequence structures (Oct 22, with the late-October structures release)
> Before: POST /v3/sequences/ai-sdr required `sequenceStructureSetup`; PUT /v3/sequences/ai-sdr/{sequence_id}/generated-step-types set the channels; settings returned generatedStepTypes.
> After: sequenceStructureSetup is removed and structureId is optional; PUT .../generated-step-types and generatedStepTypes are removed.
> Action required: stop sending sequenceStructureSetup (send structureId or nothing), move to PUT .../structure, stop reading generatedStepTypes.
Housekeeping
β’ LinkedIn account limits: limitsMode is documented as fixed / ranged (the casing GET returns).
β’ New schema pages (Sequence structure, Contact Note, Playbook draft, Rate Limits and more); new sidebar groups for Sequence Structures, Teams, Purchased domains, Mailboxes on existing domains and Rate Limits.
β’ Authentication guide: new teams scope row; MCP pages updated for the weekly limit and Retry-After on 429.
π Full documentationAndrii Samokysh
10/23/2026, 1:38 PMPOST /v3/teams/{team_id}/users/bulk adds up to 50 users per call, each with a role of that team