---
title: "Append a custom attribute option to a person"
method: POST
path: "/api/v1/people/{id}/custom-attributes/{attributeId}/values"
tags: ["Custom Attributes"]
---

# Append a custom attribute option to a person

`POST /api/v1/people/{id}/custom-attributes/{attributeId}/values`

Adds a single option selection to an `options`-type custom attribute on a person record **without replacing the existing selections** — unlike `PATCH /people/{id}`, which replaces all values of each attribute it receives.

Appending an option that is already selected is idempotent: the existing selection is returned with `200` and no duplicate is created. For single-select attributes (`multipleValues: false`) the append is rejected with `409` when another value is already set.

Returns `404` if the attribute, option, or person does not exist for this agency, and `422` if the attribute is not of type `options`.

## Path parameters

- `id` string, uuid, required — Record identifier (person or company ID)
- `attributeId` string, uuid, required — Custom attribute ID

## Request body

- object
  - `optionId` string, uuid, required — Option to select on the record. Must belong to the attribute in the URL.

## Response `200`

Option was already selected (idempotent no-op)

- object
  - `status` 'ok', required
  - `data` object, required
    - `id` string, uuid, required — Identifier of the stored value row
    - `customAttributeId` string, uuid, required — Attribute the value belongs to
    - `optionId` string, uuid, nullable, required — The selected option

## Other responses

- `201` — Option appended
- `401` — Unauthorized - missing or invalid API key
- `404` — Resource not found
- `409` — Conflict - the request cannot be fulfilled because of a conflict with the current state of the resource
- `422` — Validation error - the request body or query parameters failed validation
- `429` — Too many requests - the caller has exceeded the per-agency rate limit for the tier this endpoint counts against (default per minute: 1200 read / 400 write / 60 upload). Inspect the `RateLimit-*` headers — returned on every response, not only on 429s — and back off until the window resets. See the "Rate limits" section of the introduction for details.
- `500` — Internal server error

---

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