Field Catalog API

Field Catalog API

Base URL: https://api.delivr.ai Version: v1 Authentication: Authorization: Bearer <jwt>

The Field Catalog API returns metadata about every filterable field available in the audience builder. Use it to discover which fields exist, what values they accept, and which operators apply -- so your UI can render the right controls (dropdowns, text inputs, etc.) without hardcoding anything.


List Fields

Retrieve all fields, optionally filtered by schema type, category, or status.

GET /api/v1/field-catalog

Query Parameters

ParameterTypeDefaultDescription
schema_typestring(all)event or audience -- filter to fields in that schema
categorystring(all)Filter by category: contact, company, demographics, intent, event, identifier
statusstringactiveactive, deprecated, or all
include_optionsstringfalsetrue to include picklist values for select/multiselect fields

Response

{
  "total_count": 119,
  "fields": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "field_key": "seniority_level",
      "display_name": "Seniority Level",
      "description": "Standardized seniority classification",
      "category": "contact",
      "data_type": "string",
      "schema_types": ["audience"],
      "field_type": "multiselect",
      "operators": ["in", "notin"],
      "options": [
        { "value": "cxo", "label": "CXO" },
        { "value": "director", "label": "Director" },
        { "value": "manager", "label": "Manager" },
        { "value": "staff", "label": "Staff" },
        { "value": "vp", "label": "VP" }
      ],
      "status": "active",
      "sort_order": 12,
      "created_at": "2025-12-01T00:00:00Z",
      "updated_at": "2026-02-17T00:00:00Z"
    }
  ]
}

Field Object

PropertyTypeDescription
idUUIDUnique identifier
field_keystringMachine-readable key used in filter rules (e.g. seniority_level)
display_namestringHuman-readable label (e.g. "Seniority Level")
descriptionstring?Optional description of the field
categorystringGrouping: contact, company, demographics, intent, event, identifier
data_typestringUnderlying data type: string, integer, boolean, timestamp
schema_typesstring[]Which schemas include this field: audience, event, or both
transform_typestring?Optional transform hint (e.g. sha256_lc)
field_typestringUI control type -- see table below
operatorsstring[]Valid operators for this field in filter rules
optionsobject[]?Picklist values (only present when include_options=true)
options[].valuestringValue to submit in filter rules (lowercase)
options[].labelstringDisplay text for the UI (title-cased)
example_valuestring?Sample value for documentation
statusstringactive or deprecated
sort_orderintegerDisplay ordering within its category
created_atstringISO 8601 timestamp
updated_atstringISO 8601 timestamp

Field Types and UI Controls

field_typeUI ControlWhen options presentTypical operators
multiselectMulti-select dropdownPopulate choices from optionsin, notin
selectSingle-select dropdownPopulate choices from optionseq, neq or is, is not
textFree-text inputN/Ais, is not, contains, startsWith, endsWith, notnull
numberNumeric inputN/A>, >=, <, <=, is, notnull

Notes

  • options is omitted by default. Pass include_options=true to receive them. This matters because the full payload with all options is ~1.5 MB (mostly from job_title_normalized with 16,077 values).
  • identifier fields are hidden from non-developer users. Internal users (developer flag set) see all categories.
  • value is lowercase, label is display-cased. Always submit value in filter rules. Show label in the UI.

Get Categories

Returns distinct category names for active fields.

GET /api/v1/field-catalog/categories

Response

{
  "categories": ["company", "contact", "demographics", "event", "identifier", "intent"]
}

Get Single Field

Retrieve a single field by its key. Always includes options.

GET /api/v1/field-catalog/{key}

Path Parameters

ParameterTypeDescription
keystringThe field_key value (e.g. seniority_level, company_industry)

Response

Returns a single field object (same shape as items in the list response, options always included).


Fields with Picklist Options

These fields have a bounded set of values the user can pick from. All other fields are free-text.

Contact

FieldOptionsExample Values
seniority_level5CXO, Director, Manager, Staff, VP
seniority_level_210CXO, Director, Entry, Manager, Owner, Partner, Senior Individual Contributor, Training, Unpaid, Vice President
seniority_level_raw11C-Suite, Director, Entry, Founder, Head, Intern, Manager, Owner, Partner, Senior, VP
department16Administrative, Engineering, Executive, Finance, Sales, Marketing, ...
department_226Accounting, Arts and Design, Business Development, Consulting, ...
job_title_normalized16,077Use searchable typeahead -- too many for a static dropdown
social_connections51-9, 10-99, 100-249, 250-499, 500+
email_validation_status4Catchall, Invalid, Unknown, Valid
personal_email_validation_status2Unknown, Valid
current_business_email_validation_status3Catchall, Unknown, Valid
is_email_business2True (true), False (false)
is_email_personal2True (true), False (false)
is_international2True (true), False (false)
dpv_code4D, N, S, Y

Company

FieldOptionsExample Values
company_industry346Banking, Computer Software, Healthcare, Internet, ...
company_employee_count_range11Zero, 1 to 10, 11 to 25, ..., 10000+
company_revenue_range10Under 1 million, ..., 1 billion and over
company_sicvaries4-digit SIC codes
company_naicsvariesNAICS codes

Demographics

FieldOptionsExample Values
age_range618-24, 25-34, 35-44, 45-54, 55-64, 65 and older
gender3Female (f), Male (m), Unknown (u)
inferred_gender2Female (f), Male (m)
inferred_gender_unisex2Yes (y), No (n)
has_children2Yes (y), No (n)
is_married2Yes (y), No (n)
is_homeowner2Yes (y), No (n)
income_range_lc9less than $20,000, $20,000 to $44,999, ..., $250,000+
net_worth13-$20,000 to -$2,500, -$2,499 to $2,499, ..., $1,000,000 or more
is_profile_b2b2Yes (y), No (n)
is_profile_b2c2Yes (y), No (n)

Event

FieldOptions
resolved2 (Yes (true), No (false))

Using Field Catalog in the Audience Builder

Rendering Filter Controls

  1. Fetch fields once when the audience builder loads:
    GET /api/v1/field-catalog?schema_type=audience&status=active&include_options=true
  2. Group by category for the sidebar/accordion (Contact, Company, Demographics, Intent).
  3. Sort by sort_order within each category.
  4. Render controls by field_type:
    • multiselect / select with options -- render a dropdown populated from options[].label
    • multiselect with 1000+ options (e.g. job_title_normalized) -- render a searchable typeahead
    • text -- render a free-text input
  5. Show valid operators from the operators array. Map them to user-friendly labels:
OperatorDisplay Label
in"is any of"
notin"is none of"
is / eq"equals"
is not / neq"does not equal"
contains"contains"
notcontains"does not contain"
startsWith"starts with"
endsWith"ends with"
notnull"has a value"

Submitting Filter Rules

When the user builds a filter, use options[].value (not label) in the rule:

{
  "fieldName": "seniority_level",
  "conditionRules": {
    "operator": "in",
    "value": ["cxo", "vp", "director"]
  }
}

See Building Audience Filters for the full filter structure and examples.


Write Endpoints (Internal Only)

These endpoints require the developer flag (internal users only). Regular authenticated users get 403.

MethodPathDescription
POST/api/v1/field-catalogCreate a new field
POST/api/v1/field-catalog/bulkBulk update fields
PUT/api/v1/field-catalog/{key}Update a field by key
DELETE/api/v1/field-catalog/{key}Delete a field by key