---
title: "Search Connectable Apps"
method: GET
path: "/v1/teams/{team_id}/connect/apps"
tags: ["app connect"]
---

# Search Connectable Apps

`GET /v1/teams/{team_id}/connect/apps`

## Request

- Base URL: `https://api.stormy.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stormy.ai/v1/teams/{team_id}/connect/apps`
- Auth: none declared

Search the live registry for apps this team could connect.

Until this route existed the registry was reachable only by GUESSING a slug
and reading the 404 body of ``connect/link`` — so "find out what they
already run and offer to connect it" was an unrunnable instruction. The
search is the registry's own, never a list maintained here.

IT ANSWERS A DESCRIPTION AS WELL AS A NAME, and the second one is what the
product actually asks. The registry is a NAME index: a shop that says "our
books" or "accounting and invoicing" matched nothing at all, and the miss
came back 200 with zero rows — which the onboarding face draws as a spinner
that never stops. So a phrase the index cannot answer goes once through
`connect_intent`, which names the products and looks each one back up here.
The name search is still tried FIRST and unchanged, so a caller that knows
what it wants pays nothing for the lane, and `matched` says which one
answered.

## Path parameters

- `team_id` string, uuid, required

## Query parameters

- `q` string, required
- `limit` integer

## Headers

- `authorization` string, nullable
- `x-darwin-token` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

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