# Discover

```text
POST /v1/discover
```

Search the catalog by describing the job in plain language. Free, public (no key required), and it never executes a paid call.

## Request

```json
{"query": "find a verified email for a person", "limit": 10}
```

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `query` | string | yes | plain-language description of the job |
| `limit` | integer | no | 1–50, default 10 |

## Response

```json
{
  "items": [
    {
      "capability": "contact.find",
      "title": "Find a work email",
      "description": "Turn a name and a company domain into a verified work email.",
      "status": "coming_soon",
      "providers": ["...", "..."],
      "live_providers": [],
      "platforms": [],
      "starting_price": {"amount": "0.05", "currency": "USD"},
      "score": 1.0,
      "hint": "routergrowth inspect -c contact.find"
    }
  ]
}
```

| Field | Notes |
| --- | --- |
| `status` | `live` or `coming_soon`; never present a coming-soon capability's sandbox output as real data |
| `live_providers` | providers with a real adapter and an active account, routable in production |
| `starting_price` | the cheapest platform-funded offer |
| `score` | relevance, normalized to the top hit |
| `hint` | the CLI command to inspect the capability |

Matching is keyword-and-synonym based over capability names, summaries and fields, with a modest boost for live capabilities. An empty `items` array means nothing in the catalog matches: check the [catalog](/catalog) or ask for the capability at [hello@routergrowth.com](mailto:hello@routergrowth.com).

## Next

[Inspect](/docs/api/inspect) the winning candidate before running it.
