Credit infrastructure for the invisible economy.
A single REST API + Ed25519-signed webhooks. Pinned-date versioning. Typed SDKs for Node, Python, Go. Sandbox with thirty-plus canonical test sellers. Read the quickstart and ship in an afternoon.
1import Mola from "@mola/node";23const mola = new Mola({ apiKey: process.env.MOLA_KEY });45const report = await mola.scores.query({6 seller_id: "sel_a8x42",7 include: ["signals", "reasoning"],8});910console.log(report.score, report.tier, report.safe_loan);
The full Mola surface — every endpoint a credit team needs.
Sign up, confirm your work email, and claim a sandbox API key. No card required.
export MOLA_KEY=sk_sandbox_a8x42...
Official SDKs for Node, Python, Go. Or hit the REST surface directly with cURL.
pnpm add @mola/node# orpip install mola# orgo get github.com/mola/mola-go
Every sandbox key ships with thirty-plus canonical test sellers across all five tiers.
const r = await mola.scores.query({seller_id: "sel_test_001",});console.log(r.score, r.tier); // 724 4
Link every disbursement to its score via molascore_query_id. This powers the repayment feedback loop.
await mola.decisions.create({seller_id: "sel_test_001",molascore_query_id: r.id,outcome: "approved",amount_kobo: 52000000,});
One surface. Typed to the kobo.
REST + JSON. All money fields are integer kobo. Every request is idempotent via Idempotency-Key. Pinned via the Mola-Version header.
Returns the live score for a consented seller, the top positive and negative factors, and a human-readable reasoning trace.
1{2 "id": "mq_0x4f2a",3 "seller_id": "sel_a8x42",4 "score": 724,5 "tier": 4,6 "confidence": 0.89,7 "safe_loan_kobo": 520000008}
Every monetary value on the wire is an integer in the smallest-currency unit. Naira → kobo (× 100). No floating point. No locale ambiguity.
Typed clients. One command to install.
Push, not poll.
Every Mola event is streamed to your endpoint with an Ed25519 signature. 24-hour retry with exponential backoff. 30-day replay from the events endpoint.
1// Verify in Node — constant-time compare2import { verify } from "@mola/node/webhooks";34const ok = verify({5 payload: req.rawBody,6 signature: req.headers["mola-signature"],7 timestamp: req.headers["mola-timestamp"],8 secret: process.env.MOLA_WEBHOOK_SECRET,9});1011if (!ok) return res.status(400).end();
Test against real edge cases.
Thirty-plus canonical test sellers across every tier and every failure mode. One command to forward webhooks to localhost. A simulator CLI that advances sellers through time.
1# Forward webhooks to localhost2$ mola webhook forward --url http://localhost:3000/mola34# Advance sel_test_001 by 30 days5$ mola simulate time --seller sel_test_001 --days 3067# Inject a GSI-risk alert8$ mola simulate event --seller sel_test_028 \9 --type alert.gsi_risk
Encrypted on the wire. Auditable on the record.
Ship to production with confidence.
Every change, dated and pinnable.
Adverse action notices now support up to four DEON-compatible reason codes per decline. Backwards compatible — old callers still see two.
Search the Mola seller database by score range, category, revenue tier, location — returns only seller IDs that have consented to sharing with your lender_id.
HMAC-SHA256 is deprecated (sunsets 2026-09-01). Rotate to Ed25519 via the dashboard — we'll sign with both during the transition.
MCP fetch-plan parallelism. No API changes.
`molascore` → `score` on response bodies. Old field echoed until 2026-07-01.
Terms we use. Plainly.
Common questions.
Bureau scores need formal credit history — loans, cards, BNPL — to produce a number. Most Nigerian social sellers have none. Mola reads the alternative data their commerce naturally produces (bank narrations, IG engagement, buyer repeat rates) and turns that into a standardised 300–850 signal. Sellers with no bureau file still get a MolaScore.
Ship with other builders. In the open.
Ship against Mola in one afternoon.
Grab a sandbox key, clone the quickstart, and fire your first score query within five minutes. Production access follows a signed MoU.