---
title: "Run Krea 2 (krea-2)"
method: POST
path: "/models/krea-2"
tags: ["Run a model"]
---

# Run Krea 2 (krea-2)

`POST /models/krea-2`

## Request

- Base URL: `https://api.hedra.com/v3`
- URL: `https://api.hedra.com/v3/models/krea-2`
- Auth: one of:
  - API key in header `Authorization`
  - HTTP bearer

Krea 2 renders in whatever style you hand it — pass reference images and it takes on their palette, lighting and texture in a new scene. The smaller of the two, strongest on illustration, anime and painting.

Submits an asynchronous job and returns `202` with a job id. Fetch the result at `GET /v3/jobs/{job_id}` — each item in its `outputs[]` follows the `OutputItem` schema — or track progress via `GET /v3/jobs/{job_id}/status` / the SSE stream at `GET /v3/jobs/{job_id}/stream`.

## Headers

- `Idempotency-Key` string

## Request body

- SubmitBodyKrea2
  - `input` InputKrea2, required: Model-specific inputs for `krea-2`.
    - `prompt` string, required: Generation prompt. From 1 to 5000 characters.
    - `num_outputs` 1: Number of outputs generated per job. Only 1 is supported.
    - `enhance_prompt` boolean: Rewrite the prompt before generation. An LLM expands it into a fuller description and the model receives that text instead of the submitted one; the result's `prompt` reports what ran.
    - `aspect_ratio` '1:1' | '4:3' | '3:2' | '16:9' | '2.35:1' | '4:5' | '2:3' | '9:16', required: Output aspect ratio.
    - `creativity` 'raw' | 'low' | 'medium' | 'high': How loosely the model may read the prompt. 'raw' stays closest to it; 'high' drifts furthest for a more inventive result. Omit for Krea's own default ('medium').
    - `images` union[]: Reference images whose style — palette, lighting, texture, art direction — the generated image takes on. A reference with no clear subject of its own can crowd out the one you prompted for; lower `style_strength` to hold it back. Omit them to render from the prompt alone. 1 to 10 images, each at most 30 MB.
      - union
        - object: A file uploaded via POST /v3/files, referenced by the returned url.
          - `source` 'url', required
          - `url` string, uri, required: A URL returned by POST /v3/files.
        - object: An existing asset you own, referenced by its id.
          - `source` 'asset', required
          - `asset_id` string, required: The asset's id (`asset_<uuid>`), as issued by the server — a completed generation publishes one per output as `outputs[].asset_id`. Do not construct one or derive it from any other id.
    - `style_strength` number: How strongly the reference images pull the render toward their style, applied to every one of them. Krea pulls as hard as it can unless you say otherwise; lower this to leave more of the prompt's own subject, and 0 to ignore the references' style entirely. From 0 to 1.
    - `seed` integer: Seed passed to Krea. It does not make a render repeatable — Krea returns a different image each time from the same seed.
    - `quality` 'medium' | 'large': Quality level to generate at. `medium` — the smaller model, strongest on illustration, anime and painting. `large` — the larger model, for photorealism and the effects that sell it — motion blur, grain, low dynamic range.
  - `webhook` string, uri, nullable: URL to receive a signed completion webhook.

## Response `202`

Accepted. The job runs asynchronously; poll `status_url` / `result_url` from the ack.

- SubmitResponse
  - `job_id` string, required: This job's id — server-issued, and opaque.
  - `model` string, required: The resolved model id this job runs on.
  - `status` 'IN_QUEUE' | 'IN_PROGRESS' | 'COMPLETED' | 'FAILED', required: The four states a job can be in.
  - `status_url` string, required: Path of this job's status monitor: poll GET /v3/jobs/{job_id}/status for status, progress, and the estimated completion time.
  - `result_url` string, required: Path of the job resource itself: GET /v3/jobs/{job_id} returns the result envelope, including the outputs once it completes. Also the value of this response's `Location` header.
  - `estimated_completion_at` string, date-time, nullable: ISO-8601 instant this job is estimated to finish, as of this response. Null when no estimate is available yet, and when the job has already finished. The estimate can change while the job runs: poll `GET /v3/jobs/{job_id}/status` for the current one.

## Other responses

- `400`: Invalid or failed-validation request.
- `401`: Authentication failed: missing, malformed, or invalid credentials.
- `402`: The API wallet cannot cover this request. `error.billing` carries the balance, the price, and where to add funds.
- `403`: Insufficient scope or plan.
- `404`: Resource not found.
- `422`: Moderation refused the request's content.
- `429`: Rate limit exceeded.
- `500`: Internal error.

## Changes

- **2026-10-16** `06692d16e78a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hedra-labs/apis/hedra-api/changes/models/krea-2/post.md)

---

[API](https://skmtc.dev/hedra-labs/apis/hedra-api.md) - [All operations](https://skmtc.dev/hedra-labs/apis/hedra-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hedra-labs/apis/hedra-api/revisions/6ef35a11cefe?raw)
