Hoạt Hình Nhân Vật Hedra
Hoạt hình nhân vật với đồng bộ âm thanh hoàn hảo. Mang chân dung trở nên sống động với biểu cảm và chuyển động tự nhiên.
✓ Hoạt hình nhân vật
✓ Đồng bộ âm thanh
✓ Chân dung
✓ Kiểm soát biểu cảm
Authentication
To access Hedra through Doitong API, use your Doitong API key. Include it in the GraphQL mutation or REST API headers.
// GraphQL Header
{
"Authorization": "Bearer YOUR_API_KEY"
}
// REST Header
"X-API-Key": "YOUR_API_KEY"
Quick Start
Get started with Hedra Lip Sync API in just a few minutes. Follow these simple steps to generate your first avatar.
Step 1: Get Your API Key
Sign up for a Doitong account and navigate to your dashboard to generate an API key.
Step 2: Make Your First Request
Use one of the code examples below to make your first API call.
curl -X POST https://api.doitong.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"query": "mutation Generate($input: GenerateInput!) { generate(input: $input) { id status type provider url metadata creditCost } }",
"variables": {
"input": {
"type": "AVATAR",
"provider": "hedra",
"input": {
"text": "Hello, welcome to our platform!",
"avatarId": "professional-1"
},
"options": {
"voice": "en-US-neural"
}
}
}
}'
const response = await fetch('https://api.doitong.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
query: `
mutation GenerateAvatar($input: AvatarGenerationInput!) {
generateAvatar(input: $input) {
id
status
videoUrl
}
}
`,
variables: {
input: {
service: 'hedra',
text: 'Hello, welcome to our platform!',
avatarId: 'professional-1',
voice: 'en-US-neural'
}
}
})
});
const data = await response.json();
console.log('Avatar Video:', data.data.generateAvatar);
import requests
import json
url = "https://api.doitong.com/graphql"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
}
query = """
mutation Generate($input: GenerateInput!) {
generate(input: $input) {
id
status
type
provider
url
metadata
creditCost
}
}
"""
variables = {
"input": {
"type": "AVATAR",
"provider": "hedra",
"input": {
"text": "Hello, welcome to our platform!",
"avatarId": "professional-1"
},
"options": {
"voice": "en-US-neural"
}
}
}
response = requests.post(url, json={
"query": query,
"variables": variables
}, headers=headers)
data = response.json()
print("Result:", data["data"]["generate"])
mutation Generate($input: GenerateInput!) {
generate(input: $input) {
id
status
type
provider
url
metadata
creditCost
createdAt
}
}
# Variables
{
"input": {
"type": "AVATAR",
"provider": "hedra",
"input": {
"text": "Hello, welcome to our platform!",
"avatarId": "professional-1"
},
"options": {
"voice": "en-US-neural",
"language": "en",
"version": "hedra-1.0"
}
}
}
Pricing
The Hedra Lip Sync API uses a credit-based pricing model. Credits are consumed based on the complexity and duration of the generated content.
| Feature | Credits | Description |
|---|---|---|
| Video Ngắn | 50-100 Credits | Tối đa 30 giây |
| Video Dài | 200-500 Credits | 30 giây đến 2 phút |
API Endpoints
The Hedra Lip Sync API is available through our unified GraphQL endpoint.
GraphQL Endpoint
POST https://api.doitong.com/graphql
REST Endpoint
POST https://api.doitong.com/v1/avatar
Parameters
Available parameters for Hedra Lip Sync API requests:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
Chuỗi | Yes | Service identifier: "hedra" |
version |
Chuỗi | No | Model version: "hedra-1.0" |
webhookUrl |
Chuỗi | No | URL to receive completion notifications |
Response Format
All API responses follow a consistent format:
Success Response
{
"data": {
"avatar": {
"id": "abc123xyz",
"status": "processing",
"url": null,
"webhookUrl": "https://your-webhook.com/callback",
"createdAt": "2024-01-01T00:00:00Z"
}
}
}
Completed Response
{
"data": {
"avatar": {
"id": "abc123xyz",
"status": "completed",
"url": "https://cdn.doitong.com/outputs/abc123xyz.mp3",
"duration": null,
"createdAt": "2024-01-01T00:00:00Z"
}
}
}
Error Handling
The API uses standard HTTP status codes and returns detailed error messages.
Common Error Codes
| Status Code | Error Type | Description |
|---|---|---|
| 400 | Bad Request | Invalid parameters or malformed request |
| 401 | Unauthorized | Missing or invalid API key |
| 402 | Payment Required | Insufficient credits |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server error, please retry |
Error Response Format
{
"errors": [
{
"message": "Insufficient credits for this operation",
"extensions": {
"code": "INSUFFICIENT_CREDITS",
"creditsRequired": 100,
"creditsAvailable": 50
}
}
]
}
Webhooks
Receive real-time notifications when your avatar generation is complete.
Setting Up Webhooks
Include a <code>webhookUrl</code> parameter in your request to receive a POST notification when processing is complete.
Webhook Payload
{
"id": "abc123xyz",
"status": "completed",
"url": "https://cdn.doitong.com/outputs/abc123xyz.mp3",
"service": "hedra",
"createdAt": "2024-01-01T00:00:00Z",
"completedAt": "2024-01-01T00:01:00Z",
"metadata": {
"duration": null,
"width": null,
"height": null
}
}
Webhook Security
All webhook requests include a signature header for verification:
X-Doitong-Signature: sha256=abc123...
Rate Limits
To ensure fair usage and system stability, the following rate limits apply:
| Plan | Requests/Minute | Concurrent Jobs | Daily Limit |
|---|---|---|---|
| Free | 10 | 1 | 100 |
| Starter | 30 | 3 | 1,000 |
| Pro | 60 | 10 | 10,000 |
| Enterprise | Custom | Custom | Unlimited |
X-RateLimit-Limit: Maximum requests per windowX-RateLimit-Remaining: Requests remainingX-RateLimit-Reset: Window reset timestamp
Best Practices
1. Optimize Your Prompts
Write clear, descriptive prompts for best results:
- Be specific about visual elements, style, and mood
- Include details about lighting, camera angles, and composition
- Avoid contradictory or impossible requests
2. Handle Async Processing
Generation is asynchronous. Implement proper polling or webhooks:
// Polling example
async function pollStatus(jobId) {
let status = 'processing';
while (status === 'processing') {
await sleep(2000); // Wait 2 seconds
const result = await checkJobStatus(jobId);
status = result.status;
}
return result;
}
3. Error Recovery
Implement retry logic with exponential backoff:
async function retryWithBackoff(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error) {
if (i === maxRetries - 1) throw error;
await sleep(Math.pow(2, i) * 1000);
}
}
}
4. Monitor Credit Usage
Track your credit consumption to avoid interruptions:
- Check credit balance before large batch operations
- Set up alerts for low credit thresholds
- Implement credit-aware request queuing
Ready to Get Started?
Join thousands of developers using Hedra Lip Sync API to create amazing content