---
title: "Replay a saved search"
method: POST
path: "/business/saved-searches/{savedSearchId}/run"
tags: ["Saved searches"]
---

# Replay a saved search

`POST /business/saved-searches/{savedSearchId}/run`

## Request

- Base URL: `https://api.tryfuse.ai/api/v1`
- URL: `https://api.tryfuse.ai/api/v1/business/saved-searches/{savedSearchId}/run`
- Auth: HTTP basic

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:
- `402` `INSUFFICIENT_CREDITS` — The balance does not cover 2 credits per requested profile; nothing was billed.
- `404` `SAVED_SEARCH_NOT_FOUND` — No saved search of yours has that id.
- `422` `VALIDATION_FAILED` — The request failed the declared schema; `param` names the offending key and `message` quotes the rule it broke.
- `422` `SAVED_SEARCH_TYPE_MISMATCH` — The saved search stores COMPANY filters, which this endpoint cannot run; `param` is `savedSearchId`. Run it with POST /companies/search and `savedSearchId` instead.
- `422` `SAVED_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.
- `422` `SEARCH_FILTERS_INVALID` — The provider rejected the assembled query as malformed.
- `429` `RATE_LIMITED` — Per-token rate limit for this bucket exhausted; retry after the window in the RateLimit-Reset header.
- `500` `UNEXPECTED_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.

## Path parameters

- `savedSearchId` string, required: Id of the saved search (24-character hex ObjectId), as returned by GET /saved-searches.

## Request body

- object: 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.
  - `size` integer: Profiles per page (1-100, default 10); the search pre-checks 2 credits per requested profile and debits 2 credits per profile returned.
  - `scrollToken` string: The `scrollToken` returned by the previous page, sent together with the same filter source, to fetch the next page.
  - `linkedinUrl` string: A LinkedIn profile URL to look up one person (normalised before matching); counts as search criteria on its own.

## Response `200`

Success

- object
  - `profiles` object[], required
    - `_id` string: Fuse's own id for the cached person record; stable across searches and the id `savedProfile` refers to. Absent on a row the cache could not store.
    - `pdlId` string: The provider's person id; always present — on a row the cache could not store it is the only id the row carries.
    - `savedProfile` boolean: Whether this person is already a contact in one of your lists. Absent on a row the cache could not store, which cannot be matched against your contacts.
    - `savedBy` string, nullable: Id of the workspace member who saved the contact; null when it is not saved, absent on a row the cache could not store.
    - `linkedinConnectedAccountIds` string[], required: Ids of your connected LinkedIn accounts already connected to this person.
    - `linkedinInvitationSentAccountIds` string[], required: Ids of your connected LinkedIn accounts that have already sent this person an invitation.
    - `linkedin_url` string
    - `full_name` string
    - `sex` string
    - `industry` string
    - `job_title` string
    - `job_title_role` string
    - `job_title_sub_role` string
    - `job_title_class` string
    - `job_title_levels` string[]
    - `job_company_name` string
    - `job_company_website` string
    - `location_name` string
    - `profile_score` string
    - `activity_score` string
    - `dataset_version` string
    - `pdl_version` string, nullable
    - `job_change_detected_at` string, date-time, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
  - `scrollToken` string, nullable, required: Send back as `scrollToken` for the next page; null when the provider returned no continuation.
  - `total` integer, required: Total number of people matching the stored filters, not the page size.
  - `filters` object, required: The stored filters translated into the POST /prospects/search vocabulary — send these to reproduce the run there.
  - `ignoredFilterKeys` string[], required: Stored keys with no equivalent search field, dropped before running; the product's UI skips them too.

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `403`: Error
- `404`: Error
- `409`: Error
- `422`: Error
- `429`: Error
- `500`: Error

---

[API](https://skmtc.dev/fuseai/apis/fuse-business-api.md) · [All operations](https://skmtc.dev/fuseai/apis/fuse-business-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fuseai/apis/fuse-business-api/revisions/50d95e0536f4?raw)
