List kits
Fetch the curated tool collections, each with its tools already resolved.
On this page
A kit is the tool catalog re-cut by intent and curated by hand, so a picker can offer a shortlist instead of the whole catalog. Each kit arrives with its tools already resolved and filtered to what the account can run, its own tab row, and the tool to open by default.
Fetch this once when your picker opens and render straight from it. No follow-up call to List tools is needed to build the UI.
https://api2.rundiffusion.com/api/v2/kitsRequest
Headers
AuthorizationstringRequired- Bearer token. This endpoint accepts an OAuth device flow token, a Personal API Access Token, or a Company API Access Token. See Authentication.
Authorization: Bearer eyJhbGciOi…
Every parameter is optional.
Query
team_idstringoptional- 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 a kit depends on what the selected account can run.
https://api2.rundiffusion.com/api/v2/kits?team_id=Tq8vNc…
Response
200 OK with every kit you can see under data. This endpoint is unpaged:
there are a handful of kits and callers want all of them, so there is no
has_more and no cursor.
{
"data": [
{
"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" }
]
}
]
}
]
}Top level
dataarray- Every kit you can see, in display order. See Kit object below. Unpaged, so there is no cursor to follow.
Kit object
idstring- Stable kit identifier, such as image, imageEdit, or 3d. Pass it as kit_id to Get a kit. Note this one id is camelCase while the rest of the API is snake_case: it is the same value the web app uses in its URL, and a second spelling would mean two names for one kit.
labelstring- Display name. Show this, never the id.
iconstring- Material Design Icons name for the kit's card, such as mdi-image. Falls back to a generic shape icon when a kit has none.
descriptionstring- One-line blurb to show under the kit name. Empty string when unset, rather than null.
kit_tagsarray- The tab row for this kit, as plain strings in display order: Featured first when present, then the rest alphabetically, then Other last. Derived from the tools actually returned, so no tab renders empty.
default_tool_idstring | null- The tool to open when the user has no stored preference. Always one of the tools below, or null when the kit has none.
toolsarray- The kit's tools in curated order, which is the order to render them in. Tools this account cannot run are already removed. See Tool entry below.
Tool entry
toolobject- The tool itself, in the same shape List tools returns, so one renderer serves both. Resolved live from the catalog rather than stored on the kit, so a renamed tool is never stale here.
kit_tagsarray- Which tabs inside this kit the tool appears under. Match these against the kit's own kit_tags to build the filter. Unrelated to tool.tool_tags, which is the catalog-wide taxonomy.
labelsarray- Small badges to show on the tool's card, each { id, icon, label } and sometimes carrying value, type, or tooltip. Capability signalling only: unlike a kit tag, a label never filters.
Two different kinds of tag
A response carries two tag vocabularies that look alike and are not interchangeable.
kit_tags are the tabs within one kit. They are editorial strings chosen by a
curator, not ids, and they only mean anything inside the kit that carries them.
Build a kit's filter by matching a tool entry's kit_tags against the kit's
own.
tool.tool_tags is the catalog-wide taxonomy, the same objects
List tools returns, each with an id you can pass back
as the tool_tag filter. Those ids are meaningless as kit tabs, and a kit tab
string is meaningless as a catalog filter.
What you can see
Which kits come back depends on the client you signed in from, which the server reads from the device record written when you completed the device flow. Curation is scoped per surface, so a plugin sees the kits curated for it. There is no parameter for this and asking for another surface's curation is not possible.
A kit whose every tool is invisible to the account is dropped from the response
rather than returned empty, so a kit in data always opens onto something.
Errors
401UNAUTHENTICATED- Missing, malformed, or expired token.
403PLUGIN_NOT_ALLOWED- The active team has not enabled the client you are calling from, the same as every other gated endpoint. See OAuth device flow.
429RATE_LIMITED- Too many requests. Back off and retry per the Retry-After header. See Rate limits.
See Errors for the full envelope and the code list.
