Sub-second scoring per applicant. OpenAPI 3.1 spec, Postman collection.
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.
Connect the way that fits you
Submit a borrower and get back a score, band, factors, reason codes and a recommendation.
Receive score and decision events for your loan-origination workflow.
Score whole portfolios for MFIs, SACCO federations and legacy systems.
Hashed-at-rest partner keys with issuance and revocation.
OpenAPI, Postman collection and sample data to build against before go-live.
No-API path: review screens for branches that need to decide today.
- 1Get keys & sandboxIssue a partner API key and explore the OpenAPI + Postman sandbox.
- 2IntegrateCall the score endpoint or wire up CSV/SFTP and webhooks for your flow.
- 3Ship with governanceEvery call returns reason codes and writes an audit row — production-ready by default.
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.
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"
}'{
"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"
}
}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 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
}
}Pick the path that fits your stack.
Drop a tape, get a scored tape back. Per-row reasons + validation errors.
React to score, decision and policy events. HMAC-signed, retried.
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.