# Flux 3 | Text to Image Flux 3 Text to Image generates images from written prompts for visual concepts and creative projects, with selectable aspect ratios and sizes on each::labs. ## API Information - **Model Slug:** flux-3-text-to-image - **Branded URL:** https://www.eachlabs.ai/black-forest-labs/flux-3/flux-3-text-to-image - **Provider:** Black Forest Labs - **Category:** Text to Image - **Output Type:** image - **Status:** active - **Base Cost:** $0.041–$0.607 per execution, depending on resolution - **Interactive Demo:** https://www.eachlabs.ai/ai-models/flux-3-text-to-image ## Pricing - **Charge Type:** dynamic - **Estimate:** $0.041–$0.607 per execution, depending on resolution - **Pricing Details:** 768sq: $0.041 - **Pricing Details:** 1k (default): $0.048 - **Pricing Details:** 2k: $0.1 - **Pricing Details:** 4k: $0.607 ## Input Schema | Parameter | Type | Required | Default | Constraints | Description | |-----------|------|----------|---------|-------------|-------------| | prompt | string | Yes | - | - | Text describing the image to generate. To place elements, tag each one as in the text and end the prompt with a JSON list of {"id", "bbox": [top, left, bottom, right], "desc"} rows on a 0-1000 grid. | | aspect_ratio | string | No | auto | auto, 21:9, 2:1, 16:9, 3:2, 7:5, 4:3, 5:4, 1:1, 4:5, 3:4, 5:7, 2:3, 9:16, 1:2, 9:21 | Aspect ratio of the generated image. auto lets the model pick the ratio that fits the prompt. Default: auto. | | resolution | string | No | 1k | 768sq, 1k, 2k, 4k | Output size: 768sq (~0.6 MP, 768x768 at 1:1), 1k (~1 MP), 2k (~4 MP) or 4k (~16 MP). 4k can take several minutes. Default: 1k. | | grounding | boolean | No | true | - | Let the model research the prompt with web and image search before generating. Default: true. | | safety_tolerance | integer | No | 2 | 0–4 | Moderation tolerance for input and output. 0 is the strictest, 4 the most permissive. Default: 2. | ## Example Request ```bash curl -X POST https://api.eachlabs.ai/v1/prediction/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "flux-3-text-to-image", "input": { "prompt": "Ultra-realistic close-up editorial beauty portrait of a young woman with platinum blonde hair slicked back into a low bun, pale porcelain skin with a natural dewy glow, light blue eyes with long lashes, softly flushed cheeks and full soft pink lips slightly parted. She wears an elegant minimal white dress made of soft matte fabric, with a delicate neckline and subtle draping over her shoulders, and a small silver chain earring. An albino white baby turtle with a pearl-ivory shell, faint golden scute lines and clear luminous light blue eyes rests gently on her shoulder, close to her chin. Dappled leaf shadows from warm sunlight fall across her face, neck and the turtle. Head turned slightly to the side, gazing past the camera with a calm, dreamy expression. Plain warm beige background, monochrome ivory, cream and white color palette, natural soft daylight, high-fashion magazine aesthetic, shot on 85mm lens, shallow depth of field, sharp focus on eyes, detailed skin texture, 8K." } }' ``` ## Output Schema Response returned by `GET /v1/prediction/{id}` when the job completes: ```json { "status": "success", "predictionID": "string", "output": "string (URL of generated image)", "metrics": { "predict_time": "number (seconds)" } } ``` ## Polling ```bash curl https://api.eachlabs.ai/v1/prediction/{PREDICTION_ID} \ -H "Authorization: Bearer YOUR_API_KEY" ``` | Status | Meaning | |--------|---------| | `processing` | Still running — poll again | | `success` | Done — read `output` | | `error` | Failed — read `message` / `details` | ## Webhook (alternative to polling) Pass `"webhook_url": "https://your.host/path"` in the create request. Eachlabs POSTs this payload when the job ends: ```json { "exec_id": "prediction-uuid", "status": "succeeded", "output": "https://...", "error": "" } ``` `status` is `"succeeded"` or `"failed"`. `exec_id` equals the `predictionID` from create. Return 2xx within 30 seconds. ## Errors Error body: `{ "status": "error", "message": "...", "details": "..." }` | Code | Meaning | |------|---------| | `400` | Invalid input | | `401` | Missing / invalid `Authorization` bearer token | | `404` | Unknown model or prediction id | | `429` | Rate limit — 100 creates / min, 10 concurrent per key | | `5xx` | Retry with backoff | ## Usage Notes - API Base URL: `https://api.eachlabs.ai/v1` - Authentication: send `Authorization: Bearer YOUR_API_KEY`. Generate a key from the Eachlabs dashboard at https://www.eachlabs.ai/dashboard/api-keys. - File-typed parameters (`*_url`, `image_url`, `video_url`, `audio_url`, etc.) accept publicly-reachable HTTPS URLs only. Upload your asset first (GCS / S3 / your CDN) and pass the resulting URL. Data-URIs and localhost URLs are rejected. - For structured parameters (arrays / objects) send real JSON values, not stringified payloads. - Monetary values are reported in USD; per-token / per-megapixel rates may be billed in micro-cents internally. - Prefer `webhook_url` over polling for long-running predictions — see the Webhook Callback section.