> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.vapi.ai/server-url/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vapi.ai/_mcp/server. # Server URLs > Set up server URLs so your application receives Vapi call events like status updates, transcripts, function calls, and end-of-call reports, and responds. ![](/_fern-img/ffc0a6c6fe5387d5748ac74d6b4453f582db1914301dd265ae5d09dfb06be241.webp) Server URLs allow your application to **receive data** & **communicate with Vapi** during conversations. Conversation events can include: * **Status Updates:** updates on the status of a call * **Transcript Updates**: call transcripts * **Function Calls:** payloads delivered when your assistant wants certain actions executed * **Assistant Requests:** in certain circumstances, Vapi may ping your server to get dynamic configuration for an assistant handling a specific call * **End of Call Report:** call summary data at the end of a call * **Hang Notifications:** get notified when your assistant fails to reply for a certain amount of time In our [quickstart guides](/quickstart) we learned how to setup a basic back-and-forth conversation with a Vapi assistant. To build more complex & custom applications, we're going to need to get real-time conversation data to our backend. **This is where server URLs come in.** > **Info** > > If you're familiar with functional programming, Server URLs are like callback functions. But > instead of specifying a function to get data back on, we specify a URL to a server (to POST data > back to). If you're configuring a Server URL with an AI coding assistant, the [setup-webhook skill](/agent-skills#setup-webhook) helps you connect an endpoint for call events and tool calls. ## Get Started To get started using server URLs, read our guides: #### [Setting Server URLs](/server-url/setting-server-urls) Server URLs can be set in multiple places. Learn where here. #### [Events](/server-url/events) Read about the different types of events Vapi can send to your server. #### [Developing Locally](/server-url/developing-locally) Learn about receiving server events in your local development environment. #### [CLI Webhook Testing](/cli/webhook) Forward webhooks to your local server with the Vapi CLI. > **Tip** > > **Quick local testing with Vapi CLI + tunneling:** > > ```bash > # Terminal 1: Create tunnel > ngrok http 4242 > > # Terminal 2: Start webhook forwarder > vapi listen --forward-to localhost:3000/webhook > ``` > > This setup forwards webhook events to your local server. Remember to update your Vapi webhook URLs to use the ngrok public URL. ## FAQ #### Where can the server be located? The server URL can be any publicly accessible URL pointing to an HTTP endpoint. This can be a: * **Cloud Server:** your application might be deployed on a cloud platform like [Railway](https://railway.app), [AWS](https://aws.com), [GCP](https://cloud.google.com/gcp), etc — as a persistent web server. * **Serverless Function:** services like [Vercel](https://vercel.com/docs/functions), [AWS Lambda](https://aws.amazon.com/lambda/), [Google Cloud Functions](https://cloud.google.com/functions), [Cloudflare](https://developers.cloudflare.com/workers/), etc — allow you to host on-demand cloud functions. * **Workflow Orchestrator:** platforms like [Pipedream](https://pipedream.com) & [Make](https://www.make.com) allow you to program workflows (often without code) that can receive events via HTTP triggers. The main idea is that Vapi needs a location on the Internet that it can drop data to & converse with your application. #### Why not just call them webhooks? [Webhooks](/glossary#webhook) are traditionally unidirectional & stateless, with the target endpoint usually only replying with a status code to acknowledge message reception. Certain server URL events (like assistant requests) may require a meaningful reply from your server. "Server URL" is a more general term that encompasses both webhooks & bidirectional communication. > Learn how to set up your server to receive and respond to messages from Vapi ## Docs - [Setting server URLs](https://docs.vapi.ai/server-url/setting-server-urls.md): Set Vapi server URLs at multiple levels to handle call events, and learn how priority decides which URL receives a given event. - [Server events](https://docs.vapi.ai/server-url/events.md): Reference the events Vapi POSTs to your Server URL, with the shared message body shape and the payload fields that vary by server message type. - [Spam call rejection](https://docs.vapi.ai/server-url/spam-call-rejection.md): Screen inbound Vapi calls with your Server URL, checking the caller number on an assistant-request to reject known spam or return an assistant to proceed. - [Developing locally](https://docs.vapi.ai/server-url/developing-locally.md): Receive Vapi server events in local development using the Vapi CLI webhook forwarder and a tunneling service to route webhook payloads to your machine. - [Server authentication](https://docs.vapi.ai/server-url/server-authentication.md): Authenticate Vapi webhooks to your server with custom credentials referenced by credentialId, reusing them across assistants, phone numbers, and tools.