Retell AI currently does not provide the Knowledge Base File Upload (/file endpoint) functionality that we use in VAPI.
This feature is critical to our system. Whenever a campaign is created, we compile all project-specific content, including web pages, PDFs, and documents, into a single file and upload it to VAPI. The AI then uses this file as its knowledge source to provide project-specific answers during calls.
Without this functionality, the AI would not have access to the project-specific knowledge and would instead provide generic responses.
Therefore, we need to confirm whether Retell AI plans to support this functionality and, if so, whether it is on their immediate roadmap and what the expected timeline would be.
Retell AI does support this — it’s just structured differently than VAPI’s /file endpoint. Instead of a separate file-upload endpoint, file uploads are a source type within the Create Knowledge Base API itself: you POST to /create-knowledge-base with knowledge_base_files (multipart/form-data, up to 25 files, 50MB each), alongside knowledge_base_texts and knowledge_base_urls in the same call.
Supported formats include PDF, DOC/DOCX, TXT, HTML, CSV, XLS/XLSX, PPT/PPTX, and more (full list on the Knowledge Base overview page). So for your use case, you can compile web pages, PDFs, and documents into a knowledge base per campaign and attach it to the agent — no separate roadmap item needed, since it’s already live.
We are currently evaluating Retell AI as an alternative to VAPI for our outbound voice campaign platform. Before committing to migration, we need clarity on the following technical points:
1. Bulk Outbound Calling
In VAPI, we pass a
customers
array in a single
/call
request to dial multiple leads simultaneously. Does Retell AI support bulk outbound calling in a single API request, or do we need to make individual API calls per lead?
2. Custom Call Metadata
We pass a custom
metadata
object with each call (containing
campaignId
,
userId
,
targetAudienceId
) which is returned back in the webhook payload. Does Retell AI support passing and receiving custom metadata per call?
3. Webhook Events
Our system relies on two specific webhook events:
Call not answered → to schedule a retry
Call completed → to save recording and lead data
What webhook events does Retell AI provide, and what does the payload structure look like for each?
4. Twilio Phone Number Integration
In VAPI, we import Twilio numbers by passing
twilioAccountSid
and
twilioAuthToken
directly via API. Does Retell AI support the same approach for Twilio number registration?
5. Call Recording Access
In VAPI, we fetch a presigned recording URL via
GET /call/:id
(returns
artifact.presignedMonoUrl
) to stream recordings. How does Retell AI handle call recording access — is a similar presigned URL available via API?
1. Bulk outbound calling — Yes, via Create Batch Call (POST /create-batch-call). Pass one from_number plus a tasks[] array, where each task has a to_number and optional per-call overrides (agent, dynamic variables, etc.) — equivalent to VAPI’s customers array. See also Batch calling for the CSV-driven UI flow.
2. Custom metadata — Yes. Pass a metadata object (e.g. { "campaignId": ..., "userId": ..., "targetAudienceId": ... }) on Create Phone Call or batch tasks. It’s stored as-is, returned in Get Call, and included in every webhook payload’s call object. You can also update it post-call via Update Call.
3. Webhook events — Per Webhooks overview: call_started, call_ended, call_analyzed, transcript_updated, plus transfer events. For your two use cases:
Call not answered/retry: there’s no dedicated “not answered” event, but call_ended includes disconnection_reason (values like dial_no_answer, dial_busy, dial_failed, voicemail_reached) — check that field to trigger retries.
Call completed: listen for call_ended (basic info) and call_analyzed (full data + call_analysis, recording URLs) to save recording/lead data.
4. Twilio number import — Not via a simple SID/token pair on a call-creation endpoint. Instead, use the Import Phone Number API with SIP trunk credentials (termination_uri, sip_trunk_auth_username, sip_trunk_auth_password, transport) after setting up elastic SIP trunking with Twilio. (Separately, Account SID/Auth Token are used only for the SMS setup flow in Enable SMS, not call import.)
5. Recording access — Get Call returns recording_url (mixed) and recording_multi_channel_url (per-party channels), plus PII-scrubbed variants, available after the call ends. These aren’t presigned by default, but you can opt into signed, expiring URLs (24-hour expiry) via Signed secure URL.