API documentation
The ezflows API is async-first. Every generation endpoint accepts your input, returns a request id immediately, and never blocks. You either poll the returned url or wait for the webhook.
A POST returns in under 200 ms with a request id and a poll url. It does not wait for the model. Some models finish in under a second and some take minutes; the contract is the same either way, so your client never needs to know which.
1 · Submit a generation
curl -X POST https://api.ezflows.io/v1/models/gpt-image-2 \
-H "Authorization: Bearer $EZFLOWS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "a wide shot of a desert at dusk"}'Responds:
{
"request_id": "req_8f2a41c9b70e4d15",
"status": "queued",
"poll_url": "https://api.ezflows.io/v1/requests/req_8f2a41c9b70e4d15",
"status_url": "https://api.ezflows.io/v1/requests/req_8f2a41c9b70e4d15"
}2 · Poll for the result
curl https://api.ezflows.io/v1/requests/req_8f2a41c9b70e4d15 \
-H "Authorization: Bearer $EZFLOWS_API_KEY"The record carries status, cost, runner_id and five timing columns — submitted_at, queue_started_at, execution_started_at, first_byte_at and finished_at — so you can tell whether a slow run was our queue or the model itself.
3 · Authentication
Pass your key as Authorization: Bearer ez_live_…. We store only a hash and a display prefix, so a key is shown exactly once when you create it and cannot be recovered afterwards. Every request records which key spent the money.