Field Catalog API
Field Catalog API
Base URL: https://api.delivr.ai
Version: v1
Authentication: Organization API key. Send X-Api-Key: <dlvr_...> and X-Api-Secret: <secret> on every request (both required). Create the key + secret in the dashboard at https://app.delivr.ai/{org_id}/settings/api-keys.
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. Your UI can then render the right controls (dropdowns, text inputs, or other control types) without hardcoding anything.
List Fields
Retrieve all fields, optionally filtered by schema type, category, or status.
GET /api/v1/field-catalog
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
schema_type | string | (all) | event or audience -- filter to fields in that schema |
source_type | string | (all) | pixel or dsp. Filters to fields carried by that source. Can be combined with schema_type, in which case both are applied. |
category | string | (all) | Filter by category: contact, company, demographics, intent, event, identifier, predictive, partner_data |
status | string | active | active, deprecated, or all |
include_options | string | false | true 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
| Property | Type | Description |
|---|---|---|
id | UUID | Unique identifier |
field_key | string | Machine-readable key used in filter rules (e.g. seniority_level) |
display_name | string | Human-readable label (e.g. "Seniority Level") |
description | string? | Optional description of the field |
category | string | Grouping: contact, company, demographics, intent, event, identifier, predictive, partner_data |
data_type | string | Underlying data type: string, integer, boolean, timestamp |
schema_types | string[] | Which schemas include this field: audience, event, or both |
source_types | string[] | Which sources carry this field: pixel, dsp, or both. The source list is what source_type filters on. |
transform_type | string? | Optional transform hint (e.g. sha256_lc) |
field_type | string | UI control type -- see table below |
operators | string[] | Valid operators for this field in filter rules |
options | object[]? | Picklist values (only present when include_options=true) |
options[].value | string | Value to submit in filter rules (lowercase) |
options[].label | string | Display text for the UI (title-cased) |
example_value | string? | Sample value for documentation |
status | string | active or deprecated |
sort_order | integer | Display ordering within its category |
created_at | string | ISO 8601 timestamp |
updated_at | string | ISO 8601 timestamp |
partner_dataset | object? | Present on partner_data fields only: the dataset, its price and whether the project has it enabled. See Partner data. |
partner_group | string? | Present on partner_data fields only: the group the field is shown under within its dataset |
partner_sort | integer? | Present on partner_data fields only: its position within the dataset |
Field Types and UI Controls
field_type | UI Control | When options present | Typical operators |
|---|---|---|---|
multiselect | Multi-select dropdown | Populate choices from options | in, notin |
select | Single-select dropdown | Populate choices from options | eq, neq or is, is not |
text | Free-text input | N/A | is, is not, contains, startsWith, endsWith, notnull. Title, department and company name fields also list containsWord and notContainsWord |
number | Numeric input | N/A | >, >=, <, <=, is, notnull |
Notes
optionsis omitted by default. Passinclude_options=trueto receive them. The omission matters because the full payload with all options is ~1.5 MB (mostly fromjob_title_normalizedwith 16,077 values).identifierfields are hidden from non-developer users. Internal users (developer flag set) see all categories.partner_datafields come from data partners and are priced. Theirfield_keyis<slug>__<column>, they are audience-only text fields, and each carries apartner_datasetobject with the dataset's price and whether the project can use it. See Partner data.valueis lowercase,labelis display-cased. Always submitvaluein filter rules. Showlabelin 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", "partner_data", "predictive"]
}Get Single Field
Retrieve a single field by its key. Always includes options.
GET /api/v1/field-catalog/{key}
Path Parameters
| Parameter | Type | Description |
|---|---|---|
key | string | The 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
| Field | Options | Example Values |
|---|---|---|
seniority_level | 5 | CXO, Director, Manager, Staff, VP |
seniority_level_2 | 10 | CXO, Director, Entry, Manager, Owner, Partner, Senior Individual Contributor, Training, Unpaid, Vice President |
seniority_level_raw | 11 | C-Suite, Director, Entry, Founder, Head, Intern, Manager, Owner, Partner, Senior, VP |
department | 24 | Administrative, Engineering, Executive, Finance, Sales, Marketing, ... |
department_2 | 26 | Accounting, Arts and Design, Business Development, Consulting, ... (a separate classification from department. See Building Audience Filters) |
job_title_normalized | 16,077 | Use searchable typeahead -- too many for a static dropdown |
social_connections | 5 | 1-9, 10-99, 100-249, 250-499, 500+ |
email_validation_status | 4 | Catchall, Invalid, Unknown, Valid |
personal_email_validation_status | 2 | Unknown, Valid |
current_business_email_validation_status | 3 | Catchall, Unknown, Valid |
is_email_business | 2 | True (true), False (false) |
is_email_personal | 2 | True (true), False (false) |
is_international | 2 | True (true), False (false) |
dpv_code | 4 | D, N, S, Y |
Company
| Field | Options | Example Values |
|---|---|---|
company_industry | 346 | Banking, Computer Software, Healthcare, Internet, ... |
company_employee_count_range | 11 | Zero, 1 to 10, 11 to 25, ..., 10000+ |
company_revenue_range | 10 | Under 1 million, ..., 1 billion and over |
company_sic | varies | 4-digit SIC codes |
company_naics | varies | NAICS codes |
Demographics
| Field | Options | Example Values |
|---|---|---|
age_range | 6 | 18-24, 25-34, 35-44, 45-54, 55-64, 65 and older |
gender | 3 | Female (f), Male (m), Unknown (u) |
inferred_gender | 2 | Female (f), Male (m) |
inferred_gender_unisex | 2 | Yes (y), No (n) |
has_children | 2 | Yes (y), No (n) |
is_married | 2 | Yes (y), No (n) |
is_homeowner | 2 | Yes (y), No (n) |
income_range_lc | 9 | less than $20,000, $20,000 to $44,999, ..., $250,000+ |
net_worth | 13 | -$20,000 to -$2,500, -$2,499 to $2,499, ..., $1,000,000 or more |
is_profile_b2b | 2 | Yes (y), No (n) |
is_profile_b2c | 2 | Yes (y), No (n) |
Event
| Field | Options |
|---|---|
resolved | 2 (Yes (true), No (false)) |
Using Field Catalog in the Audience Builder
Rendering Filter Controls
- Fetch fields once when the audience builder loads:
GET /api/v1/field-catalog?schema_type=audience&status=active&include_options=true - Group by
categoryfor the sidebar/accordion (Contact, Company, Demographics, Intent). - Sort by
sort_orderwithin each category. - Render controls by
field_type:multiselect/selectwithoptions-- render a dropdown populated fromoptions[].labelmultiselectwith 1000+ options (e.g.job_title_normalized) -- render a searchable typeaheadtext-- render a free-text input
- Show valid operators from the
operatorsarray. Map them to user-friendly labels:
| Operator | Display Label |
|---|---|
in | "is any of" |
notin | "is none of" |
is / eq | "equals" |
is not / neq | "does not equal" |
contains | "contains" |
containsWord | "contains word" |
notcontains | "does not contain" |
notContainsWord | "does not contain word" |
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.
| Method | Path | Description |
|---|---|---|
POST | /api/v1/field-catalog | Create a new field |
POST | /api/v1/field-catalog/bulk | Bulk update fields |
PUT | /api/v1/field-catalog/{key} | Update a field by key |
DELETE | /api/v1/field-catalog/{key} | Delete a field by key |
Updated 11 days ago
