# Krea 2 Trainer API

> Trainescha ina LoRA persunalisada Krea 2 d'in zip d'immagines, cun autodescripziun opziunala

Adattescha finamain ina LoRA sin ina datoteca .zip da maletgs en `images_data_url`, cun legends .txt opziunalas dal medem num ed in `trigger_phrase`. Ils modes `auto_captioning` èn Off, Object/Character, Style e Custom. `steps` è da 50 fin 10000 (standard 100), `resolution` è 768 u 1024. L’output cuntegna ils pes LoRA ed ina datoteca da configuraziun.

- Model id: `krea-2-trainer`
- Made by: Krea
- Category: Training
- Output: file
- Price per run: from $0.30 / run (cheapest run $0.30 (300 API credits))
- Run: `POST https://api.doitong.com/v1/run/krea-2-trainer`
- Quote: `POST https://api.doitong.com/v1/quote/krea-2-trainer`
- Docs page: https://doitong.com/rm/developers/models/krea-2-trainer

## Pricing

Price: **from $0.30 / run** (the lowest tier; the quote prices your exact input). Price per run: the input files are measured before the run (length, resolution, frame rate). The quote measures the same files and is exactly what the run charges.

The full example input below costs $0.30 = 300 API credits (1 run × $0.30).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.com/v1/quote/krea-2-trainer` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `images_data_url` |  | string | yes |  |  | URL per ina .zip da maletgs da scolaziun che cuntegna datotecas PNG/JPG/JPEG/WebP; ina dumonda fallescha cun 422 sche in maletg na ha ni ina datoteca da legenda ni in `trigger_phrase` betg vid. Las legendas èn opziunalas sche `trigger_phrase` furnescha il remplazzament; uschiglio utilisescha ils medems nums da basa: ROOT.EXT correspunda a ROOT.txt, per exempel 001.jpg a 001.txt. |
| `trigger_phrase` |  | string | no | `` |  | Frasa d’instanza da stil DreamBooth necessaria sche `auto_captioning` è Off e mintga maletg manca ina datoteca da legenda. Ella furnescha las legendas nua che datotecas .txt mancan e dat il text da partenza per ils prompts da validaziun standards. |
| `auto_captioning` |  | enum (string) | no | `Off` | `Off`, `Object/Character`, `Style`, `Custom` | Mod opzional da titulisaziun: Object/Character, Style e Custom cloman dataset-captioner cun google/gemma-4-31B-it, entant che Off mantegna l'exigenza existenta che mintga maletg haja ina legenda .txt cun il medem tschep u che trigger_phrase vegnia duvrà sco fallback. Per legendas generadas entra trigger_phrase en il prompt da titulisaziun ed vegn normalisà en ils sidecars resultants tenor la convenziun da titulisaziun LoRA tschernida. |
| `steps` |  | integer | no | `100` | 50 – 10,000 | Dumber da pass per il trenament LoRA. |
| `learning_rate` |  | number | no | `0.0005` | 0.000001 – 0.01 | Ritmus d'emprendissadi dal factur B da LoRA, applitgà er ad A sche `lora_a_lr_multiplier=1`; sut muon represchenta el il ritmus equivalent ad AdamW scalà cun match_rms_adamw. Per in urari constant recumonda Krea la distanza 3e-4–7e-4. |
| `resolution` |  | enum (integer) | no | `768` | `768`, `1024` | Resoluziun d'emprendissadi, cun 1024 per il pli grond detagl fin ed 768 per in emprendissadi circa 1.7x pli svelt, main VRAM e qualitad da stil quasi identica. Ils maletgs vegnan scalads per cuvrir il quadrat da mira, lura tagliads al center. |
| `debug_dataset` |  | boolean | no | `false` |  | Opziun da telechargiar il dataset che mussa exactamain quai ch'è vegnì utilisà per l'emprendissadi, empaquetà sco archiv suenter il cumplettament da las legendas u la generaziun automatica da legendas. |

## Example input

Required parameters only:

```json
{
  "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

A fuller example:

```json
{
  "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/krea-2-trainer?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/krea-2-trainer?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/krea-2-trainer", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.com/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "krea-2-trainer",
      "input": {
        "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "krea-2-trainer",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 300,
    "usd": "0.30",
    "charged": 300,
    "refunded": 0
  },
  "input": {
    "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  },
  "output": {
    "lora_file": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "config_file": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "prompt_enhancement_system_prompt": "string",
    "debug_dataset": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    }
  },
  "outputs": [
    {
      "type": "file",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `lora_file` | object {url, content_type, file_name, file_size} | URL da telechargiar ils pais LoRA da Krea-2 trenads en il format safetensors. |
| `config_file` | object {url, content_type, file_name, file_size} | Colliaziun ad ina datoteca JSON che cuntegna la configuraziun d'emprendissadi/LoRA. |
| `prompt_enhancement_system_prompt` | string \| null | Prompt dal sistem returnà cun `auto_captioning` activà, per gidar a scriver u meglierar prompts d'inferenza cun la medema convenziun da legenda sco las datas d'emprendissadi titulisadas automaticamain. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | Telechargiada da las datas d'emprendissadi furnida cun `debug_dataset` activà: in archiv cun il dataset preparà e sias legendas generadas automaticamain. |

## Related models

- [Krea 2 Text to Image Turbo LoRA](https://doitong.com/developers/models/krea-2/turbo/lora.md) (`krea-2/turbo/lora`): $0.01 / megapixel
- [Krea 2 Turbo](https://doitong.com/developers/models/krea-2/turbo.md) (`krea-2/turbo`): $0.008 / megapixel
- [ERNIE-Image Trainer](https://doitong.com/developers/models/ernie-image-trainer.md) (`ernie-image-trainer`): $0.0012 / step
- [FLUX 2 \[klein\] 9b Base Trainer](https://doitong.com/developers/models/flux-2-klein-9b-base-trainer.md) (`flux-2-klein-9b-base-trainer`): $0.0043 / step
- [Flux 2 Klein 9B Base Trainer](https://doitong.com/developers/models/flux-2-klein-9b-base-trainer/edit.md) (`flux-2-klein-9b-base-trainer/edit`): $0.0139 / step
- [FLUX 2 Trainer](https://doitong.com/developers/models/flux-2-trainer.md) (`flux-2-trainer`): $0.0064 / step
- [FLUX 2 Trainer Edit](https://doitong.com/developers/models/flux-2-trainer/edit.md) (`flux-2-trainer/edit`): $0.0389 / step
- [FLUX 2 Trainer V2](https://doitong.com/developers/models/flux-2-trainer-v2.md) (`flux-2-trainer-v2`): $0.0064 / step

## Links

- HTML page: https://doitong.com/developers/models/krea-2-trainer
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=krea-2-trainer
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/krea-2-trainer
