# Runs
## Start a technique run
`client.techniques.runs.create(stringtechniqueID, RunCreateParamsbody, RequestOptionsoptions?): RunCreateResponse`
**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.
### Parameters
- `techniqueID: string`
Technique identifier or slug
- `body: RunCreateParams`
- `inputs: Array`
Technique inputs
- `id: string`
Technique input identifier
- `type: "text" | "imageUrl" | "videoUrl"`
Technique input type
- `"text"`
- `"imageUrl"`
- `"videoUrl"`
- `value: string`
Technique input value
- `mode: "async" | "stream"`
Technique run execution mode
- `"async"`
- `"stream"`
- `callback_url?: string`
HTTPS callback URL for asynchronous run completion notifications
- `idempotency_key?: string`
Idempotency key for safely retrying requests
### Returns
- `RunCreateResponse`
- `created_at: number`
- `progress: number`
- `run_id: string`
Run identifier
- `status: "pending" | "running" | "completed" | "failed"`
- `"pending"`
- `"running"`
- `"completed"`
- `"failed"`
- `charged_cost?: number`
- `completed_at?: number`
- `error_code?: string`
Machine-readable run error code
- `error_message?: string`
Human-readable run error message
- `outputs?: Array