gensta DOCS
api-platform.gensta.ai/v1 Портал разработчика

curl

bash
export GENSTA_API_KEY="your-secret-key"

curl --silent --show-error --fail-with-body \
  -X POST "https://api-platform.gensta.ai/v1/generations" \
  -H "Authorization: Bearer $GENSTA_API_KEY" \
  -H "Idempotency-Key: order-8493-shot-1" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "wan-3.0",
  "mode": "text_to_video",
  "variant": "standard",
  "parameters": {
    "resolution": "720p",
    "duration_seconds": 5,
    "ratio": "16:9",
    "audio": true,
    "prompt_extend": false,
    "watermark": false
  },
  "input": {
    "prompt": "A paper boat crosses a rain puddle, macro lens"
  }
}'

TypeScript

typescript
import { randomUUID } from "node:crypto";

const baseUrl = "https://api-platform.gensta.ai/v1";
const apiKey = process.env.GENSTA_API_KEY;
if (!apiKey) throw new Error("GENSTA_API_KEY is required");

const create = await fetch(baseUrl + "/generations", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + apiKey,
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({
  "model": "wan-3.0",
  "mode": "text_to_video",
  "variant": "standard",
  "parameters": {
    "resolution": "720p",
    "duration_seconds": 5,
    "ratio": "16:9",
    "audio": true,
    "prompt_extend": false,
    "watermark": false
  },
  "input": {
    "prompt": "A paper boat crosses a rain puddle, macro lens"
  }
}),
});
if (!create.ok) throw new Error(await create.text());
const generation = await create.json();

while (true) {
  await new Promise((resolve) => setTimeout(resolve, 10_000));
  const response = await fetch(baseUrl + "/generations/" + generation.id, {
    headers: { Authorization: "Bearer " + apiKey },
  });
  const current = await response.json();
  if (current.status === "succeeded") {
    console.log(current.artifacts[0]?.download_url);
    break;
  }
  if (["failed", "canceled"].includes(current.status)) throw new Error(current.status);
}

Python

python
import json, os, time, uuid
from urllib.request import Request, urlopen

base_url = "https://api-platform.gensta.ai/v1"
api_key = os.environ["GENSTA_API_KEY"]
payload = json.loads("{\n  \"model\": \"wan-3.0\",\n  \"mode\": \"text_to_video\",\n  \"variant\": \"standard\",\n  \"parameters\": {\n    \"resolution\": \"720p\",\n    \"duration_seconds\": 5,\n    \"ratio\": \"16:9\",\n    \"audio\": true,\n    \"prompt_extend\": false,\n    \"watermark\": false\n  },\n  \"input\": {\n    \"prompt\": \"A paper boat crosses a rain puddle, macro lens\"\n  }\n}")
request = Request(
    base_url + "/generations",
    data=json.dumps(payload).encode(),
    method="POST",
    headers={
        "Authorization": "Bearer " + api_key,
        "Content-Type": "application/json",
        "Idempotency-Key": str(uuid.uuid4()),
    },
)
with urlopen(request) as response:
    generation = json.load(response)

while True:
    time.sleep(10)
    request = Request(base_url + "/generations/" + generation["id"], headers={"Authorization": "Bearer " + api_key})
    with urlopen(request) as response:
        current = json.load(response)
    if current["status"] == "succeeded":
        print(current["artifacts"][0]["download_url"])
        break
    if current["status"] in {"failed", "canceled"}:
        raise RuntimeError(current["status"])

В рабочем приложении сохраняйте ID генерации и постепенно увеличивайте интервал между повторными GET после временных ошибок. Не создавайте новую генерацию только из-за локального тайм-аута.