---
title: Nodes
description: The node catalog. The source of truth for building workflow graphs over the API.
updated: 2026-07-22
---

`GET /api/v1/nodes` returns every node you can put in a workflow graph: generation models, helpers, logic, iterators, IO, and the video compose node. It is unauthenticated and cached for one hour.

**This endpoint is the source of truth for building graphs.** If you author nodes or edges over the API, read the node's entry here first. Guessing port names or config keys is how graphs save fine and then do nothing at run time.

```bash
curl https://www.wireflow.ai/api/v1/nodes
```

**Response**

```json
{
  "version": 1,
  "generatedAt": "2026-07-22T09:00:00.000Z",
  "count": 214,
  "nodes": [
    {
      "nodeType": "video:kling_video_2_5_i2v",
      "label": "Kling 2.5 Image to Video",
      "category": "video",
      "source": "fal",
      "inputs": [
        { "id": "prompt", "label": "Prompt", "type": "TEXT", "isPort": true },
        {
          "id": "aspect_ratio",
          "label": "Aspect Ratio",
          "type": "TEXT",
          "isPort": false,
          "default": "16:9",
          "enum": ["16:9", "9:16", "1:1"]
        }
      ],
      "outputs": [
        { "id": "video", "label": "Video", "type": "VIDEO", "isPort": true }
      ],
      "executionCost": "paid",
      "pricingModel": "per-second",
      "estimatedCredits": 45
    }
  ]
}
```

## Query parameters

| Parameter                              | Effect                                   |
| -------------------------------------- | ---------------------------------------- |
| `?category=video`                      | Filter by category.                      |
| `?source=fal\|non-fal\|registry-shell` | Filter by where the node is implemented. |
| `?includeHidden=1`                     | Include hidden nodes (see below).        |

## Reading a node entry

- **`inputs` / `outputs`** are the node's declared surface. Each input has `isPort`:
  - `isPort: true` means wireable. Put it in `data.inputs` and connect an edge with `targetHandle: "in-<id>"`.
  - `isPort: false` means it is a config field. Set it in `data.config`, never in `data.inputs`. Putting a config field in `data.inputs` renders a stray port.
- **`enum`** lists the allowed values for a config field. Values outside the enum are flagged by the write-time lint and fail at the provider after credits are spent.
- **`default`** is what an unset config field resolves to.
- **`dynamicPorts: true`** means the real port set is resolved at run time (templates, `{{token}}` scene graphs, config-derived extractors). `dynamicPortsNote` explains how. The lint warns instead of blocking on these handles.
- **`customNodeType`** is the react-flow `node.type` you must save (e.g. sticky notes need `"stickyNote"`). Absent means `"basedNode"`.
- **`executionCost`** is the reactivity contract: `free` nodes recompute locally and cost nothing; `paid` nodes bill credits and never auto-fire.

## Pricing fields

- **`pricingModel`** — how the node bills: `free`, `flat-usd`, `per-second`, `video-tokens`, `per-image`, or `unknown`.
- **`estimatedCredits`** — the credits a default-config run charges, computed by the same estimator the editor's cost preview uses. `null` means paid but not statically estimable (the `pricingModel` still tells you it bills). A paid node is never shown as `0`.
- **`costUsd`** — raw provider cost, only meaningful for flat-priced nodes. Prefer `estimatedCredits`.

Iterator fan-out multiplies real cost. The estimate is per single run of the node.

## Hidden nodes

By default the catalog excludes hidden nodes: non-primary model variants (quality/routing reaches them through the primary node, so never author them directly), kill-switched providers, and deprecated palette types. `?includeHidden=1` shows them, which is useful for resolving a nodeType you found in an existing graph. Authoring a new node with a deprecated type is rejected at write time.

## Related

- [Workflows](/docs/api/workflows) — create and update graphs built from these nodes.
- [`GET /api/v1/models`](https://www.wireflow.ai/api/v1/models) — the model-only listing. For building graphs, use `/nodes`; it includes non-model nodes (helpers, logic, compose) and the pricing fields above.

---

Documentation index: fetch https://www.wireflow.ai/llms.txt for the full list of Wireflow docs.
