> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sahlfinancial.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sahl documentation

> Open finance for banks and lenders in Morocco and francophone Africa: bank connections, document OCR, verification, risk assessment and scoring.

<div className="mx-auto max-w-5xl px-5 pt-16 pb-20 sm:px-8">
  <section className="max-w-2xl">
    <p className="mb-4 text-sm font-medium text-[#1B5E3B] dark:text-[#06DC7F]">Documentation</p>
    <h1 className="text-4xl font-semibold tracking-tight text-gray-950 dark:text-white sm:text-5xl">Open finance for banks and lenders</h1>
    <p className="mt-5 text-lg leading-relaxed text-gray-600 dark:text-gray-400">Sahl connects bank accounts, reads financial documents, verifies clients and assesses risk, for banks and lenders in Morocco and francophone Africa. Bank connections come first. New workspaces start in the sandbox, on test data.</p>

    <div className="mt-8 flex flex-wrap gap-3">
      <a href="/quickstart" className="sahl-btn inline-flex items-center bg-[#1B5E3B] px-5 py-2.5 text-sm font-medium text-white hover:bg-[#02A45E]">Quickstart</a>
      <a href="/api-reference/introduction" className="sahl-btn inline-flex items-center border border-gray-300 px-5 py-2.5 text-sm font-medium text-gray-900 hover:border-[#02A45E] dark:border-gray-700 dark:text-gray-100">Partner API reference</a>
      <a href="/console-api/overview" className="sahl-btn inline-flex items-center border border-gray-300 px-5 py-2.5 text-sm font-medium text-gray-900 hover:border-[#02A45E] dark:border-gray-700 dark:text-gray-100">Console API reference</a>
      <a href="https://sahlfinancial.com/use-cases" className="sahl-btn inline-flex items-center border border-[#02A45E] px-5 py-2.5 text-sm font-medium text-[#1B5E3B] hover:bg-[#02A45E] hover:text-white dark:text-[#06DC7F]">Upgrade for real bank connections</a>
    </div>
  </section>

  <section className="mt-14 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
    <a href="/quickstart" className="sahl-card sahl-reveal block p-5 no-underline">
      <h3 className="text-base font-semibold text-gray-950 dark:text-white">Quickstart</h3>
      <p className="mt-2 text-sm leading-relaxed text-gray-600 dark:text-gray-400">Read a document and get a verdict, in cURL, JavaScript and Python.</p>
    </a>

    <a href="/guides/open-banking" className="sahl-card sahl-reveal block p-5 no-underline">
      <h3 className="text-base font-semibold text-gray-950 dark:text-white">Bank connections</h3>
      <p className="mt-2 text-sm leading-relaxed text-gray-600 dark:text-gray-400">What a connection is, its statuses, transactions, analysis and the sandbox simulation.</p>
    </a>

    <a href="/bank-coverage" className="sahl-card sahl-reveal block p-5 no-underline">
      <h3 className="text-base font-semibold text-gray-950 dark:text-white">Bank coverage</h3>
      <p className="mt-2 text-sm leading-relaxed text-gray-600 dark:text-gray-400">The institutions Sahl lists, by country.</p>
    </a>

    <a href="/test-in-sandbox" className="sahl-card sahl-reveal block p-5 no-underline">
      <h3 className="text-base font-semibold text-gray-950 dark:text-white">Test in the sandbox</h3>
      <p className="mt-2 text-sm leading-relaxed text-gray-600 dark:text-gray-400">Create a key and run every call from this site. 15 minutes.</p>
    </a>
  </section>

  <section className="mt-16">
    <h2 className="text-2xl font-semibold tracking-tight text-gray-950 dark:text-white">What Sahl covers</h2>

    <div className="mt-5 overflow-x-auto border border-gray-200 dark:border-gray-800" style={{borderRadius: "0.25rem"}}>
      <table className="w-full text-left text-sm">
        <thead className="bg-gray-100/70 text-gray-700 dark:bg-white/5 dark:text-gray-300">
          <tr><th className="px-4 py-3 font-medium">Capability</th><th className="px-4 py-3 font-medium">What it does</th><th className="px-4 py-3 font-medium">Availability</th><th className="px-4 py-3 font-medium">Where</th></tr>
        </thead>

        <tbody className="text-gray-700 dark:text-gray-300">
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Sahl Connect: bank connections</td><td className="px-4 py-3">Customer authorises at their own bank; account, balance and transaction data.</td><td className="px-4 py-3">Sandbox simulation today. Console and, with an API key, <code>/v1/partner/bank-connections</code> (scopes <code>bank:read</code>, <code>bank:write</code>). Growth plan, switched on per workspace by Sahl. Until then production answers 409.</td><td className="px-4 py-3"><a href="/guides/open-banking">Bank connections guide</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Sahl Connect: wallets and fintechs</td><td className="px-4 py-3">Mobile money and digital wallets beyond banks.</td><td className="px-4 py-3">In preparation</td><td className="px-4 py-3">No route</td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Consent dashboard, drop-in widget, automatic reconnection</td><td className="px-4 py-3">Customer sees and revokes access; embeddable connect flow.</td><td className="px-4 py-3">In preparation</td><td className="px-4 py-3">No published route</td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Financial documents (Sahl OCR)</td><td className="px-4 py-3">Reads payslips, bank statements and identity documents into fields, with checks per document.</td><td className="px-4 py-3">Partner API with key, and Console</td><td className="px-4 py-3"><code>POST /v1/kyc/extract</code>, <a href="/guides/ocr-documents">guide</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Verification: identity</td><td className="px-4 py-3">Verdict for a client profile and its documents.</td><td className="px-4 py-3">Partner API with key</td><td className="px-4 py-3"><code>POST /v1/kyc/verify</code>, <a href="/guides/verification">guide</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Verification: income from transactions</td><td className="px-4 py-3">Income and employment read from bank transactions.</td><td className="px-4 py-3">In preparation</td><td className="px-4 py-3">Needs live bank data</td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">eID</td><td className="px-4 py-3">Remote ID and selfie check, status and PDF report. Canadian clients only today.</td><td className="px-4 py-3">Partner API with key</td><td className="px-4 py-3"><code>POST /v1/kyc/eid</code>, <a href="/guides/eid">guide</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Insights: cash-flow analysis</td><td className="px-4 py-3">Categorised transactions, income regularity, risk flags, savings rate, debt ratio.</td><td className="px-4 py-3">Console, on sandbox data</td><td className="px-4 py-3"><code>GET /v1/bank-connections/{"{id}"}/analysis</code></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Risk assessment</td><td className="px-4 py-3">The verdict plus risk tolerance, capacity, compliance risk and suitability.</td><td className="px-4 py-3">Partner API with key</td><td className="px-4 py-3"><code>POST /v1/kyc/assess</code>, <a href="/guides/risk-assessment">guide</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Scoring and scoring policies</td><td className="px-4 py-3">Credit score on a case, and the policies that define it.</td><td className="px-4 py-3">Console. By API key: in preparation</td><td className="px-4 py-3"><a href="/guides/scoring">Scoring</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Cases</td><td className="px-4 py-3">Group documents, connections and decisions for one applicant.</td><td className="px-4 py-3">Console</td><td className="px-4 py-3"><a href="/console-api/overview">Console API reference</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Webhooks</td><td className="px-4 py-3">Signed events to your URL. Endpoints are managed in the console.</td><td className="px-4 py-3">Receive: Partner API with key. Manage: Console</td><td className="px-4 py-3"><a href="/guides/webhooks">guide</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">API keys</td><td className="px-4 py-3">Create, scope and revoke keys.</td><td className="px-4 py-3">Console</td><td className="px-4 py-3"><a href="/authentication">Authentication</a></td></tr>
          <tr className="border-t border-gray-200 dark:border-gray-800"><td className="px-4 py-3 font-medium">Ask Sahl</td><td className="px-4 py-3">Assistant inside the console.</td><td className="px-4 py-3">Console</td><td className="px-4 py-3">No Partner API route</td></tr>
        </tbody>
      </table>
    </div>

    <p className="mt-4 text-sm text-gray-600 dark:text-gray-400">Availability is read from the API code. "Partner API with key" means an API key with the scope calls it. "Console" means a signed-in member uses it in the console. "In preparation" means no route does it yet. No live bank data provider is wired in the API today, so bank data in the console is a sandbox simulation. The <a href="/console-api/overview" className="underline">Console API reference</a> documents the console routes for information: they need a login session, not an API key. See also <a href="/bank-coverage" className="underline">Bank coverage</a> and <a href="/coverage" className="underline">Coverage</a>.</p>
  </section>

  <section className="mt-16">
    <h2 className="text-2xl font-semibold tracking-tight text-gray-950 dark:text-white">Run your first call</h2>
    <p className="mt-2 text-gray-600 dark:text-gray-400">Set SAHL\_API\_KEY to a sandbox key, then read a test Moroccan national ID card (CIN).</p>

    <div className="mt-5">
      ```bash cURL theme={null}
      curl -X POST https://app.sahlfinancial.com/api/v1/kyc/extract \
        -H "Authorization: Bearer $SAHL_API_KEY" \
        -F "files=@cin-test.jpg" \
        -F "doc_type=national_id" \
        -F "reference=client-0001" \
        -F "environment=sandbox" > extracted.json
      ```
    </div>
  </section>

  <section className="mt-16 flex flex-wrap gap-x-8 gap-y-3 border-t border-gray-200 pt-8 text-sm dark:border-gray-800">
    <a href="/changelog">Changelog</a>
    <a href="/postman">Postman</a>
    <a href="/go-live">Go-live checklist</a>
    <a href="mailto:contact@sahlfinancial.com">Developer support: [contact@sahlfinancial.com](mailto:contact@sahlfinancial.com)</a>
  </section>
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.