← Back to DurujScore
Developers · API

API-first, but branch-ready.

Integrate by REST API, webhooks, batch CSV/SFTP, or the lender console. Designed for modern fintechs and real Ethiopian branch operations alike.

Integration

Connect the way that fits you

API
REST API

Submit a borrower and get back a score, band, factors, reason codes and a recommendation.

WH
Webhooks

Receive score and decision events for your loan-origination workflow.

CSV
CSV / SFTP batch

Score whole portfolios for MFIs, SACCO federations and legacy systems.

KEY
API keys

Hashed-at-rest partner keys with issuance and revocation.

SBX
Sandbox

OpenAPI, Postman collection and sample data to build against before go-live.

BR
Branch console

No-API path: review screens for branches that need to decide today.

Go live in three steps
  1. 1Get keys & sandboxIssue a partner API key and explore the OpenAPI + Postman sandbox.
  2. 2IntegrateCall the score endpoint or wire up CSV/SFTP and webhooks for your flow.
  3. 3Ship with governanceEvery call returns reason codes and writes an audit row — production-ready by default.
Quickstart

One POST. One JSON envelope. Every field is auditable.

Every response is wrapped in {success, data}. The score includes the Decision Layer fields (PD, recommended limit, recommended tenor, decision, reasons, fraud and review flags) and the weights_source so you know exactly which policy version produced the number.

Request
curl -X POST \
  https://api.duruj.io/api/v1/credit-scores/calculate \
  -H "Authorization: Bearer eyJhbGc..." \
  -H "Content-Type: application/json" \
  -d '{
    "person_id": "9daa0120-c1ed-4932-b2ad-9398b27d4af7",
    "score_type": "composite",
    "product_type": "general"
  }'
Response
{
  "success": true,
  "data": {
    "score": 742,
    "risk_tier": "Green",
    "risk_level": "Low",
    "default_probability": 0.038,
    "recommended_limit": 50000,
    "recommended_tenor_months": 12,
    "decision": "Approve",
    "reasons": [
      "Banking: long bank history (6.2 years)",
      "Mobile money: consistent wallet deposits",
      "Behavioral: 8 positive events this year"
    ],
    "fraud_warning": false,
    "human_review_flag": false,
    "weights_source": "tenant:Acme Bank Default",
    "generated_at": "2026-06-10T19:35:17Z"
  }
}
Webhooks

Score and decision events delivered to your LOS.

Subscribe to score.generated, decision.recorded, outcome.ingested and policy.activated events. Every payload is HMAC-signed; retries follow exponential backoff for non-2xx responses.

POST · score.generated
POST https://yourbank.com/duruj-webhook
X-Duruj-Signature: sha256=<hmac>

{
  "event": "score.generated",
  "event_id": "evt_01HA...",
  "occurred_at": "2026-06-10T19:35:17Z",
  "data": {
    "credit_score_id": "8c739768-...",
    "person_id": "9daa0120-...",
    "organization_id": "b4fb9452-...",
    "score": 742,
    "decision": "Approve",
    "policy_version": 17
  }
}
Integration paths

Pick the path that fits your stack.

Fintech lenders, modern banks
REST API

Sub-second scoring per applicant. OpenAPI 3.1 spec, Postman collection.

MFIs, SACCO federations
CSV / SFTP

Drop a tape, get a scored tape back. Per-row reasons + validation errors.

Loan origination platforms
Webhooks

React to score, decision and policy events. HMAC-signed, retried.

Branches without API capability
Branch console

Loan officer enters an applicant; the portal returns the same recommendation.

Build on DurujScore.

Get sandbox access and integrate explainable scoring into your origination flow.