> ## Documentation Index
> Fetch the complete documentation index at: https://www.krea.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 任务生命周期

> 了解 Krea API 任务从创建到完成的各个状态、失败与取消的原因，以及如何通过 GET /jobs/{id} 轮询任务状态。失败或取消的任务不会计费。

## 概述

所有生成请求都遵循相同的基本生命周期：

![Job lifecycle diagram](https://mintcdn.com/krea/ZLw3hmlHm50-cthl/images/job-status.svg?fit=max\&auto=format\&n=ZLw3hmlHm50-cthl\&q=85\&s=6cbb1b15fcde8ed4c7d7d84c2637d5c6)

### 任务状态

queued 任务在队列中等待处理

backlogged 任务因当前并发上限而在等待

scheduled 任务已被接受并计划处理

processing 任务正在由 worker 处理中

sampling 任务正在生成输出样本

intermediate-complete 任务已有中间结果，可能仍在继续处理

completed 任务成功完成，结果位于 `result.urls`

failed 任务因错误失败。详情位于顶层 `error` 对象中：`code` 始终存在，`message` 为可选。内容审核拒绝使用 `code: "content_policy"`。

cancelled 任务已被用户或系统取消

### 失败与取消

**任务可能因以下原因失败：**

* 生成服务的 API 错误
* 无效参数或不支持的配置
* 内容审核（NSFW 过滤）
* 自动超时检测（托管工具为 3 分钟，外部提供方为 2 小时）

`error.code`、对应的 message 以及下一步该怎么做，请参阅 [错误与调试](https://www.krea.ai/docs/cn/developers/errors-and-debugging.md)。

**取消任务：** 向 `/jobs/{id}` 发送 `DELETE` 请求。注意：任务只能在状态为 queued 或 processing 时才可以取消。

> [!TIP]
>
> **重要：** 失败和取消的任务不会计费。你只需为已完成的任务付费。

### 检查任务状态

通过向 `/jobs/{id}` 发送 `GET` 请求来轮询任务状态。推荐做法：

* 任务处于 pending 状态（`backlogged`、`queued`、`scheduled`、`processing`、`sampling` 或 `intermediate-complete`）时，每 2–5 秒轮询一次
* 对长时间运行的任务使用指数退避
* 当状态变为 completed、failed 或 cancelled 时停止轮询
* 部分任务在 processing 期间可能会在响应中包含预览图

**轮询实现示例：**

```javascript Node.js theme={"theme":{"light":"github-light-default","dark":"vesper"}}
// npm install @krea-ai/sdk
import { Krea } from "@krea-ai/sdk";

const krea = new Krea({ apiKey: process.env.KREA_API_KEY });

async function waitForJob(jobId) {
  const job = await krea.jobs.wait(jobId, { intervalMs: 2000 });
  return job.result;
}
```

```python Python theme={"theme":{"light":"github-light-default","dark":"vesper"}}
import time

def wait_for_job(job_id):
    while True:
        response = requests.get(
            f"{API_BASE}/jobs/{job_id}",
            headers={"Authorization": f"Bearer {API_TOKEN}"}
        )
        job = response.json()

        if job["status"] == "completed":
            return job["result"]
        if job["status"] in ("failed", "cancelled"):
            raise Exception(f"Job {job['status']}: {job.get('error')}")

        print(f"Status: {job['status']}")
        time.sleep(2)
```

## 下一步

> [card] [Webhooks](https://www.krea.ai/docs/developers/webhooks.md)
>
> 在任务完成时收到通知

> [card] [速率限制](https://www.krea.ai/docs/developers/rate-limits.md)
>
> 了解各套餐层级的 API 限制

> [card] [错误与调试](https://www.krea.ai/docs/cn/developers/errors-and-debugging.md)
>
> HTTP 错误与失败任务的错误码

> [card] [Model APIs](https://www.krea.ai/docs/api-reference/introduction.md)
>
> 探索所有可用端点及参数

> [card] [API Keys & Billing](https://www.krea.ai/docs/developers/api-keys-and-billing.md)
>
> 创建和管理你的 API 密钥


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.