Create Company Column
POST /companies/columns/create
Create a custom company column. Global if list_id is null, list-scoped otherwise.
Optionally pass an enrichment block to provision a companion waterfall
pipeline in the same request — STRONGLY RECOMMENDED so the UI ‘Enrich’
button works out-of-the-box. Without it the column is created but isn’t
enrichable until a pipeline is provisioned via
POST /enrichment/waterfall/configs.
Authorizations
Parameters
Header Parameters
Request Body required
Request body for POST /companies/columns/create.
Mirrors the shared CreateColumnRequest shape (title, data_type,
list_id, created_by) plus an OPTIONAL enrichment block that, when
supplied, provisions a companion waterfall pipeline in the same
request — so the new column is immediately runnable via
POST /enrichment/waterfall/enrich.
Without the enrichment block the column is created, but it has no
enrichment plan; the UI “Enrich” button (and g8_enrich_contacts in
waterfall mode) will return 422 (waterfall_config_missing) until a
pipeline is provisioned separately via
POST /enrichment/waterfall/configs.
Backwards compatible: callers that previously POSTed only title /
data_type / list_id / created_by continue to work unchanged.
object
Email of the user creating the column (for audit).
Column data type. Currently only ‘text’ is supported.
Optional enrichment-pipeline block attached at column-create time.
When supplied, POST /fields creates a companion enrichment_configs
row in the same request so the new column is immediately runnable via
POST /enrichment/waterfall/enrich. Without this block the column
exists but has no enrichment plan — calling /waterfall/enrich on it
returns 422 (waterfall_config_missing).
Currently only type='waterfall' is supported; AI / formula
enrichment will follow once the rest of the agent surface lands.
object
Email verification config attached to a waterfall pipeline.
Mirrors the canonical EmailVerificationConfigDto in
enrichment/interfaces/fastapi/waterfall_dtos.py so the dev-API and the
UI persist an identical settings shape (the CF worker reads settings. email_verification.* regardless of which surface saved the pipeline).
object
Treat catch-all responses as valid (domains that accept any address).
Enable post-enrichment email verification
Verification provider. Charges credits when use_system_credentials=True.
Use graph8-managed API keys (charges credits). False = use org’s BYOK keys.
Verification statuses to accept as valid. Typical: [‘valid’] or [‘valid’,‘catch-all’].
If true, skip rows where the target field is already populated.
Single step in a caller-supplied waterfall sequence.
Mirrors WaterfallStepDto in enrichment/interfaces/fastapi/waterfall_dtos.py.
Persisted verbatim into enrichment_configs.config.steps[] so the CF
worker can resolve provider, action and credentials the same way
UI-saved pipelines do.
object
Provider action: lookup_person, find_email, enrich_person, …
Provider-specific options (e.g. apollo reveal_phone_numbers=true).
object
Maps provider input names to graph8 column identifiers (CONTACT_*).
object
True = use graph8-managed credentials + charge credits. False = use org BYOK.
0-indexed execution order.
Optional output field remap (deprecated — prefer output_field).
object
Provider name: graph8, hunter, prospeo, dropcontact, apollo, …
Pipeline kind. Only ‘waterfall’ is supported today.
Column title shown in the UI (e.g. ‘Tier’)
Responses
201
Successful Response
object
Response shape for POST /companies/columns/create.
Mirrors the Column entity fields verbatim so existing callers reading
data.id / data.title / data.name / data.is_global etc. keep
working without code changes. Adds one new optional enrichment field
that is populated when the request included an enrichment block.
object
User-selectable dynamic-column data types.
Every member must have a physical type in the repos’ pg_type_map (contacts/companies CDP repos + enrichment DynamicColumnRepository: int→INTEGER, numeric→NUMERIC, text→TEXT, boolean→BOOLEAN) and belong to the user-owned family in lists/usecases/dynamic_column_write_contract.py — both already list these four. Write paths coerce values per type via shared.infrustructure.db.cdp.dynamic_column_values.coerce_dynamic_value.
Echo of the companion enrichment config created by enrichment block.
Computed: True when object_id is null/empty (global column).
422
Validation Error