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

# Traitement de documents avec des appels d’API séparés

> Traitez des documents dans ABBYY Vantage avec des appels distincts à l’API : créez une transaction vide, ajoutez des fichiers, lancez le traitement, surveillez l’état et téléchargez les résultats.

export const VantageRegion = ({children}) => {
  const STORAGE_KEY = "abbyy.vantage.region";
  const REGIONS = [{
    code: "eu",
    label: "Europe"
  }, {
    code: "us",
    label: "North America"
  }, {
    code: "au",
    label: "Australia / Asia-Pacific"
  }];
  const [region, setRegion] = useState("eu");
  const [open, setOpen] = useState(false);
  const containerRef = useRef(null);
  const dropdownRef = useRef(null);
  function safeGetSavedRegion() {
    try {
      const saved = typeof window !== "undefined" ? window.localStorage.getItem(STORAGE_KEY) : null;
      const valid = new Set(REGIONS.map(r => r.code));
      return saved && valid.has(saved) ? saved : "eu";
    } catch {
      return "eu";
    }
  }
  function safeSetSavedRegion(code) {
    try {
      if (typeof window !== "undefined") {
        window.localStorage.setItem(STORAGE_KEY, code);
      }
    } catch {}
  }
  function dispatchRegionChanged(code) {
    try {
      if (typeof window !== "undefined") {
        window.dispatchEvent(new CustomEvent("abbyy:region-changed", {
          detail: {
            code
          }
        }));
      }
    } catch {}
  }
  function replaceRegionInString(text, currentRegion) {
    if (typeof text !== "string") return text;
    const hostRegex = /https:\/\/vantage-(eu|us|au)\.abbyy\.com/gi;
    const tokenRegex = /https:\/\/vantage-\[region\]\.abbyy\.com/gi;
    const bareHostRegex = /vantage-(eu|us|au)\.abbyy\.com/gi;
    const bareTokenRegex = /vantage-\[region\]\.abbyy\.com/gi;
    return text.replace(hostRegex, `https://vantage-${currentRegion}.abbyy.com`).replace(tokenRegex, `https://vantage-${currentRegion}.abbyy.com`).replace(bareHostRegex, `vantage-${currentRegion}.abbyy.com`).replace(bareTokenRegex, `vantage-${currentRegion}.abbyy.com`);
  }
  useEffect(() => {
    setRegion(safeGetSavedRegion());
  }, []);
  useEffect(() => {
    const root = containerRef.current;
    if (!root) return;
    const anchors = root.querySelectorAll("a[href]");
    anchors.forEach(a => {
      const href = a.getAttribute("href");
      if (href) {
        const next = replaceRegionInString(href, region);
        if (next !== href) {
          a.setAttribute("href", next);
        }
      }
    });
    const walker = typeof document !== "undefined" ? document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null) : null;
    if (walker) {
      const toUpdate = [];
      let node = walker.nextNode();
      while (node) {
        const updated = replaceRegionInString(node.nodeValue, region);
        if (updated !== node.nodeValue) {
          toUpdate.push([node, updated]);
        }
        node = walker.nextNode();
      }
      toUpdate.forEach(([textNode, value]) => {
        textNode.nodeValue = value;
      });
    }
  }, [region, children]);
  useEffect(() => {
    const root = containerRef.current;
    if (!root) return;
    const anchors = root.querySelectorAll("a[href]");
    anchors.forEach(a => {
      a.style.fontWeight = "600";
      a.style.textDecoration = "underline";
      a.style.textUnderlineOffset = "2px";
    });
  }, [region, children]);
  useEffect(() => {
    const onRegionChanged = evt => {
      const code = evt && evt.detail && evt.detail.code;
      if (!code || code === region) return;
      setRegion(code);
    };
    if (typeof window !== "undefined") {
      window.addEventListener("abbyy:region-changed", onRegionChanged);
    }
    return () => {
      if (typeof window !== "undefined") {
        window.removeEventListener("abbyy:region-changed", onRegionChanged);
      }
    };
  }, [region]);
  useEffect(() => {
    const onClickAway = e => {
      if (!dropdownRef.current) return;
      if (!dropdownRef.current.contains(e.target)) {
        setOpen(false);
      }
    };
    document.addEventListener("click", onClickAway, true);
    return () => document.removeEventListener("click", onClickAway, true);
  }, []);
  const onSelect = code => {
    setRegion(code);
    safeSetSavedRegion(code);
    dispatchRegionChanged(code);
    setOpen(false);
  };
  const current = REGIONS.find(r => r.code === region) || REGIONS[0];
  return <div className="not-prose">
      <div className="mb-4 inline-flex items-center gap-2" ref={dropdownRef}>
        <span className="text-sm text-zinc-950/80 dark:text-white/80">Tenant Region:</span>
        <div className="relative">
          <button type="button" aria-haspopup="listbox" aria-expanded={open ? "true" : "false"} onClick={() => setOpen(v => !v)} className="h-8 px-3 rounded-md bg-zinc-900/5 dark:bg-white/5 border border-zinc-950/20 dark:border-white/20 text-sm inline-flex items-center gap-2">
            <span className="text-zinc-950 dark:text-white">{current.label}</span>
            <svg width="8" height="24" viewBox="0 -9 3 24" className="transition-transform text-gray-400 overflow-visible dark:text-gray-600 ml-auto" style={{
    transform: open ? "rotate(270deg)" : "rotate(90deg)"
  }}>
              <path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"></path>
            </svg>
          </button>
          {open ? <div role="listbox" className="absolute z-50 left-full top-0 ml-2 w-56 rounded-xl border border-zinc-950/20 dark:border-white/20 bg-white dark:bg-zinc-900 shadow-lg p-2">
              {REGIONS.map(r => {
    const selected = r.code === region;
    return <button key={r.code} type="button" role="option" aria-selected={selected ? "true" : "false"} onClick={() => onSelect(r.code)} className={"w-full flex items-center justify-between px-3 py-2 rounded-lg text-sm hover:bg-zinc-950/5 dark:hover:bg-white/10 text-zinc-950 dark:text-white" + (selected ? " font-medium" : "")}>
                    <span style={selected ? {
      color: "#ff2038"
    } : undefined}>{r.label}</span>
                    <span className={selected ? "ml-3" : "ml-3 invisible"} style={selected ? {
      color: "#ff2038"
    } : undefined}>✓</span>
                  </button>;
  })}
            </div> : null}
        </div>
      </div>
      <div ref={containerRef} className="prose dark:prose-invert max-w-none">{children}</div>
    </div>;
};

Un scénario typique de traitement de documents à l'aide d'appels d’API séparés (pour créer une transaction, charger un fichier et démarrer une transaction) comprend les étapes suivantes :

1. [Réception d’une liste de toutes les compétences disponibles](#receiving-a-list-of-all-available-skills)
2. [Création d’une transaction vide](#creating-an-empty-transaction)
3. [Ajout d’un ensemble de fichiers à traiter dans la transaction](#adding-a-set-of-files-to-be-processed-in-the-transaction)
4. [Démarrage de la transaction](#starting-the-transaction)
5. [Suivi de l’état de la transaction](#monitoring-the-transaction-status)
6. [Téléchargement des fichiers source et des fichiers de résultat](#downloading-source-files-and-result-files)

Chaque requête envoyée au serveur doit inclure des informations d’authentification (par exemple un jeton d’accès). Pour plus d’informations, consultez [Authentication](/fr/vantage/developer/authentication/authentication).

<div id="receiving-a-list-of-all-available-skills">
  ### Récupérer la liste de toutes les compétences disponibles
</div>

Pour ce faire, envoyez une requête `GET` à la ressource `skills` :

<VantageRegion>
  ```
  GET https://vantage-us.abbyy.com/api/publicapi/v1/skills
  ```
</VantageRegion>

Exécutez la commande suivante :

<VantageRegion>
  ```bash theme={null}
  curl -X GET "https://vantage-us.abbyy.com/api/publicapi/v1/skills" \
  -H "Authorization: Bearer token"
  ```
</VantageRegion>

La réponse contiendra un fichier JSON semblable à ce qui suit :

```
[
   {
      "id": "Receipt",
      "name": "Receipt",
      "type": "Document"
   },
   {
      "id": "c4b26798-07cb-11eb-adc1-0242ac120002",
      "name": "NewClassifier",
      "type": "Classification"
   },
   {
      "id": "c4b26798-07cb-11eb-adc1-0242ac120002",
      "name": "Invoice",
      "type": "Document"
   }
]
```

Définissez l’identifiant de la compétence que vous allez utiliser. Des descriptions détaillées des compétences sont disponibles dans les compétences intégrées.

<div id="creating-an-empty-transaction">
  ### Création d’une transaction vide
</div>

Pour cela, envoyez la requête `POST` suivante à la ressource `transactions` :

<VantageRegion>
  ```
  POST https://vantage-us.abbyy.com/api/publicapi/v1/transactions
  ```
</VantageRegion>

Exécutez la commande suivante :

<VantageRegion>
  ```bash theme={null}
  curl -X POST "https://vantage-us.abbyy.com/api/publicapi/v1/transactions" \
  -H "accept: */*" \
  -H "Authorization: Bearer token" \
  -H "Content-Type: application/json" \
  -d "{\"skillId\":\"123\"}"
  ```
</VantageRegion>

Après la création réussie d’une transaction vide, vous recevrez une réponse contenant l’identifiant de la transaction :

```
{
   "transactionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
```

<div id="adding-a-set-of-files-to-be-processed-in-the-transaction">
  ### Ajout d’un ensemble de fichiers à traiter dans la transaction
</div>

<Info>
  Le nombre maximal de fichiers dans une transaction est de 1 000.
</Info>

Un ensemble de fichiers peut être ajouté de deux manières :

* [Directement à la transaction](#adding-files-directly-to-the-transaction)
* [À un Document, puis ajouter ce Document à la transaction](#adding-files-to-a-document)

<div id="adding-files-directly-to-the-transaction">
  #### Ajout de fichiers directement à la transaction
</div>

Pour ce faire, envoyez une requête `POST` vers la ressource `transactions/<transaction-id>/files` :

<VantageRegion>
  ```
  POST https://vantage-us.abbyy.com/api/publicapi/v1/transactions/id-transaction/files
  ```
</VantageRegion>

<VantageRegion>
  Dans le corps de la requête, envoyez le fichier à traiter. Pour plus d’informations sur les paramètres disponibles pour la personnalisation des fichiers, consultez la [référence de l’API](https://vantage-us.abbyy.com/api/swagger).
</VantageRegion>

Exécutez la commande suivante :

<VantageRegion>
  ```bash theme={null}
  curl -X POST "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/files/" \
  -H "Authorization: Bearer token" \
  -F "Files=@Invoice07.jpg; type=image/jpeg"
  ```
</VantageRegion>

En conséquence, vous recevrez une réponse contenant la liste des fichiers ajoutés et leurs identifiants. Vous pouvez ajouter autant de fichiers que nécessaire en répétant cet appel autant de fois que nécessaire.

Options supplémentaires pour le chargement des fichiers :

* [Modification des images ajoutées](/fr/vantage/developer/processing-documents/editing-added-images)
* [Organisation des fichiers et des documents](/fr/vantage/developer/processing-documents/ordering-files-and-docs)

<div id="adding-files-to-a-document">
  #### Ajout de fichiers à un document
</div>

Commencez par créer un document en envoyant une requête `POST` à la ressource `transactions/<transaction-id>/documents` :

<VantageRegion>
  ```
  POST https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/documents
  ```
</VantageRegion>

<VantageRegion>
  ```bash theme={null}
  curl -X POST "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/documents/" \
  -H "Authorization: Bearer token" \
  -H "Content-Type: application/json-patch+json"
  ```
</VantageRegion>

Vous recevrez alors une réponse contenant l’identifiant du document.

Ajoutez ensuite des fichiers au document en envoyant une requête `POST` à la ressource `transactions/<transaction-id>/documents/<document-id>/sourceFiles` :

<VantageRegion>
  ```
  POST https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/documents/document-id/sourceFiles
  ```
</VantageRegion>

<VantageRegion>
  ```bash theme={null}
  curl -X POST "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/documents/document-id/sourceFiles/" \
  -H "Authorization: Bearer token" \
  -F "Files=@Invoice07.jpg; type=image/jpeg"
  ```
</VantageRegion>

<div id="starting-the-transaction">
  ### Démarrer la transaction
</div>

Pour démarrer la transaction avec la compétence et les fichiers spécifiés, envoyez la requête `POST` suivante à la ressource `transactions/<transaction-id>/start` :

<VantageRegion>
  ```
  POST https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/start
  ```
</VantageRegion>

<VantageRegion>
  ```bash theme={null}
  curl -X POST "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/start" \
  -H "accept: */*" \
  -H "Authorization: Bearer token" \
  -d ""
  ```
</VantageRegion>

<div id="monitoring-the-transaction-status">
  ### Suivi du statut de la transaction
</div>

Pour commencer à surveiller le statut de la transaction à l’aide d’une boucle avec un court délai d’attente (nous ne recommandons pas de vérifier le statut plus d’une fois par seconde), envoyez une requête `GET` à la ressource `transactions/<transaction_id>` en incluant l’identifiant de la transaction dans l’URI de la requête :

<VantageRegion>
  ```
  GET https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id
  ```
</VantageRegion>

<VantageRegion>
  ```bash theme={null}
  curl -X GET "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id" \
  -H "Authorization: Bearer token"
  ```
</VantageRegion>

La réponse ressemblera à ce qui suit :

```
{
   "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
   "status": "Processing", 
   "manualReviewLink": "https://vantage-us.abbyy.com/api/publicapi/v1/verify?documentIds=9838448d-72ae-4e9a-b071-2bb16f732e46",
   "sourceFiles": [
      {
         "id": "7b2eed6f-3fdd-43b9-a178-7211d0a8d5bb",
         "name": "Invoice07.JPG"
      }
   ]
}
```

Dans la réponse :

* Si la valeur de la clé **status** est définie sur :
  * **New** — la transaction est créée, mais n’est pas actuellement en cours.
  * **Processing** — la transaction a démarré, mais les résultats ne sont pas encore prêts.
  * **Processed** — la transaction a été traitée avec succès, et vous pourrez télécharger les résultats.
  * **Failed** — la transaction a échoué.
  * **Canceled** — la transaction a été annulée.
* La clé **manualReviewLink** contiendra un lien vers l’interface web du client de relecture manuelle et un jeton d’accès Vantage, si une relecture manuelle est requise. Ce lien et ce jeton peuvent être utilisés pour relire et corriger les résultats de classification et d’extraction de champs d’une transaction donnée. Tant que la relecture n’est pas terminée, la valeur de la clé **status** sera définie sur **Processing**. Le lien fourni est valide pendant 168 heures, après quoi un nouveau lien doit être créé et obtenu pour une nouvelle période de 168 heures à l’aide de la même méthode. Pour en savoir plus, consultez [Intégration de la relecture manuelle](/fr/vantage/developer/integrating-manual-review).

<Info>
  Les utilisateurs autorisés via ce lien ne peuvent ni afficher ni modifier d’autres documents ou transactions.
</Info>

Pour une Compétence de document, la réponse ressemblera maintenant à ce qui suit :

```
{
   "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
   "status": "Processed",
   "documents": [
      {
         "id": "9838448d-72ae-4e9a-b071-2bb16f732e46",
         "resultFiles": [
            {
               "fileId": "3a3e6245-48e1-489a-9fef-a10b5ba28515",
               "type": "Json"
            }
         ],
         "businessRulesErrors": []
      }
   ],
   "sourceFiles": [
      {
         "id": "7b2eed6f-3fdd-43b9-a178-7211d0a8d5bb",
         "name": "Invoice07.jpg"
      }
   ]
}
```

Dans le tableau **documents**, chaque document possède un tableau **resultFiles**. Utilisez ce tableau pour obtenir les valeurs **fileId**. Le format des fichiers de sortie est défini par la compétence que vous utilisez. Actuellement, toutes les compétences renvoient les champs extraits au [format JSON](/fr/vantage/developer/output/json/json-output).

Pour une Skill de classification, la réponse reçue une fois les documents traités ressemblera à ceci :

```
{
   "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
   "status": "Processed",
   "documents": [
      {
         "id": "9838448d-72ae-4e9a-b071-2bb16f732e46",
         "classification": {
            "isResultClassConfident": true,
            "resultClass": "Invoice",
            "classConfidences": [
               {
                  "class": "Invoice",
                  "confidence": 89
               },
               {
                  "class": "PurchaseOrder",
                  "confidence": 32
               }
            ]
         }
      }
   ],
   "sourceFiles": [
      {
         "id": "7b2eed6f-3fdd-43b9-a178-7211d0a8d5bb",
         "name": "Invoice07.jpg"
      }
   ]
}
```

Extrayez la classe du document à partir de la clé **resultClass** et vérifiez le niveau de confiance de chaque classe probable dans les clés **confidence**.

Pour une Compétence de processus, la réponse peut contenir tout ou partie des informations renvoyées pour les compétences Document et Classification, selon les stages disponibles dans la Compétence de processus.

<div id="downloading-source-files-and-result-files">
  ### Téléchargement des fichiers source et des fichiers de résultat
</div>

Une fois le traitement terminé, vous pouvez télécharger deux types de fichiers :

* **Fichiers source** — les fichiers d’origine que vous avez téléversés, renvoyés dans leur format binaire d’origine.
* **Fichiers de résultat** — la sortie du traitement : les données extraites, au [format JSON](/fr/vantage/developer/output/json/json-output) par défaut (le format de sortie est défini par la compétence).

<Info>
  Les fichiers source et les fichiers de résultat utilisent des points de terminaison différents et des identifiants de fichier différents :

  * **Fichier source** — `GET transactions/<transaction-id>/documents/<document-id>/sourceFiles/<file-id>/download`. L’ID du fichier provient de la réponse `GET transactions/<transaction-id>/documents` (`sourceFiles[].id`).
  * **Fichier de résultat** — `GET transactions/<transaction-id>/files/<file-id>/download`. L’ID du fichier provient du tableau `resultFiles` dans la réponse de [statut de la transaction](#monitoring-the-transaction-status) (`documents[].resultFiles[].fileId`).
</Info>

Pour obtenir la liste des documents avec leurs identifiants, envoyez une requête `GET` à la ressource `transactions/<transaction-id>/documents` et indiquez l’identifiant de la transaction :

<VantageRegion>
  ```
  GET https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/documents
  ```
</VantageRegion>

<VantageRegion>
  ```bash theme={null}
  curl -X GET "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/documents" \
  -H "Authorization: Bearer token"
  ```
</VantageRegion>

Par conséquent, vous recevrez la liste de tous les documents créés dans cette transaction. La réponse contient également les identifiants de ces documents, qui peuvent être nécessaires pour obtenir des informations détaillées sur des documents spécifiques.

<div id="source-files">
  #### Fichiers source
</div>

Pour télécharger un fichier source requis, envoyez une requête `GET` à la ressource `transactions/<transaction-id>/documents/<document-id>/sourceFiles/<file-id>/download` et indiquez les identifiants de la transaction, du document et du fichier (issus de la dernière réponse) :

<VantageRegion>
  ```
  GET https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/documents/document-id/sourceFiles/file-id/download
  ```
</VantageRegion>

Exécutez la commande suivante :

<VantageRegion>
  ```bash theme={null}
  curl -X GET "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/documents/document-id/sourceFiles/file-id/download" \
  -H "Authorization: Bearer token"
  ```
</VantageRegion>

La réponse contiendra le fichier au format binaire. Répétez cette étape pour tous vos fichiers source.

<div id="result-files">
  #### Fichiers de résultat
</div>

Pour télécharger un fichier de résultat, envoyez une requête `GET` à la ressource `transactions/<transaction-id>/files/<file-id>/download` et indiquez l’identifiant de la transaction ainsi que le `fileId` du fichier de résultat. Récupérez le `fileId` dans le tableau `resultFiles` renvoyé lors de la [surveillance du statut de la transaction](#monitoring-the-transaction-status) (chaque entrée comporte un `fileId` et un `type`, par exemple `Json`) :

<VantageRegion>
  ```
  GET https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/files/file-id/download
  ```
</VantageRegion>

Exécutez la commande suivante :

<VantageRegion>
  ```bash theme={null}
  curl -X GET "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/transaction-id/files/file-id/download" \
  -H "Authorization: Bearer token"
  ```
</VantageRegion>
