## Start a technique run

**post** `/techniques/{techniqueId}/runs`

Starts a run for a specific technique using the backward-compatible nested route. Mutating public API requests support an optional Idempotency-Key header for client retries; duplicate keys within two hours return idempotency_duplicate.

### Path Parameters

- `techniqueId: string`

  Technique identifier or slug

### Body Parameters

- `inputs: array of object { id, type, value }`

  Technique inputs

  - `id: string`

    Technique input identifier

  - `type: "text" or "imageUrl" or "videoUrl"`

    Technique input type

    - `"text"`

    - `"imageUrl"`

    - `"videoUrl"`

  - `value: string`

    Technique input value

- `mode: "async" or "stream"`

  Technique run execution mode

  - `"async"`

  - `"stream"`

- `callback_url: optional string`

  HTTPS callback URL for asynchronous run completion notifications

- `idempotency_key: optional string`

  Idempotency key for safely retrying requests

### Returns

- `created_at: number`

- `progress: number`

- `run_id: string`

  Run identifier

- `status: "pending" or "running" or "completed" or "failed"`

  - `"pending"`

  - `"running"`

  - `"completed"`

  - `"failed"`

- `charged_cost: optional number`

  Cost charged in USD

- `completed_at: optional number`

- `error_code: optional string`

  Machine-readable run error code

- `error_message: optional string`

  Human-readable run error message

- `outputs: optional array of object { output_id, type, url }`

  - `output_id: string`

    Run output identifier

  - `type: "imageUrl" or "videoUrl" or "audioUrl" or 2 more`

    Run output media type

    - `"imageUrl"`

    - `"videoUrl"`

    - `"audioUrl"`

    - `"text"`

    - `"documentUrl"`

  - `url: string`

    Run output URL or text content

- `poll_url: optional string`

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

- `started_at: optional number`

### Example

```http
curl https://app.flora.ai/api/v1/techniques/$TECHNIQUE_ID/runs \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer $FLORA_API_KEY" \
    -d '{
          "inputs": [
            {
              "id": "id",
              "type": "text",
              "value": "value"
            }
          ],
          "mode": "async"
        }'
```

#### Response

```json
{
  "created_at": 0,
  "progress": 0,
  "run_id": "run_abc123",
  "status": "pending",
  "charged_cost": 0,
  "completed_at": 0,
  "error_code": "provider_error",
  "error_message": "The provider failed to complete the generation.",
  "outputs": [
    {
      "output_id": "output_1",
      "type": "imageUrl",
      "url": "https://media.flora.ai/output.png"
    }
  ],
  "poll_url": "https://example.com",
  "started_at": 0
}
```
