Nova API Reference
Nova provides a unified API for 100+ AI models. Text models use an OpenAI-compatible interface. Image and video models use an async generation pattern — POST to create a job, then poll for the result.
Base URL
https://api.nova.ai/v1/chat/completions/api/v1/model/generateImage/api/v1/model/generatenvideo/api/v1/model/prediction/{id}/v1/modelsAuthentication
All requests require a Nova API key passed as a Bearer token in the Authorization header. Get your key from Console → API Keys.
Authorization: Bearer <key>Authorization: Bearer nova-YOUR_API_KEY
from openai import OpenAI
client = OpenAI(
base_url="https://api.nova.ai/v1",
api_key="nova-YOUR_API_KEY",
)Chat Completions
Fully OpenAI-compatible. Use any OpenAI SDK by pointing base_url at Nova's endpoint. Supports streaming via SSE.
/v1/chat/completionsParameters
modelstringmessagesarraytemperaturenumbermax_tokensintegerstreambooleantop_pnumberfrom openai import OpenAI
client = OpenAI(
base_url="https://api.nova.ai/v1",
api_key="nova-YOUR_API_KEY",
)
response = client.chat.completions.create(
model="deepseek/deepseek-r1",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the capital of France?"},
],
temperature=0.7,
)
print(response.choices[0].message.content)curl https://api.nova.ai/v1/chat/completions \
-H "Authorization: Bearer nova-YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-r1",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": false
}'Image Generation
Async text-to-image. POST a job and receive a prediction ID, then poll /prediction/{id} until status is success.
/api/v1/model/generateImageParameters
modelstringpromptstringwidthintegerheightintegerstepsintegerseedintegerimage_urlstringimport requests, time
headers = {"Authorization": "Bearer nova-YOUR_API_KEY"}
resp = requests.post(
"https://api.nova.ai/api/v1/model/generateImage",
headers=headers,
json={
"model": "black-forest-labs/flux-dev",
"prompt": "A majestic dragon over snow-capped mountains at sunset",
"width": 1024,
"height": 1024,
}
)
prediction_id = resp.json()["id"]
while True:
result = requests.get(
f"https://api.nova.ai/api/v1/model/prediction/{prediction_id}",
headers=headers,
).json()
if result["status"] == "success":
print(result["results"][0]["data"][0]["outputs"][0]["url"])
break
elif result["status"] == "failed":
raise Exception("Generation failed")
time.sleep(2)Video Generation
Async text-to-video or image-to-video. Poll for completion — videos typically take 30–120 seconds.
/api/v1/model/generatenvideoParameters
modelstringpromptstringdurationintegerimage_urlstringimport requests, time
headers = {"Authorization": "Bearer nova-YOUR_API_KEY"}
resp = requests.post(
"https://api.nova.ai/api/v1/model/generatenvideo",
headers=headers,
json={
"model": "kuaishou/kling-16",
"prompt": "A camera slowly panning across a misty mountain valley at dawn",
"duration": 5,
}
)
prediction_id = resp.json()["id"]
while True:
result = requests.get(
f"https://api.nova.ai/api/v1/model/prediction/{prediction_id}",
headers=headers,
).json()
if result["status"] == "success":
print(result["results"][0]["data"][0]["outputs"][0]["url"])
break
time.sleep(5)Poll Results
Check the status of any async generation job. Returns status and output URLs when complete.
/api/v1/model/prediction/{id}Response fields
idstringstatusstringresults[].data[].outputs[].urlstring{
"id": "pred_01jwxyz",
"status": "success",
"results": [
{
"data": [
{
"outputs": [
{ "url": "https://cdn.nova.ai/outputs/pred_01jwxyz.png" }
]
}
]
}
]
}List Models
Returns all available models on Nova. Response is OpenAI-compatible — model IDs use provider/model-slug format.
/v1/modelsfrom openai import OpenAI
client = OpenAI(
base_url="https://api.nova.ai/v1",
api_key="nova-YOUR_API_KEY",
)
models = client.models.list()
for model in models.data:
print(model.id) # e.g. "deepseek/deepseek-r1"curl https://api.nova.ai/v1/models \ -H "Authorization: Bearer nova-YOUR_API_KEY"
Errors & Status Codes
Nova uses standard HTTP status codes. Error responses include a message field with details.
400Bad Request
Invalid parameters or missing required fields.
401Unauthorized
Missing or invalid API key.
402Payment Required
Insufficient credit balance. Top up to continue.
404Not Found
Model or prediction ID does not exist.
429Rate Limited
Too many requests. Implement exponential backoff and retry.
500Server Error
Internal error. Retry after a short delay.