---
title: "Add options to a meeting custom attribute"
method: POST
path: "/api/v1/meetings/custom-attributes/{id}/options"
tags: ["Custom Attributes"]
---

# Add options to a meeting custom attribute

`POST /api/v1/meetings/custom-attributes/{id}/options`

## Request

- Base URL: `https://api.recruitwithatlas.com`
- URL: `https://api.recruitwithatlas.com/api/v1/meetings/custom-attributes/{id}/options`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/recruitwithatlas/apis/atlas-api/docs/api/v1/meetings/custom-attributes/:id/options/post.ts> (a function with typed inputs; its response is checked against the schema)

Adds one or more selectable options to an existing `options`-type custom attribute **definition** for meeting records.

The body accepts either a single option object or an array of them (max 100). Each option takes a `value` and an optional 1-based `position`; when `position` is omitted the option is appended to the end. Inserting at an occupied position shifts existing options down. Option values must be unique within the attribute (case-insensitive) — a duplicate returns `409`. Adding options to a non-`options` attribute returns `422`.

## Path parameters

- `id` string, uuid, required: Custom attribute definition identifier

## Request body

- union
  - object
    - `value` string, required: Display label of the option. Must be unique within the attribute (case-insensitive). Leading/trailing whitespace is trimmed.
    - `position` integer: 1-based position to insert the option at; existing options at or after this position shift down. Appended to the end when omitted. Must not exceed the current option count + 1.
  - object[]
    - `value` string, required: Display label of the option. Must be unique within the attribute (case-insensitive). Leading/trailing whitespace is trimmed.
    - `position` integer: 1-based position to insert the option at; existing options at or after this position shift down. Appended to the end when omitted. Must not exceed the current option count + 1.

## Response `201`

Options added to the meeting custom attribute definition

- object
  - `status` 'ok', required
  - `data` object, required: The full attribute definition including all options (existing and newly added), sorted by position. Read the new options through `addedOptionIds`; `options` is deprecated.
    - `id` string, uuid, required: Attribute identifier. Use this when reading/writing values.
    - `name` string, required: Display name
    - `description` string, nullable, required: Optional description of the attribute's purpose
    - `type` 'options' | 'text_block' | 'text_line' | 'number_input' | 'integer' | 'date', required: Data type of the attribute
    - `multipleValues` boolean, required: When true and `type` is `options`, multiple options can be selected
    - `recordType` 'both' | 'contract' | 'permanent': Placement attributes only — which placement kinds the attribute applies to
    - `options` object[], required: Deprecated: every option of the attribute, unpaged, so it can be very large. Use `GET …/custom-attributes/{id}/options` to page and search them. Populated when type is `options`, empty array otherwise.
      - `id` string, uuid, required: Option identifier. Use this when setting a value.
      - `value` string, required: Display label
      - `position` integer, required: Sort order (ascending)
    - `createdAt` string, date-time, nullable, required: ISO 8601 timestamp when the attribute was created
    - `updatedAt` string, date-time, nullable, required: ISO 8601 timestamp when the attribute was last updated
  - `addedOptionIds` string[], required: Identifiers of the newly created options, in the order they appeared in the request

## Other responses

- `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 failed schema validation (`errors.fieldErrors`) or a business rule (`errors.formErrors`)
- `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

## Changes

- **2026-10-08** `d03098466694`: 1 info
  - response property `data/options` deprecated
- **2026-10-03** `cd4bc8bbd95e`: 1 info
  - added the optional property `error` to the response with the `422` status

[Operation history](https://skmtc.dev/recruitwithatlas/apis/atlas-api/changes/api/v1/meetings/custom-attributes/:id/options/post.md)

---

[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/158ee454751c?raw)
