Media Provenance
Trace the origin and authenticity of images and videos. Detects deepfakes, verifies C2PA digital watermarks, checks metadata consistency, and cross-references against known media databases.
Endpoint
Code
POST https://signal-stack-ten.vercel.app/v1/verify/mediaRequest parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes* | URL of the image or video to analyze |
file | string | Yes* | Base64-encoded file data (alternative to URL) |
check_deepfakes | boolean | No | Run deepfake detection model (default: true) |
check_provenance | boolean | No | Trace image provenance across the web (default: true) |
check_watermarks | boolean | No | Extract and verify C2PA watermarks (default: true) |
* Either url or file is required.
Response schema
| Field | Type | Description |
|---|---|---|
id | string | Unique request identifier |
trust_score | number | Overall authenticity confidence (0.0–1.0) |
authenticity | string | authentic, likely_authentic, suspicious, manipulated |
deepfake_score | number | Probability of deepfake manipulation (0.0–1.0) |
provenance | array | Timeline of known appearances of this media |
provenance_source | string | Earliest known source of the media |
watermark | object | C2PA or other digital watermark data |
metadata | object | Extracted EXIF and other metadata |
evidence | array | Source evidence chain |
latency_ms | number | Processing time in milliseconds |
Request example
Code
{
"url": "https://example.com/photo.jpg",
"check_deepfakes": true,
"check_provenance": true,
"check_watermarks": true
}Response example
Code
{
"id": "vrf_med_c9d0e1f2",
"trust_score": 0.12,
"authenticity": "manipulated",
"deepfake_score": 0.94,
"provenance": [
{
"url": "https://original-source.com/photo.jpg",
"first_seen": "2024-06-15T08:30:00Z",
"source": "news_archive"
},
{
"url": "https://example.com/photo.jpg",
"first_seen": "2025-01-20T14:22:00Z",
"source": "web_crawl"
}
],
"provenance_source": "https://original-source.com/photo.jpg",
"watermark": null,
"metadata": {
"width": 1920,
"height": 1080,
"format": "JPEG",
"exif": {
"make": null,
"model": null,
"datetime_original": null,
"gps": null
}
},
"evidence": [
{
"source": "deepfake_detection",
"finding": "GAN-based manipulation artifacts detected in facial region (p=0.94)",
"authority_score": 0.93
},
{
"source": "provenance_analysis",
"finding": "Image first appeared June 2024; EXIF metadata has been stripped",
"authority_score": 0.87
}
],
"dimensions": {
"source_authority": 0.90,
"cross_reference": 0.76,
"recency": 0.65,
"llm_analysis": 0.89
},
"latency_ms": 2100,
"credits_used": 4
}Code examples
Python
Code
import signalstack
client = signalstack.SignalStack(api_key="ssk_live_...")
result = client.verify.media(
url="https://example.com/photo.jpg",
check_deepfakes=True,
)
print(f"Authenticity: {result.authenticity}")
print(f"Deepfake score: {result.deepfake_score}")
print(f"Provenance: {result.provenance_source}")cURL
Code
curl -X POST https://signal-stack-ten.vercel.app/v1/verify/media -H "Authorization: Bearer $SIGNALSTACK_API_KEY" -H "Content-Type: application/json" -d '{
"url": "https://example.com/photo.jpg",
"check_deepfakes": true
}'TypeScript
Code
import { SignalStack } from "@signalstack/sdk"
const client = new SignalStack({ apiKey: process.env.SIGNALSTACK_API_KEY! })
const result = await client.verify.media({
url: "https://example.com/photo.jpg",
checkDeepfakes: true,
})
console.log(`Authenticity: ${result.authenticity}`)
console.log(`Deepfake score: ${result.deepfakeScore}`)Next steps
- Explore Claim Verification
- Learn about Trust Scoring