--- title: Jobs | Scenario Docs description: API reference for the Job class and .wait() method. --- Every endpoint that returns a `job` in its response is enhanced — the `job` object gains a `.wait()` method that polls until completion. ## `job.wait(options?)` Polls `client.jobs.retrieve()` until the job reaches a terminal status. **Signature** ``` job.wait(options?: WaitOptions): Promise ``` **Parameters** | Name | Type | Default | Description | | -------------------- | -------- | -------- | ------------------------------------------------------ | | `options.intervalMs` | `number` | `3000` | Polling interval in milliseconds. | | `options.timeoutMs` | `number` | `120000` | Maximum wait time in milliseconds. Throws if exceeded. | **Returns** `Promise` — A new `Job` instance with the terminal state. The `Job` object contains all standard API job fields: | Property | Type | Description | | ----------- | ---------- | ---------------------------------------------------------------- | | `jobId` | `string` | The job ID. | | `status` | `string` | Terminal status: `'success'`, `'failure'`, or `'canceled'`. | | `progress` | `number` | Progress between 0 and 1. | | `metadata` | `object` | Job metadata, including `flow` and `assetIds` for workflow jobs. | | `createdAt` | `string` | ISO 8601 creation timestamp. | | `updatedAt` | `string` | ISO 8601 last update timestamp. | | `jobType` | `string` | The type of job (e.g. `'workflow'`, `'inference'`). | | `wait()` | `function` | Can be called again (returns immediately if already terminal). | **Errors** Throws `Error` if the job does not reach a terminal status within `timeoutMs`. ``` try { const completed = await response.job.wait({ timeoutMs: 10_000 }); } catch (err) { // "Job job_... did not complete within 10s" } ``` ## Usage ``` import Scenario from '@scenario-labs/sdk'; const client = new Scenario({ apiKey: '...' }); const response = await client.workflows.run('wflow_...', { body: { prompt: 'a fantasy sword' }, }); const completed = await response.job.wait(); console.log(completed.status); // 'success' console.log(completed.metadata); // { assetIds: [...], flow: [...] } ``` ## `client.jobs.retrieve(jobID)` — enhanced response `client.jobs.retrieve()` returns a response where `response.job` has `.wait()`. ``` const response = await client.jobs.retrieve('job_...'); const completed = await response.job.wait(); console.log(completed.status); // 'success' | 'failure' | 'canceled' ``` --- ## `client.jobs.triggerAction(jobID, params)` — enhanced response `client.jobs.triggerAction()` also returns a response where `response.job` has `.wait()`. ``` const response = await client.jobs.triggerAction('job_...', { action: 'cancel' }); const completed = await response.job.wait(); ``` --- ## Supported endpoints | Resource | Methods | | --------------------- | --------------------------------------------------------------------------------------------- | | `client.jobs` | `retrieve()`, `triggerAction()` | | `client.workflows` | `run()`, `userApproval()` | | `client.generate` | `caption()`, `describeStyle()`, `detect()`, `embed()`, `patch()`, `runModel()`, `translate()` | | `client.models.train` | `trigger()` | Note The `job` field on the response keeps all its original API properties. `.wait()` is added on top — no fields are removed or renamed.