create enrichment
Changed onCreate an enrichment without running it: the task prompt the row agent reads for every row, the output columns it fills, and optionally input_columns (the headers rows must carry; empty = any), a budget in credits per row (default 1.5 per output column; it then moves by 1.5 as columns are added or removed until budget_locked is true), and the tools (only_tools replaces the default set, additional_tools adds to it; names from GET /tools). Each output entry is a column name or { "name", "prompt"?, "output_schema"?, "tool"? }; output_schema is a JSON Schema for the cell value (see help → output_schema); without one, the column is typed from the prompts as the one value it is about (email, URL, date, year, count, money, percentage, phone, address, a person's or company's name, ...; only prose stays free text); tool pins a tool to the column — "tool": "linkedin_person_profile", the ColumnToolPin: the agent makes one call of it per row, with arguments it works out from the row and its research, and the call's result is the cell. Output names may not repeat an input column.
From a prompt alone. Leave output out and the recipe is written from the prompt: one output column per fact it asks to find about each row, each with its own prompt and type, plus the name and input_columns when you give none ("Research each company: its CEO, employee count, latest funding round date and amount, and whether it is hiring" → CEO, Employee count, Latest funding round date, Latest funding round amount, Hiring, typed). The response shows what was written; adjust it with PATCH /enrichments/{id}. A prompt that names no facts to find is refused (422): add output.
The enrichment comes with the dataset it fills: an empty dataset bound to it, named after it, whose input columns are input_columns (one Input column when you give none; the first build names it, or rename it with PATCH /datasets/{id}). It is on the Datasets page of the app at once. The response is the enrichment plus dataset_id (its id) and app_url (the dataset in the app).
Then add rows to the dataset — POST /datasets/{id}/rows, rows/import for a CSV, or rows/build to generate them — and fill it with POST /enrich (dataset_id): the rows and cells are kept and the dataset shows them. Or run the enrichment once on rows you send inline (enrichment_id + input), nothing kept. Editing the enrichment through its dataset (the app's Column tab, PATCH /datasets/{id}) rebinds the dataset to a private copy; PATCH /enrichments/{id} edits this enrichment itself.
{ "dataset_id": "ds_..." } alone answers the dataset's own enrichment as { id, name, app_url, dataset_id } (nothing is created; 422 while the dataset has no output columns — PATCH /datasets/{id} adds them).
Request
- Base URLhttps://api.riveterhq.com/v1
- AuthHTTP bearer
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Request body
Example request
{
"output": [
{
"tool": "linkedin_person_profile"
}
]
}Response
Save a recipe — the saved enrichment plus dataset_id and app_url, the dataset it fills. With dataset_id alone — the dataset's own enrichment as { id, name, app_url, dataset_id }
Example response
{
"id": "enr_018f5b60-1234-7abc-89ab-0123456789ab",
"name": "Company basics",
"prompt": "Research each company from its name and website.",
"input_columns": [
"Company",
"Website"
],
"output": [
{
"name": "CEO"
},
{
"name": "Employee count",
"prompt": "Current headcount as an integer",
"output_schema": {
"type": "integer",
"minimum": 0
}
},
{
"name": "Homepage text",
"prompt": "The company's homepage, from the Website column",
"tool": "scrape"
}
],
"tools": [
"web_search",
"scrape",
"pdf",
"http_request",
"code"
],
"budget_credits_per_row": 4.5,
"budget_locked": false,
"version": 1,
"created_at": "2026-10-01T12:00:00Z",
"updated_at": "2026-10-01T12:00:00Z"
}Changes
- warning
removed the optional property
/////from the response with the status - warning
removed the optional property
/from the response with the status
- warning
- info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status
- info