# Wixzel Phone - [Wixzel Phone](https://docs.phone.wixzel.com/index.md): APIs for AI voice agents. One key, one balance, every voice engine. - [Get started](https://docs.phone.wixzel.com/get-started.md): From nothing to a ringing phone. - [Quickstart](https://docs.phone.wixzel.com/quickstart.md): Four requests from nothing to a ringing phone. - [API keys](https://docs.phone.wixzel.com/api-keys.md): Creating, scoping, rotating and revoking. - [Credits](https://docs.phone.wixzel.com/credits.md): Adding credit, and what a call actually costs. - [SIP trunks](https://docs.phone.wixzel.com/sip-trunks.md): Bringing your own carrier. - [Integrate](https://docs.phone.wixzel.com/integrate.md): The same call in cURL, Node and Python. - [Compose a voice engine](https://docs.phone.wixzel.com/composing.md): Name the speech-to-text, language and text-to-speech models yourself, and what that costs. - [Voice engines](https://docs.phone.wixzel.com/voice-engines.md): Compose a pipeline from named models, or hand the whole turn to one. - [Billing](https://docs.phone.wixzel.com/billing.md): How credit is reserved, spent, and itemised. - [Authentication](https://docs.phone.wixzel.com/authentication.md): Scoped API keys, and how to rotate them without downtime. - [Errors](https://docs.phone.wixzel.com/errors.md): Match on code, not message. - [Pagination](https://docs.phone.wixzel.com/pagination.md): Cursors, and why there is no offset. - [Idempotency](https://docs.phone.wixzel.com/idempotency.md): Retrying safely when the network lies to you. - [Rate limits](https://docs.phone.wixzel.com/rate-limits.md): What is limited, what is not, and what the headers mean. - [List agents](https://docs.phone.wixzel.com/api-reference/agents/list-agents.md): Cursor-paginated. Requires `agents:read`. - [Create an agent](https://docs.phone.wixzel.com/api-reference/agents/create-an-agent.md): Requires `agents:write`. - [Retrieve an agent](https://docs.phone.wixzel.com/api-reference/agents/retrieve-an-agent.md) - [Delete an agent](https://docs.phone.wixzel.com/api-reference/agents/delete-an-agent.md) - [Update an agent](https://docs.phone.wixzel.com/api-reference/agents/update-an-agent.md): Only the fields you send are changed. - [List leads](https://docs.phone.wixzel.com/api-reference/leads/list-leads.md): Cursor-paginated. Requires `leads:read`. - [Create a lead](https://docs.phone.wixzel.com/api-reference/leads/create-a-lead.md): Requires `leads:write`. - [Retrieve a lead](https://docs.phone.wixzel.com/api-reference/leads/retrieve-a-lead.md) - [Delete a lead](https://docs.phone.wixzel.com/api-reference/leads/delete-a-lead.md) - [Update a lead](https://docs.phone.wixzel.com/api-reference/leads/update-a-lead.md): Only the fields you send are changed. - [Import many leads](https://docs.phone.wixzel.com/api-reference/leads/import-many-leads.md): Creates up to 1,000 leads in one request. Rows are validated individually and partial success is the contract: a malformed row is reported in `errors` with its index, and the rest are still created. Synchronous, which is why the array is bounded — larger imports belong in a job rather than a request… - [Start a campaign](https://docs.phone.wixzel.com/api-reference/campaigns/start-a-campaign.md): Begins calling every lead on the campaign. Separate from creating one on purpose: starting spends money on each lead, and that should never be a side effect of the request that also built it. Returns 402 when the balance cannot cover the run. - [Pause a campaign](https://docs.phone.wixzel.com/api-reference/campaigns/pause-a-campaign.md): Stops placing new calls and hangs up any the campaign still has in flight. - [List campaigns](https://docs.phone.wixzel.com/api-reference/campaigns/list-campaigns.md): Cursor-paginated. Requires `campaigns:read`. - [Create a campaign](https://docs.phone.wixzel.com/api-reference/campaigns/create-a-campaign.md): Requires `campaigns:write`. - [Retrieve a campaign](https://docs.phone.wixzel.com/api-reference/campaigns/retrieve-a-campaign.md) - [Delete a campaign](https://docs.phone.wixzel.com/api-reference/campaigns/delete-a-campaign.md) - [List knowledge bases](https://docs.phone.wixzel.com/api-reference/knowledge-bases/list-knowledge-bases.md): Cursor-paginated. Requires `knowledge_bases:read`. - [Create a knowledge base](https://docs.phone.wixzel.com/api-reference/knowledge-bases/create-a-knowledge-base.md): Requires `knowledge_bases:write`. - [Retrieve a knowledge base](https://docs.phone.wixzel.com/api-reference/knowledge-bases/retrieve-a-knowledge-base.md) - [Delete a knowledge base](https://docs.phone.wixzel.com/api-reference/knowledge-bases/delete-a-knowledge-base.md) - [Update a knowledge base](https://docs.phone.wixzel.com/api-reference/knowledge-bases/update-a-knowledge-base.md): Only the fields you send are changed. - [List phone numbers](https://docs.phone.wixzel.com/api-reference/phone-numbers/list-phone-numbers.md): Cursor-paginated. Requires `phone_numbers:read`. - [Create a phone number](https://docs.phone.wixzel.com/api-reference/phone-numbers/create-a-phone-number.md): Requires `phone_numbers:write`. - [Retrieve a phone number](https://docs.phone.wixzel.com/api-reference/phone-numbers/retrieve-a-phone-number.md) - [Delete a phone number](https://docs.phone.wixzel.com/api-reference/phone-numbers/delete-a-phone-number.md) - [Update a phone number](https://docs.phone.wixzel.com/api-reference/phone-numbers/update-a-phone-number.md): Only the fields you send are changed. - [List sip trunks](https://docs.phone.wixzel.com/api-reference/sip-trunks/list-sip-trunks.md): Cursor-paginated. Requires `sip_trunks:read`. - [Create a SIP trunk](https://docs.phone.wixzel.com/api-reference/sip-trunks/create-a-sip-trunk.md): Requires `sip_trunks:write`. - [Retrieve a SIP trunk](https://docs.phone.wixzel.com/api-reference/sip-trunks/retrieve-a-sip-trunk.md) - [Delete a SIP trunk](https://docs.phone.wixzel.com/api-reference/sip-trunks/delete-a-sip-trunk.md) - [Update a SIP trunk](https://docs.phone.wixzel.com/api-reference/sip-trunks/update-a-sip-trunk.md): Only the fields you send are changed. - [Check a SIP trunk](https://docs.phone.wixzel.com/api-reference/sip-trunks/check-a-sip-trunk.md): Asterisk's own qualify result and a live network probe, reported side by side rather than reduced to one boolean, because where they disagree IS the diagnosis. A provider that ignores unauthenticated OPTIONS shows `probe.reachable: false` while Asterisk reports it healthy — that is normal and Asteri… - [Test a SIP trunk](https://docs.phone.wixzel.com/api-reference/sip-trunks/test-a-sip-trunk.md): Sends a TCP connect or an unauthenticated SIP OPTIONS to the provider from this server and records the outcome on the trunk. A write scope because it mutates `last_tested_at` and puts traffic on a third party. A negative result is not proof the trunk is broken — plenty of carriers drop unauthenticat… - [Recent SIP events](https://docs.phone.wixzel.com/api-reference/sip-trunks/recent-sip-events.md): The SIP engine's recent events for your account — registration, call setup, and carrier rejections with their cause. An in-memory ring buffer, so it is a live diagnostic rather than an audit trail: it does not survive a restart and old entries fall off. Poll with `since_id` set to the `last_id` of y… - [List appointments](https://docs.phone.wixzel.com/api-reference/appointments/list-appointments.md): Cursor-paginated. Requires `appointments:read`. - [Create an appointment](https://docs.phone.wixzel.com/api-reference/appointments/create-an-appointment.md): Requires `appointments:write`. - [Retrieve an appointment](https://docs.phone.wixzel.com/api-reference/appointments/retrieve-an-appointment.md) - [Delete an appointment](https://docs.phone.wixzel.com/api-reference/appointments/delete-an-appointment.md) - [Update an appointment](https://docs.phone.wixzel.com/api-reference/appointments/update-an-appointment.md): Only the fields you send are changed. - [List calls](https://docs.phone.wixzel.com/api-reference/calls/list-calls.md) - [Place a call](https://docs.phone.wixzel.com/api-reference/calls/place-a-call.md): Dials over your SIP trunk and connects the agent. Credit is reserved before the call is placed; an underfunded account is refused with `402` and no resources are allocated. - [Retrieve a call](https://docs.phone.wixzel.com/api-reference/calls/retrieve-a-call.md): Returns the full record, including the transcript, the recording, and any provider errors recorded while the call was running. The list endpoint returns the summary shape instead — a transcript on every row of a page is megabytes nobody asked for. When a call did not connect, `failure_code` and `fai… - [Retrieve a transcript](https://docs.phone.wixzel.com/api-reference/calls/retrieve-a-transcript.md) - [End a call in progress](https://docs.phone.wixzel.com/api-reference/calls/end-a-call-in-progress.md) - [List usage events](https://docs.phone.wixzel.com/api-reference/usage/list-usage-events.md): Every billable line, itemised. Filter by `session_id` to see exactly what one call cost and why — the sum of a call's events always equals what was debited. - [Summarise usage](https://docs.phone.wixzel.com/api-reference/usage/summarise-usage.md) - [Retrieve your balance](https://docs.phone.wixzel.com/api-reference/billing/retrieve-your-balance.md) - [List ledger entries](https://docs.phone.wixzel.com/api-reference/billing/list-ledger-entries.md): Every movement on the account, oldest cursor first. Balances reconcile exactly. - [Add credit](https://docs.phone.wixzel.com/api-reference/billing/add-credit.md): Returns a checkout URL. Credit lands once payment settles, not when this returns. - [List API keys](https://docs.phone.wixzel.com/api-reference/api-keys/list-api-keys.md): Secrets are never returned — only a prefix and last four characters. - [Create an API key](https://docs.phone.wixzel.com/api-reference/api-keys/create-an-api-key.md): The secret is returned **once**. It cannot be retrieved again. - [Rotate an API key](https://docs.phone.wixzel.com/api-reference/api-keys/rotate-an-api-key.md): Issues a replacement and keeps the old key working for 24 hours, so a deploy can roll out without a window where neither key is valid. - [Revoke an API key](https://docs.phone.wixzel.com/api-reference/api-keys/revoke-an-api-key.md): Immediate. In-flight requests using it will fail. - [List available engines and models](https://docs.phone.wixzel.com/api-reference/engines/list-available-engines-and-models.md): What the platform can actually serve right now, with per-unit prices. Use this rather than hardcoding model ids: an engine whose provider is degraded disappears from this list before calls start failing. ## OpenAPI Specs - [openapi](/openapi.json)