---
title: "Retire a phone number (soft, default) or hard-delete (force=true, internal only)"
method: DELETE
path: "/v1/communication/phone-numbers/{phone_number_id}"
tags: ["communication"]
---

# Retire a phone number (soft, default) or hard-delete (force=true, internal only)

`DELETE /v1/communication/phone-numbers/{phone_number_id}`

## Request

- The document declares no server URL.
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/oneloop-hq/apis/feather-api/docs/v1/communication/phone-numbers/:phone_number_id/delete.ts> (a function with typed inputs; its response is checked against the schema)

Retire (default) or hard-delete (``force=true``, internal only) a
phone number.

Default — soft-retire (ENG-847, HV-17): flips status to RETIRED, tears
down per-number SIP infra best-effort, stamps actor/timestamp, and keeps
the row and every dependent evidence row (SMS/voice usage, and the
ENG-846 durable chunk/attempt/outbox/operation chain) intact. This is
now the day-to-day, audited, reversible path (see ``.../restore``).

``force=true`` is the internal-only escape hatch that performs the
actual, permanent hard delete (evidence-safe: dependent SMS/voice usage
rows detach via ``ON DELETE SET NULL`` rather than cascading away) — the
explicit, policy-driven purge, not an accidental cascade. Non-internal
callers that pass ``force=true`` are rejected with 403.

## Path parameters

- `phone_number_id` string, uuid, required

## Query parameters

- `force` boolean

## Response `204`

Successful Response

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `404`: Resource not found
- `422`: Validation Error

## Changes

- **2026-08-12** `5a5597ebb2d6`: 6 info
  - added the optional property `retry_after` to the response with the `400` status
  - added the optional property `retry_after` to the response with the `401` status
  - added the optional property `retry_after` to the response with the `404` status
  - added the optional property `retryable` to the response with the `400` status
  - …2 more

[Operation history](https://skmtc.dev/oneloop-hq/apis/feather-api/changes/v1/communication/phone-numbers/:phone_number_id/delete.md)

---

[API](https://skmtc.dev/oneloop-hq/apis/feather-api.md) - [All operations](https://skmtc.dev/oneloop-hq/apis/feather-api/llms.txt) - [OpenAPI document](https://skmtc.dev/oneloop-hq/apis/feather-api/revisions/9cd7291d4228?raw)
