> ## Documentation Index
> Fetch the complete documentation index at: https://docs.verbex.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Delete a phone number

> Remove a phone number from your account. This action:

- Removes the phone number from your account
- Disconnects any AI agent associations
- Cleans up the SIP trunk configuration
- Removes routing rules and dispatch configurations

Returns the deleted phone number record.



## OpenAPI

````yaml /api-reference/openapi.json delete /v1/phone-numbers/{phone_number_id}
openapi: 3.1.0
info:
  title: Verbex Platform API
  description: API for managing AI agents, calls, phone numbers, and more.
  version: 1.0.0
servers: []
security: []
tags:
  - name: Knowledge Bases
    description: >-
      Create and manage knowledge bases, ingest documents into them, and search
      them semantically.


      **Authentication.** Every request carries a bearer token: `Authorization:
      Bearer <API_TOKEN>`. That is the only credential a client sends. The
      gateway resolves your identity from it and injects the tenant headers the
      service reads internally, so clients never send `x-user-org-id` or
      `x-verbex-id` themselves.


      **Tenancy is enforced on every route.** A knowledge base belongs to one
      organization and one user. Requesting one your token does not own returns
      `404 Knowledge base not found`, never `403`. This is deliberate: a
      nonexistent ID, a malformed ID and someone else's ID are indistinguishable
      in the response, so the API cannot be used to probe for other tenants'
      data. If you get a `404` on an ID you are certain exists, suspect the
      token before you suspect the ID.


      **Ingestion is asynchronous.** File upload and website crawl both answer
      `202` as soon as the material is stored and the job is queued. Parsing,
      chunking, embedding and indexing happen afterwards in a worker. Poll the
      document status endpoint until it reports `completed` before expecting
      search to see the content. That gap is the most common source of "why
      isn't my data showing up".


      **There is no document update endpoint.** Every submission mints a new
      `document_id`, so re-uploading a file or re-crawling the same URLs creates
      a second document while the first remains. To refresh material, delete
      then resubmit — and note that the sequence is not atomic.
  - name: AI Agents v3
    description: >-
      Create, read, update and delete AI agents. v3 selects the LLM,
      speech-to-text model and voice by catalog id, and wraps every response in
      a standard envelope. It replaces the deprecated AI Agents v2 operations,
      which stop working on November 30, 2026. See [Migrate from v2 to
      v3](/api-reference/ai-agents-v3/migrate-from-v2).
  - name: LLM Models
    description: >-
      The LLM model catalog. Look up the `llm_model_id` to send as `llm.llm_id`
      when you create or update an agent.
  - name: Speech Providers
    description: >-
      The speech-to-text and text-to-speech provider catalogs. Look up the
      `provider_id`, `model_id` and `voice_id` to send when you create or update
      an agent.
paths:
  /v1/phone-numbers/{phone_number_id}:
    delete:
      tags:
        - Phone Numbers
      summary: Delete a phone number
      description: |-
        Remove a phone number from your account. This action:

        - Removes the phone number from your account
        - Disconnects any AI agent associations
        - Cleans up the SIP trunk configuration
        - Removes routing rules and dispatch configurations

        Returns the deleted phone number record.
      operationId: delete_phone_number_v1_phone_numbers__phone_number_id__delete
      parameters:
        - name: phone_number_id
          in: path
          required: true
          schema:
            type: string
            title: Phone Number Id
      responses:
        '200':
          description: Phone number successfully deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSIPPhoneNumberResponse'
        '401':
          description: Unauthorized - missing or invalid API key (returned by the gateway).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAuthErrorResponse'
        '404':
          description: Phone number not found, or not in your organization/workspace.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/app__phone_numbers__schemas__ErrorResponse
              example:
                status: 404
                type: PHONE_NOT_FOUND
                message: Phone entity for delete is not found
                trace_id: 341b5325-a0be-4533-85dd-6f697476dfc3
                timestamp: '2026-11-01T10:00:00Z'
                path: /v1/phone-numbers/6650f1c2a9b3e45d7c8f0a12
        '500':
          description: Internal server error while removing SIP or routing configuration.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/app__phone_numbers__schemas__ErrorResponse
              examples:
                kamailio:
                  value:
                    status: 500
                    type: KAMAILIO_SYNC_ERROR
                    message: Failed to delete Kamailio SIP tables
                    trace_id: 341b5325-a0be-4533-85dd-6f697476dfc3
                    timestamp: '2026-11-01T10:00:00Z'
                    path: /v1/phone-numbers/6650f1c2a9b3e45d7c8f0a12
                internal:
                  value:
                    status: 500
                    type: INTERNAL_ERROR
                    message: An unexpected error occurred
                    trace_id: 341b5325-a0be-4533-85dd-6f697476dfc3
                    timestamp: '2026-11-01T10:00:00Z'
                    path: /v1/phone-numbers/6650f1c2a9b3e45d7c8f0a12
components:
  schemas:
    GetSIPPhoneNumberResponse:
      properties:
        _id:
          type: string
          title: Id
          description: Unique identifier for this phone number record
        provider:
          type: string
          const: sip
          title: Provider
          description: Phone number provider
        phone_number:
          type: string
          title: Phone Number
          description: The phone number
        friendly_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Friendly Name
          description: >-
            A human-readable label for this phone number. Cannot be blank when
            provided.
        sip_termination_uri:
          anyOf:
            - type: string
            - type: 'null'
          title: Sip Termination Uri
          description: >-
            The SIP URI that outbound calls are sent to. The host must be an IP
            address or domain. Optional for inbound-only numbers.
        sip_trunk_username:
          anyOf:
            - type: string
            - type: 'null'
          title: Sip Trunk Username
          description: Username for authenticating with the SIP trunk provider
        sip_trunk_password:
          anyOf:
            - type: string
            - type: 'null'
          title: Sip Trunk Password
          description: Password for authenticating with the SIP trunk provider
        inbound_agent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Inbound Agent Id
          description: >-
            ID of the AI agent that handles incoming calls to this number.
            Cannot be blank when provided.
        outbound_agent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Outbound Agent Id
          description: >-
            ID of the AI agent used for outbound calls from this number. Cannot
            be blank when provided.
        sip_infra_region:
          anyOf:
            - type: string
            - type: 'null'
          title: Sip Infra Region
          description: The infrastructure region for SIP routing
        sip_infra_zones:
          anyOf:
            - type: array
              items:
                type: string
            - type: 'null'
          title: Sip Infra Zones
          description: >-
            Zones within a multi-zone `sip_infra_region` to register the number
            on. The zones that come up are returned as `availability_zones`.
            Only for organizations with multi-zone routing enabled.
        call_concurrency:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Call Concurrency
          description: Maximum number of concurrent calls allowed on this number
        max_concurrent_inbound_calls:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Max Concurrent Inbound Calls
          description: Maximum number of concurrent inbound calls
        max_concurrent_outbound_calls:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Max Concurrent Outbound Calls
          description: Maximum number of concurrent outbound calls
        expires:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Expires
          description: SIP registration expiry, in seconds
        advanced:
          anyOf:
            - $ref: '#/components/schemas/AdvancedSipConfig'
            - type: 'null'
          title: Advanced
          description: Advanced SIP configuration
        availability_zones:
          anyOf:
            - type: array
              items:
                type: string
            - type: 'null'
          title: Availability Zones
          description: >-
            Zones the number is registered and available on. Omitted when not
            set.
        workspace_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Workspace Id
          description: Workspace the phone number belongs to
      type: object
      required:
        - phone_number
      title: GetSIPPhoneNumberResponse
      x-unpublished-properties:
        _note: Hidden until published. To publish, move these back into `properties`.
        inbound_sip_headers:
          anyOf:
            - $ref: '#/components/schemas/SipHeaderConfig'
            - type: 'null'
          title: Inbound Sip Headers
          description: Custom inbound SIP header configuration
    GatewayAuthErrorResponse:
      type: object
      title: GatewayAuthErrorResponse
      description: >-
        Returned by the API gateway when the API key is missing or invalid (the
        request never reaches the service).
      properties:
        error:
          type: string
          title: Error
          example: Authentication
        message:
          type: string
          title: Message
          example: Authentication failed
        traceId:
          type: string
          title: Trace Id
          example: e679120f-1d1c-41d2-947c-34e194d5a4a1
    app__phone_numbers__schemas__ErrorResponse:
      properties:
        status:
          type: integer
          title: Status
          description: HTTP status code
        type:
          type: string
          title: Type
          description: |-
            Error type. Each type always maps to the same HTTP status:

            | HTTP | `type` |
            |---|---|
            | 400 | `BAD_REQUEST` |
            | 404 | `NOT_FOUND`, `PHONE_NOT_FOUND`, `AGENT_NOT_FOUND` |
            | 409 | `PHONE_ALREADY_EXISTS`, `CONFLICT` |
            | 422 | `VALIDATION_ERROR`, `MISSING_REQUIRED_FIELD` |
            | 500 | `INTERNAL_ERROR`, `KAMAILIO_SYNC_ERROR` |
          enum:
            - VALIDATION_ERROR
            - MISSING_REQUIRED_FIELD
            - NOT_FOUND
            - PHONE_NOT_FOUND
            - AGENT_NOT_FOUND
            - CONFLICT
            - PHONE_ALREADY_EXISTS
            - BAD_REQUEST
            - KAMAILIO_SYNC_ERROR
            - INTERNAL_ERROR
        message:
          type: string
          title: Message
          description: Human-readable error message
        trace_id:
          type: string
          title: Trace Id
          description: Trace identifier to share with support
        details:
          type: object
          title: Details
          description: >-
            Additional error details. For body validation errors it holds
            `fields` (field name -> message). Omitted when empty.
        timestamp:
          type: string
          format: date-time
          title: Timestamp
          description: When the error occurred (UTC)
        path:
          type: string
          title: Path
          description: Request path that produced the error
      type: object
      required:
        - status
        - type
        - message
      title: PhoneNumberErrorResponse
      example:
        status: 422
        type: VALIDATION_ERROR
        message: >-
          Invalid phone number format: '12'. Must be an optional '+' followed by
          3 to 20 digits (e.g., +1234567890 or 999)
        timestamp: '2026-11-01T10:00:00Z'
        path: /v1/phone-numbers
    AdvancedSipConfig:
      type: object
      title: AdvancedSipConfig
      description: Advanced SIP configuration
      properties:
        realm:
          anyOf:
            - type: string
            - type: 'null'
          title: Realm
          description: >-
            SIP realm. Defaults to the SIP domain when empty. Cannot be blank
            when provided.
          examples:
            - asterisk
        ip:
          anyOf:
            - type: string
            - type: 'null'
          title: Ip
          description: Carrier IP address or CIDR to allow (e.g. `1.2.3.4/24`)
          examples:
            - 1.2.3.4/24
        prefix:
          anyOf:
            - type: string
              pattern: ^\d+$
            - type: 'null'
          title: Prefix
          description: Dial prefix (digits only) prepended to the outbound trunk username
          examples:
            - '0'
        register:
          anyOf:
            - type: boolean
              default: true
            - type: 'null'
          title: Register
          description: Whether to register outbound to the carrier

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.