> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# Phone Numbers

> Search and manage phone numbers, and bind inbound calls to handlers.

[restclient]: /docs/server-sdks/reference/python/rest/client

[list]: /docs/server-sdks/reference/python/rest/phone-numbers/list

[create]: /docs/server-sdks/reference/python/rest/phone-numbers/create

[get]: /docs/server-sdks/reference/python/rest/phone-numbers/get

[update]: /docs/server-sdks/reference/python/rest/phone-numbers/update

[delete]: /docs/server-sdks/reference/python/rest/phone-numbers/delete

[search]: /docs/server-sdks/reference/python/rest/phone-numbers/search

[setswml]: /docs/server-sdks/reference/python/rest/phone-numbers/set-swml-webhook

[setcxml]: /docs/server-sdks/reference/python/rest/phone-numbers/set-cxml-webhook

[setcxmlapp]: /docs/server-sdks/reference/python/rest/phone-numbers/set-cxml-application

[setai]: /docs/server-sdks/reference/python/rest/phone-numbers/set-ai-agent

[setflow]: /docs/server-sdks/reference/python/rest/phone-numbers/set-call-flow

[setrelayapp]: /docs/server-sdks/reference/python/rest/phone-numbers/set-relay-application

[setrelaytopic]: /docs/server-sdks/reference/python/rest/phone-numbers/set-relay-topic

Search for available phone numbers, purchase them, and manage the numbers in your
SignalWire project. This resource extends the standard CRUD pattern with a `search()`
method for discovering available numbers, uses PUT for updates, and provides typed
helpers for binding inbound calls to a handler (SWML webhook, cXML webhook, AI agent,
call flow, Relay application/topic).

Access via `client.phone_numbers` on a [`RestClient`][restclient] instance.

```python {9}
from signalwire.rest import RestClient

client = RestClient(
    project="your-project-id",
    token="your-api-token",
    host="your-space.signalwire.com",
)

available = client.phone_numbers.search(areacode="512")
for number in available.get("data", []):
    print(number["phone_number"])
```

## **Methods**

### Standard CRUD

#### [list](/docs/server-sdks/reference/python/rest/phone-numbers/list)

List phone numbers owned by the project.

#### [create](/docs/server-sdks/reference/python/rest/phone-numbers/create)

Purchase a phone number.

#### [get](/docs/server-sdks/reference/python/rest/phone-numbers/get)

Retrieve details for a specific phone number.

#### [update](/docs/server-sdks/reference/python/rest/phone-numbers/update)

Update configuration for a phone number.

#### [delete](/docs/server-sdks/reference/python/rest/phone-numbers/delete)

Release a phone number from the project.

#### [search](/docs/server-sdks/reference/python/rest/phone-numbers/search)

Search for available phone numbers to purchase.

### Typed Binding Helpers

Each helper is a one-line wrapper over [`update`][update] that sets `call_handler` to
the right value and populates the handler-specific companion field for you. Pass extra
keyword arguments through to `update` for fields the helper doesn't name explicitly.
Setting a binding auto-materializes the matching Fabric resource on the server.

#### [set\_swml\_webhook](/docs/server-sdks/reference/python/rest/phone-numbers/set-swml-webhook)

Route inbound calls to an SWML webhook URL.

#### [set\_cxml\_webhook](/docs/server-sdks/reference/python/rest/phone-numbers/set-cxml-webhook)

Route inbound calls to a cXML (LAML) webhook.

#### [set\_cxml\_application](/docs/server-sdks/reference/python/rest/phone-numbers/set-cxml-application)

Route inbound calls to an existing cXML application by ID.

#### [set\_ai\_agent](/docs/server-sdks/reference/python/rest/phone-numbers/set-ai-agent)

Route inbound calls to an AI Agent Fabric resource by ID.

#### [set\_call\_flow](/docs/server-sdks/reference/python/rest/phone-numbers/set-call-flow)

Route inbound calls to a Call Flow by ID.

#### [set\_relay\_application](/docs/server-sdks/reference/python/rest/phone-numbers/set-relay-application)

Route inbound calls to a named Relay application.

#### [set\_relay\_topic](/docs/server-sdks/reference/python/rest/phone-numbers/set-relay-topic)

Route inbound calls to a Relay topic.

## **PhoneCallHandler enum**

For callers passing `call_handler` directly to [`update`][update], the
`PhoneCallHandler` enum provides typed values. Each member is a `str` subclass, so
passing the enum member serializes to the wire value without `.value` indirection.

```python
from signalwire.rest import PhoneCallHandler

client.phone_numbers.update(
    "phone-number-id",
    call_handler=PhoneCallHandler.AI_AGENT,
    call_ai_agent_id="ai-agent-id",
)
```

| Enum member         | Wire value          | Companion field            | Auto-creates        |
| ------------------- | ------------------- | -------------------------- | ------------------- |
| `RELAY_SCRIPT`      | `relay_script`      | `call_relay_script_url`    | `swml_webhook`      |
| `LAML_WEBHOOKS`     | `laml_webhooks`     | `call_request_url`         | `cxml_webhook`      |
| `LAML_APPLICATION`  | `laml_application`  | `call_laml_application_id` | `cxml_application`  |
| `AI_AGENT`          | `ai_agent`          | `call_ai_agent_id`         | `ai_agent`          |
| `CALL_FLOW`         | `call_flow`         | `call_flow_id`             | `call_flow`         |
| `RELAY_APPLICATION` | `relay_application` | `call_relay_application`   | `relay_application` |
| `RELAY_TOPIC`       | `relay_topic`       | `call_relay_topic`         | (routes via Relay)  |

> **Note**
>
> `LAML_WEBHOOKS` (wire value `laml_webhooks`) produces a **cXML** handler, not a
> generic webhook. For SWML, use `RELAY_SCRIPT` -- or, more conveniently, the
> [`set_swml_webhook`][setswml] helper.