Developers

Build credit, KYC & fraud checks on one API

Apenia is data-agnostic credit scoring, KYB/KYC and a learning engine behind a single REST API. Get an app key from the console, call an endpoint, ship.

Base URL

All requests are HTTPS. Public endpoints live under /v1.

url
https://verify.apenia.com

Authentication

Create an app in the console to get a key + secret, then send them as headers on every request.

http
X-App-Key: your_app_key
X-App-Secret: your_app_secret
Quickstart

Score a statement in one call

Send any mix of statements and supporting documents to /v1/assess and get back a single score with credit limits.

assess.sh
curl -X POST https://verify.apenia.com/v1/assess \
  -H "X-App-Key: $APENIA_APP_KEY" \
  -H "X-App-Secret: $APENIA_APP_SECRET" \
  -F "[email protected]" \
  -F "employment=payslip" \
  -F "collateral=logbook"

# → { "apenia_score": 712, "secured_limit": 250000,
#     "unsecured_limit": 60000, "next_best_doc": "bank_statement" }
API reference

Endpoints

A focused surface for lending: score, verify, pull bureau data, and teach the model over time.

Credit scoring & analysis

Turn statements and documents into a single, lender-ready apenia_score.

  • POST/v1/assess

    Data-agnostic assessment across any mix of MoMo/bank statements, collateral & employment → one apenia_score with secured/unsecured limits and next-best-doc prompts.

  • POST/v1/analyze

    Synchronous full analysis — ideal for typical statements.

  • POST/v1/documents

    Upload one or more financial documents, get a score, and fire an IPN callback to your app.

  • POST/v1/fuse

    Combine an M-Pesa and a bank statement into one score — verified salary lifts a Fuliza-heavy profile.

  • POST/v1/jobs

    Async path for large files — submit, then poll GET /v1/jobs/{id}.

  • POST/v1/trial

    Public trial flow that powers the embeddable widget — acknowledges instantly, emails the report.

Identity — KYC / KYB & liveness

Face-match, active liveness and voice enrolment, hosted or API-first.

  • POST/v1/kyc/verify

    Verify a person (identity) or a business (KYB). Feeds the assessment as identity confidence.

  • GET/v1/verify/challenge

    Issue a one-time active-liveness challenge — face actions plus a random phrase to read aloud.

  • POST/v1/verify/identity

    Match a selfie to an ID, run challenge-response liveness, and enrol a voiceprint.

  • POST/v1/verify/voice

    Standalone voice check — enrols on first use, then matches at loan time.

  • POST/v1/onboarding/links

    Create a one-time hosted onboarding URL to send to a customer; poll or receive an IPN for the result.

Credit bureau (CRB)

Consolidated TransUnion / Metropol reports, fused into the model.

  • POST/v1/crb/pull

    Pull a consolidated CRB report for a subject and feed it to the model.

  • GET/v1/crb/{subject_id}

    Retrieve the latest stored CRB report for a subject.

Subjects & the learning flywheel

One universal subject_id per person; feed signals & outcomes to sharpen scoring.

  • POST/v1/subjects/enroll

    Onboard a subject from existing data and get a universal subject_id.

  • GET/v1/subjects/{subject_id}

    The consolidated profile: identifiers, every assessment, and every signal.

  • POST/v1/signals/{kind}

    Feed a learning signal (repayment, collections, messaging, fraud…) so scoring gets more precise.

  • POST/v1/outcomes

    Report a loan outcome (repaid / defaulted / current) — feeds the calibration flywheel.

  • GET/v1/learning/stats

    How much the system has learned — assessments, default rate, corrections, calibration readiness.

  • GET/v1/usage

    Per-key call counts — your billing meter.

Drop-in widget

Add StatementAI+ to any site

No API secret required — the widget uses the public trial flow. Paste two lines, and customers can upload a statement and get a report by email.

Works on any HTML page — plain, React, or Next.js.

index.html
<div
  id="apenia-widget"
  data-api-base="https://verify.apenia.com"
  data-app="APENIA"
  data-app-url="https://apenia.com">
</div>
<script src="https://verify.apenia.com/widget.js" async></script>
app/page.tsx
// Next.js
import Script from "next/script";

<div id="apenia-widget"
  data-api-base="https://verify.apenia.com"
  data-app="APENIA"
  data-app-url="https://apenia.com" />
<Script
  src="https://verify.apenia.com/widget.js"
  strategy="afterInteractive" />

Ready to build with Apenia?

Spin up an app, grab your keys, and make your first scored request in minutes.