---
title: "Delete a custom contact field"
method: DELETE
path: "/contact-fields/{id}"
tags: ["Contact fields"]
---

# Delete a custom contact field

`DELETE /contact-fields/{id}`

## Request

- Base URL: `https://www.unitpost.com/api/v1`
- URL: `https://www.unitpost.com/api/v1/contact-fields/{id}`
- Auth: HTTP bearer

Permanently delete a custom field definition and strip its stored value from every contact. Any template variable that referenced it will resolve to empty. On more than 5,000 contacts the strip runs as a background job and the response is `202` with the job's progress instead of `204`. This can't be undone — recreate the field with [Create a custom contact field](#post-contact-fields) if you need it back. Requires the `contacts:write` capability.

## Response `202`

Accepted: the field held a value on more than 5,000 contacts, so the strip runs as a background job. The field is already gone from lists; `GET /contact-fields/{id}` answers 404 once the job's final step removed it. The body is the job; follow it with `GET /jobs/{id}` until its `status` is `COMPLETED` (or `FAILED`).

- Job
  - `object` 'job', required
  - `id` string, required
  - `kind` string, required
  - `status` 'QUEUED' | 'RUNNING' | 'COMPLETED' | 'FAILED' | 'CANCELED', required
  - `total` integer, nullable, required
  - `processed` integer, required
  - `failed` integer, required
  - `error` string, nullable, required
  - `created_at` string, required
  - `completed_at` string, nullable, required

## Other responses

- `204`: Deleted.
- `401`: Missing or invalid API key.
- `404`: Contact field not found.
- `409`: Refused: a dynamic segment still filters on the key, the workspace is protected, or a delete / rename of this field is already running (`job_in_progress`; the `Location` header names that job).

---

[API](https://skmtc.dev/unitpost/apis/unitpost-api.md) · [All operations](https://skmtc.dev/unitpost/apis/unitpost-api/llms.txt) · [OpenAPI document](https://skmtc.dev/unitpost/apis/unitpost-api/revisions/86ff7c890967?raw)
