# Krea 2 Medium API

> Text-to-image na may antas ng creativity, walong aspect ratio, at opsyonal na reference ng estilo, preset at moodboard

Gumagawa ng larawan mula sa teksto prompt na hanggang 5000 character. Nag-aalok ang `aspect_ratio` ng walong opsyon mula 1:1 hanggang 2.35:1 at 9:16. Ang `creativity` ay raw hanggang high at kumokontrol kung gaano kalapit ang resulta sa prompt. Maaaring gabayan ang itsura gamit ang hanggang 10 `image_style_references`, hanggang 10 preset na `styles`, o isang moodboard, at maaaring magtakda ng `seed` para sa nauulit na resulta.

- Model id: `krea/v2/medium/text-to-image`
- Made by: Krea
- Category: Text to Image
- Output: image
- Price: from $0.03 / request (cheapest run $0.03 (30 API credits))
- Run: `POST https://api.doitong.ru/v1/run/krea/v2/medium/text-to-image`
- Quote: `POST https://api.doitong.ru/v1/quote/krea/v2/medium/text-to-image`
- Docs page: https://doitong.com/fil/developers/models/krea/v2/medium/text-to-image

## Pricing

Price: **from $0.03 / request** (the lowest tier; the quote prices your exact input). Billed once per request.

Price rules (the first rule that matches the input wins; a parameter you leave out counts as its default):

- When `image_style_references` is set: $0.035 (35 API credits) / request

The full example input below costs $0.03 = 30 API credits (1 request × 30 API credits).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.ru/v1/quote/krea/v2/medium/text-to-image` 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 |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  | 1 – 5000 characters | Text na tumutukoy sa gustong content ng larawan. |
| `aspect_ratio` |  | enum (string) | no | `1:1` | `1:1`, `4:3`, `3:2`, `16:9`, `2.35:1`, `4:5`, `2:3`, `9:16` | Ratio ng lapad sa taas para sa output na larawan. |
| `creativity` |  | enum (string) | no | `medium` | `raw`, `low`, `medium`, `high` | Flexibility sa interpretasyon ng prompt, kung saan ipinagpapalit ang mas malapit na pagsunod sa mas mababang setting para sa higit na creativity at posibleng paglihis sa prompt sa mas mataas na setting. |
| `seed` |  | integer \| null | no |  |  | Random seed na ginagawang nauulit ang pagbuo. |
| `image_style_references` |  | array of object {image_url, strength} | no | `[]` | ≤ 10 items | Gabayan ang style ng nabuong larawan gamit ang hanggang 10 reference na larawan; opsyonal ang pagbibigay ng listahang ito. |
| `image_style_references[].image_url` |  | string (image URL) | yes |  |  | URL ng reference na larawan na accessible sa publiko. |
| `image_style_references[].strength` |  | number | no | `1` | -2 – 2 | Itakda ang impluwensiya ng reference sa nabuong larawan; gamit ang negatibong value, ilalayo ang resulta sa reference na iyon. |
| `styles` |  | array of object {id, strength} | no | `[]` | ≤ 10 items | Opsyonal na pagpili ng mga Krea style preset na nakabatay sa LoRA, na limitado sa 10 entry. Tinutukoy ng mga entry ang isang style gamit ang `id` nito sa catalog ng Krea styles. |
| `styles[].id` |  | string | yes |  |  | Pagpili ng style ayon sa identifier mula sa catalog ng Krea styles; nakabatay sa LoRA ang napiling preset. |
| `styles[].strength` |  | number | no | `1` | -2 – 2 | Itakda ang impluwensiya ng style sa nabuong larawan; gamit ang negatibong value, ilalayo ang resulta sa style na iyon. |
| `moodboards` |  | array of object {id, strength} | no | `[]` | ≤ 1 items | Opsyonal na moodboard para sa pagbuo, na pinipili gamit ang UUID `id` ng isang entry. Ang kasalukuyang limitasyon ay isang moodboard bawat kahilingan. |
| `moodboards[].id` |  | string | yes |  |  | UUID na tumutukoy sa Krea moodboard. |
| `moodboards[].strength` |  | number | no | `0.23` | 0 – 1 | Lakas ng impluwensiya ng moodboard sa pagbuo ng larawan. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Maaaring luwagan ang screening sa pamamagitan ng pagtatakda ng false, kung awtorisado ang tumatawag. |

## Example input

Required parameters only:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

## 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.ru/v1/run/krea/v2/medium/text-to-image?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }'

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

### JavaScript

```javascript
const API = "https://api.doitong.ru/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/v2/medium/text-to-image?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }),
});
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.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/krea/v2/medium/text-to-image", 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.ru/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/v2/medium/text-to-image",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
      },
      "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/v2/medium/text-to-image",
  "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": 30,
    "usd": "0.03",
    "charged": 30,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "output": {
    "images": [
      {
        "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,
        "width": 1024,
        "height": 768
      }
    ],
    "seed": 42
  },
  "outputs": [
    {
      "type": "image",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "width": 1024,
      "height": 768,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `images` | array of object {url, content_type, file_name, file_size, width, height} | Mga larawang ginawa ng modelo. |
| `seed` | integer | Seed na ginagamit habang bumubuo ng larawan. |

## Related models

- [Krea 2 Large](https://doitong.com/developers/models/krea/v2/large/text-to-image.md) (`krea/v2/large/text-to-image`): from $0.06 / request
- [Krea 2 Medium Text to Image Turbo](https://doitong.com/developers/models/krea/v2/medium/turbo/text-to-image.md) (`krea/v2/medium/turbo/text-to-image`): from $0.015 / request
- [FLUX.1 \[dev\]](https://doitong.com/developers/models/flux/dev.md) (`flux/dev`): $0.025 / megapixel
- [FLUX.1 \[schnell\]](https://doitong.com/developers/models/flux/schnell.md) (`flux/schnell`): $0.003 / megapixel
- [FLUX.2 \[dev\]](https://doitong.com/developers/models/flux-2.md) (`flux-2`): $0.012 / megapixel
- [FLUX.2 \[pro\]](https://doitong.com/developers/models/flux-2-pro.md) (`flux-2-pro`): $0.015 / megapixel of output image
- [GPT Image 2.5 Text to Image](https://doitong.com/developers/models/openai/gpt-image-2.5/flare/text-to-image.md) (`openai/gpt-image-2.5/flare/text-to-image`): from $0.008 / image
- [Ideogram V4.5](https://doitong.com/developers/models/ideogram/v4.5.md) (`ideogram/v4.5`): from $0.03 / image

## Links

- HTML page: https://doitong.com/developers/models/krea/v2/medium/text-to-image
- 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/v2/medium/text-to-image
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/krea/v2/medium/text-to-image
