Ideogram 4.5 API
Ideogramimage$0.113 / runSubmit a Ideogram 4.5 run over HTTP, then poll it or take a webhook. Results are files on media.ezflows.io. Try it in the playground first.
Async: the POST answers at once with a request id. Poll it, or take the webhook.
- 01
Submit
Parameters at the top level of the JSON body. Answers 202 with a request id.
curlPOST /v1/models/ideogram-4.5 curl -X POST https://api.ezflows.io/v1/models/ideogram-4.5 \ -H "Authorization: Bearer $EZFLOWS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A two-color screen-printed concert gig poster for an indie band. Headline '\''NEON MERIDIAN'\'' in tall condensed hand-drawn letters across the top. Below it a smaller bold line '\''with THE PALE FEVER'\''. A geometric risograph illustration of a fox leaping over city rooftops fills the center. Three lines of text at the bottom: '\''SATURDAY 14 MARCH'\'', '\''THE GRAND ELECTRIC - PORTLAND'\'', and '\''DOORS 8PM / $18'\''. Coral and midnight-blue risograph print with visible paper grain.", "size": "832x1248", "quality": "medium" }' # 202 Accepted, at once — it never waits for the model: # {"request_id": "req_8f2a41c9b70e4d15", "status": "queued", # "poll_url": "https://api.ezflows.io/v1/requests/req_8f2a41c9b70e4d15"} - 02
Poll
Same bearer header, every few seconds, until the status is final.
curlGET /v1/requests/:id REQUEST_ID=req_8f2a41c9b70e4d15 # from the POST while :; do BODY=$(curl -s https://api.ezflows.io/v1/requests/$REQUEST_ID \ -H "Authorization: Bearer $EZFLOWS_API_KEY") STATUS=$(echo "$BODY" | jq -r .data.status) case "$STATUS" in succeeded|failed|cancelled) break ;; esac sleep 3 done echo "$BODY" | jq -r '.data.output.artifacts[].url' # media.ezflows.io, kept 90 days - 03
Response
Files are on media.ezflows.io, kept 90 days. A failed run says why and costs nothing.
json200 · succeeded { "data": { "id": "req_8f2a41c9b70e4d15", "model_slug": "ideogram-4.5", "status": "succeeded", "http_status": 200, "cost": 0.112681, "auth_method": "api_key", "error": null, "submitted_at": "2026-09-12T18:07:21.114Z", "queue_started_at": "2026-09-12T18:07:21.402Z", "execution_started_at": "2026-09-12T18:07:22.010Z", "first_byte_at": "2026-09-12T18:07:52.871Z", "finished_at": "2026-09-12T18:07:55.203Z", "io_deleted_at": null, "canvas_id": null, "canvas_node_id": null, "client_attempt_id": null, "idempotency_key": null, "input": { "prompt": "A two-color screen-printed concert gig poster for an indie band. Headline 'NEON MERIDIAN' in tall condensed hand-drawn letters across the top. Below it a smaller bold line 'with THE PALE FEVER'. A geometric risograph illustration of a fox leaping over city rooftops fills the center. Three lines of text at the bottom: 'SATURDAY 14 MARCH', 'THE GRAND ELECTRIC - PORTLAND', and 'DOORS 8PM / $18'. Coral and midnight-blue risograph print with visible paper grain.", "size": "832x1248", "quality": "medium" }, "output": { "artifacts": [ { "index": 0, "kind": "image", "contentType": "image/png", "url": "https://media.ezflows.io/outputs/<account>/req_8f2a41c9b70e4d15/0.png" } ] } } } - 04
Webhook
Skip polling: we POST the result to your endpoint, at least once.
- Register
- Create an endpoint under Webhooks in the dashboard; the signing secret is shown once.
- Events
- request.succeeded · request.failed · request.cancelled
- Headers
- ezflows-event-id (dedupe on it) · ezflows-timestamp (unix seconds) · ezflows-signature t=<ts>,v1=<hex HMAC-SHA256 of "<ts>.<raw body>">
- Verify
- Over the exact bytes received, in constant time; reject anything older than five minutes.
- Respond
- Any 2xx within 10 s. Redirects are not followed.
- Retries
- Five, with backoff: 30 s · 60 s · 2 min · 4 min · 8 min. Disabled after five consecutive dead deliveries.
jsonDelivery body { "id": "82cf46a4-841e-41d6-b3c7-facc937d3252", "type": "request.succeeded", "created_at": "2026-09-12T18:07:55Z", "data": { "id": "req_8f2a41c9b70e4d15", "model_slug": "ideogram-4.5", "status": "succeeded", "cost": 0.112681, "output": { "artifacts": [ { "url": "https://media.ezflows.io/…/0.png" } ] } } }curlverify.sh # Create the endpoint under Webhooks in the dashboard; the signing secret is shown once. # ezflows-signature: t=<ts>,v1=<hex HMAC-SHA256 of "<ts>.<raw body>"> # body.json = the exact bytes received. Reject anything older than five minutes. EXPECTED=$({ printf '%s.' "$TS"; cat body.json; } \ | openssl dgst -sha256 -hmac "$EZFLOWS_WEBHOOK_SECRET" -r | cut -d' ' -f1) [ "$EXPECTED" = "$V1" ] && echo "valid" || echo "reject"
Parameters 6
| Name | Type | Default | Allowed | Description |
|---|---|---|---|---|
| promptrequired | string | A two-color screen-printed concert gig poster for an indie band. Headline 'NEON MERIDIAN' in tall condensed hand-drawn letters across the top. Below it a smaller bold line 'with THE PALE FEVER'. A geometric risograph illustration of a fox leaping over city rooftops fills the center. Three lines of text at the bottom: 'SATURDAY 14 MARCH', 'THE GRAND ELECTRIC - PORTLAND', and 'DOORS 8PM / $18'. Coral and midnight-blue risograph print with visible paper grain. | — | Describe the image and quote exact text to render in any language. Lead with the subject; keep in-image words short. |
| size | enum | 832x1248 | auto · 1024x1024 · 1152x864 · 864x1152 · 1280x720 · 720x1280 · 1280x800 · 800x1280 · 1120x896 · 896x1120 · 1248x832 · 832x1248 · 1440x720 · 720x1440 · 2048x2048 · 2304x1728 · 1728x2304 · 2560x1440 · 1440x2560 · 2560x1600 · 1600x2560 · 2240x1792 · 1792x2240 · 2496x1664 · 1664x2496 · 2880x1440 · 1440x2880 · 2944x1152 · 1152x2944 · 3072x1280 · 1280x3072 · 3168x1296 · 1296x3168 · 3328x1248 · 1248x3328 · 3072x1024 · 1024x3072 | Output resolution; 1K and 2K cost the same. Match the artifact: 1024x1024 logo, 832x1248 poster, 1728x2304 dense text. |
| quality | enum | medium | low · medium · high | Render and price tier: low, medium, or high. Medium for most work, high for dense small text, low for drafts. |
| magic_prompt | enum | auto | auto · on · off | Prompt expansion: auto or on rewrite it, off keeps it verbatim. Use off for strictly exact wording. |
| seed | integer | — | 0–2147483647 | Integer 0-2147483647 for reproducible output. Set to repeat a result; omit for variety. |
| enable_copyright_detection | boolean | false | — | Optional post-generation copyright check; adds latency, withholds flagged images. Leave off unless required. |