Skip to main content
GET
/
api
/
v2
/
generate
/
{generation_id}
Generation Status
curl --request GET \
  --url https://api.example.com/api/v2/generate/{generation_id}
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.
generation_id
integer
required
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

ModelExpected wait
luma-flash220–35s
kling-v2.145–90s
kling-v2.1-pro60–90s
minimax-video60–90s
luma-ray260–120s
mj-video-480p60–120s
mj-video-720p90–180s