Call a saved workflow over HTTP as an endpoint.
Pick a workflow version and a GPU, set min and max workers, and get a URL. At 0 min workers the endpoint sleeps when idle, and the first request after that waits for a cold start.
A request is a POST with the inputs you exposed on the workflow’s form.
curl https://api.milvey.example/v1/endpoints/brand-film/runs \
-H "Authorization: Bearer $MILVEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"product_image": "https://cdn.example.com/bottle.png",
"prompt": "Slow orbit, soft rim light",
"duration": 5
},
"webhook_url": "https://example.com/hooks/milvey"
}'# 202 Accepted
{ "id": "req_91af", "status": "queued", "version": "v7" }
# POST https://example.com/hooks/milvey (1m 29s later)
{
"type": "run.succeeded",
"id": "req_91af",
"output": { "video_url": "https://…/req_91af.mp4" },
"credits": 12,
"gpu": "RTX PRO 6000"
}Example request. Field names come from the workflow’s exposed inputs.
Min workers sets the trade between idle cost and cold starts.
At 0, an idle day costs 0 cr and the first request waits for a worker to load. At 1 or more, requests start at once and each awake worker is metered per second at its GPU’s cr/min rate.
0–3 workers, sleeps after 60 s idle. Idle cost 0 cr. Cold start ≈ 25 s.
Sample: RTX PRO 6000 at 8 cr/min while a worker is awake. Not a quote.
Each deploy phase is logged with its duration.
| 00:00 | Build: environment from the resolved node packs and weights | 48 s |
| 00:48 | Push: image to the GPU region | 21 s |
| 01:09 | Warm: weights loaded on the first worker | 35 s |
| 01:44 | Health check: one test request against the input schema | 6 s |
| 01:50 | Live at https://api.milvey.example/v1/endpoints/brand-film |
A failed request shows 0 cr in the endpoint’s log.
| Request | Time | Status | Duration | Credits |
|---|---|---|---|---|
| req_91af | 12:41:07 | 200 · delivered | 1m 29s | 12 cr |
| req_91aecold start | 12:38:55 | 200 · delivered | 1m 58s | 12 cr |
| req_91ad | 12:30:12 | 422 · invalid input | 0.2s | 0 cr |
| req_91ac | 12:22:40 | 200 · delivered | 1m 31s | 12 cr |
| req_91ab | 12:10:03 | 500 · failed | 44s | 0 cr |
Sample log for the brand-film endpoint.
An endpoint serves its pinned version until you move it.
Publishing a new workflow version leaves live endpoints alone.
brand-film
serving v7sampleRoll brand-film back to v5?
- New requests run v5. Requests already running finish on v7.
- v5 has no duration input. Calls that send it get a 422 and 0 cr.
- Same URL, GPU and worker settings.
Questions about endpoints
What does an idle endpoint cost?
How do I get results for a long video?
What happens when a request fails?
How are API keys handled?
Can I change the GPU later?
Send me the workflow your app needs to call.
Join the list and reply with the graph. I’ll deploy it as an endpoint and send you the curl command and the credits per request.
Email when signups open · Unsubscribe any time