> For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

# create

> Purchase a phone number.

Purchase a phone number. The exact keyword arguments depend on the number being
purchased (typically obtained from a prior `search()` call).

### Schema

```yaml
openapi: 3.1.0
info:
  title: API
  version: 1.0.0
paths:
  /api/relay/rest/phone_numbers:
    post:
      operationId: purchase_phone_number
      summary: Purchase phone number
      description: >-
        Purchases a phone number.


        #### Permissions


        The API token used to authenticate must have the following scope(s)
        enabled to make a successful request: _Numbers_.


        [Learn more about API scopes](/docs/platform/your-signalwire-api-space).
      tags:
        - subpackage_phoneNumbers
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhoneNumberResponse'
        '400':
          description: The request is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode400'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode401'
        '422':
          description: The request failed validation. See errors for details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.ValidationError'
        '500':
          description: An internal server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode500'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchasePhoneNumberRequest'
servers:
  - url: https://%7BYour_Space_Name%7D.signalwire.com
    description: SignalWire API
components:
  schemas:
    PurchasePhoneNumberRequest:
      type: object
      properties:
        number:
          type: string
          description: The phone number in E164 format.
      required:
        - number
      description: Request body for purchasing a phone number.
      title: PurchasePhoneNumberRequest
    uuid:
      type: string
      format: uuid
      description: Universal Unique Identifier.
      title: uuid
    PhoneNumberCapability:
      type: string
      enum:
        - voice
        - sms
        - mms
        - fax
      description: Phone number capability.
      title: PhoneNumberCapability
    PhoneNumberType:
      type: string
      enum:
        - toll-free
        - longcode
      description: Phone number type.
      title: PhoneNumberType
    PhoneNumberE911Status:
      type: string
      enum:
        - pending
        - active
        - failed
        - pending_removal
        - unregistered
      description: E911 provisioning status of a phone number.
      title: PhoneNumberE911Status
    PhoneNumberCallHandler:
      type: string
      enum:
        - relay_context
        - relay_topic
        - relay_script
        - relay_application
        - relay_connector
        - relay_sip_endpoint
        - relay_verto_endpoint
        - laml_webhooks
        - laml_application
        - dialogflow
        - video_room
        - call_flow
        - ai_agent
        - fabric_subscriber
        - sip_gateway
        - call_queue
      description: Call handler type for phone numbers.
      title: PhoneNumberCallHandler
    CallReceiveMode:
      type: string
      enum:
        - voice
        - fax
      description: Call receive mode.
      title: CallReceiveMode
    HttpMethod:
      type: string
      enum:
        - GET
        - POST
      description: HTTP method type.
      title: HttpMethod
    PhoneNumberMessageHandler:
      type: string
      enum:
        - relay_context
        - relay_topic
        - relay_application
        - laml_webhooks
        - laml_application
      description: Message handler type for phone numbers.
      title: PhoneNumberMessageHandler
    PhoneNumberResponse:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/uuid'
          description: The unique identifier of the phone number.
        number:
          type: string
          description: The phone number in E.164 format.
        name:
          type:
            - string
            - 'null'
          description: >-
            The name given to the phone number. Helps to distinguish different
            phone numbers within your project.
        capabilities:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumberCapability'
          description: A list of communication methods this phone number supports.
        number_type:
          $ref: '#/components/schemas/PhoneNumberType'
          description: The type of number this is defined as.
        e911_address_id:
          oneOf:
            - $ref: '#/components/schemas/uuid'
            - type: 'null'
          description: The E911 address ID associated with this phone number.
        e911_status:
          oneOf:
            - $ref: '#/components/schemas/PhoneNumberE911Status'
            - type: 'null'
          description: >-
            The E911 provisioning status for this phone number. `null` when the
            number has never had an E911

            address assigned. Once an address is assigned the value is `pending`
            while the carrier processes

            the order, then `active` once the carrier confirms the registration,
            or `failed` if the carrier

            does not confirm it. Removing the address sets `pending_removal`,
            and the value becomes

            `unregistered` once the carrier confirms the removal.
        created_at:
          type: string
          format: date-time
          description: The date the number was added to your project.
        updated_at:
          type: string
          format: date-time
          description: The date the number was last updated.
        next_billed_at:
          type:
            - string
            - 'null'
          format: date-time
          description: The next date the number will be billed for.
        call_handler:
          oneOf:
            - $ref: '#/components/schemas/PhoneNumberCallHandler'
            - type: 'null'
          description: What type of handler you want to run on inbound calls.
        calling_handler_resource_id:
          oneOf:
            - $ref: '#/components/schemas/uuid'
            - type: 'null'
          description: The unique identifier of the calling handler resource.
        call_receive_mode:
          $ref: '#/components/schemas/CallReceiveMode'
          description: How do you want to receive the incoming call.
        call_request_url:
          type:
            - string
            - 'null'
          description: >-
            The URL to make a request to when using the laml_webhooks call
            handler.
        call_request_method:
          oneOf:
            - $ref: '#/components/schemas/HttpMethod'
            - type: 'null'
          description: >-
            The HTTP method to use when making a request to the
            call_request_url.
        call_fallback_url:
          type:
            - string
            - 'null'
          description: >-
            The fallback URL to make a request to when using the laml_webhooks
            call handler and the call_request_url fails.
        call_fallback_method:
          oneOf:
            - $ref: '#/components/schemas/HttpMethod'
            - type: 'null'
          description: >-
            The HTTP method to use when making a request to the
            call_fallback_url.
        call_status_callback_url:
          type:
            - string
            - 'null'
          description: >-
            The URL to make status callbacks to when using the laml_webhooks
            call handler.
        call_status_callback_method:
          oneOf:
            - $ref: '#/components/schemas/HttpMethod'
            - type: 'null'
          description: >-
            The HTTP method to use when making a request to the
            call_status_callback_url.
        call_laml_application_id:
          type:
            - string
            - 'null'
          description: >-
            The ID of the LaML Application to use when using the
            laml_application call handler.
        call_dialogflow_agent_id:
          type:
            - string
            - 'null'
          description: >-
            The ID of the Dialogflow Agent to start when using the dialogflow
            call handler.
        call_relay_topic:
          type:
            - string
            - 'null'
          description: >-
            A string representing the Relay topic to forward incoming calls to.
            This is only used (and required) when call_handler is set to
            relay_topic.
        call_relay_topic_status_callback_url:
          type:
            - string
            - 'null'
          description: >-
            A string representing a URL to send status change messages to. This
            is only used (and required) when call_handler is set to relay_topic.
        call_relay_script_url:
          type:
            - string
            - 'null'
          description: >-
            The URL to make a request to when using the relay_script call
            handler. The URL must respond with a valid SWML script.
        call_relay_context:
          type:
            - string
            - 'null'
          description: >-
            The name of the Relay Context to send this call to when using the
            relay_context call handler.
        call_relay_context_status_callback_url:
          type:
            - string
            - 'null'
          description: >-
            A string representing a URL to send status change messages to. This
            is only used (and required) when call_handler is set to
            relay_context.
        call_relay_application:
          type:
            - string
            - 'null'
          description: >-
            The name of the Relay Application to send this call to when using
            the relay_application call handler.
        call_relay_connector_id:
          type:
            - string
            - 'null'
          description: >-
            The ID of the Relay Connector to send this call to when using the
            relay_connector call handler.
        call_sip_endpoint_id:
          oneOf:
            - $ref: '#/components/schemas/uuid'
            - type: 'null'
          description: >-
            The ID of the Relay SIP Endpoint to send this call to when using the
            relay_sip_endpoint call handler.
        call_verto_resource:
          type:
            - string
            - 'null'
          description: >-
            The name of the Verto Relay Endpoint to send this call to when using
            the relay_verto_endpoint call handler.
        call_video_room_id:
          oneOf:
            - $ref: '#/components/schemas/uuid'
            - type: 'null'
          description: >-
            The ID of the Video Room to send this call to when using the
            video_room call handler.
        message_handler:
          oneOf:
            - $ref: '#/components/schemas/PhoneNumberMessageHandler'
            - type: 'null'
          description: What type of handler you want to run on inbound messages.
        messaging_handler_resource_id:
          oneOf:
            - $ref: '#/components/schemas/uuid'
            - type: 'null'
          description: The unique identifier of the messaging handler resource.
        message_request_url:
          type:
            - string
            - 'null'
          description: >-
            The URL to make a request to when using the laml_webhooks message
            handler.
        message_request_method:
          oneOf:
            - $ref: '#/components/schemas/HttpMethod'
            - type: 'null'
          description: >-
            The HTTP method to use when making a request to the
            message_request_url.
        message_fallback_url:
          type:
            - string
            - 'null'
          description: >-
            The fallback URL to make a request to when using the laml_webhooks
            message handler and the message_request_url fails.
        message_fallback_method:
          oneOf:
            - $ref: '#/components/schemas/HttpMethod'
            - type: 'null'
          description: >-
            The HTTP method to use when making a request to the
            message_fallback_url.
        message_laml_application_id:
          type:
            - string
            - 'null'
          description: >-
            The ID of the LaML Application to use when using the
            laml_application message handler.
        message_relay_topic:
          type:
            - string
            - 'null'
          description: >-
            The name of the Relay Topic to send this message to when using the
            relay_topic message handler.
        message_relay_context:
          type:
            - string
            - 'null'
          description: >-
            The name of the Relay Context to send this message to when using the
            relay_context message handler.
        country_code:
          type:
            - string
            - 'null'
          description: The ISO 3166-1 alpha-2 country code of the phone number.
      required:
        - id
        - number
        - name
        - capabilities
        - number_type
        - e911_address_id
        - e911_status
        - created_at
        - updated_at
        - next_billed_at
        - call_handler
        - calling_handler_resource_id
        - call_receive_mode
        - call_request_url
        - call_request_method
        - call_fallback_url
        - call_fallback_method
        - call_status_callback_url
        - call_status_callback_method
        - call_laml_application_id
        - call_dialogflow_agent_id
        - call_relay_topic
        - call_relay_topic_status_callback_url
        - call_relay_script_url
        - call_relay_context
        - call_relay_context_status_callback_url
        - call_relay_application
        - call_relay_connector_id
        - call_sip_endpoint_id
        - call_verto_resource
        - call_video_room_id
        - message_handler
        - messaging_handler_resource_id
        - message_request_url
        - message_request_method
        - message_fallback_url
        - message_fallback_method
        - message_laml_application_id
        - message_relay_topic
        - message_relay_context
        - country_code
      description: Response containing a single phone number.
      title: PhoneNumberResponse
    TypesStatusCodesStatusCode400Error:
      type: string
      enum:
        - Bad Request
      title: TypesStatusCodesStatusCode400Error
    Types.StatusCodes.StatusCode400:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/TypesStatusCodesStatusCode400Error'
      required:
        - error
      description: The request is invalid.
      title: Types.StatusCodes.StatusCode400
    TypesStatusCodesStatusCode401Error:
      type: string
      enum:
        - Unauthorized
      title: TypesStatusCodesStatusCode401Error
    Types.StatusCodes.StatusCode401:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/TypesStatusCodesStatusCode401Error'
      required:
        - error
      description: Access is unauthorized.
      title: Types.StatusCodes.StatusCode401
    Types.StatusCodes.SpaceApiErrorItem:
      type: object
      properties:
        detail:
          type: string
          description: A description of what caused the error.
        status:
          type: string
          description: The HTTP status code.
        title:
          type: string
          description: A short summary of the error type.
        code:
          type: string
          description: The error code.
      required:
        - detail
        - status
        - title
        - code
      description: Details about a specific validation error.
      title: Types.StatusCodes.SpaceApiErrorItem
    Types.StatusCodes.ValidationError:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Types.StatusCodes.SpaceApiErrorItem'
          description: List of validation errors.
      required:
        - errors
      description: The request failed validation. See errors for details.
      title: Types.StatusCodes.ValidationError
    TypesStatusCodesStatusCode500Error:
      type: string
      enum:
        - Internal Server Error
      title: TypesStatusCodesStatusCode500Error
    Types.StatusCodes.StatusCode500:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/TypesStatusCodesStatusCode500Error'
      required:
        - error
      description: An internal server error occurred.
      title: Types.StatusCodes.StatusCode500

```

## **Response Example**

### Response (200)

```json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "number": "+15558675309",
  "name": "Jenny",
  "capabilities": [
    "voice"
  ],
  "number_type": "toll-free",
  "e911_address_id": "string",
  "e911_status": "active",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z",
  "next_billed_at": "2024-01-15T09:30:00Z",
  "call_handler": "relay_context",
  "calling_handler_resource_id": "fe4093d9-58c2-4931-b4b9-5679f82652c6",
  "call_receive_mode": "voice",
  "call_request_url": "string",
  "call_request_method": "POST",
  "call_fallback_url": "string",
  "call_fallback_method": "POST",
  "call_status_callback_url": "string",
  "call_status_callback_method": "POST",
  "call_laml_application_id": "string",
  "call_dialogflow_agent_id": "string",
  "call_relay_topic": "office",
  "call_relay_topic_status_callback_url": "https://myapplication/handle_relay_callbacks",
  "call_relay_script_url": "https://example.signalwire.com/relay-bins/60e2ba7b-366e-44de-84e3-0c76cfccf1cc",
  "call_relay_context": "my_relay_app",
  "call_relay_context_status_callback_url": "https://myapplication/handle_relay_callbacks",
  "call_relay_application": "my_relay_app",
  "call_relay_connector_id": "string",
  "call_sip_endpoint_id": "string",
  "call_verto_resource": "string",
  "call_video_room_id": "fe4093d9-58c2-4931-b4b9-5679f82652c6",
  "message_handler": "relay_application",
  "messaging_handler_resource_id": "fe4093d9-58c2-4931-b4b9-5679f82652c6",
  "message_request_url": "string",
  "message_request_method": "POST",
  "message_fallback_url": "string",
  "message_fallback_method": "POST",
  "message_laml_application_id": "string",
  "message_relay_topic": "string",
  "message_relay_context": "my_relay_app",
  "country_code": "US"
}
```

## **Example**

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

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

# Purchase the first available number from a search
available = client.phone_numbers.search(areacode="512", max_results=1)
numbers = available.get("data", [])
if numbers:
    purchased = client.phone_numbers.create(number=numbers[0]["number"])
    print("Purchased:", purchased["number"])
```