/auth/profileLấy thông tin tài khoản hiện tại
Response (200 OK)
{
"id": 1,
"fullname": "Nguyễn Văn A",
"email": "user@example.com",
"created_at": "2025-01-01T00:00:00Z"
}Tích hợp đầy đủ tính năng tạo video AI, hình ảnh, TTS vào ứng dụng của bạn. API RESTful với JSON — không thư viện đặc biệt, không setup phức tạp.
Base URL
api.autovideo.app/api
Auth
Bearer Token
Format
JSON
Version
v1 stable
https://api.autovideo.app/apiTất cả endpoint yêu cầu API token trong header Authorization. Token được tạo trong giao diện — không cần gọi API đăng nhập.
Authorization: Bearer 1|AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abMọi response đều là JSON. Danh sách dữ liệu được bọc trong key data. Lỗi trả về theo format chuẩn:
{
"message": "Thông tin đăng nhập không đúng",
"errors": {
"email": ["Email is required."]
}
}| 200 OK | Thành công |
| 201 Created | Tạo mới thành công |
| 400 Bad Request | Tham số không hợp lệ |
| 401 Unauthorized | Thiếu hoặc sai Bearer token |
| 404 Not Found | Resource không tồn tại |
| 422 Unprocessable | Validation thất bại |
| 500 Server Error | Lỗi server |
Lưu ý: Async Generation
Các API tạo video / ảnh / TTS trả về ngay lập tức với status: "pending". Dùng POST /task/check để polling trạng thái item cho đến khi status: "completed" hoặc "failed".
/auth/profileLấy thông tin tài khoản hiện tại
Response (200 OK)
{
"id": 1,
"fullname": "Nguyễn Văn A",
"email": "user@example.com",
"created_at": "2025-01-01T00:00:00Z"
}/task/listDanh sách task của user (phân trang)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
page | integer | ○ | Trang hiện tại (default: 1) |
Response (200 OK)
{
"data": [
{ "task_id": 100, "status": "completed", "item_count": 5, "created_at": "2025-01-01T00:00:00Z" }
],
"meta": { "current_page": 1, "total": 20 }
}/task/itemsDanh sách tất cả item của user (phân trang infinite scroll)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
page | integer | ○ | Trang hiện tại |
/task/items/{itemId}Chi tiết một item theo ID
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
itemId | integer | ● | ID của item (path parameter) |
Response (200 OK)
{
"item_id": 1,
"task_id": 100,
"status": "completed",
"prompt_text": "A sunset over the ocean",
"model": "VEO_3_GENERATE_001",
"aspect_ratio": "ASPECT_RATIO_16_9",
"output_url": "https://cdn.autovideo.app/...",
"thumbnail_url": "https://cdn.autovideo.app/..."
}/task/{taskId}/detailChi tiết đầy đủ của một task kèm toàn bộ items
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
taskId | integer | ● | ID của task (path parameter) |
/task/checkKiểm tra trạng thái nhiều video/image item cùng lúc (polling)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
item_ids | integer[] | ● | Mảng các item_id cần kiểm tra |
Request Body (JSON)
{ "item_ids": [1, 2, 3] }Response (200 OK)
{
"data": [
{ "item_id": 1, "status": "completed", "output_url": "https://..." },
{ "item_id": 2, "status": "processing" },
{ "item_id": 3, "status": "failed", "error_message": "..." }
]
}/task/check-ttsKiểm tra trạng thái các TTS item (polling riêng cho audio)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
item_ids | integer[] | ● | Mảng item_id TTS cần kiểm tra |
Request Body (JSON)
{ "item_ids": [30, 31] }/task/deleteXóa task hoặc item (phải truyền một trong hai)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
task_ids | integer[] | ○ | Mảng task_id cần xóa (xóa toàn bộ task + items) |
item_ids | integer[] | ○ | Mảng item_id cần xóa (task bị xóa nếu không còn item nào) |
Request Body (JSON)
{ "task_ids": [100, 101] }Response (200 OK)
{ "message": "Tasks deleted successfully" }/ai/google/video/generateTạo video AI từ văn bản hoặc ảnh (batch, tối đa 50 item)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
generationMode | string | ● | `TEXT_TO_VIDEO` | `IMAGE_TO_VIDEO` | `REFERENCE_TO_VIDEO` |
recaptchaToken | string | ● | Token reCAPTCHA |
projectId | string | ○ | Google Cloud Project ID (ghi đè project mặc định) |
parentId | integer | ○ | Item ID cha nếu thêm vào task đang có |
requests | array | ● | Mảng yêu cầu tạo video (1 – 50) |
requests[].prompt | string | ● | Mô tả nội dung video |
requests[].model | string | ● | Model key: `Veo 3.1 - Lite`, `Veo 3.1 - Lite [Lower Priority]`, `Veo 3.1 - Fast`, `Veo 3.1 - Fast [Lower Priority]`, `Veo 3.1 - Quality`, `Veo 2 - Fast`, `Veo 2 - Quality`, `GROK_AURORA` |
requests[].aspectRatio | string | ● | `VIDEO_ASPECT_RATIO_LANDSCAPE` | `VIDEO_ASPECT_RATIO_PORTRAIT` |
requests[].attachmentIds | integer[] | ○ | Attachment ID ảnh đầu vào (cho image-to-video / reference) |
requests[].duration | integer | ○ | Độ dài video: `4` | `6` | `8` (giây) |
requests[].seed | integer | ○ | Seed (1 – 99999) để tái tạo kết quả |
requests[].voice | object | ○ | Giọng đọc cho video: `{ mediaId: string }` |
requests[].promptParts | array | ○ | Prompt có tham chiếu ảnh: `[{ type: 'text'|'reference', text?, attachmentId?, label? }]` |
Request Body (JSON)
{
"generationMode": "TEXT_TO_VIDEO",
"recaptchaToken": "03AFcWeA...",
"requests": [
{
"prompt": "A cinematic shot of waves crashing on shore at golden hour",
"model": "Veo 3.1 - Fast",
"aspectRatio": "VIDEO_ASPECT_RATIO_LANDSCAPE",
"duration": 8
},
{
"prompt": "Cherry blossoms falling in slow motion",
"model": "Veo 3.1 - Fast",
"aspectRatio": "VIDEO_ASPECT_RATIO_PORTRAIT",
"seed": 12345
}
]
}Response (200 OK)
{
"data": [
{
"item_id": 10,
"task_id": 100,
"status": "pending",
"prompt_text": "A cinematic shot of waves...",
"model": "Veo 3.1 - Fast",
"aspect_ratio": "VIDEO_ASPECT_RATIO_LANDSCAPE"
}
]
}/ai/google/video/extendKéo dài video hiện có từ một frame xác định
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
accountId | integer | ● | ID tài khoản AI dùng để xử lý |
itemId | integer | ● | Item ID của video nguồn (phải thuộc user) |
prompt | string | ● | Mô tả đoạn video tiếp theo |
startFrameIndex | integer | ● | Frame bắt đầu kéo dài (≥ 0) |
endFrameIndex | integer | ● | Frame kết thúc (≥ startFrameIndex) |
videoModelKey | string | ● | Model key sử dụng để extend |
aspectRatio | string | ● | Tỉ lệ khung hình (phải khớp video gốc) |
seed | integer | ○ | Seed ngẫu nhiên (≥ 1) |
recaptchaToken | string | ○ | Token reCAPTCHA |
Request Body (JSON)
{
"accountId": 5,
"itemId": 10,
"prompt": "The camera slowly pans right revealing mountains",
"startFrameIndex": 0,
"endFrameIndex": 24,
"videoModelKey": "Veo 3.1 - Fast",
"aspectRatio": "VIDEO_ASPECT_RATIO_LANDSCAPE"
}Response (200 OK)
{ "item_id": 11, "status": "pending", "generation_mode": "EXTEND_VIDEO" }/ai/google/video/jumpTạo đoạn chuyển tiếp (jump cut) từ một frame của video
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
itemId | integer | ● | Item ID video nguồn (phải thuộc user) |
prompt | string | ● | Mô tả cảnh mới sau jump |
startFrameIndex | integer | ● | Frame bắt đầu jump (≥ 0) |
videoModelKey | string | ● | Model key |
aspectRatio | string | ● | Tỉ lệ khung hình |
seed | integer | ○ | Seed ngẫu nhiên (≥ 1) |
recaptchaToken | string | ○ | Token reCAPTCHA |
Request Body (JSON)
{
"itemId": 10,
"prompt": "A close-up of a blooming flower",
"startFrameIndex": 48,
"videoModelKey": "Veo 3.1 - Fast",
"aspectRatio": "VIDEO_ASPECT_RATIO_LANDSCAPE"
}Response (200 OK)
{ "item_id": 12, "status": "pending", "generation_mode": "JUMP_VIDEO" }/ai/google/video/concatenationGhép nhiều video thành một (≥ 2 clip)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
inputVideos | array | ● | Mảng ≥ 2 video cần ghép (theo thứ tự) |
inputVideos[].itemId | integer | ● | Item ID video (status phải là completed) |
inputVideos[].lengthNanos | integer | ● | Độ dài clip tính bằng nanoseconds |
inputVideos[].startTimeOffset | string | ● | Thời điểm bắt đầu cắt, e.g. `0s` |
inputVideos[].endTimeOffset | string | ● | Thời điểm kết thúc cắt, e.g. `8s` |
Request Body (JSON)
{
"inputVideos": [
{ "itemId": 10, "lengthNanos": 8000000000, "startTimeOffset": "0s", "endTimeOffset": "8s" },
{ "itemId": 11, "lengthNanos": 6000000000, "startTimeOffset": "0s", "endTimeOffset": "6s" }
]
}Response (200 OK)
{ "item_id": 15, "status": "pending", "generation_mode": "CONCATENATION" }/ai/google/task/retryThử lại các item bị lỗi (failed) hoặc đã hoàn thành (completed)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
requests | array | ● | Mảng item cần retry |
requests[].itemId | integer | ● | Item ID cần retry |
requests[].model | string | ● | Model key sử dụng lại (có thể đổi model) |
recaptchaToken | string | ○ | Token reCAPTCHA |
Request Body (JSON)
{
"requests": [
{ "itemId": 10, "model": "Veo 3.1 - Fast" },
{ "itemId": 11, "model": "GROK_AURORA" }
]
}Response (200 OK)
{
"data": [
{ "item_id": 10, "status": "pending", "model": "Veo 3.1 - Fast" },
{ "item_id": 11, "status": "pending", "model": "GROK_AURORA" }
]
}/ai/google/image/generateTạo hình ảnh AI từ văn bản hoặc ảnh tham chiếu (batch, tối đa 50)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
recaptchaToken | string | ● | Token reCAPTCHA |
parentId | integer | ○ | Item ID cha nếu thêm vào task đang có |
requests | array | ● | Mảng yêu cầu (1 – 50) |
requests[].prompt | string | ● | Mô tả ảnh cần tạo |
requests[].model | string | ● | `GEM_PIX_2` | `NARWHAL` | `GEM_PIX` | `R2I` | `GROK_IMAGE` |
requests[].aspectRatio | string | ● | `IMAGE_ASPECT_RATIO_PORTRAIT` | `IMAGE_ASPECT_RATIO_LANDSCAPE` |
requests[].attachmentIds | integer[] | ○ | Ảnh tham chiếu phong cách / nội dung |
requests[].seed | integer | ○ | Seed (1 – 99999) để tái tạo kết quả |
Request Body (JSON)
{
"recaptchaToken": "03AFcWeA...",
"requests": [
{
"prompt": "A photorealistic portrait of a woman in traditional Vietnamese áo dài",
"model": "GEM_PIX_2",
"aspectRatio": "IMAGE_ASPECT_RATIO_PORTRAIT",
"seed": 42
}
]
}Response (200 OK)
{
"data": [
{ "item_id": 20, "task_id": 200, "status": "pending", "prompt_text": "A photorealistic portrait..." }
]
}/ai/google/image/editChỉnh sửa ảnh hiện có bằng AI (image-to-image)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
accountId | integer | ● | ID tài khoản AI dùng để xử lý |
itemId | integer | ● | Item ID ảnh nguồn (phải thuộc user) |
prompt | string | ● | Mô tả chỉnh sửa cần thực hiện |
model | string | ● | Model key |
aspectRatio | string | ● | `IMAGE_ASPECT_RATIO_PORTRAIT` | `IMAGE_ASPECT_RATIO_LANDSCAPE` |
attachmentIds | integer[] | ○ | Ảnh tham chiếu bổ sung |
seed | integer | ○ | Seed ngẫu nhiên (≥ 1) |
recaptchaToken | string | ○ | Token reCAPTCHA |
Request Body (JSON)
{
"accountId": 5,
"itemId": 20,
"prompt": "Change the background to a cherry blossom garden",
"model": "GEM_PIX_2",
"aspectRatio": "IMAGE_ASPECT_RATIO_PORTRAIT"
}Response (200 OK)
{ "item_id": 21, "status": "pending", "generation_mode": "EDIT_IMAGE" }/ai/google/downloadKích hoạt upscale / tải xuống hàng loạt (video và ảnh)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
items | array | ● | Mảng item cần download (1 – 50) |
items[].item_id | integer | ● | Item ID cần tải |
items[].resolution | string | ● | Video: `VIDEO_RESOLUTION_ORIGINAL` | `VIDEO_RESOLUTION_1080P` | `VIDEO_RESOLUTION_4K` — Ảnh: `IMAGE_RESOLUTION_ORIGINAL` | `IMAGE_RESOLUTION_2K` | `IMAGE_RESOLUTION_4K` |
Request Body (JSON)
{
"items": [
{ "item_id": 10, "resolution": "VIDEO_RESOLUTION_4K" },
{ "item_id": 20, "resolution": "IMAGE_RESOLUTION_2K" }
]
}Response (200 OK)
{ "message": "Download jobs dispatched", "count": 2 }/speech/voicesDanh sách giọng đọc (nhiều bộ lọc)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
provider | string | ○ | Lọc theo provider, e.g. `ELEVENLABS` |
languages | string[] | ○ | Mã ngôn ngữ: `vi`, `en`, `ja`… |
genders | string[] | ○ | `male` | `female` |
categories | string[] | ○ | Loại giọng, e.g. `narration`, `conversational` |
ages | string[] | ○ | Nhóm tuổi: `young` | `middle_aged` | `old` |
use_cases | string[] | ○ | Use case: `news` | `audiobook` | `social_media`… |
quality | string | ○ | `hq` | `any` |
search | string | ○ | Tìm kiếm theo tên giọng |
page | integer | ○ | Trang (default: 1) |
per_page | integer | ○ | Số kết quả / trang (tối đa 100) |
Response (200 OK)
{
"data": [
{
"voice_id": "21m00Tcm4TlvDq8ikWAM",
"name": "Rachel",
"provider": "ELEVENLABS",
"gender": "female",
"language": "en",
"preview_url": "https://..."
}
],
"meta": { "current_page": 1, "total": 350 }
}/speech/text-to-speechChuyển văn bản thành giọng nói (hỗ trợ đa người nói)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
model | string | ● | `11LABS_V2` | `11LABS_V2.5` | `11LABS_V3` |
voiceSettings | object | ● | Cài đặt giọng toàn cục |
voiceSettings.voiceStyle | string | ● | `Expressive` | `Neutral` | `Consistent` |
voiceSettings.speed | number | ● | Tốc độ đọc: 0.25 – 4.0 |
voiceSettings.similarity | integer | ● | Độ tương đồng giọng: 0 – 100 |
segments | array | ● | Mảng đoạn thoại (≥ 1) |
segments[].voiceId | string | ● | Voice ID từ `/speech/voices` |
segments[].speakerName | string | ● | Tên người nói (tối đa 100 ký tự) |
segments[].text | string | ● | Nội dung văn bản (tối đa 5000 ký tự) |
Request Body (JSON)
{
"model": "11LABS_V2.5",
"voiceSettings": {
"voiceStyle": "Expressive",
"speed": 1.0,
"similarity": 75
},
"segments": [
{
"voiceId": "21m00Tcm4TlvDq8ikWAM",
"speakerName": "Host",
"text": "Xin chào, tôi là trợ lý AI của AutoVideo."
},
{
"voiceId": "AZnzlk1XvdvUeBnXmlld",
"speakerName": "Guest",
"text": "Chào bạn! Hôm nay chúng ta sẽ tạo video gì?"
}
]
}Response (200 OK)
{
"task_id": 300,
"status": "pending",
"items": [
{ "item_id": 30, "status": "pending", "prompt_text": "Xin chào..." },
{ "item_id": 31, "status": "pending", "prompt_text": "Chào bạn!..." }
]
}/attachment/presign-uploadLấy presigned URL để upload trực tiếp lên R2/S3 (khuyến nghị cho file lớn)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
filename | string | ● | Tên file gốc |
mimeType | string | ● | `image/jpeg` | `image/png` | `image/webp` | `video/mp4` | `audio/mpeg`… |
Request Body (JSON)
{ "filename": "photo.jpg", "mimeType": "image/jpeg" }Response (200 OK)
{
"upload_url": "https://storage.r2.autovideo.app/?X-Amz-Signature=...",
"path": "attachments/uuid/photo.jpg"
}/attachment/confirm-uploadXác nhận hoàn tất upload sau khi PUT file lên presigned URL
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
path | string | ● | Path trả về từ presign response |
filename | string | ● | Tên file gốc |
filesize | integer | ● | Kích thước file (bytes, tối đa 20 MB) |
file_hash | string | ● | MD5 / SHA256 hash của file |
mime_type | string | ● | MIME type |
width | integer | ○ | Chiều rộng pixel (ảnh / video) |
height | integer | ○ | Chiều cao pixel |
Request Body (JSON)
{
"path": "attachments/uuid/photo.jpg",
"filename": "photo.jpg",
"filesize": 512000,
"file_hash": "d41d8cd98f00b204e9800998ecf8427e",
"mime_type": "image/jpeg",
"width": 1920,
"height": 1080
}Response (200 OK)
{ "attachment_id": 501, "url": "https://cdn.autovideo.app/..." }/accountDanh sách tài khoản AI của user (Google, Grok, ChatGPT…)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
page | integer | ○ | Trang |
per_page | integer | ○ | Số lượng / trang (max 100) |
Response (200 OK)
{
"data": [
{ "account_id": 5, "provider": "google", "name": "Main Account", "project_id": "my-gcp-project", "is_primary": true }
]
}/account/createThêm tài khoản AI mới (Google / Grok / ChatGPT)
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
provider | string | ● | `google` | `grok` | `chatgpt` |
name | string | ● | Tên hiển thị (max 255) |
cookie | string | ○ | Session cookie (bắt buộc với Google và Grok, không cần với ChatGPT) |
access_token | string | ○ | Access token (dùng thay cookie cho ChatGPT) |
project_id | string | ○ | Google Cloud Project ID (bắt buộc với provider `google`) |
is_primary | boolean | ○ | Đặt làm tài khoản chính |
is_shared | boolean | ○ | Cho phép dùng chung tài khoản |
Request Body (JSON)
{
"provider": "google",
"name": "Account Production",
"cookie": "__Secure-1PSID=...",
"project_id": "my-gcp-project-123",
"is_primary": true
}Response (200 OK)
{ "account_id": 6, "provider": "google", "name": "Account Production", "is_primary": true }/account/{accountId}/detailChi tiết tài khoản AI
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
accountId | integer | ● | ID tài khoản (path) |
/account/{accountId}/saveCập nhật thông tin tài khoản AI
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name | string | ● | Tên mới |
cookie | string | ○ | Cookie mới (bắt buộc với Google / Grok) |
project_id | string | ○ | Google Cloud Project ID (bắt buộc với Google) |
is_primary | boolean | ○ | Đặt là primary |
is_shared | boolean | ○ | Cho phép dùng chung |
proxy | string | ○ | Proxy string, e.g. `host:port:user:pass` (tối đa 500 ký tự) |
Request Body (JSON)
{
"name": "Account Updated",
"cookie": "__Secure-1PSID=...",
"project_id": "gcp-123",
"proxy": "14.181.150.174:13332:user:pass"
}/account/{accountId}/deleteXóa tài khoản AI
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
accountId | integer | ● | ID tài khoản (path) |
Response (200 OK)
{ "message": "Account deleted successfully" }/ai/google/account/projectsLấy danh sách Google Cloud Projects từ session cookie
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
cookie | string | ● | Google session cookie để xác minh và liệt kê projects |
Request Body (JSON)
{ "cookie": "__Secure-1PSID=..." }Response (200 OK)
{
"projects": [
{ "project_id": "my-gcp-project-123", "name": "My Project" }
]
}/ai/google/item/sort-orderCập nhật thứ tự sắp xếp các item
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
item_ids | integer[] | ● | Mảng item_id theo thứ tự mới (vị trí index = sort_order mới) |
Request Body (JSON)
{ "item_ids": [3, 1, 2, 5, 4] }Response (200 OK)
{ "message": "Sort order updated" }/ai/google/item/favoriteĐánh dấu / bỏ đánh dấu yêu thích một item
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
item_id | integer | ● | ID của item |
is_favorite | boolean | ● | `true` để thêm, `false` để bỏ |
Request Body (JSON)
{ "item_id": 10, "is_favorite": true }Response (200 OK)
{ "message": "Updated", "item_id": 10, "is_favorite": true }/ai/google/item/favorite/batchĐánh dấu / bỏ đánh dấu yêu thích hàng loạt item
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
item_ids | integer[] | ● | Mảng item_id cần cập nhật |
is_favorite | boolean | ● | `true` để thêm, `false` để bỏ |
Request Body (JSON)
{ "item_ids": [10, 11, 12], "is_favorite": true }Response (200 OK)
{ "message": "Updated", "count": 3 }Đội ngũ kỹ thuật của chúng tôi sẵn sàng hỗ trợ bạn xây dựng pipeline tạo video AI tự động.