AI Video Detection
Submit a video URL for AI-generated content detection. This endpoint is asynchronous — it returns 201 Created immediately, and the detection results are delivered to your webhook URL once processing is complete.
Authentication Required
You need to login with a user and API key in order to access this method. Add this HTTP header to your request:
Authorization: Bearer < Your-Login-Token >
Request
Section titled “Request”Path Parameters
Section titled “Path Parameters”A unique scan id provided by you. We recommend you use the same id in your database to represent the scan in the Copyleaks database. This will help you to debug incidents. Using the same ID for the same file will help you to avoid network problems that may lead to multiple scans for the same file. Learn more about the criteria for creating a Scan ID.
>= 3 characters <= 36 characters
Match pattern: [a-z0-9] !@$^&-+%=_(){}<>';:/.",~|
Headers
Section titled “Headers”Content-Type: application/jsonAuthorization: Bearer YOUR_LOGIN_TOKENBody Parameters
Section titled “Body Parameters”Publicly accessible URL of the video file to analyze.
Example: "https://example.com/my-video.mp4"
Optional custom headers to include when Copyleaks fetches the video from the provided url. Each entry is a two-element array: ["Header-Name", "Header-Value"].
Example: [["X-Custom-Auth", "my-token"]]
Describes the HTTP method that is going to be executed on the specified url. Supported values: GET, POST, PUT
The name of the video file including its extension.
Requirements:
- Must include a supported video extension
<= 255 characters
Supported extensions: .mp4, .avi, .mov, .mkv, .webm, .flv, .wmv, .mpg, .m4v, .3gp, .mxf
Example: "my-video.mp4"
The AI detection model to use for analysis:
- AI Video 1 Pro:
"ai-video-1-pro"
Example: "ai-video-1-pro"
webhooks object Required
Webhook configuration for receiving the async results.
The URL that Copyleaks will POST the detection results to when processing is complete.
Example: "https://your-server.com/webhook/receive-results"
Optional custom headers to include in the webhook request. Each entry is a two-element array: ["Header-Name", "Header-Value"].
Example: [["Authorization", "Bearer my-webhook-token"]]
Use sandbox mode to test your integration with the Copyleaks API without consuming any credits.
Submit videos for AI detection and get returned mock results, simulating Copyleaks’ API functionality to ensure you have successfully integrated the API.
This feature is intended to be used for development purposes only.
An optional string payload that Copyleaks will include in the webhook response, allowing you to correlate the callback with your internal data.
Example: "order-id-12345"
Video Requirements
Section titled “Video Requirements”Returned as 400 Bad Request at submit (synchronous):
- Missing or invalid
scanId,filename,url,model, orwebhooks - Unsupported file extension
- Filename longer than 255 characters
- Invalid
verbvalue
Delivered to your webhook as an error result (asynchronous, after download):
- Duration outside 2 seconds–1 hour →
video_too_short(67) /video_too_long(68) - File larger than 512 MiB →
file_too_large(6) - Resolution below 360×360 →
video_resolution_too_low(65) - Frame rate below 16 FPS →
fps_too_low(66) - Undecodable codec →
unsupported_video_codec(71) - Corrupt or truncated file →
video_truncated(70) - Generic decode failure →
video_load_failed(72)
Responses
Section titled “Responses”The video was successfully submitted for analysis. Results will be delivered to your webhook URL when processing completes.
Invalid request parameters.
Authentication or authorization issues.
You don't have enough credits to complete the request.
Too many requests have been sent. The request has been rejected.
The server encountered an internal error or misconfiguration.
Webhook Payload
Section titled “Webhook Payload”When processing completes, Copyleaks sends a POST request to your webhook URL with the detection results. See AI Video Detection Response for the complete field reference.
{ "model": "ai-video-1-pro", "audioResult": { "starts": [13000, 45000, 47000], "lengths": [14000, 1000, 8700], "exclude": { "starts": [0, 3250, 5400, 7600, 10500], "lengths": [2950, 1500, 1200, 650, 1050] } }, "visualResult": { "starts": [11566, 29433], "lengths": [6134, 26267], "exclude": { "starts": [], "lengths": [] } }, "summary": { "audioAIRatio": 0.4902, "visualAIRatio": 0.5817, "overallAIRatio": 0.7487 }, "videoInfo": { "metadata": { "issuedTime": "2026-03-17T13:14:57+00:00", "issuedBy": "OpenAI", "appOrDeviceUsed": "Sora", "contentSummary": "Created using generative AI" }, "duration": 55.7 }, "scannedVideo": { "scanId": "my-video-scan-1", "actualCredits": 1, "expectedCredits": 1, "creationTime": "2026-05-05T12:37:50Z" }}Examples
Section titled “Examples”POST https://api.copyleaks.com/v1/ai-video-detector/my-video-scan-1/submitContent-Type: application/jsonAuthorization: Bearer YOUR_LOGIN_TOKEN
{ "url": "https://example.com/my-video.mp4", "filename": "my-video.mp4", "model": "ai-video-1-pro", "sandbox": true, "webhooks": { "url": "https://your-server.com/webhook/receive-results" }}curl --request POST \ --url https://api.copyleaks.com/v1/ai-video-detector/my-video-scan-1/submit \ --header 'Authorization: Bearer YOUR_LOGIN_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "url": "https://example.com/my-video.mp4", "filename": "my-video.mp4", "model": "ai-video-1-pro", "sandbox": true, "webhooks": { "url": "https://your-server.com/webhook/receive-results" } }'const response = await fetch( 'https://api.copyleaks.com/v1/ai-video-detector/my-video-scan-1/submit', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_LOGIN_TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ url: 'https://example.com/my-video.mp4', filename: 'my-video.mp4', model: 'ai-video-1-pro', sandbox: true, webhooks: { url: 'https://your-server.com/webhook/receive-results' } }) });
console.log('Submission status:', response.status); // 201 Createdimport requests
url = 'https://api.copyleaks.com/v1/ai-video-detector/my-video-scan-1/submit'headers = { 'Authorization': 'Bearer YOUR_LOGIN_TOKEN', 'Content-Type': 'application/json'}
payload = { 'url': 'https://example.com/my-video.mp4', 'filename': 'my-video.mp4', 'model': 'ai-video-1-pro', 'sandbox': True, 'webhooks': { 'url': 'https://your-server.com/webhook/receive-results' }}
response = requests.post(url, json=payload, headers=headers)print(f"Submission status: {response.status_code}") # 201 Created