ackDB

Set/clear attribute values on a person

: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.

put/api/v1/ackdb/persons/{id}/attributes

Request

  • Base URL
    http://localhost:3009
  • Auth
    HTTP bearer

Path parameters

idstring required

Person reference — a person id (ULID), an email, or a LinkedIn URL. Durable person keys are GLOBALLY unique per value (#329), so a key match resolves to exactly one human; merged ids resolve to the surviving person.

Request body

valuesobject required

Map of attribute key → new value (or null to clear). Must be non-empty.

actorstring

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

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

dataunknown required

Changes

No recorded changes to this operation across all 1 revision of this API.