---
title: "Create a saved search"
method: POST
path: "/business/saved-searches"
tags: ["Saved searches"]
---

# Create a saved search

`POST /business/saved-searches`

## Request

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

Store a search under a name. `type` picks the kind — `people` (the default) or `company` — and decides which language `filters` must speak: people filters are the keys POST /prospects/search takes, company filters the keys POST /companies/search takes. Either way the search opens identically in the product UI, and the created row comes back with its filters in that same search vocabulary, ready to re-send.

Exactly two of the 46 people filter fields cannot round-trip through the product's filter rail — `first_name` and `last_name` — and are rejected with 422 SAVED_SEARCH_FILTERS_UNSUPPORTED naming the field, rather than stored in a form the app cannot reopen. Every other field stores, `work_email`, `mobile_phone`, `personal_emails`, `linkedin_url`, `github_url` and `facebook_url` included. `type` is immutable: PATCH can change the title and the filters, never the kind. Titles need not be unique, but a title shared by two searches can no longer be used as `savedSearchName`.

Errors:
- `422` `VALIDATION_FAILED` — The request failed the declared schema; `param` names the offending key and `message` quotes the rule it broke.
- `422` `SAVED_SEARCH_FILTERS_UNSUPPORTED` — `filters` names `first_name` or `last_name` — the only two people filter fields with no saved-search equivalent; `param` names the field.
- `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.

## Request body

- object: A `title` plus `filters` written in the vocabulary of `type` (`people` by default); the search then opens identically in the product UI.
  - `title` string, required: Display name of the saved search (1-255 chars); need not be unique, but a shared title cannot be referenced as `savedSearchName` later.
  - `type` 'people' | 'company': Kind of search the filters describe: `people` (default) or `company`; immutable after creation.
  - `filters` union: Filters in the vocabulary of `type`: people filters as POST /prospects/search takes them (`first_name` / `last_name` cannot be stored and answer 422 SAVED_SEARCH_FILTERS_UNSUPPORTED), company filters as POST /companies/search takes them; at least one non-empty value either way.
    - object: 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.
      - `nameLike` string[]: Free text: company-name fragments of at most 500 chars each, matched fuzzily against the company NAME only (never the description). Several fragments are OR-joined (provider `nameLike.anyOf`); resolve a real company to its canonical name with GET /companies/autocomplete?field=company.
      - `domains` string[]: Free text: company website domains (e.g. stripe.com). A scheme, a www. prefix, a path and the letter case are all stripped before the search, so https://www.Stripe.com/pricing and stripe.com behave the same; a value that is not a domain at all is dropped. Several domains are OR-joined.
      - `keywords` string[]: Free-text keywords matched against company names and descriptions; any may match.
      - `status` object[]: Operating-status entries whose `value` is one of exactly: active, acquired, closed. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`). The provider ignores an exclude list on this field, so an exclusion is sent as the statuses that were NOT excluded, which also drops companies whose status is unknown. This filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `tags` object[]: Company-tag entries whose `value` is a slug from `companyTags` in GET /companies/filter-options: raised-from-top-vc, venture-backed-startup, is-government, is-school. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `industriesV2` object[]: Industry entries whose `value` is one of the `fiberIndustries` values in GET /companies/filter-options, copied exactly as listed (e.g. Software, Finance). An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `linkedinIndustries` object[]: LinkedIn-industry entries whose `value` is one of the `linkedinIndustries` values in GET /companies/filter-options, copied exactly as listed (e.g. Software Development) — a much finer taxonomy than `industriesV2`. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `crunchbaseCategories` object[]: Crunchbase-category entries whose `value` is one of the `crunchbaseIndustries` values in GET /companies/filter-options, copied exactly as listed (e.g. Financial Services). An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `crunchbaseCategoryGroups` string[]: Crunchbase category groups as plain strings copied verbatim (case-sensitive) from `crunchbaseCategoryGroups` in GET /companies/filter-options (e.g. Financial Services) — the broad parent of `crunchbaseCategories`. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Several groups are OR-joined (provider `anyOf`); this filter has no exclude form.
      - `naicsCodes` object[]: NAICS entries whose `value` is the code, not the title (`naicsCodes[].code` in GET /companies/filter-options, e.g. 513210 for Software Publishers; 2- to 6-digit codes are all accepted, a shorter code being the broader sector). An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `headquartersCountryCode` object[]: Headquarters-country entries whose `value` is the country's three-letter `apiCode` from `countries` in GET /companies/filter-options (e.g. USA, DEU). The two-letter `isoCodeAlpha2` in the same row (US, DE) is NOT accepted — the provider rejects it and the whole search fails. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `headquartersStateName` object[]: Headquarters state/province entries whose `value` is the full state or province name (e.g. Florida, California).
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `headquartersCity` string[]: Up to 25 fully qualified place names from GET /companies/autocomplete?field=location (e.g. Dallas, Texas, United States); each is geocoded independently to its city bounds and the areas are OR-ed together (no exclusion). A name that geocodes to nothing is dropped and the search runs on the names that did resolve — take the values from the typeahead so every one of them counts — and only when NOT ONE of them resolves is the search refused rather than run worldwide (422 CITY_FILTER_UNRESOLVED).
      - `employeeCountV2` object: Headcount range `{ min?, max? }`; any whole number is taken on either side and is used as sent — the values the search UI offers (1, 10, 50, 200, 500, 1000, 5000, 10000) are its own vocabulary, not a constraint here. The lower bound is EXCLUSIVE and the upper bound inclusive, so `{ min: 50 }` matches companies with MORE than 50 employees, and `{ min: 300, max: 320 }` matches 301 to 320. Inverted bounds are read the other way round, and an equal pair keeps only the lower bound, because the provider rejects a range whose bounds meet.
        - `min` number: Lower bound, inclusive — except on `employeeCountV2`, whose lower bound is exclusive (see that field).
        - `max` number: Inclusive upper bound.
      - `revenueUSD` object: Estimated annual revenue range `{ min?, max? }`; the accepted values are whole US dollars, not millions (5000000 means $5M), and both bounds are inclusive.
        - `min` number: Lower bound, inclusive — except on `employeeCountV2`, whose lower bound is exclusive (see that field).
        - `max` number: Inclusive upper bound.
      - `totalFundingUSD` object: Total funding raised range `{ min?, max? }`; the accepted values are whole US dollars, not millions (5000000 means $5M), and both bounds are inclusive.
        - `min` number: Lower bound, inclusive — except on `employeeCountV2`, whose lower bound is exclusive (see that field).
        - `max` number: Inclusive upper bound.
      - `lastFundingUSD` object: Size range of the most recent funding round `{ min?, max? }`; the accepted values are whole US dollars, not millions (5000000 means $5M), and both bounds are inclusive.
        - `min` number: Lower bound, inclusive — except on `employeeCountV2`, whose lower bound is exclusive (see that field).
        - `max` number: Inclusive upper bound.
      - `stage` object[]: Funding-stage entries whose `value` is one of exactly: pre_seed, seed, series_a, series_b, series_c, series_d, series_e, series_f, series_g, series_h, series_i, series_j, public, acquired, closed, private_equity, venture_other, no_funding_yet, unknown. No endpoint serves this list — it is fixed here. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `technologies` object[]: Technology-in-use entries whose `value` is a name from the provider's predefined technology vocabulary, forwarded verbatim, so it must carry the product's own spelling and casing — e.g. Salesforce, Kubernetes, Next.js, Google Analytics, and `AWS` for Amazon Web Services. No endpoint serves this vocabulary yet; the product's own picker offers a curated 141-name subset. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `investors` object[]: Investor entries whose `value` is the investor's website domain — resolve names with GET /companies/autocomplete?field=company&orgType=investor and send the `domain` from that response, never the investor's name. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `foundedOn` object: Founding-date range `{ start?, end? }` as ISO-8601 dates.
        - `start` string: Earliest date, ISO-8601 (e.g. 2020-01-01).
        - `end` string: Latest date, ISO-8601 (e.g. 2024-12-31).
      - `lastFundedOn` object: Date range of the most recent funding round, `{ start?, end? }` as ISO-8601 dates.
        - `start` string: Earliest date, ISO-8601 (e.g. 2020-01-01).
        - `end` string: Latest date, ISO-8601 (e.g. 2024-12-31).
      - `acceleratorsV2` object[]: Accelerator entries whose `value` is the `acceleratorSlug` from `accelerators` in GET /companies/filter-options (e.g. ycombinator, techstars); the `acceleratorName` in the same row is NOT accepted. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `fortuneRankings` object[]: Fortune-list entries whose `value` is one of exactly: fortune-500, fortune-1000 (fortune-1000 contains fortune-500). Any other value is silently DROPPED and the whole filter disappears, so the search then runs with no ranking constraint at all rather than returning nothing. Include values are OR-joined (provider `anyOf`). The provider takes an include list only here, and the tiers nest, so an exclude value cannot be honoured and is ignored. This filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `officeLocationsV2` object[]: Office-location entries whose `value` is a country's three-letter `apiCode` from `countries` in GET /companies/filter-options (e.g. USA) — the same vocabulary as `headquartersCountryCode`, but matching ANY office rather than only the headquarters. An off-list value is not rejected by this API: the search comes back empty (or fails upstream) with no error naming the field, so check the value against the list first. Include values are OR-joined (provider `anyOf`) and every exclude value is removed (`noneOf`); this filter ANDs with the others.
        - `value` string, required: The filter value — see the field's own description for its vocabulary.
        - `label` string, required: Display label for the value (required; repeat the value when you have no label).
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes companies carrying it (includes OR together, every exclude applies).
      - `linkedinSlugs` string[]: Free text: LinkedIn company slugs (e.g. stripe). A full company URL is accepted and reduced to the part after linkedin.com/company/, and the value is lower-cased, because the provider matches the slug exactly. Several slugs are OR-joined.
    - object: People filters in the search vocabulary: include/exclude fields take `[{ status, value }]` entries, term fields a string or an array of strings, `rangeInputs` `{ min, max }` ranges — every field and its accepted values are listed by GET /prospects/filter-options. On this endpoint a value outside a field's listed vocabulary is refused with 422 VALIDATION_FAILED, naming the field and the value, before anything is billed. Must contain at least one non-empty value.
      - `industry` object[]: Industry of the person themselves; include/exclude entries whose `value` is one of the 147 `industry` values from GET /prospects/filter-options (e.g. financial services). Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_title_levels` object[]: Seniority of the current job title; entries with `value` one of exactly: cxo, vp, director, manager, senior, entry, owner, partner, training, unpaid (the `job_title_levels` list in GET /prospects/filter-options). Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_title_role` object[]: Department of the current job title; entries with `value` one of the 24 `job_title_role` values in GET /prospects/filter-options (e.g. engineering, sales, finance) — `jobTitleRoleToSubRole` in the same response lists each role's sub-roles. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_title_sub_role` object[]: Sub-department of the current job title; entries with `value` one of the 106 `job_title_sub_role` values in GET /prospects/filter-options (e.g. software, account_executive, data_science). Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_company_size` object[]: Headcount bracket of the current employer; entries with `value` one of exactly: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ — brackets only, so use `rangeInputs.job_company_employee_count` for an arbitrary headcount range. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_company_inferred_revenue` object[]: Inferred annual revenue bracket of the current employer; entries with `value` one of exactly: $0-$1m, $1m-$10m, $10m-$25m, $25m-$50m, $50m-$100m, $100m-$250m, $250m-$500m, $500m-$1b, $1b-$10b, $10b+ (matched case-insensitively, so $1M-$10M also works). Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_company_industry` object[]: Industry of the current employer; entries with `value` one of the same 147 industry values, listed under `job_company_industry` in GET /prospects/filter-options. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_company_location_country` object[]: Country of the current employer's headquarters; entries with a lower-case `value` from the 249 `job_company_location_country` values in GET /prospects/filter-options (e.g. united states, germany) — country NAMES, never ISO codes. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_company_location_region` object[]: Region or state of the current employer's headquarters; entries with a free-text lower-case `value` such as california — resolve names with GET /prospects/autocomplete?field=region.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_company_location_continent` object[]: Continent of the current employer's headquarters; entries with `value` one of exactly: africa, antarctica, asia, europe, north america, oceania, south america. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `experience.company.location.continent` object[]: Continent of the headquarters of any PAST employer; entries with `value` one of exactly: africa, antarctica, asia, europe, north america, oceania, south america. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `experience.title.levels` object[]: Seniority of any past job title; entries with `value` one of exactly: cxo, vp, director, manager, senior, entry, owner, partner, training, unpaid. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `experience.title.role` object[]: Department of any past job title; entries with `value` one of the 24 `experience.title.role` values in GET /prospects/filter-options — the same list as `job_title_role`. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `experience.title.sub_role` object[]: Sub-department of any past job title; entries with `value` one of the 106 `experience.title.sub_role` values in GET /prospects/filter-options — the same list as `job_title_sub_role`. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `experience.company.location.country` object[]: Country of the headquarters of any past employer; entries with a lower-case `value` from the 249 `experience.company.location.country` values in GET /prospects/filter-options (e.g. united states) — country NAMES, never ISO codes. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `experience.company.industry` object[]: Industry of any past employer; entries with `value` one of the same 147 industry values, listed under `experience.company.industry` in GET /prospects/filter-options. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `languages.name` object[]: Languages the person lists; entries with a lower-case `value` from the 526 `languages.name` values in GET /prospects/filter-options (e.g. english, german) — language NAMES, never ISO codes. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `location_continent` object[]: Continent the person lives in; entries with `value` one of exactly: africa, antarctica, asia, europe, north america, oceania, south america. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `location_country` object[]: Country the person lives in; entries with a lower-case `value` from the 249 `location_country` values in GET /prospects/filter-options (e.g. united states, united kingdom) — country NAMES, never ISO codes. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `location_region` object[]: Region or state the person lives in; entries with a free-text lower-case `value` such as california — resolve names with GET /prospects/autocomplete?field=region.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `education.degrees` object[]: Degrees held; entries with `value` one of the 171 `education.degrees` values in GET /prospects/filter-options (e.g. bachelors, masters, master of business administration). Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `experience.company.type` object[]: Type of any past employer; entries with `value` one of exactly: educational, government, nonprofit, private, public, public_subsidiary. Include values are OR-joined and every exclude applies; at most 1000 entries.
        - `status` 'include' | 'exclude', required: `include` matches the value; `exclude` removes profiles carrying it (includes OR together, every exclude applies).
        - `value` string, required: The filter value (max 500 chars); for enum-backed fields use a value GET /prospects/filter-options lists for the field — other values match nothing.
        - `label` string: Optional display label as returned by GET /prospects/filter-options; accepted and ignored.
      - `job_company_name` union: Name of the current employer, lower-case (e.g. stripe); include/exclude entries, a bare string, or an array of strings (bare strings are includes) — resolve names with GET /prospects/autocomplete?field=company.
        - string
        - union[]
          - union
            - string
            - object
              - …
      - `job_company_website` union: Website domain of the current employer (e.g. stripe.com — scheme, www and trailing slash are stripped); same value shapes as `job_company_name`; resolve with GET /prospects/autocomplete?field=website.
        - string
        - union[]
          - union
            - string
            - object
              - …
      - `linkedin_url` union: Matched as an EXACT term in the stored form linkedin.com/in/<slug> — no scheme, no www., no trailing slash; anything else is accepted and silently matches nothing. Prefer the top-level `linkedinUrl`, which IS normalised before matching. A string, an array of URLs that are OR-joined, or include/exclude entries ({ status, value }); every exclude applies, at most 1000 entries.
        - string
        - union[]
          - union
            - string
            - object
              - …
      - `full_name` union: Free text, but matched as an EXACT lower-case term against the stored full name (e.g. ada nwosu): there is no partial matching, so a differently cased or partial name is accepted and silently matches nothing. A string, or an array of names that are OR-joined (the provider caps a terms list at 1000).
        - string
        - number
        - boolean
        - string[]
      - `first_name` union: Free text, matched as an EXACT lower-case term: a different case or a nickname is accepted and silently matches nothing. A string, or an array of names that are OR-joined. Cannot be stored in a saved search (422 SAVED_SEARCH_FILTERS_UNSUPPORTED).
        - string
        - number
        - boolean
        - string[]
      - `last_name` union: Free text, matched as an EXACT lower-case term: a different case or spelling is accepted and silently matches nothing. A string, or an array of names that are OR-joined. Cannot be stored in a saved search (422 SAVED_SEARCH_FILTERS_UNSUPPORTED).
        - string
        - number
        - boolean
        - string[]
      - `sex` union: One of exactly: female, male. A string, or an array of both (OR-joined).
        - string
        - number
        - boolean
        - string[]
      - `work_email` union: Free text, matched as an EXACT lower-case term against the stored work email: a different case or an alias is accepted and silently matches nothing. A string, or an array of addresses that are OR-joined.
        - string
        - number
        - boolean
        - string[]
      - `mobile_phone` union: Free text, matched as an EXACT term, so send E.164 with the leading + (e.g. +14155552671); any other formatting is accepted and silently matches nothing. A string, or an array of numbers that are OR-joined.
        - string
        - number
        - boolean
        - string[]
      - `personal_emails` union: Free text, matched as an EXACT lower-case term against every personal email on the profile: any other spelling is accepted and silently matches nothing. A string, or an array of addresses that are OR-joined.
        - string
        - number
        - boolean
        - string[]
      - `job_title` union: Exact lower-case current job title (e.g. chief financial officer); a string or an array of titles — use `keywords` for partial matches and GET /prospects/autocomplete?field=title for suggestions.
        - string
        - number
        - boolean
        - string[]
      - `job_company_location_name` union: Locality of the current employer's headquarters as a PDL location name (e.g. san francisco, california, united states); resolve with GET /prospects/autocomplete?field=location.
        - string
        - number
        - boolean
        - string[]
      - `location_name` union: Where the person lives, as a PDL location name (e.g. london, greater london, united kingdom); resolve with GET /prospects/autocomplete?field=location.
        - string
        - number
        - boolean
        - string[]
      - `github_url` union: Free text, matched as an EXACT term in the stored form github.com/<username> — no scheme, no trailing slash; anything else is accepted and silently matches nothing. A string, or an array of URLs that are OR-joined.
        - string
        - number
        - boolean
        - string[]
      - `github_username` union: Free text, matched as an EXACT lower-case term against the stored GitHub username: a different case is accepted and silently matches nothing. A string, or an array of usernames that are OR-joined.
        - string
        - number
        - boolean
        - string[]
      - `facebook_url` union: Free text, matched as an EXACT term in the stored form facebook.com/<slug> — no scheme, no trailing slash; anything else is accepted and silently matches nothing. A string, or an array of URLs that are OR-joined.
        - string
        - number
        - boolean
        - string[]
      - `education.school.name` union: Lower-case name of a school attended (e.g. stanford university); resolve with GET /prospects/autocomplete?field=school.
        - string
        - number
        - boolean
        - string[]
      - `experience.title.name` union: Exact lower-case title held at any past job; a string or an array of titles.
        - string
        - number
        - boolean
        - string[]
      - `experience.company.name` union: Lower-case name of any past employer; a string or an array — resolve with GET /prospects/autocomplete?field=company.
        - string
        - number
        - boolean
        - string[]
      - `experience.company.website` union: Free text: the website host of any past employer (e.g. stripe.com). The scheme, www. and a trailing slash are stripped and both the host+path and host-only forms are tried, so a full URL still matches; a host the provider does not store matches nothing. A string, or an array of hosts that are OR-joined.
        - string
        - number
        - boolean
        - string[]
      - `job_start_date` union: Free text, matched as an EXACT term and NOT as a range: the stored start date of the current job, YYYY-MM or YYYY-MM-DD exactly as stored (most profiles store YYYY-MM), so 2023-05-01 does not match a profile stored as 2023-05. A string, or an array of dates that are OR-joined.
        - string
        - number
        - boolean
        - string[]
      - `skills` union: Lower-case skill (e.g. python); a string, or an array of skills any of which may match — resolve with GET /prospects/autocomplete?field=skill.
        - string
        - number
        - boolean
        - string[]
      - `certifications.name` union: Lower-case certification name (e.g. pmp); a string or an array.
        - string
        - number
        - boolean
        - string[]
      - `experience.company.location.name` union: Locality of any past employer's headquarters as a PDL location name.
        - string
        - number
        - boolean
        - string[]
      - `keywords` string[]: Free text: up to 50 terms (200 chars each), each matched against the current job title only and OR-joined, so any one may match. A bare term matches anywhere in the title (growth matches Head of Growth); a term carrying your own * or ? must match the WHOLE title (manager* starts with, *manager ends with, ? is exactly one character). Matching is case-insensitive. A term with no text other than wildcards is ignored, since it would match every title, and a list holding only such terms does not count as search criteria. This is the costliest filter the provider serves, so keep the list short.
      - `excludedKeywords` string[]: Free text: up to 50 terms (200 chars each) using exactly the same matching rules as `keywords`, but REMOVING every prospect whose current job title matches any one of them — keywords [engineer] with excludedKeywords [infrastructure] keeps Engineer VP and drops Engineer VP Infrastructure. It reads the whole job title, so it also removes rows matched by `job_title`. A term with no text other than wildcards is ignored, since it would remove every prospect that has a job title. Exclusions only narrow a result set: on their own they are not search criteria and a request carrying nothing else is rejected.
      - `rangeInputs` object: Numeric range filters, each key one of exactly: `job_company_employee_count`, `inferred_years_experience`, `job_company_total_funding_raised` (any other key is rejected). Each value is `{ min?, max? }` with at least one bound and min <= max; several ranges AND with each other and with every other filter.
        - `job_company_employee_count` object: Headcount of the current employer; accepted values are whole numbers and both bounds are inclusive. A min of 0 is ignored rather than applied, so cap headcount with max alone.
          - `min` number: Inclusive lower bound (0 is treated as no bound).
          - `max` number: Inclusive upper bound.
        - `inferred_years_experience` object: Total years of professional experience; accepted values are whole numbers of years and both bounds are inclusive. A min of 0 is ignored rather than applied.
          - `min` number: Inclusive lower bound (0 is treated as no bound).
          - `max` number: Inclusive upper bound.
        - `job_company_total_funding_raised` object: Total funding raised by the current employer; accepted values are whole US dollars, not millions (10000000 means $10M), and both bounds are inclusive. A min of 0 is ignored rather than applied.
          - `min` number: Inclusive lower bound (0 is treated as no bound).
          - `max` number: Inclusive upper bound.

## Response `201`

Success

- object
  - `savedSearch` object, required
    - `id` string, required
    - `title` string, required
    - `filters` object, nullable, required: Filters in the vocabulary of `searchType`; null only when a stored people blob could not be translated at all.
    - `ignoredFilterKeys` string[], required: Stored keys with no equivalent search field, dropped from `filters` (always empty for company searches).
    - `searchType` 'people' | 'company', required
    - `createdAt` string, date-time, nullable, required
    - `updatedAt` string, date-time, nullable, required

## 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)
