> ## 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.

# Démarrage rapide

> Créez une clé, lisez un document, obtenez un verdict. Trois étapes.

L'API lit les documents (`extract`) et vérifie un profil (`verify`), deux des fonctions de Sahl pour les prêteurs et les banques. Les connexions bancaires et le scoring sont dans la console. C'est le flux réel de la v0.2.0. Pour un exemple plus long, voir le [guide pas à pas](/fr/guides/walkthrough), et pour essayer les appels sans code, voir [Tester dans le sandbox](/fr/test-in-sandbox).

## Avant de commencer

1. Faites activer l'API partenaire sur votre espace (activation par espace par Sahl, pas en libre-service) : [demandez un accès bac à sable](https://sahlfinancial.com/contact?type=demo).
2. Dans la console, ouvrez **Settings**, puis **API Keys**, puis **New key**. Cochez `kyc:extract` et `kyc:verify`. Copiez le secret une seule fois. Gardez-le sur votre serveur.

Définissez-le comme `SAHL_API_KEY`. Tous les exemples utilisent `https://app.sahlfinancial.com/api`, `environment=sandbox` et des données fictives. Utilisez une image de carte nationale d'identité (CIN) marocaine fictive de votre cru.

## 1. Lire un document

Envoyez 1 à 5 fichiers (JPEG, PNG, WebP, TIFF ou PDF, jusqu'à 30 Mo chacun). Ajoutez une `reference` (votre identifiant du client) pour enregistrer le résultat dans un dossier.

<CodeGroup>
  ```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
  ```

  ```javascript JavaScript theme={null}
  import { readFile } from "node:fs/promises";

  const form = new FormData();
  form.append("files", new Blob([await readFile("cin-test.jpg")], { type: "image/jpeg" }), "cin-test.jpg");
  form.append("doc_type", "national_id");
  form.append("reference", "client-0001");
  form.append("environment", "sandbox");

  const res = await fetch("https://app.sahlfinancial.com/api/v1/kyc/extract", {
    method: "POST",
    headers: { Authorization: `Bearer ${process.env.SAHL_API_KEY}` },
    body: form,
  });
  const extracted = await res.json();
  ```

  ```python Python theme={null}
  import os, requests

  with open("cin-test.jpg", "rb") as f:
      res = requests.post(
          "https://app.sahlfinancial.com/api/v1/kyc/extract",
          headers={"Authorization": f"Bearer {os.environ['SAHL_API_KEY']}"},
          files=[("files", ("cin-test.jpg", f, "image/jpeg"))],
          data={"doc_type": "national_id", "reference": "client-0001", "environment": "sandbox"},
      )
  extracted = res.json()
  ```
</CodeGroup>

La réponse contient `fields`, `documents`, `field_count`, `checks`, `reader_unavailable` et `policy`. Avec une `reference`, elle contient aussi `case_id` et `document_ids`. Voir [Lire des documents](/fr/guides/ocr-documents).

## 2. Vérifier le profil

Renvoyez les entrées de `documents` telles qu'elles sont arrivées, avec les champs dont vous disposez.

<CodeGroup>
  ```bash cURL theme={null}
  jq '{reference: "client-0001", environment: "sandbox", subject: "Test Client", kind: "individual",
       values: {first_name: "Test", last_name: "Client"}, documents: .documents}' extracted.json |
  curl -X POST https://app.sahlfinancial.com/api/v1/kyc/verify \
    -H "Authorization: Bearer $SAHL_API_KEY" \
    -H "Content-Type: application/json" \
    -d @-
  ```

  ```javascript JavaScript theme={null}
  const verdict = await fetch("https://app.sahlfinancial.com/api/v1/kyc/verify", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.SAHL_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      reference: "client-0001",
      environment: "sandbox",
      subject: "Test Client",
      kind: "individual",
      values: { first_name: "Test", last_name: "Client" },
      documents: extracted.documents,
    }),
  }).then((r) => r.json());
  console.log(verdict.passed, verdict.flags);
  ```

  ```python Python theme={null}
  verdict = requests.post(
      "https://app.sahlfinancial.com/api/v1/kyc/verify",
      headers={"Authorization": f"Bearer {os.environ['SAHL_API_KEY']}"},
      json={
          "reference": "client-0001",
          "environment": "sandbox",
          "subject": "Test Client",
          "kind": "individual",
          "values": {"first_name": "Test", "last_name": "Client"},
          "documents": extracted["documents"],
      },
  ).json()
  print(verdict["passed"], verdict["flags"])
  ```
</CodeGroup>

## 3. Lire le verdict

`passed` vaut true lorsqu'aucun contrôle critique n'a échoué. `critical_failures` et `flags` listent ce qui demande l'avis d'une personne. Un dossier sans pièce d'identité avec photo parmi ses documents échoue avec `required:photo_id`, donc envoyez les entrées de l'étape 1. `/v1/kyc/assess` prend le même corps et ajoute une évaluation du risque.

Grâce à la `reference`, le dossier, ses documents et le verdict sont enregistrés dans votre espace de travail, où vos équipes les voient sous Cases et Documents.

## Suite

<CardGroup cols={2}>
  <Card title="Vérifier un profil" icon="shield-check" href="/fr/guides/verification">Chaque contrôle, ce qu'il renvoie, comment lire passed et flags.</Card>
  <Card title="Erreurs" icon="triangle-exclamation" href="/fr/errors">Chaque statut et chaque code, avec la correction.</Card>
</CardGroup>


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