diff --git a/fern/advanced/sip/sip.mdx b/fern/advanced/sip/sip.mdx
index d7fd1defe..1863d4e5d 100644
--- a/fern/advanced/sip/sip.mdx
+++ b/fern/advanced/sip/sip.mdx
@@ -100,3 +100,7 @@ If your SIP provider or firewall requires IP allowlisting, use the signalling IP
Now, every time you make a call to this phone number, your server will receive an `assistant-request` event.
+
+## Send SIP requests during a call
+
+On calls to a Vapi SIP number or through a [BYO SIP trunk](/advanced/sip/sip-trunk), your assistant can send SIP INFO, MESSAGE, or NOTIFY requests to the other end of the call, for example to pass call details to your PBX or contact center platform. See [SIP Request tool](/tools/sip-request).
diff --git a/fern/docs.yml b/fern/docs.yml
index 1a027d6e8..36a0e3dc9 100644
--- a/fern/docs.yml
+++ b/fern/docs.yml
@@ -221,137 +221,6 @@ navigation:
path: assistants/model-intelligence/understanding-cost.mdx
- page: Understanding latency
path: assistants/model-intelligence/understanding-latency.mdx
- - section: Tools
- path: tools/introduction.mdx
- collapsed: true
- icon: fa-light fa-toolbox
- contents:
- - page: Built-in tools
- path: tools/default-tools.mdx
- icon: fa-light fa-gear
- - page: When to use API Request or Function tools
- path: tools/api-request-vs-function.mdx
- icon: fa-light fa-code-compare
- - section: API Request tool
- path: tools/api-request.mdx
- icon: fa-light fa-globe
- contents:
- - page: Coffee-order quickstart
- path: tools/api-request/quickstart.mdx
- - page: Customize requests
- path: tools/api-request/configuration.mdx
- - page: Get order status
- path: tools/api-request/order-status.mdx
- - page: Handle latency and retries
- path: tools/api-request/reliability.mdx
- - page: Handle responses and errors
- path: tools/api-request/response-handling.mdx
- - page: Use response data
- path: tools/api-request/response-data.mdx
- - page: Function tools
- path: tools/custom-tools.mdx
- icon: fa-light fa-screwdriver-wrench
- - section: Transfer Call tool
- path: tools/transfer-call.mdx
- icon: fa-solid fa-phone
- contents:
- - page: Blind transfer
- path: tools/transfer-call/blind-transfer.mdx
- - page: Warm transfer
- path: tools/transfer-call/warm-transfer.mdx
- - page: Assistant-based warm transfer
- path: calls/assistant-based-warm-transfer.mdx
- - section: Hang Up tool
- path: tools/hang-up.mdx
- icon: fa-light fa-phone-hangup
- contents:
- - page: Hang Up tool quickstart
- path: tools/hang-up/quickstart.mdx
- - page: Configure the Hang Up tool
- path: tools/hang-up/configuration.mdx
- - section: Handoff tool
- path: squads/handoff.mdx
- icon: fa-light fa-hand-holding-hand
- contents:
- - page: Configure handoff destinations
- path: squads/handoff/destinations.mdx
- - page: Pass context and variables
- path: squads/handoff/context-and-variables.mdx
- - page: Configure messages and rejection rules
- path: squads/handoff/messages-and-rejection.mdx
- - page: Troubleshoot handoffs
- path: squads/handoff/troubleshooting.mdx
- - section: Voicemail tool
- path: tools/voicemail-tool.mdx
- icon: fa-light fa-voicemail
- contents:
- - page: Configure the Voicemail tool
- path: tools/voicemail-tool/configure.mdx
- - page: Client-side tools (Web SDK)
- path: tools/client-side-websdk.mdx
- icon: fa-light fa-browser
- - section: Knowledge bases
- path: knowledge-base/knowledge-base.mdx
- icon: fa-light fa-book
- contents:
- - page: Query tool
- path: knowledge-base/using-query-tool.mdx
- icon: fa-light fa-magnifying-glass
- - page: Custom knowledge base
- path: knowledge-base/custom-knowledge-base.mdx
- icon: fa-light fa-server
- - page: Implement the custom endpoint
- path: knowledge-base/implement-custom-endpoint.mdx
- icon: fa-light fa-code
- - link: MCP tools
- href: /tools/mcp
- icon: fa-light fa-network-wired
- - section: Integrations
- path: tools/integrations.mdx
- icon: fa-light fa-cubes
- contents:
- - page: Make
- path: tools/integrations/make.mdx
- icon: fa-light fa-diagram-project
- - page: n8n
- path: tools/integrations/n8n.mdx
- icon: fa-light fa-diagram-project
- - page: Google Calendar
- path: tools/google-calendar.mdx
- icon: fa-light fa-calendar-days
- - page: Google Sheets
- path: tools/google-sheets.mdx
- icon: fa-brands fa-google-drive
- - page: Slack
- path: tools/slack.mdx
- icon: fa-brands fa-slack
- - page: GoHighLevel
- path: tools/go-high-level.mdx
- icon: fa-light fa-arrow-up
- - section: Static variables and aliases
- path: tools/static-variables-and-aliases.mdx
- icon: fa-light fa-arrow-right-arrow-left
- contents:
- - page: How tool variables work
- path: tools/static-variables-and-aliases/how-variables-work.mdx
- - page: Set static parameters
- path: tools/static-variables-and-aliases/static-parameters.mdx
- - page: Extract and chain values
- path: tools/static-variables-and-aliases/extract-and-chain.mdx
- - page: Troubleshoot tool variables
- path: tools/static-variables-and-aliases/troubleshooting.mdx
- - page: Dynamic tool messages
- path: tools/dynamic-tool-messages.mdx
- icon: fa-light fa-comment
- - page: Tool rejection plan
- path: tools/tool-rejection-plan.mdx
- icon: fa-light fa-shield-xmark
- - page: Argument encryption
- path: tools/arguments-encryption.mdx
- icon: fa-light fa-lock
- - page: Troubleshoot tools
- path: tools/custom-tools-troubleshooting.mdx
- icon: fa-light fa-wrench
- section: GPT-Live
icon: fa-light fa-microphone-lines
availability: beta
@@ -437,6 +306,185 @@ navigation:
path: assistants/examples/multilingual-agent.mdx
icon: fa-light fa-globe
+ - section: Tools
+ path: tools/introduction.mdx
+ collapsed: open-by-default
+ icon: fa-light fa-toolbox
+ contents:
+ - page: Built-in tools
+ path: tools/default-tools.mdx
+ icon: fa-light fa-gear
+ - page: When to use API Request or Function tools
+ path: tools/api-request-vs-function.mdx
+ icon: fa-light fa-code-compare
+ - section: API Request tool
+ path: tools/api-request.mdx
+ icon: fa-light fa-globe
+ contents:
+ - page: Coffee-order quickstart
+ path: tools/api-request/quickstart.mdx
+ - page: Customize requests
+ path: tools/api-request/configuration.mdx
+ - page: Get order status
+ path: tools/api-request/order-status.mdx
+ - page: Handle latency and retries
+ path: tools/api-request/reliability.mdx
+ - page: Handle responses and errors
+ path: tools/api-request/response-handling.mdx
+ - page: Use response data
+ path: tools/api-request/response-data.mdx
+ - page: Function tools
+ path: tools/custom-tools.mdx
+ icon: fa-light fa-screwdriver-wrench
+ - section: Transfer Call tool
+ path: tools/transfer-call.mdx
+ icon: fa-solid fa-phone
+ contents:
+ - page: Blind transfer
+ path: tools/transfer-call/blind-transfer.mdx
+ - page: Warm transfer
+ path: tools/transfer-call/warm-transfer.mdx
+ - page: Assistant-based warm transfer
+ path: calls/assistant-based-warm-transfer.mdx
+ - section: Hang Up tool
+ path: tools/hang-up.mdx
+ icon: fa-light fa-phone-hangup
+ contents:
+ - page: Hang Up tool quickstart
+ path: tools/hang-up/quickstart.mdx
+ - page: Configure the Hang Up tool
+ path: tools/hang-up/configuration.mdx
+ - section: Handoff tool
+ path: squads/handoff.mdx
+ icon: fa-light fa-hand-holding-hand
+ contents:
+ - page: Configure handoff destinations
+ path: squads/handoff/destinations.mdx
+ - page: Pass context and variables
+ path: squads/handoff/context-and-variables.mdx
+ - page: Configure messages and rejection rules
+ path: squads/handoff/messages-and-rejection.mdx
+ - page: Troubleshoot handoffs
+ path: squads/handoff/troubleshooting.mdx
+ - section: Voicemail tool
+ path: tools/voicemail-tool.mdx
+ icon: fa-light fa-voicemail
+ contents:
+ - page: Configure the Voicemail tool
+ path: tools/voicemail-tool/configure.mdx
+ - section: SIP Request tool
+ path: tools/sip-request.mdx
+ icon: fa-light fa-phone-arrow-right
+ contents:
+ - page: Configure the SIP Request tool
+ path: tools/sip-request/configure.mdx
+ - page: Client-side tools (Web SDK)
+ path: tools/client-side-websdk.mdx
+ icon: fa-light fa-browser
+ - section: Knowledge bases
+ path: knowledge-base/knowledge-base.mdx
+ icon: fa-light fa-book
+ contents:
+ - page: Query tool
+ path: knowledge-base/using-query-tool.mdx
+ icon: fa-light fa-magnifying-glass
+ - page: Custom knowledge base
+ path: knowledge-base/custom-knowledge-base.mdx
+ icon: fa-light fa-server
+ - page: Implement the custom endpoint
+ path: knowledge-base/implement-custom-endpoint.mdx
+ icon: fa-light fa-code
+ - link: MCP tools
+ href: /tools/mcp
+ icon: fa-light fa-network-wired
+ - section: Integrations
+ path: tools/integrations.mdx
+ icon: fa-light fa-cubes
+ contents:
+ - page: Make
+ path: tools/integrations/make.mdx
+ icon: fa-light fa-diagram-project
+ - page: n8n
+ path: tools/integrations/n8n.mdx
+ icon: fa-light fa-diagram-project
+ - page: Google Calendar
+ path: tools/google-calendar.mdx
+ icon: fa-light fa-calendar-days
+ - page: Google Sheets
+ path: tools/google-sheets.mdx
+ icon: fa-brands fa-google-drive
+ - page: Slack
+ path: tools/slack.mdx
+ icon: fa-brands fa-slack
+ - page: GoHighLevel
+ path: tools/go-high-level.mdx
+ icon: fa-light fa-arrow-up
+ - section: Static variables and aliases
+ path: tools/static-variables-and-aliases.mdx
+ icon: fa-light fa-arrow-right-arrow-left
+ contents:
+ - page: How tool variables work
+ path: tools/static-variables-and-aliases/how-variables-work.mdx
+ - page: Set static parameters
+ path: tools/static-variables-and-aliases/static-parameters.mdx
+ - page: Extract and chain values
+ path: tools/static-variables-and-aliases/extract-and-chain.mdx
+ - page: Troubleshoot tool variables
+ path: tools/static-variables-and-aliases/troubleshooting.mdx
+ - page: Dynamic tool messages
+ path: tools/dynamic-tool-messages.mdx
+ icon: fa-light fa-comment
+ - page: Tool rejection plan
+ path: tools/tool-rejection-plan.mdx
+ icon: fa-light fa-shield-xmark
+ - page: Argument encryption
+ path: tools/arguments-encryption.mdx
+ icon: fa-light fa-lock
+ - page: Troubleshoot tools
+ path: tools/custom-tools-troubleshooting.mdx
+ icon: fa-light fa-wrench
+
+ - section: Squads
+ collapsed: open-by-default
+ contents:
+ - page: Quickstart
+ path: squads-example.mdx
+ icon: fa-light fa-bolt-lightning
+ - page: Overview
+ path: squads.mdx
+ icon: fa-light fa-eye
+ - section: Handoff tool
+ path: squads/handoff.mdx
+ icon: fa-light fa-hand-holding-hand
+ contents:
+ - page: Configure handoff destinations
+ path: squads/handoff/destinations.mdx
+ - page: Pass context and variables
+ path: squads/handoff/context-and-variables.mdx
+ - page: Configure messages and rejection rules
+ path: squads/handoff/messages-and-rejection.mdx
+ - page: Troubleshoot handoffs
+ path: squads/handoff/troubleshooting.mdx
+ - page: Passing data between assistants
+ path: squads/passing-data-between-assistants.mdx
+ icon: fa-light fa-share-nodes
+ - section: Examples
+ icon: fa-light fa-code
+ contents:
+ - page: Clinic triage & scheduling (handoff tool)
+ path: squads/examples/clinic-triage-scheduling-handoff-tool.mdx
+ - page: Clinic triage & scheduling
+ path: squads/examples/clinic-triage-scheduling.mdx
+ - page: E-commerce order management
+ path: squads/examples/ecommerce-order-management.mdx
+ - page: Property management routing
+ path: squads/examples/property-management.mdx
+ - page: Multilingual support
+ path: squads/examples/multilingual-support.mdx
+ - page: Silent handoffs
+ path: squads/silent-handoffs.mdx
+ icon: fa-light fa-arrow-right-arrow-left
+
- section: Phone numbers
collapsed: open-by-default
contents:
@@ -620,47 +668,6 @@ navigation:
path: workflows/legacy-migration.mdx
icon: fa-light fa-arrow-right-arrow-left
- - section: Squads
- collapsed: open-by-default
- contents:
- - page: Quickstart
- path: squads-example.mdx
- icon: fa-light fa-bolt-lightning
- - page: Overview
- path: squads.mdx
- icon: fa-light fa-eye
- - section: Handoff tool
- path: squads/handoff.mdx
- icon: fa-light fa-hand-holding-hand
- contents:
- - page: Configure handoff destinations
- path: squads/handoff/destinations.mdx
- - page: Pass context and variables
- path: squads/handoff/context-and-variables.mdx
- - page: Configure messages and rejection rules
- path: squads/handoff/messages-and-rejection.mdx
- - page: Troubleshoot handoffs
- path: squads/handoff/troubleshooting.mdx
- - page: Passing data between assistants
- path: squads/passing-data-between-assistants.mdx
- icon: fa-light fa-share-nodes
- - section: Examples
- icon: fa-light fa-code
- contents:
- - page: Clinic triage & scheduling (handoff tool)
- path: squads/examples/clinic-triage-scheduling-handoff-tool.mdx
- - page: Clinic triage & scheduling
- path: squads/examples/clinic-triage-scheduling.mdx
- - page: E-commerce order management
- path: squads/examples/ecommerce-order-management.mdx
- - page: Property management routing
- path: squads/examples/property-management.mdx
- - page: Multilingual support
- path: squads/examples/multilingual-support.mdx
- - page: Silent handoffs
- path: squads/silent-handoffs.mdx
- icon: fa-light fa-arrow-right-arrow-left
-
- section: Webhooks
collapsed: open-by-default
icon: fa-light fa-webhook
@@ -668,14 +675,19 @@ navigation:
contents:
- page: Setting server URLs
path: server-url/setting-server-urls.mdx
+ icon: fa-light fa-link
- page: Server events
path: server-url/events.mdx
+ icon: fa-light fa-bell
- page: Spam call rejection
path: server-url/spam-call-rejection.mdx
+ icon: fa-light fa-ban
- page: Developing locally
path: server-url/developing-locally.mdx
+ icon: fa-light fa-laptop-code
- page: Server authentication
path: server-url/server-authentication.mdx
+ icon: fa-light fa-lock
- section: Observability
collapsed: open-by-default
diff --git a/fern/observability/logs/call-logs.mdx b/fern/observability/logs/call-logs.mdx
index 21ce6266d..aca3183cd 100644
--- a/fern/observability/logs/call-logs.mdx
+++ b/fern/observability/logs/call-logs.mdx
@@ -97,19 +97,6 @@ This tab shows the stored conversation-message objects for the call, in order. A
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.
-### Function and API Request tools
-
-Use **Messages** to inspect a tool call and its result. Use the call's **Logs** tab to inspect request and response details when the assistant's **Logging** setting is enabled.
-
-| Tool type | Where to inspect | Correlation details |
-| --- | --- | --- |
-| Function | Open **Logs → Webhooks** and find the `tool-calls` entry. Use the call's **Messages** tab to inspect the tool call and result. | The webhook includes the call and tool-call IDs. Vapi also sends the call ID in the `X-Call-Id` header. |
-| API Request | Open the call's **Logs** tab for the resolved request and response. Use **Messages** to inspect the tool call and result. | Vapi sends the call ID in the `X-Call-Id` header. Your destination can return its own `requestId` for its server logs. Vapi does not add `toolCallId` to the destination request by default. |
-
-The **Logs → API** tab records requests made to the Vapi API. It does not show requests that an API Request tool sends to your destination.
-
-For an async Function tool, Vapi returns an immediate `Success.` result to the assistant and ignores the webhook's later result. Open **Logs → Webhooks** to inspect the webhook response after it finishes. Detailed entries in the call's **Logs** tab depend on the assistant's **Logging** setting. See [Logs overview](/observability/logs/overview#retention-and-logging-configuration) for retention and compliance limits.
-
### 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.
@@ -126,6 +113,20 @@ Use the per-turn table to find which stage made the call feel slow. It shows eac
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).
+## Inspect tool calls
+
+Use **Messages** to inspect a tool call and its result. Use the call's **Logs** tab to inspect request and response details when the assistant's **Logging** setting is enabled.
+
+| Tool type | Where to inspect | Correlation details |
+| --- | --- | --- |
+| Function | Open **Logs → Webhooks** and find the `tool-calls` entry. Use the call's **Messages** tab to inspect the tool call and result. | The webhook includes the call and tool-call IDs. Vapi also sends the call ID in the `X-Call-Id` header. |
+| API Request | Open the call's **Logs** tab for the resolved request and response. Use **Messages** to inspect the tool call and result. | Vapi sends the call ID in the `X-Call-Id` header. Your destination can return its own `requestId` for its server logs. Vapi does not add `toolCallId` to the destination request by default. |
+| [SIP Request](/tools/sip-request) | Use **Messages** to inspect the tool call and result. Download the call's packet capture with **PCAP** on the call's page to inspect the SIP signaling. See [Verify the request was sent](/tools/sip-request/configure#verify-the-request-was-sent). | Vapi doesn't add its own call ID to the SIP request. Include `{{call.id}}` in the body if your system needs it. |
+
+The **Logs → API** tab records requests made to the Vapi API. It does not show requests that an API Request tool sends to your destination.
+
+For an async Function tool, Vapi returns an immediate `Success.` result to the assistant and ignores the webhook's later result. Open **Logs → Webhooks** to inspect the webhook response after it finishes. Detailed entries in the call's **Logs** tab depend on the assistant's **Logging** setting. See [Logs overview](/observability/logs/overview#retention-and-logging-configuration) for retention and compliance limits.
+
## Debug with call logs
Reach for call logs when a call did not go as expected:
diff --git a/fern/tools/api-request/response-handling.mdx b/fern/tools/api-request/response-handling.mdx
index 82e4b9672..c8e389adc 100644
--- a/fern/tools/api-request/response-handling.mdx
+++ b/fern/tools/api-request/response-handling.mdx
@@ -175,7 +175,7 @@ After a test call, inspect the tool arguments and result before changing the sch
-When the assistant's **Logging** setting is enabled, the call's **Logs** tab records the resolved API Request URL, method, request data, and response details. Vapi sends the call ID in the `X-Call-Id` request header. The destination does not receive `toolCallId` by default, so use the call ID and a destination-generated `requestId` to correlate with your server logs. Sensitive values can be redacted or omitted based on logging and compliance settings. The **Logs → API** tab records requests made to Vapi's API, not requests sent by an API Request tool. For Function and API Request tool log locations, see [Call logs](/observability/logs/call-logs#function-and-api-request-tools).
+When the assistant's **Logging** setting is enabled, the call's **Logs** tab records the resolved API Request URL, method, request data, and response details. Vapi sends the call ID in the `X-Call-Id` request header. The destination does not receive `toolCallId` by default, so use the call ID and a destination-generated `requestId` to correlate with your server logs. Sensitive values can be redacted or omitted based on logging and compliance settings. The **Logs → API** tab records requests made to Vapi's API, not requests sent by an API Request tool. For Function and API Request tool log locations, see [Call logs](/observability/logs/call-logs#inspect-tool-calls).
## Diagnose common failures
diff --git a/fern/tools/custom-tools-troubleshooting.mdx b/fern/tools/custom-tools-troubleshooting.mdx
index cab83e397..e6f2748ea 100644
--- a/fern/tools/custom-tools-troubleshooting.mdx
+++ b/fern/tools/custom-tools-troubleshooting.mdx
@@ -325,7 +325,7 @@ Tool behavior doesn't match your expectations.
processing for long-running operations.
-For an async Function tool, Vapi returns an immediate `Success.` result to the assistant and does not use the webhook's eventual response as the tool result. Inspect the later webhook response in [Logs → Webhooks](/observability/logs/webhook-logs) and check your server logs for the completed action. See [Call logs](/observability/logs/call-logs#function-and-api-request-tools) for the Function and API Request log locations.
+For an async Function tool, Vapi returns an immediate `Success.` result to the assistant and does not use the webhook's eventual response as the tool result. Inspect the later webhook response in [Logs → Webhooks](/observability/logs/webhook-logs) and check your server logs for the completed action. See [Call logs](/observability/logs/call-logs#inspect-tool-calls) for the Function and API Request log locations.
## Reference: Required formats
diff --git a/fern/tools/custom-tools.mdx b/fern/tools/custom-tools.mdx
index 9e9dbfd80..5f6765a93 100644
--- a/fern/tools/custom-tools.mdx
+++ b/fern/tools/custom-tools.mdx
@@ -312,7 +312,7 @@ If the location can't be found, report the failure through `error` instead of `r
For multiple tool calls in one request, return a result for every call in the `results` array and match each result to its call with `toolCallId`. Results can appear in any order. Use `result` for success and `error` for failure.
-To inspect a Function tool call, open its [call log](/observability/logs/call-logs#function-and-api-request-tools). The call's **Messages** tab shows the tool call and result. **Logs → Webhooks** shows the Function webhook request and response.
+To inspect a Function tool call, open its [call log](/observability/logs/call-logs#inspect-tool-calls). The call's **Messages** tab shows the tool call and result. **Logs → Webhooks** shows the Function webhook request and response.
**Some Key Points:**
diff --git a/fern/tools/introduction.mdx b/fern/tools/introduction.mdx
index aa45a0aba..2c1e302a2 100644
--- a/fern/tools/introduction.mdx
+++ b/fern/tools/introduction.mdx
@@ -28,8 +28,10 @@ Because the model controls both *when* a tool runs and the arguments it receives
| [API Request tool](/tools/api-request) | Calls an ordinary HTTPS endpoint directly, with a configurable URL, method, headers, and JSON body |
| [Function tools](/tools/custom-tools) | Sends Vapi's `tool-calls` webhook to a server you control, so your code decides what happens |
| [Transfer Call tool](/tools/transfer-call) | Routes a live call to a phone number or SIP URI |
+| [Hang Up tool](/tools/hang-up) | Ends the call when the assistant decides the conversation is complete, with an optional goodbye message |
| [Handoff tool](/squads/handoff) | Moves a call from one assistant to another, carrying context and extracted variables |
| [Voicemail tool](/tools/voicemail-tool) | Lets the assistant decide what to do when it reaches a voicemail system |
+| [SIP Request tool](/tools/sip-request) | Sends a SIP INFO, MESSAGE, or NOTIFY request on a live SIP call, for example to pass call details to your PBX or contact center platform |
| [Client-side tools](/tools/client-side-websdk) | Runs in the browser through the Web SDK, with no server URL |
| [Query tool](/knowledge-base/using-query-tool) | Searches a [knowledge base](/knowledge-base) and returns matching content |
| [MCP tools](/tools/mcp) | Connects to an MCP server so the assistant can use tools resolved at runtime |
diff --git a/fern/tools/sip-request.mdx b/fern/tools/sip-request.mdx
new file mode 100644
index 000000000..e5082da74
--- /dev/null
+++ b/fern/tools/sip-request.mdx
@@ -0,0 +1,78 @@
+---
+title: SIP Request tool
+subtitle: Send SIP INFO, MESSAGE, or NOTIFY requests on a live call
+slug: tools/sip-request
+description: Use the SIP Request tool to let a Vapi assistant send SIP INFO, MESSAGE, or NOTIFY requests mid-call to your PBX, SBC, or contact center platform on SIP calls.
+---
+
+The SIP Request tool lets your assistant send a Session Initiation Protocol (SIP) INFO, MESSAGE, or NOTIFY request to the system on the other end of the call. It doesn't transfer the call, end it, or change who's on it.
+
+Use it to tell your telephony system something during the call, at the moment your assistant learns it.
+
+
+The SIP Request tool only works on calls that run over Vapi's SIP transport, such as calls to a Vapi SIP URI or calls through a [BYO SIP trunk](/advanced/sip/sip-trunk). See [Requirements](#requirements).
+
+
+## When to use the SIP Request tool
+
+Use the SIP Request tool when a system that's already in the SIP call path needs information from the conversation, and that system listens for SIP requests. Common examples:
+
+- **Pass caller details to your contact center.** Your assistant collects an account number, the reason for the call, or a verification result. It sends them to your private branch exchange (PBX) or contact center platform, which records them against the call in real time, uses them to route a transfer, or shows them to the human agent who picks up.
+- **Signal call milestones.** Your assistant tells your system when something happens, such as "caller verified," "consent captured," or "escalation requested," so the system can react while the call is still live.
+- **Send a short text payload to a SIP endpoint.** Your assistant sends a MESSAGE request that the receiving device or application can display or log.
+
+### Why use SIP instead of an HTTP request
+
+You could send the same information to a webhook with an [API request](/tools/api-request) or [Function](/tools/custom-tools) tool. The SIP Request tool is a better fit when:
+
+- **The receiving system speaks SIP, not HTTP.** Many PBXs, session border controllers (SBCs), and contact center platforms act on in-call SIP requests but don't expose an HTTP API for live calls.
+- **The data needs to stay tied to the call.** The request travels inside the same SIP dialog as the call, so the receiving system knows which call it belongs to. You don't need to match call IDs across systems.
+- **You don't want to host an endpoint.** No server URL or webhook is involved.
+
+For other tool types, see the [tools overview](/tools).
+
+## Requirements
+
+The call must run over Vapi's SIP transport (`vapi.sip`). That includes calls to a [Vapi SIP URI](/advanced/sip) and calls through a [BYO SIP trunk](/advanced/sip/sip-trunk).
+
+On other calls, such as web calls or calls on phone numbers imported with Twilio, Vonage, or Telnyx API credentials, the tool doesn't send anything. It returns an error to the assistant instead.
+
+The system on the other end must also accept the SIP method you choose. Check which methods, headers, and body formats your PBX, SBC, or platform expects before you configure the tool.
+
+## Choose a SIP method
+
+| Method | Typical use |
+| --- | --- |
+| `INFO` | Pass application data during a call. This is the most common choice for sending call details to a PBX or contact center. |
+| `MESSAGE` | Send a short text message to the endpoint. |
+| `NOTIFY` | Report that an event happened. |
+
+Use the method your receiving system expects. If you're not sure, start with `INFO`.
+
+
+The assistant can choose a different method than the one you configured. If your system only accepts one method, a request sent with another one can be rejected or ignored, so your system never gets the data. Name the method in the tool description and in your system prompt, such as "Always send this as a SIP INFO request."
+
+
+## How the tool works during a call
+
+When your assistant calls the tool, it chooses the values to send:
+
+- **Method.** The assistant can choose the method. If it doesn't, Vapi uses the `verb` you configured. See [Choose a SIP method](#choose-a-sip-method).
+- **Headers.** The assistant fills in the headers you described in `headers`.
+- **Body.** With a schema body, the assistant fills in the fields and Vapi sends them as JSON. With a fixed string body, Vapi uses your string as the default value, and the assistant can still replace it.
+
+The content type of the request is set like this:
+
+1. If you include a `Content-Type` header, Vapi uses it.
+2. If the body is JSON, Vapi sets `Content-Type: application/json`.
+3. Otherwise, Vapi sends the body as `text/plain`.
+
+Match the format your receiving system expects. If your system expects JSON sent as `text/plain` and responds with `415 Unsupported Media Type`, use a **Raw string** body containing the JSON and don't add a `Content-Type` header.
+
+The assistant gets back a short result: success, or an error. The SIP response from the other end, such as `200 OK`, isn't passed back to the assistant.
+
+## Next steps
+
+
+ Create the tool, tell the assistant when to use it, send requests from hooks, set tool messages and variables, and verify the request was sent.
+
diff --git a/fern/tools/sip-request/configure.mdx b/fern/tools/sip-request/configure.mdx
new file mode 100644
index 000000000..dc9d72169
--- /dev/null
+++ b/fern/tools/sip-request/configure.mdx
@@ -0,0 +1,219 @@
+---
+title: Configure the SIP Request tool
+subtitle: Create the tool, guide the assistant, and control what the caller hears
+slug: tools/sip-request/configure
+description: Configure the Vapi SIP Request tool in the dashboard or API, prompt the assistant, send requests from hooks, set tool messages and variables, and verify delivery.
+---
+
+Before you start, read [SIP Request tool](/tools/sip-request) for what the tool does, the call requirements, and how to choose a SIP method.
+
+## Create the tool
+
+Put everything your receiving system needs in the headers and body. For example, to tell your contact center the caller is verified, send an `X-Call-Event` header and a body with `accountNumber` and `reason` fields.
+
+
+
+ 1. In the [Dashboard](https://dashboard.vapi.ai), select **Tools**, then select **Create Tool**.
+ 2. Select **SIP Request**.
+ 3. Give the tool a name and description. The description tells the assistant when to send the request and which method to use.
+ 4. Under **SIP verb**, select `INFO`, `MESSAGE`, or `NOTIFY`.
+ 5. Under **Headers**, add the SIP headers to send. For each header, add a description so the assistant knows what value to fill in. To limit a header to specific values, add them under **Enum Values**.
+ 6. Select **Lock schema** so the assistant can't add headers you didn't define.
+ 7. Under **Body**, select one:
+ - **Raw string**: a fixed body, sent as written.
+ - **Schema builder**: a structured body. Define the fields and the assistant fills them in during the call.
+ 8. Save the tool, then add it to your assistant.
+
+
+ Create the tool with the [Create Tool](/api-reference/tools/create#request.body.sipRequest) endpoint, then add its ID to your assistant's `model.toolIds`.
+
+ This example sends a structured JSON body to a contact center when the caller is verified:
+
+ ```json
+ {
+ "type": "sipRequest",
+ "verb": "INFO",
+ "headers": {
+ "type": "object",
+ "properties": {
+ "X-Call-Event": {
+ "type": "string",
+ "description": "Event name. Use caller-verified after the caller confirms their identity."
+ }
+ }
+ },
+ "body": {
+ "type": "object",
+ "properties": {
+ "accountNumber": {
+ "type": "string",
+ "description": "The caller's account number"
+ },
+ "reason": {
+ "type": "string",
+ "description": "Why the caller is calling, in a few words"
+ }
+ },
+ "required": ["accountNumber"]
+ }
+ }
+ ```
+
+ To send a fixed body instead, set `body` to a string:
+
+ ```json
+ {
+ "type": "sipRequest",
+ "verb": "NOTIFY",
+ "body": "event=escalation-requested"
+ }
+ ```
+
+ To change an existing tool, use the [Update Tool](/api-reference/tools/update#request.body.sipRequest) endpoint.
+
+
+
+### Fields
+
+| Field | Required | Description |
+| --- | --- | --- |
+| `type` | Yes | Set to `sipRequest`. |
+| `verb` | Yes | The SIP method: `INFO`, `MESSAGE`, or `NOTIFY`. |
+| `headers` | No | A JSON schema describing the headers the assistant fills in. |
+| `body` | No | A fixed string (up to 5,000 characters), or a JSON schema describing a structured body the assistant fills in. |
+| `messages` | No | What the assistant says when the request starts, completes, or fails. See [Tool messages](#tool-messages). |
+| `rejectionPlan` | No | Conditions that stop the tool from running. See [Tool rejection plan](/tools/tool-rejection-plan). |
+
+For the full schema, see [SIP Request tool in the Create Tool API reference](/api-reference/tools/create#request.body.sipRequest).
+
+## Tell the assistant when to use it
+
+Add instructions to your system prompt that say when to send the request and what to include. Refer to the tool by the name you gave it. For example:
+
+```txt wordWrap
+After the caller confirms their identity, use the send_caller_details tool to send their account number and the reason for their call. Don't tell the caller you are doing this.
+```
+
+Clear field descriptions in your `headers` and `body` schemas also help the assistant fill in the right values.
+
+## Send a request from an assistant hook
+
+To send a SIP request when a call event happens, instead of when the assistant decides to, run the tool from an [assistant hook](/assistants/assistant-hooks). For example, this hook sends a `timeout-transfer` event to your platform after the caller has been silent twice:
+
+```json
+{
+ "hooks": [
+ {
+ "on": "customer.speech.timeout",
+ "options": {
+ "timeoutSeconds": 10,
+ "triggerMaxCount": 2
+ },
+ "do": [
+ {
+ "type": "tool",
+ "tool": {
+ "type": "sipRequest",
+ "verb": "INFO",
+ "headers": {
+ "type": "object",
+ "properties": {
+ "Content-Type": {
+ "type": "string",
+ "default": "application/json"
+ }
+ }
+ },
+ "body": {
+ "type": "object",
+ "properties": {
+ "action": {
+ "type": "string",
+ "default": "timeout-transfer"
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+}
+```
+
+In a hook, header and body fields with a `default` value are sent as written. Any other field, including the method, is filled in by the assistant from the conversation, so the [method warning](/tools/sip-request#choose-a-sip-method) still applies.
+
+## Tool messages
+
+If you don't configure `messages`, the assistant says "The request was successful" out loud after the request is sent, and "Sorry, an unexpected error occurred" if it fails.
+
+This tool's messages all play after the request is sent, not before it. Vapi uses the first one that applies:
+
+1. **Request Failed** (`request-failed`), if the request returned an error.
+2. **Request Start** (`request-start`), if you set one. It plays instead of Request Complete.
+3. **Request Complete** (`request-complete`).
+
+Because nothing plays before the request, write any Request Start message as something the caller hears afterward, not "Sending that now."
+
+Most SIP requests are background signals the caller doesn't need to hear about. To keep the conversation natural, set your own `request-complete` and `request-failed` messages. With `role` set to `system`, the message content goes to the model as a hint instead of being spoken, and the assistant continues the conversation in its own words:
+
+```json
+"messages": [
+ {
+ "type": "request-complete",
+ "role": "system",
+ "content": "The details were sent. Continue the conversation without mentioning it."
+ },
+ {
+ "type": "request-failed",
+ "role": "system",
+ "content": "The details could not be sent. Continue the conversation without mentioning it."
+ }
+]
+```
+
+For all message options, see [SIP Request tool messages in the Create Tool API reference](/api-reference/tools/create#request.body.sipRequest).
+
+## Variables
+
+You can use [variables](/assistants/dynamic-variables) such as `{{customer.number}}` in the header schema, the body (string or schema), and tool messages. Vapi fills them in when the call starts.
+
+For example, this tool sends the call ID, the caller's number, and a campaign ID in a fixed string body:
+
+```json
+{
+ "type": "sipRequest",
+ "verb": "INFO",
+ "body": "call={{call.id}};caller={{customer.number}};campaign={{campaignId}}"
+}
+```
+
+The `{{call.id}}` and `{{customer.number}}` variables are built in. Pass `campaignId` in `assistantOverrides.variableValues` when you start the call.
+
+The SIP Request tool doesn't support [static parameters](/tools/static-variables-and-aliases/static-parameters).
+
+## Verify the request was sent
+
+Place a test call over your SIP connection and say whatever should make the assistant send the request. Then check these places:
+
+1. **The tool call and its result.** In the [Dashboard](https://dashboard.vapi.ai), select **Logs**, open the call, and select the [Messages](/observability/logs/call-logs#messages) tab. Find the SIP Request tool call to see the values the assistant generated for the request, and the result that came back. An error result explains why nothing was sent, for example when the call isn't on Vapi's SIP transport.
+2. **The call logs.** If the assistant's **Logging** setting is enabled, the call's [Logs](/observability/logs/call-logs#logs) tab includes a **Tool calls finished** entry under the **Tool** category, showing the tool's result or error.
+3. **The call's SIP signaling.** For calls on Vapi numbers and BYO SIP trunks, Vapi records a packet capture (PCAP) of the call's SIP signaling by default. Download it with **PCAP** on the call's page, or from `artifact.pcapUrl` on the call record, and open it in a SIP analysis tool such as Wireshark. See [Call recording](/assistants/call-recording) for the `pcapEnabled` setting.
+4. **Your receiving system.** A success result in Vapi doesn't confirm that the other end received or accepted the request. Check the logs on your PBX, SBC, or contact center platform to confirm it received the request and acted on it.
+
+If the request didn't work:
+
+| What you see | What to check |
+| --- | --- |
+| An error result saying the tool requires the `vapi.sip` transport | The call isn't on Vapi's SIP transport. See [Requirements](/tools/sip-request#requirements). |
+| Your system responds with `415 Unsupported Media Type` | The content type doesn't match what your system expects. See [How the tool works during a call](/tools/sip-request#how-the-tool-works-during-a-call). |
+| The request uses a different method than you configured | The assistant chose the method. See the [method warning](/tools/sip-request#choose-a-sip-method). |
+| No SIP Request tool call in the Messages tab | The assistant didn't call the tool. Make the system prompt and tool description more specific, or send the request from an [assistant hook](#send-a-request-from-an-assistant-hook). |
+
+## Related
+
+- [SIP Request tool overview](/tools/sip-request)
+- [SIP introduction](/advanced/sip)
+- [SIP trunking](/advanced/sip/sip-trunk)
+- [Built-in tools](/tools/default-tools)
+- [SIP Request tool in the Create Tool API reference](/api-reference/tools/create#request.body.sipRequest)
diff --git a/fern/tools/static-variables-and-aliases/static-parameters.mdx b/fern/tools/static-variables-and-aliases/static-parameters.mdx
index 2f694c50e..32a6e81de 100644
--- a/fern/tools/static-variables-and-aliases/static-parameters.mdx
+++ b/fern/tools/static-variables-and-aliases/static-parameters.mdx
@@ -26,7 +26,7 @@ The `parameters` field lets you define key-value pairs that are always merged in
| `apiRequest` | Yes |
| `function` (modern, under `assistant.model.tools[]`) | Yes |
| `handoff` | No -- see [Forwarding trusted data across handoffs](/tools/static-variables-and-aliases/extract-and-chain#forwarding-trusted-data-across-handoffs) |
-| All other tool types (`transferCall`, `dtmf`, `endCall`, `voicemail`, `sms`, `slack-send-message`, GHL/Google integrations, MCP, query, output, sipRequest, bash/computer/textEditor) | No |
+| All other tool types (`transferCall`, `dtmf`, `endCall`, `voicemail`, `sms`, `slack-send-message`, GHL/Google integrations, MCP, query, output, `sipRequest`) | No |
**Legacy `assistant.model.functions[]` does NOT support static parameters.** If you are still defining tools via the deprecated `assistant.model.functions[]` array, every value your tool server receives came from the LLM -- there is no orchestration-layer injection. Migrate to `assistant.model.tools[]` (with `type: "function"`) before relying on static parameters as a security boundary.