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

# Verarbeiten von Dokumenten mit einem einzelnen API-Aufruf

> Verarbeiten Sie Dokumente in ABBYY Vantage mit einem kombinierten API-Aufruf: Rufen Sie die Liste der Skills ab, erstellen und starten Sie einen Vorgang, überwachen Sie den Status und laden Sie Ergebnisdateien herunter.

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>;
};

Ein typisches Szenario für die Verarbeitung von Dokumenten mit einem einzelnen API-Aufruf (um einen Vorgang zu erstellen, eine Datei hochzuladen und den Vorgang zu starten) besteht aus den folgenden Schritten:

1. [Abrufen einer Liste aller verfügbaren Skills](#receiving-a-list-of-all-available-skills)
2. [Erstellen und Starten eines Vorgangs](#creating-and-starting-a-transaction)
3. [Überwachen des Vorgangsstatus](#monitoring-the-transaction-status)
4. [Herunterladen von Quelldateien und Ergebnisdateien](#downloading-source-files-and-result-files)

Jede Anfrage an den Server muss Authentifizierungsinformationen enthalten. Weitere Details finden Sie unter [Authentication](/de/vantage/developer/authentication/authentication).

Verwenden Sie dieses Szenario, wenn Sie nur eine Datei mit weniger als 30 MB Größe haben und die Bilder dieser Datei nicht bearbeiten müssen.

<div id="receiving-a-list-of-all-available-skills">
  ### Abrufen einer Liste aller verfügbaren Skills
</div>

Senden Sie dazu eine `GET`-Anfrage an die Ressource `skills`:

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

Führen Sie den folgenden Befehl aus:

**Für Windows:**

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

**Für Linux:**

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

Die Antwort enthält eine JSON-Datei, die etwa wie folgt aussieht:

**Antwort:**

```json theme={null}
[
   {
      "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"
   }
]
```

Legen Sie die Skill-ID fest, die Sie verwenden möchten. Detaillierte Beschreibungen der Skills finden Sie in den vordefinierten Skills.

<div id="creating-and-starting-a-transaction">
  ### Erstellen und Starten eines Vorgangs
</div>

Um einen Vorgang zum Verarbeiten einer hochgeladenen Datei mit einem angegebenen Skill zu erstellen und zu starten, senden Sie die folgende `POST`-Anfrage an die Ressource `transactions/launch?skillId=<skill-id>`:

<VantageRegion>
  ```
  POST https://vantage-us.abbyy.com/api/publicapi/v1/transactions/launch?skillId=skill-id
  ```
</VantageRegion>

Dadurch wird ein neuer Vorgang erstellt und sofort gestartet.

Führen Sie den folgenden Befehl aus:

**Für Windows:**

<VantageRegion>
  ```bash theme={null}
  curl -X POST "https://vantage-us.abbyy.com/api/publicapi/v1/transactions/launch?skillId=skill-id" \
  -H "accept: text/plain" \
  -H "Authorization: Bearer token" \
  -H "Content-Type: multipart/form-data" \
  -F "Files=@1page_invoiceUS_86.pdf;type=application/pdf"
  ```
</VantageRegion>

**Für Linux:**

<VantageRegion>
  ```bash theme={null}
  curl -X POST 'https://vantage-us.abbyy.com/api/publicapi/v1/transactions/launch?skillId=skill-id' \
  -H 'accept: text/plain' \
  -H 'Authorization: Bearer token' \
  -H 'Content-Type: multipart/form-data' \
  -F 'Files=@1page_invoiceUS_86.pdf;type=application/pdf'
  ```
</VantageRegion>

<Info>
  Wenn Sie die Datei in Vantage hochladen, werden alle folgenden Zeichen im Dateinamen durch einen Unterstrich ersetzt: `:/?#[]@!$&'()*+,;=\`. Der geänderte Dateiname wird sowohl in der Vantage-API als auch im Skill Monitor angezeigt.
</Info>

<div id="monitoring-the-transaction-status">
  ### Überwachung des Vorgangsstatus
</div>

Um den Vorgangsstatus in einer Schleife mit kurzem Timeout zu überwachen (wir empfehlen, den Status nicht häufiger als einmal pro Sekunde zu prüfen), senden Sie eine `GET`-Anfrage an die Ressource `transactions/<transaction_id>` mit der Vorgangs-ID im Anfrage-URI:

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

Führen Sie den folgenden Befehl aus:

**Für Windows:**

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

**Für Linux:**

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

Die Antwort sieht etwa wie folgt aus:

**Antwort:**

<VantageRegion>
  ```json theme={null}
  {
     "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"
        }
     ]
  }
  ```
</VantageRegion>

In der Antwort gilt Folgendes:

* Wenn der Wert des Schlüssels `status` auf `Processing` gesetzt ist, sind die Ergebnisse noch nicht verfügbar. Sobald sich der Status des Vorgangs in `Processed` ändert, können Sie die Ergebnisse herunterladen.
* Der Schlüssel `manualReviewLink` enthält einen Link zur Weboberfläche des Manual Review-Clients und ein Vantage-Zugriffstoken, falls eine manuelle Überprüfung erforderlich ist. Mit diesem Link und dem Token können die Klassifizierungs- und Feldextraktionsergebnisse eines bestimmten Vorgangs überprüft und korrigiert werden. Bis die Überprüfung abgeschlossen ist, bleibt der Wert des Schlüssels `status` auf `Processing` gesetzt. Der bereitgestellte Link ist 168 Stunden gültig. Danach sollte mit derselben Methode ein neuer Link für weitere 168 Stunden erstellt und abgerufen werden. Weitere Informationen finden Sie unter [Integration der manuellen Überprüfung](/de/vantage/developer/integrating-manual-review).

<Info>
  Benutzer, die über diesen Link autorisiert sind, können keine anderen Dokumente oder Vorgänge anzeigen oder ändern.
</Info>

Für einen Document-Skill sieht die Antwort dann etwa wie folgt aus:

**Antwort:**

<VantageRegion>
  ```json theme={null}
  {
     "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"
        }
     ]
  }
  ```
</VantageRegion>

Im Array `documents` verfügt jedes Dokument über ein Array `resultFiles`. Verwenden Sie dieses Array, um die Werte von `fileId` abzurufen. Das Format der Ausgabedateien wird durch den verwendeten Skill bestimmt. Derzeit geben alle Skills die extrahierten Felder im [JSON-Format](/de/vantage/developer/output/json/json-output) zurück.

Für einen Klassifizierungs‑Skill sieht die Antwort nach der Verarbeitung der Dokumente etwa wie folgt aus:

**Antwort:**

<VantageRegion>
  ```json theme={null}
  {
     "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"
        }
     ]
  }
  ```
</VantageRegion>

Extrahieren Sie die Klasse des Dokuments aus dem Schlüssel `resultClass` und prüfen Sie den Konfidenzwert jeder wahrscheinlichen Klasse in den jeweiligen Schlüsseln `confidence`.

Je nach den im Process-Skill verfügbaren Verarbeitungsstufen kann die Antwort bei einem Process-Skill alle oder nur einen Teil der Informationen enthalten, die für Dokument- und Klassifizierungs-Skills zurückgegeben werden.

<div id="downloading-source-files-and-result-files">
  ### Herunterladen von Quell- und Ergebnisdateien
</div>

Nach Abschluss der Verarbeitung können Sie zwei Arten von Dateien herunterladen:

* **Quelldateien** — die Originaldateien, die Sie hochgeladen haben und die in ihrem ursprünglichen Binärformat zurückgegeben werden.
* **Ergebnisdateien** — das Verarbeitungsergebnis: die extrahierten Daten, standardmäßig im [JSON-Format](/de/vantage/developer/output/json/json-output) (das Ausgabeformat wird durch den Skill festgelegt).

<Info>
  Für Quelldateien und Ergebnisdateien werden unterschiedliche Endpunkte und Datei-IDs verwendet:

  * **Quelldatei** — `GET transactions/<transaction-id>/documents/<document-id>/sourceFiles/<file-id>/download`. Die Datei-ID stammt aus der Antwort von `GET transactions/<transaction-id>/documents` (`sourceFiles[].id`).
  * **Ergebnisdatei** — `GET transactions/<transaction-id>/files/<file-id>/download`. Die Datei-ID stammt aus dem Array `resultFiles` in der Antwort für den [Vorgangsstatus](#monitoring-the-transaction-status) (`documents[].resultFiles[].fileId`).
</Info>

Um eine Liste von Dokumenten mit ihren Bezeichnern abzurufen, senden Sie eine `GET`-Anfrage an die Ressource `transactions/<transaction-id>/documents` und geben Sie die Vorgangs-ID an:

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

Führen Sie den folgenden Befehl aus:

**Für Windows:**

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

**Für Linux:**

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

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

Um eine benötigte Quelldatei herunterzuladen, senden Sie eine `GET`-Anfrage an die Ressource `transactions/<transaction-id>/documents/<document-id>/sourceFiles/<file-id>/download` und geben Sie die Bezeichner des Vorgangs, des Dokuments und der Datei an (aus der letzten Antwort):

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

Führen Sie den folgenden Befehl aus:

**Für Windows:**

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

**Für Linux:**

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

Die Antwort enthält die Datei im Binärformat. Wiederholen Sie diesen Schritt für alle Ihre Quelldateien.

<div id="result-files">
  #### Ergebnisdateien
</div>

Um eine Ergebnisdatei herunterzuladen, senden Sie eine `GET`-Anfrage an die Ressource `transactions/<transaction-id>/files/<file-id>/download` und geben Sie die Vorgangs-ID sowie die `fileId` der Ergebnisdatei an. Entnehmen Sie die `fileId` dem Array `resultFiles`, das beim [Überwachen des Vorgangsstatus](#monitoring-the-transaction-status) zurückgegeben wird (jeder Eintrag hat eine `fileId` und einen `type`, z. B. `Json`):

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

Führen Sie den folgenden Befehl aus:

**Für Windows:**

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

**Für Linux:**

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