Bộ API Tạo Nội Dung AI Toàn Diện
Truy cập hơn 30 mô hình AI tiên tiến nhất chỉ qua một API duy nhất. Tạo video, hình ảnh, avatar và giọng nói với chất lượng hàng đầu thị trường.
API Văn bản thành Video
Biến các câu lệnh văn bản thành video ấn tượng với những mô hình AI video tiên tiến nhất thế giới
Công nghệ tạo video hàng đầu với 6 phiên bản (1.0-2.1). Hỗ trợ chế độ Standard và Pro, video 5-10 giây, chuyển động mượt mà vượt trội.
Tạo video nâng cao với khả năng hiểu bối cảnh và chuyển động tự nhiên xuất sắc. Bao gồm các mô hình Hailuo-02 và HailuoI2V.
Mô hình video mới nhất của Google với độ chân thực và độ chính xác vật lý vô đối. Chất lượng đầu ra cao cấp.
Hoạt hóa hình ảnh chuyên nghiệp với các mô hình Gen-2, Gen-3 và Gen4. Mang lại kết quả chất lượng điện ảnh.
Tạo video đầy tính nghệ thuật với Dream Machine. Tạo ra các video siêu thực và sáng tạo với thẩm mỹ độc đáo.
Tổng hợp vũ đạo nâng cao với hỗ trợ biên đạo nhiều người. Tạo video nhảy đồng bộ từ tư liệu tham chiếu.
Chuyên dụng cho các đoạn clip 5 giây ổn định. Có sẵn độ phân giải 480p và 1080p với chất lượng đầu ra đáng tin cậy.
Tạo video tập trung vào thương mại điện tử. Tối ưu cho việc trưng bày sản phẩm và nội dung marketing.
API Văn bản thành Hình ảnh
Tạo hình ảnh tuyệt đẹp từ mô tả văn bản bằng các mô hình khuếch tán (diffusion) hiện đại nhất
Google's most advanced image model with photorealistic quality and exceptional prompt adherence. Multiple sub-models available.
Mô hình phát triển nhanh để lặp lại ý tưởng. Sự cân bằng hoàn hảo giữa tốc độ và chất lượng cho việc làm bản mẫu.
Tạo hình ảnh chuyên nghiệp với chi tiết tăng cường và khả năng kiểm soát nghệ thuật. Độ ổn định vượt trội.
Enhanced version with improved prompt understanding and faster generation times. Better composition.
Tạo hình ảnh chất lượng tối đa. Chi tiết và độ phân giải cực cao cho các dự án khắt khe.
Specialized for context-aware generation with Pro and Max modes. Excellent for specific style requirements.
Triển khai Flux được tối ưu hóa với nhiều mức chất lượng để tạo nội dung nhanh chóng.
Mô hình hình ảnh tiếng Trung tiên tiến với khả năng hiểu nghệ thuật và kiểm soát phong cách tuyệt vời.
Mô hình mã nguồn mở tiêu chuẩn ngành với các tùy chọn tùy chỉnh sâu rộng.
API Hình ảnh thành Video
Thổi hồn vào những bức ảnh tĩnh với chuyển động và hiệu ứng hoạt họa thông minh
Transform images into smooth videos with natural motion. Multiple versions and quality modes available.
Professional image animation with Gen-2, Gen-3, and Gen4 models. Cinema-quality results.
API Avatar, Lip Sync & TTS
Tạo avatar nói chuyện và tạo giọng nói tự nhiên với khả năng đồng bộ hóa hoàn hảo
Hoạt hóa nhân vật với khả năng đồng bộ âm thanh hoàn hảo. Thổi hồn vào các bức chân dung với biểu cảm và cử động tự nhiên.
Giọng nói AI tự nhiên nhất với khả năng kiểm soát cảm xúc và hỗ trợ đa ngôn ngữ.
Google's neural text-to-speech with WaveNet voices. Over 380 voices in 50+ languages with SSML support.
Một API, Khả năng vô hạn
🎯 Khởi tạo vạn năng
Sử dụng một phương thức 'generate' duy nhất cho mọi loại nội dung - video, hình ảnh, âm thanh, avatar. Đơn giản hóa việc tích hợp với một API đồng nhất.
🤖 Tự động chọn nhà cung cấp
Để AI của chúng tôi chọn nhà cung cấp tốt nhất dựa trên yêu cầu của bạn, hoặc tự chỉ định nhà cung cấp mong muốn để toàn quyền kiểm soát.
🔄 Yêu cầu Idempotent
Thử lại an toàn với header Idempotency-Key. Không bao giờ phải lo lắng về việc bị tính phí trùng lặp do lỗi mạng.
📊 Giới hạn tốc độ thông minh
Các header giới hạn tốc độ rõ ràng (X-RateLimit-*) giúp bạn tối ưu hóa thời gian gửi yêu cầu và tránh lỗi 429.
🔔 Webhook bảo mật
Webhook được ký HMAC để thông báo không đồng bộ an toàn. Nhận thông báo ngay khi nội dung của bạn đã sẵn sàng.
⚡ Mã lỗi rõ ràng
Các mã lỗi thân thiện với hệ thống như INSUFFICIENT_CREDITS và RATE_LIMIT giúp việc gỡ lỗi trở nên đơn giản.
Các mã lỗi thường gặp
| Mã lỗi | Mô tả | Hướng xử lý |
|---|---|---|
| INSUFFICIENT_CREDITS | Không đủ số dư để thực hiện thao tác này | Vui lòng nạp thêm tiền vào tài khoản |
| RATE_LIMIT | Quá nhiều yêu cầu cùng lúc | Kiểm tra header X-RateLimit-Reset |
| INVALID_INPUT | Tham số đầu vào không hợp lệ | Kiểm tra lại dữ liệu đầu vào theo schema |
| PROVIDER_UNAVAILABLE | Nhà cung cấp được chọn tạm thời không khả dụng | Thử lại hoặc sử dụng chế độ tự động chọn |
| GENERATION_FAILED | Quá trình tạo nội dung thất bại | Thử lại với các tham số khác |
Giới hạn tốc độ theo gói
| Gói dịch vụ | Yêu cầu/phút | Yêu cầu đồng thời | Giới hạn ngày |
|---|---|---|---|
| Free | 10 | 1 | 100 |
| Starter | 30 | 3 | 1,000 |
| Pro | 60 | 10 | 10,000 |
| Enterprise | Custom | Custom | Unlimited |
Ví dụ mã triển khai nhanh
# Universal generation API - Video example
curl -X POST https://api.doitong.com/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: unique-request-id-123" \
-d '{
"query": "mutation Generate($input: GenerateInput!) { generate(input: $input) { id status type provider url metadata { duration resolution } creditCost estimatedTime } }",
"variables": {
"input": {
"type": "VIDEO",
"provider": "minimax",
"input": {
"text": "A serene mountain landscape at sunset"
},
"options": {
"duration": 10,
"resolution": "1080p",
"style": "cinematic"
}
}
}
}'
# Auto-select best provider for quality
curl -X POST https://api.doitong.com/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "mutation { generate(input: { type: VIDEO, input: { text: \"Epic dragon battle\" }, priority: QUALITY }) { id status provider creditCost } }"
}'
# Check generation status
curl -X POST https://api.doitong.com/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "query { generation(id: \"gen_abc123\") { status progress url error { code message } } }"
}'
// Doitong Universal API Client
class DoitongAPI {
constructor(apiKey) {
this.apiKey = apiKey;
this.endpoint = 'https://api.doitong.com/graphql';
}
async generate(input) {
const response = await fetch(this.endpoint, {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID()
},
body: JSON.stringify({
query: `
mutation Generate($input: GenerateInput!) {
generate(input: $input) {
id
status
type
provider
url
metadata
creditCost
estimatedTime
error {
code
message
}
}
}
`,
variables: { input }
})
});
const data = await response.json();
// Check for rate limits
const remaining = response.headers.get('X-RateLimit-Remaining');
if (remaining && parseInt(remaining) < 10) {
console.warn(`Low rate limit: ${remaining} requests remaining`);
}
if (data.errors) {
throw new Error(data.errors[0].message);
}
return data.data.generate;
}
async checkStatus(id) {
const response = await fetch(this.endpoint, {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: `
query GetGeneration($id: ID!) {
generation(id: $id) {
id
status
progress
url
error {
code
message
}
}
}
`,
variables: { id }
})
});
const data = await response.json();
return data.data.generation;
}
async waitForCompletion(id, pollInterval = 2000) {
while (true) {
const result = await this.checkStatus(id);
if (result.status === 'COMPLETED') {
return result;
} else if (result.status === 'FAILED') {
throw new Error(result.error?.message || 'Generation failed');
}
await new Promise(resolve => setTimeout(resolve, pollInterval));
}
}
}
// Usage examples
const api = new DoitongAPI('YOUR_API_KEY');
// Simple video generation - let AI choose provider
const video = await api.generate({
type: 'VIDEO',
input: { text: 'A serene mountain landscape' }
});
// Specific provider with options
const video = await api.generate({
type: 'VIDEO',
provider: 'minimax',
input: { text: 'Epic battle scene' },
options: {
duration: 10,
resolution: '1080p',
style: 'cinematic'
}
});
// Image generation with auto-provider selection for quality
const image = await api.generate({
type: 'IMAGE',
input: { text: 'Photorealistic portrait' },
priority: 'QUALITY'
});
// Wait for completion
const result = await api.waitForCompletion(video.id);
console.log('Video ready:', result.url);
// Using Apollo Client for GraphQL
import { ApolloClient, gql } from '@apollo/client';
const CREATE_VIDEO = gql`
mutation CreateVideo($input: VideoCreateInput!) {
videoCreate(input: $input) {
id
status
videoUrl
}
}
`;
const client = new ApolloClient({
uri: 'https://api.doitong.com/graphql',
headers: {
authorization: 'Bearer YOUR_API_KEY'
}
});
const result = await client.mutate({
mutation: CREATE_VIDEO,
variables: {
input: {
prompt: 'Beautiful sunset over ocean',
model: 'luma',
duration: 9
}
}
});
import requests
import time
import json
import uuid
from typing import Dict, Optional, Any
class DoitongAPI:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.doitong.com/graphql"
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def generate(self,
content_type: str,
input_data: Dict[str, Any],
provider: Optional[str] = None,
options: Optional[Dict] = None,
idempotency_key: Optional[str] = None) -> Dict:
"""Universal generation method for all content types"""
# Add idempotency key for safe retries
headers = self.headers.copy()
if idempotency_key:
headers["Idempotency-Key"] = idempotency_key
else:
headers["Idempotency-Key"] = str(uuid.uuid4())
query = """
mutation Generate($input: GenerateInput!) {
generate(input: $input) {
id
status
type
provider
url
metadata
creditCost
estimatedTime
error
errorCode
}
}
"""
variables = {
"input": {
"type": content_type.upper(),
"input": input_data
}
}
if provider:
variables["input"]["provider"] = provider
if options:
variables["input"]["options"] = options
response = requests.post(
self.base_url,
headers=headers,
json={"query": query, "variables": variables}
)
# Handle rate limiting
if response.status_code == 429:
retry_after = response.headers.get("X-RateLimit-Reset", 60)
raise Exception(f"Rate limited. Retry after {retry_after} seconds")
data = response.json()
if "errors" in data:
error = data["errors"][0]
raise Exception(f"API Error: {error.get('message', 'Unknown error')}")
return data["data"]["generate"]
def check_status(self, generation_id: str) -> Dict:
"""Check the status of a generation"""
query = """
query GetGeneration($id: ID!) {
generation(id: $id) {
id
status
type
url
progress
error
errorCode
metadata
}
}
"""
response = requests.post(
self.base_url,
headers=self.headers,
json={
"query": query,
"variables": {"id": generation_id}
}
)
return response.json()["data"]["generation"]
def wait_for_completion(self, generation_id: str, max_wait: int = 300) -> Dict:
"""Poll until generation is complete"""
start_time = time.time()
while time.time() - start_time < max_wait:
result = self.check_status(generation_id)
if result["status"] == "completed":
return result
elif result["status"] == "failed":
error_code = result.get("errorCode", "UNKNOWN_ERROR")
error_msg = result.get("error", "Generation failed")
raise Exception(f"[{error_code}] {error_msg}")
# Adaptive polling - start fast, slow down over time
wait_time = 2 if time.time() - start_time < 30 else 5
time.sleep(wait_time)
raise TimeoutError("Generation timed out")
# Example usage
if __name__ == "__main__":
api = DoitongAPI("YOUR_API_KEY")
try:
# Generate a video (auto-selects best provider)
video = api.generate(
content_type="video",
input_data={"text": "A majestic eagle soaring through clouds"},
options={"duration": 10, "resolution": "1080p"}
)
print(f"Video generation started: {video['id']}")
# Wait for completion
result = api.wait_for_completion(video['id'])
print(f"Video ready: {result['url']}")
print(f"Credits used: {result['creditCost']}")
# Generate with specific provider
image = api.generate(
content_type="image",
provider="flux-ultra",
input_data={"text": "Professional product photography"},
options={"aspectRatio": "16:9", "quality": "ultra"}
)
# Generate audio/TTS
audio = api.generate(
content_type="audio",
provider="elevenlabs",
input_data={"text": "Welcome to the future of AI"},
options={"voice": "rachel", "emotion": "excited"}
)
except Exception as e:
print(f"Error: {e}")
# Universal generation mutation - works for all content types
mutation Generate($input: GenerateInput!) {
generate(input: $input) {
id
status
type
provider
url
metadata
creditCost
estimatedTime
progress
error
errorCode
}
}
# Example: Generate video (auto-select provider)
# Variables:
{
"input": {
"type": "VIDEO",
"input": {
"text": "A bustling Tokyo street at night with neon lights"
},
"options": {
"duration": 10,
"resolution": "1080p",
"style": "cinematic"
}
}
}
# Example: Generate video with specific provider
# Variables:
{
"input": {
"type": "VIDEO",
"provider": "kling",
"input": {
"text": "Epic space battle scene"
},
"options": {
"mode": "pro",
"duration": 10,
"aspectRatio": "16:9"
}
}
}
# Example: Image-to-video generation
# Variables:
{
"input": {
"type": "VIDEO",
"provider": "runway",
"input": {
"text": "Make the character dance",
"image": "https://example.com/character.jpg"
},
"options": {
"motionIntensity": "high",
"model": "gen-3"
}
}
}
# Example: Generate image
# Variables:
{
"input": {
"type": "IMAGE",
"provider": "flux-ultra",
"input": {
"text": "Photorealistic portrait in Rembrandt style"
},
"options": {
"aspectRatio": "16:9",
"quality": "ultra",
"seed": 42
}
}
}
# Example: Generate audio/TTS
# Variables:
{
"input": {
"type": "AUDIO",
"provider": "elevenlabs",
"input": {
"text": "Welcome to the future of artificial intelligence"
},
"options": {
"voice": "rachel",
"emotion": "excited",
"speed": 1.0
}
}
}
# Example: Generate avatar video
# Variables:
{
"input": {
"type": "AVATAR",
"provider": "heygen",
"input": {
"text": "Hello, I'm your AI assistant",
"voice": "professional_female"
},
"options": {
"avatarId": "kate",
"background": "modern_office",
"gesture": "friendly"
},
"webhookUrl": "https://your-app.com/webhook"
}
}
# Query generation status
query GetGeneration($id: ID!) {
generation(id: $id) {
id
status
type
provider
url
progress
metadata {
width
height
duration
format
}
creditCost
error
errorCode
createdAt
completedAt
}
}
# Cancel a generation
mutation CancelGeneration($id: ID!) {
cancelGeneration(id: $id)
}
# Get available providers for a content type
query GetProviders($type: GenerationType!) {
providers(type: $type) {
id
name
description
features
limitations
pricing {
creditCost
estimatedTime
}
options {
name
type
required
description
allowedValues
}
}
}
}
Sẵn sàng để tạo nên điều kỳ diệu?
Gia nhập cộng đồng hàng ngàn nhà phát triển đang sử dụng API của chúng tôi để tạo nội dung AI thế hệ mới