# Actions

## List actions

`client.actions.list(RequestOptionsoptions?): ActionListResponse`

**get** `/actions`

Returns released prebuilt Flora actions that can be executed by the public API. Action identifiers are raw slugs such as rotate-image, not action-prefixed IDs.

### Returns

- `ActionListResponse`

  - `actions: Array<Action>`

    - `action_id: "color-grade-image-browser" | "overlay-image-browser" | "draw-image-browser" | 37 more`

      Action identifier

      - `"color-grade-image-browser"`

      - `"overlay-image-browser"`

      - `"draw-image-browser"`

      - `"crop-image-browser"`

      - `"scene-3d-image-browser"`

      - `"blur-image-browser"`

      - `"change-image-ar-browser"`

      - `"rotate-image-browser"`

      - `"color-filter-image-browser"`

      - `"color-tint-image-browser"`

      - `"filter-color-image-browser"`

      - `"duplicate-image-browser"`

      - `"side-by-side-composite-browser"`

      - `"add-shape-to-image-browser"`

      - `"add-text-to-image-browser"`

      - `"qr-code-generator-browser"`

      - `"resize-image-browser"`

      - `"shader-effect-browser"`

      - `"split-text-browser"`

      - `"find-and-replace-text-browser"`

      - `"concat-text-browser"`

      - `"ken-burns-video"`

      - `"stitch-videos"`

      - `"split-video"`

      - `"extract-video-frames"`

      - `"color-grade-video"`

      - `"video-to-frame-grid"`

      - `"boomerang-video"`

      - `"reverse-video"`

      - `"video-to-long-exposure"`

      - `"video-effect"`

      - `"color-filter-video"`

      - `"speed-up-video"`

      - `"slow-down-video"`

      - `"duplicate-video"`

      - `"greenscreen-video"`

      - `"resize-video"`

      - `"change-video-ar"`

      - `"split-audio-from-video"`

      - `"merge-audio-into-video"`

    - `charged_cost: number`

      Cost per execution in USD

    - `description: string`

      Action description

    - `inputs: Array<Input>`

      Action input slots

      - `name: string`

        Action input or output name

      - `type: "image" | "video" | "text" | "audio"`

        Action input or output media type

        - `"image"`

        - `"video"`

        - `"text"`

        - `"audio"`

      - `dynamic?: boolean`

        Deprecated alias for `multiple: true`. Mirrors `multiple` for back-compat.

      - `multiple?: true | UnionMember1`

        Many-connections form. `true` is unbounded shorthand; the object form sets explicit min/max bounds.

        - `true`

          - `true`

        - `UnionMember1`

          - `max?: number`

          - `min?: number`

      - `optional?: boolean`

        Whether the slot allows zero connections in single-input mode. Ignored when `multiple` is the object form (use `min: 0` there instead).

    - `language: "javascript" | "python"`

      Action runtime language

      - `"javascript"`

      - `"python"`

    - `name: string`

      Action name

    - `outputs: Array<Output>`

      Action output slots

      - `name: string`

        Action input or output name

      - `type: "image" | "video" | "text" | "audio"`

        Action input or output media type

        - `"image"`

        - `"video"`

        - `"text"`

        - `"audio"`

      - `dynamic?: boolean`

        Deprecated alias for `multiple: true`. Mirrors `multiple` for back-compat.

      - `multiple?: true | UnionMember1`

        Many-connections form. `true` is unbounded shorthand; the object form sets explicit min/max bounds.

        - `true`

          - `true`

        - `UnionMember1`

          - `max?: number`

          - `min?: number`

      - `optional?: boolean`

        Whether the slot allows zero connections in single-input mode. Ignored when `multiple` is the object form (use `min: 0` there instead).

    - `params: Array<Param>`

      Action parameters

      - `key: string`

        Action parameter key

      - `type: string`

        Action parameter control type

      - `available_values?: Array<AvailableValue>`

        Allowed parameter values

        - `label: string`

        - `value: string`

        - `description?: string`

      - `default_value?: unknown`

        Default parameter value

      - `info_tooltip?: string`

        Action parameter description

      - `label?: string`

        Action parameter label

      - `max_number_value?: number`

      - `min_number_value?: number`

      - `number_step?: number`

### Example

```typescript
import FLORA from '@flora-ai/flora';

const client = new FLORA({
  apiKey: process.env['FLORA_API_KEY'], // This is the default and can be omitted
});

const actions = await client.actions.list();

console.log(actions.actions);
```

#### Response

```json
{
  "actions": [
    {
      "action_id": "color-grade-image-browser",
      "charged_cost": 0,
      "description": "Rotate an image by a fixed angle.",
      "inputs": [
        {
          "name": "image",
          "type": "image",
          "dynamic": true,
          "multiple": true,
          "optional": true
        }
      ],
      "language": "javascript",
      "name": "Rotate Image",
      "outputs": [
        {
          "name": "image",
          "type": "image",
          "dynamic": true,
          "multiple": true,
          "optional": true
        }
      ],
      "params": [
        {
          "key": "angle",
          "type": "select",
          "available_values": [
            {
              "label": "label",
              "value": "value",
              "description": "description"
            }
          ],
          "default_value": {},
          "info_tooltip": "Rotation angle in degrees.",
          "label": "Angle",
          "max_number_value": 0,
          "min_number_value": 0,
          "number_step": 0
        }
      ]
    }
  ]
}
```

## Get an action

`client.actions.retrieve("color-grade-image-browser" | "overlay-image-browser" | "draw-image-browser" | 37 moreactionID, RequestOptionsoptions?): ActionRetrieveResponse`

**get** `/actions/{actionId}`

Returns metadata for one released prebuilt Flora action. Action identifiers are raw slugs such as rotate-image, not action-prefixed IDs.

### Parameters

- `actionID: "color-grade-image-browser" | "overlay-image-browser" | "draw-image-browser" | 37 more`

  Action identifier

  - `"color-grade-image-browser"`

  - `"overlay-image-browser"`

  - `"draw-image-browser"`

  - `"crop-image-browser"`

  - `"scene-3d-image-browser"`

  - `"blur-image-browser"`

  - `"change-image-ar-browser"`

  - `"rotate-image-browser"`

  - `"color-filter-image-browser"`

  - `"color-tint-image-browser"`

  - `"filter-color-image-browser"`

  - `"duplicate-image-browser"`

  - `"side-by-side-composite-browser"`

  - `"add-shape-to-image-browser"`

  - `"add-text-to-image-browser"`

  - `"qr-code-generator-browser"`

  - `"resize-image-browser"`

  - `"shader-effect-browser"`

  - `"split-text-browser"`

  - `"find-and-replace-text-browser"`

  - `"concat-text-browser"`

  - `"ken-burns-video"`

  - `"stitch-videos"`

  - `"split-video"`

  - `"extract-video-frames"`

  - `"color-grade-video"`

  - `"video-to-frame-grid"`

  - `"boomerang-video"`

  - `"reverse-video"`

  - `"video-to-long-exposure"`

  - `"video-effect"`

  - `"color-filter-video"`

  - `"speed-up-video"`

  - `"slow-down-video"`

  - `"duplicate-video"`

  - `"greenscreen-video"`

  - `"resize-video"`

  - `"change-video-ar"`

  - `"split-audio-from-video"`

  - `"merge-audio-into-video"`

### Returns

- `ActionRetrieveResponse`

  - `action_id: "color-grade-image-browser" | "overlay-image-browser" | "draw-image-browser" | 37 more`

    Action identifier

    - `"color-grade-image-browser"`

    - `"overlay-image-browser"`

    - `"draw-image-browser"`

    - `"crop-image-browser"`

    - `"scene-3d-image-browser"`

    - `"blur-image-browser"`

    - `"change-image-ar-browser"`

    - `"rotate-image-browser"`

    - `"color-filter-image-browser"`

    - `"color-tint-image-browser"`

    - `"filter-color-image-browser"`

    - `"duplicate-image-browser"`

    - `"side-by-side-composite-browser"`

    - `"add-shape-to-image-browser"`

    - `"add-text-to-image-browser"`

    - `"qr-code-generator-browser"`

    - `"resize-image-browser"`

    - `"shader-effect-browser"`

    - `"split-text-browser"`

    - `"find-and-replace-text-browser"`

    - `"concat-text-browser"`

    - `"ken-burns-video"`

    - `"stitch-videos"`

    - `"split-video"`

    - `"extract-video-frames"`

    - `"color-grade-video"`

    - `"video-to-frame-grid"`

    - `"boomerang-video"`

    - `"reverse-video"`

    - `"video-to-long-exposure"`

    - `"video-effect"`

    - `"color-filter-video"`

    - `"speed-up-video"`

    - `"slow-down-video"`

    - `"duplicate-video"`

    - `"greenscreen-video"`

    - `"resize-video"`

    - `"change-video-ar"`

    - `"split-audio-from-video"`

    - `"merge-audio-into-video"`

  - `charged_cost: number`

    Cost per execution in USD

  - `description: string`

    Action description

  - `inputs: Array<Input>`

    Action input slots

    - `name: string`

      Action input or output name

    - `type: "image" | "video" | "text" | "audio"`

      Action input or output media type

      - `"image"`

      - `"video"`

      - `"text"`

      - `"audio"`

    - `dynamic?: boolean`

      Deprecated alias for `multiple: true`. Mirrors `multiple` for back-compat.

    - `multiple?: true | UnionMember1`

      Many-connections form. `true` is unbounded shorthand; the object form sets explicit min/max bounds.

      - `true`

        - `true`

      - `UnionMember1`

        - `max?: number`

        - `min?: number`

    - `optional?: boolean`

      Whether the slot allows zero connections in single-input mode. Ignored when `multiple` is the object form (use `min: 0` there instead).

  - `language: "javascript" | "python"`

    Action runtime language

    - `"javascript"`

    - `"python"`

  - `name: string`

    Action name

  - `outputs: Array<Output>`

    Action output slots

    - `name: string`

      Action input or output name

    - `type: "image" | "video" | "text" | "audio"`

      Action input or output media type

      - `"image"`

      - `"video"`

      - `"text"`

      - `"audio"`

    - `dynamic?: boolean`

      Deprecated alias for `multiple: true`. Mirrors `multiple` for back-compat.

    - `multiple?: true | UnionMember1`

      Many-connections form. `true` is unbounded shorthand; the object form sets explicit min/max bounds.

      - `true`

        - `true`

      - `UnionMember1`

        - `max?: number`

        - `min?: number`

    - `optional?: boolean`

      Whether the slot allows zero connections in single-input mode. Ignored when `multiple` is the object form (use `min: 0` there instead).

  - `params: Array<Param>`

    Action parameters

    - `key: string`

      Action parameter key

    - `type: string`

      Action parameter control type

    - `available_values?: Array<AvailableValue>`

      Allowed parameter values

      - `label: string`

      - `value: string`

      - `description?: string`

    - `default_value?: unknown`

      Default parameter value

    - `info_tooltip?: string`

      Action parameter description

    - `label?: string`

      Action parameter label

    - `max_number_value?: number`

    - `min_number_value?: number`

    - `number_step?: number`

### Example

```typescript
import FLORA from '@flora-ai/flora';

const client = new FLORA({
  apiKey: process.env['FLORA_API_KEY'], // This is the default and can be omitted
});

const action = await client.actions.retrieve('color-grade-image-browser');

console.log(action.action_id);
```

#### Response

```json
{
  "action_id": "color-grade-image-browser",
  "charged_cost": 0,
  "description": "Rotate an image by a fixed angle.",
  "inputs": [
    {
      "name": "image",
      "type": "image",
      "dynamic": true,
      "multiple": true,
      "optional": true
    }
  ],
  "language": "javascript",
  "name": "Rotate Image",
  "outputs": [
    {
      "name": "image",
      "type": "image",
      "dynamic": true,
      "multiple": true,
      "optional": true
    }
  ],
  "params": [
    {
      "key": "angle",
      "type": "select",
      "available_values": [
        {
          "label": "label",
          "value": "value",
          "description": "description"
        }
      ],
      "default_value": {},
      "info_tooltip": "Rotation angle in degrees.",
      "label": "Angle",
      "max_number_value": 0,
      "min_number_value": 0,
      "number_step": 0
    }
  ]
}
```

## Start an action run

`client.actions.run(ActionRunParamsbody, RequestOptionsoptions?): ActionRunResponse`

**post** `/runs/action`

Starts a headless prebuilt action run using raw action slugs such as rotate-image, workspace_id, project_id, and non-empty inputs. Direct action runs do not create or mutate canvas nodes. Mutating public API requests support an optional Idempotency-Key header for client retries; duplicate keys within two hours return idempotency_duplicate.

### Parameters

- `ActionRunParams = Variant0 | Variant1 | Variant2 | 37 more`

  - `ActionRunParamsBase`

    - `action_id: "color-grade-image-browser"`

      - `"color-grade-image-browser"`

    - `inputs: Array<Input>`

      Action inputs. Direct action runs are headless and read inputs from URLs/text rather than canvas edges.

      - `type: "image" | "video" | "audio" | "text"`

        Action input type

        - `"image"`

        - `"video"`

        - `"audio"`

        - `"text"`

      - `name?: string`

        Optional input name

      - `text?: string`

        Input text value

      - `url?: string`

        Input media URL

    - `project_id: string`

      Project identifier. Use the public API ID returned by list projects; it must start with prj_. Used for ownership, billing, and run history. Direct action runs do not mutate the project canvas.

    - `workspace_id: string`

      Workspace identifier. Use the public API ID returned by list workspaces; it must start with ws_.

    - `params?: Params`

      Action parameters

      - `advanced?: boolean`

        Show additional controls

      - `brightness?: number`

        Brightness

      - `contrast?: number`

        Contrast

      - `highlights?: number`

        Highlights

      - `hue_shift?: number`

        Hue Shift (deg)

      - `saturation?: number`

        Saturation

      - `shadows?: number`

        Shadows

      - `show_scope?: boolean`

        Show Color Scope in preview

      - `tint?: number`

        Tint (Green-Magenta)

      - `warmth?: number`

        Warmth

  - `Variant0 extends ActionRunParamsBase`

  - `Variant1 extends ActionRunParamsBase`

  - `Variant2 extends ActionRunParamsBase`

  - `Variant3 extends ActionRunParamsBase`

  - `Variant4 extends ActionRunParamsBase`

  - `Variant5 extends ActionRunParamsBase`

  - `Variant6 extends ActionRunParamsBase`

  - `Variant7 extends ActionRunParamsBase`

  - `Variant8 extends ActionRunParamsBase`

  - `Variant9 extends ActionRunParamsBase`

  - `Variant10 extends ActionRunParamsBase`

  - `Variant11 extends ActionRunParamsBase`

  - `Variant12 extends ActionRunParamsBase`

  - `Variant13 extends ActionRunParamsBase`

  - `Variant14 extends ActionRunParamsBase`

  - `Variant15 extends ActionRunParamsBase`

  - `Variant16 extends ActionRunParamsBase`

  - `Variant17 extends ActionRunParamsBase`

  - `Variant18 extends ActionRunParamsBase`

  - `Variant19 extends ActionRunParamsBase`

  - `Variant20 extends ActionRunParamsBase`

  - `Variant21 extends ActionRunParamsBase`

  - `Variant22 extends ActionRunParamsBase`

  - `Variant23 extends ActionRunParamsBase`

  - `Variant24 extends ActionRunParamsBase`

  - `Variant25 extends ActionRunParamsBase`

  - `Variant26 extends ActionRunParamsBase`

  - `Variant27 extends ActionRunParamsBase`

  - `Variant28 extends ActionRunParamsBase`

  - `Variant29 extends ActionRunParamsBase`

  - `Variant30 extends ActionRunParamsBase`

  - `Variant31 extends ActionRunParamsBase`

  - `Variant32 extends ActionRunParamsBase`

  - `Variant33 extends ActionRunParamsBase`

  - `Variant34 extends ActionRunParamsBase`

  - `Variant35 extends ActionRunParamsBase`

  - `Variant36 extends ActionRunParamsBase`

  - `Variant37 extends ActionRunParamsBase`

  - `Variant38 extends ActionRunParamsBase`

  - `Variant39 extends ActionRunParamsBase`

### Returns

- `ActionRunResponse`

  - `charged_cost: number`

    Cost charged in USD

  - `estimated_seconds: number | null`

  - `run_id: string`

    Run identifier

  - `type: "generation" | "technique" | "action"`

    Run type

    - `"generation"`

    - `"technique"`

    - `"action"`

  - `action?: Action | null`

    - `action_id: "color-grade-image-browser" | "overlay-image-browser" | "draw-image-browser" | 37 more`

      Action identifier

      - `"color-grade-image-browser"`

      - `"overlay-image-browser"`

      - `"draw-image-browser"`

      - `"crop-image-browser"`

      - `"scene-3d-image-browser"`

      - `"blur-image-browser"`

      - `"change-image-ar-browser"`

      - `"rotate-image-browser"`

      - `"color-filter-image-browser"`

      - `"color-tint-image-browser"`

      - `"filter-color-image-browser"`

      - `"duplicate-image-browser"`

      - `"side-by-side-composite-browser"`

      - `"add-shape-to-image-browser"`

      - `"add-text-to-image-browser"`

      - `"qr-code-generator-browser"`

      - `"resize-image-browser"`

      - `"shader-effect-browser"`

      - `"split-text-browser"`

      - `"find-and-replace-text-browser"`

      - `"concat-text-browser"`

      - `"ken-burns-video"`

      - `"stitch-videos"`

      - `"split-video"`

      - `"extract-video-frames"`

      - `"color-grade-video"`

      - `"video-to-frame-grid"`

      - `"boomerang-video"`

      - `"reverse-video"`

      - `"video-to-long-exposure"`

      - `"video-effect"`

      - `"color-filter-video"`

      - `"speed-up-video"`

      - `"slow-down-video"`

      - `"duplicate-video"`

      - `"greenscreen-video"`

      - `"resize-video"`

      - `"change-video-ar"`

      - `"split-audio-from-video"`

      - `"merge-audio-into-video"`

  - `model?: Model | null`

    - `model_id: string`

      Model identifier

  - `poll_url?: string | null`

    URL to poll pending/running runs or fetch completed/failed run details.

  - `project_id?: string | null`

    Project identifier

  - `technique?: Technique | null`

    - `name: string`

      Technique name

    - `technique_id: string`

      Technique identifier

### Example

```typescript
import FLORA from '@flora-ai/flora';

const client = new FLORA({
  apiKey: process.env['FLORA_API_KEY'], // This is the default and can be omitted
});

const response = await client.actions.run({
  action_id: 'color-grade-image-browser',
  inputs: [{ type: 'image' }],
  project_id: 'prj_abc123',
  workspace_id: 'ws_abc123',
});

console.log(response.run_id);
```

#### Response

```json
{
  "charged_cost": 0,
  "estimated_seconds": 0,
  "run_id": "run_abc123",
  "type": "generation",
  "action": {
    "action_id": "color-grade-image-browser"
  },
  "model": {
    "model_id": "t2i-flux-2-pro"
  },
  "poll_url": "https://example.com",
  "project_id": "prj_abc123",
  "technique": {
    "name": "name",
    "technique_id": "tech_abcd1234"
  }
}
```

## Domain Types

### Action List Response

- `ActionListResponse`

  - `actions: Array<Action>`

    - `action_id: "color-grade-image-browser" | "overlay-image-browser" | "draw-image-browser" | 37 more`

      Action identifier

      - `"color-grade-image-browser"`

      - `"overlay-image-browser"`

      - `"draw-image-browser"`

      - `"crop-image-browser"`

      - `"scene-3d-image-browser"`

      - `"blur-image-browser"`

      - `"change-image-ar-browser"`

      - `"rotate-image-browser"`

      - `"color-filter-image-browser"`

      - `"color-tint-image-browser"`

      - `"filter-color-image-browser"`

      - `"duplicate-image-browser"`

      - `"side-by-side-composite-browser"`

      - `"add-shape-to-image-browser"`

      - `"add-text-to-image-browser"`

      - `"qr-code-generator-browser"`

      - `"resize-image-browser"`

      - `"shader-effect-browser"`

      - `"split-text-browser"`

      - `"find-and-replace-text-browser"`

      - `"concat-text-browser"`

      - `"ken-burns-video"`

      - `"stitch-videos"`

      - `"split-video"`

      - `"extract-video-frames"`

      - `"color-grade-video"`

      - `"video-to-frame-grid"`

      - `"boomerang-video"`

      - `"reverse-video"`

      - `"video-to-long-exposure"`

      - `"video-effect"`

      - `"color-filter-video"`

      - `"speed-up-video"`

      - `"slow-down-video"`

      - `"duplicate-video"`

      - `"greenscreen-video"`

      - `"resize-video"`

      - `"change-video-ar"`

      - `"split-audio-from-video"`

      - `"merge-audio-into-video"`

    - `charged_cost: number`

      Cost per execution in USD

    - `description: string`

      Action description

    - `inputs: Array<Input>`

      Action input slots

      - `name: string`

        Action input or output name

      - `type: "image" | "video" | "text" | "audio"`

        Action input or output media type

        - `"image"`

        - `"video"`

        - `"text"`

        - `"audio"`

      - `dynamic?: boolean`

        Deprecated alias for `multiple: true`. Mirrors `multiple` for back-compat.

      - `multiple?: true | UnionMember1`

        Many-connections form. `true` is unbounded shorthand; the object form sets explicit min/max bounds.

        - `true`

          - `true`

        - `UnionMember1`

          - `max?: number`

          - `min?: number`

      - `optional?: boolean`

        Whether the slot allows zero connections in single-input mode. Ignored when `multiple` is the object form (use `min: 0` there instead).

    - `language: "javascript" | "python"`

      Action runtime language

      - `"javascript"`

      - `"python"`

    - `name: string`

      Action name

    - `outputs: Array<Output>`

      Action output slots

      - `name: string`

        Action input or output name

      - `type: "image" | "video" | "text" | "audio"`

        Action input or output media type

        - `"image"`

        - `"video"`

        - `"text"`

        - `"audio"`

      - `dynamic?: boolean`

        Deprecated alias for `multiple: true`. Mirrors `multiple` for back-compat.

      - `multiple?: true | UnionMember1`

        Many-connections form. `true` is unbounded shorthand; the object form sets explicit min/max bounds.

        - `true`

          - `true`

        - `UnionMember1`

          - `max?: number`

          - `min?: number`

      - `optional?: boolean`

        Whether the slot allows zero connections in single-input mode. Ignored when `multiple` is the object form (use `min: 0` there instead).

    - `params: Array<Param>`

      Action parameters

      - `key: string`

        Action parameter key

      - `type: string`

        Action parameter control type

      - `available_values?: Array<AvailableValue>`

        Allowed parameter values

        - `label: string`

        - `value: string`

        - `description?: string`

      - `default_value?: unknown`

        Default parameter value

      - `info_tooltip?: string`

        Action parameter description

      - `label?: string`

        Action parameter label

      - `max_number_value?: number`

      - `min_number_value?: number`

      - `number_step?: number`

### Action Retrieve Response

- `ActionRetrieveResponse`

  - `action_id: "color-grade-image-browser" | "overlay-image-browser" | "draw-image-browser" | 37 more`

    Action identifier

    - `"color-grade-image-browser"`

    - `"overlay-image-browser"`

    - `"draw-image-browser"`

    - `"crop-image-browser"`

    - `"scene-3d-image-browser"`

    - `"blur-image-browser"`

    - `"change-image-ar-browser"`

    - `"rotate-image-browser"`

    - `"color-filter-image-browser"`

    - `"color-tint-image-browser"`

    - `"filter-color-image-browser"`

    - `"duplicate-image-browser"`

    - `"side-by-side-composite-browser"`

    - `"add-shape-to-image-browser"`

    - `"add-text-to-image-browser"`

    - `"qr-code-generator-browser"`

    - `"resize-image-browser"`

    - `"shader-effect-browser"`

    - `"split-text-browser"`

    - `"find-and-replace-text-browser"`

    - `"concat-text-browser"`

    - `"ken-burns-video"`

    - `"stitch-videos"`

    - `"split-video"`

    - `"extract-video-frames"`

    - `"color-grade-video"`

    - `"video-to-frame-grid"`

    - `"boomerang-video"`

    - `"reverse-video"`

    - `"video-to-long-exposure"`

    - `"video-effect"`

    - `"color-filter-video"`

    - `"speed-up-video"`

    - `"slow-down-video"`

    - `"duplicate-video"`

    - `"greenscreen-video"`

    - `"resize-video"`

    - `"change-video-ar"`

    - `"split-audio-from-video"`

    - `"merge-audio-into-video"`

  - `charged_cost: number`

    Cost per execution in USD

  - `description: string`

    Action description

  - `inputs: Array<Input>`

    Action input slots

    - `name: string`

      Action input or output name

    - `type: "image" | "video" | "text" | "audio"`

      Action input or output media type

      - `"image"`

      - `"video"`

      - `"text"`

      - `"audio"`

    - `dynamic?: boolean`

      Deprecated alias for `multiple: true`. Mirrors `multiple` for back-compat.

    - `multiple?: true | UnionMember1`

      Many-connections form. `true` is unbounded shorthand; the object form sets explicit min/max bounds.

      - `true`

        - `true`

      - `UnionMember1`

        - `max?: number`

        - `min?: number`

    - `optional?: boolean`

      Whether the slot allows zero connections in single-input mode. Ignored when `multiple` is the object form (use `min: 0` there instead).

  - `language: "javascript" | "python"`

    Action runtime language

    - `"javascript"`

    - `"python"`

  - `name: string`

    Action name

  - `outputs: Array<Output>`

    Action output slots

    - `name: string`

      Action input or output name

    - `type: "image" | "video" | "text" | "audio"`

      Action input or output media type

      - `"image"`

      - `"video"`

      - `"text"`

      - `"audio"`

    - `dynamic?: boolean`

      Deprecated alias for `multiple: true`. Mirrors `multiple` for back-compat.

    - `multiple?: true | UnionMember1`

      Many-connections form. `true` is unbounded shorthand; the object form sets explicit min/max bounds.

      - `true`

        - `true`

      - `UnionMember1`

        - `max?: number`

        - `min?: number`

    - `optional?: boolean`

      Whether the slot allows zero connections in single-input mode. Ignored when `multiple` is the object form (use `min: 0` there instead).

  - `params: Array<Param>`

    Action parameters

    - `key: string`

      Action parameter key

    - `type: string`

      Action parameter control type

    - `available_values?: Array<AvailableValue>`

      Allowed parameter values

      - `label: string`

      - `value: string`

      - `description?: string`

    - `default_value?: unknown`

      Default parameter value

    - `info_tooltip?: string`

      Action parameter description

    - `label?: string`

      Action parameter label

    - `max_number_value?: number`

    - `min_number_value?: number`

    - `number_step?: number`

### Action Run Response

- `ActionRunResponse`

  - `charged_cost: number`

    Cost charged in USD

  - `estimated_seconds: number | null`

  - `run_id: string`

    Run identifier

  - `type: "generation" | "technique" | "action"`

    Run type

    - `"generation"`

    - `"technique"`

    - `"action"`

  - `action?: Action | null`

    - `action_id: "color-grade-image-browser" | "overlay-image-browser" | "draw-image-browser" | 37 more`

      Action identifier

      - `"color-grade-image-browser"`

      - `"overlay-image-browser"`

      - `"draw-image-browser"`

      - `"crop-image-browser"`

      - `"scene-3d-image-browser"`

      - `"blur-image-browser"`

      - `"change-image-ar-browser"`

      - `"rotate-image-browser"`

      - `"color-filter-image-browser"`

      - `"color-tint-image-browser"`

      - `"filter-color-image-browser"`

      - `"duplicate-image-browser"`

      - `"side-by-side-composite-browser"`

      - `"add-shape-to-image-browser"`

      - `"add-text-to-image-browser"`

      - `"qr-code-generator-browser"`

      - `"resize-image-browser"`

      - `"shader-effect-browser"`

      - `"split-text-browser"`

      - `"find-and-replace-text-browser"`

      - `"concat-text-browser"`

      - `"ken-burns-video"`

      - `"stitch-videos"`

      - `"split-video"`

      - `"extract-video-frames"`

      - `"color-grade-video"`

      - `"video-to-frame-grid"`

      - `"boomerang-video"`

      - `"reverse-video"`

      - `"video-to-long-exposure"`

      - `"video-effect"`

      - `"color-filter-video"`

      - `"speed-up-video"`

      - `"slow-down-video"`

      - `"duplicate-video"`

      - `"greenscreen-video"`

      - `"resize-video"`

      - `"change-video-ar"`

      - `"split-audio-from-video"`

      - `"merge-audio-into-video"`

  - `model?: Model | null`

    - `model_id: string`

      Model identifier

  - `poll_url?: string | null`

    URL to poll pending/running runs or fetch completed/failed run details.

  - `project_id?: string | null`

    Project identifier

  - `technique?: Technique | null`

    - `name: string`

      Technique name

    - `technique_id: string`

      Technique identifier
