---
title: "Search the catalog — find operations and workflows by natural language intent"
method: GET
path: "/search"
tags: ["search"]
---

# Search the catalog — find operations and workflows by natural language intent

`GET /search`

BM25 search over all registered API operations, Arazzo workflows, and the Jentic public API catalog.

Returns id, summary, description (≤3 sentences), type, score, and _links.
- `source: "local"` — operation or workflow in your local registry
- `source: "catalog"` — API available from the Jentic public catalog; add credentials to use

Each row also carries `matched_on` (which fields the query hit) and an
optional `match_snippet` with the matched span wrapped in `` markers.

_links.inspect → GET /inspect/{id} for full schema and auth detail.
_links.execute → broker URL to call directly once ready.
Typical flow: search → inspect → execute.

## Query parameters

- `q` string, required — Search query, e.g. "send an email" or "create payment"
- `n` integer — Number of results to return
- `source` string, nullable — Restrict results by source: `workspace` (locally registered APIs and workflows) or `directory` (Jentic public catalog). Default `all` mixes both. Legacy synonyms `local`→`workspace` and `catalog`→`directory` are accepted for backwards compatibility.
- `type` string, nullable — Restrict by result type: `endpoint` (workspace operations only), `workflow` (workspace workflows + directory APIs that ship workflows), or `api` (directory APIs). Default `all` returns the full mix. Directory APIs always carry a `has_workflows` boolean indicating whether the public catalog also ships Arazzo workflows for that vendor.

## Response `200`

Successful Response

- SearchResult[]
  - `type` string, required — Result type: 'operation' for API endpoints, 'workflow' for multi-step Arazzo workflows
  - `id` string, required — Capability ID in METHOD/host/path format
  - `slug` string, nullable — Workflow slug (workflows only) — used as path segment in POST /workflows/{slug}
  - `summary` string, nullable — Short description of what this capability does
  - `description` string, nullable — Detailed description from the OpenAPI operation or Arazzo workflow
  - `score` number, required — BM25 relevance score (0.0-1.0) — higher is more relevant to the search query
  - `involved_apis` string[] — List of upstream API hosts involved in this capability (for workflows, may list multiple)
  - `matched_on` string[], nullable — Which fields the query matched against — at least one of `name`, `operation_summary`, `description`, `tag`. Computed via cheap substring checks post-rank; intentionally pragmatic rather than reflecting BM25's internal matched fields.
  - `match_snippet` string, nullable — Short text snippet (~80 chars) around the matched substring from the highest-priority field that matched (priority order: `name > operation_summary > description > tag`). The matched span is wrapped in `\u0001` sentinel characters so the client can render its own highlight without an XSS-prone HTML payload. Null when the result was a BM25 hit without an exact substring match in any field.

## Other responses

- `422` — Validation Error

## Changes

- **2026-05-29** `2f5d07712937` — 4 info
  - added the new optional `query` request parameter `source`
  - added the new optional `query` request parameter `type`
  - added the optional property `items/match_snippet` to the response with the `200` status
  - added the optional property `items/matched_on` to the response with the `200` status
- **2026-04-13** `76e8f6063728` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/jentic/apis/jentic-control-plane-api/changes/search/get.md)

---

[API](https://skmtc.dev/jentic/apis/jentic-control-plane-api.md) · [All operations](https://skmtc.dev/jentic/apis/jentic-control-plane-api/llms.txt) · [OpenAPI document](https://skmtc.dev/jentic/apis/jentic-control-plane-api/revisions/ba15fae43892?raw)
