API review

Outreach API review

Enterprise sales engagement and revenue platform (sequences, dialer, conversation intelligence, forecasting) with a JSON:API REST API (~254 operations) behind OAuth apps, a bulk/import API, webhooks and a hosted OAuth 2.1 MCP server; priced per seat plus AI credits, quote-only. Best for integrating with an enterprise customer's existing Outreach org.

Verified 25 Oct 2026 · 254 endpoints listed · Official MCP server

Pricing, plan by plan

US dollars, as Outreach's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.

Amplify Essentials

One-off pack

10,000 AI credits; per-user seats; Outreach MCP (Server & Client); no API-call allowance or custom objects listed

Plan details

Additional AI credit packs can be bought at any time (price not public)

Amplify Core

One-off pack

25,000 AI credits; 250,000 API calls (period not stated); 5 custom objects; 500 MB knowledge; Outreach MCP (Server & Client)

API included
Plan details

Additional AI credit packs can be bought at any time (price not public)

Amplify Plus

One-off pack

50,000 AI credits; 500,000 API calls (period not stated); 10 custom objects; 750 MB knowledge; Outreach MCP (Server & Client); everything in Essentials + Core

API included
Plan details

Additional AI credit packs can be bought at any time (price not public)

Amplify Pro

One-off pack

100,000 AI credits; 1,000,000 API calls (period not stated); 20 custom objects; 1,500 MB knowledge; everything in Plus (incl.

API included
Plan details

Outreach MCP)

Additional AI credit packs can be bought at any time (price not public)

Rate limits

Per user: 10,000 requests per hour, with X-RateLimit-Limit/Remaining/Reset (alias Retry-After) headers and 429 on excess.

LimitAmplify CoreAmplify PlusAmplify Pro
Api Calls250,000 API calls (period not stated)500,000 API calls (period not stated)1,000,000 API calls (period not stated)
More on limitsLess

Kaia recordings/transcripts: 3 calls/s and 6,000/day per org. Bulk: max 100,000 items per bulk request and 5 million records/day per org (429 beyond). Pagination: page[limit] <= 1,000, max offset 10,000.

How to get an API key

Outreach uses OAuth. The steps below follow Outreach's own docs.

  1. Create a Outreach account. API access starts on the Amplify Core plan.
  2. Create an Outreach app in the Developer Portal, configure API access (redirect URIs, scopes). Dev credentials work immediately for up to 10 people in the owning org; production credentials need publishing (public Marketplace apps need a demo and 5 beta customers). Access tokens expire in 7,200 s with refresh tokens. Alternative S2S token (RS256 JWT from your app key + install ID) covers only a limited endpoint set.
  3. Send it with every request: header: Authorization: Bearer <access_token>; Content-Type must be application/vnd.api+json.
  4. Make a first call: Get a Collection of Account Notes. Keep the key in an environment variable, never in the command.
    curl -X GET "https://api.outreach.io/api/v2/accountNotes" \
      -H "Authorization: Bearer $OUTREACH_ACCESS_TOKEN"

Where the docs live

WhatWhere
Documentationdevelopers.outreach.io/api
API referencedevelopers.outreach.io/api/reference/overview
OpenAPI specdevelopers.outreach.io/page-data/shared/oas-api/reference.yaml.json
llms.txtdevelopers.outreach.io/llms.txt
Changelogdevelopers.outreach.io/api/release-notes.md
Base URLhttps://api.outreach.io/api/v2
SDKsClient-extension JavaScript SDK (in-app extensions, not a REST client)

Strengths and limits

Where it fits

  • Integrating with an enterprise customer's existing Outreach org (sequences, prospects, accounts, opportunities, tasks, calls, mailings)
  • Event-driven sync via webhooks on mailing delivered/opened/replied/bounced and sequenceState changes
  • Large imports: bulk actions up to 100,000 items per request, CSV import and bulk upsert
  • Agent access with user-level RBAC via the hosted MCP (OAuth 2.1 + DCR)

Where it falls short

  • Self-serve or startup cold email: no public price, seats only via sales
  • Simple API-key scripts: every call needs an OAuth app (or S2S JWT for a limited endpoint set)
  • Deep pagination of huge collections: max offset 10,000, page limit 1,000

Worth knowing

  • No public pricing at all: every Amplify tier is 'Request pricing'.
  • Requests must send Content-Type application/vnd.api+json or get 415 (JSON:API 1.0).
  • Rate limit is per USER (10,000/h), so a single integration user is a bottleneck; Kaia transcript endpoints are 3/s and 6,000/day per org.
  • Max pagination offset is 10,000 and page[limit] max 1,000; page across ID ranges or tighter filters instead.
  • Development OAuth credentials are meant for up to 10 users of the owning org and grants can be expired/revoked; customer installs need a published app, and public Marketplace listing needs a demo plus 5 beta customers.
6 moreShow fewer
  • S2S tokens carry no user identity: reads work, but some writes need an extra authorizer user id or fail entirely.
  • OAuth client secrets are shown once; regenerate if lost.
  • From 1 Oct 2026 prospect responses drop contactHistogram by default (deprecation notice).
  • Bulk upsert batch results are deleted after 30 days.
  • Webhooks are not retried on any HTTP error status (500 and 429 count as delivered); only network failures get 3 retries 1 s apart, with a 5 s timeout.
  • Non-customers cannot self-serve API access: outreach.ai/platform/api routes to a manually reviewed 'Outreach API Access Request' form; the Developer Portal 'My apps' requires an existing Outreach user login.

Who should use it

Use Outreach for
Integrating with an enterprise customer's existing Outreach org (sequences, prospects, accounts, opportunities, tasks, calls, mailings)
Look elsewhere for
Self-serve or startup cold email: no public price, seats only via sales

If Outreach is not the answer

Other Email sending tools in this directory, each with its own review.

Before you build

Four things to settle first, each read off Outreach's own pages.

  • Confirm the API is on your planAPI access starts on the Amplify Core plan.
  • Keep the key out of your codeOAuth. It is sent as: header: Authorization: Bearer <access_token>; Content-Type must be application/vnd.api+json.
  • Design around the rate limitPer user: 10,000 requests per hour, with X-RateLimit-Limit/Remaining/Reset (alias Retry-After) headers and 429 on excess.
  • Know the catch before you scaleNo public pricing at all: every Amplify tier is 'Request pricing'.

Want us to build it for you?

Tell us what you want Outreach 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 outreach.ai/pricing, developers.outreach.io/api/reference/overview and developers.outreach.io/api/getting-started.md. Verified 25 Oct 2026.

All 254 endpointsFor developers: method, path, what it does and what it costs.

Base URL: https://api.outreach.io/api/v2

Bulk and async: Bulk actions with filters and confirmation step (batch state pending/confirming, poll GET /batches/{id}), CSV import API via presigned S3 upload, bulk upsert (JSON records, max 2 MB request; results kept 30 days); max 100,000 items per request and 5M records/day per org (429 beyond); import 'finished' webhook.

Webhooks: Webhooks are API resources (POST /webhooks) with resource+action filters, default '*'. Create/update payloads carry only changed attributes. Optional secret adds an Outreach-Webhook-Signature header (HMAC-SHA256 hexdigest of the body). No fixed sender IP list. Each webhook gets a cleanupToken for POST /webhooks/cleanup. Events: account created/updated/destroyed, call created/updated/destroyed, emailAddress *, import created/finished, kaiaRecording created, mailing created/updated/destroyed/bounced/delivered/opened/replied, opportunity *, opportunityProspectRole *, prospect *, sequence *, sequenceState created/updated/destroyed/advanced/finished, task created/updated/destroyed/completed and 1 more. Retries: No retry on any HTTP status (incl. 500 and 429, which count as acks); no redirects followed; 5 s response timeout; retries only on network failures: 4 attempts (3 retries) 1 s apart.

254 endpoints
MethodPathWhat it doesCost
GET/accountNotesGet a Collection of Account NotesNot stated
POST/accountNotesCreate a New Account NoteNot stated
DELETE/accountNotes/{id}Delete an Existing Account Note by IDNot stated
GET/accountNotes/{id}Get an Account Note by IDNot stated
PATCH/accountNotes/{id}Update an Account NoteNot stated
GET/accountsGet a Collection of AccountsNot stated
POST/accountsCreate a New AccountNot stated
DELETE/accounts/{id}Delete an Existing Account by IDNot stated
GET/accounts/{id}Get an Account by IDNot stated
PATCH/accounts/{id}Update an AccountNot stated
GET/auditLogsGet a Collection of Audit LogsNot stated
GET/batchItemsGet a Collection of Batch ItemsNot stated
GET/batchItems/{id}Get a Batch Item by IDNot stated
GET/batchesGet a Collection of BatchesNot stated
GET/batches/{id}Get a Batch by IDNot stated
POST/batches/{id}/actions/cancelCancel, ### Member Action Action to call to cancel the batchNot stated
POST/batches/{id}/actions/confirmConfirm, ### Member Action Action to call to confirm the batchNot stated
POSTasync/batches/actions/accountAddTagsAccount Add Tags, ### Bulk Action Adds tags to the accounts targeted by the query parameters (default: ALL) using the {tags} array of strings passed in request bodyNot stated
POSTasync/batches/actions/accountsAddAssignmentsAccounts Add Assignments, ### Bulk Action Adds assignments to the accounts targeted by the query parameters (default: ALL) using the {userIds} array of strings passed in request bodyNot stated
POSTasync/batches/actions/accountsAssignOwnerAccounts Assign Owner, ### Bulk Action assign an user with {ownerId} as owner to all the targeted accountsNot stated
POSTasync/batches/actions/accountsBulkModifyAccounts Bulk Modify, ### Bulk Action Modifies the accounts targeted by the query parameters (default: ALL) using the {field: value,...} pairs passed in request body. Alternative request body for a single field modificNot stated
POSTasync/batches/actions/accountsDestroyAllAccounts Destroy All, ### Bulk Action Deletes the accounts targeted by the query parameters (default: ALL)Not stated
POSTasync/batches/actions/accountsRemoveAllAssignmentsAccounts Remove All Assignments, ### Bulk Action Removes all assignments from the accounts targeted by the query parameters (default: ALL)Not stated
POSTasync/batches/actions/accountsRemoveAssignmentsAccounts Remove Assignments, ### Bulk Action Removes assignments from the accounts targeted by the query parameters (default: ALL) using the {userIds} array of strings passed in request bodyNot stated
POSTasync/batches/actions/accountsRemoveTagsAccounts Remove Tags, ### Bulk Action Removes tags from the accounts targeted by the query parameters (default: ALL) using the {tags} array of strings passed in request bodyNot stated
POSTasync/batches/actions/customObjectBulkDeleteCustom Object Bulk Delete, ### Bulk Action Action to delete custom objects of type selected by the query parameter {objectName}Not stated
POSTasync/batches/actions/customObjectBulkModifyCustom Object Bulk Modify, ### Bulk Action Action to modify custom objects of type selected by the query parameter {objectName}Not stated
POSTasync/batches/actions/prospectsAddAssignmentsProspects Add Assignments, ### Bulk Action Adds assignments to the prospects targeted by the query parameters (default: ALL) using the {userIds} array of strings passed in request bodyNot stated
POSTasync/batches/actions/prospectsAddTagsProspects Add Tags, ### Bulk Action Adds tags to the prospects targeted by the query parameters (default: ALL) using the {tags} array of strings passed in request bodyNot stated
POSTasync/batches/actions/prospectsAddToSequenceProspects Add To Sequence, ### Bulk Action Add Prospects To SequenceNot stated
POSTasync/batches/actions/prospectsAssignAccountProspects Assign Account, ### Bulk Action Sets the account to the prospects targeted by the query parameters (default: ALL) using the {accountId} which specifies the account to add to the prospectsNot stated
POSTasync/batches/actions/prospectsAssignOpportunityProspects Assign Opportunity, ### Bulk Action Sets the opportunity to the prospects targeted by the query parameters (default: ALL) using the {opportunityId} which specifies the account to add to the prospectsNot stated
POSTasync/batches/actions/prospectsAssignOwnerProspects Assign Owner, ### Bulk Action assign an user with {ownerId} as owner to all the targeted prospectsNot stated
POSTasync/batches/actions/prospectsBulkModifyProspects Bulk Modify, ### Bulk Action Modifies the prospects targeted by the query parameters (default: ALL) using the {field: value,...} pairs passed in request body Alternative request body for a single field modificNot stated
POSTasync/batches/actions/prospectsDestroyAllProspects Destroy All, ### Bulk Action Deletes the prospects targeted by the query parameters (default: ALL)Not stated
POSTasync/batches/actions/prospectsFinishAllProspects Finish All, ### Bulk Action For all prospects targeted by the query parameters (default: ALL), attempt to finish the associated prospect sequenceNot stated
POSTasync/batches/actions/prospectsPauseAllProspects Pause All, ### Bulk Action For all prospects targeted by the query parameters (default: ALL), attempt to pause the associated prospect sequenceNot stated
POSTasync/batches/actions/prospectsRemoveAllAssignmentsProspects Remove All Assignments, ### Bulk Action Removes all assignments from the prospects targeted by the query parameters (default: ALL)Not stated
POSTasync/batches/actions/prospectsRemoveAssignmentsProspects Remove Assignments, ### Bulk Action Removes assignments from the prospects targeted by the query parameters (default: ALL) using the {userIds} array of strings passed in request bodyNot stated
POSTasync/batches/actions/prospectsRemoveTagsProspects Remove Tags, ### Bulk Action Removes tags from the prospects targeted by the query parameters (default: ALL) using the {tags} array of strings passed in request bodyNot stated