diff --git a/fern/advanced/sip/troubleshoot-sip-response-codes.mdx b/fern/advanced/sip/troubleshoot-sip-response-codes.mdx
index fe0903736..f07471740 100644
--- a/fern/advanced/sip/troubleshoot-sip-response-codes.mdx
+++ b/fern/advanced/sip/troubleshoot-sip-response-codes.mdx
@@ -19,7 +19,7 @@ A response can originate from Vapi, your SIP provider, your PBX or Session Borde
- Open the [**Vapi Dashboard**](https://dashboard.vapi.ai/), then choose **Observe** > **Logs**. Choose the **Calls** tab, then choose the failed call.
+ Open [**Logs → Calls**](/observability/logs/call-logs), then choose the failed call.
diff --git a/fern/assistants/model-intelligence/understanding-cost.mdx b/fern/assistants/model-intelligence/understanding-cost.mdx
index 72f8275b8..27e5023bd 100644
--- a/fern/assistants/model-intelligence/understanding-cost.mdx
+++ b/fern/assistants/model-intelligence/understanding-cost.mdx
@@ -8,9 +8,11 @@ slug: assistants/model-intelligence/understanding-cost
The cost to run a voice agent mainly depends on the costs of the transcriber, LLM, and voice. Each component uses a different billing unit, so we've made some assumptions in order to provide a way for you to compare estimated cost per minute.
-The Cost number within **Performance Metrics** provide estimates for comparison rather than exact quotes. Use them to compare models consistently and understand what affects cost. See [Vapi pricing](https://vapi.ai/pricing) for current pricing. For contracted customers, certain pricing may depend on your agreement, please contact your account team for contract-specific rates.
+The **Cost** value under **Performance Metrics** estimates costs for model comparison; it is not an exact quote. See [Vapi pricing](https://vapi.ai/pricing) for current rates, or contact your account team for contract-specific rates.
+To review costs for a completed call, open its [call log](/observability/logs/call-logs) and check the **Call Cost** tab when available.
+
## Key concepts
| Term | Definition |
@@ -94,4 +96,7 @@ You can reduce cost in four ways.
See how Vapi calculates model cost estimates.
+
+ Open a completed call and check its **Call Cost** tab for the per-component breakdown when available.
+
diff --git a/fern/assistants/structured-outputs-quickstart.mdx b/fern/assistants/structured-outputs-quickstart.mdx
index b263c7dd0..aa9ba2588 100644
--- a/fern/assistants/structured-outputs-quickstart.mdx
+++ b/fern/assistants/structured-outputs-quickstart.mdx
@@ -514,7 +514,7 @@ After the call ends, retrieve the extracted information:
- 1. Navigate to **Call Logs** in the left sidebar
+ 1. Open **Logs → Calls** in the left sidebar
2. Click on your recent call to view details
@@ -525,9 +525,9 @@ After the call ends, retrieve the extracted information:
- ### How structured outputs appear in Call Logs
+ ### How structured outputs appear in call logs
- When you view a call in the Call Logs page, structured outputs are displayed in the following format:
+ When you open a call from **Logs → Calls**, structured outputs appear in the following format:
```json
{
@@ -651,14 +651,14 @@ When accessing via API, this data is nested inside the structured output object
## HIPAA Compliance & Storage Settings
-**Important for HIPAA users:** When HIPAA mode is enabled, Vapi does not store structured outputs by default. This protects privacy but limits your ability to view structured outputs in Insights and Call Logs.
+**Important for HIPAA users:** When HIPAA mode is enabled, Vapi does not store structured outputs by default. This protects privacy but limits your ability to view structured outputs in Insights and [**Logs → Calls**](/observability/logs/call-logs).
### Understanding the default behavior
When your organization or assistant has HIPAA mode enabled:
- **Structured outputs are NOT stored** - Results are generated but not persisted in Vapi's systems
-- **Limited visibility** - You cannot view outputs in the Dashboard's Call Logs or Insights
+- **Limited visibility** - You cannot view outputs in [**Logs → Calls**](/observability/logs/call-logs) or Insights
- **Privacy first** - This ensures sensitive data is not retained
- **Webhook access only** - You can still receive outputs via webhooks during the call
@@ -923,7 +923,7 @@ Common validation patterns for reliable extraction:
| No data extracted | Verify the information was mentioned in the call and check schema validity |
| Partial extraction | Make non-critical fields optional and simplify nested structures |
| Incorrect values | Add more specific validation patterns and field descriptions |
-| Extraction fails | Check API logs, verify assistant configuration, and test with simpler schema |
+| Extraction fails | Open [**Logs → Calls**](/observability/logs/call-logs), inspect **Structured Outputs** and **Logs**, verify the assistant configuration, and test with a simpler schema |
## Get help
diff --git a/fern/billing/pricing-and-success-packages.mdx b/fern/billing/pricing-and-success-packages.mdx
index 4437c39ed..4fbd221ac 100644
--- a/fern/billing/pricing-and-success-packages.mdx
+++ b/fern/billing/pricing-and-success-packages.mdx
@@ -13,7 +13,11 @@ Every Vapi subscription starts with usage-based billing. Without an optional Suc
A Success Package adds support, service commitments, and higher included limits. Add-ons increase individual capabilities without replacing usage-based billing or your Success Package.
-See the [Vapi pricing page](https://vapi.ai/pricing) for the latest prices.
+## Estimate costs
+
+Use the **Calculator** on the [Vapi pricing page](https://vapi.ai/pricing) to estimate your monthly cost. Set your minutes and choose your transcriber, model, and voice providers. The calculator breaks the estimate down into hosting, transcriber, model, voice, and transport costs.
+
+To review costs for a completed call, open its [call log](/observability/logs/call-logs) and check the **Call Cost** tab when available.
## Usage only
diff --git a/fern/calls/assistant-based-warm-transfer.mdx b/fern/calls/assistant-based-warm-transfer.mdx
index 5c33711c7..ae8c4ddfd 100644
--- a/fern/calls/assistant-based-warm-transfer.mdx
+++ b/fern/calls/assistant-based-warm-transfer.mdx
@@ -187,7 +187,7 @@ Place a test call and trigger the transfer. Confirm that:
3. Accepting the call connects the customer and operator.
4. Declining the call or reaching voicemail returns the customer to the original assistant or ends the call according to `fallbackPlan`.
-In **Logs → Call Logs**, inspect the original call, destination call leg, transcript, and ended reason. To retrieve these details through the API, see the [Get Call API reference](/api-reference/calls/get). An `assistant-forwarded-call` ended reason confirms that the transfer was initiated; it does not confirm that the destination answered.
+In [**Logs → Calls**](/observability/logs/call-logs), inspect the original call, destination call leg, transcript, and ended reason. To retrieve these details through the API, see the [Get Call API reference](/api-reference/calls/get). An `assistant-forwarded-call` ended reason confirms that the transfer was initiated; it does not confirm that the destination answered.
## Troubleshooting
@@ -202,7 +202,7 @@ In **Logs → Call Logs**, inspect the original call, destination call leg, tran
| The customer cannot continue after a failed transfer | `fallbackPlan.endCallEnabled` is `true` | Set it to `false` so the original assistant remains on the call. |
| The transfer ends during a long operator interaction | A duration or silence timeout is too short | Increase `maxDurationSeconds` or `silenceTimeoutSeconds` within the supported ranges. |
-Check **Logs → API Logs** for validation and transfer errors. If Vapi initiated the transfer but the destination never rings, inspect the telephony provider's call detail records and follow [Troubleshoot call forwarding drops](/phone-calling/in-call-control/transfer-calls/debug-forwarding-drops).
+Check the affected call's **Logs** tab in [**Logs → Calls**](/observability/logs/call-logs) for validation and transfer errors. If Vapi initiated the transfer but the destination never rings, inspect the telephony provider's call detail records and follow [Troubleshoot call forwarding drops](/phone-calling/in-call-control/transfer-calls/debug-forwarding-drops).
## API reference
diff --git a/fern/calls/call-ended-reason.mdx b/fern/calls/call-ended-reason.mdx
index f5b00fdc3..24a29ce78 100644
--- a/fern/calls/call-ended-reason.mdx
+++ b/fern/calls/call-ended-reason.mdx
@@ -5,7 +5,7 @@ slug: calls/call-ended-reason
description: Understand Vapi endedReason codes that explain why a call ended, where to find them in call logs and the Call object, and how to diagnose each one.
---
-Every call in Vapi ends with an `endedReason` code that tells you exactly why it ended. You can find this value in the **"Ended Reason"** column of your [call logs](https://dashboard.vapi.ai/calls), or under the `endedReason` field on the [Call object](/api-reference/calls/get).
+Every call in Vapi ends with an `endedReason` code that tells you exactly why it ended. You can find this value in the **Ended Reason** column of [call logs](/observability/logs/call-logs), or under the `endedReason` field on the [Call object](/api-reference/calls/get).
For the full list of possible `endedReason` values, see the [API reference](/api-reference/calls/list#response.body.endedReason).
diff --git a/fern/chat/quickstart.mdx b/fern/chat/quickstart.mdx
index e6c9dec0b..4a3a8f80b 100644
--- a/fern/chat/quickstart.mdx
+++ b/fern/chat/quickstart.mdx
@@ -369,6 +369,7 @@ Take your chat bot to the next level:
* **[Streaming responses](/chat/streaming)** - Add real-time typing indicators and progressive responses
* **[Non-streaming responses](/chat/non-streaming)** - Learn about sessions and complex conversation flows
* **[Session management](/chat/session-management)** - Learn advanced context management with sessions and previousChatId
+* **[Chat logs](/observability/logs/chat-logs)** - Review chat inputs, outputs, message history, and costs
* **[OpenAI compatibility](/chat/openai-compatibility)** - Integrate with existing OpenAI workflows
diff --git a/fern/chat/session-management.mdx b/fern/chat/session-management.mdx
index f171a47e2..7bf76757f 100644
--- a/fern/chat/session-management.mdx
+++ b/fern/chat/session-management.mdx
@@ -260,6 +260,7 @@ These webhooks are useful for tracking session lifecycle, managing session state
* **[Streaming responses](/chat/streaming)** - Add real-time responses to session-managed chats
* **[OpenAI compatibility](/chat/openai-compatibility)** - Use familiar OpenAI patterns with sessions
* **[Function tools](/tools/custom-tools)** - Give assistants access to external APIs within sessions
+* **[Session logs](/observability/logs/session-logs)** - Review session status and persisted messages, then use [Chat logs](/observability/logs/chat-logs) to find individual chats by session ID
Need help? Ask other developers in the [Vapi Discord community](https://discord.gg/v5Ee6FhAZt) or mention us on [X/Twitter](https://x.com/Vapi_AI).
diff --git a/fern/chat/sms-chat.mdx b/fern/chat/sms-chat.mdx
index 178e8acc1..11824de58 100644
--- a/fern/chat/sms-chat.mdx
+++ b/fern/chat/sms-chat.mdx
@@ -54,7 +54,7 @@ SMS replies use the Chat API and follow its billing requirements. Usage-based or
-View all SMS conversations in the [Session Logs](https://dashboard.vapi.ai/logs/session) page of your dashboard. Each SMS conversation creates a session where you can see the full message history and conversation flow.
+View retained SMS conversations in [**Logs → Sessions**](/observability/logs/session-logs). Each SMS conversation creates a session. While it is retained, you can review its full message history and conversation flow.
---
@@ -66,7 +66,7 @@ When a customer texts your number:
1. **Session Creation**: Vapi automatically creates a chat session for the customer
2. **Context Management**: All messages maintain conversation context within the session
3. **Response Delivery**: Assistant responses are sent back as SMS messages
-4. **Session Expiry**: Sessions expire after 24 hours of inactivity, then create fresh sessions for new conversations
+4. **Session Expiry**: Sessions expire 24 hours after creation by default, then Vapi creates a new session for later conversations
```mermaid
sequenceDiagram
@@ -91,8 +91,8 @@ sequenceDiagram
SMS conversations use automatic session management:
* **New customers**: Get a fresh session on first text
-* **Returning customers**: Continue existing session if under 24 hours
-* **Session expiry**: After 24 hours, new session created automatically
+* **Returning customers**: Continue the existing session until it expires
+* **Session expiry**: After the session expires, Vapi creates a new session automatically
* **Context preservation**: Full conversation history maintained within session
---
diff --git a/fern/debugging.mdx b/fern/debugging.mdx
index bb380b65c..6496f47f2 100644
--- a/fern/debugging.mdx
+++ b/fern/debugging.mdx
@@ -2,7 +2,7 @@
title: Debugging voice agents
subtitle: Learn to identify, diagnose, and fix common issues with your voice assistants
slug: debugging
-description: Diagnose and fix voice agent issues using the Vapi dashboard's Call Logs, API Logs, and webhook logs, component testing, and provider status checks.
+description: Diagnose voice assistant issues with call, API request, and webhook logs, component testing, and provider status checks in the Vapi Dashboard.
---
## Overview
@@ -42,17 +42,17 @@ Start with these immediate checks before diving deeper:
- Shows tool execution results immediately
- Navigate to the `Observe` section in your [dashboard](https://dashboard.vapi.ai/) sidebar:
+ Use the [Logs overview](/observability/logs/overview) to choose the right log, then open **Logs** in the [Dashboard](https://dashboard.vapi.ai/):
-
+
Review call transcripts, durations, and error messages
-
- Check API requests and responses for integration issues
+
+ Check logged API requests and responses for integration issues
-
- Verify webhook deliveries and server responses
+
+ Verify logged webhook deliveries and server responses
@@ -66,8 +66,8 @@ Start with these immediate checks before diving deeper:
Test decisions at specific conversation points
-
- Test tools with sample data
+
+ Test supported tools with sample data
@@ -91,37 +91,34 @@ Start with these immediate checks before diving deeper:
The [Vapi dashboard](https://dashboard.vapi.ai/) provides powerful debugging features to help you identify and fix issues quickly:
-### Call Logs
+### Call logs
-Navigate to `Observe > Call Logs` to:
-- Review complete call transcripts
+Open [**Logs → Calls**](/observability/logs/call-logs) to:
+
+- Review available call transcripts
- Check call duration and completion status
- Identify where calls failed or ended unexpectedly
- See tool execution results and errors
- Analyze conversation flow
-
+### API request logs
-### API Logs
+Open [**Logs → API**](/observability/logs/api-request-logs) to:
-Navigate to `Observe > API Logs` to:
-- Monitor all API requests and responses
-- Check for authentication errors
+- Inspect logged API requests and responses
+- Review recorded `401` and `403` responses
- Verify request payloads and response codes
-- Debug integration issues with external services
+- Debug integrations that call the Vapi API
-
+### Webhook logs
-### Webhook Logs
+Open [**Logs → Webhooks**](/observability/logs/webhook-logs) to:
-Navigate to `Observe > Webhook Logs` to:
-- Verify webhook deliveries to your server
+- Verify logged webhook deliveries to your server
- Check server response codes and timing
- Debug webhook authentication issues
- Monitor event delivery failures
-
-
Use the Vapi CLI to forward webhooks to your local development server:
```bash
@@ -145,15 +142,14 @@ choosing a tool, asking for missing information, or escalating the call.
See [testing voice agents](/test/voice-testing) for guidance on choosing a test
and turning production failures into regression coverage.
-### Tool Testing
+### Tool testing
-For any tool in your `Tools` section:
-- Navigate to `Tools > [Select Tool]`
-- Use the `Test` button to send sample payloads
-- Verify tool responses and error handling
-- Debug parameter extraction and API calls
+The Dashboard can test API request, function, and Model Context Protocol (MCP) tools. To test one from **Tools**:
-
+- Select the tool.
+- Select **Test**.
+- Configure and run the test in the panel.
+- Review the response and any error details.
## Speech and language issues
@@ -175,13 +171,13 @@ For any tool in your `Tools` section:
| **Responses too long** | Add "Keep responses under X words" to system prompt |
| **Robotic speech** | Switch to a different voice provider |
| **Forgetting context** | Use models with larger context windows |
-| **Wrong information** | Check tool outputs and knowledge base accuracy via `Call Logs` |
+| **Wrong information** | Check tool outputs and knowledge base accuracy in [call logs](/observability/logs/call-logs) |
## Tool and variable debugging
| Problem Type | Issue | Solution |
|--------------|-------|----------|
-| **Tool execution** | Tools failing, HTTP errors, parameter issues | Navigate to `Observe > Call Logs` and check tool execution section, test tools individually at `Tools > [Select Tool] > Test`, validate configuration |
+| **Tool execution** | Tools failing, HTTP errors, parameter issues | Open [**Logs → Calls**](/observability/logs/call-logs) and check the **Logs** tab. For API request, function, and MCP tools, use **Test**, then validate the configuration. |
| **Variable extraction** | Variables not extracted, wrong values, missing data | Be specific in variable descriptions, use distinct enum values, add validation prompts |
**Variable extraction details:**
@@ -199,7 +195,7 @@ For any tool in your `Tools` section:
| **Agent misinterpreting speech** | Speech recognition issue | Check transcriber model, add custom keyterms |
| **Irrelevant responses** | Poor prompt engineering | Be more specific in system prompt |
| **Call drops immediately** | Configuration error | Check all required fields in assistant settings |
-| **Tool errors** | API integration issue | Test tools individually, verify endpoint URLs |
+| **Tool errors** | API integration issue | Use **Test** for API request, function, and MCP tools, then verify endpoint URLs. |
| **Long silences** | Model processing delay | Use faster models or reduce response length |
@@ -237,7 +233,7 @@ When you're stuck:
**Before asking for help:**
-- Include call ID and timestamp from `Call Logs` in your [dashboard](https://dashboard.vapi.ai/)
+- Include the call ID and timestamp from [**Logs → Calls**](/observability/logs/call-logs)
- Describe expected vs. actual behavior
- Share relevant configuration (without API keys)
- Include error messages from [dashboard](https://dashboard.vapi.ai/) logs
diff --git a/fern/docs.yml b/fern/docs.yml
index 8ce1835a1..b2d728d9f 100644
--- a/fern/docs.yml
+++ b/fern/docs.yml
@@ -686,6 +686,27 @@ navigation:
- page: Quickstart
path: observability/monitoring-quickstart.mdx
icon: fa-light fa-rocket
+ - section: Logs
+ icon: fa-light fa-rectangle-list
+ contents:
+ - page: Overview
+ path: observability/logs/overview.mdx
+ icon: fa-light fa-circle-info
+ - page: Call logs
+ path: observability/logs/call-logs.mdx
+ icon: fa-light fa-phone
+ - page: Chat logs
+ path: observability/logs/chat-logs.mdx
+ icon: fa-light fa-comments
+ - page: Session logs
+ path: observability/logs/session-logs.mdx
+ icon: fa-light fa-clock-rotate-left
+ - page: Webhook logs
+ path: observability/logs/webhook-logs.mdx
+ icon: fa-light fa-plug
+ - page: API request logs
+ path: observability/logs/api-request-logs.mdx
+ icon: fa-light fa-code
- section: Best practices
collapsed: open-by-default
diff --git a/fern/issue-reporting.mdx b/fern/issue-reporting.mdx
index 8ee6be94f..41e4a6fa6 100644
--- a/fern/issue-reporting.mdx
+++ b/fern/issue-reporting.mdx
@@ -58,7 +58,7 @@ When reporting assistant-related issues, always include:
- Navigate to [https://dashboard.vapi.ai/calls](https://dashboard.vapi.ai/calls)
+ Open [**Logs → Calls**](https://dashboard.vapi.ai/logs)
Find the specific call where the issue occurred
diff --git a/fern/observability/logs/api-request-logs.mdx b/fern/observability/logs/api-request-logs.mdx
new file mode 100644
index 000000000..ff0193b29
--- /dev/null
+++ b/fern/observability/logs/api-request-logs.mdx
@@ -0,0 +1,54 @@
+---
+title: API request logs
+subtitle: Inspect logged Vapi API requests and their responses
+slug: observability/logs/api-request-logs
+description: Use Vapi API request logs to inspect recorded requests to the Vapi API, review stored request and response details, check status codes, and debug integrations.
+---
+
+The **API** tab shows requests recorded after they reached Vapi's API logging layer, along with their stored request and response details. Use it to investigate logged requests from scripts and integrations.
+
+Requests rejected before request logging, such as some authentication or authorization failures, might not appear. The API tab is therefore not a complete record of every request attempted against the Vapi API.
+
+New to the API? See the [API reference](/api-reference) for endpoints and schemas. See [API keys](/security-and-privacy/api-keys) for creating and scoping keys. This page is about reading the request logs.
+
+## Access API request logs
+
+- **Dashboard:** [Logs → API](https://dashboard.vapi.ai/logs/api)
+- **API:** No Logs endpoint. Use the Dashboard to view API request logs.
+
+## The API request list
+
+The API tab lists logged requests, most recent first. Each row shows:
+
+- **Timestamp**: when the request reached Vapi's API logging layer.
+- **Resource**: the API resource the request targeted, such as `assistant`, `phone-number`, `tool`, or `squad`.
+- **Request duration**: how long Vapi took to respond, in seconds.
+- **Request HTTP method**: the method used, such as `GET`, `POST`, `PATCH`, or `DELETE`.
+- **Response HTTP code**: how the API responded. A `2xx` code generally indicates success, while a `4xx` or `5xx` code indicates an unsuccessful response. Some endpoints use an expected redirect, such as the `302` returned when downloading call logs.
+
+Use the search box to narrow the visible rows to the resource, method, or response code you are investigating.
+
+API request logging has no separate enable or disable switch, and the assistant's **Logging** setting does not control it. See [Retention and logging configuration](/observability/logs/overview#retention-and-logging-configuration) for availability and compliance behavior.
+
+## Opening an API request log
+
+Select a request to open its details, organized into three tabs:
+
+- **Request**: stored request details, including the method, URL, path, query, selected non-sensitive headers, request body when captured, and timing information. The `Authorization` header and other sensitive headers are excluded. Sensitive body values can be redacted.
+- **Response**: the HTTP code and response body when captured.
+- **Miscellaneous**: any stored error and the organization ID.
+
+## Debug with API request logs
+
+Reach for the API tab when a request did not do what you expected:
+
+- **A logged request returned an error.** Start with the response **code**. A `400` can indicate an invalid request body, a `404` can indicate a wrong endpoint or resource ID, and a `5xx` indicates a server-side failure. Check the endpoint's [API reference](/api-reference) for its expected schema and responses.
+- **A rejected request is not listed.** Authentication, authorization, rate limiting, and routing checks can reject a request before it reaches request logging. Use the response returned to your client, then check your [API key](/security-and-privacy/api-keys), endpoint, and request configuration.
+- **Confirm the stored request details.** Compare the method, path, query, selected non-sensitive headers, and captured body against what your code intended to send. The log is a sanitized representation, not an exact copy of the request.
+- **Tie a request to a resource.** Use the **Resource** column and the stored request path, query, or body to identify the endpoint and resource involved.
+
+## Related
+
+- Endpoints and schemas: [API reference](/api-reference)
+- Creating and scoping keys: [API keys](/security-and-privacy/api-keys)
+- What happened on a call: [Call logs](/observability/logs/call-logs)
diff --git a/fern/observability/logs/call-logs.mdx b/fern/observability/logs/call-logs.mdx
new file mode 100644
index 000000000..9538aa063
--- /dev/null
+++ b/fern/observability/logs/call-logs.mdx
@@ -0,0 +1,129 @@
+---
+title: Call logs
+subtitle: Inspect what happened on a call, end to end
+slug: observability/logs/call-logs
+description: Use Vapi call logs to inspect transcripts, messages, analysis, costs, latency, recordings, and artifacts, then diagnose what happened during a voice call.
+---
+
+Call logs show what happened during voice calls in your account. Start with the **Calls** tab when you need to understand a call or diagnose a problem.
+
+Vapi creates call records automatically. The assistant's **Logging** setting controls detailed pipeline logs, while separate artifact settings control recordings and transcripts. See [Retention and logging configuration](/observability/logs/overview#retention-and-logging-configuration) for availability, storage, and compliance behavior.
+
+To understand why a call ended, see [Call ended reasons](/calls/call-ended-reason). This page is about reading the logs.
+
+## Access call logs
+
+- **Dashboard:** [Logs → Calls](https://dashboard.vapi.ai/logs)
+- **API:** [List calls](/api-reference/calls/list) and [Get call](/api-reference/calls/get)
+
+```bash title="List recent calls"
+curl "https://api.vapi.ai/call" \
+ -H "Authorization: Bearer $VAPI_PRIVATE_API_KEY"
+```
+
+```bash title="Get one call by ID"
+curl "https://api.vapi.ai/call/YOUR_CALL_ID" \
+ -H "Authorization: Bearer $VAPI_PRIVATE_API_KEY"
+```
+
+```bash title="Download a call's pipeline logs"
+curl -L \
+ -H "Authorization: Bearer $VAPI_PRIVATE_API_KEY" \
+ -o call-logs.jsonl.gz \
+ https://api.vapi.ai/call/YOUR_CALL_ID/call-logs
+```
+
+## The calls list
+
+
+
+
+
+The Calls tab lists available calls, most recent first. Depending on your account and enabled features, each row can show:
+
+- **Call ID**: the call's unique identifier.
+- **Assistant / Squad**: who handled the call.
+- **Version**: the assistant or squad version.
+- **Assistant Phone Number**: the Vapi or imported phone number used for the call.
+- **Customer Phone Number**: the customer's phone number.
+- **Type**: the call type.
+- **Ended Reason**: how the call finished.
+- **Start Time**: when the call began.
+- **Duration**: how long it lasted.
+- **Cost**: what the call cost to run, when available.
+
+Filter by time range, assistant, squad, phone number, call type, or a specific call ID.
+
+The ended reason explains how each call finished. See [Call ended reasons](/calls/call-ended-reason) for what each code means and how to act on it.
+
+## Reading a single call
+
+
+
+
+
+When a recording is available, the top of the page shows a waveform you can play and scrub. Depending on the call and its artifact settings, downloads can include mono, stereo, assistant-only, customer-only, video, or packet capture (PCAP) files. Below are the per-call tabs.
+
+### Transcripts
+
+When a transcript is available, this tab shows the conversation as speaker-labeled bubbles. The assistant appears on one side and the caller on the other.
+
+Each line shows the wall-clock time and its offset from the start of the call. Select a line to seek the recording to that moment. Tool calls can appear inline, and the tab marks the end of the call.
+
+### Logs
+
+The assistant's **Logging** setting controls detailed pipeline logging. When stored entries are available, this tab shows them in order. Each row includes the time, level, category, and message. Categories can include **Transcriber**, **Model**, **Voice**, **Endpointing**, **Tool**, **Transport**, **Knowledge Base**, **Transfer**, **Webhook**, **System**, **Latency**, **Hook**, and **Chat**.
+
+Search and filter by level or category to narrow the list. You can also download the entries as gzipped JSON Lines (JSONL) from `GET /call/{id}/call-logs`. Clients must follow the `302` redirect.
+
+### Analysis
+
+The **Analysis** tab can show:
+
+- **Summary**: the model's summary of the call.
+- **Success Evaluation**: whether the call met the criteria you set, or a note that none applied.
+- **Data**: the structured data extracted from the conversation.
+- **Metadata** and **Assistant Override Variable Values**: the metadata and any override variable values that were in effect for the call.
+
+Summary, success evaluation, and structured data appear when you configure the corresponding analysis. Metadata and assistant override variable values appear when they are present on the call.
+
+### Structured Outputs
+
+This tab shows the values Vapi extracted from the conversation against your schema. It also identifies any structured outputs that Vapi skipped. See [Structured outputs](/assistants/structured-outputs) for how to define them.
+
+### Messages
+
+This tab shows the stored conversation-message objects for the call, in order. An object can represent a `user`, `bot`, or `system` message, a tool call, or a tool result. Each row shows its type or role, a timestamp, a copy button, and the full stored object as JSON.
+
+Use this tab to inspect the message data retained for the call. The objects are not necessarily the exact payloads sent to or returned by the model provider. The stored history depends on your artifact configuration.
+
+### Call Cost
+
+When available, the **Call Cost** tab shows the call's total cost, duration, and per-category breakdown. The tab may be hidden for organizations with invoiced billing. Contact your account team for cost details that reflect your agreement.
+
+Toggle between **Currency** and **Quantity** to view costs or usage. If the selected call has no stored cost breakdown, the tab shows **No Cost Breakdown Available**.
+
+Categories can include speech-to-text (STT), large language model (LLM), text-to-speech (TTS), **Vapi Platform**, **Transport**, analysis, voicemail detection, and knowledge base. Some categories also show usage details, including model tokens or voice characters. See [Understanding cost](/assistants/model-intelligence/understanding-cost) for what drives each component and [Vapi pricing](https://vapi.ai/pricing) for current rates.
+
+### Latency Summary
+
+The **Latency Summary** tab shows where time was spent during the call. It includes the turn count, average turn latency, and a breakdown by stage. Stages include **Transcriber**, **Endpointing**, **LLM**, **Voice**, and transport in each direction.
+
+Use the per-turn table to find which stage made the call feel slow. It shows each turn's total and per-stage milliseconds. The values are averages and per-turn measurements, not percentiles.
+
+For the full object behind these views, see the [call object](/api-reference/calls/get). Recordings and artifacts are also covered in [Call recording](/assistants/call-recording) and [Retrieve call artifacts](/assistants/retrieve-call-artifacts).
+
+## Debug with call logs
+
+Reach for call logs when a call did not go as expected:
+
+- **The call ended unexpectedly.** Start with the ended reason. [Call ended reasons](/calls/call-ended-reason) explains each code and the next step.
+- **The assistant said something wrong.** Compare **Transcripts** with the stored message data under **Messages**.
+- **The call was slow.** Use **Latency Summary** to find the slow component.
+- **The cost was higher than expected.** When **Call Cost** is available, use it to see which component drove the cost.
+
+## Related
+
+- Why a call ended: [Call ended reasons](/calls/call-ended-reason)
+- The call object and endpoints: [Get call](/api-reference/calls/get), [List calls](/api-reference/calls/list)
+- Recordings and artifacts: [Call recording](/assistants/call-recording), [Retrieve call artifacts](/assistants/retrieve-call-artifacts)
diff --git a/fern/observability/logs/chat-logs.mdx b/fern/observability/logs/chat-logs.mdx
new file mode 100644
index 000000000..51b1a88a0
--- /dev/null
+++ b/fern/observability/logs/chat-logs.mdx
@@ -0,0 +1,71 @@
+---
+title: Chat logs
+subtitle: Review chat conversations to see what was asked and answered
+slug: observability/logs/chat-logs
+description: Use Vapi chat logs to review text conversations, current inputs and outputs, prior message context, costs, session links, and unexpected replies.
+---
+
+A chat is a single text interaction with an assistant: the current `input`, the resulting `output`, and any prior `messages` context. A chat can stand alone, continue a previous chat, or belong to a [session](/observability/logs/session-logs).
+
+New to chats? Start with the [Chat quickstart](/chat/quickstart). See [Session management](/chat/session-management) to understand how turns keep context. This page is about reading the logs, not building with them.
+
+## Access chat logs
+
+- **Dashboard:** [Logs → Chat](https://dashboard.vapi.ai/logs/chat)
+- **API:** [List chats](/api-reference/chats/list) and [Get chat](/api-reference/chats/get)
+
+```bash title="List recent chats"
+curl "https://api.vapi.ai/chat" \
+ -H "Authorization: Bearer $VAPI_PRIVATE_API_KEY"
+```
+
+```bash title="Get one chat by ID"
+curl "https://api.vapi.ai/chat/YOUR_CHAT_ID" \
+ -H "Authorization: Bearer $VAPI_PRIVATE_API_KEY"
+```
+
+Chat logging has no separate enable or disable switch. See [Retention and logging configuration](/observability/logs/overview#retention-and-logging-configuration) for chat-history availability and retention behavior.
+
+## The chat list
+
+
+
+
+
+The Chat tab lists your chats, most recent first. Each row shows:
+
+- **Chat ID**: the chat's unique identifier.
+- **Prev. Chat ID**: the chat this one continues, if it is chained to an earlier turn.
+- **Session ID**: the session this chat belongs to, if any.
+- **Assistant**: the assistant that answered.
+- **Message Count**: the number of messages in the current input and output.
+- **Cost**: what the chat cost to run.
+- **Created At**: when the chat was created.
+
+Filter by time range, assistant, chat ID, session ID, or previous chat ID. The default time range is the last 14 days.
+
+## Opening a chat
+
+Select a chat to open its **Chat Details**:
+
+- **Overview**: the assistant that answered, the organization, and when the chat was created. It can also show session, previous-chat, workflow, and streaming details when available.
+- **Cost**: the chat's total cost, broken down into platform and model costs (with the model, provider, and token counts).
+- **Input**: the current request input stored for the chat.
+- **Output messages**: the messages produced for the current chat.
+- **Messages history**: prior context loaded through `sessionId` or `previousChatId`. Depending on the conversation, the history can include `developer`, `system`, `user`, `assistant`, and `tool` messages.
+
+For the complete object, see the [chat object](/api-reference/chats/get).
+
+## Debug with chat logs
+
+Reach for chat logs when a text conversation did not behave as expected:
+
+- **The reply does not match the request.** Compare **Input** with **Output messages**. Then review **Messages history** for persisted prior context. If expected earlier turns are missing, check how the chat was linked.
+- **The assistant lost the thread across turns.** Check the **Session ID** and **Prev. Chat ID** columns. The `sessionId` field associates the chat with a session. The `previousChatId` field continues context directly from one prior chat. These fields are mutually exclusive. A chat without either field does not load persisted context automatically. See [Session management](/chat/session-management).
+- **A chat is missing.** Confirm the assistant and time range. Chats are separate from calls and appear only under the Chat tab.
+
+## Related
+
+- Build with chats: [Chat quickstart](/chat/quickstart)
+- Keep context across turns: [Session management](/chat/session-management)
+- The session a chat belongs to: [Session logs](/observability/logs/session-logs)
diff --git a/fern/observability/logs/overview.mdx b/fern/observability/logs/overview.mdx
new file mode 100644
index 000000000..b5e1b6e73
--- /dev/null
+++ b/fern/observability/logs/overview.mdx
@@ -0,0 +1,63 @@
+---
+title: Logs overview
+subtitle: Find the right log for what you need to know
+slug: observability/logs/overview
+description: Compare Calls, Chat, Sessions, Webhooks, and API in Vapi Logs to choose the right log, understand what it records, and find the available access method.
+---
+
+The **Logs** section of the [Dashboard](https://dashboard.vapi.ai) brings together retained activity across five tabs:
+
+- **Calls**: voice calls, including transcripts, messages, recordings, analysis, latency, and cost when available.
+- **Chat**: text conversations with an assistant.
+- **Sessions**: conversation state that persists across chats.
+- **Webhooks**: logged server-message delivery operations from Vapi to your server.
+- **API**: requests logged by the Vapi API.
+
+## Retention and logging configuration
+
+Log generation, history availability, and data deletion are separate controls. An activity must happen before Vapi can log it. What remains available then depends on your subscription, compliance mode, and any settings for that log type.
+
+Usage only and each Success Package determine how far back history is available in Vapi. The Extended Retention add-on can raise the call and chat history windows. Calls use the call-history window, Chat and Sessions use the chat-history window, and Webhooks and API use the longer of the two. See [Pricing and Success Packages](/billing/pricing-and-success-packages#whats-included).
+
+The separately billed Data Retention add-on enables an organization setting that clears eligible call, chat, and session content after the configured number of days. It does not delete Webhook or API logs. See [Manage Success Packages and add-ons](/billing/manage-packages-and-add-ons#buy-compliance-and-data-add-ons).
+
+Compliance settings can also change what Vapi stores:
+
+- **ZDR:** For calls, [Zero Data Retention (ZDR)](/security-and-privacy/zero-data-retention) prevents Vapi from storing recordings, transcripts, messages, summaries, and detailed pipeline logs. Call records and limited operational data, including cost and performance metrics, remain available. ZDR also prevents Vapi from storing Webhook and API request logs.
+- **HIPAA:** [HIPAA mode](/security-and-privacy/hipaa) uses HIPAA-compliant storage for supported call logs, recordings, and transcripts. API and Webhook logs use the HIPAA log store when HIPAA with Data Retention is enabled. Configured retention and artifact settings still apply.
+
+ZDR and HIPAA mode cannot be enabled together.
+
+| Surface | Do you need to enable logging? | What configuration affects it? |
+| --- | --- | --- |
+| [Calls](/observability/logs/call-logs) | No. Vapi creates the call record automatically. | **Logging**, **Audio Recording**, and **Transcript** are enabled by default and controlled separately under **Assistants → Advanced → Recording & Artifacts**. **Logging** controls detailed pipeline logging, not the call record. |
+| [Chat](/observability/logs/chat-logs) | No. Chat logging has no separate enable or disable switch. | For chats that Vapi stores, the subscription's chat-history window limits how long the record remains available. |
+| [Sessions](/observability/logs/session-logs) | No. Session logging has no separate enable or disable switch. | For sessions that Vapi stores, the chat-history window limits how long the record remains available. Session expiration controls how long a session remains active, not how long its history is available. |
+| [Webhooks](/observability/logs/webhook-logs) | No. Vapi creates a log when it attempts a configured server-message delivery. | Your Server URL and event configuration determine which deliveries happen. The assistant's **Logging** setting does not disable Webhook-tab logs. ZDR prevents the log from being written; the subscription log-history window limits how long written logs remain available. |
+| [API requests](/observability/logs/api-request-logs) | No. Vapi automatically logs requests that reach its API logging layer. | There is no separate switch, and the assistant's **Logging** setting does not control this log type. Requests rejected before the logging layer might not appear. The subscription log-history window limits availability; ZDR prevents Vapi from writing API request logs. |
+
+## Which log answers which question
+
+| You want to... | Look in |
+| --- | --- |
+| See what happened on a phone or web call | [Call logs](/observability/logs/call-logs) |
+| Review a text conversation | [Chat logs](/observability/logs/chat-logs) |
+| Understand why a conversation lost context | [Session logs](/observability/logs/session-logs) |
+| Review a logged server-message delivery | [Webhook logs](/observability/logs/webhook-logs) |
+| Inspect a logged API request and response | [API request logs](/observability/logs/api-request-logs) |
+
+## Filter and find
+
+Use the search and filters available on each tab. Calls, Chat, Sessions, and Webhooks support time-range filtering and log-specific filters. The API tab supports text search.
+
+## Access logs
+
+The Dashboard provides all five log types. Calls, chats, and sessions also have public resource endpoints.
+
+| Surface | Dashboard | Public API |
+| --- | --- | --- |
+| [Call logs](/observability/logs/call-logs) | Logs → Calls | [List calls](/api-reference/calls/list) / [Get call](/api-reference/calls/get) |
+| [Chat logs](/observability/logs/chat-logs) | Logs → Chat | [List chats](/api-reference/chats/list) / [Get chat](/api-reference/chats/get) |
+| [Session logs](/observability/logs/session-logs) | Logs → Sessions | [List sessions](/api-reference/sessions/list) / [Get session](/api-reference/sessions/get) |
+| [Webhook logs](/observability/logs/webhook-logs) | Logs → Webhooks | No Logs endpoint |
+| [API request logs](/observability/logs/api-request-logs) | Logs → API | No Logs endpoint |
diff --git a/fern/observability/logs/session-logs.mdx b/fern/observability/logs/session-logs.mdx
new file mode 100644
index 000000000..a94fc6b92
--- /dev/null
+++ b/fern/observability/logs/session-logs.mdx
@@ -0,0 +1,66 @@
+---
+title: Session logs
+subtitle: Review sessions to see how a conversation kept context across turns
+slug: observability/logs/session-logs
+description: Use Vapi session logs to review persistent conversation context, status, messages, assistant details, and expiration behavior, then find individual chats by session ID.
+---
+
+A session holds conversation state so it can continue across multiple chat requests. Use the **Sessions** tab to review what was said, which assistant handled it, and whether the session is still active.
+
+New to sessions? Start with [Session management](/chat/session-management). It explains how `sessionId` groups chats into a session and how `previousChatId` continues directly from one prior chat. These options are mutually exclusive. This page is about reading the logs, not building with them.
+
+## Access session logs
+
+- **Dashboard:** [Logs → Sessions](https://dashboard.vapi.ai/logs/session)
+- **API:** [List sessions](/api-reference/sessions/list) and [Get session](/api-reference/sessions/get)
+
+```bash title="List recent sessions"
+curl "https://api.vapi.ai/session" \
+ -H "Authorization: Bearer $VAPI_PRIVATE_API_KEY"
+```
+
+```bash title="Get one session by ID"
+curl "https://api.vapi.ai/session/YOUR_SESSION_ID" \
+ -H "Authorization: Bearer $VAPI_PRIVATE_API_KEY"
+```
+
+Session logging has no separate enable or disable switch. Session expiration controls how long a session remains active, not its history window. See [Retention and logging configuration](/observability/logs/overview#retention-and-logging-configuration) for availability and retention behavior.
+
+## The session list
+
+
+
+
+
+The Sessions tab lists your sessions, most recent first. Each row shows:
+
+- **Session ID** and **Session Name**.
+- **Status**: `active` while the conversation is ongoing, `completed` once it ends.
+- **Assistant**: the assistant handling the session.
+- **Type**: `SMS` or `Web`. SMS sessions can also show **Customer Phone Number** and **Assistant Phone Number**.
+- **Created At**: when the session started.
+- **Updated At**: when the session last changed, such as a new message or a status change.
+
+Filter by time range, assistant, session name, session ID, or customer phone number. The default time range is the last 14 days.
+
+## Opening a session
+
+Select a session to open its **Session Details**:
+
+- **Overview**: the status (`active` or `completed`), session name, organization, assistant, and created and updated times. It can also show phone-number details, customer details, variable values, cost, workflow information, and structured outputs when available. Structured outputs appear after the session completes.
+- **Messages**: the message history persisted for the session, with each message's role and the total count. Review it to see the context carried across chats that used this `sessionId`.
+
+For the complete object, see the [session object](/api-reference/sessions/get).
+
+## Debug with session logs
+
+Reach for session logs when context did not behave as expected:
+
+- **The assistant "forgot" earlier turns.** Open the session and read **Messages** to confirm that the earlier turns are part of it. If they are missing, confirm that later chats used the same `sessionId`. A `previousChatId` can continue context from one prior chat, but it does not add the chat to a session. See [Session management](/chat/session-management).
+- **A conversation ended sooner than expected.** Check **Status** and **Created At**. A session expires `expirationSeconds` after it was created; **Updated At** does not extend the expiration window.
+- **The assistant gave an unexpected reply.** Read **Messages** to review the history carried by the session. Then open [Chat logs](/observability/logs/chat-logs) and filter by **Session ID** to compare each chat's current input and output.
+
+## Related
+
+- Concept and setup: [Session management](/chat/session-management)
+- The individual turns inside a session: [Chat logs](/observability/logs/chat-logs)
diff --git a/fern/observability/logs/webhook-logs.mdx b/fern/observability/logs/webhook-logs.mdx
new file mode 100644
index 000000000..52a1cec27
--- /dev/null
+++ b/fern/observability/logs/webhook-logs.mdx
@@ -0,0 +1,54 @@
+---
+title: Webhook logs
+subtitle: Inspect server-message delivery results and debug failed deliveries
+slug: observability/logs/webhook-logs
+description: Use Vapi webhook logs to inspect recorded server-message deliveries, request and response details, status codes, timing, retries, and failed outcomes.
+---
+
+Webhook logs show recorded server-message delivery operations from Vapi to your Server URL and the final result of each operation. Use the **Webhooks** tab to confirm a logged delivery and investigate unsuccessful outcomes.
+
+New to server messages? See [Server events](/server-url/events) for the event types Vapi sends. See [Server authentication](/server-url/server-authentication) to secure the endpoint. This page is about reading the delivery logs.
+
+## Access webhook logs
+
+- **Dashboard:** [Logs → Webhooks](https://dashboard.vapi.ai/logs/webhook)
+- **API:** No Logs endpoint. Use the Dashboard to view webhook logs.
+
+## The webhook list
+
+The Webhooks tab lists each logged delivery operation with:
+
+- **Timestamp**: when Vapi started the delivery.
+- **Webhook type**: the delivery type, such as `end-of-call-report` or `tool-calls`. See [Server events](/server-url/events) for server-message types.
+- **Request HTTP method**: how Vapi called your server (usually `POST`).
+- **Response HTTP code**: the final result of the delivery. Any `2xx` response means your server accepted it; a non-2xx result means the delivery did not succeed.
+- **Request duration**: the total elapsed time for the delivery operation. This can include retries and the time between them.
+
+Filter by time range, HTTP method, response code, webhook type, assistant, squad, phone number, call ID, or webhook log ID.
+
+Vapi writes a Webhook log when it attempts a configured server-message delivery. See [Retention and logging configuration](/observability/logs/overview#retention-and-logging-configuration) for configuration, availability, and compliance behavior.
+
+## Opening a webhook log
+
+Select a delivery to open its **Webhook Details**, organized into three tabs:
+
+- **Request**: stored request details, including the method, URL, path, query, selected non-sensitive headers, request body when captured, and timing information. Authentication headers and other sensitive headers are excluded. Sensitive body values can be redacted.
+- **Response**: the final HTTP code and response body when captured.
+- **Miscellaneous**: any captured error and the available identifiers for correlating the delivery, such as call, assistant, squad, phone number, and customer IDs.
+
+## Debug with webhook logs
+
+Reach for webhook logs when your server did not act on an event:
+
+- **The response is `401` or `403`.** Your server may have rejected the request's [authentication](/server-url/server-authentication). Check the response and any error under **Miscellaneous**.
+- **The response is `404`.** Verify the Server URL and path.
+- **The response is `5xx`, or the duration is long.** A `5xx` result can come from your server or from a transport or timeout failure. A long duration can indicate retries or a timeout, but does not prove either one by itself.
+- **Confirm the stored request details.** Inspect the method, URL, selected non-sensitive headers, and body captured in the **Request** tab. Authentication headers and other sensitive headers are excluded. Verify the authentication values against your [server authentication](/server-url/server-authentication) configuration.
+- **Tie a delivery to its call.** When available, the **Miscellaneous** tab includes the call, assistant, and squad IDs you can use to find the matching [call log](/observability/logs/call-logs).
+- **An event seems missing.** Filter by webhook type and call ID. A missing log does not prove that Vapi made no delivery attempt because retention and ZDR settings affect which logs are stored.
+
+## Related
+
+- The events Vapi sends: [Server events](/server-url/events)
+- Securing your endpoint: [Server authentication](/server-url/server-authentication)
+- Testing locally: [Developing locally](/server-url/developing-locally)
diff --git a/fern/security-and-privacy/hipaa.mdx b/fern/security-and-privacy/hipaa.mdx
index 462b10173..d14309d39 100644
--- a/fern/security-and-privacy/hipaa.mdx
+++ b/fern/security-and-privacy/hipaa.mdx
@@ -94,11 +94,11 @@ When enabling HIPAA compliance, only HIPAA compliant providers may be chosen. Se
## Structured Outputs with HIPAA Mode
-When HIPAA mode is enabled, Vapi does not store structured outputs by default. This protects privacy but limits your ability to use structured outputs in Insights and Call Logs. For non-sensitive outputs, you can override this behavior.
+When HIPAA mode is enabled, Vapi does not store structured outputs by default. This protects privacy but limits your ability to use structured outputs in Insights and [**Logs → Calls**](/observability/logs/call-logs). For non-sensitive outputs, you can override this behavior.
- By default, when HIPAA mode is on, Vapi doesn't store structured outputs. This keeps data private but limits your ability to use structured outputs in Insights and Call Logs.
+ By default, when HIPAA mode is on, Vapi doesn't store structured outputs. This keeps data private but limits your ability to use structured outputs in Insights and [**Logs → Calls**](/observability/logs/call-logs).
You can enable storage for specific structured outputs using the `compliancePlan.forceStoreOnHipaaEnabled` setting. This allows you to store non-sensitive outputs even when HIPAA mode is active.
diff --git a/fern/server-url/events.mdx b/fern/server-url/events.mdx
index 9e65e5754..a2db22bf5 100644
--- a/fern/server-url/events.mdx
+++ b/fern/server-url/events.mdx
@@ -30,6 +30,8 @@ Most events are informational and do not require a response. Responses are only
Note: Some specialized messages like "voice-request" and "call.endpointing.request" are sent to their dedicated servers if configured (e.g. `assistant.voice.server.url`, `assistant.startSpeakingPlan.smartEndpointingPlan.server.url`).
+To inspect recorded server-message deliveries and responses, see [Webhook logs](/observability/logs/webhook-logs).
+
Monitoring alerts are a separate webhook. When a monitor detects an issue, Vapi sends an `issue.created` message to your notifier endpoint rather than the assistant Server URL. Its payload is documented in [Monitoring](/observability/monitoring-quickstart#webhook-payload).
diff --git a/fern/static/images/observability/logs/call-detail.png b/fern/static/images/observability/logs/call-detail.png
new file mode 100644
index 000000000..edd7eae20
Binary files /dev/null and b/fern/static/images/observability/logs/call-detail.png differ
diff --git a/fern/static/images/observability/logs/calls-tab.png b/fern/static/images/observability/logs/calls-tab.png
new file mode 100644
index 000000000..7d22b0e20
Binary files /dev/null and b/fern/static/images/observability/logs/calls-tab.png differ
diff --git a/fern/static/images/observability/logs/chat-tab.png b/fern/static/images/observability/logs/chat-tab.png
new file mode 100644
index 000000000..8029051c3
Binary files /dev/null and b/fern/static/images/observability/logs/chat-tab.png differ
diff --git a/fern/static/images/observability/logs/sessions-tab.png b/fern/static/images/observability/logs/sessions-tab.png
new file mode 100644
index 000000000..a4ec636b6
Binary files /dev/null and b/fern/static/images/observability/logs/sessions-tab.png differ
diff --git a/fern/static/videos/debugging/api-logs.mp4 b/fern/static/videos/debugging/api-logs.mp4
deleted file mode 100644
index 4a8c7ffcb..000000000
Binary files a/fern/static/videos/debugging/api-logs.mp4 and /dev/null differ
diff --git a/fern/static/videos/debugging/call-logs.mp4 b/fern/static/videos/debugging/call-logs.mp4
deleted file mode 100644
index 1c5839094..000000000
Binary files a/fern/static/videos/debugging/call-logs.mp4 and /dev/null differ
diff --git a/fern/static/videos/debugging/tool-testing.mp4 b/fern/static/videos/debugging/tool-testing.mp4
deleted file mode 100644
index 0974217c6..000000000
Binary files a/fern/static/videos/debugging/tool-testing.mp4 and /dev/null differ
diff --git a/fern/static/videos/debugging/webhook-logs.mp4 b/fern/static/videos/debugging/webhook-logs.mp4
deleted file mode 100644
index 08ab91b94..000000000
Binary files a/fern/static/videos/debugging/webhook-logs.mp4 and /dev/null differ
diff --git a/fern/tools/transfer-call.mdx b/fern/tools/transfer-call.mdx
index 8e18885f9..b6cec5875 100644
--- a/fern/tools/transfer-call.mdx
+++ b/fern/tools/transfer-call.mdx
@@ -206,7 +206,7 @@ The `assistant-forwarded-call` ended reason confirms that Vapi initiated the tra
| The assistant says it will transfer, but the call remains active | The model generated speech without invoking the tool | Require the acknowledgment and tool invocation in the same response. Check the call log for a `transferCall` invocation. |
| The assistant selects the wrong destination | Destination descriptions overlap or do not state a clear routing intent | Give every destination a distinct description and add matching routing rules to the system prompt. |
| The tool returns a validation or configuration error | The destination is missing or malformed | Confirm that `destinations` is an array and that each item has a valid `type` and required value. Use E.164 format for PSTN phone numbers. |
-| The call has `assistant-forwarded-call`, but the destination never rings | Vapi initiated the transfer, but the downstream route did not complete it | Check **Logs → API Logs** for the transfer request and response, then check the provider call detail record and transfer compatibility. For SIP calls, inspect the provider's REFER or dial behavior. |
+| The call has `assistant-forwarded-call`, but the destination never rings | Vapi initiated the transfer, but the downstream route did not complete it | Check the affected call's **Logs** tab in [**Logs → Calls**](/observability/logs/call-logs) for transfer errors, then check the provider call detail record and transfer compatibility. For SIP calls, inspect the provider's REFER or dial behavior. |
| The assistant transfers when it should continue helping | The prompt permits broad invocation | Narrow the prompt conditions. For tools configured through the API, you can also add a [tool rejection plan](/tools/tool-rejection-plan). |
| An assistant-to-assistant transfer stalls or behaves like an external call | The transfer call tool is being used for assistant routing | Use the [handoff tool](/squads/handoff) for transfers between standalone assistants or assistants in a Squad. |
diff --git a/fern/tools/transfer-call/blind-transfer.mdx b/fern/tools/transfer-call/blind-transfer.mdx
index 222b041ca..d5e03d87a 100644
--- a/fern/tools/transfer-call/blind-transfer.mdx
+++ b/fern/tools/transfer-call/blind-transfer.mdx
@@ -137,7 +137,7 @@ An `assistant-forwarded-call` ended reason confirms that Vapi initiated the tran
| Symptom | Likely cause | Resolution |
| --- | --- | --- |
-| The original call ends, but the destination never rings | The SIP system rejected or did not receive the REFER | Check **Logs → API Logs**, then inspect the provider or PBX SIP logs and packet capture. Confirm required SIP signaling addresses are allowed. |
+| The original call ends, but the destination never rings | The SIP system rejected or did not receive the REFER | Check the affected call's **Logs** tab in [**Logs → Calls**](/observability/logs/call-logs), then inspect the provider or PBX SIP logs and packet capture. Confirm required SIP signaling addresses are allowed. |
| The call ends without dialing a destination | `sipVerb` is set to `bye` | Use `refer` or `dial` when Vapi should place or initiate the transfer. |
| A dial transfer stops ringing too soon | `dialTimeout` is too short | Increase `dialTimeout` within the 1–600 second range. |
| The summary header is missing | The standard blind mode is selected or summary generation is disabled | Use `blind-transfer-add-summary-to-sip-header` and enable `summaryPlan`. Inspect the receiving SIP system rather than the audio transcript. |
diff --git a/fern/tools/transfer-call/warm-transfer.mdx b/fern/tools/transfer-call/warm-transfer.mdx
index 1ef9c5212..ba530473d 100644
--- a/fern/tools/transfer-call/warm-transfer.mdx
+++ b/fern/tools/transfer-call/warm-transfer.mdx
@@ -200,7 +200,7 @@ Place a test call and trigger the configured destination. Confirm that:
3. A wait-first mode allows the operator to speak before delivering the content.
4. The customer and destination can hear each other after the introduction.
-In **Logs → Call Logs**, inspect the transfer history and destination content. In **Logs → API Logs**, check for validation, summary-generation, and transfer errors.
+In [**Logs → Calls**](/observability/logs/call-logs), inspect the transfer history and destination content. Check the **Logs** tab for validation, summary-generation, and transfer errors.
## Troubleshooting