For the LMS integration team
Integration reference
DocuGuard sits in front of the LMS: documents in, a classification and evidence pack out. This page documents the proposed contract — it is not a live API.
Endpoints
POST
/applicationsCreate an application and submit its document set.GET
/applications/{id}/statusFetch classification, confidence and the full evidence pack.WEBHOOK
application.classifiedPushed to the LMS as soon as vetting completes.POST
/cases/{id}/resolveRecord a fraud-team decision against an open case.1 · Submit an application
POST /applications
Content-Type: application/json
Authorization: Bearer <lms-service-token>
{
"external_reference": "LMS-2026-88431",
"product_type": "Auto & Personal Loan - Individual Salaried",
"applicant": {
"name": "Ahmed Al Balushi",
"id_number": "MSC-4471023",
"phone": "+968 9412 7781",
"employer": "Oman Telecommunications Co."
},
"loan_amount_omr": 18500,
"documents": [
{ "doc_type": "ID Copy", "file_url": "s3://lms-docs/88431/id.pdf" },
{ "doc_type": "Salary Certificate", "file_url": "s3://lms-docs/88431/salary.pdf" },
{ "doc_type": "Bank Statement", "file_url": "s3://lms-docs/88431/stmt.pdf" }
],
"callback_url": "https://lms.example.om/hooks/docuguard"
}2 · Classification response
GET /applications/{id}/status
{
"application_id": "e2b1c3d4-...",
"classification": "Suspected Fraud",
"confidence": 92,
"rationale": "Bank statement authenticity failed (92% confidence) and the declared salary figure is not supported by observed credits.",
"sla_due_at": "2026-09-02T09:00:00Z",
"evidence": [
{
"doc_type": "Bank Statement",
"authenticity_score": 31,
"verdict": "Fail",
"checks": [
{ "check_name": "Metadata analysis", "result": "Fail", "confidence": 91,
"detail": "Modification timestamp 2 days after claimed issue date." },
{ "check_name": "Duplicate-hash check", "result": "Fail", "confidence": 99,
"detail": "Exact file hash match against another application." }
]
}
],
"discrepancies": [
{ "field_name": "Declared salary vs bank credits", "doc_a": "Salary Certificate",
"doc_a_value": "1321 OMR", "doc_b": "Bank Statement", "doc_b_value": "712 OMR",
"severity": "Critical" }
],
"fraud_signals": [
{ "signal_type": "Repeat ID across applications", "confidence": 96,
"related_application_ids": ["a1f2...", "c9d0..."] }
],
"external_checks": [
{ "provider": "Mala'a", "status": "Could not verify", "response_time_ms": 420 },
{ "provider": "MOCIIP Invest Easy", "status": "Verified", "response_time_ms": 665 },
{ "provider": "ROP", "status": "Verified", "response_time_ms": 265 }
]
}3 · application.classified webhook
POST <callback_url> // event: application.classified
X-DocuGuard-Signature: sha256=<hmac>
{
"event": "application.classified",
"delivered_at": "2026-08-31T09:04:11Z",
"data": {
"application_id": "e2b1c3d4-...",
"external_reference": "LMS-2026-88431",
"classification": "Needs Review",
"confidence": 68,
"requires_human_review": true
}
}4 · Resolve a case
POST /cases/{id}/resolve
{
"resolution": "Confirmed Fraud", // Cleared | Confirmed Fraud | Escalated
"resolved_by": "salim.alrashdi@bank.om",
"notes": "Statement confirmed fabricated with issuing bank."
}
// 200 OK
{ "case_id": "7b0c...", "status": "Resolved", "resolved_at": "2026-08-31T11:22:03Z" }Connector notes
What is simulated today and what plugs in later
- Mala'a — credit and employment verification; currently returns simulated statuses and response times.
- MOCIIP Invest Easy — commercial registry / CR validity lookup for business products.
- ROP — national identity validity confirmation.
- Open Banking — statement retrieval at source, removing reliance on uploaded PDFs for income verification.
- AI reasoning layer — narratives and confidence scores are template-generated behind a single interface, so a hosted model can be substituted without changing the evidence schema.