Poll the status of an async generation. Video, music, and some image models process asynchronously — they return a generation ID immediately and you poll until complete.
The integer ID returned from POST /api/v2/generate.
Request
curl https://neuralbox.top/api/v2/generate/18502 \
-H "Authorization: Bearer nb_YOUR_API_KEY"
Responses
Pending:
{
"id": 18502,
"status": "pending",
"model_slug": "kling-v2.1",
"result_url": null,
"tokens_spent": 0
}
Completed:
{
"id": 18502,
"status": "completed",
"model_slug": "kling-v2.1",
"result_url": "https://storage.neuralbox.top/generations/18502.mp4",
"thumbnail_url": "https://storage.neuralbox.top/thumbnails/18502.jpg",
"tokens_spent": 44,
"processing_ms": 67420,
"result_metadata": { "duration": 5, "width": 1920, "height": 1080 }
}
Failed (no tokens charged):
{
"id": 18503,
"status": "failed",
"error": "Provider error: content policy violation",
"tokens_spent": 0
}
Polling Pattern
import requests, time
def wait_for_result(gen_id: int, api_key: str, interval: int = 5) -> dict:
headers = {"Authorization": f"Bearer {api_key}"}
while True:
res = requests.get(
f"https://neuralbox.top/api/v2/generate/{gen_id}",
headers=headers
).json()
if res["status"] in ("completed", "failed"):
return res
time.sleep(interval)
result = wait_for_result(18502, "nb_YOUR_API_KEY")
if result["status"] == "completed":
print(f"Ready: {result['result_url']}")
else:
print(f"Failed: {result['error']}")
Tokens are deducted only on status: completed. If generation fails, your balance is not charged.
Typical Wait Times
| Model | Expected wait |
|---|
luma-flash2 | 20–35s |
kling-v2.1 | 45–90s |
kling-v2.1-pro | 60–90s |
minimax-video | 60–90s |
luma-ray2 | 60–120s |
mj-video-480p | 60–120s |
mj-video-720p | 90–180s |