curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/saved-searches/{savedSearchId}/run \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"size": 10,
"scrollToken": "<string>",
"linkedinUrl": "<string>"
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/saved-searches/{savedSearchId}/run"
payload = {
"size": 10,
"scrollToken": "<string>",
"linkedinUrl": "<string>"
}
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({size: 10, scrollToken: '<string>', linkedinUrl: '<string>'})
};
fetch('https://api.tryfuse.ai/api/v1/business/saved-searches/{savedSearchId}/run', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"profiles": [
{
"_id": "6a8dde1f5792025bcc9e9f61",
"pdlId": "gAkE2YBBdEZJ1b2iSrUKCQ_0000",
"linkedin_url": "linkedin.com/in/chrismumford",
"dataset_version": "35.1",
"pdl_version": "35.1",
"job_change_detected_at": null,
"createdAt": "2026-08-25T18:25:35.591Z",
"updatedAt": "2026-08-25T18:46:56.528Z",
"full_name": "chris mumford",
"sex": "male",
"industry": "real estate",
"job_title": "chief marketing officer - marketplaces",
"job_title_role": "marketing",
"job_title_class": "sales_and_marketing",
"job_title_levels": [
"cxo"
],
"job_company_name": "costar group",
"job_company_website": "costargroup.com",
"location_name": "richmond, virginia, united states",
"profile_score": "positive signals",
"activity_score": "positive signals",
"savedProfile": false,
"savedBy": null,
"linkedinConnectedAccountIds": [],
"linkedinInvitationSentAccountIds": []
}
],
"scrollToken": "20919$3.0004249",
"total": 8,
"filters": {
"job_title_levels": [
{
"status": "include",
"value": "cxo"
}
],
"location_country": [
{
"status": "include",
"value": "united states"
}
],
"job_company_name": [
{
"status": "include",
"value": "costar group"
}
]
},
"ignoredFilterKeys": []
}{
"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>"
}
}Replay a saved search
Replay a stored PEOPLE saved search. Equivalent to POST /prospects/search with savedSearchId; both echo the resolved filters, and this one always includes ignoredFilterKeys because the source is always a stored search.
The optional body carries only the caller’s half of the search — size, scrollToken, linkedinUrl — or may be omitted entirely. The stored filters ARE the search: any other key, filters included, is rejected with 422 VALIDATION_FAILED naming it rather than silently ignored. That body is validated on its own before the stored search is loaded, so a bad size is reported as your error; SAVED_SEARCH_INVALID means the STORED filters no longer run.
A company saved search cannot be replayed here — it answers 422 SAVED_SEARCH_TYPE_MISMATCH; run it with POST /companies/search and savedSearchId instead.
Rows and paging behave exactly as in POST /prospects/search: provider person records plus Fuse’s pdlId, the LinkedIn relation ids and — on every row the cache could store — _id and savedProfile / savedBy, a nullable scrollToken, and the true match total. No row carries an email address or a phone number, enrichment history included. Billing: 2 credits per requested profile pre-checked, 2 credits per profile returned debited. (Enforced by the public row transformer, which removes Fuse’s enrichment overlay and the provider’s own work_email, personal_emails, recommended_personal_email, mobile_phone and phone_numbers before the row is returned.)
Errors:
402INSUFFICIENT_CREDITS— The balance does not cover 2 credits per requested profile; nothing was billed.404SAVED_SEARCH_NOT_FOUND— No saved search of yours has that id.422VALIDATION_FAILED— The request failed the declared schema;paramnames the offending key andmessagequotes the rule it broke.422SAVED_SEARCH_TYPE_MISMATCH— The saved search stores COMPANY filters, which this endpoint cannot run;paramissavedSearchId. Run it with POST /companies/search andsavedSearchIdinstead.422SAVED_SEARCH_INVALID— The STORED filters no longer form a runnable search — every value was retired, or the blob translates to nothing. Never used for anything the caller sent.422SEARCH_FILTERS_INVALID— The provider rejected the assembled query as malformed.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: search.
curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/saved-searches/{savedSearchId}/run \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"size": 10,
"scrollToken": "<string>",
"linkedinUrl": "<string>"
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/saved-searches/{savedSearchId}/run"
payload = {
"size": 10,
"scrollToken": "<string>",
"linkedinUrl": "<string>"
}
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({size: 10, scrollToken: '<string>', linkedinUrl: '<string>'})
};
fetch('https://api.tryfuse.ai/api/v1/business/saved-searches/{savedSearchId}/run', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"profiles": [
{
"_id": "6a8dde1f5792025bcc9e9f61",
"pdlId": "gAkE2YBBdEZJ1b2iSrUKCQ_0000",
"linkedin_url": "linkedin.com/in/chrismumford",
"dataset_version": "35.1",
"pdl_version": "35.1",
"job_change_detected_at": null,
"createdAt": "2026-08-25T18:25:35.591Z",
"updatedAt": "2026-08-25T18:46:56.528Z",
"full_name": "chris mumford",
"sex": "male",
"industry": "real estate",
"job_title": "chief marketing officer - marketplaces",
"job_title_role": "marketing",
"job_title_class": "sales_and_marketing",
"job_title_levels": [
"cxo"
],
"job_company_name": "costar group",
"job_company_website": "costargroup.com",
"location_name": "richmond, virginia, united states",
"profile_score": "positive signals",
"activity_score": "positive signals",
"savedProfile": false,
"savedBy": null,
"linkedinConnectedAccountIds": [],
"linkedinInvitationSentAccountIds": []
}
],
"scrollToken": "20919$3.0004249",
"total": 8,
"filters": {
"job_title_levels": [
{
"status": "include",
"value": "cxo"
}
],
"location_country": [
{
"status": "include",
"value": "united states"
}
],
"job_company_name": [
{
"status": "include",
"value": "costar group"
}
]
},
"ignoredFilterKeys": []
}{
"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 saved search (24-character hex ObjectId), as returned by GET /saved-searches.
Body
Optional paging and lookup overrides for the replay — size, scrollToken, linkedinUrl — or no body at all. The stored filters are the search; any other key, filters included, is rejected with 422 VALIDATION_FAILED.
Profiles per page (1-100, default 10); the search pre-checks 2 credits per requested profile and debits 2 credits per profile returned.
1 <= x <= 100The scrollToken returned by the previous page, sent together with the same filter source, to fetch the next page.
A LinkedIn profile URL to look up one person (normalised before matching); counts as search criteria on its own.
Response
Success
Show child attributes
Show child attributes
Send back as scrollToken for the next page; null when the provider returned no continuation.
Total number of people matching the stored filters, not the page size.
The stored filters translated into the POST /prospects/search vocabulary — send these to reproduce the run there.
Stored keys with no equivalent search field, dropped before running; the product's UI skips them too.