API keys by tool
Which key each supported tool needs, where to create it, the scopes or plan it requires, and what its API cannot give us.
For: Admins connecting a tool
Every tool connects with an API key or token that you create inside that tool. There is no OAuth pop-up and nothing to install. This page lists the exact key for each of the tools you can connect.
How pasting a key works
- Sending tools, the CRM and dialers are added in Settings → Connections. Enrichment providers are added in Settings → Enrichment. Both need the admin role.
- Paste the key. Spaces, line breaks and a pair of surrounding quotes are removed for you.
- The key is tested against the tool straight away. You see Key works with a few facts read from the account, or Key not accepted with the reason the tool gave.
- Click Save. The server tests the key once more and stores it encrypted. It is never shown again.
Note: Some tools need a second value next to the key, such as an account email or a client ID. Those fields appear in the form when you pick the tool. Checks are limited to 20 a minute per person.

The connect form for Instantly: where to find the key, what it needs, and the key field. Save unlocks once the key is checked. Demo data.
Give each key only what it needs
OutboundManager only reads from your tools. The one exception is a reply that a person on your team writes and sends from the reply queue. So most keys can be read-only:
| Tool | Minimum access | Add only if you want |
|---|---|---|
| Instantly | all:read, or read scopes for workspaces, campaigns, accounts, leads and emails | emails:create to answer replies from the reply queue |
| HubSpot | crm.objects.deals.read, crm.objects.contacts.read, crm.objects.companies.read, crm.objects.owners.read, crm.schemas.deals.read | crm.objects.deals.write and crm.schemas.deals.write for write-back |
| HeyReach | A workspace API key (not an organization key) | |
| Dialpad | A company-level key with the calls:list scope | |
| RingCentral | A private JWT app with ReadAccounts and ReadCallLog | |
| ZoomInfo | A client credentials app with the api:data:contact scope |
The other tools issue one key with no scopes to choose. More on handling keys safely: Security best practices.
Every tool, step by step
The steps and notes below are the same ones shown on each tool's integration page and inside the app.
InstantlyEmail
- In Instantly, go to Settings → Integrations → API Keys and create an API key (API v2).
- Give the key read access: the all:read scope, or read scopes for workspaces, campaigns, accounts, leads and emails. To answer replies from OutboundManager, also add emails:create (or all:create).
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick Instantly. Paste the API key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each sender a rep. Suggested matches by email are offered; re-mapping later moves the history with the sender.
Good to know
- API keys are an Instantly plan feature. If you cannot create one, check your Instantly plan.
- Instantly limits its email endpoint to 20 requests a minute, so a large first backfill is spread over several sync runs.
- Opens and clicks are not imported. Reply rates are per send, counted from real replies.
- Replies sent from OutboundManager are stored as replies, never counted as outreach.
Instantly documentation (opens in a new tab)What we sync from Instantly
SmartleadEmail
- In Smartlead, open Settings and copy your API key.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick Smartlead. Paste the API key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each sender a rep. Suggested matches by email are offered; re-mapping later moves the history with the sender.
Good to know
- Smartlead allows 60 API requests a minute per plan, so OutboundManager paces itself and a large account can take a few sync runs to backfill.
- The sending mailbox of a send is only known when the campaign uses exactly one mailbox; otherwise the campaign owner gets the credit.
- Opens and clicks are not imported.
Smartlead documentation (opens in a new tab)What we sync from Smartlead
WoodpeckerEmail
- Make sure the API key add-on is active on your Woodpecker account. Without it, Woodpecker refuses API access.
- In Woodpecker, go to Marketplace → Integrations → API keys and create a key.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick Woodpecker. Paste the API key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each sender a rep. Suggested matches by email are offered; re-mapping later moves the history with the sender.
Good to know
- Woodpecker's API has no per-email send events, only each prospect's last contact time. Each sync records every prospect's latest step, which catches each step as it goes out unless two reach the same prospect between syncs; a backfill only sees each prospect's latest step.
- A prospect contacted in two or more synced campaigns cannot be attributed to one of them and is skipped.
- The inbox only covers mailboxes connected by the key's owner. LinkedIn steps of multichannel campaigns are not synced.
- Woodpecker processes one API request at a time per account, so syncs are slower on large accounts.
Woodpecker documentation (opens in a new tab)What we sync from Woodpecker
LemlistEmail
- In lemlist, open Settings → Integrations and generate an API key in the API section. The key acts as the user who created it.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick Lemlist. Paste the API key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each sender a rep. Suggested matches by email are offered; re-mapping later moves the history with the sender.
Good to know
- Opens, clicks, visits, likes, follows, WhatsApp, SMS, calls and manual tasks are not imported. Aggregate campaign stats are never turned into activity.
- When an activity carries no sender, the campaign owner gets the credit.
- LinkedIn replies can only be answered for campaign leads, because lemlist only messages leads.
- lemlist allows 20 requests every 2 seconds per key, so a large first backfill can take several sync runs.
Lemlist documentation (opens in a new tab)What we sync from Lemlist
HeyReachLinkedIn
- In HeyReach, open the workspace you want to report on and go to Settings → Integrations → API. Create a workspace API key.
- Use a workspace key, not an organization key. Organization keys cannot read campaign data, and the connection test says so.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick HeyReach. Paste the workspace API key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each sender a rep. Suggested matches by email are offered; re-mapping later moves the history with the sender.
Good to know
- HeyReach only exposes each lead's current connection state, not the time of each invite or acceptance. OutboundManager fixes an approximate time the first time it sees the event and never moves it.
- Profile views, likes, follows and the InMail versus message split are only available as totals in HeyReach and are not synced.
- Leads removed from a campaign and deleted conversations are not seen.
- The API key is shared across the workspace at 300 requests a minute.
HeyReach documentation (opens in a new tab)What we sync from HeyReach
CRM
HubSpotCRM
- In HubSpot, a super admin creates a private app (Settings → Integrations → Private Apps; newer accounts list private apps under Development → Legacy apps).
- Give it these scopes: crm.objects.deals.read, crm.objects.contacts.read, crm.objects.companies.read, crm.objects.owners.read and crm.schemas.deals.read. For write-back, also crm.objects.deals.write and crm.schemas.deals.write.
- Copy the private app's access token.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick HubSpot. Paste the access token. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Map HubSpot owners to reps in Settings → Reps & senders. To write attribution back to deals, turn on write-back on the HubSpot connection; it is off until you do.
Good to know
- Deal stage history is not synced, only the current stage.
- Inbound calls are skipped, and cancelled meetings are removed.
- HubSpot search returns at most 10,000 results per query; long deal backfills are read in slices, which takes a little longer.
- Write-back only touches deals with an outbound attribution, in a property group named OutboundManager.
HubSpot documentation (opens in a new tab)What we sync from HubSpot
Dialers
KlentyDialer
- In Klenty, go to Settings → Integrations → Klenty API Key and copy the key. The key belongs to the user who is logged in.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick Klenty. Enter the Klenty account email (the login the key belongs to). With an admin key, list teammates' Klenty logins in "Teammates to include", comma separated.
- Paste the API key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each dialer seat a rep, so calls land on the right row of the scorecard.
Good to know
- Klenty's API only returns calls from the last 30 days, so the first backfill covers about 30 days, not 90.
- Klenty email sends, replies and bounces are only available as totals, so no email activity is imported from Klenty.
- There is no users endpoint: seats come from the key's user, the teammates you list and the callers on each call.
- Klenty's date filter is unreliable, so every sync reads the widest window and filters records itself.
Klenty documentation (opens in a new tab)What we sync from Klenty
AircallDialer
- In Aircall, an admin opens Dashboard → Integrations & API → API keys and creates a key pair. Note the API ID and the API token.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick Aircall. Enter the API ID in "Aircall API ID".
- Paste the API token. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each dialer seat a rep, so calls land on the right row of the scorecard.
Good to know
- Aircall keeps six months of call history in its API; the 90-day first backfill fits inside it.
- Inbound calls are skipped.
- Connected means the call was answered and lasted at least 10 seconds. Aircall cannot tell a person from an answering machine, so the floor filters most machine pickups.
- Recording links from Aircall expire after an hour; the dashboard link does not.
Aircall documentation (opens in a new tab)What we sync from Aircall
DialpadDialer
- In Dialpad, a company admin goes to Admin Settings → My Company → Authentication → API keys and creates a company-level API key with the calls:list scope.
- Use a company key. A user-level key only returns that user's own calls.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick Dialpad. Paste the API key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each dialer seat a rep, so calls land on the right row of the scorecard.
Good to know
- Inbound calls are skipped.
- Connected means the far end picked up, the call did not end in voicemail, and talk time was at least 10 seconds. Dialpad cannot tell a person from an answering machine on outbound calls.
- If the key cannot list users, seats are taken from the calls themselves.
Dialpad documentation (opens in a new tab)What we sync from Dialpad
RingCentralDialer
- In the RingCentral Developer Console, create a private REST API app with JWT auth and the ReadAccounts and ReadCallLog permissions. Note its Client ID and Client secret.
- Create a JWT credential for a user who can read the company call log (a Super Admin, or a role with company call log access).
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick RingCentral. Enter the app's Client ID. Leave Server URL blank for production.
- Paste the Client secret and the JWT in the key box, separated by a space. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each dialer seat a rep, so calls land on the right row of the scorecard.
Good to know
- The call log has no prospect email, so RingCentral calls count on the scorecard but cannot credit a deal on their own.
- Connected means a pickup result and at least 10 seconds. RingCentral reports a voicemail pickup as connected, so the floor filters most of them.
- RingCentral rate limits the call log heavily (about one request every 6 seconds), so a busy account takes several runs to backfill.
- Inbound calls are not read.
RingCentral documentation (opens in a new tab)What we sync from RingCentral
JustCallDialer
- In JustCall, an admin opens Settings → Developers (APIs & Webhooks) and copies the API key and the API secret.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick JustCall. Enter the API key in "JustCall API key".
- Paste the API secret. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each dialer seat a rep, so calls land on the right row of the scorecard.
Good to know
- JustCall's API only gives the last 3 months of calls, so that is the whole history you can backfill.
- Requests are paced for JustCall's Team plan limit (30 a minute), so large accounts take several runs to backfill.
- Connected means answered with at least 10 seconds of conversation. JustCall counts machine pickups as answered; the floor filters most.
- Incoming calls are skipped.
JustCall documentation (opens in a new tab)What we sync from JustCall
NooksDialer
- In Nooks, open Developer Settings → API Keys and create a workspace API key (it starts with nooks-api-).
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick Nooks. Paste the API key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each dialer seat a rep, so calls land on the right row of the scorecard.
Good to know
- The Nooks REST API returns calls made on the Nooks sequencing platform. Parallel dialer calls that never touch it may be missing; Nooks logs those to your CRM, and a HubSpot connection counts them.
- Connected follows the call disposition's Nooks outcome. A call with no disposition is not connected.
- Inbound calls are skipped.
Nooks documentation (opens in a new tab)What we sync from Nooks
PhoneBurnerDialer
- In PhoneBurner, click your initials → Integration Settings → Personal Access Tokens and generate a token.
- In OutboundManager, an admin opens Settings → Connections and clicks Add connection.
- Pick PhoneBurner. Optionally enter your account time zone (for example America/New_York), because PhoneBurner call times carry no zone.
- Paste the token. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Open Settings → Reps & senders and give each dialer seat a rep, so calls land on the right row of the scorecard.
Good to know
- PhoneBurner returns the caller's own dial sessions; there is no team-wide call list. Teammates' calls are read only when PhoneBurner gives team-admin access to them; otherwise teammates appear as seats without calls.
- Calls carry only a phone number, so PhoneBurner calls count on the scorecard but cannot credit a deal on their own.
- Dial sessions are not campaigns, so calls have no campaign.
PhoneBurner documentation (opens in a new tab)What we sync from PhoneBurner
Enrichment
MoltSetsEnrichment
- Create an API key in your MoltSets account (it starts with ms_). The MoltSets authentication guide shows where.
- In OutboundManager, an admin opens Settings → Enrichment, finds the provider card and clicks Add key.
- Paste the key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Set its place in the waterfall and the monthly credit budgets on the same page. Managers can then run lists from Enrich.
Good to know
- Email only; MoltSets does not return phone numbers here.
- Flat-rate plans have weekly fair-use windows. When one is used up, MoltSets is skipped for the rest of that pass and the waterfall moves on.
- A miss is free.
MoltSets documentation (opens in a new tab)What we sync from MoltSets
ApolloEnrichment
- In Apollo, open Settings → Integrations → API and create an API key. A master key also lets OutboundManager show your usage.
- In OutboundManager, an admin opens Settings → Enrichment, finds the provider card and clicks Add key.
- Paste the key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Set its place in the waterfall and the monthly credit budgets on the same page. Managers can then run lists from Enrich.
Good to know
- Email only. Apollo phone numbers need its webhook flow, which is not supported here.
- Apollo charges 1 credit for a match with an email, including one rejected because it is at another company.
- Personal emails are never requested.
- API access and credits depend on your Apollo plan.
Apollo documentation (opens in a new tab)What we sync from Apollo
CrustdataEnrichment
- Copy your API key from your Crustdata account. Contact data needs a Crustdata plan that includes it.
- In OutboundManager, an admin opens Settings → Enrichment, finds the provider card and clicks Add key.
- Paste the key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Set its place in the waterfall and the monthly credit budgets on the same page. Managers can then run lists from Enrich.
Good to know
- LinkedIn URL only: Crustdata does not look up by name and company here.
- Self-serve plans without contact data are refused by Crustdata with a permission error.
- Crustdata charges 1 credit per matched email lookup and 2 per phone lookup; misses and people who asked to be removed are free.
Crustdata documentation (opens in a new tab)What we sync from Crustdata
LushaEnrichment
- Copy your API key from the API section of your Lusha dashboard. Your account needs Lusha API v3 access.
- In OutboundManager, an admin opens Settings → Enrichment, finds the provider card and clicks Add key.
- Paste the key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Set its place in the waterfall and the monthly credit budgets on the same page. Managers can then run lists from Enrich.
Good to know
- Uses Lusha API v3 only. If Lusha answers that V3 API access is not enabled, ask Lusha to turn it on.
- Lusha charges for the search plus each revealed email or phone. No match means no charge.
- Contacts Lusha blocks for legal reasons (GDPR) are skipped.
- Personal emails are never used.
Lusha documentation (opens in a new tab)What we sync from Lusha
ZoomInfoEnrichment
- In the ZoomInfo Developer Portal, create an app that uses the Client Credentials flow with the api:data:contact scope. Note its Client ID and Client secret.
- In OutboundManager, an admin opens Settings → Enrichment, finds the provider card and clicks Add key.
- Enter the Client ID in its field.
- Paste the Client secret. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Set its place in the waterfall and the monthly credit budgets on the same page. Managers can then run lists from Enrich.
Good to know
- Uses the ZoomInfo GTM Data API. The legacy Enterprise API (username and password) is not supported.
- ZoomInfo has no per-email deliverability check, only an accuracy score. 90 and above counts as valid, 80 to 89 as catch-all, lower as unknown.
- Credits are recorded as 1 per returned record, even when ZoomInfo does not charge for a record already under management.
- ZoomInfo's licence may restrict storing or moving its data into other tools; check your contract.
ZoomInfo documentation (opens in a new tab)What we sync from ZoomInfo
FullEnrichEnrichment
- Copy your API key from your FullEnrich account settings.
- In OutboundManager, an admin opens Settings → Enrichment, finds the provider card and clicks Add key.
- Optionally set "Wait per lookup" (10 to 280 seconds, default 90).
- Paste the key. It is checked against the tool automatically; click Save once it shows Key works. The key is stored encrypted.
- Set its place in the waterfall and the monthly credit budgets on the same page. Managers can then run lists from Enrich.
Good to know
- FullEnrich is asynchronous: most lookups take 30 to 90 seconds. Unfinished lookups are picked up on the next pass and never paid twice.
- FullEnrich charges only when something is found (its published rates are 1 credit per work email and 10 per mobile); re-enriching the same input within 3 months is free.
- FullEnrich keeps results for 3 months.
FullEnrich documentation (opens in a new tab)What we sync from FullEnrich
Replacing or rotating a key
Open the tool in Settings → Connections and use Replace key. The new key is tested before it is saved, and all synced history, sender mappings and campaign owners stay as they are.
Important: Do not remove a connection just to change its key. Removing a connection deletes the senders, campaigns, activity and deals that were synced through it. Use Replace key instead.
A tool you use is not listed
Tell us which one in Settings → Workspace → Outbound stack under "Other tools", or contact us. Salesforce is not supported yet; HubSpot is the only CRM today.
Something unclear or out of date? Tell us and we will fix this page.