MVE API
Evidence-based verification — public trust layer, authenticated analysis APIs, and Free screening.
Base URLs
https://mve.vernr.com/api/v2https://mve.vernr.com/api/public/v1https://mve.vernr.com/v/{id}Authentication
Paid and Free analysis endpoints require an API key in production:
curl -H "X-MVE-API-Key: YOUR_KEY" \ -F "file=@photo.jpg" \ "https://mve.vernr.com/api/v2/verify?mode=deep"
Public trust endpoints under /api/public/v1 do not require an API key. Only completed verifications are returned; others respond with 404.
Public Trust — GET /api/public/v1/verifications/:id
Returns a public-safe summary (not the full internal report JSON): verdict, certificate metadata, SHA-256, signature status, and allowed high-level evidence.
{
"verification_id": "EVY-...",
"public_url": "https://mve.vernr.com/v/EVY-...",
"sha256": "...",
"summary": { "headline": "...", "verdict": "verified_authentic", ... },
"certificate": { "signed": true, "report_signature": "...", ... },
"signature": { "signed": true, "report_signature": "..." },
"public_evidence": [{ "source": "metadata", "type": "...", "result": "..." }],
"limitations": ["..."]
}Signature Verification — GET /api/public/v1/verifications/:id/verify
{
"valid": true,
"verification_id": "EVY-...",
"signed": true,
"signed_fields": {
"public_id": "EVY-...",
"sha256": "...",
"verdict": "verified_authentic",
"confidence_percent": 82,
"strong_signals": 4,
"total_signals": 9
},
"report_signature": "..."
}Example — POST /api/v2/verify
curl -X POST "https://mve.vernr.com/api/v2/verify?mode=deep" \ -H "X-MVE-API-Key: YOUR_KEY" \ -F "file=@photo.jpg"
Free Screening — POST /api/free/v1/screen
Preliminary metadata/provenance/integrity screening. No ML model analysis. Same endpoint contract; authenticated and rate limited.
Endpoints
POST/api/v2/verify?mode=quick|deep|forensicEvidence graph verification (authenticated)
GET/api/v2/jobs/:idPoll v2 job status and retrieve report (authenticated)
GET/api/v2/verifications/:id/reportFull evidence graph report JSON (authenticated)
GET/api/v2/verifications/:id/certificateCertificate metadata (authenticated)
GET/api/public/v1/verifications/:idPublic summary + certificate + allowed evidence (no auth)
GET/api/public/v1/verifications/:id/certificatePublic certificate metadata (no auth)
GET/api/public/v1/verifications/:id/verifyPublic signature verification (no auth)
POST/api/free/v1/screenFree preliminary screening (authenticated, rate limited)
POST/api/v1/webhooksRegister webhook for verification.completed (authenticated)
Webhook Payload (signed delivery)
Headers:
X-MVE-Event: verification.completed
X-MVE-Timestamp: 1700000000
X-MVE-Signature: hmac_sha256_hex
Body:
{
"event": "verification.completed",
"verification_id": "EVY-...",
"verdict": "likely_ai_generated",
"confidence": "high",
"confidence_pct": 73,
"sha256": "...",
"timestamp": "2026-08-11T01:30:00Z"
}Verdict Types
- verified_authentic — VERIFIED AUTHENTIC
- verified_ai_generated — VERIFIED AI
- likely_ai_modified — LIKELY AI / MANIPULATED
- inconclusive — INCONCLUSIVE (includes unable to verify)