# Sahl Financial > Sahl Partner API documentation: KYC document reading, verification and eID checks. ## Guides ### Start - [Sahl documentation](https://docs.sahlfinancial.com/index.md): Open finance for banks and lenders in Morocco and francophone Africa: bank connections, document OCR, verification, risk assessment and scoring. - [Quickstart](https://docs.sahlfinancial.com/quickstart.md): Create a key, read a document, get a verdict. Three steps. - [Test in the sandbox](https://docs.sahlfinancial.com/test-in-sandbox.md): Create a key, run six requests from this site, and check the result in the console. About 15 minutes. - [Authentication](https://docs.sahlfinancial.com/authentication.md): Bearer API key with scopes. Create it in the console, send it from your server, rotate it with a grace period. - [Concepts](https://docs.sahlfinancial.com/concepts.md): Cases, references, environments, documents, policies and checks, and which ones the API reaches. ### Bank connections and open banking - [Bank connections and open banking](https://docs.sahlfinancial.com/guides/open-banking.md): What a bank connection is, how it works, its statuses, transactions and analysis, and what the sandbox simulates. - [Bank coverage](https://docs.sahlfinancial.com/bank-coverage.md): The banks and financial institutions in the Sahl registry, by country, and what the sandbox simulates for them. - [Bank connections](https://docs.sahlfinancial.com/guides/bank-connections.md): Console routes, and the partner API-key routes for workspaces Sahl has enabled (Growth plan). Production answers 409 until a bank data provider is live. ### Documents (OCR) - [Read documents](https://docs.sahlfinancial.com/guides/ocr-documents.md): POST /v1/kyc/extract: 1 to 5 files in, fields, per-document checks and a case out. - [Document types and fields](https://docs.sahlfinancial.com/guides/document-types.md): The document types the reader returns, the fields it reads, which fields each check needs, and the step keys. ### Verification and eID - [Verify a profile](https://docs.sahlfinancial.com/guides/verification.md): POST /v1/kyc/verify: the request, the three layers of checks, every check id, and how to read passed and flags. - [eID check](https://docs.sahlfinancial.com/guides/eid.md): Remote identity verification of a Canadian client: start, poll, read the result, download the report. ### Risk assessment and scoring - [Risk assessment](https://docs.sahlfinancial.com/guides/risk-assessment.md): POST /v1/kyc/assess: inputs, point tables, bands and the suitability rule, exactly as the code computes them. - [Scoring](https://docs.sahlfinancial.com/guides/scoring.md): Console product. No endpoint in the Partner API v0.2.0. ### Build - [How the calls fit together](https://docs.sahlfinancial.com/guides/workflow.md): extract, verify, assess and eID: what each call takes, what it returns, and what you pass on. - [Webhooks](https://docs.sahlfinancial.com/guides/webhooks.md): Four KYC events, signed with HMAC-SHA256, delivered at least once, up to 6 attempts. - [End-to-end walkthrough](https://docs.sahlfinancial.com/guides/walkthrough.md): A payslip and a Moroccan national ID (CIN) to a risk assessment: four calls, complete code in cURL, JavaScript and Python, and the output to expect. - [Recipes](https://docs.sahlfinancial.com/guides/recipes.md): Five real use cases with working code: loan file, account opening, income check, eID, and a field that was not read. - [Postman](https://docs.sahlfinancial.com/postman.md): Import a collection and a sandbox environment generated from openapi.json, then run the calls with built-in checks. ### Reference - [Errors](https://docs.sahlfinancial.com/errors.md): Every error body the Partner API returns, with status, cause and fix. - [Sandbox and production](https://docs.sahlfinancial.com/sandbox.md): One host, one key, an environment field. What the field changes and what it does not. - [Go live checklist](https://docs.sahlfinancial.com/go-live.md): Items to confirm before you send real client data. Each one is backed by the API's behaviour or by the console. - [Glossary](https://docs.sahlfinancial.com/glossary.md): Terms used in the API and in these docs. - [Security and data](https://docs.sahlfinancial.com/security.md): What the Partner API does with keys, files and data, as the code does it, and the principles Sahl publishes. ### Console only - [Console features](https://docs.sahlfinancial.com/console-features.md): What the Sahl console does, and for each feature whether the Partner API (API key) exposes it. Based on the API code, not on plans. - [Coverage](https://docs.sahlfinancial.com/coverage.md): Capability by availability: API key, console, or not available. No roadmap. ## Partner API ### Overview - [API reference](https://docs.sahlfinancial.com/api-reference/introduction.md): Six endpoints under /v1/kyc, one bearer key, one host, a playground on every page. ### KYC #### KYC - [Read documents](https://docs.sahlfinancial.com/api-reference/kyc/read-documents.md): Required scope: `kyc:extract`. - [Verify a profile](https://docs.sahlfinancial.com/api-reference/kyc/verify-a-profile.md): Required scope: `kyc:verify`. - [Verify and assess risk](https://docs.sahlfinancial.com/api-reference/kyc/verify-and-assess-risk.md): Required scope: `kyc:verify`. - [Start an eID check](https://docs.sahlfinancial.com/api-reference/kyc/start-an-eid-check.md): Required scope: `kyc:eid`. - [Get an eID check](https://docs.sahlfinancial.com/api-reference/kyc/get-an-eid-check.md): Required scope: `kyc:eid`. - [Download an eID report](https://docs.sahlfinancial.com/api-reference/kyc/download-an-eid-report.md): Required scope: `kyc:eid`. #### Bank connections (Growth) - [List bank connections](https://docs.sahlfinancial.com/api-reference/bank-connections-growth/list-bank-connections.md): Required scope: `bank:read`. - [Create a bank connection](https://docs.sahlfinancial.com/api-reference/bank-connections-growth/create-a-bank-connection.md): Required scope: `bank:write`. - [Count bank connections by status](https://docs.sahlfinancial.com/api-reference/bank-connections-growth/count-bank-connections-by-status.md): Required scope: `bank:read`. - [Get a bank connection](https://docs.sahlfinancial.com/api-reference/bank-connections-growth/get-a-bank-connection.md): Required scope: `bank:read`. - [Refresh a bank connection](https://docs.sahlfinancial.com/api-reference/bank-connections-growth/refresh-a-bank-connection.md): Required scope: `bank:write`. - [List the transactions of a bank connection](https://docs.sahlfinancial.com/api-reference/bank-connections-growth/list-the-transactions-of-a-bank-connection.md): Required scope: `bank:read`. - [Get the cash-flow analysis of a bank connection](https://docs.sahlfinancial.com/api-reference/bank-connections-growth/get-the-cash-flow-analysis-of-a-bank-connection.md): Required scope: `bank:read`. ## Console API ### Overview - [Console API](https://docs.sahlfinancial.com/console-api/overview.md): The routes the Sahl console calls with a signed-in user. Documented for reference. Not the Partner API, and not available with an API key. ### Bank connections - [Create a bank connection](https://docs.sahlfinancial.com/console-api/reference/bank-connections/create-a-bank-connection.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [List bank connections](https://docs.sahlfinancial.com/console-api/reference/bank-connections/list-bank-connections.md): **Who can call it:** Any signed-in member of the workspace. - [Count bank connections by status](https://docs.sahlfinancial.com/console-api/reference/bank-connections/count-bank-connections-by-status.md): **Who can call it:** Any signed-in member of the workspace. - [Get a bank connection](https://docs.sahlfinancial.com/console-api/reference/bank-connections/get-a-bank-connection.md): **Who can call it:** Any signed-in member of the workspace. - [Refresh a bank connection](https://docs.sahlfinancial.com/console-api/reference/bank-connections/refresh-a-bank-connection.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [List the transactions of a bank connection](https://docs.sahlfinancial.com/console-api/reference/bank-connections/list-the-transactions-of-a-bank-connection.md): **Who can call it:** Any signed-in member of the workspace. - [Get the cash-flow analysis of a bank connection](https://docs.sahlfinancial.com/console-api/reference/bank-connections/get-the-cash-flow-analysis-of-a-bank-connection.md): **Who can call it:** Any signed-in member of the workspace. ### Cases - [List cases](https://docs.sahlfinancial.com/console-api/reference/cases/list-cases.md): **Who can call it:** Any signed-in member of the workspace. - [Create a case](https://docs.sahlfinancial.com/console-api/reference/cases/create-a-case.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [Get a case](https://docs.sahlfinancial.com/console-api/reference/cases/get-a-case.md): **Who can call it:** Any signed-in member of the workspace. - [Update or decide a case](https://docs.sahlfinancial.com/console-api/reference/cases/update-or-decide-a-case.md): **Who can call it:** `tenant_admin`, `tenant_reviewer` or `platform_admin`. - [Score a case](https://docs.sahlfinancial.com/console-api/reference/cases/score-a-case.md): **Who can call it:** `tenant_admin`, `tenant_reviewer` or `platform_admin`. - [Upload documents onto a case](https://docs.sahlfinancial.com/console-api/reference/cases/upload-documents-onto-a-case.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [Attach uploaded documents to a case](https://docs.sahlfinancial.com/console-api/reference/cases/attach-uploaded-documents-to-a-case.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [Remove a document from a case](https://docs.sahlfinancial.com/console-api/reference/cases/remove-a-document-from-a-case.md): **Who can call it:** `tenant_admin`, `tenant_reviewer` or `platform_admin`. - [Get the fields of a case, merged across documents](https://docs.sahlfinancial.com/console-api/reference/cases/get-the-fields-of-a-case-merged-across-documents.md): **Who can call it:** Any signed-in member of the workspace. ### Documents - [Upload a document](https://docs.sahlfinancial.com/console-api/reference/documents/upload-a-document.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [List documents](https://docs.sahlfinancial.com/console-api/reference/documents/list-documents.md): **Who can call it:** Any signed-in member of the workspace. - [Get the upload limits](https://docs.sahlfinancial.com/console-api/reference/documents/get-the-upload-limits.md): **Who can call it:** Any signed-in member of the workspace. - [Get a document](https://docs.sahlfinancial.com/console-api/reference/documents/get-a-document.md): **Who can call it:** Any signed-in member of the workspace. - [Download the original file](https://docs.sahlfinancial.com/console-api/reference/documents/download-the-original-file.md): **Who can call it:** Any signed-in member of the workspace. - [Get the processing status of a document](https://docs.sahlfinancial.com/console-api/reference/documents/get-the-processing-status-of-a-document.md): **Who can call it:** Any signed-in member of the workspace. - [Get the OCR result of a document](https://docs.sahlfinancial.com/console-api/reference/documents/get-the-ocr-result-of-a-document.md): **Who can call it:** Any signed-in member of the workspace. - [Reprocess a document](https://docs.sahlfinancial.com/console-api/reference/documents/reprocess-a-document.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [Get a processing job](https://docs.sahlfinancial.com/console-api/reference/documents/get-a-processing-job.md): **Who can call it:** Any signed-in member of the workspace. ### Webhooks - [List the events you can subscribe to](https://docs.sahlfinancial.com/console-api/reference/webhooks/list-the-events-you-can-subscribe-to.md): **Who can call it:** Any signed-in member of the workspace. - [List recent deliveries of all endpoints](https://docs.sahlfinancial.com/console-api/reference/webhooks/list-recent-deliveries-of-all-endpoints.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [List webhook endpoints](https://docs.sahlfinancial.com/console-api/reference/webhooks/list-webhook-endpoints.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Create a webhook endpoint](https://docs.sahlfinancial.com/console-api/reference/webhooks/create-a-webhook-endpoint.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Get a webhook endpoint](https://docs.sahlfinancial.com/console-api/reference/webhooks/get-a-webhook-endpoint.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Update a webhook endpoint](https://docs.sahlfinancial.com/console-api/reference/webhooks/update-a-webhook-endpoint.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Delete a webhook endpoint](https://docs.sahlfinancial.com/console-api/reference/webhooks/delete-a-webhook-endpoint.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [List deliveries of one endpoint](https://docs.sahlfinancial.com/console-api/reference/webhooks/list-deliveries-of-one-endpoint.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Send a test ping](https://docs.sahlfinancial.com/console-api/reference/webhooks/send-a-test-ping.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. ### API keys - [List API keys](https://docs.sahlfinancial.com/console-api/reference/api-keys/list-api-keys.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Create an API key](https://docs.sahlfinancial.com/console-api/reference/api-keys/create-an-api-key.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Get the scopes this workspace may grant](https://docs.sahlfinancial.com/console-api/reference/api-keys/get-the-scopes-this-workspace-may-grant.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Get an API key](https://docs.sahlfinancial.com/console-api/reference/api-keys/get-an-api-key.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Update an API key](https://docs.sahlfinancial.com/console-api/reference/api-keys/update-an-api-key.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Revoke an API key](https://docs.sahlfinancial.com/console-api/reference/api-keys/revoke-an-api-key.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. - [Rotate an API key](https://docs.sahlfinancial.com/console-api/reference/api-keys/rotate-an-api-key.md): **Who can call it:** `tenant_admin`, `tenant_api_manager` or `platform_admin`. ### Scoring policies - [List scoring policies](https://docs.sahlfinancial.com/console-api/reference/scoring-policies/list-scoring-policies.md): **Who can call it:** Any signed-in member of the workspace. - [Create a scoring policy](https://docs.sahlfinancial.com/console-api/reference/scoring-policies/create-a-scoring-policy.md): **Who can call it:** `tenant_admin` or `platform_admin`. - [Update a scoring policy](https://docs.sahlfinancial.com/console-api/reference/scoring-policies/update-a-scoring-policy.md): **Who can call it:** `tenant_admin` or `platform_admin`. - [Delete a scoring policy](https://docs.sahlfinancial.com/console-api/reference/scoring-policies/delete-a-scoring-policy.md): **Who can call it:** `tenant_admin` or `platform_admin`. - [Activate a scoring policy](https://docs.sahlfinancial.com/console-api/reference/scoring-policies/activate-a-scoring-policy.md): **Who can call it:** `tenant_admin` or `platform_admin`. ### Flows - [List flow templates](https://docs.sahlfinancial.com/console-api/reference/flows/list-flow-templates.md): **Who can call it:** Any signed-in member of the workspace. - [List flows](https://docs.sahlfinancial.com/console-api/reference/flows/list-flows.md): **Who can call it:** Any signed-in member of the workspace. - [Create a flow](https://docs.sahlfinancial.com/console-api/reference/flows/create-a-flow.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [Get a flow](https://docs.sahlfinancial.com/console-api/reference/flows/get-a-flow.md): **Who can call it:** Any signed-in member of the workspace. - [Update a flow](https://docs.sahlfinancial.com/console-api/reference/flows/update-a-flow.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [Delete a flow](https://docs.sahlfinancial.com/console-api/reference/flows/delete-a-flow.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [Publish a flow](https://docs.sahlfinancial.com/console-api/reference/flows/publish-a-flow.md): **Who can call it:** `tenant_admin`, `tenant_reviewer`, `tenant_api_manager` or `platform_admin`. A `tenant_viewer` is read-only and gets 403. - [Validate a flow](https://docs.sahlfinancial.com/console-api/reference/flows/validate-a-flow.md): **Who can call it:** Any signed-in member of the workspace. - [Simulate a flow](https://docs.sahlfinancial.com/console-api/reference/flows/simulate-a-flow.md): **Who can call it:** Any signed-in member of the workspace. ## Changelog ### Changelog - [Changelog](https://docs.sahlfinancial.com/changelog.md): Partner API versions and documentation changes. ## OpenAPI Specs - [openapi](/openapi.json) - [openapi-console](/openapi-console.json) > The links below point to documentation indexes. Follow each `/_llms/` index recursively until you reach documentation pages. ## Indexes - [French (97 pages)](https://docs.sahlfinancial.com/_llms/fr.txt): Documentation for French. - [Arabic (34 pages)](https://docs.sahlfinancial.com/_llms/ar.txt): Documentation for Arabic. This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.