Status

rw.job()

Check the status and result of an asynchronous generation job. Useful for long-running tasks like video or high-resolution image generation.

Signature

TypeScript
rw.job(id: string): Promise<Job>

Parameters

ParameterTypeDescription
id
required
stringJob ID returned from an async generation request, e.g. "job_abc123"

Response

TypeScript
interface Job {
  id: string;
  object: "job";
  status: "completed" | "queued" | "processing" | "failed" | "cancelled";
  model: {
    name: string;
    slug: string;
    category: string;
    provider: string;
  };
  input: Record<string, unknown>;
  output: string | null;
  output_url: string | null;
  cost: { credits: number; currency: string };
  tokens: { input: number; output: number; total: number } | null;
  timing: {
    created_at: number;
    started_at: number | null;
    completed_at: number | null;
    latency_ms: number | null;
    duration_ms: number | null;
  };
  error: string | null;
}

Examples

Check job status

TypeScript
const job = await rw.job("job_abc123");
console.log(job.status);     // "completed" | "queued" | "processing" | "failed"
console.log(job.output_url); // URL to the result

Polling for completion

TypeScript
async function waitForJob(rw, jobId: string, intervalMs = 2000) {
  while (true) {
    const job = await rw.job(jobId);

    if (job.status === "completed") {
      return job;
    }
    if (job.status === "failed") {
      throw new Error(job.error ?? "Job failed");
    }

    await new Promise(resolve => setTimeout(resolve, intervalMs));
  }
}

const result = await waitForJob(rw, "job_abc123");
console.log(result.output_url);
console.log(result.cost); // { credits: 10, currency: "credits" }

Job timing

The timing object includes latency and duration metrics, useful for monitoring and optimizing your application.