DocuGuard
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.
WEBHOOKapplication.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.