KendoAI
Kendo AI
All Docs
IntroductionRelease NotesCreating Your AccountDashboard OverviewNext Steps
Uploading CallsUnderstanding ScoresAI CoachingSharing Call Analytics
AI Roleplay TrainingProspect CreatorTraining GoalsPerformance ComparisonSharing AgentsTraining PathsAssign TrainingAI Context
Personal AnalyticsTeam AnalyticsCustom ScorecardsRevenue Tracking
Creating a TeamManaging MembersRoles & PermissionsTeam Settings
Fathom IntegrationZoom IntegrationFireflies IntegrationSlack IntegrationWebhooksPush APIHubSpot Push API IntegrationAloware Push API IntegrationZoom Push API Integration
Subscription PlansCredit SystemAuto-RechargeSeat Billing
TroubleshootingSettings GuideContact Support
Security OverviewTwo-Factor AuthenticationData Processing & PrivacyEnterprise Security
Documentation home

Integrations·Updated Mar 7, 2026

📡

Push API

Programmatically submit calls for analysis via API.

Overview

The Push API lets you programmatically submit calls for analysis. This is useful when:

You have recordings in your own systems

You're building custom integrations

You need to process calls from unsupported platforms

You want to automate bulk uploads

Authentication

API authentication requires a Push API key generated from Integrations > Push API.

Pass your key using any of these methods (use whichever your tool or platform supports):

X-API-Key header (preferred): X-API-Key: pk_your_key_here

Authorization header: Authorization: Bearer pk_your_key_here

Query parameter: append ?apiKey=pk_your_key_here to the endpoint URL

Request body field: include "apiKey": "pk_your_key_here" in your JSON payload

The query parameter and body field options are useful when your platform (e.g. HubSpot workflows) does not support custom HTTP headers.

Your team is inferred from the API key, so you do not need to pass a team ID in the body.

Keys are shown once when generated. Store them securely and rotate if exposed.

Submitting a Call

  1. Basic workflow:
  2. 1. Generate an API key from Integrations > Push API
  3. 2. Prepare your call recording and metadata
  4. 3. Make a POST request to /api/integrations/push-api/ingest
  5. 4. Include at least one of transcript or audioUrl
  6. 5. Add optional fields like repName, repEmail, callTitle, duration, callDate, metadata, and title-control flags
  7. 6. Receive call ID in response
  8. 7. Wait for analysis to complete in call history

Request Format

Required:

- transcript or audioUrl (at least one is required)

Optional (camelCase or snake_case supported):

- repName / rep_name

- repEmail / rep_email

- callTitle / call_title

- disableAiTitleGeneration / disable_ai_title_generation (boolean, default false)

- useAiCallTitle / use_ai_call_title (boolean alias; inverse of disableAiTitleGeneration)

- callDate / call_date (ISO date)

- audioUrl / audio_url

- duration (minutes, seconds, or ms; normalized automatically)

- metadata (flat key/value object)

Endpoint and Example

Endpoint: POST https://app.kendo.ai/api/integrations/push-api/ingest

Header auth example (X-API-Key or Authorization: Bearer):

- Content-Type: application/json

- X-API-Key: pk_your_key_here

Query parameter auth example (useful for platforms without custom header support):

- POST https://app.kendo.ai/api/integrations/push-api/ingest?apiKey=pk_your_key_here

Example body:

{ "transcript": "Rep: Thanks for joining.", "callTitle": "Demo Call", "disableAiTitleGeneration": true, "repEmail": "rep@company.com", "duration": 18, "metadata": { "source": "hubspot", "recordId": "12345" } }

Rate Limits

API rate limits:

- 30 requests per minute per API key

- Request body max size is 5 MB

- Handle 429 responses with retry/backoff

- Handle 401 for missing/invalid API keys

Each submitted call uses call analysis capacity in your workspace.

Processing Behavior

If you send audioUrl, Kendo starts audio transcription and analysis.

If you send only transcript, Kendo starts transcript-only analysis.

If both are sent, audio is prioritized for transcription and the inline transcript is not persisted as the primary transcript.

Successful ingestion returns 201 with a callId that you can store for auditing.

Response data includes status context fields like processingTriggered, processingError, and statusReason.

Push API calls that remain pending beyond the processing timeout are automatically marked failed with a clear timeout reason.

Title Selection Rules

If disableAiTitleGeneration=true (or useAiCallTitle=false), downstream processing should prefer your provided callTitle.

If title flags are omitted, behavior remains backward compatible and existing AI title generation flow is used.

For best results when disabling AI title generation, always send a non-empty callTitle.

PreviousWebhooks
NextHubSpot Push API Integration

Still need help?

Can't find what you're looking for? Our team is here to help.