Agnes Video Generation
Generate videos using the Agnes Video V2.0 API.
Prerequisites
- An Agnes AI API key from API Platform
- Base URL:
https://apihub.agnes-ai.com/v1
API Architecture
Agnes Video V2.0 uses an asynchronous two-step workflow:
- Create Video Task — submit the request, get a
video_id - Retrieve Video Result — poll the
video_idto get the final video
API Endpoints
Step 1: Create Video Task
Endpoint: POST https://apihub.agnes-ai.com/v1/videos
Headers:
Authorization: Bearer YOUR_API_KEYContent-Type: application/json
Step 2: Retrieve Video Result
Endpoint: GET https://apihub.agnes-ai.com/agnesapi?video_id=<VIDEO_ID>
Headers:
Authorization: Bearer YOUR_API_KEY
Optional parameter: model_name — specify model explicitly (e.g., agnes-video-v2.0)
Legacy method (compatibility): GET https://apihub.agnes-ai.com/v1/videos/<TASK_ID>
Model Name
agnes-video-v2.0
Request Parameters (Create Task)
| Parameter | Type | Required | Description |
|---|---|---|---|
| model | string | Yes | Use agnes-video-v2.0 |
| prompt | string | Yes | Text description of the video content |
| image | string / array | No | Image URL or image URL array (for image-to-video) |
| mode | string | No | Generation mode: ti2vid (text-to-video) or keyframes |
| height | integer | No | Video height. Default: 768 |
| width | integer | No | Video width. Default: 1152 |
| num_frames | integer | No | Number of frames. Must be ≤ 441, follows 8n + 1 rule |
| frame_rate | number | No | Video FPS. Range: 1–60 |
| num_inference_steps | integer | No | Number of inference steps |
| seed | integer | No | Random seed for reproducible results |
| negative_prompt | string | No | Content to avoid |
| extra_body.image | array | No | Input image URLs for multi-image or keyframe mode |
| extra_body.mode | string | No | Additional mode setting, e.g., keyframes |
Workflows
1. Text-to-Video
bashcurl -X POST https://apihub.agnes-ai.com/v1/videos \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "agnes-video-v2.0", "prompt": "A cinematic shot of a cat walking on the beach at sunset, soft ocean waves, warm golden lighting, realistic motion", "height": 768, "width": 1152, "num_frames": 121, "frame_rate": 24 }'
Response:
json{ "id": "task_YOUR_TASK_ID", "task_id": "task_YOUR_TASK_ID", "video_id": "video_YOUR_VIDEO_ID", "object": "video", "model": "agnes-video-v2.0", "status": "queued", "progress": 0, "created_at": 1780457477, "seconds": "10.0", "size": "1280x768" }
2. Image-to-Video (single image)
bashcurl -X POST https://apihub.agnes-ai.com/v1/videos \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "agnes-video-v2.0", "prompt": "The woman slowly turns around and looks back at the camera, natural facial expression, cinematic camera movement", "image": "https://example.com/image.png", "num_frames": 121, "frame_rate": 24 }'
3. Multi-Image Video
bashcurl -X POST https://apihub.agnes-ai.com/v1/videos \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "agnes-video-v2.0", "prompt": "Create a smooth transformation scene between the two reference images, cinematic lighting, consistent character identity, natural motion", "extra_body": { "image": [ "https://example.com/image1.png", "https://example.com/image2.png" ] }, "num_frames": 121, "frame_rate": 24 }'
4. Keyframe Interpolation
bashcurl -X POST https://apihub.agnes-ai.com/v1/videos \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "agnes-video-v2.0", "prompt": "Generate a smooth cinematic transition between the keyframes, maintaining visual consistency and natural camera movement", "extra_body": { "image": [ "https://example.com/keyframe1.png", "https://example.com/keyframe2.png" ], "mode": "keyframes" }, "num_frames": 121, "frame_rate": 24 }'
Retrieve Video Result
Poll until status is "completed" and progress is 100:
bashcurl --location --request GET \ 'https://apihub.agnes-ai.com/agnesapi?video_id=video_xxxxxx' \ --header 'Authorization: Bearer YOUR_API_KEY'
Completed response:
json{ "id": "task_YOUR_TASK_ID", "video_id": "video_YOUR_VIDEO_ID", "model": "agnes-video-v2.0", "object": "video", "status": "completed", "progress": 100, "seconds": "10.0", "size": "1280x768", "remixed_from_video_id": "https://storage.googleapis.com/agnes-aigc/aigc/videos/2026/06/03/video_xxxxxx.mp4", "error": null }
Final video URL: remixed_from_video_id
Result Fields
| Field | Type | Description |
|---|---|---|
| id | string | Task ID |
| video_id | string | Video ID |
| model | string | Model used |
| object | string | Always "video" |
| status | string | Task status (queued, processing, completed, failed) |
| progress | integer | Progress percentage (0–100) |
| seconds | string | Video duration |
| size | string | Video resolution (e.g., "1280x768") |
| remixed_from_video_id | string | Final video URL (only when completed) |
| error | string / null | Error message if failed |
Important Notes
- Asynchronous workflow: Submit → get
video_id→ poll for result num_framesmust follow8n + 1rule and be ≤ 441frame_raterange: 1–60- Default resolution: 1152×768
- Recommended polling interval: 5–10 seconds
- Timeout recommended: 60s–360s for create request
- Pricing: Currently free during beta
Supported Capabilities
- Text-to-Video generation
- Image-to-Video generation
- Multi-image video composition
- Keyframe interpolation
- Custom resolution, frame rate, and duration
- Reproducible results via seed


