agentphone
Enables the creation of AI phone agents for making calls and sending SMS using the AgentPhone API.
Install this skill
Security score
The agentphone skill was audited on May 14, 2026 and we found 167 security issues across 3 threat categories. Review the findings below before installing.
Categories Tested
Security Issues
Template literal with variable interpolation in command context
| 633 | .map(h => `${h.direction === 'inbound' ? 'Customer' : 'Agent'}: ${h.content}`) |
Template literal with variable interpolation in command context
| 644 | { role: 'user', content: `Conversation:\n${context}\n\nRespond.` } |
Curl to non-GitHub URL
| 71 | curl -X POST https://api.agentphone.to/v1/agents \ |
Curl to non-GitHub URL
| 102 | curl -X POST https://api.agentphone.to/v1/numbers \ |
Curl to non-GitHub URL
| 130 | curl -X POST https://api.agentphone.to/v1/calls \ |
Curl to non-GitHub URL
| 160 | curl https://api.agentphone.to/v1/calls/call_def456/transcript \ |
Curl to non-GitHub URL
| 241 | curl https://api.agentphone.to/v1/usage \ |
Curl to non-GitHub URL
| 266 | curl -X POST https://api.agentphone.to/v1/agents \ |
Curl to non-GitHub URL
| 307 | curl "https://api.agentphone.to/v1/agents?limit=20" \ |
Curl to non-GitHub URL
| 318 | curl https://api.agentphone.to/v1/agents/AGENT_ID \ |
Curl to non-GitHub URL
| 329 | curl -X PATCH https://api.agentphone.to/v1/agents/AGENT_ID \ |
Curl to non-GitHub URL
| 353 | curl -X DELETE https://api.agentphone.to/v1/agents/AGENT_ID \ |
Curl to non-GitHub URL
| 370 | curl -X POST https://api.agentphone.to/v1/agents/AGENT_ID/numbers \ |
Curl to non-GitHub URL
| 383 | curl -X DELETE https://api.agentphone.to/v1/agents/AGENT_ID/numbers/NUMBER_ID \ |
Curl to non-GitHub URL
| 392 | curl "https://api.agentphone.to/v1/agents/AGENT_ID/conversations?limit=20" \ |
Curl to non-GitHub URL
| 401 | curl "https://api.agentphone.to/v1/agents/AGENT_ID/calls?limit=20" \ |
Curl to non-GitHub URL
| 410 | curl https://api.agentphone.to/v1/agents/voices \ |
Curl to non-GitHub URL
| 433 | curl -X POST https://api.agentphone.to/v1/numbers \ |
Curl to non-GitHub URL
| 465 | curl "https://api.agentphone.to/v1/numbers?limit=20" \ |
Curl to non-GitHub URL
| 495 | curl -X DELETE https://api.agentphone.to/v1/numbers/NUMBER_ID \ |
Curl to non-GitHub URL
| 915 | curl -X GET "https://api.agentphone.to/v1/calls?limit=10&offset=0" \ |
Curl to non-GitHub URL
| 955 | curl -X GET "https://api.agentphone.to/v1/calls/call_ghi012" \ |
Curl to non-GitHub URL
| 1014 | curl -X POST "https://api.agentphone.to/v1/calls" \ |
Curl to non-GitHub URL
| 1034 | curl -X GET "https://api.agentphone.to/v1/numbers/num_xyz789/calls?limit=10" \ |
Curl to non-GitHub URL
| 1041 | curl https://api.agentphone.to/v1/calls/CALL_ID/transcript \ |
Curl to non-GitHub URL
| 1052 | curl "https://api.agentphone.to/v1/numbers/NUMBER_ID/messages?limit=50" \ |
Curl to non-GitHub URL
| 1084 | curl "https://api.agentphone.to/v1/conversations?limit=20" \ |
Curl to non-GitHub URL
| 1115 | curl "https://api.agentphone.to/v1/conversations/CONVERSATION_ID?messageLimit=50" \ |
Curl to non-GitHub URL
| 1132 | curl -X POST https://api.agentphone.to/v1/webhooks \ |
Curl to non-GitHub URL
| 1163 | curl https://api.agentphone.to/v1/webhooks \ |
Curl to non-GitHub URL
| 1172 | curl -X DELETE https://api.agentphone.to/v1/webhooks \ |
Curl to non-GitHub URL
| 1179 | curl "https://api.agentphone.to/v1/webhooks/deliveries/stats?hours=24" \ |
Curl to non-GitHub URL
| 1186 | curl "https://api.agentphone.to/v1/webhooks/deliveries?limit=10" \ |
Curl to non-GitHub URL
| 1195 | curl -X POST https://api.agentphone.to/v1/webhooks/test \ |
Curl to non-GitHub URL
| 1208 | curl -X POST https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
Curl to non-GitHub URL
| 1220 | curl https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
Curl to non-GitHub URL
| 1229 | curl -X DELETE https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
Curl to non-GitHub URL
| 1236 | curl -X POST https://api.agentphone.to/v1/agents/AGENT_ID/webhook/test \ |
Curl to non-GitHub URL
| 1245 | curl https://api.agentphone.to/v1/usage \ |
Curl to non-GitHub URL
| 1266 | curl "https://api.agentphone.to/v1/usage/daily?days=7" \ |
Curl to non-GitHub URL
| 1273 | curl "https://api.agentphone.to/v1/usage/monthly?months=3" \ |
Webhook reference - potential data exfiltration
| 4 | description: Build AI phone agents with AgentPhone API. Use when the user wants to make phone calls, send/receive SMS, manage phone numbers, create voice agents, set up webhooks, or check usage — anyt |
Webhook reference - potential data exfiltration
| 20 | - Use when the user is configuring webhooks, hosted voice mode, or account-level usage for AgentPhone |
Webhook reference - potential data exfiltration
| 38 | 4. You configure a **Webhook** (for custom logic) or use **Hosted Mode** (built-in LLM handles the conversation) |
Webhook reference - potential data exfiltration
| 49 | └── Webhook (per-agent event delivery) |
Webhook reference - potential data exfiltration
| 50 | Webhook (project-level event delivery) |
Webhook reference - potential data exfiltration
| 58 | - **`webhook`** (default) — Inbound call/SMS events are forwarded to your webhook URL for custom handling. Use this when you need full control over the conversation logic. |
Webhook reference - potential data exfiltration
| 216 | - Agent setup order: **Create agent → Buy number → Set webhook (if needed) → Make calls** |
Webhook reference - potential data exfiltration
| 238 | Get a complete snapshot of your account: agents, phone numbers, webhook status, and usage limits. **Call this first to orient yourself.** |
Webhook reference - potential data exfiltration
| 283 | | `voiceMode` | `"webhook"` \| `"hosted"` | No | Call handling mode (default: `webhook`) | |
Webhook reference - potential data exfiltration
| 343 | | `voiceMode` | `"webhook"` \| `"hosted"` | No | Call handling mode | |
Webhook reference - potential data exfiltration
| 507 | - **`voiceMode: "webhook"`** (default) — Caller speech is transcribed and sent to your webhook as `agent.message` events. Your server controls every response using any LLM, RAG, or custom logic. |
Webhook reference - potential data exfiltration
| 508 | - **`voiceMode: "hosted"`** — Calls are handled end-to-end by a built-in LLM using your `systemPrompt`. No webhook or server needed. |
Webhook reference - potential data exfiltration
| 512 | > **Note:** SMS is always webhook-based regardless of voice mode. |
Webhook reference - potential data exfiltration
| 514 | #### Call flow (webhook mode) |
Webhook reference - potential data exfiltration
| 516 | When `voiceMode` is `"webhook"`: |
Webhook reference - potential data exfiltration
| 520 | 3. **Transcript is sent to your webhook** — We POST the transcript to your webhook with `event: "agent.message"` and `channel: "voice"`, including `recentHistory` for context. |
Webhook reference - potential data exfiltration
| 533 | 5. **Conversation continues** — No server or webhook involved — the platform handles everything. |
Webhook reference - potential data exfiltration
| 550 | #### Webhook response format |
Webhook reference - potential data exfiltration
| 552 | For voice webhooks, your server must return a JSON object (`{...}`) telling the agent what to say. Non-object responses (numbers, strings, arrays) are ignored and the caller hears silence. |
Webhook reference - potential data exfiltration
| 583 | > **Warning: Webhook timeout** — Voice webhook requests have a **30-second default timeout** (configurable from 5–120 seconds per webhook via the `timeout` field). If your server doesn't start respond |
Webhook reference - potential data exfiltration
| 591 | @app.post('/webhook') |
Webhook reference - potential data exfiltration
| 628 | app.post('/webhook', express.json(), async (req, res) => { |
Webhook reference - potential data exfiltration
| 725 | @app.post("/webhook") |
Webhook reference - potential data exfiltration
| 726 | def webhook(): |
Webhook reference - potential data exfiltration
| 815 | app.post("/webhook", async (req, res) => { |
Webhook reference - potential data exfiltration
| 846 | **Your webhook is too slow or not responding.** Voice webhooks have a 30-second default timeout (configurable per webhook from 5–120 seconds). If your server doesn't respond in time, the turn is dropp |
Webhook reference - potential data exfiltration
| 853 | - Webhook URL is unreachable or returning errors |
Webhook reference - potential data exfiltration
| 857 | **Your webhook isn't configured or isn't returning a valid JSON object.** Voice responses must be a JSON object (`{...}`). Non-object responses (strings, arrays, numbers) are ignored. |
Webhook reference - potential data exfiltration
| 859 | **Fix:** Verify your webhook is returning `{"text": "..."}`. Use `POST /v1/webhooks/test` to confirm your endpoint is reachable and responding correctly. |
Webhook reference - potential data exfiltration
| 871 | **Fix:** Strip non-speech content from your LLM output before returning it. AgentPhone removes common patterns automatically, but your webhook should clean responses to be safe. |
Webhook reference - potential data exfiltration
| 873 | ##### Webhook works for SMS but not voice |
Webhook reference - potential data exfiltration
| 875 | **You're returning a `200 OK` with no body, or a non-JSON response for voice.** SMS webhooks only need a `200` status — voice webhooks must return a JSON object with a `text` field. |
Webhook reference - potential data exfiltration
| 877 | **Fix:** Check the `channel` field in the webhook payload. For `"voice"`, always return `{"text": "..."}`. For `"sms"`, a `200 OK` is sufficient. |
Webhook reference - potential data exfiltration
| 1011 | | `systemPrompt` | string or null | No | When provided, uses a built-in LLM for the conversation instead of forwarding to your webhook. | |
Webhook reference - potential data exfiltration
| 1125 | ### Webhooks (Project-Level) |
Webhook reference - potential data exfiltration
| 1127 | The project-level webhook receives events for **all agents** unless overridden by an agent-specific webhook. |
Webhook reference - potential data exfiltration
| 1129 | #### Set Webhook |
Webhook reference - potential data exfiltration
| 1132 | curl -X POST https://api.agentphone.to/v1/webhooks \ |
Webhook reference - potential data exfiltration
| 1136 | "url": "https://your-server.com/webhook", |
Webhook reference - potential data exfiltration
| 1144 | | `contextLimit` | `number` | No | 10 | Number of recent messages to include in webhook payloads (0-50) | |
Webhook reference - potential data exfiltration
| 1151 | "url": "https://your-server.com/webhook", |
Webhook reference - potential data exfiltration
| 1158 | **Save the `secret`** — use it to verify webhook signatures on your server. |
Webhook reference - potential data exfiltration
| 1160 | #### Get Webhook |
Webhook reference - potential data exfiltration
| 1163 | curl https://api.agentphone.to/v1/webhooks \ |
Webhook reference - potential data exfiltration
| 1167 | #### Delete Webhook |
Webhook reference - potential data exfiltration
| 1169 | Agents with their own webhook are not affected. |
Webhook reference - potential data exfiltration
| 1172 | curl -X DELETE https://api.agentphone.to/v1/webhooks \ |
Webhook reference - potential data exfiltration
| 1176 | #### Get Webhook Delivery Stats |
Webhook reference - potential data exfiltration
| 1179 | curl "https://api.agentphone.to/v1/webhooks/deliveries/stats?hours=24" \ |
Webhook reference - potential data exfiltration
| 1186 | curl "https://api.agentphone.to/v1/webhooks/deliveries?limit=10" \ |
Webhook reference - potential data exfiltration
| 1190 | #### Test Webhook |
Webhook reference - potential data exfiltration
| 1192 | Send a test event to verify your webhook is working. |
Webhook reference - potential data exfiltration
| 1195 | curl -X POST https://api.agentphone.to/v1/webhooks/test \ |
Webhook reference - potential data exfiltration
| 1201 | ### Webhooks (Per-Agent) |
Webhook reference - potential data exfiltration
| 1203 | Route a specific agent's events to a different URL. When set, the agent's events go here instead of the project-level webhook. |
Webhook reference - potential data exfiltration
| 1205 | #### Set Agent Webhook |
Webhook reference - potential data exfiltration
| 1208 | curl -X POST https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
Webhook reference - potential data exfiltration
| 1212 | "url": "https://your-server.com/agent-webhook", |
Webhook reference - potential data exfiltration
| 1217 | #### Get Agent Webhook |
Webhook reference - potential data exfiltration
| 1220 | curl https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
Webhook reference - potential data exfiltration
| 1224 | #### Delete Agent Webhook |
Webhook reference - potential data exfiltration
| 1226 | Events fall back to the project-level webhook. |
Webhook reference - potential data exfiltration
| 1229 | curl -X DELETE https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
Webhook reference - potential data exfiltration
| 1233 | #### Test Agent Webhook |
Webhook reference - potential data exfiltration
| 1236 | curl -X POST https://api.agentphone.to/v1/agents/AGENT_ID/webhook/test \ |
Webhook reference - potential data exfiltration
| 1279 | ## Webhook Events |
Webhook reference - potential data exfiltration
| 1281 | When a call or message comes in, AgentPhone sends an HTTP POST to your webhook URL with the event payload. |
Webhook reference - potential data exfiltration
| 1293 | ### Voice vs SMS webhooks |
Webhook reference - potential data exfiltration
| 1295 | The `channel` field in the webhook payload tells you the event source: |
Webhook reference - potential data exfiltration
| 1302 | The webhook payload includes: |
Webhook reference - potential data exfiltration
| 1308 | ### Webhook timeout |
Webhook reference - potential data exfiltration
| 1310 | Voice webhooks have a **30-second default timeout** (configurable from 5–120 seconds via the `timeout` field when creating or updating a webhook). If your server doesn't start responding in time, the |
Webhook reference - potential data exfiltration
| 1314 | Each webhook request includes a signature header. Use the `secret` from your webhook setup to verify the payload hasn't been tampered with. |
External URL reference
| 7 | homepage: https://agentphone.to |
External URL reference
| 9 | metadata: {"api_base": "https://api.agentphone.to/v1"} |
External URL reference
| 23 | **Base URL:** `https://api.agentphone.to/v1` |
External URL reference
| 27 | **Console:** [agentphone.to](https://agentphone.to) |
External URL reference
| 35 | 1. You sign up at [agentphone.to](https://agentphone.to) and get an API key |
External URL reference
| 66 | Sign up at [agentphone.to](https://agentphone.to). Your API key will look like `sk_live_abc123...`. |
External URL reference
| 71 | curl -X POST https://api.agentphone.to/v1/agents \ |
External URL reference
| 102 | curl -X POST https://api.agentphone.to/v1/numbers \ |
External URL reference
| 130 | curl -X POST https://api.agentphone.to/v1/calls \ |
External URL reference
| 160 | curl https://api.agentphone.to/v1/calls/call_def456/transcript \ |
External URL reference
| 196 | - Your API key should ONLY appear in requests to `https://api.agentphone.to/v1/*` |
External URL reference
| 228 | Get your API key at [agentphone.to](https://agentphone.to). |
External URL reference
| 241 | curl https://api.agentphone.to/v1/usage \ |
External URL reference
| 266 | curl -X POST https://api.agentphone.to/v1/agents \ |
External URL reference
| 307 | curl "https://api.agentphone.to/v1/agents?limit=20" \ |
External URL reference
| 318 | curl https://api.agentphone.to/v1/agents/AGENT_ID \ |
External URL reference
| 329 | curl -X PATCH https://api.agentphone.to/v1/agents/AGENT_ID \ |
External URL reference
| 353 | curl -X DELETE https://api.agentphone.to/v1/agents/AGENT_ID \ |
External URL reference
| 370 | curl -X POST https://api.agentphone.to/v1/agents/AGENT_ID/numbers \ |
External URL reference
| 383 | curl -X DELETE https://api.agentphone.to/v1/agents/AGENT_ID/numbers/NUMBER_ID \ |
External URL reference
| 392 | curl "https://api.agentphone.to/v1/agents/AGENT_ID/conversations?limit=20" \ |
External URL reference
| 401 | curl "https://api.agentphone.to/v1/agents/AGENT_ID/calls?limit=20" \ |
External URL reference
| 410 | curl https://api.agentphone.to/v1/agents/voices \ |
External URL reference
| 433 | curl -X POST https://api.agentphone.to/v1/numbers \ |
External URL reference
| 465 | curl "https://api.agentphone.to/v1/numbers?limit=20" \ |
External URL reference
| 495 | curl -X DELETE https://api.agentphone.to/v1/numbers/NUMBER_ID \ |
External URL reference
| 915 | curl -X GET "https://api.agentphone.to/v1/calls?limit=10&offset=0" \ |
External URL reference
| 937 | "recordingUrl": "https://api.twilio.com/2010-04-01/.../Recordings/RE...", |
External URL reference
| 955 | curl -X GET "https://api.agentphone.to/v1/calls/call_ghi012" \ |
External URL reference
| 974 | "recordingUrl": "https://api.twilio.com/2010-04-01/.../Recordings/RE...", |
External URL reference
| 1014 | curl -X POST "https://api.agentphone.to/v1/calls" \ |
External URL reference
| 1034 | curl -X GET "https://api.agentphone.to/v1/numbers/num_xyz789/calls?limit=10" \ |
External URL reference
| 1041 | curl https://api.agentphone.to/v1/calls/CALL_ID/transcript \ |
External URL reference
| 1052 | curl "https://api.agentphone.to/v1/numbers/NUMBER_ID/messages?limit=50" \ |
External URL reference
| 1084 | curl "https://api.agentphone.to/v1/conversations?limit=20" \ |
External URL reference
| 1115 | curl "https://api.agentphone.to/v1/conversations/CONVERSATION_ID?messageLimit=50" \ |
External URL reference
| 1132 | curl -X POST https://api.agentphone.to/v1/webhooks \ |
External URL reference
| 1136 | "url": "https://your-server.com/webhook", |
External URL reference
| 1151 | "url": "https://your-server.com/webhook", |
External URL reference
| 1163 | curl https://api.agentphone.to/v1/webhooks \ |
External URL reference
| 1172 | curl -X DELETE https://api.agentphone.to/v1/webhooks \ |
External URL reference
| 1179 | curl "https://api.agentphone.to/v1/webhooks/deliveries/stats?hours=24" \ |
External URL reference
| 1186 | curl "https://api.agentphone.to/v1/webhooks/deliveries?limit=10" \ |
External URL reference
| 1195 | curl -X POST https://api.agentphone.to/v1/webhooks/test \ |
External URL reference
| 1208 | curl -X POST https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
External URL reference
| 1212 | "url": "https://your-server.com/agent-webhook", |
External URL reference
| 1220 | curl https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
External URL reference
| 1229 | curl -X DELETE https://api.agentphone.to/v1/agents/AGENT_ID/webhook \ |
External URL reference
| 1236 | curl -X POST https://api.agentphone.to/v1/agents/AGENT_ID/webhook/test \ |
External URL reference
| 1245 | curl https://api.agentphone.to/v1/usage \ |
External URL reference
| 1266 | curl "https://api.agentphone.to/v1/usage/daily?days=7" \ |
External URL reference
| 1273 | curl "https://api.agentphone.to/v1/usage/monthly?months=3" \ |
External URL reference
| 1383 | - [Console](https://agentphone.to) |