REST API

API Documentation

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

Bắt đầu

Base URL

https://api.autovideo.app/api

Xác thực

Tấ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.

  1. 1Đăng nhập vào app.autovideo.app
  2. 2Nhấn vào avatar góc trái → chọn tab API Tokens
  3. 3Nhấn Tạo API token mới, đặt tên token, nhấn xác nhận
  4. 4Sao chép token ngay — token chỉ hiển thị một lần
Authorization Header
Authorization: Bearer 1|AbCdEfGhIjKlMnOpQrStUvWxYz1234567890ab

Định dạng Response

Mọ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:

Lỗi (4xx / 5xx)
{
  "message": "Thông tin đăng nhập không đúng",
  "errors": {
    "email": ["Email is required."]
  }
}

HTTP Status Codes

200 OKThành công
201 CreatedTạo mới thành công
400 Bad RequestTham số không hợp lệ
401 UnauthorizedThiếu hoặc sai Bearer token
404 Not FoundResource không tồn tại
422 UnprocessableValidation thất bại
500 Server ErrorLỗ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".

Xác thực

1 endpoints
GET/auth/profile
Bearer Token

Lấ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

7 endpoints
GET/task/list
Bearer Token

Danh sách task của user (phân trang)

Tham số

Tham sốKiểuBắt buộcMô tả
pageinteger○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 }
}
GET/task/items
Bearer Token

Danh sách tất cả item của user (phân trang infinite scroll)

Tham số

Tham sốKiểuBắt buộcMô tả
pageinteger○Trang hiện tại
GET/task/items/{itemId}
Bearer Token

Chi tiết một item theo ID

Tham số

Tham sốKiểuBắt buộcMô tả
itemIdinteger●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/..."
}
GET/task/{taskId}/detail
Bearer Token

Chi tiết đầy đủ của một task kèm toàn bộ items

Tham số

Tham sốKiểuBắt buộcMô tả
taskIdinteger●ID của task (path parameter)
POST/task/check
Bearer Token

Kiểm tra trạng thái nhiều video/image item cùng lúc (polling)

Tham số

Tham sốKiểuBắt buộcMô tả
item_idsinteger[]●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": "..." }
  ]
}
POST/task/check-tts
Bearer Token

Kiểm tra trạng thái các TTS item (polling riêng cho audio)

Tham số

Tham sốKiểuBắt buộcMô tả
item_idsinteger[]●Mảng item_id TTS cần kiểm tra

Request Body (JSON)

{ "item_ids": [30, 31] }
POST/task/delete
Bearer Token

Xóa task hoặc item (phải truyền một trong hai)

Tham số

Tham sốKiểuBắt buộcMô tả
task_idsinteger[]○Mảng task_id cần xóa (xóa toàn bộ task + items)
item_idsinteger[]○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" }

Video AI

5 endpoints
POST/ai/google/video/generate
Bearer Token

Tạo video AI từ văn bản hoặc ảnh (batch, tối đa 50 item)

Tham số

Tham sốKiểuBắt buộcMô tả
generationModestring●`TEXT_TO_VIDEO` | `IMAGE_TO_VIDEO` | `REFERENCE_TO_VIDEO`
projectIdstring○Google Cloud Project ID (ghi đè project mặc định)
parentIdinteger○Item ID cha nếu thêm vào task đang có
requestsarray●Mảng yêu cầu tạo video (1 – 50)
requests[].promptstring●Mô tả nội dung video
requests[].modelstring●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[].aspectRatiostring●`VIDEO_ASPECT_RATIO_LANDSCAPE` | `VIDEO_ASPECT_RATIO_PORTRAIT`
requests[].attachmentIdsinteger[]○Attachment ID ảnh đầu vào (cho image-to-video / reference)
requests[].durationinteger○Độ dài video: `4` | `6` | `8` (giây)
requests[].seedinteger○Seed (1 – 99999) để tái tạo kết quả
requests[].voiceobject○Giọng đọc cho video: `{ mediaId: string }`
requests[].promptPartsarray○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"
    }
  ]
}
POST/ai/google/video/extend
Bearer Token

Kéo dài video hiện có từ một frame xác định

Tham số

Tham sốKiểuBắt buộcMô tả
accountIdinteger●ID tài khoản AI dùng để xử lý
itemIdinteger●Item ID của video nguồn (phải thuộc user)
promptstring●Mô tả đoạn video tiếp theo
startFrameIndexinteger●Frame bắt đầu kéo dài (≥ 0)
endFrameIndexinteger●Frame kết thúc (≥ startFrameIndex)
videoModelKeystring●Model key sử dụng để extend
aspectRatiostring●Tỉ lệ khung hình (phải khớp video gốc)
seedinteger○Seed ngẫu nhiên (≥ 1)
recaptchaTokenstring○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" }
POST/ai/google/video/jump
Bearer Token

Tạo đoạn chuyển tiếp (jump cut) từ một frame của video

Tham số

Tham sốKiểuBắt buộcMô tả
itemIdinteger●Item ID video nguồn (phải thuộc user)
promptstring●Mô tả cảnh mới sau jump
startFrameIndexinteger●Frame bắt đầu jump (≥ 0)
videoModelKeystring●Model key
aspectRatiostring●Tỉ lệ khung hình
seedinteger○Seed ngẫu nhiên (≥ 1)
recaptchaTokenstring○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" }
POST/ai/google/video/concatenation
Bearer Token

Ghép nhiều video thành một (≥ 2 clip)

Tham số

Tham sốKiểuBắt buộcMô tả
inputVideosarray●Mảng ≥ 2 video cần ghép (theo thứ tự)
inputVideos[].itemIdinteger●Item ID video (status phải là completed)
inputVideos[].lengthNanosinteger●Độ dài clip tính bằng nanoseconds
inputVideos[].startTimeOffsetstring●Thời điểm bắt đầu cắt, e.g. `0s`
inputVideos[].endTimeOffsetstring●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" }
POST/ai/google/task/retry
Bearer Token

Thử lại các item bị lỗi (failed) hoặc đã hoàn thành (completed)

Tham số

Tham sốKiểuBắt buộcMô tả
requestsarray●Mảng item cần retry
requests[].itemIdinteger●Item ID cần retry
requests[].modelstring●Model key sử dụng lại (có thể đổi model)
recaptchaTokenstring○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" }
  ]
}

Image AI

3 endpoints
POST/ai/google/image/generate
Bearer Token

Tạ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ểuBắt buộcMô tả
parentIdinteger○Item ID cha nếu thêm vào task đang có
requestsarray●Mảng yêu cầu (1 – 50)
requests[].promptstring●Mô tả ảnh cần tạo
requests[].modelstring●`GEM_PIX_2` | `NARWHAL` | `GEM_PIX` | `R2I` | `GROK_IMAGE`
requests[].aspectRatiostring●`IMAGE_ASPECT_RATIO_PORTRAIT` | `IMAGE_ASPECT_RATIO_LANDSCAPE`
requests[].attachmentIdsinteger[]○Ảnh tham chiếu phong cách / nội dung
requests[].seedinteger○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..." }
  ]
}
POST/ai/google/image/edit
Bearer Token

Chỉnh sửa ảnh hiện có bằng AI (image-to-image)

Tham số

Tham sốKiểuBắt buộcMô tả
accountIdinteger●ID tài khoản AI dùng để xử lý
itemIdinteger●Item ID ảnh nguồn (phải thuộc user)
promptstring●Mô tả chỉnh sửa cần thực hiện
modelstring●Model key
aspectRatiostring●`IMAGE_ASPECT_RATIO_PORTRAIT` | `IMAGE_ASPECT_RATIO_LANDSCAPE`
attachmentIdsinteger[]○Ảnh tham chiếu bổ sung
seedinteger○Seed ngẫu nhiên (≥ 1)
recaptchaTokenstring○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" }
POST/ai/google/download
Bearer Token

Kích hoạt upscale / tải xuống hàng loạt (video và ảnh)

Tham số

Tham sốKiểuBắt buộcMô tả
itemsarray●Mảng item cần download (1 – 50)
items[].item_idinteger●Item ID cần tải
items[].resolutionstring●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 }

Audio & TTS

2 endpoints
GET/speech/voices
Bearer Token

Danh sách giọng đọc (nhiều bộ lọc)

Tham số

Tham sốKiểuBắt buộcMô tả
providerstring○Lọc theo provider, e.g. `ELEVENLABS`
languagesstring[]○Mã ngôn ngữ: `vi`, `en`, `ja`…
gendersstring[]○`male` | `female`
categoriesstring[]○Loại giọng, e.g. `narration`, `conversational`
agesstring[]○Nhóm tuổi: `young` | `middle_aged` | `old`
use_casesstring[]○Use case: `news` | `audiobook` | `social_media`…
accentstring○Lọc theo giọng vùng / ngữ âm, e.g. `american`, `british`
qualitystring○`hq` | `any`
notice_periodinteger○Lọc theo thời gian thông báo (ngày): `0` | `30` | `90` | `365` | `730`
custom_ratesstring○Giọng có custom rate: `include` | `exclude`
live_moderationstring○Giọng hỗ trợ kiểm duyệt trực tiếp: `include` | `exclude`
searchstring○Tìm kiếm theo tên giọng
pageinteger○Trang (default: 1)
per_pageinteger○Số kết quả / trang (tối đa 100)

Response (200 OK)

{
  "data": [
    {
      "voice_id": 1,
      "provider": "ELEVENLABS",
      "provider_voice_id": "21m00Tcm4TlvDq8ikWAM",
      "name": "Rachel",
      "description": "A calm, warm female voice",
      "category": "premade",
      "gender": "female",
      "accent": "american",
      "age": "young",
      "language": "en",
      "locale": "en-US",
      "use_case": "narration",
      "preview_url": "https://storage.googleapis.com/eleven-public-prod/...",
      "thumb_url": "https://cdn.autovideo.app/voices/rachel.jpg",
      "is_high_quality": true,
      "notice_period": 0,
      "rate": null,
      "live_moderation_enabled": false,
      "settings": null,
      "languages": []
    }
  ],
  "meta": { "current_page": 1, "total": 350 }
}
POST/speech/text-to-speech
Bearer Token

Chuyển văn bản thành giọng nói (hỗ trợ đa người nói)

Tham số

Tham sốKiểuBắt buộcMô tả
modelstring●`11LABS_V2` | `11LABS_V2.5` | `11LABS_V3`
voiceSettingsobject●Cài đặt giọng toàn cục
voiceSettings.voiceStylestring●`Expressive` | `Neutral` | `Consistent`
voiceSettings.speednumber●Tốc độ đọc: 0.25 – 4.0
voiceSettings.similarityinteger●Độ tương đồng giọng: 0 – 100
segmentsarray●Mảng đoạn thoại (≥ 1)
segments[].voiceIdstring●Voice ID từ `/speech/voices`
segments[].speakerNamestring●Tên người nói (tối đa 100 ký tự)
segments[].textstring●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)

{
  "data": [
    {
      "item_id": 30,
      "task_id": 300,
      "output_id": null,
      "workflow_id": null,
      "account_id": null,
      "parent_id": null,
      "name": null,
      "prompt_text": "Xin chào, tôi là trợ lý AI của AutoVideo.",
      "model": "11LABS_V2.5",
      "aspect_ratio": null,
      "error_message": null,
      "status": "pending",
      "generation_mode": "AUDIO_TTS",
      "is_favorite": false,
      "created_at": "2025-01-01T00:00:00Z",
      "attachments": [],
      "output_attachment": null,
      "thumb": null,
      "voice_thumb_url": "https://cdn.autovideo.app/voices/rachel.jpg",
      "options": {
        "voice_id": "21m00Tcm4TlvDq8ikWAM",
        "provider": "ELEVENLABS",
        "provider_model": "11LABS_V2.5",
        "speaker_name": "Host",
        "voice_settings": {
          "stability": 0.5,
          "similarity_boost": 0.75,
          "style": 0.75,
          "speed": 1.0
        }
      }
    }
  ]
}

Tệp đính kèm

2 endpoints
POST/attachment/presign-upload
Bearer Token

Lấy presigned URL để upload trực tiếp lên R2/S3 (khuyến nghị cho file lớn)

Tham số

Tham sốKiểuBắt buộcMô tả
filenamestring●Tên file gốc
mimeTypestring●`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"
}
POST/attachment/confirm-upload
Bearer Token

Xác nhận hoàn tất upload sau khi PUT file lên presigned URL

Tham số

Tham sốKiểuBắt buộcMô tả
pathstring●Path trả về từ presign response
filenamestring●Tên file gốc
filesizeinteger●Kích thước file (bytes, tối đa 20 MB)
file_hashstring●MD5 / SHA256 hash của file
mime_typestring●MIME type
widthinteger○Chiều rộng pixel (ảnh / video)
heightinteger○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/..." }

AI Account

6 endpoints
GET/account
Bearer Token

Danh sách tài khoản AI của user (Google, Grok, ChatGPT…)

Tham số

Tham sốKiểuBắt buộcMô tả
pageinteger○Trang
per_pageinteger○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 }
  ]
}
POST/account/create
Bearer Token

Thêm tài khoản AI mới (Google / Grok / ChatGPT)

Tham số

Tham sốKiểuBắt buộcMô tả
providerstring●`google` | `grok` | `chatgpt`
namestring●Tên hiển thị (max 255)
cookiestring○Session cookie (bắt buộc với Google và Grok, không cần với ChatGPT)
access_tokenstring○Access token (dùng thay cookie cho ChatGPT)
project_idstring○Google Cloud Project ID (bắt buộc với provider `google`)
is_primaryboolean○Đặt làm tài khoản chính
is_sharedboolean○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 }
GET/account/{accountId}/detail
Bearer Token

Chi tiết tài khoản AI

Tham số

Tham sốKiểuBắt buộcMô tả
accountIdinteger●ID tài khoản (path)
PUT/account/{accountId}/save
Bearer Token

Cập nhật thông tin tài khoản AI

Tham số

Tham sốKiểuBắt buộcMô tả
namestring●Tên mới
cookiestring○Cookie mới (bắt buộc với Google / Grok)
project_idstring○Google Cloud Project ID (bắt buộc với Google)
is_primaryboolean○Đặt là primary
is_sharedboolean○Cho phép dùng chung
proxystring○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"
}
DELETE/account/{accountId}/delete
Bearer Token

Xóa tài khoản AI

Tham số

Tham sốKiểuBắt buộcMô tả
accountIdinteger●ID tài khoản (path)

Response (200 OK)

{ "message": "Account deleted successfully" }
POST/ai/google/account/projects
Bearer Token

Lấy danh sách Google Cloud Projects từ session cookie

Tham số

Tham sốKiểuBắt buộcMô tả
cookiestring●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" }
  ]
}

Item Actions

3 endpoints
POST/ai/google/item/sort-order
Bearer Token

Cập nhật thứ tự sắp xếp các item

Tham số

Tham sốKiểuBắt buộcMô tả
item_idsinteger[]●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" }
POST/ai/google/item/favorite
Bearer Token

Đánh dấu / bỏ đánh dấu yêu thích một item

Tham số

Tham sốKiểuBắt buộcMô tả
item_idinteger●ID của item
is_favoriteboolean●`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 }
POST/ai/google/item/favorite/batch
Bearer Token

Đánh dấu / bỏ đánh dấu yêu thích hàng loạt item

Tham số

Tham sốKiểuBắt buộcMô tả
item_idsinteger[]●Mảng item_id cần cập nhật
is_favoriteboolean●`true` để thêm, `false` để bỏ

Request Body (JSON)

{ "item_ids": [10, 11, 12], "is_favorite": true }

Response (200 OK)

{ "message": "Updated", "count": 3 }

Cần hỗ trợ tích hợp?

Độ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.