---
title: "List the caller's saved ICPs."
method: GET
path: "/api/v1/icps"
tags: ["icps"]
---

# List the caller's saved ICPs.

`GET /api/v1/icps`

## Request

- Base URL: `https://api.prosp.cc`
- URL: `https://api.prosp.cc/api/v1/icps`
- Auth: OAuth 2 (client credentials, token URL `https://prosp-mcp-641053169627.auth.eu-central-1.amazoncognito.com/oauth2/token`, scopes: `mcp/execute`)

## Response `200`

The caller's ICPs.

- object
  - `icps` Icp[]
    - `icpId` string, required: Server-assigned unique id for this ICP; pass it to `POST /api/v1/discoveries` to run it.
    - `name` string: The display name you gave this ICP.
    - `criteria` DiscoveryCriteria, required: The criteria that describe the companies you want to find. Only `query` is required; the other fields narrow and steer the search. `maxResults` must be 1–200 (a value outside the range is rejected with a 400), and invalid `company_sizes` values are likewise rejected with a 400 rather than silently ignored. Unknown fields are rejected with a 400 that names the offending property.
      - `query` string, required: Free-text description of the companies you want to discover. The primary search signal.
      - `industries` string[]: Target industries. Prospects are scored for fit against these; companies in unrelated industries are filtered out.
      - `locations` string[]: Target countries or regions to search within (e.g. country names). Restricts results to companies located there.
      - `company_sizes` string[]: Company-size buckets to include, by employee headcount. Any combination of: `micro` (≤10), `small` (up to ~50), `medium` (up to ~200), `large` (up to ~500), `enterprise` (500+). Omit to allow any size. Each bucket maps to a `company_size` value; request `micro` to prioritize the ≤10-employee shops, which are returned with `company_size: micro` (the output `company_size` uses the SAME lowercase tokens as this input filter, so a value read off a result can be re-submitted verbatim). NOTE: this filter is ADVISORY, not strict — in thin markets the engine may relax it to adjacent buckets and still deliver e.g. `micro` under a `small` request (this is disclosed at delivery via a `FILTER_RELAXED` suggestion). So omitting a size does not guarantee its exclusion; it expresses preference, not a hard exclusion.
      - `keywords` string[]: Additional keywords or phrases to bias the search toward (e.g. products, technologies, or capabilities).
      - `exclusions` string[]: Domains or terms to exclude from results — e.g. competitors, existing customers, or your own brand. Matching companies are dropped from discovery.
      - `sub_country_regions` string[]: ISO-3166-2 sub-country regions (e.g. states or provinces) to focus the search within a country. Validated against the supported region set. This is a REGIONAL PREFERENCE, not a hard filter: companies located in the requested region(s) are prioritized (ranked higher for relevance), which can substantially raise the in-region share of your results, while companies OUTSIDE those regions are still returned, ranked lower. It is a precision dial — expect fewer but more-targeted results, trading total volume for regional focus. Omit it (or clear it) to broaden coverage across the whole country. When this field is set, the discovery result's `suggestions` array discloses the relaxation: a `FILTER_RELAXED` region suggestion (naming the filter, with a `{sub_country_regions: []}` correction) when returned companies with a known region fall outside the request, otherwise an informational `REGION_PREFERENCE_APPLIED` note — both carrying the same one-tap correction.
      - `target_business_models` string[]: Optional value-chain-role filter. When set, only companies whose classified business model is one of these roles are kept; a prospect whose role is a confirmed member of none is dropped. Use e.g. `["manufacturer"]` for manufacturers only, or `["distributor"]` for wholesale distributors only. Omit to accept any role (default — no role filtering). The role describes what the TARGET company itself IS, taken from the noun the customer used for the targets in their own language (roasters, farms, makers, producers, tostadores, Kaffeeroester, vyrobce -> `manufacturer`; shops, stores -> `retailer`; wholesalers, importers -> `distributor`). It is NEVER inferred from the customer's own business or supply chain: a coffee shop asking for roasters wants `manufacturer`, not `distributor`, even though a coffee shop buys from distributors. When the request names no target role, or you are unsure, OMIT the field — a wrong role silently drops every genuine match, an omitted one drops nothing.
      - `website` string: Your own website. Automatically excluded from results so you never discover yourself.
      - `maxResults` integer: Maximum number of prospects to return for this discovery (1–200; a value outside this range is rejected with 400, not clamped; defaults to 50).
      - `acknowledge_low_yield` boolean: Set to `true` to run this discovery even when the saturation pre-check estimates ~0 net-new companies (see the `409 saturation_warning` response on `POST /mcp/tools/execute`). The acknowledged run charges normally and starts. Omit (or `false`) for the default behaviour, where a saturated ICP is held with a `409` and NOT charged. Not a search criterion — it steers the warn-and-confirm gate only, which is why it is the ONE field that may accompany `icpId` in a `DiscoveryTrigger` body.
      - `language` string: Optional market-language hint as an ISO-639-1 code (e.g. `de`, `cs`, `pl`). Steers the query→ICP expansion so keyword/industry expansion is generated in the market's language rather than inferred solely from `query`. Advisory, not a hard filter — company and person names are never translated, and results are not restricted to a single content language. Omit to let the engine infer the language from `query` itself.
    - `createdAt` string, date-time: When the ICP was created (ISO-8601).
    - `updatedAt` string, date-time: When the ICP was last updated (ISO-8601).

## Other responses

- `401`: Missing/invalid/expired Bearer token.
- `405`: HTTP method not allowed on this endpoint (rejected before any credit debit).
- `429`: Rate limit exceeded (100 requests / 60s per customer).

---

[API](https://skmtc.dev/prosp/apis/prosp-discovery-api.md) · [All operations](https://skmtc.dev/prosp/apis/prosp-discovery-api/llms.txt) · [OpenAPI document](https://skmtc.dev/prosp/apis/prosp-discovery-api/revisions/1f2e0c55da22?raw)
