AckdbIngestTrait

A pre-computed trait value in an ingest request.

Properties

traitKeystringrequired

Must exist in trait_definitions for this org.

valuerequired

The trait value. Type must match the trait definition's valueType. **Do NOT send an empty string `""` for a `number` or `date` trait - it is rejected (422). Omit the trait entirely when the source value is blank.**

opstringdefault "set"

Atomic operation to apply. Default is `set` (overwrite). Use computed ops to avoid read-then-write race conditions on concurrent events. **Number ops:** `increment` (current + value), `decrement` (current - value), `min` (keep smaller), `max` (keep larger). **Date ops:** `set_if_newer` (keep more recent), `set_if_older` (keep older). **Array ops:** `append` (add items, deduped), `remove` (remove items). **The op MUST be compatible with the trait's `valueType` or the ingest is rejected (422):** `set` works for every type; `increment`/`decrement`/`min`/`max` are number-only; `set_if_newer`/`set_if_older` are date-only; `append`/`remove` are string_array-only. An omitted op silently defaults to `set` (overwrite) - pick the right op for accumulating counts/sums (`increment`) and 'keep latest' dates (`set_if_newer`), or you will clobber the prior value.

"set""increment""decrement""min""max""set_if_newer""set_if_older""append""remove"
workflowstringrequired

Which workflow computed this value. Empty string = direct API write.

confidencenumberrequiredmin 0 · max 1

1.0 = observed/verified, lower = inferred/estimated.

Example

AckdbIngestTrait example
{
  "traitKey": "slack_message_count",
  "value": 42,
  "op": "increment",
  "workflow": "slack-ingestion",
  "confidence": 1
}