Integrations·Updated Apr 22, 2026
Salesloft Push API Integration
Send Salesloft call recordings and transcripts to KendoAI using the Push API.
When to Use This
Use this integration if your team makes calls through Salesloft and you want those calls analyzed in KendoAI automatically -- no manual uploads required.
An automation tool (like Zapier, Make, or n8n) watches for new calls in Salesloft, grabs the recording, and sends it to Kendo for analysis. Once set up, it runs on its own.
This guide walks you through the entire setup step by step, even if you've never built an integration before.
How It Works (Big Picture)
Here's what happens behind the scenes once you set this up:
1. A rep makes a call in Salesloft
2. Salesloft records the call and stores the recording
3. Your automation tool (Zapier, Make, or n8n) detects the new completed call
4. The tool sends the recording link and call details to Kendo
5. Kendo transcribes the call, analyzes it, and generates coaching insights
You only need to set this up once. After that, every call flows through automatically.
What You Need Before Starting
Gather these four things before you begin:
A KendoAI account with a team that has Push API enabled
A Kendo Push API key -- you'll generate this in Step 1 below
A Salesloft API key -- you'll create this in Step 2 below
An automation tool account -- sign up for a free account on Zapier (zapier.com), Make (make.com), or n8n (n8n.io). Pick whichever one you prefer; this guide covers all three.
Optional: if your Salesloft workspace has Conversations enabled, you can also send transcripts. If not, no worries -- Kendo will automatically transcribe the audio recording for you.
About Transcripts
You might be wondering whether you need to send a transcript. The short answer: no, it's optional.
When you send Kendo a recording URL (which Salesloft provides automatically for recorded calls), Kendo will transcribe the audio and run its full analysis.
If your Salesloft workspace has Conversations enabled, transcripts are available and can be included for faster processing. But most teams just send the audio URL and let Kendo handle the rest.
Salesloft API Reference (For Technical Users)
If you're a developer or want more detail on the Salesloft API, here are the relevant endpoints:
Call Activities: GET /v2/activities/calls (list calls), GET /v2/activities/calls/:id (single call with recording URLs and status)
Transcriptions: GET /v2/transcriptions (list), GET /v2/transcriptions/:id/sentences (sentence-level text)
Required API key permissions (scopes): calls:read (covers call data and recordings) and optionally transcriptions:read (for transcript text)
Key fields in a call record: id, disposition, duration (seconds), status, created_at, user (name + email), and recordings (array with url and status)
You can browse the full Salesloft API docs at developers.salesloft.com.
Step 1 - Generate a Kendo Push API Key
- 1. In KendoAI, open Integrations > Push API
- 2. Select your target team
- 3. Click Generate API Key
- 4. Copy and save the key immediately (it is only shown once)
- 5. Store it in your secret manager or integration platform's credential store
Step 2 - Create a Salesloft API Key
- 1. In Salesloft, go to Account > Your Applications > API Keys
- 2. Click Create New
- 3. Enter a descriptive name (e.g. "Kendo Call Sync")
- 4. Select scopes: calls:read and transcriptions:read (calls:read covers recordings access; transcriptions:read is only needed if you plan to pull transcript text)
- 5. Save and copy the generated key (format: ak_ + 64 hex characters)
- 6. Store securely alongside your Kendo Push API key
Step 3 - Choose Your Automation Tool
Now you need to connect the two systems so Salesloft calls automatically flow into Kendo. You don't need to write code -- you can use a visual automation tool instead.
Pick the platform you're most comfortable with and follow the matching walkthrough below:
Zapier - Easiest option, no coding needed. Great if you just want it working fast.
Make (formerly Integromat) - Visual drag-and-drop builder with more flexibility. Good middle ground.
n8n - Free and open-source. More technical, but no per-task fees.
Custom code - For engineering teams who want full control. See the Developer Reference section at the bottom.
Not sure which to pick? See the Which Platform Should I Pick? section below the walkthroughs.
Zapier Walkthrough (Easiest - No Code Required)
- Zapier connects apps together with simple "if this happens, do that" rules. You won't need to write any code.
- 1. Go to zapier.com and sign in (or create a free account)
- 2. Click Create in the top left, then Zaps, then New Zap
- 3. For the Trigger step, search for Salesloft and select it
- 4. Choose New Call Activity as the trigger event, then click Continue
- 5. Connect your Salesloft account -- Zapier will walk you through signing in and granting access
- 6. Click Test trigger to pull in a sample call. You should see call data appear. Click Continue
- 7. Click the + to add a new step. Search for Filter by Zapier and select it
- 8. Set the filter to: Status (from the Salesloft data) Text exactly matches completed. This makes sure you only send finished calls to Kendo.
- 9. Click the + to add another step. Search for Webhooks by Zapier and select Custom Request
- 10. Fill in these fields exactly:
- - Method: select POST
- - URL: paste https://app.kendo.ai/api/integrations/push-api/ingest
- - Headers: click + Add Header. In the left box type Content-Type, in the right box type application/json. Click + Add Header again. In the left box type X-API-Key, in the right box paste your Kendo Push API key (the one that starts with pk_)
- 11. In the Data field, you need to paste a template and then insert your Salesloft data into it. Copy this template:
- { "callTitle": "", "repName": "", "repEmail": "", "callDate": "", "duration": "", "audioUrl": "", "metadata": { "source": "salesloft", "salesloftCallId": "" } }
- 12. Now click inside each empty "" value and use the Insert Data dropdown to map the Salesloft fields:
- - callTitle -> pick Disposition (the call outcome like "Connected")
- - repName -> pick User Name
- - repEmail -> pick User Email
- - callDate -> pick Created At
- - duration -> pick Duration
- - audioUrl -> pick Recordings Url (this is the recording file link)
- - salesloftCallId -> pick ID
- 13. Click Test step. If everything is set up right, you'll see a success message with a Kendo call ID.
- 14. Click Publish to turn on your Zap. From now on, every completed Salesloft call will automatically appear in Kendo for analysis.
- That's it! Zapier automatically watches for new calls and sends each one to Kendo. It won't send the same call twice.
Zapier - Tips
Don't have a recording URL? That's okay -- Salesloft includes the recording link automatically for recorded calls. If a call wasn't recorded, the Zap will still fire but Kendo needs at least a recording or transcript. You can add another Filter step to skip calls where Recordings Url is empty.
Want to include transcripts too? This is optional since Kendo can transcribe from the audio. But if you want to send Salesloft's transcript, add an extra step before the Webhook: use Webhooks by Zapier > Custom Request with method GET and URL https://api.salesloft.com/v2/transcriptions (with your Salesloft API key in the Authorization header). Then map the transcript text into your Kendo payload. This is more advanced -- sending just the audio URL is perfectly fine.
Testing tip: Make a test call in Salesloft, wait for it to complete, then check your Zap history to see if it fired. Then check Kendo's call history to confirm it arrived.
Make Walkthrough (Visual Builder)
- Make (formerly Integromat) is a visual automation tool where you connect modules together like building blocks.
- 1. Go to make.com and sign in (or create a free account)
- 2. Click Create a new scenario
- 3. Click the + in the center to add your first module. Search for Salesloft
- 4. If Salesloft appears, select Watch Call Activities -- this will automatically check for new calls on a schedule. If you don't see a Salesloft module, don't worry -- choose HTTP > Make a request instead (we'll set it up manually in the next step)
- 5. If using the Salesloft module: connect your account when prompted and set it to watch for new calls
- 5. If using HTTP instead: set these fields: Method = GET, URL = https://api.salesloft.com/v2/activities/calls, and add a Header with Name = Authorization and Value = Bearer ak_your_salesloft_key (replace with your actual Salesloft API key)
- 6. Click the line connecting to the next module and select Set up a filter. Set conditions to only pass calls where the status equals completed. This prevents incomplete calls from being sent.
- 7. Click + to add a new module. Search for HTTP and select Make a request
- 8. Fill in the fields:
- - URL: https://app.kendo.ai/api/integrations/push-api/ingest
- - Method: POST
- - Headers: add two headers -- (1) Name: Content-Type, Value: application/json and (2) Name: X-API-Key, Value: pk_your_kendo_key (your Kendo Push API key)
- - Body type: select Raw
- - Content type: select JSON (application/json)
- 9. In the Request content box, paste this template and use Make's data picker (the colored pills) to fill in the values from the Salesloft module:
- { "callTitle": "DISPOSITION_VALUE", "repName": "USER_NAME_VALUE", "repEmail": "USER_EMAIL_VALUE", "callDate": "CREATED_AT_VALUE", "duration": DURATION_VALUE, "audioUrl": "RECORDING_URL_VALUE", "metadata": { "source": "salesloft", "salesloftCallId": "CALL_ID_VALUE" } }
- Replace each ALL_CAPS_VALUE by clicking on it and selecting the matching Salesloft field from the data picker panel on the left.
- 10. Click OK to save the module, then click Run once in the bottom left to test
- 11. If the test succeeds, click the clock icon in the bottom left to set a schedule (every 15 minutes works well)
- 12. Toggle the scenario ON using the switch in the bottom left. Your calls will now flow automatically!
- Make remembers where it left off between runs, so it won't send the same call twice.
Make - Tips
Error handling made easy: Right-click the Kendo HTTP module and select Add error handler. Choose Retry and set it to retry 3 times with 60-second gaps. This handles temporary glitches automatically.
Watching your runs: Click History at the bottom of the scenario editor to see every run, what data was sent, and whether it succeeded or failed. This is great for debugging.
Free tier works: Make's free plan gives you 1,000 operations per month, which covers many teams. Each call sync uses about 2-3 operations (read from Salesloft + send to Kendo).
n8n Walkthrough (Self-Hosted, Free)
- n8n is a free, open-source automation tool. It's more technical than Zapier or Make, but has no per-task fees. You can run it on n8n Cloud or self-host it.
- 1. Open your n8n instance (or sign up at n8n.io)
- 2. Click New workflow
- 3. Click + and search for Schedule Trigger. Add it and set the interval to every 15 minutes. This is the clock that kicks off each sync.
- 4. Click + to add the next step. Search for HTTP Request. Fill in:
- - Method: GET
- - URL: https://api.salesloft.com/v2/activities/calls
- - Under Authentication, select Generic Credential Type > Header Auth. Set Name to Authorization and Value to Bearer ak_your_salesloft_key
- This step fetches your recent calls from Salesloft.
- 5. Click + to add an IF node. Set the condition to: {{$json.status}} equals completed. This filters out calls that didn't connect or are still in progress. Connect only the true (green) output to the next step.
- 6. Click + to add another HTTP Request node. This one sends data to Kendo:
- - Method: POST
- - URL: https://app.kendo.ai/api/integrations/push-api/ingest
- - Under Headers, add: Content-Type = application/json and X-API-Key = pk_your_kendo_key
- - Under Body, select JSON and enter:
- { "callTitle": "={{ $json.disposition }}", "repName": "={{ $json.user.name }}", "repEmail": "={{ $json.user.email }}", "callDate": "={{ $json.created_at }}", "duration": {{ $json.duration }}, "audioUrl": "={{ $json.recordings[0].url }}", "metadata": { "source": "salesloft", "salesloftCallId": "={{ $json.id }}" } }
- The ={{ }} syntax tells n8n to pull the value from the Salesloft data.
- 7. Click Test workflow in the top right to run it once and check the results
- 8. If the test shows a successful response from Kendo, click Save and then toggle the workflow Active in the top right
- Your workflow will now run every 15 minutes and send any new completed calls to Kendo.
n8n - Tips
Automatic retries: Click on the Kendo HTTP node, go to Settings, and enable Retry On Fail. Set it to 3 retries with 60-second wait. This handles temporary errors gracefully.
See what happened: After a run, click on any node to see the exact data that flowed through it. This makes it easy to spot mapping issues.
Avoiding duplicates: n8n's Schedule Trigger can track what it already processed. In the trigger settings, look for options to track new items only. Alternatively, you can keep it simple -- if a call gets sent twice, Kendo will still process it, it just means a duplicate entry in your history.
Which Platform Should I Pick?
Zapier - Easiest to set up. Best if you want to get it working in under 30 minutes and don't mind paying per task. No technical knowledge needed.
Make - A bit more powerful than Zapier, with a visual drag-and-drop builder. Good if you want more control over error handling and scheduling. Generous free tier.
n8n - Completely free with no per-task pricing. Best if you're comfortable with a slightly more technical interface or want to self-host. Great for high-volume teams.
Custom code - Only needed if your engineering team wants full control or needs to integrate into an existing backend. Most teams should start with one of the tools above.
All four options do the same thing: read calls from Salesloft and send them to Kendo. You can always switch later if your needs change.
Step 4 - Authenticate with Kendo
This is the URL your automation tool sends data to: https://app.kendo.ai/api/integrations/push-api/ingest
You need to include your Kendo Push API key so Kendo knows who you are. The platform walkthroughs above show you exactly where to put it, but here's a summary of all the ways you can include it:
- X-API-Key header (recommended): add a header called X-API-Key with your key as the value
- Authorization header: add a header called Authorization with the value Bearer pk_your_key_here
- In the URL: add ?apiKey=pk_your_key_here to the end of the URL (simplest option if your tool makes headers tricky)
- In the data: include "apiKey": "pk_your_key_here" inside the body of your request alongside your call data
Any of these methods works -- pick whichever one your tool makes easiest. The walkthroughs above use the X-API-Key header.
Step 5 - Understand the Field Mapping
When your automation tool sends a call to Kendo, it needs to tell Kendo what each piece of data means. Here's what each field does:
- callTitle - A label for the call. Use the Salesloft disposition (like "Connected" or "Left Voicemail") or create your own label.
- repName - The sales rep's full name from Salesloft
- repEmail - The sales rep's email address. This is how Kendo matches the call to the right team member, so it needs to match the email they use in Kendo.
- callDate - When the call happened. Use the created_at value from Salesloft.
- duration - How long the call was, in seconds. Kendo can handle seconds, minutes, or milliseconds and figures out the right format.
- audioUrl - The link to the call recording from Salesloft. Kendo will download and analyze it.
- transcript - The text of what was said on the call (optional). If you don't include this, Kendo will automatically transcribe the audio for you.
- metadata - Extra info for tracking purposes. Setting source to salesloft and including the salesloftCallId helps you trace calls back to Salesloft later.
The platform walkthroughs above already show you exactly where to put each field. You just need to pick the matching Salesloft value for each one.
Example of What Gets Sent to Kendo
Here's an example of what your automation tool sends to Kendo for a single call. You don't need to type this out yourself -- the walkthroughs above create it automatically from your Salesloft data:
{ "callTitle": "Outbound - Connected", "repName": "Jamie Rivera", "repEmail": "jamie@yourco.com", "callDate": "2026-04-22T15:30:00Z", "duration": 485, "audioUrl": "https://salesloft-recording-url...", "metadata": { "source": "salesloft", "salesloftCallId": "98765432" } }
The most important thing is that at least one of audioUrl or transcript is included. Without one of those, Kendo doesn't have anything to analyze.
Developer Reference - Custom Code Pipeline
This section is for engineering teams building a custom integration in code instead of using Zapier/Make/n8n. If you're using one of those tools, you can skip this.
Recommended flow:
1. Store a checkpoint timestamp (last successful sync time)
2. Query GET https://api.salesloft.com/v2/activities/calls with date filters. Authenticate via Authorization: Bearer ak_your_key.
3. Filter for calls where status = completed and at least one recording has a url present
4. For each call, extract the recording url from the recordings array
5. Optionally fetch transcript text via GET /v2/transcriptions/:id/sentences and concatenate into a single string
6. POST each call to https://app.kendo.ai/api/integrations/push-api/ingest with your Kendo Push API key via X-API-Key header
7. Advance checkpoint only after successful batch completion
8. On failures, retry by call ID to avoid losing records
Include these metadata fields for traceability: metadata.source = "salesloft", metadata.salesloftCallId, metadata.salesloftUserId, metadata.salesloftDisposition, metadata.salesloftDirection (inbound/outbound), and metadata.syncMethod (polling or webhook).
Rate Limits (Good to Know)
There are limits on how fast you can send data to avoid overloading the systems:
- Kendo accepts up to 30 calls per minute. If your team makes fewer than 30 calls in any given minute (most teams do), you won't hit this.
- Salesloft allows about 600 requests per minute, so this is rarely an issue.
If you're using Zapier, Make, or n8n, these tools already send calls one at a time, so you're unlikely to hit any limits. If you do see an error about rate limits (error code 429), the automation tools will typically retry automatically -- especially if you've enabled the retry settings mentioned in the walkthroughs.
How to Verify It's Working
- After you've set up your automation, here's how to make sure everything is connected properly:
- 1. Make a test call in Salesloft (or wait for a real call to complete)
- 2. Check your automation tool to confirm it detected the call and sent it to Kendo. In Zapier, check Zap History. In Make, check History. In n8n, check Executions.
- 3. Open KendoAI and go to your call history
- 4. You should see the call appear within a few minutes. Check that the rep name, call title, and recording are correct.
- 5. Wait for analysis to complete -- Kendo will score the call and generate coaching insights automatically
- If the call doesn't show up, check the Troubleshooting section below.
Troubleshooting
Call not showing up in Kendo?
- Check your automation tool's run history to see if it sent the data. Look for any red error indicators.
- Make sure your Kendo Push API key is correct. It should start with pk_. You can generate a new one in KendoAI under Integrations > Push API.
- Make sure the URL is exactly https://app.kendo.ai/api/integrations/push-api/ingest with no extra spaces or characters.
Error: 401 Unauthorized (from Kendo)
- Your Kendo Push API key is missing or wrong. Double-check you pasted the full key correctly.
Error: 401 Unauthorized (from Salesloft)
- Your Salesloft API key is missing or expired. Go to Salesloft > Account > Your Applications > API Keys to check or create a new one.
Error: 403 Forbidden (from Salesloft)
- Your Salesloft API key doesn't have the right permissions. Edit the key and make sure calls:read is checked (and transcriptions:read if you're pulling transcripts).
Error: 400 Bad Request (from Kendo)
- The data you sent is missing the recording URL or transcript. Every call needs at least one of these. Check that the audioUrl field is mapped correctly in your automation.
Wrong rep name showing in Kendo?
- The repEmail field needs to match the email address the rep uses in their Kendo account. Check the mapping in your automation tool.
Calls from Salesloft not triggering the automation?
- Make sure the call is fully completed (not still in progress). The filter step should check that status = completed.
- In Zapier, check that the Zap is turned on. In Make, check that the scenario is active. In n8n, check that the workflow is toggled to Active.
Still stuck? Contact support@kendo.ai with your automation tool name, the error message you're seeing, and a screenshot of your setup. We'll help you get it working.