T2M API Documentation
Overview
This document provides comprehensive documentation for the T2M (Text-to-Media) API endpoints. The API is organized into several modules: Authentication, Files, Jobs, System, and Videos.
Base URL
https://your-api-domain.com/api/v1
Authentication
Most endpoints require authentication. Include the authorization token in the request headers:
Authorization: Bearer <your-token>
Public endpoints (no authentication required):
GET /auth/healthGET /system/health
Optional authentication (enhanced data for authenticated users):
- All other
/system/*endpoints
Common Response Formats
Success Response
{
"success": true,
"data": {
"id": "12345",
"status": "completed"
},
"message": "Operation completed successfully"
}
Error Response
{
"success": false,
"error": {
"code": "AUTH_INVALID",
"details": "Token has expired or is malformed"
}
}
Pagination Format
{
"success": true,
"data": {
"items": [...],
"pagination": {
"page": 1,
"items_per_page": 20,
"total_items": 150,
"total_pages": 8,
"has_next": true,
"has_previous": false,
"next_page": 2,
"previous_page": null
}
}
}
Authentication Endpoints
Health Check
- Endpoint:
GET /auth/health - Description: Check authentication service health
- Authentication: Not required
- Response: Service health status
- Example Response:
{
"status": "healthy",
"clerk": {
"status": "healthy",
"response_time": "45ms",
"last_check": "2024-01-15T10:30:00Z"
},
"message": "Authentication service health check completed"
}
Get Authentication Status
- Endpoint:
GET /auth/status - Description: Get current user authentication status
- Headers:
Authorization: Bearer <token>(optional)
- Response: Authentication status and user info
- Example Response (Authenticated):
{
"authenticated": true,
"user_id": "user_12345",
"email": "[email protected]",
"email_verified": true,
"request_context": {
"path": "/auth/status",
"method": "GET",
"client_ip": "192.168.1.100"
}
}
- Example Response (Not Authenticated):
{
"authenticated": false,
"message": "No authentication provided",
"request_context": {
"path": "/auth/status",
"method": "GET",
"client_ip": "192.168.1.100"
}
}
Get Current User Profile
- Endpoint:
GET /auth/me - Description: Get authenticated user's profile information
- Headers:
Authorization: Bearer <token>(required)
- Response: User profile data
- Example Response:
{
"id": "user_12345",
"username": "john_doe",
"full_name": "John Doe",
"email": "[email protected]",
"image_url": "https://example.com/avatar.jpg",
"email_verified": true,
"created_at": "2024-01-01T00:00:00Z",
"last_sign_in_at": "2024-01-15T10:30:00Z"
}
Note: created_at and last_sign_in_at fields may be null if not available from the authentication provider.
Get User Permissions
- Endpoint:
GET /auth/permissions - Description: Get user's permissions and access levels
- Headers:
Authorization: Bearer <token>(required)
- Response: User permissions and role information
- Example Response:
{
"user_id": "user_12345",
"role": "USER",
"permissions": [
"read_files",
"upload_files",
"generate_videos"
],
"access_level": "standard"
}
Test Protected Endpoint
- Endpoint:
GET /auth/test-protected - Description: Test endpoint for authenticated users
- Headers:
Authorization: Bearer <token>(required)
- Response: Test response with user ID
- Example Response:
{
"message": "Successfully accessed protected endpoint",
"user_id": "user_12345",
"timestamp": "2024-01-15T10:30:00Z"
}
Test Verified Endpoint
- Endpoint:
GET /auth/test-verified - Description: Test endpoint for verified users only
- Headers:
Authorization: Bearer <token>(required)
- Response: Test response for verified users
- Example Response:
{
"message": "Successfully accessed verified user endpoint",
"user_id": "user_12345",
"email": "[email protected]",
"email_verified": true,
"timestamp": "2024-01-15T10:30:00Z"
}
Verify Token
- Endpoint:
POST /auth/verify - Description: Verify authentication token validity
- Headers:
Authorization: Bearer <token>(required)
- Response: Token verification status
- Example Response:
{
"verified": true,
"user_id": "user_12345",
"email": "[email protected]",
"email_verified": true,
"message": "Token verified successfully"
}
File Management Endpoints
Upload Single File
- Endpoint:
POST /files/upload - Description: Upload a single file
- Headers:
Authorization: Bearer <token>(required)Content-Type: multipart/form-data
- Parameters:
file(file, required): File to uploadfile_type(string, optional): File type categorysubdirectory(string, optional): Target subdirectorydescription(string, optional): File description
- Response: File upload confirmation with file ID
Batch Upload Files
- Endpoint:
POST /files/batch-upload - Description: Upload multiple files at once
- Headers:
Authorization: Bearer <token>(required)Content-Type: multipart/form-data
- Parameters:
files(file[], required): Files to uploadfile_type(string, optional): File type for all filessubdirectory(string, optional): Subdirectory for all filesdescription(string, optional): Description for all files
- Response: Batch upload results
List Files
- Endpoint:
GET /files - Description: List user's files with pagination and filtering
- Headers:
Authorization: Bearer <token>(required)
- Query Parameters:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
file_type |
string | no | - | Filter by file type (document, image, video, audio) |
page |
integer | no | 1 | Page number (≥1) |
items_per_page |
integer | no | 20 | Items per page (1-100) |
- Response: Paginated list of files
- Example Response:
{
"success": true,
"data": {
"items": [
{
"id": "file_123456",
"filename": "document.pdf",
"size": 2048576,
"file_type": "document",
"created_at": "2024-01-15T10:30:00Z"
}
],
"pagination": {
"page": 1,
"items_per_page": 20,
"total_items": 150,
"total_pages": 8,
"has_next": true
}
}
}
Get File Details
- Endpoint:
GET /files/{file_id} - Description: Get comprehensive file information including content details and metadata
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
file_id(string, required): Unique file identifier
- Response: Complete file details
- Example Response:
{
"success": true,
"data": {
"id": "file_123456",
"filename": "document.pdf",
"size": 2048576,
"content_type": "application/pdf",
"file_type": "document",
"subdirectory": "uploads/2024",
"description": "Important document",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z",
"download_count": 5,
"metadata": {
"pages": 10,
"author": "John Doe",
"creation_date": "2024-01-15"
}
}
}
Get File Metadata
- Endpoint:
GET /files/{file_id}/metadata - Description: Get file metadata and technical information only
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
file_id(string, required): Unique file identifier
- Response: File metadata only
- Example Response:
{
"success": true,
"data": {
"content_type": "application/pdf",
"size": 2048576,
"checksum": "sha256:abc123...",
"metadata": {
"pages": 10,
"author": "John Doe",
"creation_date": "2024-01-15"
}
}
}
Download File
- Endpoint:
GET /files/{file_id}/download - Description: Download file content
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
file_id(string, required): Unique file identifier
- Query Parameters:
inline(boolean, default: false): Serve inline instead of attachment
- Response: File content
Stream File
- Endpoint:
GET /files/{file_id}/stream - Description: Stream file content
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
file_id(string, required): Unique file identifier
- Query Parameters:
quality(string, default: "auto"): Stream quality
- Response: Streamed file content
Get File Thumbnail
- Endpoint:
GET /files/{file_id}/thumbnail - Description: Get file thumbnail
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
file_id(string, required): Unique file identifier
- Query Parameters:
size(string, default: "medium"): Thumbnail size (small|medium|large)
- Response: Thumbnail image
Get File Analytics
- Endpoint:
GET /files/{file_id}/analytics - Description: Get file usage analytics
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
file_id(string, required): Unique file identifier
- Response: File analytics data
Delete File
- Endpoint:
DELETE /files/{file_id} - Description: Delete a file
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
file_id(string, required): Unique file identifier
- Response: Deletion confirmation
Get File Statistics
- Endpoint:
GET /files/stats - Description: Get user's file statistics
- Headers:
Authorization: Bearer <token>(required)
- Response: File usage statistics
Cleanup Files
- Endpoint:
POST /files/cleanup - Description: Cleanup files based on criteria
- Headers:
Authorization: Bearer <token>(required)Content-Type: application/json
- Request Body: File cleanup criteria
- Response: Cleanup results
Secure File Access
- Endpoint:
GET /files/secure/{file_id} - Description: Access files via signed URLs
- Query Parameters:
user_id(string, required): User ID from signed URLexpires(string, required): Expiration timestampsignature(string, required): URL signaturefile_type(string, optional): File typeinline(string, default: "false"): Serve inlinesize(string, optional): Thumbnail sizequality(string, optional): Stream quality
- Response: Secure file access
Job Management Endpoints
List Jobs
- Endpoint:
GET /jobs - Description: List user's jobs with pagination and filtering
- Headers:
Authorization: Bearer <token>(required)
- Query Parameters: Pagination and filtering parameters
- Response: Paginated list of jobs
Get Job Details
- Endpoint:
GET /jobs/{job_id} - Description: Get comprehensive job information including status, progress, and results
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Response: Complete job details and status
- Example Response:
{
"success": true,
"data": {
"id": "job_789012",
"type": "video_generation",
"status": "completed",
"progress": 100,
"created_at": "2024-01-15T10:30:00Z",
"started_at": "2024-01-15T10:30:05Z",
"completed_at": "2024-01-15T10:35:30Z",
"duration": 325,
"parameters": {
"prompt": "A beautiful sunset over mountains",
"duration": 10,
"quality": "1080p"
},
"result": {
"file_id": "video_456789",
"file_size": 15728640,
"thumbnail_url": "/videos/job_789012/thumbnail"
},
"error": null
}
}
Get Job Logs
- Endpoint:
GET /jobs/{job_id}/logs - Description: Get job execution logs with filtering and pagination
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Query Parameters:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
limit |
integer | no | 100 | Maximum log entries (1-1000) |
offset |
integer | no | 0 | Log entries to skip (≥0) |
level |
string | no | - | Filter by log level (DEBUG, INFO, WARNING, ERROR) |
- Response: Job logs with metadata
- Example Response:
{
"success": true,
"data": {
"logs": [
{
"timestamp": "2024-01-15T10:30:15Z",
"level": "INFO",
"message": "Video processing started",
"details": {
"step": "initialization",
"progress": 0
}
},
{
"timestamp": "2024-01-15T10:30:45Z",
"level": "INFO",
"message": "Processing frame 100/1000",
"details": {
"step": "rendering",
"progress": 10
}
}
],
"total_logs": 250,
"has_more": true
}
}
Cancel Job
- Endpoint:
POST /jobs/{job_id}/cancel - Description: Cancel a running job
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Response: Cancellation confirmation
Delete Job
- Endpoint:
DELETE /jobs/{job_id} - Description: Delete a job and its data
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Response: Deletion confirmation
System Monitoring Endpoints
System Health Check
- Endpoint:
GET /system/health - Description: Get overall system health status
- Headers:
Authorization: Bearer <token>(optional)
- Response: System health metrics
System Metrics
- Endpoint:
GET /system/metrics - Description: Get detailed system metrics
- Headers:
Authorization: Bearer <token>(optional)
- Response: System performance metrics
Queue Status
- Endpoint:
GET /system/queue - Description: Get job queue status and statistics
- Headers:
Authorization: Bearer <token>(optional)
- Response: Queue status and metrics
Cache Information
- Endpoint:
GET /system/cache - Description: Get cache status and information
- Headers:
Authorization: Bearer <token>(optional)
- Response: Cache metrics and status
Cache Metrics
- Endpoint:
GET /system/cache/metrics - Description: Get detailed cache metrics
- Headers:
Authorization: Bearer <token>(optional)
- Response: Cache performance metrics
Cache Report
- Endpoint:
GET /system/cache/report - Description: Get comprehensive cache report
- Headers:
Authorization: Bearer <token>(optional)
- Response: Detailed cache report
Performance Summary
- Endpoint:
GET /system/performance - Description: Get system performance summary
- Headers:
Authorization: Bearer <token>(optional)
- Query Parameters:
hours(integer, default: 1): Time range in hours
- Response: Performance summary
Connection Statistics
- Endpoint:
GET /system/connections - Description: Get connection statistics
- Headers:
Authorization: Bearer <token>(optional)
- Response: Connection metrics
Async Statistics
- Endpoint:
GET /system/async - Description: Get asynchronous processing statistics
- Headers:
Authorization: Bearer <token>(optional)
- Response: Async processing metrics
Deduplication Statistics
- Endpoint:
GET /system/deduplication - Description: Get deduplication statistics
- Headers:
Authorization: Bearer <token>(optional)
- Response: Deduplication metrics
Invalidate Cache
- Endpoint:
POST /system/cache/invalidate - Description: Invalidate cache entries
- Headers:
Authorization: Bearer <token>(optional)
- Query Parameters:
pattern(string, optional): Cache key patternuser_id(string, optional): User-specific cache
- Response: Cache invalidation results
Warm Cache
- Endpoint:
POST /system/cache/warm - Description: Pre-warm cache with frequently accessed data
- Headers:
Authorization: Bearer <token>(optional)
- Response: Cache warming results
Optimize Performance
- Endpoint:
POST /system/optimize - Description: Trigger system performance optimization
- Headers:
Authorization: Bearer <token>(optional)
- Response: Optimization results
Video Processing Endpoints
Generate Video
- Endpoint:
POST /videos/generate - Description: Create a new video generation job
- Headers:
Authorization: Bearer <token>(required)Content-Type: application/json
- Request Body: Job creation parameters
- Response: Job creation confirmation with job ID
Get Job Status
- Endpoint:
GET /videos/{job_id}/status - Description: Get video generation job status
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Response: Job status and progress
Download Video
- Endpoint:
GET /videos/{job_id}/download - Description: Download generated video
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Query Parameters:
inline(boolean, default: false): Serve inline instead of attachment
- Response: Video file content
Stream Video
- Endpoint:
GET /videos/{job_id}/stream - Description: Stream generated video
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Query Parameters:
quality(string, default: "auto"): Stream quality (auto|720p|1080p)
- Response: Streamed video content
Get Video Metadata
- Endpoint:
GET /videos/{job_id}/metadata - Description: Get comprehensive video metadata and technical information
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Response: Detailed video metadata
- Example Response:
{
"success": true,
"data": {
"job_id": "job_789012",
"video": {
"duration": 10.5,
"width": 1920,
"height": 1080,
"fps": 30,
"bitrate": 5000000,
"codec": "h264",
"format": "mp4",
"file_size": 15728640
},
"audio": {
"codec": "aac",
"bitrate": 128000,
"sample_rate": 44100,
"channels": 2
},
"generation": {
"prompt": "A beautiful sunset over mountains",
"model": "t2v-v2.1",
"seed": 12345,
"created_at": "2024-01-15T10:30:00Z"
}
}
}
Get Video Thumbnail
- Endpoint:
GET /videos/{job_id}/thumbnail - Description: Get video thumbnail
- Headers:
Authorization: Bearer <token>(required)
- Path Parameters:
job_id(string, required): Unique job identifier
- Query Parameters:
size(string, default: "medium"): Thumbnail size (small|medium|large)
- Response: Video thumbnail image
Error Handling
Error Codes
| Code | HTTP Status | Description |
|---|---|---|
AUTH_REQUIRED |
401 | Authentication required |
AUTH_INVALID |
401 | Invalid authentication token |
AUTH_EXPIRED |
401 | Authentication token expired |
PERMISSION_DENIED |
403 | Insufficient permissions |
RESOURCE_NOT_FOUND |
404 | Requested resource not found |
VALIDATION_ERROR |
400 | Request validation failed |
RATE_LIMIT_EXCEEDED |
429 | Rate limit exceeded |
SERVER_ERROR |
500 | Internal server error |
SERVICE_UNAVAILABLE |
503 | Service temporarily unavailable |
Error Response Examples
Invalid Authentication (401)
{
"success": false,
"error": {
"code": "AUTH_INVALID",
"details": "Token has expired or is malformed"
}
}
Resource Not Found (404)
{
"success": false,
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "File not found",
"details": "File with ID 'file_123456' does not exist or you don't have access"
}
}
Validation Error (400)
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"details": {
"file_type": [
"Invalid file type. Must be one of: document, image, video, audio"
],
"page": ["Page must be greater than 0"]
}
}
}
Rate Limit Exceeded (429)
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded",
"details": "You have exceeded the limit of 100 uploads per hour. Try again in 45 minutes."
}
}
Rate Limits
- General API: 1000 requests per hour per user
- File Upload: 100 uploads per hour per user
- Video Generation: 10 jobs per hour per user
- System Endpoints: 500 requests per hour per user
Code Examples
cURL Examples
Upload a file
curl -X POST "https://api.example.com/api/v1/files/upload" \
-H "Authorization: Bearer your-token-here" \
-F "[email protected]" \
-F "file_type=document" \
-F "description=Sample document"
Generate video
curl -X POST "https://api.example.com/api/v1/videos/generate" \
-H "Authorization: Bearer your-token-here" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A beautiful sunset over mountains",
"duration": 10,
"quality": "1080p"
}'
Get job status
curl -X GET "https://api.example.com/api/v1/jobs/job_789012" \
-H "Authorization: Bearer your-token-here"
Get system metrics
curl -X GET "https://api.example.com/api/v1/system/metrics" \
-H "Authorization: Bearer your-token-here"
Python Examples
File Management
import requests
headers = {"Authorization": "Bearer your-token-here"}
base_url = "https://api.example.com/api/v1"
# Upload file
with open("example.txt", "rb") as f:
files = {"file": f}
data = {"file_type": "document", "description": "Sample document"}
response = requests.post(f"{base_url}/files/upload", headers=headers, files=files, data=data)
file_data = response.json()
print(f"File uploaded: {file_data['data']['id']}")
# List files
response = requests.get(f"{base_url}/files", headers=headers, params={"page": 1, "items_per_page": 10})
files = response.json()
print(f"Found {files['data']['pagination']['total_items']} files")
Job Management
# Get job logs
job_id = "job_789012"
response = requests.get(f"{base_url}/jobs/{job_id}/logs", headers=headers, params={"limit": 50, "level": "INFO"})
logs = response.json()
print(f"Retrieved {len(logs['data']['logs'])} log entries")
# Cancel job
response = requests.post(f"{base_url}/jobs/{job_id}/cancel", headers=headers)
if response.json()['success']:
print("Job cancelled successfully")
Video Processing
# Generate video
job_data = {
"prompt": "A beautiful sunset over mountains",
"duration": 10,
"quality": "1080p"
}
response = requests.post(f"{base_url}/videos/generate", headers=headers, json=job_data)
job = response.json()
job_id = job['data']['job_id']
print(f"Video generation started: {job_id}")
# Check status
response = requests.get(f"{base_url}/videos/{job_id}/status", headers=headers)
status = response.json()
print(f"Job status: {status['data']['status']} ({status['data']['progress']}%)")
System Monitoring
# Get system metrics
response = requests.get(f"{base_url}/system/metrics", headers=headers)
metrics = response.json()
print(f"CPU usage: {metrics['data']['cpu_usage']}%")
print(f"Memory usage: {metrics['data']['memory_usage']}%")
# Get queue status
response = requests.get(f"{base_url}/system/queue", headers=headers)
queue = response.json()
print(f"Jobs in queue: {queue['data']['pending_jobs']}")
JavaScript Examples
File Management
const headers = {
Authorization: "Bearer your-token-here",
};
const baseUrl = "https://api.example.com/api/v1";
// Upload file
const formData = new FormData();
formData.append("file", fileInput.files[0]);
formData.append("file_type", "document");
formData.append("description", "Sample document");
fetch(`${baseUrl}/files/upload`, {
method: "POST",
headers: headers,
body: formData,
})
.then((response) => response.json())
.then((data) => console.log("File uploaded:", data.data.id));
// List files with pagination
fetch(`${baseUrl}/files?page=1&items_per_page=10`, {
headers: headers,
})
.then((response) => response.json())
.then((data) =>
console.log(`Found ${data.data.pagination.total_items} files`)
);
Job Management
// Get job logs
const jobId = "job_789012";
fetch(`${baseUrl}/jobs/${jobId}/logs?limit=50&level=INFO`, {
headers: headers,
})
.then((response) => response.json())
.then((data) =>
console.log(`Retrieved ${data.data.logs.length} log entries`)
);
// Cancel job
fetch(`${baseUrl}/jobs/${jobId}/cancel`, {
method: "POST",
headers: headers,
})
.then((response) => response.json())
.then((data) => {
if (data.success) console.log("Job cancelled successfully");
});
Video Processing
// Generate video
const jobData = {
prompt: "A beautiful sunset over mountains",
duration: 10,
quality: "1080p",
};
fetch(`${baseUrl}/videos/generate`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify(jobData),
})
.then((response) => response.json())
.then((data) => {
const jobId = data.data.job_id;
console.log("Video generation started:", jobId);
// Poll for status
const checkStatus = () => {
fetch(`${baseUrl}/videos/${jobId}/status`, { headers })
.then((response) => response.json())
.then((status) => {
console.log(
`Status: ${status.data.status} (${status.data.progress}%)`
);
if (status.data.status === "processing") {
setTimeout(checkStatus, 5000); // Check again in 5 seconds
}
});
};
checkStatus();
});
System Monitoring
// Get system metrics
fetch(`${baseUrl}/system/metrics`, { headers })
.then((response) => response.json())
.then((data) => {
console.log(`CPU usage: ${data.data.cpu_usage}%`);
console.log(`Memory usage: ${data.data.memory_usage}%`);
});
// Get queue status
fetch(`${baseUrl}/system/queue`, { headers })
.then((response) => response.json())
.then((data) => console.log(`Jobs in queue: ${data.data.pending_jobs}`));
Support
For API support and questions, please contact:
- Email: [email protected]
- Documentation: https://docs.example.com
- Status Page: https://status.example.com
Webhooks
The T2M API supports webhook notifications for long-running operations like video generation.
Webhook Configuration
Configure webhook URLs in your account settings or via the API:
curl -X POST "https://api.example.com/api/v1/webhooks" \
-H "Authorization: Bearer your-token-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/webhooks/t2m",
"events": ["job.completed", "job.failed"],
"secret": "your-webhook-secret"
}'
Webhook Events
| Event | Description |
|---|---|
job.started |
Job processing has begun |
job.progress |
Job progress update (every 10%) |
job.completed |
Job completed successfully |
job.failed |
Job failed with error |
job.cancelled |
Job was cancelled |
Webhook Payload Example
Job Completed
{
"event": "job.completed",
"timestamp": "2024-01-15T10:35:30Z",
"data": {
"job_id": "job_789012",
"type": "video_generation",
"status": "completed",
"result": {
"file_id": "video_456789",
"download_url": "https://api.example.com/api/v1/videos/job_789012/download",
"thumbnail_url": "https://api.example.com/api/v1/videos/job_789012/thumbnail"
}
}
}
Webhook Security
Verify webhook authenticity using the signature header:
import hmac
import hashlib
def verify_webhook(payload, signature, secret):
expected = hmac.new(
secret.encode('utf-8'),
payload.encode('utf-8'),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)
# In your webhook handler
signature = request.headers.get('X-T2M-Signature')
if verify_webhook(request.body, signature, webhook_secret):
# Process webhook
pass
Advanced Features
Batch Operations
Batch File Upload
curl -X POST "https://api.example.com/api/v1/files/batch-upload" \
-H "Authorization: Bearer your-token-here" \
-F "[email protected]" \
-F "[email protected]" \
-F "[email protected]" \
-F "file_type=document"
Signed URLs for Secure Access
Generate temporary signed URLs for file access without authentication:
# Request signed URL
response = requests.post(f"{base_url}/files/{file_id}/signed-url",
headers=headers,
json={"expires_in": 3600}) # 1 hour
signed_url = response.json()['data']['url']
# Use signed URL (no auth required)
file_response = requests.get(signed_url)
Streaming and Quality Options
Video Streaming with Quality Selection
# Stream in different qualities
curl "https://api.example.com/api/v1/videos/job_789012/stream?quality=720p" \
-H "Authorization: Bearer your-token-here"
Thumbnail Sizes
# Get different thumbnail sizes
curl "https://api.example.com/api/v1/videos/job_789012/thumbnail?size=large" \
-H "Authorization: Bearer your-token-here"
Performance Optimization
Caching
The API implements intelligent caching. Use these endpoints to manage cache:
# Warm cache for better performance
curl -X POST "https://api.example.com/api/v1/system/cache/warm" \
-H "Authorization: Bearer your-token-here"
# Invalidate specific cache patterns
curl -X POST "https://api.example.com/api/v1/system/cache/invalidate" \
-H "Authorization: Bearer your-token-here" \
-d "pattern=user:123:*"
Request Optimization
- Use pagination for large datasets
- Implement client-side caching for frequently accessed data
- Use appropriate quality settings for streaming
- Batch operations when possible
Monitoring and Analytics
System Health Monitoring
# Check overall system health
curl "https://api.example.com/api/v1/system/health"
# Get detailed performance metrics
curl "https://api.example.com/api/v1/system/performance?hours=24" \
-H "Authorization: Bearer your-token-here"
File Analytics
Track file usage and performance:
curl "https://api.example.com/api/v1/files/file_123456/analytics" \
-H "Authorization: Bearer your-token-here"
Migration Guide
From v1.0 to v1.1
Breaking Changes:
GET /files/{id}/infois nowGET /files/{id}(consolidated endpoints)- Error response format now includes
detailsfield - Pagination format standardized across all endpoints
New Features:
- Webhook support for job notifications
- Batch file operations
- Enhanced error details
- Signed URL support
Migration Steps:
- Update endpoint URLs for file info
- Update error handling to use new format
- Implement webhook handlers for better UX
- Use batch operations for improved performance
Changelog
v1.1.0 (2024-01-15)
- Added webhook support
- Introduced batch file operations
- Enhanced error responses with details
- Added signed URL generation
- Improved pagination format
- Added system performance endpoints
v1.0.0 (2023-12-01)
- Initial API release
- Basic CRUD operations for files
- Video generation capabilities
- Job management system
- System monitoring endpoints