Requests
Async submissions (images with ?async=true, all videos) return a request id (req_…). These endpoints are how you track them programmatically — the console’s Requests page shows the same records.
GET /v1/requests/{id}
Section titled “GET /v1/requests/{id}”curl https://<your-deployment>.inference.meshive.ai/v1/requests/req_9f8e7d6c5b4a3210 \ -H "Authorization: Bearer $MESHIVE_API_KEY"{ "id": "req_9f8e7d6c5b4a3210", "object": "inference.request", "modality": "image", "status": "succeeded", "output_object_key": "serverless/requests/req_9f8e7d6c5b4a3210/result_0.png", "output_bucket": "meshive-r2", "storage_provider": null, "output_urls": ["https://...presigned..."], "error_code": null, "error_message": null, "queued_at": 1780000000, "started_at": 1780000004, "completed_at": 1780000031}| Field | Notes |
|---|---|
status | queued → running → succeeded | failed | canceled — every request terminates |
output_urls | Presigned GET links for each produced file. Only on succeeded, valid ~1 hour — re-fetch for fresh links |
error_code / error_message | Set on failed — codes like vram_exceeded, model_timeout (table) |
queued_at / started_at / completed_at | Unix seconds |
GET /v1/requests
Section titled “GET /v1/requests”GET /v1/requests?status=failed&limit=50| Query param | Default | Notes |
|---|---|---|
status | — | queued / running / succeeded / failed / canceled |
limit | 50 | Max 200; newest first |
Returns {"object": "list", "data": [...]} of the same objects (without output_urls — fetch a request’s detail for links).
POST /v1/requests/{id}/cancel
Section titled “POST /v1/requests/{id}/cancel”Cancels a request while it’s still queued and returns the updated record (status: "canceled"). Cancellation fires the request.canceled webhook event.
| Status | When |
|---|---|
200 | Canceled |
409 request_not_cancellable | The request is running or already terminal — running work can’t be canceled |
404 / 403 | Unknown id / belongs to another workspace |