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

# Set/clear attribute values on a company

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

## Request

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

`:id` = entity id or domain (identity-map resolved). All-or-nothing: every key/value is validated before anything is written. `null` clears a value — DELETEs the row, not a null-column write. Every REAL change emits a `trait.updated` event on the company timeline (actor = `actor` in the body, default `"api"`); a no-op write (value unchanged) writes and emits nothing.

## 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, applied: {key: value}, cleared: [key], updatedAt }.

- object
  - `data` unknown, required

## Other responses

- `400`: VALIDATION_ERROR — empty/invalid `values` object, or per-key failures (unknown key, key is a trait not an attribute, wrong-scope key, bad value for the type/enum); details: [{ key, error }]. Nothing is applied on any failure.
- `404`: ENTITY_NOT_FOUND.

---

[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)
