{"id":19456,"plugin_id":"plugins_6a99b26dd5f08191ae2c40cf2f63d2b2","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:15:35.974Z","digest":"129b2602b3294dfef3cd966688d9d86d44b489826f15005c44588597f9e3ed6f","against":null,"payload":{"description":"Create one-off outbound phone calls, web calls, scheduled calls, and simple batch calls using the Vapi API. Use when making or testing individual calls or initiating a bounded /call request programmatically. Use create-campaign for a persistent multi-contact Campaign with lifecycle, reporting, cancellation, duplication, or campaign webhooks.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":200}],"name":"create-call","skill_md_contents":"---\nname: create-call\ndescription: Create one-off outbound phone calls, web calls, scheduled calls, and simple batch calls using the Vapi API. Use when making or testing individual calls or initiating a bounded /call request programmatically. Use create-campaign for a persistent multi-contact Campaign with lifecycle, reporting, cancellation, duplication, or campaign webhooks.\nlicense: MIT\n---\n\n# Vapi Call Creation\n\nInitiate outbound phone calls, web calls, and batch calls using Vapi's API. Connect your voice assistants to real phone numbers and test them programmatically.\n\n> **Setup:** Ensure `VAPI_API_KEY` is set. See the `setup-api-key` skill if needed.\n\n## Quick Start — Outbound Phone Call\n\n### cURL\n\n```bash\ncurl -X POST https://api.vapi.ai/call \\\n  -H \"Authorization: Bearer $VAPI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"assistantId\": \"your-assistant-id\",\n    \"phoneNumberId\": \"your-phone-number-id\",\n    \"customer\": {\n      \"number\": \"+11234567890\"\n    }\n  }'\n```\n\n### TypeScript (Server SDK)\n\n```typescript\nimport { VapiClient } from \"@vapi-ai/server-sdk\";\n\nconst vapi = new VapiClient({ token: process.env.VAPI_API_KEY! });\n\nconst call = await vapi.calls.create({\n  assistantId: \"your-assistant-id\",\n  phoneNumberId: \"your-phone-number-id\",\n  customer: {\n    number: \"+11234567890\",\n  },\n});\n\nconsole.log(\"Call created:\", call.id);\n```\n\n### Python\n\n```python\nimport requests\nimport os\n\nresponse = requests.post(\n    \"https://api.vapi.ai/call\",\n    headers={\n        \"Authorization\": f\"Bearer {os.environ['VAPI_API_KEY']}\",\n        \"Content-Type\": \"application/json\",\n    },\n    json={\n        \"assistantId\": \"your-assistant-id\",\n        \"phoneNumberId\": \"your-phone-number-id\",\n        \"customer\": {\"number\": \"+11234567890\"},\n    },\n)\n\ncall = response.json()\nprint(f\"Call initiated: {call['id']}\")\n```\n\n## Call Types\n\n### Outbound Phone Call\n\nRequires an assistant, a Vapi phone number, and a customer number.\n\n```json\n{\n  \"assistantId\": \"assistant-id\",\n  \"phoneNumberId\": \"phone-number-id\",\n  \"customer\": {\n    \"number\": \"+11234567890\",\n    \"name\": \"John Doe\",\n    \"numberE164CheckEnabled\": true\n  }\n}\n```\n\n### Web Call\n\nFor browser-based calls — no phone number needed. Use the Vapi Web SDK on the client side.\n\n```json\n{\n  \"assistantId\": \"assistant-id\"\n}\n```\n\nClient-side (JavaScript):\n```javascript\nimport Vapi from \"@vapi-ai/web\";\n\nconst vapi = new Vapi(\"your-public-key\");\nvapi.start(\"your-assistant-id\");\n```\n\n### Transient Assistant Call\n\nDefine an assistant inline instead of referencing a saved one:\n\n```json\n{\n  \"assistant\": {\n    \"name\": \"Quick Test\",\n    \"firstMessage\": \"Hello! This is a test call.\",\n    \"model\": {\n      \"provider\": \"openai\",\n      \"model\": \"gpt-4.1\",\n      \"messages\": [\n        {\n          \"role\": \"system\",\n          \"content\": \"You are a test assistant. Confirm the call is working and end politely.\"\n        }\n      ]\n    },\n    \"voice\": { \"provider\": \"vapi\", \"voiceId\": \"Elliot\", \"version\": 2 },\n    \"transcriber\": { \"provider\": \"deepgram\", \"model\": \"nova-3\", \"language\": \"en\" }\n  },\n  \"phoneNumberId\": \"phone-number-id\",\n  \"customer\": {\n    \"number\": \"+11234567890\"\n  }\n}\n```\n\n## Scheduled Calls\n\nSchedule a call for a future time:\n\n```json\n{\n  \"assistantId\": \"assistant-id\",\n  \"phoneNumberId\": \"phone-number-id\",\n  \"customer\": {\n    \"number\": \"+11234567890\"\n  },\n  \"schedulePlan\": {\n    \"earliestAt\": \"2025-06-15T14:00:00Z\",\n    \"latestAt\": \"2025-06-15T15:00:00Z\"\n  }\n}\n```\n\n- `earliestAt` — Earliest time to attempt the call (ISO 8601)\n- `latestAt` — Latest time to attempt the call (optional)\n- If using `assistantId`, the latest version of the assistant is used at call time\n- For a fixed assistant config, use `assistant` (transient) instead\n\n## Batch Calls\n\nCall multiple numbers in one request:\n\n```json\n{\n  \"assistantId\": \"assistant-id\",\n  \"phoneNumberId\": \"phone-number-id\",\n  \"customers\": [\n    { \"number\": \"+11234567890\", \"name\": \"Alice\" },\n    { \"number\": \"+10987654321\", \"name\": \"Bob\" },\n    { \"number\": \"+15551234567\", \"name\": \"Carol\" }\n  ]\n}\n```\n\nCombine with `schedulePlan` for scheduled batch calls.\n\nUse this `/call` batch only when the user does not need a persistent Campaign resource. Use the `create-campaign` skill for campaign-level monitoring, contact outcomes, duplication, cancellation, concurrency, or webhooks.\n\n## Call with Metadata\n\nPass custom data accessible during the call:\n\n```json\n{\n  \"assistantId\": \"assistant-id\",\n  \"phoneNumberId\": \"phone-number-id\",\n  \"customer\": {\n    \"number\": \"+11234567890\"\n  },\n  \"metadata\": {\n    \"orderId\": \"ORD-12345\",\n    \"department\": \"billing\"\n  }\n}\n```\n\n## Managing Calls\n\n```bash\n# List calls\ncurl \"https://api.vapi.ai/call?limit=10\" \\\n  -H \"Authorization: Bearer $VAPI_API_KEY\"\n\n# Get a specific call\ncurl https://api.vapi.ai/call/{id} \\\n  -H \"Authorization: Bearer $VAPI_API_KEY\"\n\n# Get call with transcript and recording\ncurl https://api.vapi.ai/call/{id} \\\n  -H \"Authorization: Bearer $VAPI_API_KEY\"\n# Response includes: artifact.transcript, artifact.recordingUrl,\n# analysis.summary, and costBreakdown when those outputs are enabled\n\n# Delete a call\ncurl -X DELETE https://api.vapi.ai/call/{id} \\\n  -H \"Authorization: Bearer $VAPI_API_KEY\"\n```\n\n## Call Response\n\nA successful call creation returns:\n\n```json\n{\n  \"id\": \"call-uuid\",\n  \"orgId\": \"org-uuid\",\n  \"type\": \"outboundPhoneCall\",\n  \"status\": \"queued\",\n  \"assistantId\": \"assistant-id\",\n  \"phoneNumberId\": \"phone-number-id\",\n  \"customer\": {\n    \"number\": \"+11234567890\"\n  },\n  \"createdAt\": \"2025-01-15T10:00:00Z\"\n}\n```\n\nCall statuses: `queued` → `ringing` → `in-progress` → `ended`\n\n## Compliance Warning\n\nIt is a violation of FCC law to dial phone numbers without consent in an automated manner. Review TCPA consent requirements before launching automated call campaigns.\n\n## References\n\n- [Vapi Outbound Calls Docs](https://docs.vapi.ai/calls/outbound-calling)\n- [Call Features](https://docs.vapi.ai/calls/call-features)\n- [Voicemail Detection](https://docs.vapi.ai/calls/voicemail-detection)\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\n\nSee the [Vapi MCP integration guide](https://docs.vapi.ai/cli/mcp) for setup instructions across supported agents.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}