Back to Docs
🎙️

Zoom Push API Integration

Pull Zoom cloud recordings via API and send them to KendoAI Push API.

Last updated: Mar 4, 2026

When to Use This

Use this guide when you want a custom Zoom-to-Kendo pipeline using your own backend and the Kendo Push API.

This is useful when you need custom filtering, enrichment, routing, or audit controls beyond the one-click Zoom integration.

Zoom APIs You Can Pull From

Primary endpoints for ingestion:

- GET /users/me/recordings to list cloud-recorded meetings

- GET /meetings/{meetingUuid}/recordings to hydrate recording files when webhook/list payloads are incomplete

- GET /past_meetings/{meetingUuid}/participants (optional) for rep attribution

Use page_size and next_page_token for pagination.

For date filtering, use from and to windows.

Scopes and Access

Your Zoom OAuth app needs read access for user profile, meetings, and recordings.

Common scope sets are either classic scopes or granular scopes depending on your Zoom app type/configuration.

In Kendo's Zoom implementation, the default scope string is:

  • user:read meeting:read recording:read
  • If your app uses granular scopes, configure equivalent read scopes for user profile, meeting metadata, and user recordings.

    What to Pull from Zoom

    From each meeting payload, collect:

  • uuid and id (stable source IDs)
  • topic (maps to callTitle)
  • start_time and duration
  • host_email (rep mapping)
  • recording_files[] (audio and transcript files)
  • From recording files, look for:

  • Audio file types (for audioUrl)
  • Transcript/caption/chat file types (for transcript text if available)
  • Transcript and Audio Handling

    Not every Zoom recording includes transcript text. Build your pipeline to accept either data source.

    Recommended behavior:

    - If transcript file exists, download and clean it (strip timestamp/caption markers)

    - If no transcript file, still send audioUrl so Kendo can transcribe/analyze

    - If both exist, send both and keep metadata for traceability

    At minimum, Kendo requires one of transcript or audioUrl.

    Step 1 - Generate a Kendo Push API Key

    1. In KendoAI, open Integrations > Push API

    2. Select the destination team

    3. Click Generate API Key

    4. Copy and store it securely (shown once)

    Step 2 - Build Incremental Zoom Pull

    1. Store a checkpoint timestamp or cursor in your integration database

    2. Call Zoom recordings list endpoint in pages

    3. Skip meetings already synced (by Zoom UUID/ID)

    4. Extract transcript/audio URLs from recording_files

    5. Optionally fetch participants for better rep mapping

    6. POST each normalized call to Kendo Push API

    7. Persist Kendo callId + sync status

    Send Data to Kendo Push API

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

    Headers:

    - Content-Type: application/json

    - X-API-Key: {{your_kendo_push_api_key}}

    Recommended mapping:

    - callTitle <- Zoom topic

    - repEmail <- host_email (or matched participant email)

    - callDate <- start_time

    - duration <- duration (minutes) or converted value

    - audioUrl <- downloadable recording file URL

    - transcript <- cleaned transcript text (if available)

    - metadata.source = "zoom" plus zoomMeetingUuid/zoomMeetingId

    Example Payload (Zoom to Kendo)

    { "callTitle": "Demo - Enterprise", "repName": "Alex Kim", "repEmail": "alex@yourco.com", "callDate": "2026-03-04T14:00:00Z", "duration": 42, "audioUrl": "https://zoom-recording-url", "transcript": "Rep: Thanks everyone for joining...", "metadata": { "source": "zoom", "zoomMeetingUuid": "abc123", "zoomMeetingId": "987654321" } }

    If transcript is not available, omit it and send audioUrl only.

    Rate Limits and Retry Strategy

    Both Zoom and Kendo can return 429 for rate limiting.

    Implement exponential backoff with jitter and honor Retry-After when returned.

    Keep batch sizes moderate and checkpoint frequently.

    Use idempotency guards in your system (for example, synced_by_zoom_uuid) to prevent duplicate uploads.

    Validation Checklist

    1. Pull one recording from Zoom and inspect mapping output

    2. POST to Kendo and confirm 201 with callId

    3. Verify call appears in Kendo history with expected rep/team attribution

    4. Re-run same record and confirm idempotency behavior in your integration layer

    5. Validate retry paths for simulated 429/5xx responses

    Troubleshooting

    401 from Zoom - Access token expired or missing scopes; refresh or re-authorize.

    401 from Kendo - Invalid or missing Push API key.

    400 from Kendo - Missing both transcript and audioUrl, or invalid field values.

    No transcript imported - Transcript files unavailable; send audioUrl and rely on Kendo transcription.

    Wrong rep attribution - Ensure repEmail maps to a member in the destination Kendo team.

    Still need help?

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