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

# Named Connectable Apps

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

## 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/named`
- Auth: none declared

Registry rows for product names the screen already knows — no model.

The Connections panel opens on a first screenful (the products the product's
own jobs plug into) so it is never empty while the model-named shelf is
being built, 6-10s cold. Those are NAMES; this turns them into the registry's
own apps in one request: the real slug (`Xero` is `xero_accounting_api`), the
registry's mark, and `own_door` for an app that has a door of its own and must
not be offered through this one. A name the registry does not carry is absent
— the registry stays the only truth about which apps exist — and each row
says which name asked for it (`asked`).

Unlike `connect/apps` this never falls back to the intent lane: a name that
misses is a miss, not a phrase to interpret, so it costs no model call and
the lookups are the registry's own one-hour cache.

## Path parameters

- `team_id` string, uuid, required

## Query parameters

- `names` string[], required

## Headers

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

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

## Changes

> 68 revisions in range; 1 not diffed.

- **2026-10-02** `146c9ac992af`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/stormy/apis/stormy-control-plane/changes/v1/teams/:team_id/connect/apps/named/get.md)

---

[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/a40e83844eaa?raw)
