Tasks
Query any task's status and result (one response format shared by every capability)
Every generation endpoint is async: it returns a task_id, then you poll this unified endpoint
until the result is ready. voice / image / video all return the same shape — only result differs.
GET /api/v2/tasks/{task_id}
Auth: Authorization: Bearer sk_...
curl https://api.aiclonevoicefree.com/api/v2/tasks/b28f0341-3045-42e5-ad63-a5ccf4a1088e \
-H "Authorization: Bearer sk_your_api_key"Unified response format
{
"task_id": "b28f0341-3045-42e5-ad63-a5ccf4a1088e",
"status": "completed",
"capability": "voice",
"action": "clone",
"model": "v1-real",
"progress": null,
"error": null,
"credits_used": null,
"created_at": 1780704348,
"completed_at": 1780704355,
"metadata": null,
"audioUrl": "https://oss.aiclonevoicefree.com/tts/.../xxxx.wav",
"providerUsed": "v1-async"
}The result fields are flattened onto the top level once the task completes —
there is no nested result wrapper. Which fields appear depends on the capability:
audioUrl for voice, imageUrl for image, videoUrl for video (see each capability's page).
Before completion, no result fields are present.
| Field | Notes |
|---|---|
task_id | Task id |
status | pending / processing / completed / failed / cancelled |
capability | voice / image / video |
action | clone / vocal-conversion / generate / multi-segment … |
model | Model / subtype actually used |
progress | 0.0–1.0 (not populated yet, currently null) |
audioUrl / imageUrl / videoUrl … | Result fields, flattened onto the top level once completed (capability-specific); absent until then |
error | { code, message, type } when failed |
credits_used | Credits spent (Phase 2; currently null) |
created_at / completed_at | Unix-second timestamps |
metadata | Passthrough fields from create, echoed back |
State machine
| status | Meaning | Client |
|---|---|---|
pending | Accepted, not started | Keep polling |
processing | In progress (queue / upstream / retry-wait) | Keep polling |
completed | Done | Read the result fields (audioUrl / imageUrl / videoUrl …) |
failed | Failed | Read error |
cancelled | Cancelled (reserved) | — |
result per capability
voice (clone / convert)
{ "_type": "tts.clone", "format": "wav", "audioUrl": "https://...", "degraded": false, "providerUsed": "tts-v2-emotion-1" }image (generate)
{ "_type": "image.generate", "imageUrl": "https://...", "width": 1024, "height": 1024 }video (generate)
{ "_type": "video.generate", "videoUrl": "https://...", "durationSeconds": 5 }Polling guidance
2s after submit → first check
then → every 3–6s
video → may take several minutesErrors
| HTTP | Scenario |
|---|---|
401 | Missing / invalid API key |
404 | task_id not found |