# Get a kit

> Fetch one curated tool collection by its id.

Canonical page: https://www.rundiffusion.com/docs/api/kits/get
Endpoint: GET /api/v2/kits/{kit_id}
Authorization: OAuth device flow or Personal API Access Token or Company API Access Token

---

Returns one kit in exactly the shape [List kits](/docs/api/kits/list) returns
inside `data`, with its tools resolved and filtered the same way.

Prefer the listing when you are building a picker: it is unpaged and returns
every kit in one request, so fetching kits one at a time is slower for no gain.
Reach for this endpoint when you already hold an id, such as one you stored as
a user's last-used kit, and want to refresh just that kit.

`GET /api/v2/kits/{kit_id}`

Authorization: OAuth device flow or Personal API Access Token or Company API Access Token

## Request

**Headers**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `Authorization` | string | Yes | Bearer token. This endpoint accepts an OAuth device flow token, a Personal API Access Token, or a Company API Access Token. See [Authentication](/docs/api/authentication). |

**Path**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `kit_id` | string | Yes | The id of a kit from the [list response](/docs/api/kits/list), such as image or imageEdit. An id you cannot see returns 404. |

**Query**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `team_id` | string | No | The team to read as. Omit it to read as your personal account. This endpoint acts on one account, so pass exactly one id. Which tools resolve inside the kit depends on what the selected account can run. |

No body.

## Response

`200 OK` with the kit object, unwrapped. There is no `data` envelope here: the
listing wraps because it returns a collection, and this returns one kit.

```json
{
  "id": "image",
  "label": "Image",
  "icon": "mdi-image",
  "description": "Generate images from a prompt",
  "kit_tags": ["Featured", "Anime", "Other"],
  "default_tool_id": "Xq2b…",
  "tools": [
    {
      "tool": {
        "id": "Xq2b…",
        "name": "Flux Dev",
        "description": "High-quality text to image",
        "avatar_url": "https://rundiffusion.com/...",
        "average_gen_in_seconds": 8.4,
        "tool_tags": [
          { "id": "tg_1…", "type": "MODEL_FAMILY", "label": "Flux" }
        ],
        "pricing_type": "COST",
        "tokens_per_result": 2
      },
      "kit_tags": ["Featured"],
      "labels": [
        { "id": "label:fast", "icon": "mdi-flash", "label": "Fast" }
      ]
    }
  ]
}
```

Every field is documented on the listing page, under
[Kit object](/docs/api/kits/list#kit-object) and
[Tool entry](/docs/api/kits/list#tool-entry). The two responses cannot disagree
about a kit: this endpoint resolves the same listing and selects from it rather
than running a separate query.

## Why a kit reads as missing

A `404` covers three situations that answer alike on purpose:

- No kit has that id.
- The kit exists but is not published.
- The kit is published but is not shown for the client you signed in from.

Telling them apart would reveal a kit that is deliberately being withheld, so
handle `404` as "not available to you" rather than "does not exist". What a
caller can see is explained under
[What you can see](/docs/api/kits/list#what-you-can-see).

## Errors

| Name | Type | Description |
| --- | --- | --- |
| `401` | UNAUTHENTICATED | Missing, malformed, or expired token. |
| `403` | PLUGIN_NOT_ALLOWED | The active team has not enabled the client you are calling from. See [OAuth device flow](/docs/api/authentication#oauth-device-flow). |
| `404` | KIT_NOT_FOUND | No kit with that id that this caller can see. See [Why a kit reads as missing](#why-a-kit-reads-as-missing) below. |
| `429` | RATE_LIMITED | Too many requests. Back off and retry per the Retry-After header. See [Rate limits](/docs/api/rate-limits#kits). |

See [Errors](/docs/api/errors) for the full envelope and the code list.
