# Knowledge Base File Upload functionality (/file endpoint) that we are using in VAPI

**URL:** <https://community.retellai.com/t/knowledge-base-file-upload-functionality-file-endpoint-that-we-are-using-in-vapi/3666>\
**Category:** Support Help\
**Tags:** telephony\
**Created:** [September 21, 2026, 11:12am UTC](https://community.retellai.com/t/knowledge-base-file-upload-functionality-file-endpoint-that-we-are-using-in-vapi/3666 "2026-09-21T11:12:06Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![sandhya](https://yyz2.discourse-cdn.com/flex008/user_avatar/community.retellai.com/sandhya/32/2756_2.png) [@sandhya](https://community.retellai.com/u/sandhya)\
**Post date:** [September 21, 2026, 11:12am UTC](https://community.retellai.com/t/knowledge-base-file-upload-functionality-file-endpoint-that-we-are-using-in-vapi/3666/1 "2026-09-21T11:12:06Z")

</div>

**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.

---

<div class="post-metadata">

**Author:** ![mark1](https://yyz2.discourse-cdn.com/flex008/user_avatar/community.retellai.com/mark1/32/2524_2.png) [@mark1](https://community.retellai.com/u/mark1)\
**Post date:** [September 21, 2026, 12:29pm UTC](https://community.retellai.com/t/knowledge-base-file-upload-functionality-file-endpoint-that-we-are-using-in-vapi/3666/2 "2026-09-21T12:29:25Z")

</div>

Hey @sandhya

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](https://docs.retellai.com/api-references/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](https://docs.retellai.com/build/knowledge-base)** 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.

Best Regards.

---

<div class="post-metadata">

**Author:** ![sandhya](https://yyz2.discourse-cdn.com/flex008/user_avatar/community.retellai.com/sandhya/32/2756_2.png) [@sandhya](https://community.retellai.com/u/sandhya)\
**Post date:** [September 21, 2026, 1:25pm UTC](https://community.retellai.com/t/knowledge-base-file-upload-functionality-file-endpoint-that-we-are-using-in-vapi/3666/3 "2026-09-21T13:25:52Z")

</div>

Hi Retell AI Team,

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

```auto
customers

```

array in a single

```auto
/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

```auto
metadata

```

object with each call (containing

```auto
campaignId

```

,

```auto
userId

```

,

```auto
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

```auto
twilioAccountSid

```

and

```auto
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

```auto
GET /call/:id

```

(returns

```auto
artifact.presignedMonoUrl

```

) to stream recordings. How does Retell AI handle call recording access — is a similar presigned URL available via API?

---

<div class="post-metadata">

**Author:** ![mark1](https://yyz2.discourse-cdn.com/flex008/user_avatar/community.retellai.com/mark1/32/2524_2.png) [@mark1](https://community.retellai.com/u/mark1)\
**Post date:** [September 21, 2026, 1:38pm UTC](https://community.retellai.com/t/knowledge-base-file-upload-functionality-file-endpoint-that-we-are-using-in-vapi/3666/4 "2026-09-21T13:38:55Z")

</div>

Hey @sandhya

Here’s how each maps to Retell:

**1. Bulk outbound calling** — Yes, via **[Create Batch Call](https://docs.retellai.com/api-references/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](https://docs.retellai.com/deploy/make-batch-call)** for the CSV-driven UI flow.

**2. Custom metadata** — Yes. Pass a `metadata` object (e.g. `{ "campaignId": ..., "userId": ..., "targetAudienceId": ... }`) on **[Create Phone Call](https://docs.retellai.com/api-references/create-phone-call)** or batch tasks. It’s stored as-is, returned in **[Get Call](https://docs.retellai.com/api-references/get-call)**, and included in every webhook payload’s `call` object. You can also update it post-call via **[Update Call](https://docs.retellai.com/api-references/update-call)**.

**3. Webhook events** — Per **[Webhooks overview](https://docs.retellai.com/features/webhook-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](https://docs.retellai.com/api-references/import-phone-number)** with SIP trunk credentials (`termination_uri`, `sip_trunk_auth_username`, `sip_trunk_auth_password`, `transport`) after setting up **[elastic SIP trunking with Twilio](https://docs.retellai.com/deploy/twilio)**. (Separately, `Account SID`/`Auth Token` are used only for the SMS setup flow in **[Enable SMS](https://docs.retellai.com/deploy/enable-sms)**, not call import.)

**5. Recording access** — **[Get Call](https://docs.retellai.com/api-references/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](https://docs.retellai.com/accounts/signed-secure-url)**.

Best Regards.
