{"openapi":"3.1.0","info":{"title":"DocVerdict API","description":"Programmatic document verification. Upload a file, get back the findings\nJSON and the same plain-language report the web product renders.\n\nResults are evidence and classifications, never determinations of fraud,\nauthenticity, or legal validity. Decisions belong to qualified\nprofessionals.\n\nFiles are analyzed in memory and never stored; only derived findings JSON\nis kept, for 7 days, under the report token.\n\nAuthentication: `Authorization: Bearer <key>` or `X-Api-Key: <key>`.\nKeys are self-serve at /api-access on the web site. Each key includes a\nmonthly free allowance; calls beyond it are billed per verification\nthrough Stripe.\n","version":"1.0.0"},"servers":[{"url":"/api/v1"},{"url":"http://localhost:8000/api/v1"}],"paths":{"/verify/pdf":{"post":{"summary":"Verify one PDF","description":"Multipart upload, field name `file`. Returns signature status, post-signing change classification, and metadata observations as findings plus a plain-language report. Evidence and classifications only — never a fraud or authenticity determination.","operationId":"verify_pdf_verify_pdf_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_verify_pdf_verify_pdf_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Verify Pdf Verify Pdf Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify/photo":{"post":{"summary":"Verify one photo","description":"Multipart upload, field name `file` (JPG, PNG, or HEIC). Returns camera-metadata findings: capture records, edit traces, timestamp consistency. Observations suggest, never prove.","operationId":"verify_photo_verify_photo_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_verify_photo_verify_photo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Verify Photo Verify Photo Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify/email":{"post":{"summary":"Verify one email (.eml)","description":"Multipart upload, field name `file` (.eml). Returns sender alignment, authentication results, and delivery-route findings. Classifications, not conclusions.","operationId":"verify_email_verify_email_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_verify_email_verify_email_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Verify Email Verify Email Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify/compare":{"post":{"summary":"Compare two PDFs","description":"Multipart upload, field names `file_a` and `file_b`. Returns whether one file derives from the other and what changed, as findings plus a plain-language report.","operationId":"verify_compare_verify_compare_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_verify_compare_verify_compare_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Verify Compare Verify Compare Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_verify_compare_verify_compare_post":{"properties":{"file_a":{"type":"string","contentMediaType":"application/octet-stream","title":"File A"},"file_b":{"type":"string","contentMediaType":"application/octet-stream","title":"File B"}},"type":"object","required":["file_a","file_b"],"title":"Body_verify_compare_verify_compare_post"},"Body_verify_email_verify_email_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_verify_email_verify_email_post"},"Body_verify_pdf_verify_pdf_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_verify_pdf_verify_pdf_post"},"Body_verify_photo_verify_photo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_verify_photo_verify_photo_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}