ویدئو · kind=video
API Naqqalنقّال · دریافت کلید API و تولید ویدئو با کد
از یک موضوع، متن یا فایل PDF و Word، ویدیوی کامل با تصویر، گویندگی، زیرنویس و موسیقی بساز. برای فراخوانی، مقدار model_slug را دقیقاً برابر naqqal بگذارید.
پرداخت ریالی با کردیت · بدون کارت خارجی · بدون نیاز به اشتراک پرو
ارسال تولید · POST /v1/media/generations
curl -sS "https://api.noqte.ai/v1/media/generations" \
-H "Authorization: Bearer $NOQTE_MEDIA_KEY" \
-H "Idempotency-Key: order-1042-cover-v1" \
-H "Content-Type: application/json" \
-d '{
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": {
"format": "youtube",
"duration": "30s"
},
"max_credits": 20
}'import os
import requests
BASE = "https://api.noqte.ai/v1/media"
HEADERS = {"Authorization": f"Bearer {os.environ['NOQTE_MEDIA_KEY']}"}
payload = {
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": {
"format": "youtube",
"duration": "30s",
},
"max_credits": 20,
}
response = requests.post(
f"{BASE}/generations",
json=payload,
headers={**HEADERS, "Idempotency-Key": "order-1042-cover-v1"},
timeout=60,
)
data = response.json()
if not response.ok:
raise RuntimeError(f"{response.status_code} {data['error']['code']}: {data['error']['message']}")
print(data)const BASE = "https://api.noqte.ai/v1/media";
const headers = { Authorization: `Bearer ${process.env.NOQTE_MEDIA_KEY}` };
const response = await fetch(`${BASE}/generations`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json", "Idempotency-Key": "order-1042-cover-v1" },
body: JSON.stringify({
model_slug: "naqqal",
prompt: "A calm cinematic scene at sunrise, soft light",
params: {
format: "youtube",
duration: "30s"
},
max_credits: 20
}),
});
const data = await response.json();
if (!response.ok) throw new Error(`${response.status} ${data.error.code}: ${data.error.message}`);
console.log(data);<?php
$base = "https://api.noqte.ai/v1/media";
$headers = [
"Authorization: Bearer " . getenv("NOQTE_MEDIA_KEY"),
"Idempotency-Key: order-1042-cover-v1",
"Content-Type: application/json",
];
$payload = [
"model_slug" => "naqqal",
"prompt" => "A calm cinematic scene at sunrise, soft light",
"params" => [
"format" => "youtube",
"duration" => "30s",
],
"max_credits" => 20,
];
$ch = curl_init("$base/generations");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($body, true);
if ($status >= 400) {
throw new RuntimeException("$status {$data['error']['code']}: {$data['error']['message']}");
}
print_r($data);package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
payload := `{
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": {
"format": "youtube",
"duration": "30s"
},
"max_credits": 20
}`
req, err := http.NewRequest("POST", "https://api.noqte.ai/v1/media/generations", strings.NewReader(payload))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+os.Getenv("NOQTE_MEDIA_KEY"))
req.Header.Set("Idempotency-Key", "order-1042-cover-v1")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)
fmt.Println(res.StatusCode, string(data))
}- قیمت پیشفرض
- از برآورد بگیرید
- واحد قیمت
- به ازای هر ثانیه
- خروجی
- MP4
- پرامپت
- اختیاری
01 · Contract
قرارداد ورودی این مدل
فقط نام گروهها و مقدارهای زیر برای این مدل معتبرند؛ گزینهٔ ناشناخته پیش از کسر کردیت با خطای 422 رد میشود. از کاتالوگ ۲۰ شهریور ۱۴۰۵؛ مرجع نهایی پاسخ GET /v1/media/models است.
متن به ویدیوتصویر به ویدیوفایل PDF/Word به ویدیو
params — گروههای گزینه و مقدارهای مجاز
| گروه | مقدارهای مجاز (id) | قیمت با این گزینه |
|---|---|---|
format | youtubeیوتیوب · ۱۶:۹پیشفرضstoryاستوری · ۹:۱۶squareمربع · ۱:۱ | — |
duration | 30s۳۰ ثانیهپیشفرض60s۱ دقیقه120s۲ دقیقه180s۳ دقیقه240s۴ دقیقه300s۵ دقیقه360s۶ دقیقه420s۷ دقیقه480s۸ دقیقه540s۹ دقیقه600s۱۰ دقیقه | — |
quality | 720pHD · 720pپیشفرض1080pFull HD · 1080p | — |
tone | autoخودکارپیشفرضwarmصمیمیcalmآرامexcitingهیجانیepicحماسیemotionalاحساسی و دراماتیکinspiringانگیزشیformalرسمی (کتابی)playfulشاد و بامزه | — |
voice | autoخودکارپیشفرضmale_calmمرد، آرام و مستندگونهmale_energeticمرد، جوان و پرانرژیmale_epicمرد، حماسی و پرطنینmale_storytellerمرد، نقال و قصهگوfemale_warmزن، گرم و صمیمیfemale_clearزن، رسمی و واضحfemale_energeticزن، جوان و پرانرژیfemale_softزن، آرام و احساسی | — |
style | autoخودکارپیشفرضcinematicسینماییphotorealواقعگراdocumentary_bwمستند سیاهوسفیدvintage_filmفیلم قدیمیpersian_miniatureنگارگری ایرانیcoffeehouse_paintingنقاشی قهوهخانهایoil_paintingرنگروغن کلاسیکwatercolorآبرنگpencil_sketchطراحی مدادیchildren_bookکتاب کودکflat_illustrationتصویرسازی فلتisometricایزومتریکpapercutکاغذی (پیپرکات)3d_renderسهبعدی3d_cartoonکارتون سهبعدیclaymationخمیری (کلیمیشن)animeانیمهcomicکمیکfantasy_artفانتزی و اسطورهایneon_cyberpunkنئون و سایبرپانکdark_minimalمینیمال تیره | — |
music | autoخودکارپیشفرضcalmآرامinspiringالهامبخشenergeticپرانرژیdocumentaryمستندdramaticدراماتیکepicحماسیnoneبدون موسیقی | — |
music_source | autoخودکارپیشفرضgenerateموسیقی اختصاصی همین ویدیوlibraryاز کتابخانهی آماده | — |
subtitles | onروشنپیشفرضoffخاموش | — |
subtitle_style | autoخودکارپیشفرضclassicکلاسیکpopهیجانی (پاپ)epicحماسیboxجعبهایneonنئونminimalمینیمال | — |
title_card | offخاموشپیشفرضonروشن | — |
language | autoتشخیص خودکارپیشفرضfaفارسیenانگلیسی | — |
ورودیها
| ورودی | فیلد | حداکثر | الزامی |
|---|---|---|---|
| متن · پرامپت | prompt | — | خیر |
| تصویر · عکس رفرنس (شخصیت، محصول یا سبک) | refs | ۱۰ | خیر |
فایلهای مرجع اول با POST /v1/media/uploads ثبت میشوند و بعد شناسهٔ برگشتی در refs یا برای ورودیهای نقشدار در ref_slots میآید؛ URL یا مسیر فایل پذیرفته نمیشود. سقف حجم، فرمت و مدت مجاز هر ورودی در پاسخ کاتالوگ همین مدل میآید.
02 · Samples
نمونهٔ درخواست با naqqal
اول قیمت همین ورودی را بگیرید، بعد با max_credits و یک Idempotency-Key ثابت ارسال کنید و تا completed پیگیری کنید.
برآورد هزینه — بدون کسر کردیت
curl -sS "https://api.noqte.ai/v1/media/estimate" \
-H "Authorization: Bearer $NOQTE_MEDIA_KEY" \
-H "Content-Type: application/json" \
-d '{
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": {
"format": "youtube",
"duration": "30s"
}
}'import os
import requests
BASE = "https://api.noqte.ai/v1/media"
HEADERS = {"Authorization": f"Bearer {os.environ['NOQTE_MEDIA_KEY']}"}
payload = {
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": {
"format": "youtube",
"duration": "30s",
},
}
response = requests.post(
f"{BASE}/estimate",
json=payload,
headers=HEADERS,
timeout=60,
)
data = response.json()
if not response.ok:
raise RuntimeError(f"{response.status_code} {data['error']['code']}: {data['error']['message']}")
print(data)const BASE = "https://api.noqte.ai/v1/media";
const headers = { Authorization: `Bearer ${process.env.NOQTE_MEDIA_KEY}` };
const response = await fetch(`${BASE}/estimate`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({
model_slug: "naqqal",
prompt: "A calm cinematic scene at sunrise, soft light",
params: {
format: "youtube",
duration: "30s"
}
}),
});
const data = await response.json();
if (!response.ok) throw new Error(`${response.status} ${data.error.code}: ${data.error.message}`);
console.log(data);<?php
$base = "https://api.noqte.ai/v1/media";
$headers = [
"Authorization: Bearer " . getenv("NOQTE_MEDIA_KEY"),
"Content-Type: application/json",
];
$payload = [
"model_slug" => "naqqal",
"prompt" => "A calm cinematic scene at sunrise, soft light",
"params" => [
"format" => "youtube",
"duration" => "30s",
],
];
$ch = curl_init("$base/estimate");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($body, true);
if ($status >= 400) {
throw new RuntimeException("$status {$data['error']['code']}: {$data['error']['message']}");
}
print_r($data);package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
payload := `{
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": {
"format": "youtube",
"duration": "30s"
}
}`
req, err := http.NewRequest("POST", "https://api.noqte.ai/v1/media/estimate", strings.NewReader(payload))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+os.Getenv("NOQTE_MEDIA_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)
fmt.Println(res.StatusCode, string(data))
}پاسخ پذیرش — 202 application/json
{
"request_id": "req_9f1c2d3e4a5b6c7d8e9f0a1b2c3d4e5f",
"generation": {
"id": "0f3a9c2e7b1d4a6c8e5f2b9d1c7a3e4f",
"request_id": "req_9f1c2d3e4a5b6c7d8e9f0a1b2c3d4e5f",
"api_key_id": 51,
"kind": "video",
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": {
"format": "youtube",
"duration": "30s"
},
"texts": {},
"status": "pending",
"created_at": "2026-09-05T10:00:00+00:00",
"completed_at": null,
"charged_credits": 12,
"refunded_credits": 0,
"net_credits": 12,
"billing_status": "charged",
"outputs": [],
"error": null
},
"replayed": false,
"poll_after_seconds": 5
}جریان کامل: برآورد ← ارسال ← پیگیری تا آمادهشدن خروجی
# کلید را فقط در متغیر محیطی نگه دارید؛ نیازمند curl و jq
export NOQTE_MEDIA_KEY='sk-media-…'
BASE='https://api.noqte.ai/v1/media'
PAYLOAD='{"model_slug":"naqqal","prompt":"A calm cinematic scene at sunrise, soft light","params":{"format":"youtube","duration":"30s"}}'
# ۱) برآورد — بدون کسر کردیت
curl -sS "$BASE/estimate" \
-H "Authorization: Bearer $NOQTE_MEDIA_KEY" \
-H "Content-Type: application/json" \
-d "$PAYLOAD"
# ۲) ارسال تولید — شناسهٔ تکرار را یکبار بسازید و در retry همان را بفرستید
OP_ID="$(uuidgen)"
GEN_ID=$(curl -sS "$BASE/generations" \
-H "Authorization: Bearer $NOQTE_MEDIA_KEY" \
-H "Idempotency-Key: $OP_ID" \
-H "Content-Type: application/json" \
-d "$(printf '%s' "$PAYLOAD" | jq '. + {max_credits: 20}')" | jq -r '.generation.id')
# ۳) پیگیری هر ۵ ثانیه تا completed یا failed
while :; do
STATUS=$(curl -sS "$BASE/generations/$GEN_ID" -H "Authorization: Bearer $NOQTE_MEDIA_KEY")
STATE=$(printf '%s' "$STATUS" | jq -r '.generation.status')
[ "$STATE" = completed ] || [ "$STATE" = failed ] && break
sleep 5
done
printf '%s\n' "$STATUS" | jq '.generation | {status, net_credits, billing_status, outputs}'import os
import time
import uuid
import requests
BASE = "https://api.noqte.ai/v1/media"
HEADERS = {"Authorization": f"Bearer {os.environ['NOQTE_MEDIA_KEY']}"}
def call(method, path, **kwargs):
response = requests.request(method, f"{BASE}{path}", headers={**HEADERS, **kwargs.pop("headers", {})}, timeout=60, **kwargs)
data = response.json()
if not response.ok:
raise RuntimeError(f"{response.status_code} {data['error']['code']}: {data['error']['message']}")
return data
payload = {
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": {
"format": "youtube",
"duration": "30s",
},
}
# ۱) برآورد — بدون کسر کردیت
estimate = call("POST", "/estimate", json=payload)
print("credits:", estimate["credits"], "wallet:", estimate["wallet_balance"])
# ۲) ارسال تولید؛ شناسهٔ تکرار را پیش از ارسال ذخیره کنید و در retry تغییر ندهید
operation_id = str(uuid.uuid4())
accepted = call(
"POST",
"/generations",
json={**payload, "max_credits": estimate["credits"]},
headers={"Idempotency-Key": operation_id},
)
generation = accepted["generation"]
# ۳) پیگیری تا completed یا failed
while generation["status"] in ("pending", "running"):
time.sleep(accepted.get("poll_after_seconds") or 5)
generation = call("GET", f"/generations/{generation['id']}")["generation"]
if generation["status"] == "failed":
raise RuntimeError(f"{generation['error']['code']} — billing: {generation['billing_status']}")
for output in generation["outputs"]:
print(output["url"]) # لینک امضاشده و زماندارimport { randomUUID } from "node:crypto";
const BASE = "https://api.noqte.ai/v1/media";
const headers = { Authorization: `Bearer ${process.env.NOQTE_MEDIA_KEY}` };
async function call(path, init = {}) {
const response = await fetch(`${BASE}${path}`, {
...init,
headers: { ...headers, "Content-Type": "application/json", ...init.headers },
signal: AbortSignal.timeout(60_000),
});
const data = await response.json();
if (!response.ok) throw new Error(`${response.status} ${data.error.code}: ${data.error.message}`);
return data;
}
const payload = {
model_slug: "naqqal",
prompt: "A calm cinematic scene at sunrise, soft light",
params: {
format: "youtube",
duration: "30s"
}
};
// ۱) برآورد — بدون کسر کردیت
const estimate = await call("/estimate", { method: "POST", body: JSON.stringify(payload) });
console.log("credits:", estimate.credits, "wallet:", estimate.wallet_balance);
// ۲) ارسال تولید؛ شناسهٔ تکرار را پیش از ارسال ذخیره کنید و در retry تغییر ندهید
const operationId = randomUUID();
const accepted = await call("/generations", {
method: "POST",
headers: { "Idempotency-Key": operationId },
body: JSON.stringify({ ...payload, max_credits: estimate.credits }),
});
let { generation } = accepted;
// ۳) پیگیری تا completed یا failed
while (generation.status === "pending" || generation.status === "running") {
await new Promise((resolve) => setTimeout(resolve, (accepted.poll_after_seconds ?? 5) * 1000));
({ generation } = await call(`/generations/${generation.id}`));
}
if (generation.status === "failed") {
throw new Error(`${generation.error.code} — billing: ${generation.billing_status}`);
}
for (const output of generation.outputs) console.log(output.url); // لینک امضاشده و زماندار<?php
$base = "https://api.noqte.ai/v1/media";
$key = getenv("NOQTE_MEDIA_KEY");
function call(string $method, string $path, ?array $json = null, array $extraHeaders = []): array
{
global $base, $key;
$ch = curl_init($base . $path);
$headers = array_merge(["Authorization: Bearer $key", "Content-Type: application/json"], $extraHeaders);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $json === null ? null : json_encode($json, JSON_UNESCAPED_UNICODE),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($body, true);
if ($status >= 400) {
throw new RuntimeException("$status {$data['error']['code']}: {$data['error']['message']}");
}
return $data;
}
$payload = [
"model_slug" => "naqqal",
"prompt" => "A calm cinematic scene at sunrise, soft light",
"params" => [
"format" => "youtube",
"duration" => "30s",
],
];
// ۱) برآورد — بدون کسر کردیت
$estimate = call("POST", "/estimate", $payload);
echo "credits: {$estimate['credits']}\n";
// ۲) ارسال تولید؛ شناسهٔ تکرار را پیش از ارسال ذخیره کنید و در retry تغییر ندهید
$operationId = bin2hex(random_bytes(16));
$accepted = call("POST", "/generations", $payload + ["max_credits" => $estimate["credits"]], ["Idempotency-Key: $operationId"]);
$generation = $accepted["generation"];
// ۳) پیگیری تا completed یا failed
while (in_array($generation["status"], ["pending", "running"], true)) {
sleep($accepted["poll_after_seconds"] ?? 5);
$generation = call("GET", "/generations/{$generation['id']}")["generation"];
}
if ($generation["status"] === "failed") {
throw new RuntimeException($generation["error"]["code"] . " — billing: " . $generation["billing_status"]);
}
foreach ($generation["outputs"] as $output) {
echo $output["url"], "\n"; // لینک امضاشده و زماندار
}package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
"time"
"github.com/google/uuid"
)
const base = "https://api.noqte.ai/v1/media"
func call(method, path string, body any, headers map[string]string) map[string]any {
var reader *bytes.Reader
if body != nil {
raw, _ := json.Marshal(body)
reader = bytes.NewReader(raw)
} else {
reader = bytes.NewReader(nil)
}
req, err := http.NewRequest(method, base+path, reader)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("NOQTE_MEDIA_KEY"))
req.Header.Set("Content-Type", "application/json")
for k, v := range headers {
req.Header.Set(k, v)
}
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
json.NewDecoder(res.Body).Decode(&data)
if res.StatusCode >= 400 {
e := data["error"].(map[string]any)
panic(fmt.Sprintf("%d %v: %v", res.StatusCode, e["code"], e["message"]))
}
return data
}
func main() {
payload := map[string]any{
"model_slug": "naqqal",
"prompt": "A calm cinematic scene at sunrise, soft light",
"params": map[string]string{"format": "youtube", "duration": "30s"},
}
// ۱) برآورد — بدون کسر کردیت
estimate := call("POST", "/estimate", payload, nil)
fmt.Println("credits:", estimate["credits"])
// ۲) ارسال تولید؛ شناسهٔ تکرار را پیش از ارسال ذخیره کنید و در retry تغییر ندهید
payload["max_credits"] = estimate["credits"]
accepted := call("POST", "/generations", payload, map[string]string{"Idempotency-Key": uuid.NewString()})
generation := accepted["generation"].(map[string]any)
// ۳) پیگیری تا completed یا failed
for generation["status"] == "pending" || generation["status"] == "running" {
time.Sleep(5 * time.Second)
generation = call("GET", "/generations/"+generation["id"].(string), nil, nil)["generation"].(map[string]any)
}
if generation["status"] == "failed" {
panic(fmt.Sprintf("%v — billing: %v", generation["error"], generation["billing_status"]))
}
for _, output := range generation["outputs"].([]any) {
fmt.Println(output.(map[string]any)["url"]) // لینک امضاشده و زماندار
}
}03 · API key
دریافت کلید API Naqqal
یک کلید تولید محتوا برای همهٔ مدلهای فعال نقطه کافی است؛ هزینه با کردیت کیف پول و بهصورت ریالی پرداخت میشود و اشتراک پرو لازم نیست.
- 01
ثبتنام یا ورود به نقطه
با شمارهٔ موبایل یا ایمیل. نیازی به کارت بینالمللی، اشتراک دلاری یا پلن پرو نیست.
- 02
شارژ کیف پول با کردیت
پرداخت ریالی؛ هزینهٔ هر تولید از همین موجودی کسر میشود و قبل از هر درخواست قابل برآورد است.
- 03
ساخت کلید تولید محتوا
از «کلیدهای API → تولید محتوا» یک کلید sk-media بسازید؛ در صورت نیاز آن را فقط به همین مدل محدود و برایش سقف کردیت روزانه بگذارید.
- 04
اجرای اولین درخواست
همین نمونهٔ صفحه را با کلید خود اجرا کنید: برآورد، ارسال با Idempotency-Key و پیگیری تا آمادهشدن خروجی.
04 · FAQ
پرسشهای پرتکرار دربارهٔ API Naqqal
چطور کلید API Naqqal بگیرم؟
در نقطه ثبتنام کنید، کیف پول را با کردیت شارژ کنید و از بخش «کلیدهای API → تولید محتوا» یک کلید بسازید. همان کلید برای همهٔ مدلهای فعال نقطه کار میکند؛ کافی است model_slug را برابر naqqal بگذارید.
قیمت API Naqqal چقدر است؟
این مدل به ازای هر ثانیه قیمتگذاری میشود. قیمت دقیق هر ورودی را قبل از تولید از endpoint برآورد یا از پاسخ GET /v1/media/models بگیرید؛ برآورد کردیتی کسر نمیکند.
برای استفاده از API Naqqal به کارت خارجی یا VPN نیاز دارم؟
نه. پرداخت ریالی و با کردیت کیف پول نقطه انجام میشود و درخواستها به آدرس پایهٔ نقطه ارسال میشوند؛ اشتراک پرو هم لازم نیست.
Naqqal چه ورودیهایی میپذیرد؟
پرامپت اختیاری است و تصویر (عکس رفرنس (شخصیت، محصول یا سبک)، تا ۱۰ فایل) پذیرفته میشود. فایلهای مرجع اول با POST /v1/media/uploads ثبت میشوند و شناسهٔ برگشتی در refs یا ref_slots میآید.
خروجی ویدئو Naqqal را چطور دریافت کنم؟
پاسخ ارسال 202 است. وضعیت را هر پنج ثانیه از GET /v1/media/generations/{id} بخوانید؛ وقتی completed شد، outputs لینک امضاشده و زماندار (حدود یک ساعت) خروجی MP4 را دارد. فایل را در فضای خودتان ذخیره کنید.
مدلهای دیگر ویدئو
Naqqal را از کد صدا بزنید
کلید تولید محتوا بسازید، مجموعهٔ Postman را import کنید و همین نمونه را با کلید خودتان اجرا کنید.