---
title: "List Phone Numbers"
method: GET
path: "/v1/agent/phone-numbers"
tags: ["Phone Numbers"]
---

# List Phone Numbers

`GET /v1/agent/phone-numbers`

## Request

- Base URL: `https://api.fish.audio`
- URL: `https://api.fish.audio/v1/agent/phone-numbers`
- Auth: HTTP bearer

List your team's phone numbers, newest first. Released numbers are gone
for good and never appear. Look an id up by E.164 with `phone_number`, or
filter with `agent_id` to see one agent's numbers. Paginate with `cursor`
(follow `next_cursor` while `has_more` is true) or with `page` for offset
pagination with a `total` count — the two are mutually exclusive.

## Query parameters

- `phone_number` string, nullable
- `agent_id` string, nullable
- `cursor` string, nullable
- `page` integer, nullable
- `include_total` boolean
- `page_size` integer

## Response `200`

Request fulfilled, document follows

- object
  - `phone_numbers` PublicPhoneNumberEntity[], required
    - `phone_number_id` string, required
    - `workspace_id` string, required
    - `phone_number` string, required: E.164, e.g. +14155550123.
    - `provider` 'livekit' | 'twilio' | 'sip' | 'whatsapp', required
    - `label` string
    - `agent_id` string, nullable, required: Inbound calls route to this agent; unbound numbers ring busy.
    - `transfer_caller_id` 'agent_number' | 'original_caller', nullable: Managed `twilio` numbers: the caller ID a transfer target sees, on cold and warm transfers alike. `agent_number` shows this number, `original_caller` shows the caller's own number (a warm transfer falls back to this number when the caller withholds theirs). `null` for imported `sip` numbers, whose carrier decides.
    - `caller_id_sync_status` 'synced' | 'pending' | 'error' | 'carrier_managed': `synced` once the carrier confirmed the policy, `pending` while it is being applied, `error` when the last attempt failed (send `retry_caller_id_sync`), `carrier_managed` for imported `sip` numbers.
    - `caller_id_sync_error` string: Why the last synchronization failed; empty otherwise.
    - `status` 'provisioning' | 'active' | 'error' | 'released', required
    - `status_detail` string: What failed when status is `error`; empty otherwise.
    - `supports_outbound` boolean: Whether the number can place calls (outbound and warm-transfer consult legs): managed `twilio` always, imported `sip` only when a termination was configured.
    - `termination_uri` string, nullable: Imported `sip` numbers: the customer trunk's termination host.
    - `inbound_auth_username` string, nullable: Imported `sip` numbers: the inbound digest username. Passwords are never echoed.
    - `inbound_allowed_addresses` string[]: Imported `sip` numbers: allowed source IPs/CIDRs.
    - `termination_transport` string, nullable: Imported `sip` numbers: termination transport.
    - `termination_auth_username` string, nullable: Imported `sip` numbers: the termination digest username. Passwords are never echoed.
    - `termination_headers` object: Imported `sip` numbers: custom SIP headers added to every outbound INVITE through the termination.
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `has_more` boolean, required
  - `next_cursor` string, nullable
  - `total` integer, nullable

## Other responses

- `400`: Bad request syntax or unsupported method
- `401`: No permission -- see authorization schemes
- `404`: Nothing matches the given URI
- `503`: The server cannot process the request due to a high load

## Changes

- **2026-11-03** `42ac421f7a12`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fish/apis/fishaudio-openapi/changes/v1/agent/phone-numbers/get.md)

---

[API](https://skmtc.dev/fish/apis/fishaudio-openapi.md) - [All operations](https://skmtc.dev/fish/apis/fishaudio-openapi/llms.txt) - [OpenAPI document](https://skmtc.dev/fish/apis/fishaudio-openapi/revisions/42ac421f7a12?raw)
