Endpoints
рд╡реАрдбрд┐рдпреЛ (рдПрд╕рд┐рдВрдХ рдЬреЙрдм)
POST /videos рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдЬреЙрдм рдмрдирд╛рдПрдБ, GET /videos/{id} рд╕реЗ рд╕реНрдерд┐рддрд┐ рдкреЛрд▓ рдХрд░реЗрдВ рдФрд░ рдирддреАрдЬрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдкреИрд░рд╛рдореАрдЯрд░, рдмрд┐рд▓рд┐рдВрдЧ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдпрд╣рд╛рдБ рд╣реИрдВред
playground рдореЗрдВ рдЖрдЬрд╝рдорд╛рдПрдВVeo 3.1, Sora 2 Pro, Kling, Seedance, Runway, Wan, Hailuo рдФрд░ рдЕрдиреНрдп рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдПрдБред рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдореЗрдВ рджрд╕рд┐рдпреЛрдВ рд╕реЗрдХрдВрдб рд╕реЗ рдХрдИ рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЬреЙрдм рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ: рдЖрдк рдЬреЙрдм рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдкреЛрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдирддреАрдЬрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
| рдЪрд░рдг | рдЕрдиреБрд░реЛрдз |
|---|---|
| 1. рдмрдирд╛рдПрдБ | POST /api/v1/videos |
| 2. рдкреЛрд▓ рдХрд░реЗрдВ | GET /api/v1/videos/{id} |
| 3. рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ | GET /api/v1/videos/{id}/content?index=0 |
рдЬреЙрдм рдмрдирд╛рдПрдБ
POST https://api14.com/api/v1/videos
| рдкреИрд░рд╛рдореАрдЯрд░ | рдкреНрд░рдХрд╛рд░ | рдЖрд╡рд╢реНрдпрдХ | рд╡рд┐рд╡рд░рдг |
|---|---|---|---|
model | string | рд╣рд╛рдБ | рд╡реАрдбрд┐рдпреЛ рдореЙрдбрд▓ id, рдЬреИрд╕реЗ google/veo-3.1-fastред |
prompt | string | рд╣рд╛рдБ | рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред |
duration | number | рдирд╣реАрдВ | рд╕реЗрдХрдВрдб рдореЗрдВ рд▓рдВрдмрд╛рдИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЙрдбрд▓ рдХреА рдкрд╣рд▓реА рд╕рдорд░реНрдерд┐рдд рдЕрд╡рдзрд┐ред |
resolution | string | рдирд╣реАрдВ | рдЬреИрд╕реЗ 720p, 1080pред рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред |
aspect_ratio | string | рдирд╣реАрдВ | рдЬреИрд╕реЗ 16:9, 9:16ред |
generate_audio | boolean | рдирд╣реАрдВ | рдЬрд╣рд╛рдБ рд╕рдорд░реНрдерд┐рдд рд╣реЛ рд╕рд╛рдЙрдВрдбрдЯреНрд░реИрдХ рдмрдирд╛рдПрдБ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ true)ред |
image | string | рдирд╣реАрдВ | рдкрд╣рд▓рд╛ рдлрд╝реНрд░реЗрдо, URL рдпрд╛ data: URI рдХреЗ рд░реВрдк рдореЗрдВ (image-to-video)ред |
рд╣рд░ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдЕрд╡рдзрд┐, рд░реЗрдЬрд╝реЛрд▓реНрдпреВрд╢рди рдФрд░ рдЖрд╕реНрдкреЗрдХреНрдЯ рд░реЗрд╢рд┐рдпреЛ: GET /videos/models (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ) рдпрд╛ рдореЙрдбрд▓ рдкреЗрдЬред
рдмреИрд▓реЗрдВрд╕ рдЬрд╛рдБрдЪ
рдЬреЙрдм рд╕рдмрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЧреЗрдЯрд╡реЗ рдЙрд╕рдХреА рдХреАрдордд рдХрд╛ рдЕрдиреБрдорд╛рди рдЕрд╡рдзрд┐ ├Ч рдЕрдиреБрд░реЛрдзрд┐рдд рд░реЗрдЬрд╝реЛрд▓реНрдпреВрд╢рди (рдФрд░ рдСрдбрд┐рдпреЛ рд╡рд┐рдХрд▓реНрдк) рдХреА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреАрдордд рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдмреИрд▓реЗрдВрд╕ рдЕрдиреБрдорд╛рди рд╕реЗ рдХрдо рд╣реИ рддреЛ рдЕрдиреБрд░реЛрдз 402 insufficient_balance рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
{
"id": "vid_01JABCDEF",
"status": "queued",
"polling_url": "/api/v1/videos/vid_01JABCDEF"
}
рдЬреЙрдм рдкреЛрд▓ рдХрд░реЗрдВ
GET https://api14.com/api/v1/videos/{id}
{
"id": "vid_01JABCDEF",
"status": "completed",
"generation_id": "gen-1791100000-abc",
"unsigned_urls": ["/api/v1/videos/vid_01JABCDEF/content?index=0"],
"usage": { "cost": 1.2 }
}
status | рдЕрд░реНрде |
|---|---|
queued | рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВред |
in_progress | рд░реЗрдВрдбрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред |
completed | рдкреВрд░рд╛; unsigned_urls рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред |
failed, cancelled, expired | рдмрд┐рдирд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рдорд╛рдкреНрдд; error рджреЗрдЦреЗрдВред рдЖрдкрд╕реЗ рд╢реБрд▓реНрдХ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ред |
рд╣рд░ 5-10 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреЛрд▓ рдХрд░реЗрдВред рдЬреЙрдм рдХреЗрд╡рд▓ рдЙрд╕реЗ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЦрд╛рддрд╛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ; рдЕрдиреНрдп id 404 not_found рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
рдирддреАрдЬрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
GET https://api14.com/api/v1/videos/{id}/content?index=0
рдЖрдкрдХреА API рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рдмрд╛рдЗрдЯ (рдЖрдорддреМрд░ рдкрд░ video/mp4) рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ URL рд╣рдореЗрд╢рд╛ рдЧреЗрдЯрд╡реЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдХрднреА рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреА рдУрд░ рдирд╣реАрдВред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЪреБрдХреА рд╣реИ рддреЛ content_unavailable рдорд┐рд▓рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
// Video generation is asynchronous: submit, then poll until completed.
let job = await client.post("/videos", { body: {
"model": "google/veo-3.1-fast",
"prompt": "A drone shot over turquoise ocean waves at sunrise",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9"
} });
while (!["completed", "failed"].includes(job.status)) {
await new Promise((r) => setTimeout(r, 5000));
job = await client.get(`/videos/${job.id}`);
}
console.log(job.status, job.unsigned_urls);
рдмрд┐рд▓рд┐рдВрдЧ
рдЖрдкрд╕реЗ рдПрдХ рдмрд╛рд░ рд╢реБрд▓реНрдХ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЬреЙрдм completed рдкрд░ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдЧрдд рдкрд░ред рд╡рд┐рдлрд▓, рд░рджреНрдж рдФрд░ рд╕рдорд╛рдкреНрдд рдЬреЙрдм рдореБрдлрд╝реНрдд рд╣реИрдВред рдЬреЙрдм рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рднреА рдкреВрд░реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрд┐рд╕ рдЬреЙрдм рдХреЛ рдЖрдкрдиреЗ рдХрднреА рдкреЛрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╡рд╣ рднреА рд╕реЗрдЯрд▓ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИред
рддреНрд░реБрдЯрд┐рдпрд╛рдБ
| рд╕реНрдЯреЗрдЯрд╕ | рдХреЛрдб | рдХрдм |
|---|---|---|
| 402 | insufficient_balance | рдмреИрд▓реЗрдВрд╕ рдЬреЙрдм рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рдХреАрдордд рд╕реЗ рдХрдо рд╣реИред |
| 403 | plan_required | рдЖрдкрдХреЗ рдкреНрд▓рд╛рди рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред |
| 404 | model_not_found / not_found | рдЕрдЬреНрдЮрд╛рдд рдореЙрдбрд▓, рдпрд╛ рдЬреЙрдм id рдЖрдкрдХрд╛ рдирд╣реАрдВред |
| 502 | upstream_unavailable | рд╕реНрдерд┐рддрд┐ рдкрдврд╝реА рдирд╣реАрдВ рдЬрд╛ рд╕рдХреА; рд░реАрдЯреНрд░рд╛рдИ рдХрд░реЗрдВред |
рджреЗрдЦреЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдБред