---
title: "Set/clear attribute values on a person"
method: PUT
path: "/api/v1/ackdb/persons/{id}/attributes"
tags: ["ackDB"]
---

# Set/clear attribute values on a person

`PUT /api/v1/ackdb/persons/{id}/attributes`

## Request

- Base URL: `http://localhost:3009`
- URL: `http://localhost:3009/api/v1/ackdb/persons/{id}/attributes`
- Auth: HTTP bearer

`:id` = person id, email, or LinkedIn URL (durable person keys are globally unique, so a key hit is unambiguous — there is no AMBIGUOUS_IDENTITY case here, unlike contacts). Accepts person-scope keys only. Same all-or-nothing validation, null-clears-DELETEs-the-row, and no-op-writes-emit-nothing semantics as the other two variants.

Every real change emits `person.attribute.changed` on the person timeline with `entityId` and `contactId` null, including for humans with no affiliations. Existing employers do not own the change. Historical company-associated `trait.updated` rows remain readable.

## Path parameters

- `id` string, required

## Request body

- AckdbAttributePutValuesRequest: Set/clear attribute values on one record. `null` clears a value (DELETEs the row). All-or-nothing: every key/value is validated before anything is written.
  - `values` object, required: Map of attribute key → new value (or null to clear). Must be non-empty.
  - `actor` string: Who made the change — recorded as the value row's updatedBy and the timeline event's actor (person.attribute.changed for people, trait.updated for companies/contacts). Defaults to "api". Observe/agent write paths stamp the real user automatically.

## Response `200`

{ entityId (always null), personId, applied: {key: value}, cleared: [key], updatedAt }.

- object
  - `data` unknown, required

## Other responses

- `400`: VALIDATION_ERROR — empty/invalid `values` object, or per-key failures; details: [{ key, error }]. Nothing is applied on any failure.
- `404`: PERSON_NOT_FOUND.
- `422`: SCHEMA_VALIDATION_ERROR — `:id` looked like an email or LinkedIn URL but is not a usable person key (blank/garbage value, or a role inbox such as support@).

---

[API](https://skmtc.dev/floqer/apis/floqer-public-api.md) - [All operations](https://skmtc.dev/floqer/apis/floqer-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/floqer/apis/floqer-public-api/revisions/fce50dc07b20?raw)
