[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-vapi-setup-webhook":3,"mdc--ihhiz7-key":43,"related-org-vapi-setup-webhook":3533,"related-repo-vapi-setup-webhook":3660},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":38,"sourceUrl":41,"mdContent":42},"setup-webhook","configure Vapi webhooks for call events","Configure Vapi server URLs and webhooks to receive real-time call events, transcripts, tool calls, and end-of-call reports. Use when setting up webhook endpoints, building tool servers, or integrating Vapi events into your application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"vapi","Vapi","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fvapi.png","VapiAI",[13,17,20,23],{"name":14,"slug":15,"type":16},"Automation","automation","tag",{"name":18,"slug":19,"type":16},"Agents","agents",{"name":21,"slug":22,"type":16},"API Development","api-development",{"name":24,"slug":25,"type":16},"Webhooks","webhooks",53,"https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fskills","2026-07-20T05:57:31.703006","MIT",7,[32,33,34,35,36,8,37],"agent-skills","claude-code","codex-skills","openclaw-skills","skills","vapi-ai",{"repoUrl":27,"stars":26,"forks":30,"topics":39,"description":40},[32,33,34,35,36,8,37],"A set of skills and MCP connector to allow agents to build Vapi AI agents, from creating tools and assistants to a phone call","https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fskills\u002Ftree\u002FHEAD\u002Fsetup-webhook","---\nname: setup-webhook\ndescription: Configure Vapi server URLs and webhooks to receive real-time call events, transcripts, tool calls, and end-of-call reports. Use when setting up webhook endpoints, building tool servers, or integrating Vapi events into your application.\nlicense: MIT\ncompatibility: Requires internet access and a Vapi API key (VAPI_API_KEY).\nmetadata:\n  author: vapi\n  version: \"1.0\"\n---\n\n# Vapi Webhook \u002F Server URL Setup\n\nConfigure server URLs to receive real-time events from Vapi during calls — transcripts, tool calls, status changes, and end-of-call reports.\n\n> **Setup:** Ensure `VAPI_API_KEY` is set. See the `setup-api-key` skill if needed.\n\n## Overview\n\nVapi uses \"Server URLs\" (webhooks) to communicate with your application. Unlike traditional one-way webhooks, Vapi server URLs support bidirectional communication — your server can respond with data that affects the call.\n\n## Where to Set Server URLs\n\n### On an Assistant\n\n```bash\ncurl -X PATCH https:\u002F\u002Fapi.vapi.ai\u002Fassistant\u002F{id} \\\n  -H \"Authorization: Bearer $VAPI_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"server\": {\n      \"url\": \"https:\u002F\u002Fyour-server.com\u002Fvapi\u002Fwebhook\",\n      \"credentialId\": \"cred_abc123\"\n    }\n  }'\n```\n\nCreate the optional `credentialId` in **Dashboard > Custom Credentials**. Omit it only for a deliberately public endpoint.\n\n### On a Phone Number\n\nPhone-number updates also use a `server` object with `url` and optional `credentialId`. When updating through the API, first retrieve the number and preserve its existing `provider` discriminator in the PATCH body. The dashboard is the safest choice when the provider is unknown.\n\n### At the Organization Level\n\nSet a default server URL in the Vapi Dashboard under **Settings > Server URL**.\n\nPriority order: Tool server URL > Assistant server URL > Phone Number server URL > Organization server URL.\n\n## Event Types\n\n| Event | Description | Expects Response? |\n|-------|-------------|-------------------|\n| `assistant-request` | Request for dynamic assistant config | Yes — return assistant config |\n| `tool-calls` | Assistant is calling a tool | Yes — return tool results |\n| `status-update` | Call status changed | No |\n| `transcript` | Real-time transcript update | No |\n| `end-of-call-report` | Call completed with summary | No |\n| `hang` | Assistant failed to respond | No |\n| `speech-update` | Speech activity detected | No |\n\n## Webhook Server Example (Express.js)\n\n```typescript\nimport express from \"express\";\nconst app = express();\napp.use(express.json());\n\napp.post(\"\u002Fvapi\u002Fwebhook\", (req, res) => {\n  const { message } = req.body;\n\n  switch (message.type) {\n    case \"assistant-request\":\n      \u002F\u002F Dynamically configure the assistant based on the caller\n      res.json({\n        assistant: {\n          name: \"Dynamic Assistant\",\n          firstMessage: `Hello ${message.call.customer?.name || \"there\"}!`,\n          model: {\n            provider: \"openai\",\n            model: \"gpt-4.1\",\n            messages: [\n              { role: \"system\", content: \"You are a helpful assistant.\" },\n            ],\n          },\n          voice: { provider: \"vapi\", voiceId: \"Elliot\", version: 2 },\n          transcriber: { provider: \"deepgram\", model: \"nova-3\", language: \"en\" },\n        },\n      });\n      break;\n\n    case \"tool-calls\":\n      \u002F\u002F Handle tool calls from the assistant\n      const results = (message.toolCallList || []).map((toolCall: any) => ({\n        toolCallId: toolCall.id,\n        result: handleToolCall(\n          toolCall.name,\n          toolCall.parameters || toolCall.arguments\n        ),\n      }));\n      res.json({ results });\n      break;\n\n    case \"end-of-call-report\":\n      \u002F\u002F Process the call report\n      console.log(\"Call ended:\", {\n        callId: message.call.id,\n        endedReason: message.endedReason,\n        cost: message.cost,\n        analysis: message.analysis,\n        artifact: message.artifact,\n      });\n      res.json({});\n      break;\n\n    case \"status-update\":\n      console.log(\"Call status:\", message.status);\n      res.json({});\n      break;\n\n    case \"transcript\":\n      console.log(`[${message.role}]: ${message.transcript}`);\n      res.json({});\n      break;\n\n    default:\n      res.json({});\n  }\n});\n\nfunction handleToolCall(name: string, args: any): string {\n  \u002F\u002F Implement your tool logic here\n  return `Result for ${name}`;\n}\n\napp.listen(3000, () => console.log(\"Webhook server running on port 3000\"));\n```\n\n## Webhook Server Example (Python \u002F Flask)\n\n```python\nfrom flask import Flask, request, jsonify\n\napp = Flask(__name__)\n\n@app.route(\"\u002Fvapi\u002Fwebhook\", methods=[\"POST\"])\ndef vapi_webhook():\n    data = request.json\n    message = data.get(\"message\", {})\n    msg_type = message.get(\"type\")\n\n    if msg_type == \"assistant-request\":\n        return jsonify({\n            \"assistant\": {\n                \"name\": \"Dynamic Assistant\",\n                \"firstMessage\": \"Hello! How can I help?\",\n                \"model\": {\n                    \"provider\": \"openai\",\n                    \"model\": \"gpt-4.1\",\n                    \"messages\": [\n                        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"}\n                    ],\n                },\n                \"voice\": {\"provider\": \"vapi\", \"voiceId\": \"Elliot\", \"version\": 2},\n                \"transcriber\": {\"provider\": \"deepgram\", \"model\": \"nova-3\", \"language\": \"en\"},\n            }\n        })\n\n    elif msg_type == \"tool-calls\":\n        results = []\n        for tool_call in message.get(\"toolCallList\", []):\n            results.append({\n                \"toolCallId\": tool_call[\"id\"],\n                \"result\": f\"Handled {tool_call['name']}\",\n            })\n        return jsonify({\"results\": results})\n\n    elif msg_type == \"end-of-call-report\":\n        print(f\"Call ended: {message['call']['id']}\")\n        print(f\"Summary: {message.get('analysis', {}).get('summary')}\")\n\n    return jsonify({})\n\nif __name__ == \"__main__\":\n    app.run(port=3000)\n```\n\n## Webhook Authentication\n\nUse a Vapi Custom Credential and place its ID in `server.credentialId`. Vapi supports Bearer Token, OAuth 2.0 client credentials, and HMAC credentials. Verify requests according to the credential you configured; HMAC header names, algorithms, timestamps, and payload formats are configurable, so do not assume a fixed `x-vapi-signature` format.\n\nFor a bearer credential, compare the incoming `Authorization: Bearer \u003Ctoken>` value with the token stored securely by your server. Never put the secret itself in an assistant or phone-number payload.\n\n## Local Development\n\nUse the Vapi CLI with a public tunnel. The CLI forwards from port 4242 to your app, but it does not create the public URL itself:\n\n```bash\n# Install the CLI\ncurl -sSL https:\u002F\u002Fvapi.ai\u002Finstall.sh | bash\n\n# Terminal 1: expose the CLI listener\nngrok http 4242\n\n# Terminal 2: forward events from the CLI to your app\nvapi listen --forward-to localhost:3000\u002Fvapi\u002Fwebhook\n```\n\nSet the Vapi server URL to the public ngrok URL. To skip the CLI and tunnel directly to the Express or Flask server instead:\n\n```bash\nngrok http 3000\n# Copy the ngrok URL and set it as your server URL\n```\n\n## End-of-Call Report Fields\n\nThe `end-of-call-report` event includes:\n\n| Field | Description |\n|-------|-------------|\n| `call` | Full call object with metadata |\n| `endedReason` | Why the call ended |\n| `artifact` | Recording, transcript, messages, and other enabled artifacts |\n| `analysis` | Configured summaries, structured data, and success evaluation |\n| `cost` | Total call cost |\n| `startedAt` \u002F `endedAt` | Call timing, when included |\n\n## References\n\n- [Common Server URL Events](references\u002Fwebhook-events.md) — Common event payloads and responses\n- [Setting Server URLs](https:\u002F\u002Fdocs.vapi.ai\u002Fserver-url\u002Fsetting-server-urls) — Placement and priority\n- [Server Authentication](https:\u002F\u002Fdocs.vapi.ai\u002Fserver-url\u002Fserver-authentication) — Custom Credentials\n- [Local Development](https:\u002F\u002Fdocs.vapi.ai\u002Fserver-url\u002Fdeveloping-locally) — Testing webhooks locally\n\n## Additional Resources\n\nVapi provides a **documentation MCP server** that gives compatible AI agents access to the Vapi knowledge base. Use its documentation search for advanced configuration, troubleshooting, SDK details, and anything beyond this skill.\n\nTo add the Vapi documentation MCP server manually in Claude Code, run:\n```bash\nclaude mcp add vapi-docs -- npx -y mcp-remote https:\u002F\u002Fdocs.vapi.ai\u002F_mcp\u002Fserver\n```\n\nSee the [Vapi MCP integration guide](https:\u002F\u002Fdocs.vapi.ai\u002Fcli\u002Fmcp) for setup instructions across supported agents.\n",{"data":44,"body":48},{"name":4,"description":6,"license":29,"compatibility":45,"metadata":46},"Requires internet access and a Vapi API key (VAPI_API_KEY).",{"author":8,"version":47},"1.0",{"type":49,"children":50},"root",[51,60,66,98,105,110,116,123,295,315,321,357,363,375,380,386,569,575,2673,2679,3033,3039,3060,3073,3079,3084,3196,3201,3232,3238,3250,3376,3382,3435,3441,3453,3458,3513,3527],{"type":52,"tag":53,"props":54,"children":56},"element","h1",{"id":55},"vapi-webhook-server-url-setup",[57],{"type":58,"value":59},"text","Vapi Webhook \u002F Server URL Setup",{"type":52,"tag":61,"props":62,"children":63},"p",{},[64],{"type":58,"value":65},"Configure server URLs to receive real-time events from Vapi during calls — transcripts, tool calls, status changes, and end-of-call reports.",{"type":52,"tag":67,"props":68,"children":69},"blockquote",{},[70],{"type":52,"tag":61,"props":71,"children":72},{},[73,79,81,88,90,96],{"type":52,"tag":74,"props":75,"children":76},"strong",{},[77],{"type":58,"value":78},"Setup:",{"type":58,"value":80}," Ensure ",{"type":52,"tag":82,"props":83,"children":85},"code",{"className":84},[],[86],{"type":58,"value":87},"VAPI_API_KEY",{"type":58,"value":89}," is set. See the ",{"type":52,"tag":82,"props":91,"children":93},{"className":92},[],[94],{"type":58,"value":95},"setup-api-key",{"type":58,"value":97}," skill if needed.",{"type":52,"tag":99,"props":100,"children":102},"h2",{"id":101},"overview",[103],{"type":58,"value":104},"Overview",{"type":52,"tag":61,"props":106,"children":107},{},[108],{"type":58,"value":109},"Vapi uses \"Server URLs\" (webhooks) to communicate with your application. Unlike traditional one-way webhooks, Vapi server URLs support bidirectional communication — your server can respond with data that affects the call.",{"type":52,"tag":99,"props":111,"children":113},{"id":112},"where-to-set-server-urls",[114],{"type":58,"value":115},"Where to Set Server URLs",{"type":52,"tag":117,"props":118,"children":120},"h3",{"id":119},"on-an-assistant",[121],{"type":58,"value":122},"On an Assistant",{"type":52,"tag":124,"props":125,"children":130},"pre",{"className":126,"code":127,"language":128,"meta":129,"style":129},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X PATCH https:\u002F\u002Fapi.vapi.ai\u002Fassistant\u002F{id} \\\n  -H \"Authorization: Bearer $VAPI_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"server\": {\n      \"url\": \"https:\u002F\u002Fyour-server.com\u002Fvapi\u002Fwebhook\",\n      \"credentialId\": \"cred_abc123\"\n    }\n  }'\n","bash","",[131],{"type":52,"tag":82,"props":132,"children":133},{"__ignoreMap":129},[134,168,202,227,246,255,264,272,281],{"type":52,"tag":135,"props":136,"children":139},"span",{"class":137,"line":138},"line",1,[140,146,152,157,162],{"type":52,"tag":135,"props":141,"children":143},{"style":142},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[144],{"type":58,"value":145},"curl",{"type":52,"tag":135,"props":147,"children":149},{"style":148},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[150],{"type":58,"value":151}," -X",{"type":52,"tag":135,"props":153,"children":154},{"style":148},[155],{"type":58,"value":156}," PATCH",{"type":52,"tag":135,"props":158,"children":159},{"style":148},[160],{"type":58,"value":161}," https:\u002F\u002Fapi.vapi.ai\u002Fassistant\u002F{id}",{"type":52,"tag":135,"props":163,"children":165},{"style":164},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[166],{"type":58,"value":167}," \\\n",{"type":52,"tag":135,"props":169,"children":171},{"class":137,"line":170},2,[172,177,183,188,193,198],{"type":52,"tag":135,"props":173,"children":174},{"style":148},[175],{"type":58,"value":176},"  -H",{"type":52,"tag":135,"props":178,"children":180},{"style":179},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[181],{"type":58,"value":182}," \"",{"type":52,"tag":135,"props":184,"children":185},{"style":148},[186],{"type":58,"value":187},"Authorization: Bearer ",{"type":52,"tag":135,"props":189,"children":190},{"style":164},[191],{"type":58,"value":192},"$VAPI_API_KEY",{"type":52,"tag":135,"props":194,"children":195},{"style":179},[196],{"type":58,"value":197},"\"",{"type":52,"tag":135,"props":199,"children":200},{"style":164},[201],{"type":58,"value":167},{"type":52,"tag":135,"props":203,"children":205},{"class":137,"line":204},3,[206,210,214,219,223],{"type":52,"tag":135,"props":207,"children":208},{"style":148},[209],{"type":58,"value":176},{"type":52,"tag":135,"props":211,"children":212},{"style":179},[213],{"type":58,"value":182},{"type":52,"tag":135,"props":215,"children":216},{"style":148},[217],{"type":58,"value":218},"Content-Type: application\u002Fjson",{"type":52,"tag":135,"props":220,"children":221},{"style":179},[222],{"type":58,"value":197},{"type":52,"tag":135,"props":224,"children":225},{"style":164},[226],{"type":58,"value":167},{"type":52,"tag":135,"props":228,"children":230},{"class":137,"line":229},4,[231,236,241],{"type":52,"tag":135,"props":232,"children":233},{"style":148},[234],{"type":58,"value":235},"  -d",{"type":52,"tag":135,"props":237,"children":238},{"style":179},[239],{"type":58,"value":240}," '",{"type":52,"tag":135,"props":242,"children":243},{"style":148},[244],{"type":58,"value":245},"{\n",{"type":52,"tag":135,"props":247,"children":249},{"class":137,"line":248},5,[250],{"type":52,"tag":135,"props":251,"children":252},{"style":148},[253],{"type":58,"value":254},"    \"server\": {\n",{"type":52,"tag":135,"props":256,"children":258},{"class":137,"line":257},6,[259],{"type":52,"tag":135,"props":260,"children":261},{"style":148},[262],{"type":58,"value":263},"      \"url\": \"https:\u002F\u002Fyour-server.com\u002Fvapi\u002Fwebhook\",\n",{"type":52,"tag":135,"props":265,"children":266},{"class":137,"line":30},[267],{"type":52,"tag":135,"props":268,"children":269},{"style":148},[270],{"type":58,"value":271},"      \"credentialId\": \"cred_abc123\"\n",{"type":52,"tag":135,"props":273,"children":275},{"class":137,"line":274},8,[276],{"type":52,"tag":135,"props":277,"children":278},{"style":148},[279],{"type":58,"value":280},"    }\n",{"type":52,"tag":135,"props":282,"children":284},{"class":137,"line":283},9,[285,290],{"type":52,"tag":135,"props":286,"children":287},{"style":148},[288],{"type":58,"value":289},"  }",{"type":52,"tag":135,"props":291,"children":292},{"style":179},[293],{"type":58,"value":294},"'\n",{"type":52,"tag":61,"props":296,"children":297},{},[298,300,306,308,313],{"type":58,"value":299},"Create the optional ",{"type":52,"tag":82,"props":301,"children":303},{"className":302},[],[304],{"type":58,"value":305},"credentialId",{"type":58,"value":307}," in ",{"type":52,"tag":74,"props":309,"children":310},{},[311],{"type":58,"value":312},"Dashboard > Custom Credentials",{"type":58,"value":314},". Omit it only for a deliberately public endpoint.",{"type":52,"tag":117,"props":316,"children":318},{"id":317},"on-a-phone-number",[319],{"type":58,"value":320},"On a Phone Number",{"type":52,"tag":61,"props":322,"children":323},{},[324,326,332,334,340,342,347,349,355],{"type":58,"value":325},"Phone-number updates also use a ",{"type":52,"tag":82,"props":327,"children":329},{"className":328},[],[330],{"type":58,"value":331},"server",{"type":58,"value":333}," object with ",{"type":52,"tag":82,"props":335,"children":337},{"className":336},[],[338],{"type":58,"value":339},"url",{"type":58,"value":341}," and optional ",{"type":52,"tag":82,"props":343,"children":345},{"className":344},[],[346],{"type":58,"value":305},{"type":58,"value":348},". When updating through the API, first retrieve the number and preserve its existing ",{"type":52,"tag":82,"props":350,"children":352},{"className":351},[],[353],{"type":58,"value":354},"provider",{"type":58,"value":356}," discriminator in the PATCH body. The dashboard is the safest choice when the provider is unknown.",{"type":52,"tag":117,"props":358,"children":360},{"id":359},"at-the-organization-level",[361],{"type":58,"value":362},"At the Organization Level",{"type":52,"tag":61,"props":364,"children":365},{},[366,368,373],{"type":58,"value":367},"Set a default server URL in the Vapi Dashboard under ",{"type":52,"tag":74,"props":369,"children":370},{},[371],{"type":58,"value":372},"Settings > Server URL",{"type":58,"value":374},".",{"type":52,"tag":61,"props":376,"children":377},{},[378],{"type":58,"value":379},"Priority order: Tool server URL > Assistant server URL > Phone Number server URL > Organization server URL.",{"type":52,"tag":99,"props":381,"children":383},{"id":382},"event-types",[384],{"type":58,"value":385},"Event Types",{"type":52,"tag":387,"props":388,"children":389},"table",{},[390,414],{"type":52,"tag":391,"props":392,"children":393},"thead",{},[394],{"type":52,"tag":395,"props":396,"children":397},"tr",{},[398,404,409],{"type":52,"tag":399,"props":400,"children":401},"th",{},[402],{"type":58,"value":403},"Event",{"type":52,"tag":399,"props":405,"children":406},{},[407],{"type":58,"value":408},"Description",{"type":52,"tag":399,"props":410,"children":411},{},[412],{"type":58,"value":413},"Expects Response?",{"type":52,"tag":415,"props":416,"children":417},"tbody",{},[418,441,463,485,506,527,548],{"type":52,"tag":395,"props":419,"children":420},{},[421,431,436],{"type":52,"tag":422,"props":423,"children":424},"td",{},[425],{"type":52,"tag":82,"props":426,"children":428},{"className":427},[],[429],{"type":58,"value":430},"assistant-request",{"type":52,"tag":422,"props":432,"children":433},{},[434],{"type":58,"value":435},"Request for dynamic assistant config",{"type":52,"tag":422,"props":437,"children":438},{},[439],{"type":58,"value":440},"Yes — return assistant config",{"type":52,"tag":395,"props":442,"children":443},{},[444,453,458],{"type":52,"tag":422,"props":445,"children":446},{},[447],{"type":52,"tag":82,"props":448,"children":450},{"className":449},[],[451],{"type":58,"value":452},"tool-calls",{"type":52,"tag":422,"props":454,"children":455},{},[456],{"type":58,"value":457},"Assistant is calling a tool",{"type":52,"tag":422,"props":459,"children":460},{},[461],{"type":58,"value":462},"Yes — return tool results",{"type":52,"tag":395,"props":464,"children":465},{},[466,475,480],{"type":52,"tag":422,"props":467,"children":468},{},[469],{"type":52,"tag":82,"props":470,"children":472},{"className":471},[],[473],{"type":58,"value":474},"status-update",{"type":52,"tag":422,"props":476,"children":477},{},[478],{"type":58,"value":479},"Call status changed",{"type":52,"tag":422,"props":481,"children":482},{},[483],{"type":58,"value":484},"No",{"type":52,"tag":395,"props":486,"children":487},{},[488,497,502],{"type":52,"tag":422,"props":489,"children":490},{},[491],{"type":52,"tag":82,"props":492,"children":494},{"className":493},[],[495],{"type":58,"value":496},"transcript",{"type":52,"tag":422,"props":498,"children":499},{},[500],{"type":58,"value":501},"Real-time transcript update",{"type":52,"tag":422,"props":503,"children":504},{},[505],{"type":58,"value":484},{"type":52,"tag":395,"props":507,"children":508},{},[509,518,523],{"type":52,"tag":422,"props":510,"children":511},{},[512],{"type":52,"tag":82,"props":513,"children":515},{"className":514},[],[516],{"type":58,"value":517},"end-of-call-report",{"type":52,"tag":422,"props":519,"children":520},{},[521],{"type":58,"value":522},"Call completed with summary",{"type":52,"tag":422,"props":524,"children":525},{},[526],{"type":58,"value":484},{"type":52,"tag":395,"props":528,"children":529},{},[530,539,544],{"type":52,"tag":422,"props":531,"children":532},{},[533],{"type":52,"tag":82,"props":534,"children":536},{"className":535},[],[537],{"type":58,"value":538},"hang",{"type":52,"tag":422,"props":540,"children":541},{},[542],{"type":58,"value":543},"Assistant failed to respond",{"type":52,"tag":422,"props":545,"children":546},{},[547],{"type":58,"value":484},{"type":52,"tag":395,"props":549,"children":550},{},[551,560,565],{"type":52,"tag":422,"props":552,"children":553},{},[554],{"type":52,"tag":82,"props":555,"children":557},{"className":556},[],[558],{"type":58,"value":559},"speech-update",{"type":52,"tag":422,"props":561,"children":562},{},[563],{"type":58,"value":564},"Speech activity detected",{"type":52,"tag":422,"props":566,"children":567},{},[568],{"type":58,"value":484},{"type":52,"tag":99,"props":570,"children":572},{"id":571},"webhook-server-example-expressjs",[573],{"type":58,"value":574},"Webhook Server Example (Express.js)",{"type":52,"tag":124,"props":576,"children":580},{"className":577,"code":578,"language":579,"meta":129,"style":129},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import express from \"express\";\nconst app = express();\napp.use(express.json());\n\napp.post(\"\u002Fvapi\u002Fwebhook\", (req, res) => {\n  const { message } = req.body;\n\n  switch (message.type) {\n    case \"assistant-request\":\n      \u002F\u002F Dynamically configure the assistant based on the caller\n      res.json({\n        assistant: {\n          name: \"Dynamic Assistant\",\n          firstMessage: `Hello ${message.call.customer?.name || \"there\"}!`,\n          model: {\n            provider: \"openai\",\n            model: \"gpt-4.1\",\n            messages: [\n              { role: \"system\", content: \"You are a helpful assistant.\" },\n            ],\n          },\n          voice: { provider: \"vapi\", voiceId: \"Elliot\", version: 2 },\n          transcriber: { provider: \"deepgram\", model: \"nova-3\", language: \"en\" },\n        },\n      });\n      break;\n\n    case \"tool-calls\":\n      \u002F\u002F Handle tool calls from the assistant\n      const results = (message.toolCallList || []).map((toolCall: any) => ({\n        toolCallId: toolCall.id,\n        result: handleToolCall(\n          toolCall.name,\n          toolCall.parameters || toolCall.arguments\n        ),\n      }));\n      res.json({ results });\n      break;\n\n    case \"end-of-call-report\":\n      \u002F\u002F Process the call report\n      console.log(\"Call ended:\", {\n        callId: message.call.id,\n        endedReason: message.endedReason,\n        cost: message.cost,\n        analysis: message.analysis,\n        artifact: message.artifact,\n      });\n      res.json({});\n      break;\n\n    case \"status-update\":\n      console.log(\"Call status:\", message.status);\n      res.json({});\n      break;\n\n    case \"transcript\":\n      console.log(`[${message.role}]: ${message.transcript}`);\n      res.json({});\n      break;\n\n    default:\n      res.json({});\n  }\n});\n\nfunction handleToolCall(name: string, args: any): string {\n  \u002F\u002F Implement your tool logic here\n  return `Result for ${name}`;\n}\n\napp.listen(3000, () => console.log(\"Webhook server running on port 3000\"));\n","typescript",[581],{"type":52,"tag":82,"props":582,"children":583},{"__ignoreMap":129},[584,621,655,695,704,778,824,831,867,892,902,927,945,976,1069,1086,1116,1146,1164,1226,1239,1248,1335,1429,1438,1455,1468,1476,1500,1509,1601,1632,1655,1677,1711,1724,1741,1782,1794,1802,1826,1835,1878,1915,1945,1975,2005,2035,2051,2084,2096,2104,2128,2185,2217,2229,2237,2261,2346,2378,2390,2398,2411,2443,2452,2468,2476,2536,2545,2579,2588,2596],{"type":52,"tag":135,"props":585,"children":586},{"class":137,"line":138},[587,593,598,603,607,612,616],{"type":52,"tag":135,"props":588,"children":590},{"style":589},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[591],{"type":58,"value":592},"import",{"type":52,"tag":135,"props":594,"children":595},{"style":164},[596],{"type":58,"value":597}," express ",{"type":52,"tag":135,"props":599,"children":600},{"style":589},[601],{"type":58,"value":602},"from",{"type":52,"tag":135,"props":604,"children":605},{"style":179},[606],{"type":58,"value":182},{"type":52,"tag":135,"props":608,"children":609},{"style":148},[610],{"type":58,"value":611},"express",{"type":52,"tag":135,"props":613,"children":614},{"style":179},[615],{"type":58,"value":197},{"type":52,"tag":135,"props":617,"children":618},{"style":179},[619],{"type":58,"value":620},";\n",{"type":52,"tag":135,"props":622,"children":623},{"class":137,"line":170},[624,630,635,640,646,651],{"type":52,"tag":135,"props":625,"children":627},{"style":626},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[628],{"type":58,"value":629},"const",{"type":52,"tag":135,"props":631,"children":632},{"style":164},[633],{"type":58,"value":634}," app ",{"type":52,"tag":135,"props":636,"children":637},{"style":179},[638],{"type":58,"value":639},"=",{"type":52,"tag":135,"props":641,"children":643},{"style":642},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[644],{"type":58,"value":645}," express",{"type":52,"tag":135,"props":647,"children":648},{"style":164},[649],{"type":58,"value":650},"()",{"type":52,"tag":135,"props":652,"children":653},{"style":179},[654],{"type":58,"value":620},{"type":52,"tag":135,"props":656,"children":657},{"class":137,"line":204},[658,663,667,672,677,681,686,691],{"type":52,"tag":135,"props":659,"children":660},{"style":164},[661],{"type":58,"value":662},"app",{"type":52,"tag":135,"props":664,"children":665},{"style":179},[666],{"type":58,"value":374},{"type":52,"tag":135,"props":668,"children":669},{"style":642},[670],{"type":58,"value":671},"use",{"type":52,"tag":135,"props":673,"children":674},{"style":164},[675],{"type":58,"value":676},"(express",{"type":52,"tag":135,"props":678,"children":679},{"style":179},[680],{"type":58,"value":374},{"type":52,"tag":135,"props":682,"children":683},{"style":642},[684],{"type":58,"value":685},"json",{"type":52,"tag":135,"props":687,"children":688},{"style":164},[689],{"type":58,"value":690},"())",{"type":52,"tag":135,"props":692,"children":693},{"style":179},[694],{"type":58,"value":620},{"type":52,"tag":135,"props":696,"children":697},{"class":137,"line":229},[698],{"type":52,"tag":135,"props":699,"children":701},{"emptyLinePlaceholder":700},true,[702],{"type":58,"value":703},"\n",{"type":52,"tag":135,"props":705,"children":706},{"class":137,"line":248},[707,711,715,720,725,729,734,738,743,748,754,758,763,768,773],{"type":52,"tag":135,"props":708,"children":709},{"style":164},[710],{"type":58,"value":662},{"type":52,"tag":135,"props":712,"children":713},{"style":179},[714],{"type":58,"value":374},{"type":52,"tag":135,"props":716,"children":717},{"style":642},[718],{"type":58,"value":719},"post",{"type":52,"tag":135,"props":721,"children":722},{"style":164},[723],{"type":58,"value":724},"(",{"type":52,"tag":135,"props":726,"children":727},{"style":179},[728],{"type":58,"value":197},{"type":52,"tag":135,"props":730,"children":731},{"style":148},[732],{"type":58,"value":733},"\u002Fvapi\u002Fwebhook",{"type":52,"tag":135,"props":735,"children":736},{"style":179},[737],{"type":58,"value":197},{"type":52,"tag":135,"props":739,"children":740},{"style":179},[741],{"type":58,"value":742},",",{"type":52,"tag":135,"props":744,"children":745},{"style":179},[746],{"type":58,"value":747}," (",{"type":52,"tag":135,"props":749,"children":751},{"style":750},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[752],{"type":58,"value":753},"req",{"type":52,"tag":135,"props":755,"children":756},{"style":179},[757],{"type":58,"value":742},{"type":52,"tag":135,"props":759,"children":760},{"style":750},[761],{"type":58,"value":762}," res",{"type":52,"tag":135,"props":764,"children":765},{"style":179},[766],{"type":58,"value":767},")",{"type":52,"tag":135,"props":769,"children":770},{"style":626},[771],{"type":58,"value":772}," =>",{"type":52,"tag":135,"props":774,"children":775},{"style":179},[776],{"type":58,"value":777}," {\n",{"type":52,"tag":135,"props":779,"children":780},{"class":137,"line":257},[781,786,791,796,801,806,811,815,820],{"type":52,"tag":135,"props":782,"children":783},{"style":626},[784],{"type":58,"value":785},"  const",{"type":52,"tag":135,"props":787,"children":788},{"style":179},[789],{"type":58,"value":790}," {",{"type":52,"tag":135,"props":792,"children":793},{"style":164},[794],{"type":58,"value":795}," message",{"type":52,"tag":135,"props":797,"children":798},{"style":179},[799],{"type":58,"value":800}," }",{"type":52,"tag":135,"props":802,"children":803},{"style":179},[804],{"type":58,"value":805}," =",{"type":52,"tag":135,"props":807,"children":808},{"style":164},[809],{"type":58,"value":810}," req",{"type":52,"tag":135,"props":812,"children":813},{"style":179},[814],{"type":58,"value":374},{"type":52,"tag":135,"props":816,"children":817},{"style":164},[818],{"type":58,"value":819},"body",{"type":52,"tag":135,"props":821,"children":822},{"style":179},[823],{"type":58,"value":620},{"type":52,"tag":135,"props":825,"children":826},{"class":137,"line":30},[827],{"type":52,"tag":135,"props":828,"children":829},{"emptyLinePlaceholder":700},[830],{"type":58,"value":703},{"type":52,"tag":135,"props":832,"children":833},{"class":137,"line":274},[834,839,844,849,853,858,863],{"type":52,"tag":135,"props":835,"children":836},{"style":589},[837],{"type":58,"value":838},"  switch",{"type":52,"tag":135,"props":840,"children":842},{"style":841},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[843],{"type":58,"value":747},{"type":52,"tag":135,"props":845,"children":846},{"style":164},[847],{"type":58,"value":848},"message",{"type":52,"tag":135,"props":850,"children":851},{"style":179},[852],{"type":58,"value":374},{"type":52,"tag":135,"props":854,"children":855},{"style":164},[856],{"type":58,"value":857},"type",{"type":52,"tag":135,"props":859,"children":860},{"style":841},[861],{"type":58,"value":862},") ",{"type":52,"tag":135,"props":864,"children":865},{"style":179},[866],{"type":58,"value":245},{"type":52,"tag":135,"props":868,"children":869},{"class":137,"line":283},[870,875,879,883,887],{"type":52,"tag":135,"props":871,"children":872},{"style":589},[873],{"type":58,"value":874},"    case",{"type":52,"tag":135,"props":876,"children":877},{"style":179},[878],{"type":58,"value":182},{"type":52,"tag":135,"props":880,"children":881},{"style":148},[882],{"type":58,"value":430},{"type":52,"tag":135,"props":884,"children":885},{"style":179},[886],{"type":58,"value":197},{"type":52,"tag":135,"props":888,"children":889},{"style":179},[890],{"type":58,"value":891},":\n",{"type":52,"tag":135,"props":893,"children":895},{"class":137,"line":894},10,[896],{"type":52,"tag":135,"props":897,"children":899},{"style":898},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[900],{"type":58,"value":901},"      \u002F\u002F Dynamically configure the assistant based on the caller\n",{"type":52,"tag":135,"props":903,"children":905},{"class":137,"line":904},11,[906,911,915,919,923],{"type":52,"tag":135,"props":907,"children":908},{"style":164},[909],{"type":58,"value":910},"      res",{"type":52,"tag":135,"props":912,"children":913},{"style":179},[914],{"type":58,"value":374},{"type":52,"tag":135,"props":916,"children":917},{"style":642},[918],{"type":58,"value":685},{"type":52,"tag":135,"props":920,"children":921},{"style":841},[922],{"type":58,"value":724},{"type":52,"tag":135,"props":924,"children":925},{"style":179},[926],{"type":58,"value":245},{"type":52,"tag":135,"props":928,"children":930},{"class":137,"line":929},12,[931,936,941],{"type":52,"tag":135,"props":932,"children":933},{"style":841},[934],{"type":58,"value":935},"        assistant",{"type":52,"tag":135,"props":937,"children":938},{"style":179},[939],{"type":58,"value":940},":",{"type":52,"tag":135,"props":942,"children":943},{"style":179},[944],{"type":58,"value":777},{"type":52,"tag":135,"props":946,"children":948},{"class":137,"line":947},13,[949,954,958,962,967,971],{"type":52,"tag":135,"props":950,"children":951},{"style":841},[952],{"type":58,"value":953},"          name",{"type":52,"tag":135,"props":955,"children":956},{"style":179},[957],{"type":58,"value":940},{"type":52,"tag":135,"props":959,"children":960},{"style":179},[961],{"type":58,"value":182},{"type":52,"tag":135,"props":963,"children":964},{"style":148},[965],{"type":58,"value":966},"Dynamic Assistant",{"type":52,"tag":135,"props":968,"children":969},{"style":179},[970],{"type":58,"value":197},{"type":52,"tag":135,"props":972,"children":973},{"style":179},[974],{"type":58,"value":975},",\n",{"type":52,"tag":135,"props":977,"children":979},{"class":137,"line":978},14,[980,985,989,994,999,1004,1008,1012,1017,1021,1026,1031,1036,1041,1045,1050,1055,1060,1065],{"type":52,"tag":135,"props":981,"children":982},{"style":841},[983],{"type":58,"value":984},"          firstMessage",{"type":52,"tag":135,"props":986,"children":987},{"style":179},[988],{"type":58,"value":940},{"type":52,"tag":135,"props":990,"children":991},{"style":179},[992],{"type":58,"value":993}," `",{"type":52,"tag":135,"props":995,"children":996},{"style":148},[997],{"type":58,"value":998},"Hello ",{"type":52,"tag":135,"props":1000,"children":1001},{"style":179},[1002],{"type":58,"value":1003},"${",{"type":52,"tag":135,"props":1005,"children":1006},{"style":164},[1007],{"type":58,"value":848},{"type":52,"tag":135,"props":1009,"children":1010},{"style":179},[1011],{"type":58,"value":374},{"type":52,"tag":135,"props":1013,"children":1014},{"style":164},[1015],{"type":58,"value":1016},"call",{"type":52,"tag":135,"props":1018,"children":1019},{"style":179},[1020],{"type":58,"value":374},{"type":52,"tag":135,"props":1022,"children":1023},{"style":164},[1024],{"type":58,"value":1025},"customer",{"type":52,"tag":135,"props":1027,"children":1028},{"style":179},[1029],{"type":58,"value":1030},"?.",{"type":52,"tag":135,"props":1032,"children":1033},{"style":164},[1034],{"type":58,"value":1035},"name ",{"type":52,"tag":135,"props":1037,"children":1038},{"style":179},[1039],{"type":58,"value":1040},"||",{"type":52,"tag":135,"props":1042,"children":1043},{"style":179},[1044],{"type":58,"value":182},{"type":52,"tag":135,"props":1046,"children":1047},{"style":148},[1048],{"type":58,"value":1049},"there",{"type":52,"tag":135,"props":1051,"children":1052},{"style":179},[1053],{"type":58,"value":1054},"\"}",{"type":52,"tag":135,"props":1056,"children":1057},{"style":148},[1058],{"type":58,"value":1059},"!",{"type":52,"tag":135,"props":1061,"children":1062},{"style":179},[1063],{"type":58,"value":1064},"`",{"type":52,"tag":135,"props":1066,"children":1067},{"style":179},[1068],{"type":58,"value":975},{"type":52,"tag":135,"props":1070,"children":1072},{"class":137,"line":1071},15,[1073,1078,1082],{"type":52,"tag":135,"props":1074,"children":1075},{"style":841},[1076],{"type":58,"value":1077},"          model",{"type":52,"tag":135,"props":1079,"children":1080},{"style":179},[1081],{"type":58,"value":940},{"type":52,"tag":135,"props":1083,"children":1084},{"style":179},[1085],{"type":58,"value":777},{"type":52,"tag":135,"props":1087,"children":1089},{"class":137,"line":1088},16,[1090,1095,1099,1103,1108,1112],{"type":52,"tag":135,"props":1091,"children":1092},{"style":841},[1093],{"type":58,"value":1094},"            provider",{"type":52,"tag":135,"props":1096,"children":1097},{"style":179},[1098],{"type":58,"value":940},{"type":52,"tag":135,"props":1100,"children":1101},{"style":179},[1102],{"type":58,"value":182},{"type":52,"tag":135,"props":1104,"children":1105},{"style":148},[1106],{"type":58,"value":1107},"openai",{"type":52,"tag":135,"props":1109,"children":1110},{"style":179},[1111],{"type":58,"value":197},{"type":52,"tag":135,"props":1113,"children":1114},{"style":179},[1115],{"type":58,"value":975},{"type":52,"tag":135,"props":1117,"children":1119},{"class":137,"line":1118},17,[1120,1125,1129,1133,1138,1142],{"type":52,"tag":135,"props":1121,"children":1122},{"style":841},[1123],{"type":58,"value":1124},"            model",{"type":52,"tag":135,"props":1126,"children":1127},{"style":179},[1128],{"type":58,"value":940},{"type":52,"tag":135,"props":1130,"children":1131},{"style":179},[1132],{"type":58,"value":182},{"type":52,"tag":135,"props":1134,"children":1135},{"style":148},[1136],{"type":58,"value":1137},"gpt-4.1",{"type":52,"tag":135,"props":1139,"children":1140},{"style":179},[1141],{"type":58,"value":197},{"type":52,"tag":135,"props":1143,"children":1144},{"style":179},[1145],{"type":58,"value":975},{"type":52,"tag":135,"props":1147,"children":1149},{"class":137,"line":1148},18,[1150,1155,1159],{"type":52,"tag":135,"props":1151,"children":1152},{"style":841},[1153],{"type":58,"value":1154},"            messages",{"type":52,"tag":135,"props":1156,"children":1157},{"style":179},[1158],{"type":58,"value":940},{"type":52,"tag":135,"props":1160,"children":1161},{"style":841},[1162],{"type":58,"value":1163}," [\n",{"type":52,"tag":135,"props":1165,"children":1167},{"class":137,"line":1166},19,[1168,1173,1178,1182,1186,1191,1195,1199,1204,1208,1212,1217,1221],{"type":52,"tag":135,"props":1169,"children":1170},{"style":179},[1171],{"type":58,"value":1172},"              {",{"type":52,"tag":135,"props":1174,"children":1175},{"style":841},[1176],{"type":58,"value":1177}," role",{"type":52,"tag":135,"props":1179,"children":1180},{"style":179},[1181],{"type":58,"value":940},{"type":52,"tag":135,"props":1183,"children":1184},{"style":179},[1185],{"type":58,"value":182},{"type":52,"tag":135,"props":1187,"children":1188},{"style":148},[1189],{"type":58,"value":1190},"system",{"type":52,"tag":135,"props":1192,"children":1193},{"style":179},[1194],{"type":58,"value":197},{"type":52,"tag":135,"props":1196,"children":1197},{"style":179},[1198],{"type":58,"value":742},{"type":52,"tag":135,"props":1200,"children":1201},{"style":841},[1202],{"type":58,"value":1203}," content",{"type":52,"tag":135,"props":1205,"children":1206},{"style":179},[1207],{"type":58,"value":940},{"type":52,"tag":135,"props":1209,"children":1210},{"style":179},[1211],{"type":58,"value":182},{"type":52,"tag":135,"props":1213,"children":1214},{"style":148},[1215],{"type":58,"value":1216},"You are a helpful assistant.",{"type":52,"tag":135,"props":1218,"children":1219},{"style":179},[1220],{"type":58,"value":197},{"type":52,"tag":135,"props":1222,"children":1223},{"style":179},[1224],{"type":58,"value":1225}," },\n",{"type":52,"tag":135,"props":1227,"children":1229},{"class":137,"line":1228},20,[1230,1235],{"type":52,"tag":135,"props":1231,"children":1232},{"style":841},[1233],{"type":58,"value":1234},"            ]",{"type":52,"tag":135,"props":1236,"children":1237},{"style":179},[1238],{"type":58,"value":975},{"type":52,"tag":135,"props":1240,"children":1242},{"class":137,"line":1241},21,[1243],{"type":52,"tag":135,"props":1244,"children":1245},{"style":179},[1246],{"type":58,"value":1247},"          },\n",{"type":52,"tag":135,"props":1249,"children":1251},{"class":137,"line":1250},22,[1252,1257,1261,1265,1270,1274,1278,1282,1286,1290,1295,1299,1303,1308,1312,1316,1321,1325,1331],{"type":52,"tag":135,"props":1253,"children":1254},{"style":841},[1255],{"type":58,"value":1256},"          voice",{"type":52,"tag":135,"props":1258,"children":1259},{"style":179},[1260],{"type":58,"value":940},{"type":52,"tag":135,"props":1262,"children":1263},{"style":179},[1264],{"type":58,"value":790},{"type":52,"tag":135,"props":1266,"children":1267},{"style":841},[1268],{"type":58,"value":1269}," provider",{"type":52,"tag":135,"props":1271,"children":1272},{"style":179},[1273],{"type":58,"value":940},{"type":52,"tag":135,"props":1275,"children":1276},{"style":179},[1277],{"type":58,"value":182},{"type":52,"tag":135,"props":1279,"children":1280},{"style":148},[1281],{"type":58,"value":8},{"type":52,"tag":135,"props":1283,"children":1284},{"style":179},[1285],{"type":58,"value":197},{"type":52,"tag":135,"props":1287,"children":1288},{"style":179},[1289],{"type":58,"value":742},{"type":52,"tag":135,"props":1291,"children":1292},{"style":841},[1293],{"type":58,"value":1294}," voiceId",{"type":52,"tag":135,"props":1296,"children":1297},{"style":179},[1298],{"type":58,"value":940},{"type":52,"tag":135,"props":1300,"children":1301},{"style":179},[1302],{"type":58,"value":182},{"type":52,"tag":135,"props":1304,"children":1305},{"style":148},[1306],{"type":58,"value":1307},"Elliot",{"type":52,"tag":135,"props":1309,"children":1310},{"style":179},[1311],{"type":58,"value":197},{"type":52,"tag":135,"props":1313,"children":1314},{"style":179},[1315],{"type":58,"value":742},{"type":52,"tag":135,"props":1317,"children":1318},{"style":841},[1319],{"type":58,"value":1320}," version",{"type":52,"tag":135,"props":1322,"children":1323},{"style":179},[1324],{"type":58,"value":940},{"type":52,"tag":135,"props":1326,"children":1328},{"style":1327},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1329],{"type":58,"value":1330}," 2",{"type":52,"tag":135,"props":1332,"children":1333},{"style":179},[1334],{"type":58,"value":1225},{"type":52,"tag":135,"props":1336,"children":1338},{"class":137,"line":1337},23,[1339,1344,1348,1352,1356,1360,1364,1369,1373,1377,1382,1386,1390,1395,1399,1403,1408,1412,1416,1421,1425],{"type":52,"tag":135,"props":1340,"children":1341},{"style":841},[1342],{"type":58,"value":1343},"          transcriber",{"type":52,"tag":135,"props":1345,"children":1346},{"style":179},[1347],{"type":58,"value":940},{"type":52,"tag":135,"props":1349,"children":1350},{"style":179},[1351],{"type":58,"value":790},{"type":52,"tag":135,"props":1353,"children":1354},{"style":841},[1355],{"type":58,"value":1269},{"type":52,"tag":135,"props":1357,"children":1358},{"style":179},[1359],{"type":58,"value":940},{"type":52,"tag":135,"props":1361,"children":1362},{"style":179},[1363],{"type":58,"value":182},{"type":52,"tag":135,"props":1365,"children":1366},{"style":148},[1367],{"type":58,"value":1368},"deepgram",{"type":52,"tag":135,"props":1370,"children":1371},{"style":179},[1372],{"type":58,"value":197},{"type":52,"tag":135,"props":1374,"children":1375},{"style":179},[1376],{"type":58,"value":742},{"type":52,"tag":135,"props":1378,"children":1379},{"style":841},[1380],{"type":58,"value":1381}," model",{"type":52,"tag":135,"props":1383,"children":1384},{"style":179},[1385],{"type":58,"value":940},{"type":52,"tag":135,"props":1387,"children":1388},{"style":179},[1389],{"type":58,"value":182},{"type":52,"tag":135,"props":1391,"children":1392},{"style":148},[1393],{"type":58,"value":1394},"nova-3",{"type":52,"tag":135,"props":1396,"children":1397},{"style":179},[1398],{"type":58,"value":197},{"type":52,"tag":135,"props":1400,"children":1401},{"style":179},[1402],{"type":58,"value":742},{"type":52,"tag":135,"props":1404,"children":1405},{"style":841},[1406],{"type":58,"value":1407}," language",{"type":52,"tag":135,"props":1409,"children":1410},{"style":179},[1411],{"type":58,"value":940},{"type":52,"tag":135,"props":1413,"children":1414},{"style":179},[1415],{"type":58,"value":182},{"type":52,"tag":135,"props":1417,"children":1418},{"style":148},[1419],{"type":58,"value":1420},"en",{"type":52,"tag":135,"props":1422,"children":1423},{"style":179},[1424],{"type":58,"value":197},{"type":52,"tag":135,"props":1426,"children":1427},{"style":179},[1428],{"type":58,"value":1225},{"type":52,"tag":135,"props":1430,"children":1432},{"class":137,"line":1431},24,[1433],{"type":52,"tag":135,"props":1434,"children":1435},{"style":179},[1436],{"type":58,"value":1437},"        },\n",{"type":52,"tag":135,"props":1439,"children":1441},{"class":137,"line":1440},25,[1442,1447,1451],{"type":52,"tag":135,"props":1443,"children":1444},{"style":179},[1445],{"type":58,"value":1446},"      }",{"type":52,"tag":135,"props":1448,"children":1449},{"style":841},[1450],{"type":58,"value":767},{"type":52,"tag":135,"props":1452,"children":1453},{"style":179},[1454],{"type":58,"value":620},{"type":52,"tag":135,"props":1456,"children":1458},{"class":137,"line":1457},26,[1459,1464],{"type":52,"tag":135,"props":1460,"children":1461},{"style":589},[1462],{"type":58,"value":1463},"      break",{"type":52,"tag":135,"props":1465,"children":1466},{"style":179},[1467],{"type":58,"value":620},{"type":52,"tag":135,"props":1469,"children":1471},{"class":137,"line":1470},27,[1472],{"type":52,"tag":135,"props":1473,"children":1474},{"emptyLinePlaceholder":700},[1475],{"type":58,"value":703},{"type":52,"tag":135,"props":1477,"children":1479},{"class":137,"line":1478},28,[1480,1484,1488,1492,1496],{"type":52,"tag":135,"props":1481,"children":1482},{"style":589},[1483],{"type":58,"value":874},{"type":52,"tag":135,"props":1485,"children":1486},{"style":179},[1487],{"type":58,"value":182},{"type":52,"tag":135,"props":1489,"children":1490},{"style":148},[1491],{"type":58,"value":452},{"type":52,"tag":135,"props":1493,"children":1494},{"style":179},[1495],{"type":58,"value":197},{"type":52,"tag":135,"props":1497,"children":1498},{"style":179},[1499],{"type":58,"value":891},{"type":52,"tag":135,"props":1501,"children":1503},{"class":137,"line":1502},29,[1504],{"type":52,"tag":135,"props":1505,"children":1506},{"style":898},[1507],{"type":58,"value":1508},"      \u002F\u002F Handle tool calls from the assistant\n",{"type":52,"tag":135,"props":1510,"children":1512},{"class":137,"line":1511},30,[1513,1518,1523,1527,1531,1535,1539,1544,1549,1554,1558,1563,1567,1571,1576,1580,1585,1589,1593,1597],{"type":52,"tag":135,"props":1514,"children":1515},{"style":626},[1516],{"type":58,"value":1517},"      const",{"type":52,"tag":135,"props":1519,"children":1520},{"style":164},[1521],{"type":58,"value":1522}," results",{"type":52,"tag":135,"props":1524,"children":1525},{"style":179},[1526],{"type":58,"value":805},{"type":52,"tag":135,"props":1528,"children":1529},{"style":841},[1530],{"type":58,"value":747},{"type":52,"tag":135,"props":1532,"children":1533},{"style":164},[1534],{"type":58,"value":848},{"type":52,"tag":135,"props":1536,"children":1537},{"style":179},[1538],{"type":58,"value":374},{"type":52,"tag":135,"props":1540,"children":1541},{"style":164},[1542],{"type":58,"value":1543},"toolCallList",{"type":52,"tag":135,"props":1545,"children":1546},{"style":179},[1547],{"type":58,"value":1548}," ||",{"type":52,"tag":135,"props":1550,"children":1551},{"style":841},[1552],{"type":58,"value":1553}," [])",{"type":52,"tag":135,"props":1555,"children":1556},{"style":179},[1557],{"type":58,"value":374},{"type":52,"tag":135,"props":1559,"children":1560},{"style":642},[1561],{"type":58,"value":1562},"map",{"type":52,"tag":135,"props":1564,"children":1565},{"style":841},[1566],{"type":58,"value":724},{"type":52,"tag":135,"props":1568,"children":1569},{"style":179},[1570],{"type":58,"value":724},{"type":52,"tag":135,"props":1572,"children":1573},{"style":750},[1574],{"type":58,"value":1575},"toolCall",{"type":52,"tag":135,"props":1577,"children":1578},{"style":179},[1579],{"type":58,"value":940},{"type":52,"tag":135,"props":1581,"children":1582},{"style":142},[1583],{"type":58,"value":1584}," any",{"type":52,"tag":135,"props":1586,"children":1587},{"style":179},[1588],{"type":58,"value":767},{"type":52,"tag":135,"props":1590,"children":1591},{"style":626},[1592],{"type":58,"value":772},{"type":52,"tag":135,"props":1594,"children":1595},{"style":841},[1596],{"type":58,"value":747},{"type":52,"tag":135,"props":1598,"children":1599},{"style":179},[1600],{"type":58,"value":245},{"type":52,"tag":135,"props":1602,"children":1604},{"class":137,"line":1603},31,[1605,1610,1614,1619,1623,1628],{"type":52,"tag":135,"props":1606,"children":1607},{"style":841},[1608],{"type":58,"value":1609},"        toolCallId",{"type":52,"tag":135,"props":1611,"children":1612},{"style":179},[1613],{"type":58,"value":940},{"type":52,"tag":135,"props":1615,"children":1616},{"style":164},[1617],{"type":58,"value":1618}," toolCall",{"type":52,"tag":135,"props":1620,"children":1621},{"style":179},[1622],{"type":58,"value":374},{"type":52,"tag":135,"props":1624,"children":1625},{"style":164},[1626],{"type":58,"value":1627},"id",{"type":52,"tag":135,"props":1629,"children":1630},{"style":179},[1631],{"type":58,"value":975},{"type":52,"tag":135,"props":1633,"children":1635},{"class":137,"line":1634},32,[1636,1641,1645,1650],{"type":52,"tag":135,"props":1637,"children":1638},{"style":841},[1639],{"type":58,"value":1640},"        result",{"type":52,"tag":135,"props":1642,"children":1643},{"style":179},[1644],{"type":58,"value":940},{"type":52,"tag":135,"props":1646,"children":1647},{"style":642},[1648],{"type":58,"value":1649}," handleToolCall",{"type":52,"tag":135,"props":1651,"children":1652},{"style":841},[1653],{"type":58,"value":1654},"(\n",{"type":52,"tag":135,"props":1656,"children":1658},{"class":137,"line":1657},33,[1659,1664,1668,1673],{"type":52,"tag":135,"props":1660,"children":1661},{"style":164},[1662],{"type":58,"value":1663},"          toolCall",{"type":52,"tag":135,"props":1665,"children":1666},{"style":179},[1667],{"type":58,"value":374},{"type":52,"tag":135,"props":1669,"children":1670},{"style":164},[1671],{"type":58,"value":1672},"name",{"type":52,"tag":135,"props":1674,"children":1675},{"style":179},[1676],{"type":58,"value":975},{"type":52,"tag":135,"props":1678,"children":1680},{"class":137,"line":1679},34,[1681,1685,1689,1694,1698,1702,1706],{"type":52,"tag":135,"props":1682,"children":1683},{"style":164},[1684],{"type":58,"value":1663},{"type":52,"tag":135,"props":1686,"children":1687},{"style":179},[1688],{"type":58,"value":374},{"type":52,"tag":135,"props":1690,"children":1691},{"style":164},[1692],{"type":58,"value":1693},"parameters",{"type":52,"tag":135,"props":1695,"children":1696},{"style":179},[1697],{"type":58,"value":1548},{"type":52,"tag":135,"props":1699,"children":1700},{"style":164},[1701],{"type":58,"value":1618},{"type":52,"tag":135,"props":1703,"children":1704},{"style":179},[1705],{"type":58,"value":374},{"type":52,"tag":135,"props":1707,"children":1708},{"style":164},[1709],{"type":58,"value":1710},"arguments\n",{"type":52,"tag":135,"props":1712,"children":1714},{"class":137,"line":1713},35,[1715,1720],{"type":52,"tag":135,"props":1716,"children":1717},{"style":841},[1718],{"type":58,"value":1719},"        )",{"type":52,"tag":135,"props":1721,"children":1722},{"style":179},[1723],{"type":58,"value":975},{"type":52,"tag":135,"props":1725,"children":1727},{"class":137,"line":1726},36,[1728,1732,1737],{"type":52,"tag":135,"props":1729,"children":1730},{"style":179},[1731],{"type":58,"value":1446},{"type":52,"tag":135,"props":1733,"children":1734},{"style":841},[1735],{"type":58,"value":1736},"))",{"type":52,"tag":135,"props":1738,"children":1739},{"style":179},[1740],{"type":58,"value":620},{"type":52,"tag":135,"props":1742,"children":1744},{"class":137,"line":1743},37,[1745,1749,1753,1757,1761,1766,1770,1774,1778],{"type":52,"tag":135,"props":1746,"children":1747},{"style":164},[1748],{"type":58,"value":910},{"type":52,"tag":135,"props":1750,"children":1751},{"style":179},[1752],{"type":58,"value":374},{"type":52,"tag":135,"props":1754,"children":1755},{"style":642},[1756],{"type":58,"value":685},{"type":52,"tag":135,"props":1758,"children":1759},{"style":841},[1760],{"type":58,"value":724},{"type":52,"tag":135,"props":1762,"children":1763},{"style":179},[1764],{"type":58,"value":1765},"{",{"type":52,"tag":135,"props":1767,"children":1768},{"style":164},[1769],{"type":58,"value":1522},{"type":52,"tag":135,"props":1771,"children":1772},{"style":179},[1773],{"type":58,"value":800},{"type":52,"tag":135,"props":1775,"children":1776},{"style":841},[1777],{"type":58,"value":767},{"type":52,"tag":135,"props":1779,"children":1780},{"style":179},[1781],{"type":58,"value":620},{"type":52,"tag":135,"props":1783,"children":1785},{"class":137,"line":1784},38,[1786,1790],{"type":52,"tag":135,"props":1787,"children":1788},{"style":589},[1789],{"type":58,"value":1463},{"type":52,"tag":135,"props":1791,"children":1792},{"style":179},[1793],{"type":58,"value":620},{"type":52,"tag":135,"props":1795,"children":1797},{"class":137,"line":1796},39,[1798],{"type":52,"tag":135,"props":1799,"children":1800},{"emptyLinePlaceholder":700},[1801],{"type":58,"value":703},{"type":52,"tag":135,"props":1803,"children":1805},{"class":137,"line":1804},40,[1806,1810,1814,1818,1822],{"type":52,"tag":135,"props":1807,"children":1808},{"style":589},[1809],{"type":58,"value":874},{"type":52,"tag":135,"props":1811,"children":1812},{"style":179},[1813],{"type":58,"value":182},{"type":52,"tag":135,"props":1815,"children":1816},{"style":148},[1817],{"type":58,"value":517},{"type":52,"tag":135,"props":1819,"children":1820},{"style":179},[1821],{"type":58,"value":197},{"type":52,"tag":135,"props":1823,"children":1824},{"style":179},[1825],{"type":58,"value":891},{"type":52,"tag":135,"props":1827,"children":1829},{"class":137,"line":1828},41,[1830],{"type":52,"tag":135,"props":1831,"children":1832},{"style":898},[1833],{"type":58,"value":1834},"      \u002F\u002F Process the call report\n",{"type":52,"tag":135,"props":1836,"children":1838},{"class":137,"line":1837},42,[1839,1844,1848,1853,1857,1861,1866,1870,1874],{"type":52,"tag":135,"props":1840,"children":1841},{"style":164},[1842],{"type":58,"value":1843},"      console",{"type":52,"tag":135,"props":1845,"children":1846},{"style":179},[1847],{"type":58,"value":374},{"type":52,"tag":135,"props":1849,"children":1850},{"style":642},[1851],{"type":58,"value":1852},"log",{"type":52,"tag":135,"props":1854,"children":1855},{"style":841},[1856],{"type":58,"value":724},{"type":52,"tag":135,"props":1858,"children":1859},{"style":179},[1860],{"type":58,"value":197},{"type":52,"tag":135,"props":1862,"children":1863},{"style":148},[1864],{"type":58,"value":1865},"Call ended:",{"type":52,"tag":135,"props":1867,"children":1868},{"style":179},[1869],{"type":58,"value":197},{"type":52,"tag":135,"props":1871,"children":1872},{"style":179},[1873],{"type":58,"value":742},{"type":52,"tag":135,"props":1875,"children":1876},{"style":179},[1877],{"type":58,"value":777},{"type":52,"tag":135,"props":1879,"children":1881},{"class":137,"line":1880},43,[1882,1887,1891,1895,1899,1903,1907,1911],{"type":52,"tag":135,"props":1883,"children":1884},{"style":841},[1885],{"type":58,"value":1886},"        callId",{"type":52,"tag":135,"props":1888,"children":1889},{"style":179},[1890],{"type":58,"value":940},{"type":52,"tag":135,"props":1892,"children":1893},{"style":164},[1894],{"type":58,"value":795},{"type":52,"tag":135,"props":1896,"children":1897},{"style":179},[1898],{"type":58,"value":374},{"type":52,"tag":135,"props":1900,"children":1901},{"style":164},[1902],{"type":58,"value":1016},{"type":52,"tag":135,"props":1904,"children":1905},{"style":179},[1906],{"type":58,"value":374},{"type":52,"tag":135,"props":1908,"children":1909},{"style":164},[1910],{"type":58,"value":1627},{"type":52,"tag":135,"props":1912,"children":1913},{"style":179},[1914],{"type":58,"value":975},{"type":52,"tag":135,"props":1916,"children":1918},{"class":137,"line":1917},44,[1919,1924,1928,1932,1936,1941],{"type":52,"tag":135,"props":1920,"children":1921},{"style":841},[1922],{"type":58,"value":1923},"        endedReason",{"type":52,"tag":135,"props":1925,"children":1926},{"style":179},[1927],{"type":58,"value":940},{"type":52,"tag":135,"props":1929,"children":1930},{"style":164},[1931],{"type":58,"value":795},{"type":52,"tag":135,"props":1933,"children":1934},{"style":179},[1935],{"type":58,"value":374},{"type":52,"tag":135,"props":1937,"children":1938},{"style":164},[1939],{"type":58,"value":1940},"endedReason",{"type":52,"tag":135,"props":1942,"children":1943},{"style":179},[1944],{"type":58,"value":975},{"type":52,"tag":135,"props":1946,"children":1948},{"class":137,"line":1947},45,[1949,1954,1958,1962,1966,1971],{"type":52,"tag":135,"props":1950,"children":1951},{"style":841},[1952],{"type":58,"value":1953},"        cost",{"type":52,"tag":135,"props":1955,"children":1956},{"style":179},[1957],{"type":58,"value":940},{"type":52,"tag":135,"props":1959,"children":1960},{"style":164},[1961],{"type":58,"value":795},{"type":52,"tag":135,"props":1963,"children":1964},{"style":179},[1965],{"type":58,"value":374},{"type":52,"tag":135,"props":1967,"children":1968},{"style":164},[1969],{"type":58,"value":1970},"cost",{"type":52,"tag":135,"props":1972,"children":1973},{"style":179},[1974],{"type":58,"value":975},{"type":52,"tag":135,"props":1976,"children":1978},{"class":137,"line":1977},46,[1979,1984,1988,1992,1996,2001],{"type":52,"tag":135,"props":1980,"children":1981},{"style":841},[1982],{"type":58,"value":1983},"        analysis",{"type":52,"tag":135,"props":1985,"children":1986},{"style":179},[1987],{"type":58,"value":940},{"type":52,"tag":135,"props":1989,"children":1990},{"style":164},[1991],{"type":58,"value":795},{"type":52,"tag":135,"props":1993,"children":1994},{"style":179},[1995],{"type":58,"value":374},{"type":52,"tag":135,"props":1997,"children":1998},{"style":164},[1999],{"type":58,"value":2000},"analysis",{"type":52,"tag":135,"props":2002,"children":2003},{"style":179},[2004],{"type":58,"value":975},{"type":52,"tag":135,"props":2006,"children":2008},{"class":137,"line":2007},47,[2009,2014,2018,2022,2026,2031],{"type":52,"tag":135,"props":2010,"children":2011},{"style":841},[2012],{"type":58,"value":2013},"        artifact",{"type":52,"tag":135,"props":2015,"children":2016},{"style":179},[2017],{"type":58,"value":940},{"type":52,"tag":135,"props":2019,"children":2020},{"style":164},[2021],{"type":58,"value":795},{"type":52,"tag":135,"props":2023,"children":2024},{"style":179},[2025],{"type":58,"value":374},{"type":52,"tag":135,"props":2027,"children":2028},{"style":164},[2029],{"type":58,"value":2030},"artifact",{"type":52,"tag":135,"props":2032,"children":2033},{"style":179},[2034],{"type":58,"value":975},{"type":52,"tag":135,"props":2036,"children":2038},{"class":137,"line":2037},48,[2039,2043,2047],{"type":52,"tag":135,"props":2040,"children":2041},{"style":179},[2042],{"type":58,"value":1446},{"type":52,"tag":135,"props":2044,"children":2045},{"style":841},[2046],{"type":58,"value":767},{"type":52,"tag":135,"props":2048,"children":2049},{"style":179},[2050],{"type":58,"value":620},{"type":52,"tag":135,"props":2052,"children":2054},{"class":137,"line":2053},49,[2055,2059,2063,2067,2071,2076,2080],{"type":52,"tag":135,"props":2056,"children":2057},{"style":164},[2058],{"type":58,"value":910},{"type":52,"tag":135,"props":2060,"children":2061},{"style":179},[2062],{"type":58,"value":374},{"type":52,"tag":135,"props":2064,"children":2065},{"style":642},[2066],{"type":58,"value":685},{"type":52,"tag":135,"props":2068,"children":2069},{"style":841},[2070],{"type":58,"value":724},{"type":52,"tag":135,"props":2072,"children":2073},{"style":179},[2074],{"type":58,"value":2075},"{}",{"type":52,"tag":135,"props":2077,"children":2078},{"style":841},[2079],{"type":58,"value":767},{"type":52,"tag":135,"props":2081,"children":2082},{"style":179},[2083],{"type":58,"value":620},{"type":52,"tag":135,"props":2085,"children":2087},{"class":137,"line":2086},50,[2088,2092],{"type":52,"tag":135,"props":2089,"children":2090},{"style":589},[2091],{"type":58,"value":1463},{"type":52,"tag":135,"props":2093,"children":2094},{"style":179},[2095],{"type":58,"value":620},{"type":52,"tag":135,"props":2097,"children":2099},{"class":137,"line":2098},51,[2100],{"type":52,"tag":135,"props":2101,"children":2102},{"emptyLinePlaceholder":700},[2103],{"type":58,"value":703},{"type":52,"tag":135,"props":2105,"children":2107},{"class":137,"line":2106},52,[2108,2112,2116,2120,2124],{"type":52,"tag":135,"props":2109,"children":2110},{"style":589},[2111],{"type":58,"value":874},{"type":52,"tag":135,"props":2113,"children":2114},{"style":179},[2115],{"type":58,"value":182},{"type":52,"tag":135,"props":2117,"children":2118},{"style":148},[2119],{"type":58,"value":474},{"type":52,"tag":135,"props":2121,"children":2122},{"style":179},[2123],{"type":58,"value":197},{"type":52,"tag":135,"props":2125,"children":2126},{"style":179},[2127],{"type":58,"value":891},{"type":52,"tag":135,"props":2129,"children":2130},{"class":137,"line":26},[2131,2135,2139,2143,2147,2151,2156,2160,2164,2168,2172,2177,2181],{"type":52,"tag":135,"props":2132,"children":2133},{"style":164},[2134],{"type":58,"value":1843},{"type":52,"tag":135,"props":2136,"children":2137},{"style":179},[2138],{"type":58,"value":374},{"type":52,"tag":135,"props":2140,"children":2141},{"style":642},[2142],{"type":58,"value":1852},{"type":52,"tag":135,"props":2144,"children":2145},{"style":841},[2146],{"type":58,"value":724},{"type":52,"tag":135,"props":2148,"children":2149},{"style":179},[2150],{"type":58,"value":197},{"type":52,"tag":135,"props":2152,"children":2153},{"style":148},[2154],{"type":58,"value":2155},"Call status:",{"type":52,"tag":135,"props":2157,"children":2158},{"style":179},[2159],{"type":58,"value":197},{"type":52,"tag":135,"props":2161,"children":2162},{"style":179},[2163],{"type":58,"value":742},{"type":52,"tag":135,"props":2165,"children":2166},{"style":164},[2167],{"type":58,"value":795},{"type":52,"tag":135,"props":2169,"children":2170},{"style":179},[2171],{"type":58,"value":374},{"type":52,"tag":135,"props":2173,"children":2174},{"style":164},[2175],{"type":58,"value":2176},"status",{"type":52,"tag":135,"props":2178,"children":2179},{"style":841},[2180],{"type":58,"value":767},{"type":52,"tag":135,"props":2182,"children":2183},{"style":179},[2184],{"type":58,"value":620},{"type":52,"tag":135,"props":2186,"children":2188},{"class":137,"line":2187},54,[2189,2193,2197,2201,2205,2209,2213],{"type":52,"tag":135,"props":2190,"children":2191},{"style":164},[2192],{"type":58,"value":910},{"type":52,"tag":135,"props":2194,"children":2195},{"style":179},[2196],{"type":58,"value":374},{"type":52,"tag":135,"props":2198,"children":2199},{"style":642},[2200],{"type":58,"value":685},{"type":52,"tag":135,"props":2202,"children":2203},{"style":841},[2204],{"type":58,"value":724},{"type":52,"tag":135,"props":2206,"children":2207},{"style":179},[2208],{"type":58,"value":2075},{"type":52,"tag":135,"props":2210,"children":2211},{"style":841},[2212],{"type":58,"value":767},{"type":52,"tag":135,"props":2214,"children":2215},{"style":179},[2216],{"type":58,"value":620},{"type":52,"tag":135,"props":2218,"children":2220},{"class":137,"line":2219},55,[2221,2225],{"type":52,"tag":135,"props":2222,"children":2223},{"style":589},[2224],{"type":58,"value":1463},{"type":52,"tag":135,"props":2226,"children":2227},{"style":179},[2228],{"type":58,"value":620},{"type":52,"tag":135,"props":2230,"children":2232},{"class":137,"line":2231},56,[2233],{"type":52,"tag":135,"props":2234,"children":2235},{"emptyLinePlaceholder":700},[2236],{"type":58,"value":703},{"type":52,"tag":135,"props":2238,"children":2240},{"class":137,"line":2239},57,[2241,2245,2249,2253,2257],{"type":52,"tag":135,"props":2242,"children":2243},{"style":589},[2244],{"type":58,"value":874},{"type":52,"tag":135,"props":2246,"children":2247},{"style":179},[2248],{"type":58,"value":182},{"type":52,"tag":135,"props":2250,"children":2251},{"style":148},[2252],{"type":58,"value":496},{"type":52,"tag":135,"props":2254,"children":2255},{"style":179},[2256],{"type":58,"value":197},{"type":52,"tag":135,"props":2258,"children":2259},{"style":179},[2260],{"type":58,"value":891},{"type":52,"tag":135,"props":2262,"children":2264},{"class":137,"line":2263},58,[2265,2269,2273,2277,2281,2285,2290,2294,2298,2302,2307,2312,2317,2321,2325,2329,2333,2338,2342],{"type":52,"tag":135,"props":2266,"children":2267},{"style":164},[2268],{"type":58,"value":1843},{"type":52,"tag":135,"props":2270,"children":2271},{"style":179},[2272],{"type":58,"value":374},{"type":52,"tag":135,"props":2274,"children":2275},{"style":642},[2276],{"type":58,"value":1852},{"type":52,"tag":135,"props":2278,"children":2279},{"style":841},[2280],{"type":58,"value":724},{"type":52,"tag":135,"props":2282,"children":2283},{"style":179},[2284],{"type":58,"value":1064},{"type":52,"tag":135,"props":2286,"children":2287},{"style":148},[2288],{"type":58,"value":2289},"[",{"type":52,"tag":135,"props":2291,"children":2292},{"style":179},[2293],{"type":58,"value":1003},{"type":52,"tag":135,"props":2295,"children":2296},{"style":164},[2297],{"type":58,"value":848},{"type":52,"tag":135,"props":2299,"children":2300},{"style":179},[2301],{"type":58,"value":374},{"type":52,"tag":135,"props":2303,"children":2304},{"style":164},[2305],{"type":58,"value":2306},"role",{"type":52,"tag":135,"props":2308,"children":2309},{"style":179},[2310],{"type":58,"value":2311},"}",{"type":52,"tag":135,"props":2313,"children":2314},{"style":148},[2315],{"type":58,"value":2316},"]: ",{"type":52,"tag":135,"props":2318,"children":2319},{"style":179},[2320],{"type":58,"value":1003},{"type":52,"tag":135,"props":2322,"children":2323},{"style":164},[2324],{"type":58,"value":848},{"type":52,"tag":135,"props":2326,"children":2327},{"style":179},[2328],{"type":58,"value":374},{"type":52,"tag":135,"props":2330,"children":2331},{"style":164},[2332],{"type":58,"value":496},{"type":52,"tag":135,"props":2334,"children":2335},{"style":179},[2336],{"type":58,"value":2337},"}`",{"type":52,"tag":135,"props":2339,"children":2340},{"style":841},[2341],{"type":58,"value":767},{"type":52,"tag":135,"props":2343,"children":2344},{"style":179},[2345],{"type":58,"value":620},{"type":52,"tag":135,"props":2347,"children":2349},{"class":137,"line":2348},59,[2350,2354,2358,2362,2366,2370,2374],{"type":52,"tag":135,"props":2351,"children":2352},{"style":164},[2353],{"type":58,"value":910},{"type":52,"tag":135,"props":2355,"children":2356},{"style":179},[2357],{"type":58,"value":374},{"type":52,"tag":135,"props":2359,"children":2360},{"style":642},[2361],{"type":58,"value":685},{"type":52,"tag":135,"props":2363,"children":2364},{"style":841},[2365],{"type":58,"value":724},{"type":52,"tag":135,"props":2367,"children":2368},{"style":179},[2369],{"type":58,"value":2075},{"type":52,"tag":135,"props":2371,"children":2372},{"style":841},[2373],{"type":58,"value":767},{"type":52,"tag":135,"props":2375,"children":2376},{"style":179},[2377],{"type":58,"value":620},{"type":52,"tag":135,"props":2379,"children":2381},{"class":137,"line":2380},60,[2382,2386],{"type":52,"tag":135,"props":2383,"children":2384},{"style":589},[2385],{"type":58,"value":1463},{"type":52,"tag":135,"props":2387,"children":2388},{"style":179},[2389],{"type":58,"value":620},{"type":52,"tag":135,"props":2391,"children":2393},{"class":137,"line":2392},61,[2394],{"type":52,"tag":135,"props":2395,"children":2396},{"emptyLinePlaceholder":700},[2397],{"type":58,"value":703},{"type":52,"tag":135,"props":2399,"children":2401},{"class":137,"line":2400},62,[2402,2407],{"type":52,"tag":135,"props":2403,"children":2404},{"style":589},[2405],{"type":58,"value":2406},"    default",{"type":52,"tag":135,"props":2408,"children":2409},{"style":179},[2410],{"type":58,"value":891},{"type":52,"tag":135,"props":2412,"children":2414},{"class":137,"line":2413},63,[2415,2419,2423,2427,2431,2435,2439],{"type":52,"tag":135,"props":2416,"children":2417},{"style":164},[2418],{"type":58,"value":910},{"type":52,"tag":135,"props":2420,"children":2421},{"style":179},[2422],{"type":58,"value":374},{"type":52,"tag":135,"props":2424,"children":2425},{"style":642},[2426],{"type":58,"value":685},{"type":52,"tag":135,"props":2428,"children":2429},{"style":841},[2430],{"type":58,"value":724},{"type":52,"tag":135,"props":2432,"children":2433},{"style":179},[2434],{"type":58,"value":2075},{"type":52,"tag":135,"props":2436,"children":2437},{"style":841},[2438],{"type":58,"value":767},{"type":52,"tag":135,"props":2440,"children":2441},{"style":179},[2442],{"type":58,"value":620},{"type":52,"tag":135,"props":2444,"children":2446},{"class":137,"line":2445},64,[2447],{"type":52,"tag":135,"props":2448,"children":2449},{"style":179},[2450],{"type":58,"value":2451},"  }\n",{"type":52,"tag":135,"props":2453,"children":2455},{"class":137,"line":2454},65,[2456,2460,2464],{"type":52,"tag":135,"props":2457,"children":2458},{"style":179},[2459],{"type":58,"value":2311},{"type":52,"tag":135,"props":2461,"children":2462},{"style":164},[2463],{"type":58,"value":767},{"type":52,"tag":135,"props":2465,"children":2466},{"style":179},[2467],{"type":58,"value":620},{"type":52,"tag":135,"props":2469,"children":2471},{"class":137,"line":2470},66,[2472],{"type":52,"tag":135,"props":2473,"children":2474},{"emptyLinePlaceholder":700},[2475],{"type":58,"value":703},{"type":52,"tag":135,"props":2477,"children":2479},{"class":137,"line":2478},67,[2480,2485,2489,2493,2497,2501,2506,2510,2515,2519,2523,2528,2532],{"type":52,"tag":135,"props":2481,"children":2482},{"style":626},[2483],{"type":58,"value":2484},"function",{"type":52,"tag":135,"props":2486,"children":2487},{"style":642},[2488],{"type":58,"value":1649},{"type":52,"tag":135,"props":2490,"children":2491},{"style":179},[2492],{"type":58,"value":724},{"type":52,"tag":135,"props":2494,"children":2495},{"style":750},[2496],{"type":58,"value":1672},{"type":52,"tag":135,"props":2498,"children":2499},{"style":179},[2500],{"type":58,"value":940},{"type":52,"tag":135,"props":2502,"children":2503},{"style":142},[2504],{"type":58,"value":2505}," string",{"type":52,"tag":135,"props":2507,"children":2508},{"style":179},[2509],{"type":58,"value":742},{"type":52,"tag":135,"props":2511,"children":2512},{"style":750},[2513],{"type":58,"value":2514}," args",{"type":52,"tag":135,"props":2516,"children":2517},{"style":179},[2518],{"type":58,"value":940},{"type":52,"tag":135,"props":2520,"children":2521},{"style":142},[2522],{"type":58,"value":1584},{"type":52,"tag":135,"props":2524,"children":2525},{"style":179},[2526],{"type":58,"value":2527},"):",{"type":52,"tag":135,"props":2529,"children":2530},{"style":142},[2531],{"type":58,"value":2505},{"type":52,"tag":135,"props":2533,"children":2534},{"style":179},[2535],{"type":58,"value":777},{"type":52,"tag":135,"props":2537,"children":2539},{"class":137,"line":2538},68,[2540],{"type":52,"tag":135,"props":2541,"children":2542},{"style":898},[2543],{"type":58,"value":2544},"  \u002F\u002F Implement your tool logic here\n",{"type":52,"tag":135,"props":2546,"children":2548},{"class":137,"line":2547},69,[2549,2554,2558,2563,2567,2571,2575],{"type":52,"tag":135,"props":2550,"children":2551},{"style":589},[2552],{"type":58,"value":2553},"  return",{"type":52,"tag":135,"props":2555,"children":2556},{"style":179},[2557],{"type":58,"value":993},{"type":52,"tag":135,"props":2559,"children":2560},{"style":148},[2561],{"type":58,"value":2562},"Result for ",{"type":52,"tag":135,"props":2564,"children":2565},{"style":179},[2566],{"type":58,"value":1003},{"type":52,"tag":135,"props":2568,"children":2569},{"style":164},[2570],{"type":58,"value":1672},{"type":52,"tag":135,"props":2572,"children":2573},{"style":179},[2574],{"type":58,"value":2337},{"type":52,"tag":135,"props":2576,"children":2577},{"style":179},[2578],{"type":58,"value":620},{"type":52,"tag":135,"props":2580,"children":2582},{"class":137,"line":2581},70,[2583],{"type":52,"tag":135,"props":2584,"children":2585},{"style":179},[2586],{"type":58,"value":2587},"}\n",{"type":52,"tag":135,"props":2589,"children":2591},{"class":137,"line":2590},71,[2592],{"type":52,"tag":135,"props":2593,"children":2594},{"emptyLinePlaceholder":700},[2595],{"type":58,"value":703},{"type":52,"tag":135,"props":2597,"children":2599},{"class":137,"line":2598},72,[2600,2604,2608,2613,2617,2622,2626,2631,2635,2640,2644,2648,2652,2656,2661,2665,2669],{"type":52,"tag":135,"props":2601,"children":2602},{"style":164},[2603],{"type":58,"value":662},{"type":52,"tag":135,"props":2605,"children":2606},{"style":179},[2607],{"type":58,"value":374},{"type":52,"tag":135,"props":2609,"children":2610},{"style":642},[2611],{"type":58,"value":2612},"listen",{"type":52,"tag":135,"props":2614,"children":2615},{"style":164},[2616],{"type":58,"value":724},{"type":52,"tag":135,"props":2618,"children":2619},{"style":1327},[2620],{"type":58,"value":2621},"3000",{"type":52,"tag":135,"props":2623,"children":2624},{"style":179},[2625],{"type":58,"value":742},{"type":52,"tag":135,"props":2627,"children":2628},{"style":179},[2629],{"type":58,"value":2630}," ()",{"type":52,"tag":135,"props":2632,"children":2633},{"style":626},[2634],{"type":58,"value":772},{"type":52,"tag":135,"props":2636,"children":2637},{"style":164},[2638],{"type":58,"value":2639}," console",{"type":52,"tag":135,"props":2641,"children":2642},{"style":179},[2643],{"type":58,"value":374},{"type":52,"tag":135,"props":2645,"children":2646},{"style":642},[2647],{"type":58,"value":1852},{"type":52,"tag":135,"props":2649,"children":2650},{"style":164},[2651],{"type":58,"value":724},{"type":52,"tag":135,"props":2653,"children":2654},{"style":179},[2655],{"type":58,"value":197},{"type":52,"tag":135,"props":2657,"children":2658},{"style":148},[2659],{"type":58,"value":2660},"Webhook server running on port 3000",{"type":52,"tag":135,"props":2662,"children":2663},{"style":179},[2664],{"type":58,"value":197},{"type":52,"tag":135,"props":2666,"children":2667},{"style":164},[2668],{"type":58,"value":1736},{"type":52,"tag":135,"props":2670,"children":2671},{"style":179},[2672],{"type":58,"value":620},{"type":52,"tag":99,"props":2674,"children":2676},{"id":2675},"webhook-server-example-python-flask",[2677],{"type":58,"value":2678},"Webhook Server Example (Python \u002F Flask)",{"type":52,"tag":124,"props":2680,"children":2684},{"className":2681,"code":2682,"language":2683,"meta":129,"style":129},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from flask import Flask, request, jsonify\n\napp = Flask(__name__)\n\n@app.route(\"\u002Fvapi\u002Fwebhook\", methods=[\"POST\"])\ndef vapi_webhook():\n    data = request.json\n    message = data.get(\"message\", {})\n    msg_type = message.get(\"type\")\n\n    if msg_type == \"assistant-request\":\n        return jsonify({\n            \"assistant\": {\n                \"name\": \"Dynamic Assistant\",\n                \"firstMessage\": \"Hello! How can I help?\",\n                \"model\": {\n                    \"provider\": \"openai\",\n                    \"model\": \"gpt-4.1\",\n                    \"messages\": [\n                        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"}\n                    ],\n                },\n                \"voice\": {\"provider\": \"vapi\", \"voiceId\": \"Elliot\", \"version\": 2},\n                \"transcriber\": {\"provider\": \"deepgram\", \"model\": \"nova-3\", \"language\": \"en\"},\n            }\n        })\n\n    elif msg_type == \"tool-calls\":\n        results = []\n        for tool_call in message.get(\"toolCallList\", []):\n            results.append({\n                \"toolCallId\": tool_call[\"id\"],\n                \"result\": f\"Handled {tool_call['name']}\",\n            })\n        return jsonify({\"results\": results})\n\n    elif msg_type == \"end-of-call-report\":\n        print(f\"Call ended: {message['call']['id']}\")\n        print(f\"Summary: {message.get('analysis', {}).get('summary')}\")\n\n    return jsonify({})\n\nif __name__ == \"__main__\":\n    app.run(port=3000)\n","python",[2685],{"type":52,"tag":82,"props":2686,"children":2687},{"__ignoreMap":129},[2688,2696,2703,2711,2718,2726,2734,2742,2750,2758,2765,2773,2781,2789,2797,2805,2813,2821,2829,2837,2845,2853,2861,2869,2877,2885,2893,2900,2908,2916,2924,2932,2940,2948,2956,2964,2971,2979,2987,2995,3002,3010,3017,3025],{"type":52,"tag":135,"props":2689,"children":2690},{"class":137,"line":138},[2691],{"type":52,"tag":135,"props":2692,"children":2693},{},[2694],{"type":58,"value":2695},"from flask import Flask, request, jsonify\n",{"type":52,"tag":135,"props":2697,"children":2698},{"class":137,"line":170},[2699],{"type":52,"tag":135,"props":2700,"children":2701},{"emptyLinePlaceholder":700},[2702],{"type":58,"value":703},{"type":52,"tag":135,"props":2704,"children":2705},{"class":137,"line":204},[2706],{"type":52,"tag":135,"props":2707,"children":2708},{},[2709],{"type":58,"value":2710},"app = Flask(__name__)\n",{"type":52,"tag":135,"props":2712,"children":2713},{"class":137,"line":229},[2714],{"type":52,"tag":135,"props":2715,"children":2716},{"emptyLinePlaceholder":700},[2717],{"type":58,"value":703},{"type":52,"tag":135,"props":2719,"children":2720},{"class":137,"line":248},[2721],{"type":52,"tag":135,"props":2722,"children":2723},{},[2724],{"type":58,"value":2725},"@app.route(\"\u002Fvapi\u002Fwebhook\", methods=[\"POST\"])\n",{"type":52,"tag":135,"props":2727,"children":2728},{"class":137,"line":257},[2729],{"type":52,"tag":135,"props":2730,"children":2731},{},[2732],{"type":58,"value":2733},"def vapi_webhook():\n",{"type":52,"tag":135,"props":2735,"children":2736},{"class":137,"line":30},[2737],{"type":52,"tag":135,"props":2738,"children":2739},{},[2740],{"type":58,"value":2741},"    data = request.json\n",{"type":52,"tag":135,"props":2743,"children":2744},{"class":137,"line":274},[2745],{"type":52,"tag":135,"props":2746,"children":2747},{},[2748],{"type":58,"value":2749},"    message = data.get(\"message\", {})\n",{"type":52,"tag":135,"props":2751,"children":2752},{"class":137,"line":283},[2753],{"type":52,"tag":135,"props":2754,"children":2755},{},[2756],{"type":58,"value":2757},"    msg_type = message.get(\"type\")\n",{"type":52,"tag":135,"props":2759,"children":2760},{"class":137,"line":894},[2761],{"type":52,"tag":135,"props":2762,"children":2763},{"emptyLinePlaceholder":700},[2764],{"type":58,"value":703},{"type":52,"tag":135,"props":2766,"children":2767},{"class":137,"line":904},[2768],{"type":52,"tag":135,"props":2769,"children":2770},{},[2771],{"type":58,"value":2772},"    if msg_type == \"assistant-request\":\n",{"type":52,"tag":135,"props":2774,"children":2775},{"class":137,"line":929},[2776],{"type":52,"tag":135,"props":2777,"children":2778},{},[2779],{"type":58,"value":2780},"        return jsonify({\n",{"type":52,"tag":135,"props":2782,"children":2783},{"class":137,"line":947},[2784],{"type":52,"tag":135,"props":2785,"children":2786},{},[2787],{"type":58,"value":2788},"            \"assistant\": {\n",{"type":52,"tag":135,"props":2790,"children":2791},{"class":137,"line":978},[2792],{"type":52,"tag":135,"props":2793,"children":2794},{},[2795],{"type":58,"value":2796},"                \"name\": \"Dynamic Assistant\",\n",{"type":52,"tag":135,"props":2798,"children":2799},{"class":137,"line":1071},[2800],{"type":52,"tag":135,"props":2801,"children":2802},{},[2803],{"type":58,"value":2804},"                \"firstMessage\": \"Hello! How can I help?\",\n",{"type":52,"tag":135,"props":2806,"children":2807},{"class":137,"line":1088},[2808],{"type":52,"tag":135,"props":2809,"children":2810},{},[2811],{"type":58,"value":2812},"                \"model\": {\n",{"type":52,"tag":135,"props":2814,"children":2815},{"class":137,"line":1118},[2816],{"type":52,"tag":135,"props":2817,"children":2818},{},[2819],{"type":58,"value":2820},"                    \"provider\": \"openai\",\n",{"type":52,"tag":135,"props":2822,"children":2823},{"class":137,"line":1148},[2824],{"type":52,"tag":135,"props":2825,"children":2826},{},[2827],{"type":58,"value":2828},"                    \"model\": \"gpt-4.1\",\n",{"type":52,"tag":135,"props":2830,"children":2831},{"class":137,"line":1166},[2832],{"type":52,"tag":135,"props":2833,"children":2834},{},[2835],{"type":58,"value":2836},"                    \"messages\": [\n",{"type":52,"tag":135,"props":2838,"children":2839},{"class":137,"line":1228},[2840],{"type":52,"tag":135,"props":2841,"children":2842},{},[2843],{"type":58,"value":2844},"                        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"}\n",{"type":52,"tag":135,"props":2846,"children":2847},{"class":137,"line":1241},[2848],{"type":52,"tag":135,"props":2849,"children":2850},{},[2851],{"type":58,"value":2852},"                    ],\n",{"type":52,"tag":135,"props":2854,"children":2855},{"class":137,"line":1250},[2856],{"type":52,"tag":135,"props":2857,"children":2858},{},[2859],{"type":58,"value":2860},"                },\n",{"type":52,"tag":135,"props":2862,"children":2863},{"class":137,"line":1337},[2864],{"type":52,"tag":135,"props":2865,"children":2866},{},[2867],{"type":58,"value":2868},"                \"voice\": {\"provider\": \"vapi\", \"voiceId\": \"Elliot\", \"version\": 2},\n",{"type":52,"tag":135,"props":2870,"children":2871},{"class":137,"line":1431},[2872],{"type":52,"tag":135,"props":2873,"children":2874},{},[2875],{"type":58,"value":2876},"                \"transcriber\": {\"provider\": \"deepgram\", \"model\": \"nova-3\", \"language\": \"en\"},\n",{"type":52,"tag":135,"props":2878,"children":2879},{"class":137,"line":1440},[2880],{"type":52,"tag":135,"props":2881,"children":2882},{},[2883],{"type":58,"value":2884},"            }\n",{"type":52,"tag":135,"props":2886,"children":2887},{"class":137,"line":1457},[2888],{"type":52,"tag":135,"props":2889,"children":2890},{},[2891],{"type":58,"value":2892},"        })\n",{"type":52,"tag":135,"props":2894,"children":2895},{"class":137,"line":1470},[2896],{"type":52,"tag":135,"props":2897,"children":2898},{"emptyLinePlaceholder":700},[2899],{"type":58,"value":703},{"type":52,"tag":135,"props":2901,"children":2902},{"class":137,"line":1478},[2903],{"type":52,"tag":135,"props":2904,"children":2905},{},[2906],{"type":58,"value":2907},"    elif msg_type == \"tool-calls\":\n",{"type":52,"tag":135,"props":2909,"children":2910},{"class":137,"line":1502},[2911],{"type":52,"tag":135,"props":2912,"children":2913},{},[2914],{"type":58,"value":2915},"        results = []\n",{"type":52,"tag":135,"props":2917,"children":2918},{"class":137,"line":1511},[2919],{"type":52,"tag":135,"props":2920,"children":2921},{},[2922],{"type":58,"value":2923},"        for tool_call in message.get(\"toolCallList\", []):\n",{"type":52,"tag":135,"props":2925,"children":2926},{"class":137,"line":1603},[2927],{"type":52,"tag":135,"props":2928,"children":2929},{},[2930],{"type":58,"value":2931},"            results.append({\n",{"type":52,"tag":135,"props":2933,"children":2934},{"class":137,"line":1634},[2935],{"type":52,"tag":135,"props":2936,"children":2937},{},[2938],{"type":58,"value":2939},"                \"toolCallId\": tool_call[\"id\"],\n",{"type":52,"tag":135,"props":2941,"children":2942},{"class":137,"line":1657},[2943],{"type":52,"tag":135,"props":2944,"children":2945},{},[2946],{"type":58,"value":2947},"                \"result\": f\"Handled {tool_call['name']}\",\n",{"type":52,"tag":135,"props":2949,"children":2950},{"class":137,"line":1679},[2951],{"type":52,"tag":135,"props":2952,"children":2953},{},[2954],{"type":58,"value":2955},"            })\n",{"type":52,"tag":135,"props":2957,"children":2958},{"class":137,"line":1713},[2959],{"type":52,"tag":135,"props":2960,"children":2961},{},[2962],{"type":58,"value":2963},"        return jsonify({\"results\": results})\n",{"type":52,"tag":135,"props":2965,"children":2966},{"class":137,"line":1726},[2967],{"type":52,"tag":135,"props":2968,"children":2969},{"emptyLinePlaceholder":700},[2970],{"type":58,"value":703},{"type":52,"tag":135,"props":2972,"children":2973},{"class":137,"line":1743},[2974],{"type":52,"tag":135,"props":2975,"children":2976},{},[2977],{"type":58,"value":2978},"    elif msg_type == \"end-of-call-report\":\n",{"type":52,"tag":135,"props":2980,"children":2981},{"class":137,"line":1784},[2982],{"type":52,"tag":135,"props":2983,"children":2984},{},[2985],{"type":58,"value":2986},"        print(f\"Call ended: {message['call']['id']}\")\n",{"type":52,"tag":135,"props":2988,"children":2989},{"class":137,"line":1796},[2990],{"type":52,"tag":135,"props":2991,"children":2992},{},[2993],{"type":58,"value":2994},"        print(f\"Summary: {message.get('analysis', {}).get('summary')}\")\n",{"type":52,"tag":135,"props":2996,"children":2997},{"class":137,"line":1804},[2998],{"type":52,"tag":135,"props":2999,"children":3000},{"emptyLinePlaceholder":700},[3001],{"type":58,"value":703},{"type":52,"tag":135,"props":3003,"children":3004},{"class":137,"line":1828},[3005],{"type":52,"tag":135,"props":3006,"children":3007},{},[3008],{"type":58,"value":3009},"    return jsonify({})\n",{"type":52,"tag":135,"props":3011,"children":3012},{"class":137,"line":1837},[3013],{"type":52,"tag":135,"props":3014,"children":3015},{"emptyLinePlaceholder":700},[3016],{"type":58,"value":703},{"type":52,"tag":135,"props":3018,"children":3019},{"class":137,"line":1880},[3020],{"type":52,"tag":135,"props":3021,"children":3022},{},[3023],{"type":58,"value":3024},"if __name__ == \"__main__\":\n",{"type":52,"tag":135,"props":3026,"children":3027},{"class":137,"line":1917},[3028],{"type":52,"tag":135,"props":3029,"children":3030},{},[3031],{"type":58,"value":3032},"    app.run(port=3000)\n",{"type":52,"tag":99,"props":3034,"children":3036},{"id":3035},"webhook-authentication",[3037],{"type":58,"value":3038},"Webhook Authentication",{"type":52,"tag":61,"props":3040,"children":3041},{},[3042,3044,3050,3052,3058],{"type":58,"value":3043},"Use a Vapi Custom Credential and place its ID in ",{"type":52,"tag":82,"props":3045,"children":3047},{"className":3046},[],[3048],{"type":58,"value":3049},"server.credentialId",{"type":58,"value":3051},". Vapi supports Bearer Token, OAuth 2.0 client credentials, and HMAC credentials. Verify requests according to the credential you configured; HMAC header names, algorithms, timestamps, and payload formats are configurable, so do not assume a fixed ",{"type":52,"tag":82,"props":3053,"children":3055},{"className":3054},[],[3056],{"type":58,"value":3057},"x-vapi-signature",{"type":58,"value":3059}," format.",{"type":52,"tag":61,"props":3061,"children":3062},{},[3063,3065,3071],{"type":58,"value":3064},"For a bearer credential, compare the incoming ",{"type":52,"tag":82,"props":3066,"children":3068},{"className":3067},[],[3069],{"type":58,"value":3070},"Authorization: Bearer \u003Ctoken>",{"type":58,"value":3072}," value with the token stored securely by your server. Never put the secret itself in an assistant or phone-number payload.",{"type":52,"tag":99,"props":3074,"children":3076},{"id":3075},"local-development",[3077],{"type":58,"value":3078},"Local Development",{"type":52,"tag":61,"props":3080,"children":3081},{},[3082],{"type":58,"value":3083},"Use the Vapi CLI with a public tunnel. The CLI forwards from port 4242 to your app, but it does not create the public URL itself:",{"type":52,"tag":124,"props":3085,"children":3087},{"className":126,"code":3086,"language":128,"meta":129,"style":129},"# Install the CLI\ncurl -sSL https:\u002F\u002Fvapi.ai\u002Finstall.sh | bash\n\n# Terminal 1: expose the CLI listener\nngrok http 4242\n\n# Terminal 2: forward events from the CLI to your app\nvapi listen --forward-to localhost:3000\u002Fvapi\u002Fwebhook\n",[3088],{"type":52,"tag":82,"props":3089,"children":3090},{"__ignoreMap":129},[3091,3099,3126,3133,3141,3159,3166,3174],{"type":52,"tag":135,"props":3092,"children":3093},{"class":137,"line":138},[3094],{"type":52,"tag":135,"props":3095,"children":3096},{"style":898},[3097],{"type":58,"value":3098},"# Install the CLI\n",{"type":52,"tag":135,"props":3100,"children":3101},{"class":137,"line":170},[3102,3106,3111,3116,3121],{"type":52,"tag":135,"props":3103,"children":3104},{"style":142},[3105],{"type":58,"value":145},{"type":52,"tag":135,"props":3107,"children":3108},{"style":148},[3109],{"type":58,"value":3110}," -sSL",{"type":52,"tag":135,"props":3112,"children":3113},{"style":148},[3114],{"type":58,"value":3115}," https:\u002F\u002Fvapi.ai\u002Finstall.sh",{"type":52,"tag":135,"props":3117,"children":3118},{"style":179},[3119],{"type":58,"value":3120}," |",{"type":52,"tag":135,"props":3122,"children":3123},{"style":142},[3124],{"type":58,"value":3125}," bash\n",{"type":52,"tag":135,"props":3127,"children":3128},{"class":137,"line":204},[3129],{"type":52,"tag":135,"props":3130,"children":3131},{"emptyLinePlaceholder":700},[3132],{"type":58,"value":703},{"type":52,"tag":135,"props":3134,"children":3135},{"class":137,"line":229},[3136],{"type":52,"tag":135,"props":3137,"children":3138},{"style":898},[3139],{"type":58,"value":3140},"# Terminal 1: expose the CLI listener\n",{"type":52,"tag":135,"props":3142,"children":3143},{"class":137,"line":248},[3144,3149,3154],{"type":52,"tag":135,"props":3145,"children":3146},{"style":142},[3147],{"type":58,"value":3148},"ngrok",{"type":52,"tag":135,"props":3150,"children":3151},{"style":148},[3152],{"type":58,"value":3153}," http",{"type":52,"tag":135,"props":3155,"children":3156},{"style":1327},[3157],{"type":58,"value":3158}," 4242\n",{"type":52,"tag":135,"props":3160,"children":3161},{"class":137,"line":257},[3162],{"type":52,"tag":135,"props":3163,"children":3164},{"emptyLinePlaceholder":700},[3165],{"type":58,"value":703},{"type":52,"tag":135,"props":3167,"children":3168},{"class":137,"line":30},[3169],{"type":52,"tag":135,"props":3170,"children":3171},{"style":898},[3172],{"type":58,"value":3173},"# Terminal 2: forward events from the CLI to your app\n",{"type":52,"tag":135,"props":3175,"children":3176},{"class":137,"line":274},[3177,3181,3186,3191],{"type":52,"tag":135,"props":3178,"children":3179},{"style":142},[3180],{"type":58,"value":8},{"type":52,"tag":135,"props":3182,"children":3183},{"style":148},[3184],{"type":58,"value":3185}," listen",{"type":52,"tag":135,"props":3187,"children":3188},{"style":148},[3189],{"type":58,"value":3190}," --forward-to",{"type":52,"tag":135,"props":3192,"children":3193},{"style":148},[3194],{"type":58,"value":3195}," localhost:3000\u002Fvapi\u002Fwebhook\n",{"type":52,"tag":61,"props":3197,"children":3198},{},[3199],{"type":58,"value":3200},"Set the Vapi server URL to the public ngrok URL. To skip the CLI and tunnel directly to the Express or Flask server instead:",{"type":52,"tag":124,"props":3202,"children":3204},{"className":126,"code":3203,"language":128,"meta":129,"style":129},"ngrok http 3000\n# Copy the ngrok URL and set it as your server URL\n",[3205],{"type":52,"tag":82,"props":3206,"children":3207},{"__ignoreMap":129},[3208,3224],{"type":52,"tag":135,"props":3209,"children":3210},{"class":137,"line":138},[3211,3215,3219],{"type":52,"tag":135,"props":3212,"children":3213},{"style":142},[3214],{"type":58,"value":3148},{"type":52,"tag":135,"props":3216,"children":3217},{"style":148},[3218],{"type":58,"value":3153},{"type":52,"tag":135,"props":3220,"children":3221},{"style":1327},[3222],{"type":58,"value":3223}," 3000\n",{"type":52,"tag":135,"props":3225,"children":3226},{"class":137,"line":170},[3227],{"type":52,"tag":135,"props":3228,"children":3229},{"style":898},[3230],{"type":58,"value":3231},"# Copy the ngrok URL and set it as your server URL\n",{"type":52,"tag":99,"props":3233,"children":3235},{"id":3234},"end-of-call-report-fields",[3236],{"type":58,"value":3237},"End-of-Call Report Fields",{"type":52,"tag":61,"props":3239,"children":3240},{},[3241,3243,3248],{"type":58,"value":3242},"The ",{"type":52,"tag":82,"props":3244,"children":3246},{"className":3245},[],[3247],{"type":58,"value":517},{"type":58,"value":3249}," event includes:",{"type":52,"tag":387,"props":3251,"children":3252},{},[3253,3268],{"type":52,"tag":391,"props":3254,"children":3255},{},[3256],{"type":52,"tag":395,"props":3257,"children":3258},{},[3259,3264],{"type":52,"tag":399,"props":3260,"children":3261},{},[3262],{"type":58,"value":3263},"Field",{"type":52,"tag":399,"props":3265,"children":3266},{},[3267],{"type":58,"value":408},{"type":52,"tag":415,"props":3269,"children":3270},{},[3271,3287,3303,3319,3335,3351],{"type":52,"tag":395,"props":3272,"children":3273},{},[3274,3282],{"type":52,"tag":422,"props":3275,"children":3276},{},[3277],{"type":52,"tag":82,"props":3278,"children":3280},{"className":3279},[],[3281],{"type":58,"value":1016},{"type":52,"tag":422,"props":3283,"children":3284},{},[3285],{"type":58,"value":3286},"Full call object with metadata",{"type":52,"tag":395,"props":3288,"children":3289},{},[3290,3298],{"type":52,"tag":422,"props":3291,"children":3292},{},[3293],{"type":52,"tag":82,"props":3294,"children":3296},{"className":3295},[],[3297],{"type":58,"value":1940},{"type":52,"tag":422,"props":3299,"children":3300},{},[3301],{"type":58,"value":3302},"Why the call ended",{"type":52,"tag":395,"props":3304,"children":3305},{},[3306,3314],{"type":52,"tag":422,"props":3307,"children":3308},{},[3309],{"type":52,"tag":82,"props":3310,"children":3312},{"className":3311},[],[3313],{"type":58,"value":2030},{"type":52,"tag":422,"props":3315,"children":3316},{},[3317],{"type":58,"value":3318},"Recording, transcript, messages, and other enabled artifacts",{"type":52,"tag":395,"props":3320,"children":3321},{},[3322,3330],{"type":52,"tag":422,"props":3323,"children":3324},{},[3325],{"type":52,"tag":82,"props":3326,"children":3328},{"className":3327},[],[3329],{"type":58,"value":2000},{"type":52,"tag":422,"props":3331,"children":3332},{},[3333],{"type":58,"value":3334},"Configured summaries, structured data, and success evaluation",{"type":52,"tag":395,"props":3336,"children":3337},{},[3338,3346],{"type":52,"tag":422,"props":3339,"children":3340},{},[3341],{"type":52,"tag":82,"props":3342,"children":3344},{"className":3343},[],[3345],{"type":58,"value":1970},{"type":52,"tag":422,"props":3347,"children":3348},{},[3349],{"type":58,"value":3350},"Total call cost",{"type":52,"tag":395,"props":3352,"children":3353},{},[3354,3371],{"type":52,"tag":422,"props":3355,"children":3356},{},[3357,3363,3365],{"type":52,"tag":82,"props":3358,"children":3360},{"className":3359},[],[3361],{"type":58,"value":3362},"startedAt",{"type":58,"value":3364}," \u002F ",{"type":52,"tag":82,"props":3366,"children":3368},{"className":3367},[],[3369],{"type":58,"value":3370},"endedAt",{"type":52,"tag":422,"props":3372,"children":3373},{},[3374],{"type":58,"value":3375},"Call timing, when included",{"type":52,"tag":99,"props":3377,"children":3379},{"id":3378},"references",[3380],{"type":58,"value":3381},"References",{"type":52,"tag":3383,"props":3384,"children":3385},"ul",{},[3386,3399,3412,3424],{"type":52,"tag":3387,"props":3388,"children":3389},"li",{},[3390,3397],{"type":52,"tag":3391,"props":3392,"children":3394},"a",{"href":3393},"references\u002Fwebhook-events.md",[3395],{"type":58,"value":3396},"Common Server URL Events",{"type":58,"value":3398}," — Common event payloads and responses",{"type":52,"tag":3387,"props":3400,"children":3401},{},[3402,3410],{"type":52,"tag":3391,"props":3403,"children":3407},{"href":3404,"rel":3405},"https:\u002F\u002Fdocs.vapi.ai\u002Fserver-url\u002Fsetting-server-urls",[3406],"nofollow",[3408],{"type":58,"value":3409},"Setting Server URLs",{"type":58,"value":3411}," — Placement and priority",{"type":52,"tag":3387,"props":3413,"children":3414},{},[3415,3422],{"type":52,"tag":3391,"props":3416,"children":3419},{"href":3417,"rel":3418},"https:\u002F\u002Fdocs.vapi.ai\u002Fserver-url\u002Fserver-authentication",[3406],[3420],{"type":58,"value":3421},"Server Authentication",{"type":58,"value":3423}," — Custom Credentials",{"type":52,"tag":3387,"props":3425,"children":3426},{},[3427,3433],{"type":52,"tag":3391,"props":3428,"children":3431},{"href":3429,"rel":3430},"https:\u002F\u002Fdocs.vapi.ai\u002Fserver-url\u002Fdeveloping-locally",[3406],[3432],{"type":58,"value":3078},{"type":58,"value":3434}," — Testing webhooks locally",{"type":52,"tag":99,"props":3436,"children":3438},{"id":3437},"additional-resources",[3439],{"type":58,"value":3440},"Additional Resources",{"type":52,"tag":61,"props":3442,"children":3443},{},[3444,3446,3451],{"type":58,"value":3445},"Vapi provides a ",{"type":52,"tag":74,"props":3447,"children":3448},{},[3449],{"type":58,"value":3450},"documentation MCP server",{"type":58,"value":3452}," that gives compatible AI agents access to the Vapi knowledge base. Use its documentation search for advanced configuration, troubleshooting, SDK details, and anything beyond this skill.",{"type":52,"tag":61,"props":3454,"children":3455},{},[3456],{"type":58,"value":3457},"To add the Vapi documentation MCP server manually in Claude Code, run:",{"type":52,"tag":124,"props":3459,"children":3461},{"className":126,"code":3460,"language":128,"meta":129,"style":129},"claude mcp add vapi-docs -- npx -y mcp-remote https:\u002F\u002Fdocs.vapi.ai\u002F_mcp\u002Fserver\n",[3462],{"type":52,"tag":82,"props":3463,"children":3464},{"__ignoreMap":129},[3465],{"type":52,"tag":135,"props":3466,"children":3467},{"class":137,"line":138},[3468,3473,3478,3483,3488,3493,3498,3503,3508],{"type":52,"tag":135,"props":3469,"children":3470},{"style":142},[3471],{"type":58,"value":3472},"claude",{"type":52,"tag":135,"props":3474,"children":3475},{"style":148},[3476],{"type":58,"value":3477}," mcp",{"type":52,"tag":135,"props":3479,"children":3480},{"style":148},[3481],{"type":58,"value":3482}," add",{"type":52,"tag":135,"props":3484,"children":3485},{"style":148},[3486],{"type":58,"value":3487}," vapi-docs",{"type":52,"tag":135,"props":3489,"children":3490},{"style":148},[3491],{"type":58,"value":3492}," --",{"type":52,"tag":135,"props":3494,"children":3495},{"style":148},[3496],{"type":58,"value":3497}," npx",{"type":52,"tag":135,"props":3499,"children":3500},{"style":148},[3501],{"type":58,"value":3502}," -y",{"type":52,"tag":135,"props":3504,"children":3505},{"style":148},[3506],{"type":58,"value":3507}," mcp-remote",{"type":52,"tag":135,"props":3509,"children":3510},{"style":148},[3511],{"type":58,"value":3512}," https:\u002F\u002Fdocs.vapi.ai\u002F_mcp\u002Fserver\n",{"type":52,"tag":61,"props":3514,"children":3515},{},[3516,3518,3525],{"type":58,"value":3517},"See the ",{"type":52,"tag":3391,"props":3519,"children":3522},{"href":3520,"rel":3521},"https:\u002F\u002Fdocs.vapi.ai\u002Fcli\u002Fmcp",[3406],[3523],{"type":58,"value":3524},"Vapi MCP integration guide",{"type":58,"value":3526}," for setup instructions across supported agents.",{"type":52,"tag":3528,"props":3529,"children":3530},"style",{},[3531],{"type":58,"value":3532},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3534,"total":894},[3535,3553,3563,3574,3588,3600,3613,3626,3633,3647],{"slug":8,"name":8,"fn":3536,"description":3537,"org":3538,"tags":3539,"stars":2231,"repoUrl":3551,"updatedAt":3552},"build AI voice assistants with Vapi","Build AI voice assistants and phone agents with Vapi. Use this skill when users want to create voice agents, phone bots, IVR systems, outbound calling campaigns, or any voice-based AI application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3540,3541,3542,3545,3548],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":3543,"slug":3544,"type":16},"Speech","speech",{"name":3546,"slug":3547,"type":16},"Text-to-Speech","text-to-speech",{"name":3549,"slug":3550,"type":16},"Voice","voice","https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fmcp-server","2026-07-17T06:06:13.535114",{"slug":3554,"name":3554,"fn":3555,"description":3556,"org":3557,"tags":3558,"stars":26,"repoUrl":27,"updatedAt":3562},"create-assistant","create Vapi voice AI assistants","Create Vapi voice AI assistant payloads or assistants through the Vapi API. Use when building phone or web call agents, generating assistant JSON, choosing safe default model\u002Fvoice\u002Ftranscriber settings, attaching existing Vapi tool IDs, adding assistant hooks, configuring HIPAA\u002Fcompliance only when explicitly requested, or fixing Vapi assistant API validation errors.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3559,3560,3561],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":3549,"slug":3550,"type":16},"2026-07-20T05:57:28.680409",{"slug":3564,"name":3564,"fn":3565,"description":3566,"org":3567,"tags":3568,"stars":26,"repoUrl":27,"updatedAt":3573},"create-call","create automated phone calls with Vapi","Create outbound phone calls, web calls, and batch calls using the Vapi API. Use when making automated calls, testing voice assistants, scheduling call campaigns, or initiating conversations programmatically.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3569,3570,3571,3572],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":3543,"slug":3544,"type":16},{"name":3549,"slug":3550,"type":16},"2026-07-20T05:57:32.68652",{"slug":3575,"name":3575,"fn":3576,"description":3577,"org":3578,"tags":3579,"stars":26,"repoUrl":27,"updatedAt":3587},"create-phone-number","manage Vapi phone numbers","Set up and manage phone numbers in Vapi for inbound and outbound voice AI calls. Use when importing Twilio, Vonage, or Telnyx numbers, buying Vapi numbers, or configuring phone numbers for assistants.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3580,3583,3586],{"name":3581,"slug":3582,"type":16},"Operations","operations",{"name":3584,"slug":3585,"type":16},"Twilio","twilio",{"name":3549,"slug":3550,"type":16},"2026-07-20T05:57:29.699227",{"slug":3589,"name":3589,"fn":3590,"description":3591,"org":3592,"tags":3593,"stars":26,"repoUrl":27,"updatedAt":3599},"create-squad","create multi-assistant voice agent squads","Create multi-assistant squads in Vapi with handoffs between specialized voice agents. Use when building complex voice workflows that need multiple assistants with different roles, like triage-to-booking or sales-to-support handoffs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3594,3595,3598],{"name":18,"slug":19,"type":16},{"name":3596,"slug":3597,"type":16},"Multi-Agent","multi-agent",{"name":3549,"slug":3550,"type":16},"2026-07-20T05:57:30.690452",{"slug":3601,"name":3601,"fn":3602,"description":3603,"org":3604,"tags":3605,"stars":26,"repoUrl":27,"updatedAt":3612},"create-tool","create custom tools for Vapi assistants","Create custom tools for Vapi voice assistants including function tools, API request tools, transfer call tools, end call tools, and integrations with Google Calendar, Sheets, Slack, and more. Use when adding capabilities to voice agents, building tool servers, or integrating external APIs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3606,3607,3608,3609],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":3610,"slug":3611,"type":16},"Integrations","integrations","2026-07-20T05:57:27.69122",{"slug":95,"name":95,"fn":3614,"description":3615,"org":3616,"tags":3617,"stars":26,"repoUrl":27,"updatedAt":3625},"configure Vapi API authentication","Guide users through obtaining and configuring a Vapi API key. Use when the user needs to set up Vapi, when API calls fail due to missing keys, or when the user mentions needing access to Vapi's voice AI platform.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3618,3619,3622],{"name":21,"slug":22,"type":16},{"name":3620,"slug":3621,"type":16},"Auth","auth",{"name":3623,"slug":3624,"type":16},"Configuration","configuration","2026-07-20T05:57:25.717229",{"slug":4,"name":4,"fn":5,"description":6,"org":3627,"tags":3628,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3629,3630,3631,3632],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},{"slug":3634,"name":3634,"fn":3635,"description":3636,"org":3637,"tags":3638,"stars":26,"repoUrl":27,"updatedAt":3646},"vapi-bootstrap-framework","scaffold Vapi voice agent projects","Scaffold a complete Vapi voice-agent project from a ROUGH_DRAFT.md spec. Generates package.json, tsconfig.json, .env.example, .gitignore, and the full TypeScript framework — scenario registry, per-language voice\u002Ftranscriber stack, prompt composer, assistant builder, and an idempotent bootstrap script — plus one rough first-draft body.md per scenario. Drop this skill in any project's .cursor\u002Fskills\u002F folder (or ~\u002F.cursor\u002Fskills\u002F for global use), write a ROUGH_DRAFT.md at the project root, name the skill, and `bun run bootstrap` puts the entire fleet live in dashboard.vapi.ai. Use when the user asks to scaffold or bootstrap Vapi voice agents from a rough draft, build a Vapi assistant fleet, or invokes this skill by name. Targets Bun + TypeScript + @vapi-ai\u002Fserver-sdk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3639,3640,3643,3645],{"name":18,"slug":19,"type":16},{"name":3641,"slug":3642,"type":16},"Engineering","engineering",{"name":3644,"slug":579,"type":16},"TypeScript",{"name":3549,"slug":3550,"type":16},"2026-07-20T05:57:26.732699",{"slug":3648,"name":3648,"fn":3649,"description":3650,"org":3651,"tags":3652,"stars":26,"repoUrl":27,"updatedAt":3659},"vapi-prompt-builder","design and audit Vapi voice agent prompts","Create, improve, or audit Vapi voice agent and Squad system prompts for production phone and web based voice agents. Use when the user wants help designing a Vapi assistant prompt, multi-assistant Squad prompt set, refining an existing prompt, creating prompt sections, building an intake or handoff workflow, improving tool-use instructions, adding guardrails, or optimizing voice-agent behavior for brevity, turn-taking, error handling, caller data collection, escalation, handoffs, and spoken formatting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3653,3654,3657,3658],{"name":18,"slug":19,"type":16},{"name":3655,"slug":3656,"type":16},"Prompt Engineering","prompt-engineering",{"name":3543,"slug":3544,"type":16},{"name":3549,"slug":3550,"type":16},"2026-07-17T06:08:21.647767",{"items":3661,"total":283},[3662,3668,3675,3681,3687,3694,3700],{"slug":3554,"name":3554,"fn":3555,"description":3556,"org":3663,"tags":3664,"stars":26,"repoUrl":27,"updatedAt":3562},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3665,3666,3667],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":3549,"slug":3550,"type":16},{"slug":3564,"name":3564,"fn":3565,"description":3566,"org":3669,"tags":3670,"stars":26,"repoUrl":27,"updatedAt":3573},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3671,3672,3673,3674],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":3543,"slug":3544,"type":16},{"name":3549,"slug":3550,"type":16},{"slug":3575,"name":3575,"fn":3576,"description":3577,"org":3676,"tags":3677,"stars":26,"repoUrl":27,"updatedAt":3587},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3678,3679,3680],{"name":3581,"slug":3582,"type":16},{"name":3584,"slug":3585,"type":16},{"name":3549,"slug":3550,"type":16},{"slug":3589,"name":3589,"fn":3590,"description":3591,"org":3682,"tags":3683,"stars":26,"repoUrl":27,"updatedAt":3599},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3684,3685,3686],{"name":18,"slug":19,"type":16},{"name":3596,"slug":3597,"type":16},{"name":3549,"slug":3550,"type":16},{"slug":3601,"name":3601,"fn":3602,"description":3603,"org":3688,"tags":3689,"stars":26,"repoUrl":27,"updatedAt":3612},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3690,3691,3692,3693],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":3610,"slug":3611,"type":16},{"slug":95,"name":95,"fn":3614,"description":3615,"org":3695,"tags":3696,"stars":26,"repoUrl":27,"updatedAt":3625},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3697,3698,3699],{"name":21,"slug":22,"type":16},{"name":3620,"slug":3621,"type":16},{"name":3623,"slug":3624,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":3701,"tags":3702,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3703,3704,3705,3706],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16}]