curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/companies/search/save-to-list \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '{
"limit": 5000
}'import requests
url = "https://api.tryfuse.ai/api/v1/business/companies/search/save-to-list"
payload = { "limit": 5000 }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({limit: 5000})
};
fetch('https://api.tryfuse.ai/api/v1/business/companies/search/save-to-list', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"listIds": [
"6a8d82b5c5017e82fb6082ac"
]
}{
"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>"
}
}Save company-search results into a list
Run the search server-side and save up to limit matches into a company list. Same filter-source contract as POST /companies/search — exactly one of filters, savedSearchId, savedSearchName or query. The destination is exactly one of listId or listName; listName is create-or-reuse by exact name (case-insensitive), a name shared by two lists is a 409, and system list names are refused.
filters.headquartersCity names are geocoded one by one and OR-ed together; a name that geocodes to nothing is dropped and the job runs on the rest — only when not one resolves is it refused with 422 CITY_FILTER_UNRESOLVED, and there is no upfront credit pre-check, so take the values from GET /companies/autocomplete?field=location. Fiber firmographics land on the saved companies automatically — there is no enrich switch. Always async: 202 means the save started, not that the list is populated; poll the list’s rows. Billing: the job saves in pages of 100 and debits 2 credits per company as it goes, so there is no upfront pre-check and a partially completed run is partially billed.
Errors:
404SAVED_SEARCH_NOT_FOUND— No saved search of yours has that id or exact title.409SAVED_SEARCH_NAME_AMBIGUOUS— Two of your saved searches share that title — reference it bysavedSearchIdinstead.409LIST_NAME_AMBIGUOUS— Two of your company lists share that name — passlistIdinstead.409LIST_NAME_TAKEN— A company list with that name was created concurrently; retry withlistId.422VALIDATION_FAILED— The request failed the declared schema;paramnames the offending key andmessagequotes the rule it broke.422SAVED_SEARCH_TYPE_MISMATCH— The saved search exists but stores the other kind of filters;paramissavedSearchId.422SAVED_SEARCH_INVALID— The STORED filters no longer form a runnable company search — the blob is empty, or every value in it was retired. A filterless stored search is refused here rather than saved from a whole-universe search.422QUERY_FILTERS_INVALID— The natural-languagequeryproduced no usable filter; name concrete criteria.422CITY_FILTER_UNRESOLVED— NOT ONE of thefilters.headquartersCitynames geocoded to a city area, so the save was refused before it started; names that do geocode are OR-ed together and a name that does not is dropped, so this fires only when every name fails.paramisfilters.headquartersCity.422LIST_NAME_RESERVED—listNameis a system/dynamic list title and cannot be a destination.429RATE_LIMITED— Per-token rate limit for this bucket exhausted; retry after the window in the RateLimit-Reset header.500UNEXPECTED_ERROR— The request failed inside the service; nothing was billed and the request_id identifies the failure.
Requires one of the following token scopes: companies.
curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/companies/search/save-to-list \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '{
"limit": 5000
}'import requests
url = "https://api.tryfuse.ai/api/v1/business/companies/search/save-to-list"
payload = { "limit": 5000 }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({limit: 5000})
};
fetch('https://api.tryfuse.ai/api/v1/business/companies/search/save-to-list', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"listIds": [
"6a8d82b5c5017e82fb6082ac"
]
}{
"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.
Body
Exactly one filter source (filters | savedSearchId | savedSearchName | query) and exactly one destination (listId | listName), plus limit.
Maximum number of matching companies to save (1-10000); the background job saves in pages of 100 and debits 2 credits per company saved as it goes (no upfront credit check).
1 <= x <= 10000Literal filters, one of the four filter sources — the same vocabulary as POST /companies/search. Company filters in the search vocabulary: include/exclude fields take [{ status, value, label }] entries (label is required), list fields arrays of strings, ranges { min, max } and date ranges { start, end } — enum vocabularies come from GET /companies/filter-options, names and places from GET /companies/autocomplete. Must contain at least one non-empty value.
Show child attributes
Show child attributes
Id of one of your COMPANY saved searches to take the filters from instead of filters (a people saved search answers 422 SAVED_SEARCH_TYPE_MISMATCH).
Exact title of one of your company saved searches to take the filters from instead of filters; two searches sharing the title answer 409 SAVED_SEARCH_NAME_AMBIGUOUS.
1 - 255Natural-language description of the companies to find (max 2000 chars), converted into filters server-side instead of filters; criteria that could not be mapped come back as unresolvedCriteria, and a query yielding no filter answers 422 QUERY_FILTERS_INVALID.
1 - 2000Id of an existing company list to save into (exactly one of listId / listName).
Name of the destination company list, created when none exists; an existing list with the same name (case-insensitive) is reused, a name shared by several lists answers 409 LIST_NAME_AMBIGUOUS, and system list names answer 422 LIST_NAME_RESERVED.
1 - 255Response
Success
The single destination company list id the save is writing into.
1 element