Email Volume 1,000 active contacts
$59/mo
billed monthly
$49/mo
billed annually
1,000 active contacts/mo per user, unlimited mailboxes (fair use), 50 live-data credits/mo, up to 200 website-visitor reveals/mo
Plan details
next tier
Multichannel sales-engagement platform (email, LinkedIn, calls, SMS, WhatsApp) with an AI SDR ('Jason'), a scoped v3 REST API, an official 70-tool MCP server, a CLI and agent skill packs. Best for multichannel sequences driven from one API.
The actions you pay for, as Reply.io prices them.
| Action | Cost | Per |
|---|---|---|
| LinkedIn account add-on (Email Volume, Agency) | $69 | per LinkedIn account per month |
| Calls & SMS add-on (Email Volume, Agency) | $29 | per month; plan cards say per account, comparison table says per user |
| AI & Live Data credits | $39 / $69 / $119 / $219 / $399 / $599 | 200 / 500 / 1,000 / 2,500 / 6,000 / 10,000 credits per month |
| Email validation package | $20 / $75 / $125 / $200 / $600 | 5,000 / 25,000 / 50,000 / 100,000 / 300,000 validations per month |
| AI custom-field enrichment (POST /v3/custom-fields/{id}/enrich, marked Coming soon) | 1 credit | per contact |
| Mailbox bought through Reply (fresh domain) | $5 | per mailbox per month; domain price varies by TLD, per year |
| Pre-warmed domain + mailboxes | $25 domain/year + $15 per mailbox/month | fixed bundle of 3 mailboxes ($70 first checkout) |
| Additional email account seat | $29 | per seat per month, on plans with a fixed mailbox count such as Multichannel |
US dollars, as Reply.io's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.
Free tier 14-day free trial, no credit card required (docs); trial includes API and all integrations (pricing FAQ).
$59/mo
billed monthly
$49/mo
billed annually
1,000 active contacts/mo per user, unlimited mailboxes (fair use), 50 live-data credits/mo, up to 200 website-visitor reveals/mo
next tier
$69/mo
billed monthly
$59/mo
billed annually
2,000 active contacts/mo per user
next tier
$79/mo
billed monthly
$69/mo
billed annually
3,000 active contacts/mo per user
next tier
$99/mo
billed monthly
$89/mo
billed annually
5,000 active contacts/mo per user
next tier
$179/mo
billed monthly
$159/mo
billed annually
10,000 active contacts/mo, unlimited users
next tier
$299/mo
billed monthly
$259/mo
billed annually
25,000 active contacts/mo, unlimited users
next tier
$499/mo
billed monthly
$459/mo
billed annually
50,000 active contacts/mo, unlimited users
next tier
$999/mo
billed monthly
$899/mo
billed annually
100,000 active contacts/mo, unlimited users (200k/300k/500k: contact sales)
contact sales
$99/mo
billed monthly
$89/mo
billed annually
per user ('starts from'); mailboxes: 10 on the annual card, 5 on the monthly card and '5 mailboxes / user' in the comparison table; 1 LinkedIn account + calls/SMS per user included (comparison table); unlimited active contacts (annual card)
$800/mo
billed monthly
$500/mo
billed annually
1,000 active contacts, 2 LinkedIn accounts (2,000 = $1,200/$800 with 5 LI; 3,000 = $1,500/$1,000 with 7 LI); unlimited users
Growth tier
$2,500/mo
billed monthly
$1,500/mo
billed annually
5,000 active contacts, 10 LinkedIn accounts (10,000 = $5,000/$3,000 with 25 LI)
Enterprise tier
Custom quote
25,000 or 50,000 active contacts (25 / 50 LinkedIn accounts); contact us
contact sales
$210/mo
annual billing only
$210/mo
billed annually
multiple client workspaces, unlimited clients & users and mailboxes, LinkedIn $69/account, white-label optional; billed annually ('starts from').
Comparison table says Agency 'Starts from $166'
$500/mo
annual billing only
$500/mo
billed annually
per client per month ('starts from', billed annually); Agency Core plus LinkedIn & email automation and AI agents per client
Per user (all apps, scripts and services acting as that user share it): 100 requests/minute, 3,000/hour, 150,000 per rolling 7 days. /v3/reporting/* and sequence stats endpoints have stricter hourly/weekly limits.
A 429 carries Retry-After (no x-rate-limit-* headers) and an application/problem+json body whose detail names the limit hit (e.g. 'maximum admitted 100 per 1m'); x-rate-limit-* headers on successful responses report the LONGEST period, so a per-minute 429 can arrive while 'remaining' looks healthy. GET /v3/rate-limits returns all counters but is marked 'Coming soon' in the spec. MCP server documents 120/min, 3,000/hour, 150,000/week.
Reply.io uses API key. The steps below follow Reply.io's own docs.
sequences:read scope (or a broader one that includes it). Get the AI prompts available for a sequence step type, in one call with no paging. Mixes Reply's library prompts and yours. Keep the key in an environment variable, never in the command.curl -X GET "https://api.reply.io/v3/ai-prompts" \
-H "Authorization: Bearer $REPLY_API_KEY"| What | Where |
|---|---|
| Documentation | docs.reply.io/getting-started |
| API reference | docs.reply.io/api-reference/introduction |
| OpenAPI spec | docs.reply.io/api-reference/bundled.yaml |
| llms.txt | docs.reply.io/llms.txt |
| Base URL | https://api.reply.io |
| MCP server | https://mcp.reply.io/ |
| SDKs | reply-cli (npm, official, Node 20+, pre-1.0; github.com/reply-team/reply-cli), OpenAPI 3.1 spec + Postman import, Reply agent skill packs (reply skills) |
Other Email sending tools in this directory, each with its own review.
Best for multi-account LinkedIn outreach where you want to rent extra sender profiles natively.
Aimfox API reviewBest for solo sellers or small teams running LinkedIn + email sequences from their own accounts.
Dripify API reviewBest for agencies and teams sending hundreds of thousands of emails a month that want dedicated IPs and no per-seat or per-lead….
EmailBison API reviewFour things to settle first, each read off Reply.io's own pages.
Tell us what you want Reply.io to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.
Read from reply.io/reply-io-pricing.txt, docs.reply.io/api-reference/introduction and docs.reply.io/api-reference/rate-limits. Verified 25 Oct 2026.
| Method | Path | What it does | Cost |
|---|---|---|---|
| GET | /v3/ai-prompts | List AI prompts, Requires the `sequences:read` scope (or a broader one that includes it). Get the AI prompts available for a sequence step type, in one call with no paging. Mixes Reply's library prompts and yours. | Not stated |
| POST | /v3/ai-prompts | Create a personal AI prompt, Requires the `sequences:write` scope (or a broader one that includes it). Save your own AI prompt for a sequence step type so you can reuse it. The name must be unique among your personal prompts. | Not stated |
| PUT | /v3/ai-prompts/{id} | Update a personal AI prompt, Requires the `sequences:write` scope (or a broader one that includes it). Rename one of your personal AI prompts or rewrite its text. Both fields are replaced, so send everything you want to keep. | Not stated |
| DELETE | /v3/ai-prompts/{id} | Delete a personal AI prompt, Requires the `sequences:write` scope (or a broader one that includes it). Delete one of your personal AI prompts. Steps already using it keep their saved text. Library prompts cannot be deleted. | Not stated |
| POST | /v3/ai-prompts/preview/sample | Preview a comment prompt against a sample post, Requires the `sequences:operate` scope (or a broader one that includes it). Try a comment prompt against a generic sample post. Nothing is fetched from LinkedIn and no Reply credits are spent. | free: no Reply credits spent |
| POST | /v3/ai-prompts/preview/linkedin-post | Preview a comment prompt against a LinkedIn post, Requires the `sequences:operate` scope (or a broader one that includes it). Test a comment prompt against a real person's latest LinkedIn post. The response shows which post the comment was written for. | Not stated |
| GET | /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/ai-insights | [Coming soon: docs say available by late November 2026] Get AI insights for a contact, Get the AI SDR insights summary for one contact in one sequence. Returns a single Markdown field, ready to render as-is. | Not stated |
| GET | /v3/ai-sdr/intent-signals/industries | Intent signal industries typeahead, Requires the `ai-sdr:read` scope (or a broader one that includes it). Get the industries you can reference in an AI SDR intent signal. The id is what you send as technologyUsed.industryId. | Not stated |
| GET | /v3/ai-sdr/intent-signals/technologies | Technologies typeahead, Requires the `ai-sdr:read` scope (or a broader one that includes it). Get the technologies you can reference in an AI SDR intent signal. Send the slug in technologyUsed.technologies. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases | List knowledge bases, Requires the `ai-sdr:read` scope (or a broader one that includes it). Browse the knowledge bases you can see, the collections that brief the AI SDR. Paged with top and skip. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases | Create a knowledge base, Requires the `ai-sdr:write` scope (or a broader one that includes it). Create a knowledge base for the AI SDR to write from. Only the name is required; instructions add up to 2000 characters of guidance. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{id} | Get a knowledge base, Requires the `ai-sdr:read` scope (or a broader one that includes it). Get one knowledge base by id: its name, standing instructions, owner, and last update. Its contents have their own endpoints. | Not stated |
| PATCH | /v3/ai-sdr/knowledge-bases/{id} | Update a knowledge base, Requires the `ai-sdr:write` scope (or a broader one that includes it). Rename a knowledge base or change its standing instructions. Send only what you're changing; at least one field is required. | Not stated |
| DELETE | /v3/ai-sdr/knowledge-bases/{id} | Delete a knowledge base, Requires the `ai-sdr:write` scope (or a broader one that includes it). Delete a knowledge base by id so the AI SDR stops writing from it. Returns 204 with no body when it succeeds. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{id}/duplicate | Duplicate a knowledge base, Requires the `ai-sdr:write` scope (or a broader one that includes it). Copy a knowledge base with its documents, links, reply handlers, and reengagement cards, so you can adapt it safely. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/links | List links, Requires the `ai-sdr:read` scope (or a broader one that includes it). List the web pages a knowledge base pulls content from. Paged with top and skip, with an optional search on the URL. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/links | Add a link, Requires the `ai-sdr:write` scope (or a broader one that includes it). Add a web page to a knowledge base so the AI SDR can draw on it. The URL is required and capped at 256 characters. | Not stated |
| DELETE | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/links/{link_id} | Delete a link, Requires the `ai-sdr:write` scope (or a broader one that includes it). Remove a web page from a knowledge base so the AI SDR stops drawing on it. Returns 204 with no body on success. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/documents | List documents, Requires the `ai-sdr:read` scope (or a broader one that includes it). List the files a knowledge base holds for the AI SDR. Paged with top and skip, with an optional search on the file name. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/documents | Upload a document, Requires the `ai-sdr:write` scope (or a broader one that includes it). Upload a file to a knowledge base for the AI SDR to draw on. Send it as multipart/form-data, up to 100 MB per request. | Not stated |
| DELETE | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/documents/{document_id} | Delete a document, Requires the `ai-sdr:write` scope (or a broader one that includes it). Remove a file from a knowledge base so the AI SDR stops drawing on it. Returns 204 with no body when it succeeds. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reply-handlers | List reply handlers, Requires the `ai-sdr:read` scope (or a broader one that includes it). Review the rules that tell the AI SDR how to answer each kind of reply. Paged with the top and skip query parameters. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reply-handlers | Create a reply handler, Requires the `ai-sdr:write` scope (or a broader one that includes it). Tell the AI SDR how to handle one recurring kind of reply. The question type and instructions are required; a sample answer helps. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reply-handlers/{reply_handler_id} | Get a reply handler, Requires the `ai-sdr:read` scope (or a broader one that includes it). Get one reply handler in full: its question type, instructions, sample answer, tone, length, links, media, and delivery mode. | Not stated |
| PATCH | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reply-handlers/{reply_handler_id} | Update a reply handler, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need to adjust how the AI SDR agent answers a kind of reply. Send only the fields you want to change; at least one of typeOfQuestion… | Not stated |
| DELETE | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reply-handlers/{reply_handler_id} | Delete a reply handler, Requires the `ai-sdr:write` scope (or a broader one that includes it). Delete a reply handler so the AI SDR stops applying it to incoming replies. Returns 204 with no body on success. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reply-handlers/{reply_handler_id}/media | Upload reply handler media, Requires the `ai-sdr:write` scope (or a broader one that includes it). Attach an image or file to a reply handler so it goes out with the agent's answers. Multipart/form-data, up to 100 MB. | Not stated |
| DELETE | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reply-handlers/{reply_handler_id}/media/{media_id} | Delete reply handler media, Requires the `ai-sdr:write` scope (or a broader one that includes it). Detach a file from a reply handler so it stops going out with the answers the agent writes. Returns 204 with no body. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards | List reengagement cards, Requires the `ai-sdr:read` scope (or a broader one that includes it). Review the follow-ups a knowledge base sends to contacts who went quiet. Paged with top and skip, filterable by flow. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards | Create a reengagement card, Requires the `ai-sdr:write` scope (or a broader one that includes it). Create a follow-up for contacts who stop replying. Name, instructions, and sendAfter are required, sendAfter is days of silence. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_id} | Get a reengagement card, Requires the `ai-sdr:read` scope (or a broader one that includes it). Get one reengagement card in full: instructions, sample answer, the sendAfter delay, tone, length, links, and media. | Not stated |
| PATCH | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_id} | Update a reengagement card, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need to adjust a reengagement card, retime it, reword its instructions, or switch it on and off with isEnabled. Send only the… | Not stated |
| DELETE | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_id} | Delete a reengagement card, Requires the `ai-sdr:write` scope (or a broader one that includes it). Delete a reengagement card so it no longer fires for quiet contacts. To keep it but stop it firing, set isEnabled to false. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_id}/media | Upload reengagement card media, Requires the `ai-sdr:write` scope (or a broader one that includes it). Attach an image or file to a reengagement card so it goes out with the message. Multipart/form-data, up to 100 MB. | Not stated |
| DELETE | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_id}/media/{media_id} | Delete reengagement card media, Requires the `ai-sdr:write` scope (or a broader one that includes it). Detach a file from a reengagement card so it stops going out with the card's messages. Returns 204 with no body. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows | List reengagement flows, Requires the `ai-sdr:read` scope (or a broader one that includes it). List the reengagement flows on a knowledge base. Returned as one plain array with each flow's name, description, and card count. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows | Create a reengagement flow, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need a follow-up track alongside the ones a knowledge base already has, a gentler cadence for VIP contacts, say. name is required… | Not stated |
| PATCH | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows/{flow_id} | Update a reengagement flow, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need to rename a reengagement flow or change its description. Send only the fields you want to change; at least one of name and… | Not stated |
| DELETE | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows/{flow_id} | Delete a reengagement flow, Requires the `ai-sdr:write` scope (or a broader one that includes it). Retire a reengagement flow and its cards. Contacts on it fall back to the default flow, which cannot itself be deleted. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows/{flow_id}/duplicate | Duplicate a reengagement flow, Requires the `ai-sdr:write` scope (or a broader one that includes it). Copy a reengagement flow along with its cards. The copy is created as a non-default flow in the same knowledge base. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows/{flow_id}/set-default | Set a reengagement flow as default, Requires the `ai-sdr:write` scope (or a broader one that includes it). Make a reengagement flow the default for contacts with none assigned. The previous default loses the role. Returns 204. | Not stated |
| POST | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows/{flow_id}/assign | Assign a reengagement flow to a contact, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need to move one contact onto a specific reengagement flow, after a conversation suggests a different follow-up track… | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows/{flow_id}/contacts-count | Get contacts count for a reengagement flow, Requires the `ai-sdr:read` scope (or a broader one that includes it). Count the contacts currently on a reengagement flow. The body is the number on its own, as a plain integer. | Not stated |
| GET | /v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-flows/state | Get reengagement flow state for a contact, Requires the `ai-sdr:read` scope (or a broader one that includes it). See which reengagement flow a contact is on and when it was assigned. Pass sequenceid and contactid as query parameters. | Not stated |
| GET | /v3/ai-sdr/learnings | [Coming soon: docs say available by early October 2026] List AI learnings, Requires the `ai-sdr:read` scope (or a broader one that includes it). Use this endpoint when you need to see the AI learnings that shape how the AI writes for you, standing rules… | Not stated |
| POST | /v3/ai-sdr/learnings | [Coming soon: docs say available by early October 2026] Create an AI learning, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need a new standing rule for how the AI writes. text is required and limited to… | Not stated |
| GET | /v3/ai-sdr/learnings/{id} | [Coming soon: docs say available by early October 2026] Get an AI learning, Requires the `ai-sdr:read` scope (or a broader one that includes it). Use this endpoint when you need a single AI learning by its id, including the rules it clashes with. Alongside… | Not stated |
| PATCH | /v3/ai-sdr/learnings/{id} | [Coming soon: docs say available by early October 2026] Update an AI learning, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need to change part of an existing AI learning without resending all of it; the… | Not stated |
| DELETE | /v3/ai-sdr/learnings/{id} | [Coming soon: docs say available by early October 2026] Delete an AI learning, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when a learning should stop shaping what the AI writes for good. To keep the learning but… | Not stated |
| GET | /v3/ai-sdr/offers | List offers, Requires the `ai-sdr:read` scope (or a broader one that includes it). Browse the AI SDR offers you can work with. Each bundles the company context used to personalize outreach. Paged with top and skip. | Not stated |
| POST | /v3/ai-sdr/offers | Create an offer, Requires the `ai-sdr:write` scope (or a broader one that includes it). Create an offer to hold the company context your AI SDR outreach draws on. Only the name is required, up to 200 characters. | Not stated |
| GET | /v3/ai-sdr/offers/{id} | Get an offer, Requires the `ai-sdr:read` scope (or a broader one that includes it). Get one offer in full: company name and description, ICP, reason for outreach, case studies, pain points, and value props. | Not stated |
| PATCH | /v3/ai-sdr/offers/{id} | Update an offer, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need to change part of an existing offer without resending all of it. Send only the fields you want to change, at least one must be present… | Not stated |
| DELETE | /v3/ai-sdr/offers/{id} | Delete an offer, Requires the `ai-sdr:write` scope (or a broader one that includes it). Delete an offer you no longer work with, by id. A successful call returns no content. Needs the AI SDR feature on your team. | Not stated |
| POST | /v3/ai-sdr/offers/{id}/duplicate | Duplicate an offer, Requires the `ai-sdr:write` scope (or a broader one that includes it). Copy an offer so you can adapt a proven one to a new segment. The copy carries the same company context as the original. | Not stated |
| POSTasync | /v3/ai-sdr/offers/generate | Generate an offer, Requires the `ai-sdr:write` scope (or a broader one that includes it). Have the AI SDR draft an offer from a company URL or a brief, instead of filling in the context by hand. Runs in the background. | Not stated |
| POST | /v3/ai-sdr/offers/generation-attachments | Upload an attachment for offer generation, Requires the `ai-sdr:write` scope (or a broader one that includes it). Upload a document for the AI SDR to read before drafting an offer. | Not stated |
| GET | /v3/ai-sdr/approvals | List pending approvals, Requires the `ai-sdr:read` scope (or a broader one that includes it). Work through the AI messages your team's sequences have queued for approval. Paged with top and skip, filterable by sequence. | Not stated |
| POST | /v3/ai-sdr/approvals/send-bulk | Send a batch of pending approvals, Requires the `ai-sdr:write` scope (or a broader one that includes it). Use this endpoint when you need to approve and send several queued drafts in one call. Pass items as a list of at most 20 sequenceId and contactId… | Not stated |
| GET | /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/approval | Get pending approval for a contact, Requires the `ai-sdr:read` scope (or a broader one that includes it). Review one queued draft before you act on it. It's addressed by sequence and contact id, there is no separate approval id. | Not stated |
| DELETE | /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/approval | Reject (delete) a pending approval, Requires the `ai-sdr:write` scope (or a broader one that includes it). Reject a contact's queued draft instead of sending it. The draft is discarded and the contact leaves the sequence. | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/approval/send | Send a pending approval, Requires the `ai-sdr:write` scope (or a broader one that includes it). Approve and send one contact's queued draft. Leave body and subject unset to send as generated, or pass either to overwrite. | Not stated |
| POSTasync | /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/approval/regenerate | Regenerate a pending approval, Requires the `ai-sdr:write` scope (or a broader one that includes it). Have the AI SDR write a new message while keeping the contact in the sequence. Pass recommendations to steer the rewrite. | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/approval/feedback | [Coming soon: docs say available by late November 2026] Submit feedback on a pending approval, Use this endpoint when you need to tell the AI SDR whether a queued draft was good, so it can learn from your judgement. Set vote to like or dislike; when the vote… | Not stated |
| GET | /v3/ai-sdr/sequence-structures | [Coming soon: docs say available by late October 2026] List sequence structures, Requires the `ai-sdr:read` scope (or a broader one that includes it). Browse the sequence structures you can apply to AI SDR sequences. Pick one scope with scope: library (the… | Not stated |
| GET | /v3/ai-sdr/sequence-structures/{id} | [Coming soon: docs say available by late October 2026] Get a sequence structure, Requires the `ai-sdr:read` scope (or a broader one that includes it). Read one sequence structure by id: its name, the channels its steps use, and its scope. | Not stated |
| GET | /v3/ai-sdr/playbooks | List playbooks, Requires the `ai-sdr:read` scope (or a broader one that includes it). Browse the AI SDR playbooks you can use. Pass type to keep one scope: global, organization, or team. | Not stated |
| POST | /v3/ai-sdr/playbooks | Create a playbook, Requires the `ai-sdr:write` scope (or a broader one that includes it). Create a playbook holding the tone, voice, and writing guidance your AI SDR follows. Name, description, body, and type are required. | Not stated |
| GET | /v3/ai-sdr/playbooks/{id} | Get a playbook, Requires the `ai-sdr:read` scope (or a broader one that includes it). Get one playbook by composite id, g- global, o- organization, t- team, with its description, body, and style files. | Not stated |
| PATCH | /v3/ai-sdr/playbooks/{id} | Update a playbook, Requires the `ai-sdr:write` scope (or a broader one that includes it). Change part of a playbook without resending it all. Send at least one of name, description, and body; type cannot change. | Not stated |
| DELETE | /v3/ai-sdr/playbooks/{id} | Delete a playbook, Requires the `ai-sdr:write` scope (or a broader one that includes it). Delete a playbook by its composite id. Reply-curated global playbooks cannot be deleted, and organization ones need permission. | Not stated |
| POST | /v3/ai-sdr/playbooks/{id}/duplicate | Duplicate a playbook, Requires the `ai-sdr:write` scope (or a broader one that includes it). Copy a playbook so you can adapt it to a new segment. Any playbook you can read works as the source, including a global one. | Not stated |
| POST | /v3/ai-sdr/playbooks/{id}/regenerate | [Coming soon: docs say available by late October 2026] Regenerate a playbook, Requires the `ai-sdr:write` scope (or a broader one that includes it). Have the AI SDR rewrite a playbook's body from your feedback. The playbook is updated in place, so every… | Not stated |
| GET | /v3/ai-sdr/playbooks/{id}/sequences | [Coming soon: docs say available by late October 2026] List sequences using a playbook, Requires the `ai-sdr:read` scope (or a broader one that includes it). See which AI SDR sequences a playbook is attached to, useful before editing a playbook, since an… | Not stated |
| POST | /v3/ai-sdr/playbooks/{playbook_id}/style-files | Upload a style file, Requires the `ai-sdr:write` scope (or a broader one that includes it). Upload a reference document, a tone guide or writing sample, for the AI SDR to draw on alongside the playbook body. | Not stated |
| DELETE | /v3/ai-sdr/playbooks/{playbook_id}/style-files/{style_file_id} | Delete a style file, Requires the `ai-sdr:write` scope (or a broader one that includes it). Remove a style file so it stops informing how the AI SDR writes for this playbook. Only that file is removed. | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/preview/steps/{step_id}/feedback | [Coming soon: docs say available by late November 2026] Submit feedback on a preview step, Use this endpoint when you need to record a reaction to the AI-generated message for one step of a contact's preview, set vote to like or dislike. When the vote is… | Not stated |
| POSTasync | /v3/sequences/ai-sdr/{sequence_id}/contacts/{contact_id}/preview/personalize | Personalize the preview for a contact, Requires the `ai-sdr:write` scope (or a broader one that includes it). Have the AI write or rewrite the messages one contact will get in an AI SDR sequence. Runs in the background across their steps. | Not stated |
| POST | /v3/sequences/ai-sdr | Create an AI SDR sequence, Requires the `ai-sdr:write` scope (or a broader one that includes it). Create a sequence the AI SDR writes and runs. Seed the company context with exactly one of offerId or offerGenerationInputs. Pass structureId to build the steps… | Not stated |
| GET | /v3/sequences/ai-sdr/{sequence_id}/settings | Read AI SDR sequence settings, Requires the `ai-sdr:read` scope (or a broader one that includes it). Read one sequence's AI SDR settings: offer context, tone, LLM, intent signals, playbook, and approval mode. | Not stated |
| PATCH | /v3/sequences/ai-sdr/{sequence_id}/settings | Update AI SDR sequence settings, Requires the `ai-sdr:write` scope (or a broader one that includes it). Change part of a sequence's AI SDR settings. offerId and offerGenerationInputs are mutually exclusive; send at least one field. | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/autopilot/enable | Enable autopilot, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Let a sequence keep finding and adding contacts on its own, using the autopilot filters and limits already saved on it. | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/autopilot/disable | Disable autopilot, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Stop a sequence looking for new contacts on its own. Existing contacts, filters, and limits stay exactly as they are. | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/autopilot/force-start | Force-start an autopilot search, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Start an autopilot contact search now instead of waiting for the next run. Autopilot has to be on or the call is rejected. | Not stated |
| POSTasync | /v3/sequences/ai-sdr/{sequence_id}/autopilot/preview | Preview autopilot results, Requires the `ai-sdr:operate` scope (or a broader one that includes it). See how many contacts and companies a set of autopilot filters would reach before you commit. Nothing you send is saved. | Not stated |
| PUT | /v3/sequences/ai-sdr/{sequence_id}/approval-mode | Set the approval mode, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Decide whether AI-written messages send on their own or wait for a person to approve them. Set enabled to true to hold them. | Not stated |
| GET | /v3/sequences/ai-sdr/{sequence_id}/structure | [Coming soon: docs say available by late October 2026] Get the sequence's structure, Requires the `ai-sdr:read` scope (or a broader one that includes it). See which sequence structure the sequence's steps were built from, and whether the structure can still… | Not stated |
| PUT | /v3/sequences/ai-sdr/{sequence_id}/structure | [Coming soon: docs say available by late October 2026] Set the sequence's structure, Requires the `ai-sdr:write` scope (or a broader one that includes it). Rebuild the sequence's steps from a sequence structure. The sequence's current steps are replaced. Not… | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/structure/save-as | [Coming soon: docs say available by late October 2026] Save the sequence's steps as a structure, Requires the `ai-sdr:write` scope (or a broader one that includes it). Save the sequence's current steps as a new sequence structure you can apply to other AI… | Not stated |
| GET | /v3/sequences/ai-sdr/{sequence_id}/playbook | Get the sequence's playbook, Requires the `ai-sdr:read` scope (or a broader one that includes it). See which playbook the AI SDR follows for this sequence, with its id, name, and whether it's global, organization, or team. | Not stated |
| PUT | /v3/sequences/ai-sdr/{sequence_id}/playbook | Attach a playbook to the sequence, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Set the playbook the AI SDR follows for this sequence. Send playbookId as a composite id such as t-7. Replaces any previous one. | Not stated |
| DELETE | /v3/sequences/ai-sdr/{sequence_id}/playbook | Detach the playbook from the sequence, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Stop the AI SDR following this sequence's playbook. Only the connection goes, the playbook stays available elsewhere. | Not stated |
| GET | /v3/sequences/ai-sdr/{sequence_id}/playbook-draft | [Coming soon: docs say available by late October 2026] Get the sequence's playbook draft, Requires the `ai-sdr:read` scope (or a broader one that includes it). Read your current AI-generated playbook draft for this sequence. Each user has their own draft per… | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/playbook-draft/generate | [Coming soon: docs say available by late October 2026] Generate a playbook draft, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Have the AI SDR write a playbook for this sequence from its offer. Starts a new draft, replacing your… | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/playbook-draft/regenerate | [Coming soon: docs say available by late October 2026] Regenerate the playbook draft, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Have the AI SDR rewrite your playbook draft from your feedback. Updates the draft only; the saved… | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/playbook-draft/example-files | [Coming soon: docs say available by late October 2026] Add example messages to the playbook draft, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Upload a file with your best-performing outreach messages. The AI SDR matches them to… | Not stated |
| POST | /v3/sequences/ai-sdr/{sequence_id}/playbook-draft/save | [Coming soon: docs say available by late October 2026] Save the playbook draft, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Save your playbook draft as a team playbook and attach it to this sequence, replacing any attached… | Not stated |
| GET | /v3/sequences/ai-sdr/{sequence_id}/knowledge-base | Get the sequence's knowledge base, Requires the `ai-sdr:read` scope (or a broader one that includes it). See which knowledge base the AI SDR draws on for this sequence. Reports not found when none is connected. | Not stated |
| PUT | /v3/sequences/ai-sdr/{sequence_id}/knowledge-base | Connect a knowledge base to the sequence, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Set the knowledge base the AI SDR draws on for this sequence. A sequence keeps one at a time, so this replaces any previous. | Not stated |
| DELETE | /v3/sequences/ai-sdr/{sequence_id}/knowledge-base | Disconnect the knowledge base from the sequence, Requires the `ai-sdr:operate` scope (or a broader one that includes it). Stop the AI SDR drawing on this sequence's knowledge base. Only the connection goes, the knowledge base itself stays. | Not stated |
| POSTasync | /v3/ai-sdr/strategist/start | Start a strategist run, Requires the `ai-sdr:write` scope (or a broader one that includes it). Have the AI Strategist think up outreach ideas for a company and build a sequence from each. Runs in the background. | Not stated |
| POSTasync | /v3/ai-web-search/start | [Coming soon: docs say available by late November 2026] Start an AI web search, Have Reply find new contacts for a sequence by searching the web with AI. Runs in the background and returns once accepted. | Not stated |
| GET | /v3/ai-web-search/searches | [Coming soon: docs say available by late November 2026] List AI web searches for a sequence, Review the AI web searches already started for one sequence. sequenceId is required, so each call covers a single sequence. | Not stated |
| GET | /v3/contact-accounts | List accounts, Requires the `contacts:read` scope (or a broader one that includes it). Browse the accounts you can see, the companies your contacts belong to. Paged with top and skip, with an optional search. | Not stated |
| POST | /v3/contact-accounts | Create an account, Requires the `contacts:write` scope (or a broader one that includes it). Register a company as an account that contacts can link to. Only name is required; every other company field is optional. | Not stated |
| POST | /v3/contact-accounts/filter | Filter accounts, Requires the `contacts:read` scope (or a broader one that includes it). Get a narrower set of accounts than plain listing. Search by name or domain, scope to one list, and add up to 20 conditions. | Not stated |
| GET | /v3/contact-accounts/{id} | Get an account, Requires the `contacts:read` scope (or a broader one that includes it). Get one account by id: company details, owner, stage, linked contact count, and the mail provider behind its domain. | Not stated |
| PUT | /v3/contact-accounts/{id} | Update an account, Requires the `contacts:write` scope (or a broader one that includes it). Replace an account's details in full. Name and ownerUserId are required, and any optional field you leave out is cleared. `customFields` is the exception: the values… | Not stated |
| DELETE | /v3/contact-accounts/{id} | Delete an account, Requires the `contacts:write` scope (or a broader one that includes it). Delete one account by id. Its linked contacts are kept and simply left without an account. Use bulk-delete for several. | Not stated |
| POST | /v3/contact-accounts/bulk | Bulk create accounts, Requires the `contacts:write` scope (or a broader one that includes it). Create up to 100 accounts in one call. If any item fails validation the whole request is rejected before anything is created. A `customFields` entry that does not… | Not stated |
| POST | /v3/contact-accounts/bulk-delete | Bulk delete accounts, Requires the `contacts:write` scope (or a broader one that includes it). Delete up to 1000 accounts in one call. The ones you may delete go through; the response lists only the ids that did not. | Not stated |
| PUT | /v3/contact-accounts/{id}/owner | Update account owner, Requires the `contacts:write` scope (or a broader one that includes it). Hand an account to another member of your team by user id. Nothing else changes, and the account comes back with its new owner. | Not stated |
| GET | /v3/contact-accounts/{id}/contacts | List contacts for an account, Requires the `contacts:read` scope (or a broader one that includes it). Get the contacts currently linked to an account, paged with top and skip. Each entry carries the email, name, and job title. | Not stated |
| POST | /v3/contact-accounts/{id}/contact-links/bulk | Bulk add contacts to an account, Requires the `contacts:operate` scope (or a broader one that includes it). Link up to 1000 contacts to an account in one call. A contact belongs to one account, so any already linked elsewhere is moved. | Not stated |
| POST | /v3/contact-accounts/{id}/contact-links/bulk-delete | Bulk remove contacts from an account, Requires the `contacts:operate` scope (or a broader one that includes it). Unlink up to 1000 contacts from an account without deleting them. Each one loses the company details it inherited. | Not stated |
| GET | /v3/contact-accounts/{id}/notes | [Coming soon: docs say available by late October 2026] List notes for an account, Requires the `contacts:read` scope (or a broader one that includes it). Read back the notes recorded on an account, newest first, paged with top and skip. Each note carries its… | Not stated |
| POST | /v3/contact-accounts/{id}/notes | [Coming soon: docs say available by late October 2026] Add a note to an account, Requires the `contacts:operate` scope (or a broader one that includes it). Record company-level context on an account, CRM facts, funding news, research, so your team and… | Not stated |
| GET | /v3/contact-accounts/{id}/notes/{note_id} | [Coming soon: docs say available by late October 2026] Get a note of an account, Requires the `contacts:read` scope (or a broader one that includes it). Read one note recorded on an account by its id. The note must belong to the account in the path; a note… | Not stated |
| GET | /v3/contact-account-lists | List account lists, Requires the `contacts:read` scope (or a broader one that includes it). Browse your team's account lists, yours first. Lists are shared team-wide. Paged with the top and skip query parameters. | Not stated |
| POST | /v3/contact-account-lists | Create an account list, Requires the `contacts:write` scope (or a broader one that includes it). Create an account list to group companies under. The name must be 3 to 128 characters and unique within your team. | Not stated |
| GET | /v3/contact-account-lists/{id} | Get an account list, Requires the `contacts:read` scope (or a broader one that includes it). Get one account list by id, including its name. Account lists are team-wide, so you can fetch any list your team owns. | Not stated |
| PUT | /v3/contact-account-lists/{id} | Update an account list, Requires the `contacts:write` scope (or a broader one that includes it). Rename an account list. The name is all you can change here, and it must be 3 to 128 characters and unique in your team. | Not stated |
| DELETE | /v3/contact-account-lists/{id} | Delete an account list, Requires the `contacts:write` scope (or a broader one that includes it). Delete an account list by id. The accounts stay in Reply and keep their other lists, only membership in this list goes away. | Not stated |
| POST | /v3/contact-account-lists/{id}/move-accounts | Move accounts to an account list, Requires the `contacts:operate` scope (or a broader one that includes it). Move accounts into a list and out of every other list. Up to 1000 ids per call. Use add-accounts to keep their memberships. | Not stated |
| POST | /v3/contact-account-lists/{id}/add-accounts | Add accounts to an account list, Requires the `contacts:operate` scope (or a broader one that includes it). Add accounts to a list while keeping their other list memberships. Up to 1000 ids per call. Use move-accounts to make it their only list. | Not stated |
| POST | /v3/attachments | Upload attachment, Requires the `other:write` scope (or a broader one that includes it). Upload a file once and reuse it across outbound messages. Send it as multipart/form-data in a single field named file. | Not stated |
| POST | /v3/attachments/voice | Upload voice attachment, Turn a recorded audio file into a LinkedIn voice message. Send it as multipart/form-data in a single field named file. | Not stated |
| GET | /v3/background-jobs | List background jobs, Requires the `other:read` scope (or a broader one that includes it). See the asynchronous work you've started and where each job stands, running and finished alike. Paged with top and skip. | Not stated |
| GET | /v3/background-jobs/{jobId} | Get a background job, Requires the `other:read` scope (or a broader one that includes it). Check how far a background job has got. Poll until status settles on Done, Failed, Cancelled, or Expired, and read progress. | Not stated |
| POST | /v3/background-jobs/{jobId}/cancel | Cancel a background job, Requires the `other:operate` scope (or a broader one that includes it). Stop a background job that is no longer worth finishing. Returns 204, and you can record an optional reason for stopping it. | Not stated |
| GET | /v3/billing | Get billing details, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `billing:read` scope (or a broader one that includes it). See the plan you are… | Not stated |
| GET | /v3/contacts | List all contacts, Requires the `contacts:read` scope (or a broader one that includes it). Browse your contacts or look one up by exact email or LinkedIn URL. Paged with the top and skip query parameters. | Not stated |
| POST | /v3/contacts | Create a contact, Requires the `contacts:write` scope (or a broader one that includes it). Add a single contact to your account with any profile and custom fields you have. Returns the contact with its new id. | Not stated |
| GET | /v3/contacts/{id} | Get a contact, Requires the `contacts:read` scope (or a broader one that includes it). Get the full record for one contact by id: profile fields, owner, opt-out, call and meeting status, and custom fields. | Not stated |
| PATCH | /v3/contacts/{id} | Update a contact, Requires the `contacts:write` scope (or a broader one that includes it). Change specific fields on a contact without resending the whole record. Omitted fields stay as they are; null clears one. | Not stated |
| DELETE | /v3/contacts/{id} | Delete a contact, Requires the `contacts:write` scope (or a broader one that includes it). Delete one contact by its Reply id. To remove several at once, use the bulk-delete endpoint instead. | Not stated |
| POST | /v3/contacts/import | Import contacts, Requires the `contacts:write` scope (or a broader one that includes it). Use this endpoint when you need to add or update many contacts in one call, for example when syncing contacts from another system. Each item requires firstName; the… | Not stated |
| POST | /v3/contacts/filter | Filter contacts, Requires the `contacts:read` scope (or a broader one that includes it). Use this endpoint when you need a filtered, sorted page of contacts that a plain email or LinkedIn lookup cannot express. Combine field rules (property, condition… | Not stated |
| POST | /v3/contacts/filter/count | Count filtered contacts, Requires the `contacts:read` scope (or a broader one that includes it). Use this endpoint when you need only the number of contacts that match a set of filter criteria, for example to show a total or decide whether to page through… | Not stated |
| POST | /v3/contacts/bulk-delete | Bulk delete contacts, Requires the `contacts:write` scope (or a broader one that includes it). Delete several contacts in one call. Each is handled on its own, and the response maps any skipped contact to its reason. | Not stated |
| GET | /v3/contacts/{id}/sequences | Get sequences for a contact, Requires the `contacts:read` scope (or a broader one that includes it). See which sequences a contact is in, with each sequence's name, their status, the current step, and when they were added. | Not stated |
| GET | /v3/contacts/{id}/activities | Get activities for a contact, Requires the `contacts:read` scope (or a broader one that includes it). Get a contact's activity history, emails, calls, status changes, and other tracked events. Paged with top and skip. | Not stated |
| GET | /v3/contacts/{id}/inbox-threads | Get inbox threads for a contact, Requires the `contacts:read` scope (or a broader one that includes it). Get the email conversation threads exchanged with a contact, grouped as they appear in your inbox. Paged with top and skip. | Not stated |
| POST | /v3/contacts/set-replied | Mark or unmark contacts as replied, Requires the `contacts:operate` scope (or a broader one that includes it). Record replies captured outside Reply, in another inbox or CRM, across every sequence a contact is in. Stops further steps. | Not stated |
| POST | /v3/contacts/set-bounced | Mark or unmark contacts as bounced, Requires the `contacts:operate` scope (or a broader one that includes it). Record bounces detected outside Reply across every sequence a contact is in. Marking as bounced stops further steps. | Not stated |
| POST | /v3/contacts/set-opted-out | Opt contacts out or clear their opt-out, Requires the `contacts:operate` scope (or a broader one that includes it). Opt contacts out of all outreach, or clear the flag. Opting out finishes them in every sequence they're in. The `contact_opted_out` webhook… | Not stated |
| POST | /v3/contacts/set-status-in-sequence | Set contacts' in-sequence status, Requires the `contacts:operate` scope (or a broader one that includes it). Set contacts to active, paused, finished, or outOfOffice across every sequence they're in. Replied and bounced are separate. | Not stated |
| GET | /v3/contacts/{id}/statuses | Get a contact's statuses, Requires the `contacts:read` scope (or a broader one that includes it). Check where a contact stands: global opt-out, call and meeting flags, plus their status in each sequence they're enrolled in. | Not stated |
| PUT | /v3/contacts/owner | Change contacts owner, Requires the `contacts:operate` scope (or a broader one that includes it). Reassign contacts to another teammate after a handoff or territory change. Set reassignTasks to move their tasks too. A user can own only one contact per email.… | Not stated |
| GET | /v3/contacts/{id}/notes | [Coming soon: docs say available by late October 2026] List notes for a contact, Requires the `contacts:read` scope (or a broader one that includes it). Read back the notes recorded on a contact, newest first, paged with top and skip. Each note carries its… | Not stated |
| POST | /v3/contacts/{id}/notes | Add a note to a contact, Requires the `contacts:operate` scope (or a broader one that includes it). Record context, call summaries, or reminders on a contact's timeline, so your whole team works from the same history. | Not stated |
| GET | /v3/contacts/{id}/notes/{note_id} | [Coming soon: docs say available by late October 2026] Get a note of a contact, Requires the `contacts:read` scope (or a broader one that includes it). Read one note recorded on a contact by its id. The note must belong to the contact in the path; a note id… | Not stated |
| POST | /v3/contacts/{id}/move-to-sequence | Move a contact to a sequence, Requires the `contacts:operate` scope (or a broader one that includes it). Enroll a contact into a different sequence. Set removeFromExisting to true to take them out of their current one. | Not stated |
| POSTasync | /v3/contacts/run-prompt-action | Run a Prompt Action on contacts, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `contacts:operate` scope (or a broader one that includes it). Run… | consumes Reply AI & Live Data / validation credits (reserved up front); see docs page |
| GET | /v3/prompt-actions | List Prompt Actions, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `contacts:read` scope (or a broader one that includes it). Browse the Prompt… | Not stated |
| POST | /v3/prompt-actions | Create a Prompt Action, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `contacts:write` scope (or a broader one that includes it). Save a prompt… | Not stated |
| GET | /v3/prompt-actions/{id} | Get a Prompt Action, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `contacts:read` scope (or a broader one that includes it). Read one Prompt… | Not stated |
| PUT | /v3/prompt-actions/{id} | Update a Prompt Action, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `contacts:write` scope (or a broader one that includes it). Replace a Prompt… | Not stated |
| DELETE | /v3/prompt-actions/{id} | Delete a Prompt Action, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `contacts:write` scope (or a broader one that includes it). Remove a Prompt… | Not stated |
| GET | /v3/contact-blacklist-rules/domains | List domain blacklist rules, Requires the `contacts:read` scope (or a broader one that includes it). Review the domain rules in force for you, each blocking every contact at that domain. Paged with top and skip. | Not stated |
| POST | /v3/contact-blacklist-rules/domains | Create a domain blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Stop contacting everyone at a domain. Send the bare domain such as example.com, no scheme, no address. | Not stated |
| GET | /v3/contact-blacklist-rules/domains/{id} | Get a domain blacklist rule, Requires the `contacts:read` scope (or a broader one that includes it). Get one domain blacklist rule by id with the pattern it blocks. isGlobal tells you if it's yours or a Reply platform rule. | Not stated |
| PUT | /v3/contact-blacklist-rules/domains/{id} | Update a domain blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Correct the domain a blacklist rule blocks. Send the full replacement pattern, it's the only field the rule carries. | Not stated |
| DELETE | /v3/contact-blacklist-rules/domains/{id} | Delete a domain blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Stop blocking a domain so contacts there are reachable again. Only your own rules go; Reply's platform rules are read-only. | Not stated |
| POST | /v3/contact-blacklist-rules/domains/bulk | Bulk create domain blacklist rules, Requires the `contacts:write` scope (or a broader one that includes it). Block several domains in one call. Every pattern is checked first, so one malformed domain rejects the whole request. | Not stated |
| POST | /v3/contact-blacklist-rules/domains/bulk-delete | Bulk delete domain blacklist rules, Requires the `contacts:write` scope (or a broader one that includes it). Lift several domain blocks at once. The ones that can go are deleted; the response lists only the ids that were not. | Not stated |
| GET | /v3/contact-blacklist-rules/emails | List email blacklist rules, Requires the `contacts:read` scope (or a broader one that includes it). Review the email rules in force for you, each blocking a single address rather than a domain. Paged with top and skip. | Not stated |
| POST | /v3/contact-blacklist-rules/emails | Create an email blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Stop contacting one address while the rest of its domain stays reachable. Send a full email address as the pattern. | Not stated |
| GET | /v3/contact-blacklist-rules/emails/{id} | Get an email blacklist rule, Requires the `contacts:read` scope (or a broader one that includes it). Get one email blacklist rule by id with the address it blocks. isGlobal tells you if it's yours or a Reply platform rule. | Not stated |
| PUT | /v3/contact-blacklist-rules/emails/{id} | Update an email blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Change which address an email blacklist rule blocks. Send the full replacement pattern; platform rules are read-only. | Not stated |
| DELETE | /v3/contact-blacklist-rules/emails/{id} | Delete an email blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Unblock one address. It becomes reachable again unless a domain rule still covers its domain. Platform rules are read-only. | Not stated |
| POST | /v3/contact-blacklist-rules/emails/bulk | Bulk create email blacklist rules, Requires the `contacts:write` scope (or a broader one that includes it). Block several addresses in one call. Every pattern is checked first, so one malformed address rejects the whole request. | Not stated |
| POST | /v3/contact-blacklist-rules/emails/bulk-delete | Bulk delete email blacklist rules, Requires the `contacts:write` scope (or a broader one that includes it). Unblock several addresses at once. The ones that can go are deleted; the response lists only the ids that were not. | Not stated |
| GET | /v3/contact-blacklist-rules/email-exceptions | List email exception blacklist rules, Requires the `contacts:read` scope (or a broader one that includes it). Review the addresses you carved out of your blacklist, each staying contactable despite a domain rule. Paged with top and skip. | Not stated |
| POST | /v3/contact-blacklist-rules/email-exceptions | Create an email exception blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Keep one address contactable even though a domain rule blocks the rest of its domain. Send a full email address. | Not stated |
| GET | /v3/contact-blacklist-rules/email-exceptions/{id} | Get an email exception blacklist rule, Requires the `contacts:read` scope (or a broader one that includes it). Get one email exception rule by id with the address it keeps contactable. Only your own exceptions resolve here. | Not stated |
| PUT | /v3/contact-blacklist-rules/email-exceptions/{id} | Update an email exception blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Change which address an exception keeps contactable. The previous address falls back under whatever rules cover it. | Not stated |
| DELETE | /v3/contact-blacklist-rules/email-exceptions/{id} | Delete an email exception blacklist rule, Requires the `contacts:write` scope (or a broader one that includes it). Withdraw an exception so its address falls back under your blacklist, if a domain or email rule still covers it. | Not stated |
| POST | /v3/contact-blacklist-rules/email-exceptions/bulk | Bulk create email exception blacklist rules, Requires the `contacts:write` scope (or a broader one that includes it). Carve several addresses out of your blacklist at once. One malformed address rejects the whole request before anything is stored. | Not stated |
| POST | /v3/contact-blacklist-rules/email-exceptions/bulk-delete | Bulk delete email exception blacklist rules, Requires the `contacts:write` scope (or a broader one that includes it). Withdraw several exceptions at once, putting their addresses back under your blacklist. Only failed ids come back. | Not stated |
| POSTasync | /v3/contacts/enrich-by-email | [Coming soon: docs say available by late November 2026] Enrich contacts by email, Fill in missing details on contacts that already have an email address. Contacts without one need the find-emails endpoint. | Not stated |
| POSTasync | /v3/contacts/find-emails | [Coming soon: docs say available by late November 2026] Find missing email addresses, Find email addresses for contacts that don't have one yet. Contacts that already have an address are left alone. | Not stated |
| POSTasync | /v3/contacts/find-phones | [Coming soon: docs say available by late November 2026] Find phone numbers, Find phone numbers for your contacts. Accepted straight away, with the search running in the background. | Not stated |
| POSTasync | /v3/contacts/enrich-by-linkedin | [Coming soon: docs say available by late November 2026] Enrich contacts by LinkedIn URL, Enrich contacts from their LinkedIn profile URL, optionally looking up a missing email and phone number in the same pass. | Not stated |
| GET | /v3/contact-lists | List contact lists, Requires the `contacts:read` scope (or a broader one that includes it). Browse the contact lists you own plus any shared with your team. Paged with top and skip, with an optional name search. | Not stated |
| POST | /v3/contact-lists | Create a contact list, Requires the `contacts:write` scope (or a broader one that includes it). Create a contact list to group contacts under. Set isShared to make it visible to your team, or leave it false to keep it private. | Not stated |
| GET | /v3/contact-lists/{id} | Get a contact list, Requires the `contacts:read` scope (or a broader one that includes it). Get one contact list by id, including its name and whether it is shared with your team. | Not stated |
| PUT | /v3/contact-lists/{id} | Update a contact list, Requires the `contacts:write` scope (or a broader one that includes it). Rename a contact list. Only the name changes here, use share and unshare to change visibility. The new name must be unique. | Not stated |
| DELETE | /v3/contact-lists/{id} | Delete a contact list, Requires the `contacts:write` scope (or a broader one that includes it). Delete a contact list by id. A shared list can only be deleted by the person who created it. | Not stated |
| POST | /v3/contact-lists/{id}/share | Share a contact list, Requires the `contacts:write` scope (or a broader one that includes it). Make one of your private contact lists visible to the rest of your team. Use the unshare endpoint to reverse it later. | Not stated |
| POST | /v3/contact-lists/{id}/unshare | Unshare a contact list, Requires the `contacts:write` scope (or a broader one that includes it). Take a shared contact list out of team visibility and make it private to you again. | Not stated |
| POST | /v3/contact-lists/{id}/move-contacts | Move contacts to a contact list, Requires the `contacts:operate` scope (or a broader one that includes it). Move contacts into a list and out of every other list. Use add-contacts instead to keep their existing memberships. | Not stated |
| POST | /v3/contact-lists/{id}/add-contacts | Add contacts to a contact list, Requires the `contacts:operate` scope (or a broader one that includes it). Add contacts to a list while keeping their other list memberships. Contacts are processed one by one, so partial success sticks. | Not stated |
| GET | /v3/contacts/{id}/lists | Get contact's lists, Requires the `contacts:read` scope (or a broader one that includes it). See which contact lists a contact belongs to, including each list's name and whether it's shared with your team. | Not stated |
| GET | /v3/custom-fields | List all custom fields, Requires the `contacts:read` scope (or a broader one that includes it). Get every custom field of one entity, for your team and your organization. One flat array, no paging. Without `entityType` you get the fields your contacts can… | Not stated |
| POST | /v3/custom-fields | Create a custom field, Requires the `contacts:write` scope (or a broader one that includes it). Track something on contacts or accounts that Reply doesn't capture by default. Provide a title and a text or number field type; set `entityType` to `account` for… | Not stated |
| GET | /v3/custom-fields/{id} | Get a custom field, Requires the `contacts:read` scope (or a broader one that includes it). Get one custom field definition by id: its title, its text or number type, its metadata, and whether it's org-wide. | Not stated |
| PUT | /v3/custom-fields/{id} | Update a custom field, Requires the `contacts:write` scope (or a broader one that includes it). Rename a custom field or change the kind of value it holds. Send the complete definition, metadata is replaced, not merged. | Not stated |
| DELETE | /v3/custom-fields/{id} | Delete a custom field, Requires the `contacts:write` scope (or a broader one that includes it). Retire a custom field your team no longer collects. It disappears for everyone, even where contacts already hold values. | Not stated |
| POST | /v3/custom-fields/{id}/preview | [Coming soon: docs say available by early October 2026] Preview an AI custom field, Requires the `contacts:operate` scope (or a broader one that includes it). See what an AI custom field would produce for one contact. Nothing is written to the contact. | Not stated |
| POSTasync | /v3/custom-fields/{id}/enrich | [Coming soon: docs say available by early October 2026] Enrich contacts with an AI custom field, Requires the `contacts:operate` scope (or a broader one that includes it). Fill an AI custom field for your contacts. The work is queued and runs in the… | 1 credit per contact enriched |
| POST | /v3/contacts/{id}/send-direct-email | Send a direct email to a contact, Requires the `contacts:operate` scope (or a broader one that includes it). Send a one-off email to a contact outside any sequence, from a connected account. The reply is still tracked on the contact. The email is sent… | Not stated |
| POST | /v3/contacts/{id}/send-direct-linkedin-connect | Send a LinkedIn connection request to a contact, Requires the `contacts:operate` scope (or a broader one that includes it). Invite a contact to connect on LinkedIn outside any sequence. Pass the connected account to send from, plus an optional note. | Not stated |
| POST | /v3/contacts/{id}/send-direct-linkedin-inmail | Send a LinkedIn InMail to a contact, Requires the `contacts:operate` scope (or a broader one that includes it). Reach a contact you aren't connected with via LinkedIn InMail. The sending account needs Sales Navigator and InMail credits. | Not stated |
| POST | /v3/contacts/{id}/send-direct-linkedin-message | Send a LinkedIn message to a contact, Requires the `contacts:operate` scope (or a broader one that includes it). Send a one-off LinkedIn message to a contact you're already connected with, from one of your connected accounts. | Not stated |
| POST | /v3/contacts/{id}/send-direct-linkedin-voice | Send a LinkedIn voice message to a contact, Requires the `contacts:operate` scope (or a broader one that includes it). Send a recorded voice message on LinkedIn. Upload the audio first and pass the id it returns as voiceAttachmentId. | Not stated |
| POST | /v3/contacts/{id}/send-direct-linkedin-ai-voice | Send an AI-generated LinkedIn voice message to a contact, Requires the `contacts:operate` scope (or a broader one that includes it). Turn a written script into a voice message and send it on LinkedIn. The sending account needs a voice profile. | Not stated |
| GET | /v3/email-accounts | List email accounts, Requires the `channels:read` scope (or a broader one that includes it). Browse the email accounts you can send from. Pass my=true to see only your own. Paged with top and skip. | Not stated |
| POST | /v3/email-accounts | Create an email account, Requires the `channels:write` scope (or a broader one that includes it). Connect a custom SMTP or IMAP mailbox. Gmail and Office 365 use their own OAuth connect endpoints instead. | Not stated |
| POST | /v3/email-accounts/filter | Filter email accounts, Requires the `channels:read` scope (or a broader one that includes it). Find email accounts by status, provider, address, domain, owner, or tag. Every field is optional; an empty body matches all. | Not stated |
| GET | /v3/email-accounts/{id} | Get an email account, Requires the `channels:read` scope (or a broader one that includes it). Get one email account in full: connection, safety, signature, opt-out and ramp-up settings, tags, and connection status. | Not stated |
| PATCH | /v3/email-accounts/{id} | Update an email account, Requires the `channels:write` scope (or a broader one that includes it). Change specific settings on an email account without resending the whole record. Only the sections you include are updated. | Not stated |
| DELETE | /v3/email-accounts/{id} | Delete an email account, Requires the `channels:write` scope (or a broader one that includes it). Disconnect one email account and remove it from Reply by id. Use bulk-delete to remove several in one call. | Not stated |
| POST | /v3/email-accounts/{id}/set-default | Set default email account, Requires the `channels:operate` scope (or a broader one that includes it). Choose which email account Reply pre-selects for sending. Exactly one is default, so this clears the flag on the last one. | Not stated |
| POST | /v3/email-accounts/{id}/resume-sending | Resume sending, Requires the `channels:operate` scope (or a broader one that includes it). Clear a provider lock so an email account picks its sequences back up. Check sendingLockedByProvider first. | Not stated |
| POST | /v3/email-accounts/bulk-delete | Bulk delete email accounts, Requires the `channels:write` scope (or a broader one that includes it). Disconnect several email accounts in one call. Successful deletions stick; the response returns only the ids that failed. | Not stated |
| GET | /v3/email-accounts/connect/gmail | Connect Gmail account via OAuth, Requires the `channels:write` scope (or a broader one that includes it). Start connecting a Gmail mailbox. Returns a 302 to Google's consent screen, so follow it in a browser, not a backend client. | Not stated |
| GET | /v3/email-accounts/connect/office-365 | Connect Office 365 account via OAuth, Requires the `channels:write` scope (or a broader one that includes it). Start connecting an Office 365 or Outlook mailbox. Returns a 302 to Microsoft's consent screen, follow it in a browser. | Not stated |
| POST | /v3/email-accounts/test/smtp | Test SMTP connectivity, Requires the `channels:operate` scope (or a broader one that includes it). Check SMTP sending credentials before you commit. Nothing is created or changed, and a failed test still returns 200. | Not stated |
| POST | /v3/email-accounts/test/imap | Test IMAP connectivity, Requires the `channels:operate` scope (or a broader one that includes it). Check IMAP receiving credentials before you commit. Nothing is created or changed, and a failed test still returns 200. | Not stated |
| GET | /v3/email-accounts/{id}/stats | Get email account stats, Requires the `channels:read` scope (or a broader one that includes it). See how much sending capacity one email account has left: sent today, the daily limit, and the all-time total. | Not stated |
| POST | /v3/email-accounts/stats | Filter email account stats, Requires the `channels:read` scope (or a broader one that includes it). Get sending stats for a set of email accounts at once, handy for spotting mailboxes near their daily limit. | Not stated |
| GET | /v3/email-accounts/tags | List email account tags, Requires the `channels:read` scope (or a broader one that includes it). Get the email account tags available to you, each with its id, name, and color. Tags are referenced by name. | Not stated |
| PUT | /v3/email-accounts/tags/{tagId} | Update a tag, Requires the `channels:operate` scope (or a broader one that includes it). Rename an email account tag or change its color. The change applies everywhere the tag is already used. | Not stated |
| POST | /v3/email-accounts/{id}/tags | Add tags to an email account, Requires the `channels:operate` scope (or a broader one that includes it). Label an email account so you can group or filter by it. Tags go by name, and any name that doesn't exist yet is created. | Not stated |
| DELETE | /v3/email-accounts/{id}/tags | Remove tags from an email account, Requires the `channels:operate` scope (or a broader one that includes it). Take one or more tags off an email account by name. Only the link goes, the tag stays available on other accounts. | Not stated |
| GET | /v3/email-accounts/procurement/domains | [Coming soon: docs say available by late October 2026] List purchased domains, Requires the `channels:read` scope (or a broader one that includes it). Domains your team bought through mailbox procurement, newest first. Pre-warmed domains are not listed here.… | Not stated |
| GET | /v3/email-accounts/procurement/domains/available | [Coming soon: docs say available by late October 2026] Find available domains, Requires the `channels:read` scope (or a broader one that includes it). Domain names available to buy for mailbox procurement, with purchase and renewal prices in cents. Search… | Not stated |
| POST | /v3/email-accounts/procurement/domains/estimate | [Coming soon: docs say available by late October 2026] Estimate order cost, Requires the `channels:read` scope (or a broader one that includes it). Price breakdown for a domain and its mailboxes before you order, per-seat unit prices, subtotal, discount and… | Not stated |
| POSTasync | /v3/email-accounts/procurement/domains/purchase | [Coming soon: docs say available by late October 2026] Buy a domain with mailboxes, Requires the `channels:write` scope (or a broader one that includes it). Orders a domain and the mailboxes that send from it. Send serviceProvider (google or microsoft) and… | Not stated |
| POST | /v3/email-accounts/procurement/domains/{domainId}/mailboxes/estimate | [Coming soon: docs say available by late October 2026] Estimate mailbox cost, Requires the `channels:read` scope (or a broader one that includes it). Price breakdown for adding mailboxes to a domain your team already bought, per-seat unit prices, subtotal… | Not stated |
| POSTasync | /v3/email-accounts/procurement/domains/{domainId}/mailboxes/purchase | [Coming soon: docs say available by late October 2026] Add mailboxes, Requires the `channels:write` scope (or a broader one that includes it). Adds mailboxes to a domain your team already bought. Seats your plan already covers are free; extra seats are… | Not stated |
| POST | /v3/email-accounts/procurement/users | [Coming soon: docs say available by late October 2026] Register domain owner details, Requires the `channels:write` scope (or a broader one that includes it). Contact details and postal address that domain registrations are filed under. Register once per… | Not stated |
| GET | /v3/email-accounts/procurement/geo/states | [Coming soon: docs say available by late October 2026] List country states, Requires the `channels:read` scope (or a broader one that includes it). State and region names the mailbox provider recognizes for a country, sorted alphabetically. Use one as state… | Not stated |
| GET | /v3/email-templates | List email templates, Requires the `sequences:read` scope (or a broader one that includes it). Browse the email templates you can use: your own, your team's, and any shared with you. Paged with top and skip. | Not stated |
| POST | /v3/email-templates | Create an email template, Requires the `sequences:write` scope (or a broader one that includes it). Store a reusable email as a template. Name, body, and folderType are required; folderType is personal or team. | Not stated |
| GET | /v3/email-templates/{id} | Get an email template, Requires the `sequences:read` scope (or a broader one that includes it). Get one email template in full: name, subject, body, folder, attachments, and its created and updated timestamps. | Not stated |
| PUT | /v3/email-templates/{id} | Update an email template, Requires the `sequences:write` scope (or a broader one that includes it). Change a template's content. Name and body are required every time, so send it in full, anything left out is overwritten. | Not stated |
| DELETE | /v3/email-templates/{id} | Delete an email template, Requires the `sequences:write` scope (or a broader one that includes it). Permanently delete an email template by id. There is no undo, and a successful call returns no content. | Not stated |
| POST | /v3/email-templates/{id}/clone | Clone an email template, Requires the `sequences:write` scope (or a broader one that includes it). Copy a template so you can change it without touching the original. The copy keeps the folder and is named Copy of… | Not stated |
| POST | /v3/email-templates/{id}/move | Move an email template, Requires the `sequences:write` scope (or a broader one that includes it). File a template under a different folder. Send folderId with a matching folderType of personal or team; the folder must exist. | Not stated |
| POST | /v3/email-templates/{id}/render | Render an email template, Requires the `sequences:operate` scope (or a broader one that includes it). See how a template reads for a particular contact, with their field values filled in. contactId is required. | Not stated |
| POST | /v3/email-templates/{id}/send-test | Send a test email, Requires the `sequences:operate` scope (or a broader one that includes it). See how a template lands in a real inbox. Both the destination address and the sending account id are required. | Not stated |
| GET | /v3/email-templates/variables | Get template variables, Requires the `sequences:read` scope (or a broader one that includes it). Get the variables you can place in a template subject or body, grouped by category, each with its key and what it fills in. | Not stated |
| GET | /v3/email-template-folders | List email template folders, Requires the `sequences:read` scope (or a broader one that includes it). Get every folder available for organizing email templates, personal, team, community, and organization, in one array. | Not stated |
| POST | /v3/email-template-folders | Create an email template folder, Requires the `sequences:write` scope (or a broader one that includes it). Create a folder to group email templates under. Pick personal or team, with names up to 128 characters and unique per type. | Not stated |
| GET | /v3/email-template-folders/{id} | Get an email template folder, Requires the `sequences:read` scope (or a broader one that includes it). Get one email template folder by id. The foldertype query parameter is required: personal, team, community, or organization. | Not stated |
| PUT | /v3/email-template-folders/{id} | Update an email template folder, Requires the `sequences:write` scope (or a broader one that includes it). Rename an email template folder, passing its foldertype. Templates stay put, and default folders cannot be renamed. | Not stated |
| DELETE | /v3/email-template-folders/{id} | Delete an email template folder, Requires the `sequences:write` scope (or a broader one that includes it). Delete an email template folder, passing its foldertype. Team folders must be emptied first; personal ones just unfile. | Not stated |
| POST | /v3/email-template-folders/{id}/share | Share an email template folder, Requires the `sequences:write` scope (or a broader one that includes it). Move one of your personal template folders, and everything in it, across to your team. No request body needed. | Not stated |
| POST | /v3/email-template-attachments | Upload a template attachment, Upload a file to use as an email template attachment. Returns the attachment id you pass when creating or updating a template. | Not stated |
| POST | /v3/email-validations/estimate | Estimate email validation, Requires the `contacts:read` scope (or a broader one that includes it). Size and price an email validation run before committing. Nothing is queued and no credits are held. Up to 10,000 contact ids. | free: nothing queued, no credits held |
| POSTasync | /v3/email-validations/schedule | Schedule email validation, Requires the `contacts:operate` scope (or a broader one that includes it). Start validating specific contacts' email addresses. Up to 10,000 ids; call estimate first for the counts and credit cost. | email validation credits, reserved at scheduling (creditsReserved); price it first with the free /estimate |
| GET | /v3/holiday-calendars | List holiday calendars, Requires the `sequences:read` scope (or a broader one that includes it). See which holiday calendars you can link to a schedule, your team's custom ones plus Reply's country calendars. | Not stated |
| POST | /v3/holiday-calendars | Create a holiday calendar, Requires the `sequences:write` scope (or a broader one that includes it). Build your own holiday calendar from dates you supply. Each entry needs a name, a start date, and an end date. | Not stated |
| GET | /v3/holiday-calendars/{id} | Get a holiday calendar, Requires the `sequences:read` scope (or a broader one that includes it). Get one holiday calendar in full: name, type, country code, the repeat setting, and every holiday with its dates. | Not stated |
| PUT | /v3/holiday-calendars/{id} | Update a holiday calendar, Requires the `sequences:write` scope (or a broader one that includes it). Change a custom calendar's name, repeat setting, or days. The holidays array replaces the set outright, so send it all. | Not stated |
| DELETE | /v3/holiday-calendars/{id} | Delete a holiday calendar, Requires the `sequences:write` scope (or a broader one that includes it). Delete a custom calendar you created. It detaches from every schedule that used it; Reply's country calendars can't go. | Not stated |
| GET | /v3/holiday-calendars/{id}/export-csv | Export a holiday calendar as CSV, Requires the `sequences:read` scope (or a broader one that includes it). Download a holiday calendar as CSV, listing each holiday's name and dates as yyyy-MM-dd. The file is named after it. | Not stated |
| GET | /v3/inbox/threads | List inbox threads, Requires the `inbox:read` scope (or a broader one that includes it). Browse your inbox, email and LinkedIn conversations with contacts, most recently active first. Paged with top and skip. | Not stated |
| POST | /v3/inbox/threads/filter | Filter inbox threads, Requires the `inbox:read` scope (or a broader one that includes it). Use this endpoint when you need the inbox threads matching specific criteria, a search term, channel, owner, sequence, email or LinkedIn account, contact, category… | Not stated |
| GET | /v3/inbox/threads/{id} | Get inbox thread, Requires the `inbox:read` scope (or a broader one that includes it). Get one conversation in full, with its message history in order. Use the messages endpoint to page a long exchange. | Not stated |
| DELETE | /v3/inbox/threads/{id} | Delete inbox thread, Requires the `inbox:operate` scope (or a broader one that includes it). Permanently delete one conversation and its messages. Use bulk-delete to remove several in one call. | Not stated |
| POST | /v3/inbox/threads/bulk-delete | Bulk-delete inbox threads, Requires the `inbox:operate` scope (or a broader one that includes it). Use this endpoint when you need to permanently remove several inbox conversations in one call. Threads are processed one by one and successful deletions are… | Not stated |
| POST | /v3/inbox/threads/mark-as-read | Mark threads as read, Requires the `inbox:operate` scope (or a broader one that includes it). Use this endpoint when you need to clear the unread state on one or more conversations, for example after your own app has shown them to the user. Threads that are… | Not stated |
| POST | /v3/inbox/threads/mark-as-unread | Mark threads as unread, Requires the `inbox:operate` scope (or a broader one that includes it). Use this endpoint when you need to flag one or more conversations as needing attention again by restoring their unread state. Threads are processed one by one… | Not stated |
| GET | /v3/inbox/threads/{id}/messages | List messages in an inbox thread, Requires the `inbox:read` scope (or a broader one that includes it). Page through one conversation's messages, oldest first. Email messages carry recipient and subject; LinkedIn ones don't. | Not stated |
| POST | /v3/inbox/threads/{id}/messages | Send a reply within a thread, Requires the `inbox:operate` scope (or a broader one that includes it). Reply to a contact inside an existing conversation. The channel in your body must match the thread's, or it's rejected. | Not stated |
| PUT | /v3/inbox/threads/{id}/category | Assign or clear a thread's category, Requires the `inbox:operate` scope (or a broader one that includes it). File one conversation under an inbox category, or send categoryId as null to clear it. A thread sits in at most one. | Not stated |
| PUT | /v3/inbox/threads/{id}/meeting-intent | Toggle thread meeting-intent, Requires the `inbox:operate` scope (or a broader one that includes it). Mark a conversation as one where the contact wants to book a meeting, or clear it. The thread filter can use this flag. | Not stated |
| POST | /v3/inbox/threads/{id}/ai-draft/generate | Generate an AI draft reply, Generate an AI-suggested reply for an inbox thread. Each call makes a fresh draft, so it also powers Regenerate. | Not stated |
| POST | /v3/inbox/threads/{id}/ai-draft/feedback | [Coming soon: docs say available by late November 2026] Submit feedback on a generated AI draft, Records a thumbs-up / thumbs-down on the AI-generated draft, with optional dislike reasons and a freeform comment. Used as a training signal. Requires the AI SDR… | Not stated |
| GET | /v3/inbox/threads/categories | List inbox categories, Requires the `inbox:read` scope (or a broader one that includes it). Get the categories you can file conversations under, including Reply's reserved ones, each with its unread count. | Not stated |
| POST | /v3/inbox/threads/categories | Create inbox category, Requires the `inbox:write` scope (or a broader one that includes it). Use this endpoint when you need a category of your own to sort inbox conversations under. Provide a name, unique within your team, ignoring case, and optionally a… | Not stated |
| GET | /v3/inbox/threads/categories/{id} | Get inbox category, Requires the `inbox:read` scope (or a broader one that includes it). Get one inbox category by id: its name, color, whether it's reserved by Reply, and its current unread thread count. | Not stated |
| PUT | /v3/inbox/threads/categories/{id} | Update inbox category, Requires the `inbox:write` scope (or a broader one that includes it). Use this endpoint when you need to rename a category or change its color. Both name and color are replaced by what you send, so include the values you want to keep.… | Not stated |
| DELETE | /v3/inbox/threads/categories/{id} | Delete inbox category, Requires the `inbox:write` scope (or a broader one that includes it). Delete one of your own inbox categories. Threads filed under it are unlinked and stay put. Reserved categories return 403. | Not stated |
| POST | /v3/inbox/threads/categories/{id}/thread-links/bulk | Assign threads to a category, Requires the `inbox:operate` scope (or a broader one that includes it). Use this endpoint when you need to file several conversations under this category at once. A thread sits in at most one category, so any earlier category on… | Not stated |
| POST | /v3/inbox/threads/categories/{id}/thread-links/bulk-delete | Unassign threads from a category, Requires the `inbox:operate` scope (or a broader one that includes it). Use this endpoint when you need to take several conversations out of this category. A supplied thread filed under a different category is left alone.… | Not stated |
| GET | /v3/linkedin-accounts | List LinkedIn accounts, Requires the `channels:read` scope (or a broader one that includes it). Get the LinkedIn accounts connected to Reply, with connection state and automation limits. One call, no paging. | Not stated |
| GET | /v3/linkedin-accounts/{id} | Get a LinkedIn account, Requires the `channels:read` scope (or a broader one that includes it). Get one connected LinkedIn account in full: profile, account and cookie status, daily usage, limits, and revoke settings. | Not stated |
| DELETE | /v3/linkedin-accounts/{id} | Delete a LinkedIn account, Requires the `channels:write` scope (or a broader one that includes it). Disconnect one LinkedIn account. An account still used by a sequence is rejected unless you pass force=true. | Not stated |
| POST | /v3/linkedin-accounts/bulk-delete | Bulk delete LinkedIn accounts, Requires the `channels:write` scope (or a broader one that includes it). Disconnect up to 100 LinkedIn accounts in one call. Set force to true to delete accounts still used by sequences. | Not stated |
| POST | /v3/linkedin-accounts/{id}/toggle-status | Toggle LinkedIn account status, Requires the `channels:operate` scope (or a broader one that includes it). Pause or resume LinkedIn automation on one account. The call flips between enabled and disabled and returns the result. | Not stated |
| PUT | /v3/linkedin-accounts/{id}/limits | Update LinkedIn account limits, Requires the `channels:operate` scope (or a broader one that includes it). Cap daily LinkedIn automation per account: connection requests, messages, InMails, profile views, and more. | Not stated |
| PUT | /v3/linkedin-accounts/{id}/revoke-settings | Update LinkedIn account revoke settings, Requires the `channels:write` scope (or a broader one that includes it). Have an account withdraw its own unanswered LinkedIn invitations. Set enabled and the days a request may stay pending. | Not stated |
| PUT | /v3/linkedin-accounts/{id}/voice | Link a voice to a LinkedIn account, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `channels:write` scope (or a broader one that includes it). Pick… | Not stated |
| DELETE | /v3/linkedin-accounts/{id}/voice | Unlink the voice from a LinkedIn account, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `channels:write` scope (or a broader one that includes… | Not stated |
| POST | /v3/linkedin-accounts/connection-link | Create a connection link, Requires the `channels:write` scope (or a broader one that includes it). Invite a named LinkedIn account to connect. Returns a link to hand to the profile owner plus the pending account id. | Not stated |
| POST | /v3/linkedin-accounts/connect | Create a direct connection link, Requires the `channels:write` scope (or a broader one that includes it). Get a connection link without naming the account up front, the name is captured as the link is completed. | Not stated |
| POST | /v3/linkedin-accounts/{id}/reconnect | Reconnect a LinkedIn account, Requires the `channels:write` scope (or a broader one that includes it). Get a fresh connection link for a connected LinkedIn account whose session cookie has expired and stopped working. | Not stated |
| GET | /v3/linkedin-accounts/pending | List pending LinkedIn accounts, Requires the `channels:read` scope (or a broader one that includes it). Track LinkedIn accounts invited by link but not yet connected, with the link, its expiry, and whether it has expired. | Not stated |
| DELETE | /v3/linkedin-accounts/pending/{id} | Delete a pending LinkedIn account, Requires the `channels:write` scope (or a broader one that includes it). Cancel an outstanding LinkedIn connection invitation, for instance when its link expired or went to the wrong person. | Not stated |
| POSTasync | /v3/live-data/searches/preview | Preview a Live Data search, Requires the `contacts:write` scope (or a broader one that includes it). Size a Live Data audience before spending on it. Nothing is saved and no contacts are added, so you can try combinations. | free: sizes a Live Data audience before spending; nothing saved, no contacts added |
| GET | /v3/live-data/searches | List Live Data searches, Requires the `contacts:read` scope (or a broader one that includes it). Get the Live Data searches your team has run, newest first, each with status, contacts found, and credits used. | Not stated |
| POST | /v3/live-data/searches | Start a Live Data search, Requires the `contacts:write` scope (or a broader one that includes it). Run a set of Live Data filters and add the people it matches to your contacts. Send filters and contactsCountToAdd. | spends Live Data credits (each search reports credits used); size it first with the free /preview |
| GET | /v3/live-data/searches/{id} | Get a Live Data search, Requires the `contacts:read` scope (or a broader one that includes it). Get one Live Data search by id, status, contacts found, credits used, target sequence and lists, plus its filters. | Not stated |
| GET | /v3/live-data/filter-values/industries | Live Data industries typeahead, Requires the `contacts:read` scope (or a broader one that includes it). Get the industry names a Live Data search can filter on. Each is a plain string you pass in the industries filter. | Not stated |
| GET | /v3/live-data/filter-values/departments | Departments typeahead, Requires the `contacts:read` scope (or a broader one that includes it). Get the department names a Live Data search can filter on. Each is a plain string you pass in the departments filter. | Not stated |
| GET | /v3/live-data/filter-values/seniorities | Seniorities typeahead, Requires the `contacts:read` scope (or a broader one that includes it). Get the seniority levels a Live Data search can filter on. This filter takes a plain array of strings, unlike the others. | Not stated |
| GET | /v3/live-data/filter-values/locations | Locations typeahead, Requires the `contacts:read` scope (or a broader one that includes it). Get the place names a Live Data search can filter on. Mixes countries, regions, and cities, with no separate country list. | Not stated |
| GET | /v3/live-data/filter-values/job-titles | Job titles typeahead, Requires the `contacts:read` scope (or a broader one that includes it). Get the job titles a Live Data search can filter on. Each is a plain string you pass in the jobTitles filter. | Not stated |
| POST | /v3/reporting/emails/overview | Get email reporting overview, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need the headline email numbers for a period as one team-wide total with no per-member or per-sequence split, how many contacts… | Not stated |
| POST | /v3/reporting/calls/overview | Get calls reporting overview, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need call activity for a period rolled up two ways at once, a single total for the whole selection covering calls placed… | Not stated |
| POST | /v3/reporting/tasks/overview | Get tasks reporting overview, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need task volume for a period rolled up two ways at once, a total task count with a count and share of the total for each task… | Not stated |
| POST | /v3/reporting/linkedin/overview | Get LinkedIn reporting overview, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need LinkedIn activity for a period as one team-wide total, connection requests sent and accepted, connection notes, regular… | Not stated |
| POST | /v3/reporting/team-performance/overview | Get team performance overview, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need to compare the people on your team over a period, meetings booked, contacts in sequences, meeting conversion rate… | Not stated |
| POST | /v3/reporting/channel-efficiency/overview | Get channel efficiency overview, Requires the `reporting:read` scope (or a broader one that includes it). Compare channels for a period: contacts touched, touches across email, SMS, calls, tasks, and LinkedIn, replies, and meetings. | Not stated |
| POST | /v3/reporting/emails | List email activity, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need the individual emails behind the email report rather than its totals, one row per email sent, carrying the contact, the email… | Not stated |
| POST | /v3/reporting/calls | List call activity, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need the individual calls behind the calls report rather than its totals, one row per call, oldest first, carrying the team member who… | Not stated |
| POST | /v3/reporting/tasks | List task activity, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need the individual tasks behind the tasks report rather than its totals, one row per task ordered by due date, carrying the assignee… | Not stated |
| POST | /v3/reporting/linkedin | List LinkedIn activity, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need the individual LinkedIn actions behind the LinkedIn report rather than its totals, one row per action, oldest first, carrying… | Not stated |
| POST | /v3/reporting/team-performance/meetings | List meetings, Requires the `reporting:read` scope (or a broader one that includes it). Use this endpoint when you need the individual meetings behind the team performance report rather than its totals, one row per meeting, oldest first, carrying the team… | Not stated |
| GET | /v3/schedules | List schedules, Requires the `sequences:read` scope (or a broader one that includes it). Get every schedule your team can use. A schedule sets the weekday windows a sequence may send in. One call, no paging. | Not stated |
| POST | /v3/schedules | Create a schedule, Requires the `sequences:write` scope (or a broader one that includes it). Create a sending schedule for your sequences. The name must be unique in your team, and timezoneId takes a Windows time zone id. | Not stated |
| GET | /v3/schedules/{id} | Get a schedule, Requires the `sequences:read` scope (or a broader one that includes it). Get one schedule in full: its time zone, main and follow-up windows, and the flags controlling how they apply. | Not stated |
| PUT | /v3/schedules/{id} | Update a schedule, Requires the `sequences:write` scope (or a broader one that includes it). Replace a schedule in full. Send every value you want to keep, including the complete main and follow-up timings arrays. | Not stated |
| DELETE | /v3/schedules/{id} | Delete a schedule, Requires the `sequences:write` scope (or a broader one that includes it). Delete a schedule for good. Rejected while a sequence, template, or someone's default is still using it. | Not stated |
| POST | /v3/schedules/{id}/set-default | Set default schedule, Requires the `sequences:operate` scope (or a broader one that includes it). Pick the schedule your new sequences start with. The default is yours alone and doesn't change what teammates use. | Not stated |
| GET | /v3/schedules/{id}/holiday-calendars | List linked holiday calendars, Requires the `sequences:read` scope (or a broader one that includes it). See which holiday calendars are attached to a schedule, each in short form with its id, name, type, and country code. | Not stated |
| POST | /v3/schedules/{id}/holiday-calendar-links | Link a holiday calendar to a schedule, Requires the `sequences:operate` scope (or a broader one that includes it). Have a schedule observe a holiday calendar. A schedule can hold several, but linking the same one twice is rejected. | Not stated |
| DELETE | /v3/schedules/{id}/holiday-calendar-links/{calendarId} | Unlink a holiday calendar from a schedule, Requires the `sequences:operate` scope (or a broader one that includes it). Stop a schedule observing a holiday calendar. The calendar itself stays available to other schedules. | Not stated |
| GET | /v3/sequences | List all sequences, Requires the `sequences:read` scope (or a broader one that includes it). Browse the sequences you can work with. Paged with top and skip, and filterable by status, owner, folder, and name. | Not stated |
| POST | /v3/sequences | Create a sequence, Requires the `sequences:write` scope (or a broader one that includes it). Create a sequence to send from. Name and at least one step are required, a sequence with no steps has nothing to send and cannot be started. Omit scheduleId to fall… | Not stated |
| GET | /v3/sequences/count | Count sequences, Requires the `sequences:read` scope (or a broader one that includes it). Count the sequences matching a filter without fetching them. Takes the same filters as the list endpoint. | Not stated |
| GET | /v3/sequences/{id} | Get a sequence, Requires the `sequences:read` scope (or a broader one that includes it). Get one sequence in full: name, status, owner, schedule, settings, connected accounts, and its complete list of steps. | Not stated |
| PATCH | /v3/sequences/{id} | Update a sequence, Requires the `sequences:write` scope (or a broader one that includes it). Change part of a sequence and leave the rest. settings merges key by key; account lists replace what's there. | Not stated |
| DELETE | /v3/sequences/{id} | Delete a sequence, Requires the `sequences:write` scope (or a broader one that includes it). Delete a sequence by id. Its contacts stay in your account, but the sequence can't be restored, archive it instead. | Not stated |
| POST | /v3/sequences/{id}/start | Start a sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Start a sequence or resume a paused one. It needs contacts, a connected email account, and a schedule with sending hours. | Not stated |
| POST | /v3/sequences/{id}/pause | Pause a sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Stop a running sequence sending further steps while keeping it and its contacts in place. It must have started once. | Not stated |
| POST | /v3/sequences/{id}/archive | Archive a sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Put a sequence aside without deleting it. Pause it first, and note that archiving removes every contact currently in it. | Not stated |
| POST | /v3/sequences/{id}/unarchive | Unarchive a sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Bring an archived sequence back to its old status. Its contacts aren't put back, so add them again before starting. | Not stated |
| PUT | /v3/sequences/{id}/owner | Change sequence owner, Requires the `sequences:write` scope (or a broader one that includes it). Hand one sequence to another team member by user id. Reassigning is restricted to the team owner outside an organization. | Not stated |
| POST | /v3/sequences/start | Bulk start sequences, Requires the `sequences:operate` scope (or a broader one that includes it). Start up to 1000 sequences in one call. Each needs contacts, a connected email account, and a schedule with sending hours. | Not stated |
| POST | /v3/sequences/pause | Bulk pause sequences, Requires the `sequences:operate` scope (or a broader one that includes it). Pause up to 1000 running sequences in one call. Only currently active ones are paused; the rest are reported back. | Not stated |
| POST | /v3/sequences/archive | Bulk archive sequences, Requires the `sequences:write` scope (or a broader one that includes it). Archive up to 1000 sequences in one call. Each must be paused or never started, and its contacts are taken out. | Not stated |
| POST | /v3/sequences/unarchive | Bulk unarchive sequences, Requires the `sequences:write` scope (or a broader one that includes it). Bring up to 1000 sequences out of the archive. Each returns to its old status, but its contacts are not put back. | Not stated |
| POST | /v3/sequences/bulk-delete | Bulk delete sequences, Requires the `sequences:write` scope (or a broader one that includes it). Delete up to 1000 sequences in one call. Their contacts stay in your account, but a deleted sequence can't be restored. | Not stated |
| POST | /v3/sequences/batch/owner | Bulk change sequence owner, Requires the `sequences:write` scope (or a broader one that includes it). Hand up to 1000 sequences to another team member. Reassigning is restricted to the team owner outside an organization. | Not stated |
| POST | /v3/sequences/{id}/save-as-template | Save a sequence as a template, Requires the `sequences:write` scope (or a broader one that includes it). Reuse a sequence's structure for future ones. Name the template and set scope to organization to share it wider. | Not stated |
| POST | /v3/sequences/create-from-template | Create a sequence from a template, Requires the `sequences:write` scope (or a broader one that includes it). Build a new sequence from one of your saved templates. Pass templateId, and optionally a folder to file it into. | Not stated |
| POST | /v3/sequences/{id}/stats | Get sequence stats, Requires the `sequences:read` scope (or a broader one that includes it). Get engagement figures for one sequence. Set the window with a date range preset or an explicit from and to, not both. | Not stated |
| POST | /v3/sequences/{id}/stats/emails | Get sequence email stats, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `sequences:read` scope (or a broader one that includes it). Compare A/B… | Not stated |
| POST | /v3/sequences/{id}/stats/linkedin | Get sequence LinkedIn stats, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `sequences:read` scope (or a broader one that includes it). Compare A/B… | Not stated |
| POST | /v3/sequences/stats | Get stats for all sequences, Requires the `sequences:read` scope (or a broader one that includes it). Get email and LinkedIn engagement per sequence. The window is capped at 31 days, as a preset or an explicit from and to. | Not stated |
| GET | /v3/sequences/{id}/contacts | List contacts in sequence, Requires the `sequences:read` scope (or a broader one that includes it). See who's enrolled in a sequence and where each stands: status, current step, added date, opt-out, and call status. | Not stated |
| GET | /v3/sequences/{id}/contacts/count | Count contacts in sequence, Requires the `sequences:read` scope (or a broader one that includes it). Count the contacts enrolled in a sequence, useful for sizing a paging loop before walking the list endpoint. | Not stated |
| GET | /v3/sequences/{id}/contacts/{contact_id} | Get a contact in a sequence, Requires the `sequences:read` scope (or a broader one that includes it). Get one contact's state inside a sequence: status, the step they're waiting on, when they were added, and opt-out. | Not stated |
| GET | /v3/sequences/{id}/contacts/state | List contacts in sequence with extended state, Requires the `sequences:read` scope (or a broader one that includes it). Get a compact view of a sequence's contacts, adding only the extra columns you ask for via additionalColumns. | Not stated |
| DELETE | /v3/sequences/{id}/contact-links/{contact_id} | Remove contact from sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Take one contact out of a sequence. They stop progressing, but the contact and their history stay in your account. | Not stated |
| POST | /v3/sequences/{id}/contact-links/bulk | Bulk add contacts to sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Enroll contacts in a sequence, up to 10,000 ids per call. Set removeFromExisting to pull them out of their current ones. | Not stated |
| POST | /v3/sequences/{id}/contact-links/bulk-delete | Bulk remove contacts from sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Use this endpoint when you need to take several contacts out of a sequence in one call: list them in contactIds, at least one and with no… | Not stated |
| POST | /v3/sequences/{id}/contacts/set-status-in-sequence | Set contacts' status in this sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Set contacts to active, paused, finished, or outOfOffice in this sequence alone. Up to 100 ids, with no duplicates. | Not stated |
| POST | /v3/sequences/{id}/contacts/set-replied | Mark or unmark contacts as replied in this sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Record replies that reached you elsewhere against this sequence alone. Marking as replied finishes the contact here. | Not stated |
| POST | /v3/sequences/{id}/contacts/set-bounced | Mark or unmark contacts as bounced in this sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Record bounces against this sequence alone. Clearing the flag also requires resendEmails to say what to do next. | Not stated |
| POST | /v3/sequences/{id}/contacts/set-email-account | Set the sending mailbox for contacts in this sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Repoint contacts already in this sequence at a different sending mailbox. Up to 100 ids; the mailbox must already be linked. | Not stated |
| GET | /v3/sequences/{sequence_id}/contacts/{contact_id}/preview | Get sequence preview for a contact, Requires the `sequences:read` scope (or a broader one that includes it). See the messages one contact will receive from a sequence, rendered with their own data, one entry per messaging step. | Not stated |
| POST | /v3/sequences/{sequence_id}/contacts/{contact_id}/preview/reset | Reset manual edits in a sequence preview, Requires the `sequences:operate` scope (or a broader one that includes it). Discard the copy held for one contact, generated messages and hand edits alike, and fall back to the step templates. | Not stated |
| GET | /v3/sequences/{id}/email-accounts | List email accounts in sequence, Requires the `sequences:read` scope (or a broader one that includes it). See which email accounts a sequence sends from, each with its address, sender name, daily limit, and connection status. | Not stated |
| POST | /v3/sequences/{id}/email-account-links | Assign email account to sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Add one more mailbox for a sequence to send from. A sequence can hold up to 100 linked accounts, and the call is idempotent. | Not stated |
| PUT | /v3/sequences/{id}/email-account-links | Set sequence email accounts, Requires the `sequences:operate` scope (or a broader one that includes it). Replace a sequence's sending mailboxes with an exact list. Accounts missing from it are unlinked; an empty array clears all. | Not stated |
| DELETE | /v3/sequences/{id}/email-account-links/{email_account_id} | Remove email account from sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Stop a sequence sending from one of its mailboxes. The account itself stays connected and works in other sequences. | Not stated |
| GET | /v3/sequence-folders | List all sequence folders, Requires the `sequences:read` scope (or a broader one that includes it). Get the folders you have for organizing sequences, sorted by name, in one array. Folders are personal to you. | Not stated |
| POST | /v3/sequence-folders | Create a sequence folder, Requires the `sequences:write` scope (or a broader one that includes it). Create a folder to group sequences under. The name is capped at 128 characters and must be unique among yours. | Not stated |
| GET | /v3/sequence-folders/{id} | Get a sequence folder, Requires the `sequences:read` scope (or a broader one that includes it). Get one sequence folder by id, with its name. Folders are personal, so someone else's id reports not found. | Not stated |
| PUT | /v3/sequence-folders/{id} | Update a sequence folder, Requires the `sequences:write` scope (or a broader one that includes it). Rename one of your sequence folders. Only the name changes; the sequences filed in it stay where they are. | Not stated |
| DELETE | /v3/sequence-folders/{id} | Delete a sequence folder, Requires the `sequences:write` scope (or a broader one that includes it). Delete one of your sequence folders. The sequences inside are kept and simply become unfiled, ready to refile. | Not stated |
| GET | /v3/sequence-folders/{id}/sequences | List sequences in a folder, Requires the `sequences:read` scope (or a broader one that includes it). See which sequences are filed in a folder. Paged with top and skip, sortable by title, created, or people. | Not stated |
| POST | /v3/sequence-folders/{id}/sequence-links/bulk | Bulk assign sequences to a folder, Requires the `sequences:operate` scope (or a broader one that includes it). File up to 1000 sequences into a folder in one call. A sequence belongs to one folder, so this moves it out of any other. | Not stated |
| POST | /v3/sequence-folders/{id}/sequence-links/bulk-delete | Bulk unassign sequences from a folder, Requires the `sequences:operate` scope (or a broader one that includes it). Take up to 1000 sequences out of a folder without deleting them, they stay in your account and become unfiled. | Not stated |
| GET | /v3/sequences/{id}/linkedin-accounts | List LinkedIn accounts for a sequence, Requires the `sequences:read` scope (or a broader one that includes it). See which LinkedIn accounts a sequence sends its LinkedIn steps from, each with its id, name, profile URL, and status. | Not stated |
| POST | /v3/sequences/{id}/linkedin-account-links | Assign a LinkedIn account to a sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Add one more LinkedIn account for a sequence's LinkedIn steps. It links whatever state the account is currently in. | Not stated |
| DELETE | /v3/sequences/{id}/linkedin-account-links/{linkedInAccountId} | Remove a LinkedIn account from a sequence, Requires the `sequences:operate` scope (or a broader one that includes it). Stop a sequence sending LinkedIn steps from one linked account. The account stays connected and works elsewhere. | Not stated |
| GET | /v3/voices | List voices, Requires the `channels:read` scope (or a broader one that includes it). Get the cloned voices available to your team for AI voice message steps, including which one is the team default. One call, no paging. | Not stated |
| POST | /v3/voices | Create a voice, Requires the `channels:write` scope (or a broader one that includes it). Clone a new voice from an audio sample. Send multipart/form-data with audioFile, name, and a 2-3 character languageCode. Requires a connected LinkedIn account; the… | Not stated |
| GET | /v3/voices/{id} | Get a voice, Requires the `channels:read` scope (or a broader one that includes it). Get one voice in full: name, language code, default status, and creation date. | Not stated |
| PUT | /v3/voices/{id} | Rename a voice, Requires the `channels:write` scope (or a broader one that includes it). Rename a voice. Language and recording are fixed at creation and cannot be changed. | Not stated |
| DELETE | /v3/voices/{id} | Delete a voice, Requires the `channels:write` scope (or a broader one that includes it). Delete a voice and unlink it from every LinkedIn account using it. The default voice cannot be deleted while other voices exist. | Not stated |
| POST | /v3/voices/{id}/set-default | Set a voice as the team default, Requires the `channels:write` scope (or a broader one that includes it). Make a voice the team default for LinkedIn accounts with no voice linked. Only one default at a time; the previous default is cleared. | Not stated |
| GET | /v3/voices/languages | List supported voice languages, Requires the `channels:read` scope (or a broader one that includes it). Get the supported language codes for voice creation as a code-to-name dictionary. Pass a code as languageCode when creating a voice. | Not stated |
| GET | /v3/voices/background-noises | List background noise presets, Requires the `channels:read` scope (or a broader one that includes it). Get the background noise presets for AI voice message steps. Pass a preset id as backgroundNoiseId when creating a step. | Not stated |
| GET | /v3/sequences/{id}/steps | List all sequence steps, Requires the `sequences:read` scope (or a broader one that includes it). Get every step in a sequence. Read type first to know the shape, and parentId to see how the steps chain together. Steps are ordered by their position number in… | Not stated |
| POST | /v3/sequences/{id}/steps | Create a sequence step, Requires the `sequences:write` scope (or a broader one that includes it). Add a step to a sequence. `type` picks what it does, `email`, `linkedIn`, `call`, `sms`, `condition`, and more; `linkedIn` adds `actionType`. | Not stated |
| GET | /v3/sequences/{id}/steps/{step_id} | Get a sequence step, Requires the `sequences:read` scope (or a broader one that includes it). Get one step of a sequence by id. Read `type`, and `actionType` for `linkedIn`, to know which other fields to expect. | Not stated |
| PUT | /v3/sequences/{id}/steps/{step_id} | Update a sequence step, Requires the `sequences:write` scope (or a broader one that includes it). Change what a step does. Send the whole step; give each variant an id, or it's added as new, and omitted ones are dropped. | Not stated |
| DELETE | /v3/sequences/{id}/steps/{step_id} | Delete a sequence step, Requires the `sequences:write` scope (or a broader one that includes it). Delete a step from a sequence. Children re-attach to its parent by default; condition steps need a mode for the branches. | Not stated |
| POST | /v3/sequences/{id}/steps/bulk | Bulk create sequence steps, Requires the `sequences:write` scope (or a broader one that includes it). Add several steps to a sequence in one call, processed in order, each appended after the one before it. | Not stated |
| POST | /v3/sequences/{id}/steps/bulk-delete | Bulk delete sequence steps, Requires the `sequences:write` scope (or a broader one that includes it). Delete up to 100 steps from a sequence at once. Each step's children re-attach to its parent as it goes. | Not stated |
| POST | /v3/sequences/{id}/steps/{step_id}/enable | Enable step variants, Requires the `sequences:operate` scope (or a broader one that includes it). Bring variants of a step back into rotation after they were switched off. Each one is toggled on its own. | Not stated |
| POST | /v3/sequences/{id}/steps/{step_id}/disable | Disable step variants, Requires the `sequences:operate` scope (or a broader one that includes it). Take variants out of rotation without deleting them, handy for stopping one arm of an A/B test. Toggled one by one. | Not stated |
| GET | /v3/sequences/{id}/steps/{step_id}/variants | List step variants, Requires the `sequences:read` scope (or a broader one that includes it). Get the variants a step rotates between, each with its subject, message, enabled flag, and whether it has attachments. | Not stated |
| POST | /v3/sequences/{id}/steps/{step_id}/variants | Create a step variant, Requires the `sequences:write` scope (or a broader one that includes it). Add another variant so a step rotates between bodies. Text variants use JSON; LinkedIn voice uses multipart form data. A LinkedIn voice message step needs at… | Not stated |
| POST | /v3/sequences/{id}/steps/{step_id}/variants/bulk | Bulk create step variants, Requires the `sequences:write` scope (or a broader one that includes it). Add several text variants to one step in a single call. They're appended in the order you send them. | Not stated |
| POST | /v3/sequences/{id}/steps/{step_id}/variants/bulk-delete | Bulk delete step variants, Requires the `sequences:write` scope (or a broader one that includes it). Delete up to 100 variants from one step at once. Each is handled on its own, so the ones that can go still go. | Not stated |
| PUT | /v3/sequences/{id}/steps/{step_id}/variants/{variant_id} | Update a step variant, Requires the `sequences:write` scope (or a broader one that includes it). Change one variant of a step. Text variants use JSON; LinkedIn voice message variants use multipart form data. A LinkedIn voice message step needs at least one… | Not stated |
| DELETE | /v3/sequences/{id}/steps/{step_id}/variants/{variant_id} | Delete a step variant, Requires the `sequences:write` scope (or a broader one that includes it). Delete one variant from a step for good. A variant already sent to a contact can't go, and a step keeps one enabled. | Not stated |
| GET | /v3/sequences/steps/contact-filter-properties | List contact filter properties, Requires the `sequences:read` scope (or a broader one that includes it). See which contact properties a condition step can test, with the operators each accepts and any allowed values. | Not stated |
| GET | /v3/sequence-templates | List all sequence templates, Requires the `sequences:read` scope (or a broader one that includes it). See which sequence templates you can start a new sequence from. A blueprint for a whole sequence, not an email template. | Not stated |
| DELETE | /v3/sequence-templates/{id} | Delete a sequence template, Requires the `sequences:write` scope (or a broader one that includes it). Delete a sequence template so it's no longer offered. Team templates are shared, so any teammate who sees one can delete it. | Not stated |
| GET | /v3/rate-limits | [Coming soon: docs say available by mid October 2026] Get rate limits, No scope required, any valid API key can call this endpoint. See how much of each rate limit you have used and when it resets. Every named limit comes with the standard limit, the limit… | Not stated |
| GET | /v3/settings | Get settings, Requires the `settings:read` scope (or a broader one that includes it). Read your settings in one call: profile and time zone, email and inbox preferences, and the team-wide values you work under. | Not stated |
| PATCH | /v3/settings | Update settings, Requires the `settings:write` scope (or a broader one that includes it). Change part of your settings without resending the whole object. Anything you leave out stays exactly as it is. | Not stated |
| GET | /v3/tasks | List all tasks, Requires the `tasks:read` scope (or a broader one that includes it). Work through your to-do list, your own tasks, plus teammates' when your role allows. Each carries type, status, and dates. | Not stated |
| POST | /v3/tasks | Create a task, Requires the `tasks:write` scope (or a broader one that includes it). Create a task of your own. taskType, startAt, dueTo, and a template body are required; contactId for every type but toDo. | Not stated |
| POST | /v3/tasks/filter | Filter tasks, Requires the `tasks:read` scope (or a broader one that includes it). Narrow the task list by due date, type, status, or overdue. Every field is optional, so an empty object returns them all. | Not stated |
| GET | /v3/tasks/{id} | Get a task, Requires the `tasks:read` scope (or a broader one that includes it). Get everything about one task: type, status, the contact, the sequence step it came from, its dates, and its assignee. | Not stated |
| PUT | /v3/tasks/{id} | Update a task, Requires the `tasks:write` scope (or a broader one that includes it). Replace an open task in full. Send taskType, startAt, dueTo, and a template body every time; only open tasks can change. | Not stated |
| DELETE | /v3/tasks/{id} | Delete a task, Requires the `tasks:write` scope (or a broader one that includes it). Remove one task by id. An open task is cancelled and a completed one archived; either way it leaves your task lists. | Not stated |
| PUT | /v3/tasks/{id}/assigned-user | Reassign a task, Requires the `tasks:write` scope (or a broader one that includes it). Hand one task to a colleague by user id. They must be on your team, and your role must allow the reassignment. | Not stated |
| POST | /v3/tasks/{id}/complete | Complete a task, Requires the `tasks:operate` scope (or a broader one that includes it). Mark a task done without carrying it out. On a call task, pass callResolution to record how the call went. | Not stated |
| POST | /v3/tasks/{id}/execute | Execute and complete a task, Requires the `tasks:operate` scope (or a broader one that includes it). Carry a task out and complete it. Only manualEmail and sms tasks can be executed, use complete for any other type. | Not stated |
| POST | /v3/tasks/bulk-delete | Bulk delete tasks, Requires the `tasks:write` scope (or a broader one that includes it). Remove up to 100 tasks at once. Open tasks are cancelled and completed ones archived; either way they leave your lists. | Not stated |
| POST | /v3/tasks/batch/assign | Batch reassign tasks, Requires the `tasks:write` scope (or a broader one that includes it). Hand up to 100 tasks to a colleague. They must be on your team, or nothing is reassigned. Only failed ids come back. | Not stated |
| POST | /v3/tasks/batch/complete | Batch complete tasks, Requires the `tasks:operate` scope (or a broader one that includes it). Clear up to 100 tasks off the list without carrying them out. Sequence-step tasks close their step so the contact moves on. | Not stated |
| GET | /v3/whoami | Get current user, No scope required, any valid API key can call this endpoint. See which user an API key acts as, its userId, username, and teamId. The quickest way to confirm a key is valid. | Not stated |
| GET | /v3/whoami/team-users | List team users, No scope required, any valid API key can call this endpoint. List the users you work with, pairing each with their team. Handy for turning a userId into a name and email address. Each user also reports whether they own the workspace and… | Not stated |
| POST | /v3/teams/{team_id}/users/bulk | Add existing users to a team, **New.** This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the [developer Slack](/slack). Requires the `teams:write` scope (or a broader one that includes it). Give up to 50… | Not stated |
| GET | /v3/webhooks | List webhook subscriptions, Requires the `webhooks:read` scope (or a broader one that includes it). See the webhook subscriptions you've set up, each with its event, url, scope, enabled flag, and payload flags. | Not stated |
| POST | /v3/webhooks | Create a webhook subscription, Requires the `webhooks:write` scope (or a broader one that includes it). Have Reply call your service as activity happens. Set eventType to one supported event and url to an absolute endpoint. | Not stated |
| GET | /v3/webhooks/events | List supported event types, Requires the `webhooks:read` scope (or a broader one that includes it). Get the exact event names a subscription can listen to. Any value here works as eventType when you create or update one. | Not stated |
| GET | /v3/webhooks/{id} | Get a webhook subscription, Requires the `webhooks:read` scope (or a broader one that includes it). Get one subscription by id: the event it listens to, its url, scope, enabled flag, creation date, and payload flags. | Not stated |
| PUT | /v3/webhooks/{id} | Update a webhook subscription, Requires the `webhooks:write` scope (or a broader one that includes it). Repoint a subscription at a different url, event, or scope. It replaces the whole thing, so repeat the flags you keep. | Not stated |
| DELETE | /v3/webhooks/{id} | Delete a webhook subscription, Requires the `webhooks:write` scope (or a broader one that includes it). Delete a subscription for good. Deliveries stop at once and its failure log goes too, so read the logs first if needed. | Not stated |
| POST | /v3/webhooks/{id}/test | Send a test payload, Requires the `webhooks:operate` scope (or a broader one that includes it). Check your receiving endpoint is wired up before real activity arrives. Reply posts a sample payload and reports back. | Not stated |
| POST | /v3/webhooks/{id}/enable | Enable a webhook subscription, Requires the `webhooks:operate` scope (or a broader one that includes it). Start a paused subscription delivering again, including one Reply disabled after repeated delivery failures. | Not stated |
| POST | /v3/webhooks/{id}/disable | Disable a webhook subscription, Requires the `webhooks:operate` scope (or a broader one that includes it). Stop a subscription delivering without deleting it. It keeps its event, url, and settings until you enable it again. | Not stated |
| GET | /v3/webhooks/{id}/logs | Get webhook delivery logs, Requires the `webhooks:read` scope (or a broader one that includes it). See where deliveries went wrong. Only failed attempts are logged, each with the event id, HTTP status, and date. | Not stated |
No endpoint matches that filter.