Create Generation
Submit asynchronous Rivya API generation jobs with model, prompt, params, Idempotency-Key, and public response fields.
Last reviewed on 2026/05/10
Use POST /api/v1/generations to submit an asynchronous image, video, or audio generation job.
For chat models, use Chat API. POST /api/v1/generations does not create chat sessions or assistant messages.
Endpoint
POST https://rivya.ai/api/v1/generationsRequired headers:
Authorization: Bearer rvya_sk_...
Content-Type: application/jsonRecommended header:
Idempotency-Key: your-unique-request-keyRequest Body
{
"model": "z-image",
"prompt": "A clean editorial product image on a soft studio background",
"params": {
"aspect_ratio": "1:1"
},
"client_request_id": "order-123-preview"
}Fields:
model: required public model IDprompt: prompt text, required by many modelsparams: model-specific parameter objectclient_request_id: optional trace ID from your system
Read Model API Reference for model-specific params.
Reference Files In Params
For models that accept uploaded reference media, first call Files API. Then pass the upload result through model params; do not add a top-level files field to the generation request.
Use params.referenceMediaItems for new integrations:
{
"model": "nano-banana-2",
"prompt": "Restyle this product photo for a clean editorial catalog page",
"params": {
"referenceMediaItems": [
{
"url": "https://...",
"kind": "image",
"name": "reference.png",
"mimeType": "image/png"
}
]
}
}For audio or video inputs that require duration verification, include the duration_token returned by /api/v1/files as durationToken on the related referenceMediaItems entry.
curl Example
curl https://rivya.ai/api/v1/generations \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: product-preview-001" \
-d '{
"model": "z-image",
"prompt": "A clean editorial product image on a soft studio background",
"params": {
"aspect_ratio": "1:1"
}
}'JavaScript Example
const response = await fetch("https://rivya.ai/api/v1/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIVYA_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": "product-preview-001"
},
body: JSON.stringify({
model: "z-image",
prompt: "A clean editorial product image on a soft studio background",
params: { aspect_ratio: "1:1" }
})
});
const generation = await response.json();
console.log(generation.id, generation.status);Python Example
import os
import requests
response = requests.post(
"https://rivya.ai/api/v1/generations",
headers={
"Authorization": f"Bearer {os.environ['RIVYA_API_KEY']}",
"Content-Type": "application/json",
"Idempotency-Key": "product-preview-001",
},
json={
"model": "z-image",
"prompt": "A clean editorial product image on a soft studio background",
"params": {"aspect_ratio": "1:1"},
},
timeout=30,
)
generation = response.json()
print(generation["id"], generation["status"])Response
{
"id": "task_public_id",
"status": "queued",
"model": "z-image",
"reserved_credits": 1,
"final_credits": 0,
"created_at": "2026-05-10T00:00:00.000Z",
"updated_at": "2026-05-10T00:00:00.000Z",
"result": null,
"error": null
}Save the id and poll Generation Status. If you configure API Webhooks, Rivya can also send a signed generation.succeeded or generation.failed event when the task reaches a terminal state.
Idempotency
Use Idempotency-Key for retries. If the same key and same request body are replayed, Rivya can return the stored public response instead of creating a duplicate task.
If the same key is reused with different input, the API returns idempotency_conflict.
Related Pages
Generation Status
Poll Rivya API generation jobs by public task ID, read queued, processing, succeeded, and failed states, and consume result URLs.
Model API Reference
Look up Rivya API model IDs, availability, supported modes, parameter tables, prompt limits, reference media rules, and model detail links.