Skip to main content
POST
Add an AI column that researches every row

Authorizations

Authorization
string
header
required

Your API token (af_…) as the Basic-auth username, with an empty password.

Path Parameters

listId
string
required

24-character hex id of the list (from GET /business/lists).

Body

application/json
name
string
required

Display name of the new column (1-100 characters, trimmed). Must be unique on the list and must not be a reserved built-in column name such as name, first name, last name, job title, company, email or phone.

Required string length: 1 - 100
prompt
string
required

The research instruction the engine answers once per covered row (1-2000 characters, trimmed); the answer is written into that row's cell and its sources are kept as provenance.

Required string length: 1 - 2000
runOn
enum<string>
required

How many rows the first run covers, taken in the list's current order after filters: first_1, first_10, first_100 or first_1000 take that many rows; all covers every row. Every covered row is billed at the engine's per-row credit rate up front; rerun the column later for the rest.

Available options:
first_1,
first_10,
first_100,
first_1000,
all
engine
enum<string>
default:standard

Engine that researches each row: standard (default) is the fast per-row web-research agent; deep_research is the multi-provider Deep Research pipeline, billed at a higher per-row rate, and the only engine that accepts providerIds.

Available options:
standard,
deep_research
filters
object

Optional row filter in the same JSON row-filter language as the filters query of GET /business/lists/{listId}/rows (built-in fields by canonical key, custom and smart columns under customColumns keyed by column id); only matching rows are covered. Omit to cover the whole list.

providerIds
string[]

deep_research only: restrict the research to these provider ids, each the id of an entry returned by GET /business/research/providers. The ids are an allowlist, not an order: the run may call any of them, chooses per row, and need not use them all; the order you send them in is ignored. Send 1 to 50 distinct ids — an empty array or a repeated id is rejected. Ids are never checked against the catalog: a typo, a provider whose allowedInRuns is false, or a byok-required provider you have not saved a key for is accepted and then silently dropped from the run, and if none of the ids survive that check the rows are researched only by the providers Fuse always includes, so the answers come back far thinner than you asked for with no error anywhere. Sent with engine standard the call is rejected with 422 PROVIDERS_NOT_SUPPORTED. Omit to let the run use every provider available to your workspace.

Required array length: 1 - 50 elements

A Deep Research provider id: the id (catalog slug, for example zerobounce) of an entry returned by GET /business/research/providers, not a Mongo id.

Required string length: 1 - 64

Response

Success

jobId
string | null
required

Id of the run that was started; poll it on GET /business/lists/{listId}/smart-columns/{jobId}/status.

column
object
required