# Programmable Voice

Programmable Voice lets you place and control phone calls from your own application. Create outbound calls with a REST API call, and script what happens on a live call (inbound or outbound) with OneML, an XML markup you return from a webhook URL on your own server. Use it to build IVR menus, call forwarding, voicemail, automated outbound notifications, and any other workflow that needs to originate or control a phone call in real time.

## How a call is controlled

PressOne controls every call, inbound or outbound, the same way: it requests a URL on your server and executes the OneML document your server returns. There is no separate mechanism for inbound versus outbound calls: both are driven by the same webhook loop.

1. A call event occurs: an inbound call arrives at one of your numbers, or you originate an outbound call through the REST API.
2. PressOne requests your configured webhook URL, sending call parameters such as `CallSid`, `From`, and `To`.
3. Your server returns a OneML document, and PressOne executes it verb by verb (speaking prompts, collecting input, recording audio, or bridging the call to another number) until the document ends or a verb ends the call.

Your server can return a different OneML document at every step, so a call can move through menus, hold music, agent transfers, or voicemail entirely under your control.

## Compatibility

OneML is compatible with Twilio's TwiML, and the REST surface mirrors the `2010-04-01` API, so most existing TwiML documents and integrations run unmodified. See [Twilio compatibility](/voice/twilio-compatibility) for the exact matrix of supported and unsupported features.

## Next steps

| Page | Description |
|------|-------------|
| [Quickstart](/voice/quickstart) | Make your first call in a few minutes. |
| [Receiving calls](/voice/receiving-calls) | Answer inbound calls and build an IVR menu. |
| [Webhooks](/voice/webhooks) | Request format, standard parameters, and signature verification. |
| [Status callbacks](/voice/status-callbacks) | Get notified as an outbound call moves through its lifecycle. |
| [Recording calls](/voice/recording-calls) | Record calls and retrieve the resulting audio. |
| [Forwarding calls](/voice/forwarding-calls) | Bridge a call to another number with `<Dial>`. |
| [OneML reference](/voice/oneml/overview) | Every OneML verb and attribute. |
| [Order-tracking tutorial](/voice/tutorials/order-tracking-line) | Build a complete order-status line end to end. |
| [API reference](/api/voice) | REST endpoints for creating, listing, and managing calls. |
