krea/krea-3, served by Comfy Router from Krea.
Input: Text, Image · Output: Image
Quick start
Create a key in your Comfy workspace and export it asCOMFY_API_KEY. The Python and TypeScript snippets use the Comfy SDKs (pip install comfy-sdk and npm install @comfyorg/sdk); the cURL snippet is the same call over raw HTTP.
Model ID: krea/krea-3
Endpoint: POST https://api.comfy.org/v2/models/krea/krea-3
- Wait for the result
- Queue and collect later
The same body, sent to
POST https://api.comfy.org/v2/models/krea/krea-3/requests. Router answers 201 with a request_id as soon as the run is admitted, and the result is collected once it is ready, from this process or another one. Queued delivery walks through status, cancellation and collection.Schema
Input
string
1:1, 4:5, 3:4, 2:3, 9:16, 5:4, 4:3, 3:2, 16:9 or 21:9. Use with resolution; omit for automatic framing.
string[]
Input image URLs, up to 8. The image_url returned by uploading the image to POST /proxy/krea/assets (multipart form field
file) is always accepted. Whether other public https URLs are accepted depends on the environment: where they are not, any link that is not an https URL on the host app-uploads.krea.ai is rejected with 400; where they are, any public https image URL is accepted, and a URL that is malformed or not https is rejected with 400 (a URL whose port is numeric but out of range is not caught by this check and can fail with a 502 instead). For a well-formed https URL in that case, a reference the caller can fix is rejected with 400 naming its host: its host does not resolve or is not publicly reachable when checked before the fetch, it redirects more than the allowed number of times, to a URL that is not https, or to a host that is not publicly reachable, it returns a 4xx other than 408 or 429, it is not an image, it is an image in a format that cannot be read, its image size header is not within the first 2 MiB, or a response with no declared length or chunked encoding ends before its image size header. Any other failure fetching it fails with a 502 error on POST /proxy/krea (Comfy Router answers it with 500 internal_error): a transient DNS, TLS or connection failure, a timeout, an origin 408, 429, 5xx or other non-200 status, or a host that passed that check but does not resolve or is not publicly reachable when the fetch connects. Where other URLs are not accepted, an app-uploads.krea.ai link that is not a live upload fails with a 5xx error; where they are, it is rejected with 400 like any other unreachable reference. While a server has not yet learned which applies, any https URL with a host that is not an app-uploads.krea.ai link, public or not, fails with a 503 error that is safe to retry. Omit for text-to-image.string
berry (default, quality) or jam (speed).
string
string
required
What to generate. With image_urls, the editing instruction; describe what should change and what should stay the same.
boolean
Set true for a local edit that keeps the rest of the image. Needs model berry and at least one image in image_urls.
string
required
1k or 2k.
integer
string
fast (default), high or ultra. High and ultra plan complex edits in more detail and take longer. Ultra needs resolution 2k.
GET /v2/models/krea/krea-3/openapi.json, the same document it validates a call against before the request reaches the provider.
Output
string (date-time)
required
Format:
date-timestring (date-time)
required
Format:
date-timestring (uuid)
required
Format:
uuidobject
required
The finished generation. Not nullable here, unlike on
KreaJob: a terminal job whose result carries no urls is answered as a Comfy Router error, so a 200 always carries it.string
Set by loraTraining jobs rather than by a generation; a
200 for these models carries urls.string (uri)[]
required
The generated images, as downloadable links. At least one, because a
completed job with an empty urls is success_without_output and never reaches this document.string
required
Always
completed on this document: it is the only status Router reports as a success, and Krea’s vocabulary is matched without a case fold.Possible values: completedExamples
Input
Output
Before you ship
The SDKs create anIdempotency-Key and reuse it for automatic retries. For manual retries, reuse the original key. Router can hold the connection for up to 10 minutes.
When a request fails, Router sends an X-Comfy-Error-Type response header explaining why. A 422 means Router rejected the input before calling the provider, and a 413 means the request body was larger than Router accepts. Download generated assets promptly because result URLs can expire.
Any size limit named in a field description above is the provider’s own bound on that field, quoted from the provider’s specification. Router applies a separate cap to the whole request body, which base64-encoded media counts against: see request body size.
This page documents one partner model called through Comfy Router. The same comfy-sdk / @comfyorg/sdk package also ships a second client, for running a whole ComfyUI workflow graph on Comfy Cloud: Comfy(api_key=...) / new Comfy({ apiKey }), with client.workflows, client.assets and client.jobs. See Comfy SDKs.
Headers
Authentication, idempotency, request IDs, error buckets, retry pacing, spend limits.
Using the Router API
Model discovery, validation errors, retries, and billing.
Limitations
What Router does not do today, and what to use instead.