---
title: "List Observe person fields"
method: GET
path: "/api/v1/ackdb/observe/persons/fields"
tags: ["ackDB"]
---

# List Observe person fields

`GET /api/v1/ackdb/observe/persons/fields`

## Request

- Base URL: `http://localhost:3009`
- URL: `http://localhost:3009/api/v1/ackdb/observe/persons/fields`
- Auth: HTTP bearer

The field catalog for the PERSON grain (#329) - one row per human, spanning every company they have been at. Structurally different from the other two grains: a person holds durable KEYS and EVENTS, never traits, so the catalog ships NO trait descriptors (a trait filter is a 400). What it does ship: system columns (name, affiliation_count, last_active, is_internal, key_count, status, created_at, updated_at, plus the projection-only `companies` and `activity` columns), durable-key columns (`idl__<type>` - linkedin_url, email_address, person-scoped product ids), promoted event-metadata columns (`emf__…`, #212) and per-event-type count columns (`evc__…`, #322) - both correlated on the person's OWN timeline (entity_events.person_id), so they span every company the human has worked at. One field is deliberately NOT here: the company filter `entity_id` (#334). A human has 1..N companies, so it is a predicate (an EXISTS over their active edges), never a column - and a catalog entry would let a UI offer it as one and 400 the view. It is documented on POST /observe/persons/query, and the company grain's filter-only `source_present` is withheld from that grain's catalog for the same reason.

## Response `200`

The field catalog (may be coverage-ordered).

- object
  - `data` AckdbFieldDescriptor[], required
    - `key` string, required
    - `label` string, required
    - `group` 'system' | 'trait' | 'event', required
    - `valueType` 'string' | 'number' | 'boolean' | 'date' | 'string_array', required
    - `source` string, required
    - `coverage` integer, required
    - `sortable` boolean, required
    - `filterable` boolean, required
    - `operators` string[], required: Operators legal for this field (trait/attribute operators or event predicates).
    - `allowedValues` unknown[]: Enum constraint from the trait definition, if any.
      - unknown
    - `distinctValuesUrl` string: Present only when the field supports a distinct-value picker (string/string_array traits, whitelisted system attributes, string/string_array emf__ columns) - the grain-correct URL to fetch values from. Absent means free-text input.

---

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