ezflows

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.

The contract

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

bash
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:

json
{
  "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

bash
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.