> ## 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.

# Cycle de vie d'un job

> Comprenez chaque état d'un job Krea, de sa création à son achèvement, y compris les patrons de polling, les nouvelles tentatives et les stratégies pratiques de gestion des erreurs.

## Aperçu

Toutes les requêtes de génération suivent le même cycle de vie de base :

<img className="w-full mx-auto dark:hidden" src="https://mintcdn.com/krea/ZLw3hmlHm50-cthl/images/job-status.svg?fit=max&auto=format&n=ZLw3hmlHm50-cthl&q=85&s=6cbb1b15fcde8ed4c7d7d84c2637d5c6" alt="Diagramme du cycle de vie d'un job" width="569" height="239" data-path="images/job-status.svg" />

<img className="w-full mx-auto dark:block hidden" src="https://mintcdn.com/krea/ZLw3hmlHm50-cthl/images/job-status-dark.svg?fit=max&auto=format&n=ZLw3hmlHm50-cthl&q=85&s=cc4c42010e1f9fb4688263f83705e37d" alt="Diagramme du cycle de vie d'un job" width="569" height="239" data-path="images/job-status-dark.svg" />

### États d'un job

<span className="text-sm font-bold text-blue-900 dark:text-blue-100 font-mono bg-blue-100 dark:bg-blue-900/30 border border-blue-300 dark:border-blue-600 px-1.5 py-0.5 rounded mr-1">queued</span> Le job attend dans la file pour être traité

<span className="text-sm font-bold text-blue-900 dark:text-blue-100 font-mono bg-blue-100 dark:bg-blue-900/30 border border-blue-300 dark:border-blue-600 px-1.5 py-0.5 rounded mr-1">backlogged</span> Le job attend derrière votre limite de concurrence actuelle

<span className="text-sm font-bold text-blue-900 dark:text-blue-100 font-mono bg-blue-100 dark:bg-blue-900/30 border border-blue-300 dark:border-blue-600 px-1.5 py-0.5 rounded mr-1">scheduled</span> Le job a été accepté et planifié pour traitement

<span className="text-sm font-bold text-amber-900 dark:text-amber-100 font-mono bg-amber-100 dark:bg-amber-900/30 border border-amber-300 dark:border-amber-600 px-1.5 py-0.5 rounded mr-1">processing</span> Le job est activement traité par un worker

<span className="text-sm font-bold text-amber-900 dark:text-amber-100 font-mono bg-amber-100 dark:bg-amber-900/30 border border-amber-300 dark:border-amber-600 px-1.5 py-0.5 rounded mr-1">sampling</span> Le job génère des échantillons de sortie

<span className="text-sm font-bold text-amber-900 dark:text-amber-100 font-mono bg-amber-100 dark:bg-amber-900/30 border border-amber-300 dark:border-amber-600 px-1.5 py-0.5 rounded mr-1">intermediate-complete</span> Le job dispose d'un résultat intermédiaire et peut continuer son traitement

<span className="text-sm font-bold text-green-900 dark:text-green-100 font-mono bg-green-100 dark:bg-green-900/30 border border-green-300 dark:border-green-600 px-1.5 py-0.5 rounded mr-1">completed</span> Le job s'est terminé avec succès, le résultat est disponible dans `result.urls`

<span className="text-sm font-bold text-red-900 dark:text-red-100 font-mono bg-red-100 dark:bg-red-900/30 border border-red-300 dark:border-red-600 px-1.5 py-0.5 rounded mr-1">failed</span> Le job a échoué en raison d'une erreur, détails dans `result.error`

<span className="text-sm font-bold text-gray-900 dark:text-gray-100 font-mono bg-gray-100 dark:bg-gray-900/30 border border-gray-300 dark:border-gray-600 px-1.5 py-0.5 rounded mr-1">cancelled</span> Le job a été annulé par l'utilisateur ou le système

### Échecs et annulations

**Les jobs peuvent échouer** pour plusieurs raisons :

* Erreurs de l'API du service de génération
* Paramètres invalides ou configurations non prises en charge
* Modération de contenu (filtrage NSFW)
* Détection automatique de timeout (3 minutes pour les outils hébergés, 2 heures pour les fournisseurs externes)

**Pour annuler un job :** envoyez une requête `DELETE` vers `/jobs/{id}`. Note : les jobs ne peuvent être annulés que lorsqu'ils ont un statut <span className="text-sm font-bold text-blue-900 dark:text-blue-100 font-mono bg-blue-100 dark:bg-blue-900/30 border border-blue-300 dark:border-blue-600 px-1.5 py-0.5 rounded mr-1">queued</span> ou <span className="text-sm font-bold text-amber-900 dark:text-amber-100 font-mono bg-amber-100 dark:bg-amber-900/30 border border-amber-300 dark:border-amber-600 px-1.5 py-0.5 rounded mr-1">processing</span>.

<Check>
  **Important :** les jobs qui échouent ou qui sont annulés ne sont pas facturés. Vous ne payez que pour les jobs terminés.
</Check>

### Vérification du statut d'un job

Interrogez le statut d'un job à l'aide d'une requête `GET` vers `/jobs/{id}`. Bonnes pratiques recommandées :

* Interrogez toutes les 2 à 5 secondes tant que le job est en attente (`backlogged`, `queued`, `scheduled`, `processing`, `sampling` ou `intermediate-complete`)
* Utilisez un backoff exponentiel pour les jobs plus longs
* Arrêtez le polling lorsque le statut est <span className="text-sm font-bold text-green-900 dark:text-green-100 font-mono bg-green-100 dark:bg-green-900/30 border border-green-300 dark:border-green-600 px-1.5 py-0.5 rounded mr-1">completed</span>, <span className="text-sm font-bold text-red-900 dark:text-red-100 font-mono bg-red-100 dark:bg-red-900/30 border border-red-300 dark:border-red-600 px-1.5 py-0.5 rounded mr-1">failed</span> ou <span className="text-sm font-bold text-gray-900 dark:text-gray-100 font-mono bg-gray-100 dark:bg-gray-900/30 border border-gray-300 dark:border-gray-600 px-1.5 py-0.5 rounded mr-1">cancelled</span>
* Certains jobs peuvent inclure des images de prévisualisation dans les réponses pendant l'état <span className="text-sm font-bold text-amber-900 dark:text-amber-100 font-mono bg-amber-100 dark:bg-amber-900/30 border border-amber-300 dark:border-amber-600 px-1.5 py-0.5 rounded mr-1">processing</span>

**Exemple d'implémentation de polling :**

<CodeGroup>
  ```javascript Node.js theme={null}
  // 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={null}
  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('result', {}).get('error')}")

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

## Étapes suivantes

<CardGroup cols={2}>
  <Card title="Webhooks" icon="bell" href="/developers/webhooks">
    Recevez des notifications lorsque les jobs se terminent
  </Card>

  <Card title="Limites de débit" icon="gauge" href="/developers/rate-limits">
    Comprenez les limites de l'API par niveau de plan
  </Card>

  <Card title="API des modèles" icon="book-open" href="/api-reference/image/flux">
    Explorez tous les endpoints et paramètres disponibles
  </Card>

  <Card title="Clés API et facturation" icon="key" href="/developers/api-keys-and-billing">
    Créez et gérez vos clés API
  </Card>
</CardGroup>
