Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion fern/advanced/sip/sip-plivo.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ Indian phone numbers cannot be used with Plivo on Vapi due to TRAI regulations.
}'
```
2. Your response will look like this, note the phone number ID from the response for making calls.
```bash
```json
{
"id": "eba2fb13-259f-4123-abfa-xxxxxxxxxxxxxxx",
"orgId": "489ea344-c56f-4243-8723-b28362cd5a5c",
Expand Down
2 changes: 1 addition & 1 deletion fern/advanced/sip/sip.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ If your SIP provider or firewall requires IP allowlisting, use the signalling IP
To fill template variables, send custom SIP headers with your call.

For example, to fill the `first_name` variable, send a SIP header:
```
```text
x-first_name: John
```
Header names are case-insensitive (e.g., `X-First_Name`, `x-first_name`, and `X-FIRST_NAME` all work).
Expand Down
2 changes: 1 addition & 1 deletion fern/assistants/email-address-reading.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ The email formatter runs automatically with no configuration needed. However, yo

### Configuration path

```
```text
assistant.voice.chunkPlan.formatPlan
```

Expand Down
2 changes: 1 addition & 1 deletion fern/assistants/examples/multilingual-agent.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ The files are a snapshot, not a live customer database or product catalog.
* One Query tool for customer records, product information, and support article summaries

<Note>
**Alternative Approach**: For a more structured multilingual experience with explicit language selection, see our [Squad-based multilingual support](../../squads/examples/multilingual-support) that guides customers through language selection and dedicated conversation paths.
**Alternative Approach**: For a more structured multilingual experience with explicit language selection, see our [Squad-based multilingual support](/squads/examples/multilingual-support) that guides customers through language selection and dedicated conversation paths.
</Note>

## Prerequisites
Expand Down
2 changes: 1 addition & 1 deletion fern/assistants/retrieve-call-artifacts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Follow the [Vapi API key guide](/security-and-privacy/api-keys) to create, view,

To download or retrieve a recording or log file, send your Private API Key in the `Authorization` header:

```
```text
Authorization: Bearer <PRIVATE_API_KEY>
```

Expand Down
8 changes: 4 additions & 4 deletions fern/calls/call-outbound.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ You can place an outbound call from one of your phone numbers using the [`/call`

Provide your authorization token and now we're ready to issue the API call!

```jsx
```json
{
"assistantId": "assistant-id",
"phoneNumberId": "phone-number-id",
Expand All @@ -44,7 +44,7 @@ By default, an outbound call placed with a saved `assistantId` uses the assistan

To pin the call to a specific published version instead, add `assistantVersion` (a version label like `v3`) alongside the `assistantId`. Version pinning works only with a saved `assistantId`; it is rejected with a transient `assistant`.

```jsx
```json
{
"assistantId": "assistant-id",
"assistantVersion": "v3",
Expand All @@ -63,7 +63,7 @@ To schedule a call for the future, use the [`schedulePlan`](/api-reference/calls

When you schedule a call, we will save the Assistant, Phone Number, and Customer Number resources and refetch them at the time of the call. If you choose to provide a saved assistant through `assistantId`, we will pick up the most up-to-date version of your assistant at the call time. Likewise, if you delete your saved assistant, the call will fail! To ensure the call is issued with a static version of an assistant, pass it as a transient assistant through the `assistant` parameter.

```jsx
```json
{
"assistantId": "assistant-id",
"phoneNumberId": "phone-number-id",
Expand All @@ -82,7 +82,7 @@ To call more than one number at a time, use the [`customers`](/api-reference/cal

Use both `customers` and `schedulePlan` together to schedule batched calls.

```jsx
```json
{
"assistantId": "assistant-id",
"phoneNumberId": "phone-number-id",
Expand Down
2 changes: 1 addition & 1 deletion fern/cli/authentication.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ vapi auth status
```

Output:
```
```text
🔐 Vapi Authentication Status

Active Account:
Expand Down
2 changes: 1 addition & 1 deletion fern/cli/mcp-integration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ vapi mcp status
```

Output:
```
```text
MCP Configuration Status:
✓ Cursor: Configured (.cursor/mcp.json)
✗ Windsurf: Not configured
Expand Down
2 changes: 1 addition & 1 deletion fern/customization/custom-transcriber.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ You'll learn how to:
- **Streaming support requirement:**
The custom transcriber must support streaming. Vapi sends continuous audio data over the WebSocket, and your server must handle this stream in real time.
- **Authentication:**
For secure transcriber endpoints, use **Custom Credentials** with `credentialId`. Create [Custom Credentials](../../server-url/server-authentication) in the dashboard to manage Bearer Token, OAuth 2.0, or HMAC authentication. For backward compatibility, the legacy `secret` field is still supported and sends the value as an `x-vapi-secret` HTTP header.
For secure transcriber endpoints, use **Custom Credentials** with `credentialId`. Create [Custom Credentials](/server-url/server-authentication) in the dashboard to manage Bearer Token, OAuth 2.0, or HMAC authentication. For backward compatibility, the legacy `secret` field is still supported and sends the value as an `x-vapi-secret` HTTP header.
- **Buffering:**
The solution buffers PCM audio and performs simple validation (e.g. ensuring stereo PCM data length is a multiple of 4). If the audio data is malformed, it is trimmed to a valid length.
- **Channel detection:**
Expand Down
2 changes: 1 addition & 1 deletion fern/customization/custom-tts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ Create authentication credentials in the dashboard and reference them by ID:
</CodeBlocks>

<Note>
Create [Custom Credentials](../../server-url/server-authentication) in the Vapi dashboard for better security and credential management.
Create [Custom Credentials](/server-url/server-authentication) in the Vapi dashboard for better security and credential management.
</Note>

### Legacy Authentication Methods
Expand Down
2 changes: 1 addition & 1 deletion fern/customization/jwt-authentication.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ fetchData().catch(console.error);

If you set the scope to `public`, you can use it to make authenticated API requests using the Vapi Web Client.

```
```javascript
import Vapi from '@vapi-ai/web';

const vapi = new Vapi('your-jwt-token');
Expand Down
4 changes: 2 additions & 2 deletions fern/customization/multilingual.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ Create system prompts that explicitly list supported languages and handle multip
<Tabs>
<Tab title="Dashboard">
1. In the **Model** section, update your system prompt to explicitly list supported languages:
```
```text
You are a helpful assistant that can communicate in English, Spanish, and French.

Language Instructions:
Expand Down Expand Up @@ -321,7 +321,7 @@ Configure greeting messages that work across multiple languages.
<Tabs>
<Tab title="Dashboard">
1. In the **First message** field, enter a multilingual greeting:
```
```text
Hello! I can assist you in English, Spanish, or French. How can I help you today?
```
2. Select **Publish**, review the changes, select **Next**, then select **Publish** to apply the draft.
Expand Down
2 changes: 1 addition & 1 deletion fern/customization/speech-configuration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ This plan defines the parameters for when the assistant begins speaking after th
**LiveKit Smart Endpointing Configuration:**
When using LiveKit, you can customize the `waitFunction` parameter which determines how long the bot will wait to start speaking based on the likelihood that the user has finished speaking:

```
```text
waitFunction: "200 + 8000 * x"
```

Expand Down
16 changes: 8 additions & 8 deletions fern/customization/voice-pipeline-configuration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ For implementation examples, see **[Configuration examples](#configuration-examp

### Complete processing pipeline

```
```text
User Audio → VAD → Transcription → Start Speaking Decision → LLM → TTS → waitSeconds → Assistant Audio
```

Expand Down Expand Up @@ -471,7 +471,7 @@ Final audio delay applied after all processing completes, before the assistant s

`waitSeconds` is applied at the END of the voice pipeline processing:

```
```text
Endpointing Triggers → LLM Processes → TTS Generates → waitSeconds Delay → Assistant Speaks
```

Expand All @@ -486,7 +486,7 @@ Endpointing Triggers → LLM Processes → TTS Generates → waitSeconds Delay

Understanding exact timing helps optimize your voice pipeline configuration. This timeline shows what happens at every moment during the conversation flow.

```
```text
0.0s: User stops speaking
0.1s: Smart endpointing evaluation begins
0.6s: Smart endpointing triggers (varies by waitFunction)
Expand Down Expand Up @@ -588,7 +588,7 @@ VAD duration threshold when `numWords = 0`. Determines how long voice activity m

When `numWords = 0`, the voice pipeline uses **Voice Activity Detection (VAD)** instead of waiting for transcription:

```
```text
User Starts Speaking → VAD Detects Voice → Continuous for voiceSeconds Duration → Interrupt Assistant
```

Expand All @@ -612,7 +612,7 @@ Duration that blocks all assistant audio output after user interruption, creatin

#### Pipeline timing relationship

```
```text
User Interrupts → Assistant Audio Stopped → backoffSeconds Blocks All Output → Ready for New Input
```

Expand All @@ -626,7 +626,7 @@ User Interrupts → Assistant Audio Stopped → backoffSeconds Blocks All Output

**How to read this timeline:** This shows the complete flow from interruption to recovery. Notice how backoffSeconds creates a "quiet period" before normal processing resumes.

```
```text
0.0s: Assistant speaking: "I can help you book..."
1.2s: User interrupts: "Actually, wait"
1.2s: backoffSeconds (1.0s) starts → All audio blocked
Expand Down Expand Up @@ -802,5 +802,5 @@ Now that you understand voice pipeline configuration:

- **[Speech configuration](speech-configuration):** Learn about provider-specific voice settings
- **[Custom transcriber](custom-transcriber):** Configure transcription providers for your language
- **[Voice fallback plan](../voice-fallback-plan):** Set up backup voice options
- **[Debugging voice agents](../debugging):** Troubleshoot voice pipeline issues
- **[Voice fallback plan](/voice-fallback-plan):** Set up backup voice options
- **[Debugging voice agents](/debugging):** Troubleshoot voice pipeline issues
6 changes: 3 additions & 3 deletions fern/issue-reporting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ When reporting assistant-related issues, always include:

### Example Report Format

```
```text
Call ID: 9ac27e94-74a5-4061-8a0b-3c05389c63bd
Timestamp: 00:30
Issue: The assistant paused for 5 seconds before replying
Expand Down Expand Up @@ -128,7 +128,7 @@ For problems with the Vapi dashboard interface, configuration screens, or any vi

### Example Report Format

```
```text
URL: https://dashboard.vapi.ai/assistants/create
Browser: Chrome 120.0.6099.109
OS: macOS 14.1
Expand Down Expand Up @@ -165,7 +165,7 @@ For issues related to your account, billing, login, or organization settings, pr

### Example Report Format

```
```text
Email: user@example.com
Organization ID: c6fba1b9-3e07-429e-b265-4ce3bbef1627
Issue: Unable to upgrade to the Pro Success Package - payment processing fails
Expand Down
2 changes: 1 addition & 1 deletion fern/knowledge-base/knowledge-base.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ There are two main approaches to creating a Knowledge Base in Vapi:
1. Instruct your assistant to use the knowledge base when relevant by adding appropriate prompts in your assistant's configuration. This helps ensure the assistant knows when to reference the knowledge base versus using its general knowledge.

For example, if you have a knowledge base about your company's products, you might add this prompt:
```
```text
When users ask about our products, services, or company information, use the knowledge base to provide accurate details.
```

Expand Down
2 changes: 1 addition & 1 deletion fern/observability/boards-quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ Build custom metrics using formulas to calculate rates, averages, and more. Form
- **Query Name**: totalCalls
- **Metric**: Count of Call ID
6. Enter formula in the formula editor:
```
```text
({{totalBookings}} / {{totalCalls}}) * 100
```
7. Click **Preview** to validate
Expand Down
4 changes: 2 additions & 2 deletions fern/observability/evals-advanced.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -670,7 +670,7 @@ Choose the right judge type for each scenario:

**Decision tree:**

```
```text
Is the exact wording critical?
├─ Yes → Use Exact Match
└─ No → Does it follow a pattern?
Expand Down Expand Up @@ -959,7 +959,7 @@ One passing run isn't proof of reliability. Repeat critical or surprising Evals

Track eval executions systematically:

```javascript
```json
{
"timestamp": "2024-01-15T10:30:00Z",
"evalId": "eval-123",
Expand Down
2 changes: 1 addition & 1 deletion fern/observability/evals-quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,7 @@ For complex validation criteria beyond pattern matching, use AI-powered judges t

**Template structure:**

```
```text
You are an LLM-Judge. Evaluate ONLY the last assistant message in the mock conversation: {{messages[-1]}}.

Include the full conversation history for context: {{messages}}
Expand Down
8 changes: 4 additions & 4 deletions fern/openai-realtime.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ The system message in your model configuration is automatically optimized for re

Organize your prompts with clear sections for better model comprehension:

```
```text
# Role & Objective
You are a customer service agent for Acme Corp. Your goal is to resolve issues quickly.

Expand Down Expand Up @@ -270,7 +270,7 @@ politely offer to transfer them to a specialist.
<Tab title="Speaking Speed">
Control the model's speaking pace with explicit instructions:

```
```text
## Pacing
- Deliver responses at a natural, conversational speed
- Do not rush through information
Expand All @@ -280,7 +280,7 @@ politely offer to transfer them to a specialist.
<Tab title="Personality">
Realtime models excel at maintaining consistent personality:

```
```text
## Personality
- Warm and approachable like a trusted advisor
- Professional but not robotic
Expand All @@ -290,7 +290,7 @@ politely offer to transfer them to a specialist.
<Tab title="Conversation Flow">
Guide natural conversation progression:

```
```text
## Conversation Flow
1. Greeting: Welcome caller and ask how you can help
2. Discovery: Understand their specific needs
Expand Down
Loading
Loading