curl --request PATCH \
--url https://api.tryfuse.ai/api/v1/business/lists/{listId}/smart-columns/{columnId} \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"prompt": "<string>",
"providerIds": [
"<string>"
]
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/lists/{listId}/smart-columns/{columnId}"
payload = {
"name": "<string>",
"prompt": "<string>",
"providerIds": ["<string>"]
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', prompt: '<string>', providerIds: ['<string>']})
};
fetch('https://api.tryfuse.ai/api/v1/business/lists/{listId}/smart-columns/{columnId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"column": {
"id": "68a1f3009c41d20014b3e9a1",
"name": "Hiring signals v2"
},
"jobId": null
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}Rename a smart column, change its prompt or providers
Renames the column, changes its prompt, or changes a Deep Research column’s provider restriction (providerIds: null clears it). A rename or a provider change is immediate and free, and new providers apply from the next run. A prompt change is not free — any run in progress is cancelled and every row the column has already computed (plus cells the cancelled run left pending or running) is immediately recomputed with the new prompt, each billed at the column’s per-row rate; the new prompt is saved either way. The call answers 200 in every case: jobId carries the id of the re-run a prompt change started — poll it on GET /business/lists/{listId}/smart-columns/{jobId}/status — and is null when nothing was recomputed, which covers a rename, a provider change, and a prompt edit on a column with no computed row left to refresh. Check refreshableRowCount × creditsPerRow on GET …/smart-columns/{columnId} before a prompt edit, and expect 402 when your balance cannot cover the re-run. The response always carries the column’s stored name, so a prompt-only edit still reports it.
Errors:
402INSUFFICIENT_CREDITS— Your credit balance cannot cover the re-run a prompt edit starts (refreshableRowCount × creditsPerRow); nothing was started or charged.404LIST_NOT_FOUND— No list with that id belongs to you.404COLUMN_NOT_FOUND— No smart column with that id is on this list, or the column has never run (nothing to recompute from).409COLUMN_NAME_TAKEN— Another column on this list already has that name.422COLUMN_NAME_RESERVED— The new name is one of the reserved built-in column names.422PROVIDERS_NOT_SUPPORTED— providerIds was sent for a standard-engine column; only a deep_research column can be restricted to specific providers.422INVALID_REQUEST— CRM rejected the change for a reason with no more specific code.422VALIDATION_FAILED— The body failed validation, including a body with none of name, prompt or providerIds.429RATE_LIMITED— More than 120 requests per minute or 10,000 per day on the lists bucket, which every /business/lists endpoint shares; retry after Retry-After.500UNEXPECTED_ERROR— The request could not be completed; quote request_id to support.
Requires one of the following token scopes: lists.
curl --request PATCH \
--url https://api.tryfuse.ai/api/v1/business/lists/{listId}/smart-columns/{columnId} \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"prompt": "<string>",
"providerIds": [
"<string>"
]
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/lists/{listId}/smart-columns/{columnId}"
payload = {
"name": "<string>",
"prompt": "<string>",
"providerIds": ["<string>"]
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', prompt: '<string>', providerIds: ['<string>']})
};
fetch('https://api.tryfuse.ai/api/v1/business/lists/{listId}/smart-columns/{columnId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"column": {
"id": "68a1f3009c41d20014b3e9a1",
"name": "Hiring signals v2"
},
"jobId": null
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}Authorizations
Your API token (af_…) as the Basic-auth username, with an empty password.
Path Parameters
Id of the list that owns the smart column.
Id of the smart column, as returned when it was created or listed by GET /business/lists/{listId}/columns.
Body
New display name (1-100 characters, trimmed). Must stay unique on the list and must not be a reserved built-in column name.
1 - 100New research instruction (1-2000 characters, trimmed). Changing the prompt immediately recomputes the rows the column has already computed (plus cells a cancelled run left pending or running), cancelling any run in progress and billing each recomputed row at the column's per-row credit rate.
1 - 2000deep_research columns only: replace the provider restriction with these provider ids — the id values returned by GET /business/research/providers — or null to clear it and let the column use every provider available to your workspace. 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. The new selection is free, recomputes nothing on its own and applies from the next run; sent for a standard-engine column it is rejected with 422 PROVIDERS_NOT_SUPPORTED.
1 - 50 elementsA Deep Research provider id: the id (catalog slug, for example zerobounce) of an entry returned by GET /business/research/providers, not a Mongo id.
1 - 64