Documentation
UncovAI Azure Detection API
The UncovAI Detection API analyzes text, images, audio, and video to determine whether the content was created by a human or generated by AI. It is available as a SaaS offer on the Azure Marketplace and billed directly through your Azure account.
Getting Started
From zero to your first API call in three steps.
Subscribe on Azure Marketplace
Go to the UncovAI offer on Azure Marketplace and click Subscribe. Choose a plan and confirm your subscription. The subscription itself is free. You are only charged for what you use.
Go to Azure Marketplace →Set your UncovAI password
After subscribing, Azure redirects you to uncovai.com. An account is automatically created using your Azure email address. You will be redirected to set your password and complete your account setup. You will also receive an email with a direct link to do so. This step is required to access your API key and account settings.
Retrieve your API key
Once logged in, navigate to your account settings to find your API key. Use it in every request as described in the Authentication section below.
Open account settings →Authentication
Pass your API key in a request header on every call.
# Required on every request x-api-key: your_api_key
Your API key is linked to your Azure subscription. If your subscription is suspended or cancelled,
the key will return 402 until the subscription is restored.
You can view and revoke your API key at any time from the API section of your account settings. Revoking generates a new key immediately, update your integration before doing so.
Billing
Usage is metered and billed monthly through your Azure account.
Subscription
The Azure Marketplace subscription is free. There is no monthly base fee. You are billed only for the API calls you make.
Per-call pricing
Every endpoint (text, image, audio, and video) is billed as 1 unit per API call, regardless of content size or duration.
| Endpoint | Billed unit | Price per call |
|---|---|---|
| POST /azure/detect-text | 1 call | $0.33 |
| POST /azure/detect-image | 1 call | $0.55 |
| POST /azure/detect-audio | 1 call | $0.66 |
| POST /azure/detect-video | 1 call | $1.10 |
Prices are in USD and billed monthly through your Azure account.
/azure/detect-text
Detect Text
Returns a human-origin probability score for a text passage.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
| text | string | The text to analyze. |
Request
curl -X POST https://app-989854684109.europe-west9.run.app/azure/detect-text \
-H "x-api-key: your_api_key" \
-H "Content-Type: application/json" \
-d '{"text": "The rapid development of AI..."}'
Response
{
"label": "Real", // "Real" or "AI-Generated"
"score": 78.4 // human-origin probability, 0–100
}
/azure/detect-image
Detect Image
Classifies an image as real or AI-generated, and searches for matching pages online.
Accepted: JPEG, PNG, GIF, BMP, TIFF, WebP, max 10 MB multipart/form-data
Request
curl -X POST https://app-989854684109.europe-west9.run.app/azure/detect-image \
-H "x-api-key: your_api_key" \
-F "image=@photo.jpg"
Response
{
"label": "AI-Generated",
"score": 12.3,
"webDetection": ["https://..."] // matching pages found online
}
/azure/detect-audio
Detect Audio
Detects voice cloning and synthetic speech.
Accepted: MP3, WAV, M4A, FLAC, OGG, max 50 MB, max 6 minutes multipart/form-data
Request
curl -X POST https://app-989854684109.europe-west9.run.app/azure/detect-audio \
-H "x-api-key: your_api_key" \
-F "audio=@recording.mp3"
Response
{
"label": "Real",
"confidence": 0.91 // 0–1
}
/azure/detect-video
Detect Video
Detects deepfakes and AI-generated video. Analyzes the audio track separately if present.
Accepted: MP4, AVI, MOV, MKV, max 100 MB, max 6 minutes multipart/form-data
Request
curl -X POST https://app-989854684109.europe-west9.run.app/azure/detect-video \
-H "x-api-key: your_api_key" \
-F "video=@clip.mp4"
Response
{
"video": { "label": "Real", "confidence": 0.87 },
"audio": { "label": "Real", "confidence": 0.94 } // null if no audio track
}
Usage
Monitor your API consumption for the current month.
/azure/usage
{
"period_start": "2025-06-01T00:00:00+00:00",
"subscriptions": [
{
"offer_id": "uncovai-deepfake-detector-api",
"product": "deepfake",
"plan_id": "basic",
"usage": {
"text_detection": 42,
"image_detection": 18,
"audio_detection": 5,
"video_detection": 2
},
"total_calls": 67
}
]
}
/azure/usage/history?months=3
Returns a month-by-month breakdown for the past N months (1–24).
/azure/billing/subscription
Returns your subscription status: subscribed, suspended, or unsubscribed.
Reading Scores
Text & Image: score (0–100)
Represents the probability that the content is human-made. Higher is more human.
The label is derived directly from this value: Real if above 50, AI-Generated otherwise.
| Score | Label | Interpretation |
|---|---|---|
| 0 – 30 | AI-Generated | High confidence, AI generated |
| 30 – 50 | AI-Generated | Likely AI, lower confidence |
| 50 – 70 | Real | Likely human, lower confidence |
| 70 – 100 | Real | High confidence, human made |
Scores between 40 and 60 reflect genuine uncertainty. Treat this range as inconclusive.
Audio & Video: confidence (0–1)
Represents the model's certainty about its label, not a human-origin probability.
Read them together: the label tells you what was detected, the confidence tells you how certain the model is.
| Confidence | Interpretation |
|---|---|
| 0.85 – 1.00 | High certainty, trust the label |
| 0.60 – 0.85 | Moderate certainty |
| 0.45 – 0.60 | Uncertain, treat as inconclusive |
A value close to 0.5 means the model could not clearly distinguish real from AI-generated.
Limits
Requests exceeding these limits are rejected before processing. No unit is billed.
| Endpoint | Max file size | Max duration | Accepted formats |
|---|---|---|---|
| Text | n/a | n/a | JSON body |
| Image | 10 MB | n/a | JPEG, PNG, GIF, BMP, TIFF, WebP |
| Audio | 50 MB | 6 minutes | MP3, WAV, M4A, FLAC, OGG |
| Video | 100 MB | 6 minutes | MP4, AVI, MOV, MKV |
Error Codes
All errors return JSON with a detail field describing the issue.
| Code | Cause | Resolution |
|---|---|---|
| 400 | Invalid input: bad format, file too long, or empty text | Check accepted formats and limits |
| 401 | Missing or invalid API key | Check your x-api-key header |
| 402 | No active Azure subscription | Check subscription status in Azure portal |
| 413 | File too large | Compress or trim before sending |
| 415 | Unsupported file format | Convert to an accepted format |
| 503 | Detection model unavailable | Retry after a few minutes |
FAQ
My subscription is active but I get a 402 error. Why?
Your API key must be linked to your Azure subscription. Make sure you completed the onboarding on
uncovai.com
after subscribing on Azure. If the problem persists, check your subscription status in the Azure portal.
A payment issue can put it in suspended state.
Is there a rate limit on API calls?
There is no hard per-minute or per-day call limit. Your usage is only constrained by the quota defined in your Azure Marketplace plan. Contact us if you need a higher-volume plan.
What happens if a call fails? Am I still billed?
Only successful calls (HTTP 200) are metered. Calls that return an error (4xx or 5xx) are not counted toward your Azure usage.
Troubleshooting
I was not redirected to uncovai.com after subscribing on Azure.
- Check your inbox for a welcome email from UncovAI, it may have landed in spam.
- Open the Azure portal and confirm the subscription status is
Subscribed. If it showsPendingFulfillmentStart, the redirect did not complete. - If the subscription is active but you never received the email, unsubscribe from the Azure portal and subscribe again. The redirect triggers fresh on each new subscription.
I completed the onboarding but my API key returns 401.
- Copy the key directly from uncovai.com/account to avoid invisible whitespace.
- Make sure the header name is exactly
x-api-key(lowercase, with hyphen). - If you recently revoked the key, use the new one shown after revocation.
My API key is valid but every call returns 402.
- Check that your subscription is still
Subscribedin the Azure portal. A failed payment moves it toSuspended. - If suspended, resolve the payment issue in Azure and wait a few minutes for the status to propagate.
- If you cancelled and resubscribed, make sure the new subscription went through the full onboarding flow.
My file upload returns a 400 or 415 error.
- Verify the file format is in the accepted list for that endpoint (see the Limits section).
- Some files have a misleading extension. Re-export the file from its source application to ensure the format matches.
- If the file is within size limits but still rejected, it may be corrupted. Try opening it locally to confirm it plays or displays correctly.
Support
Need help? We are here.
For Azure Marketplace billing disputes, use the standard Azure support channel in the Azure portal.