Zum Inhalt springen

Fileverity-API-Dokumentation

Analysen

Bild- und Dokumentanalysen erstellen, das Ergebnis mit Prefer: wait abwarten oder per Polling abfragen, abbrechen, den PDF-Bericht herunterladen sowie Berichtsobjekt und Verifizierungsseite lesen.

Als Markdown ansehenAktualisiert am 2026-11-04

Eine Analyse ist eine einzelne Bild- oder Dokumentprüfung. Sie prüft eine hochgeladene Datei mit fvimg-2 (Bilder) oder fvdoc-3 (Dokumente). Laden Sie die Datei zuerst hoch (siehe Dateien) und erstellen Sie dann die Analyse.

Eine Produktübersicht mit Anfrage und Antwort finden Sie unter KI-generierte Bilder per API erkennen und Dokumentenfälschung per API erkennen.

Analyse erstellen

POST /analyses liefert das Analyseobjekt. Der Preis wird beim Erstellen der Analyse reserviert und freigegeben, wenn sie fehlschlägt oder abgebrochen wird.

FeldTypErforderlichBeschreibung
modelstringJafvimg-2 oder fvdoc-3 oder eine Snapshot-ID wie fvimg-2-2026-10-30.
filestringJaID einer hochgeladenen Datei.
metadataobjectNeinBis zu 16 String-Paare. Schlüssel bis zu 40 Zeichen, Werte bis zu 500. Wird mit der Analyse und in Webhooks zurückgegeben.
options.passwordstringNeinPasswort eines verschlüsselten Dokuments, bis zu 256 Zeichen.
options.localestringNeinSprache der Dokumentbefunde: en, fr, de, es, zh, vi oder ar. Standardwert en.
curl https://api.fileverity.com/v1/analyses \  -H "Authorization: Bearer $FILEVERITY_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: 0e5f6a64-52c2-4b36-9d0d-6f3d2f4c9a10" \  -d '{"model": "fvdoc-3", "file": "file_Pw3mY6zB8Hk2pQ4vN9sL1xR7", "metadata": {"order_id": "A-10492"}}'

Warten, Polling oder Webhooks

Das Erstellen liefert 202 mit status: processing. Das Ergebnis erhalten Sie auf drei Wegen:

  • Warten. Senden Sie Prefer: wait=N, wobei N bis zu 60 Sekunden betragen kann. Die Anfrage wird offen gehalten, bis die Analyse abgeschlossen ist oder N Sekunden vergangen sind. Eine abgeschlossene Analyse liefert 200; andernfalls erhalten Sie trotzdem 202. Der Antwort-Header preference-applied: wait=N bestätigt die Wartezeit.
  • Polling. Rufen Sie GET /analyses/{id} alle paar Sekunden auf, bis status nicht mehr processing ist.
  • Webhook. Abonnieren Sie analysis.completed und analysis.failed und rufen Sie die Analyse ab, sobald das Ereignis eintrifft. Siehe Webhooks.
let analysis = created;while (analysis.status === "processing") {  await new Promise((resolve) => setTimeout(resolve, 3000));  const response = await fetch("https://api.fileverity.com/v1/analyses/" + analysis.id, {    headers: { Authorization: "Bearer " + process.env.FILEVERITY_API_KEY },  });  analysis = await response.json();}
{  "id": "an_8Hk2pQ4vN9sL1xR7cW3mY6zB",  "object": "analysis",  "created": 1793700120,  "model": "fvdoc-3-2026-11-03",  "livemode": true,  "status": "processing",  "file": {    "name": "contract.pdf",    "bytes": 18874368,    "format": "pdf"  },  "report_id": null,  "report_url": null,  "summary": null,  "result": null,  "error": null,  "progress": {    "stage": "queued",    "done": 0,    "total": 0,    "position": 1  },  "usage": {    "amount": 599,    "currency": "usd",    "funding": "balance"  },  "metadata": {    "order_id": "A-10492"  },  "completed_at": null,  "expires_at": null}

Solange eine Analyse läuft, ist progress.stage eines von queued, reading, analyzing oder reporting, und position ist die Warteschlangenposition, solange die Phase queued ist. Dokumente können in die Warteschlange gestellt werden. Das Warten ist bei Dokumenten optional und kann enden, bevor das Ergebnis vorliegt; behandeln Sie 202 daher immer.

Wenn der Dienst ausgelastet ist

Wenn die Kapazität ausgelastet ist, liefert POST /analyses 503 mit dem Code service_unavailable und einem Header retry-after. Es wird nichts berechnet. Warten Sie die in retry-after angegebene Anzahl Sekunden und versuchen Sie es dann mit demselben Idempotency-Key erneut, damit der erneute Versuch nie eine Prüfung doppelt ausführen kann. Für den besten Durchsatz führen Sie Bildanalysen nacheinander statt parallel aus.

async function create(body, key) {  for (let attempt = 0; attempt < 5; attempt++) {    const response = await fetch("https://api.fileverity.com/v1/analyses", {      method: "POST",      headers: { Authorization: "Bearer " + process.env.FILEVERITY_API_KEY, "Content-Type": "application/json", "Idempotency-Key": key },      body: JSON.stringify(body),    });    if (response.status !== 503) return response;    const wait = Number(response.headers.get("retry-after")) || 15;    await new Promise((resolve) => setTimeout(resolve, wait * 1000));  }  throw new Error("Service busy");}

Statuswerte

StatusBedeutung
processingDie Analyse läuft. result ist null.
succeededDas Ergebnis liegt vor. report_id, report_url, summary und result sind gesetzt.
failedDie Analyse konnte nicht abgeschlossen werden. error enthält code und message. Es wurde nichts berechnet.
canceledSie haben sie abgebrochen. error.code ist canceled. Es wurde nichts berechnet.
{  "id": "an_8Hk2pQ4vN9sL1xR7cW3mY6zB",  "object": "analysis",  "created": 1793700120,  "model": "fvimg-2-2026-10-30",  "livemode": true,  "status": "failed",  "file": {    "name": "claim-photo.jpg",    "bytes": 2481920,    "format": "jpeg"  },  "report_id": null,  "report_url": null,  "summary": null,  "result": null,  "error": {    "code": "analysis_failed",    "message": "The analysis could not be completed. You were not charged; retry it, and contact support with the request ID if it fails again."  },  "progress": null,  "usage": {    "amount": 0,    "currency": "usd",    "funding": null  },  "metadata": null,  "completed_at": 1793700135,  "expires_at": null}

Das Berichtsobjekt

Eine erfolgreiche Analyse enthält denselben Bericht, den die Website, das PDF und die Verifizierungsseite zeigen.

FeldBeschreibung
report_idBerichts-ID, FV-XXXX-XXXX-XXXX.
report_urlÖffentliche Verifizierungsseite für den Bericht. Wer den Link hat, kann Berichts-ID, Fingerabdruck der Datei und Zeitstempel ohne Konto mit dem hinterlegten Datensatz abgleichen.
summaryDie kurze Einstufung. Siehe unten.
result.reportDer vollständige Bericht. result.report.schema ist fileverity.report/1 für Bilder und fileverity.docpro/1 für Dokumente.
result.stamped_atUnix-Zeitstempel des für den Bericht ausgestellten Zeitstempels nach RFC 3161 oder null.
usageBerechneter Betrag amount in Cent (0 bei Prüfungen aus dem kostenlosen Start und bei Fehlern), currency und funding (trial oder balance).
metadataDie von Ihnen gesendeten Metadaten oder null.
expires_atUnix-Zeitstempel, nach dem result entfernt wird. Ergebnisse werden 7 Tage lang aufbewahrt.
{  "id": "an_8Hk2pQ4vN9sL1xR7cW3mY6zB",  "object": "analysis",  "created": 1793700120,  "model": "fvimg-2-2026-10-30",  "livemode": true,  "status": "succeeded",  "file": {    "name": "claim-photo.jpg",    "bytes": 2481920,    "format": "jpeg"  },  "report_id": "FV-7K2M-9QXD-4T8R",  "report_url": "https://fileverity.com/verify/FV-7K2M-9QXD-4T8R",  "summary": {    "level": "L2",    "assessment": "authentic_untouched",    "action": "accept",    "ai": "very_low",    "edit": "none"  },  "result": {    "report": {      "schema": "fileverity.report/1",      "id": "FV-7K2M-9QXD-4T8R"    },    "stamped_at": 1793700130  },  "error": null,  "progress": null,  "usage": {    "amount": 199,    "currency": "usd",    "funding": "balance"  },  "metadata": {    "order_id": "A-10492"  },  "completed_at": 1793700131,  "expires_at": 1794304931}

Das Objekt report ist oben gekürzt; das echte enthält die vollständigen Befunde.

Die summary ist die stabile, maschinenlesbare Einstufung. result.report ist der vollständige Bericht, den die Website und das PDF darstellen. Seine Struktur folgt dem Schema, das in result.report.schema genannt wird. Innerhalb derselben Schemaversion behalten aufgeführte Felder ihren Namen und ihre Bedeutung, und es können neue Felder hinzukommen; ignorieren Sie daher Felder, die Sie nicht kennen.

Zusammenfassung bei Bildern

FeldWerte
levelL0 Nicht bestimmbar, L1 Quelle verifiziert, L2 Keine Auffälligkeiten, L3 Manuelle Prüfung erforderlich, L4 Hochgradig verdächtig, L5 Starke Hinweise gegen die Echtheit.
actionaccept, review, reject, resubmit
assessmentauthentic_untouched, authentic_locally_edited, ai_generated, undetermined
ailabelled, very_likely, suspected, undecided, low, very_low, not_evaluated
editdetected, suspected, suspected_record, review, generative, minor, none, not_applicable, not_evaluated

Zusammenfassung bei Dokumenten

FeldBeschreibung
kindImmer docpro.
levelL0 Nicht bestimmbar, L1 Quelle verifiziert, L2 Keine Anzeichen von Manipulation, L3 Manuelle Prüfung erforderlich, L4 Hohes Risiko, L5 Probleme nachgewiesen.
actionaccept, note (im Bericht markierte KI-Inhalte anhand Ihrer Richtlinie prüfen), review, reject oder resubmit.
reasonDer Befund oder Zustand hinter der Stufe, zum Beispiel clean, incomplete oder eine Befund-ID, oder null.
findingsIDs der relevanten Befunde.
pages, imagesSeiten des Dokuments und untersuchte eingebettete Fotos.
textDie Einstufung des Dokumenttextes (ai_generated, mixed, human, inconclusive) oder null, wenn der Text nicht ausgewertet wurde.
strongtrue, wenn ein aufgeführter Befund stark ist. Fehlt andernfalls.
{  "id": "an_Zc4vB7nP1sK8tL3wR6yQm2Xa",  "object": "analysis",  "created": 1793700300,  "model": "fvdoc-3-2026-11-03",  "livemode": true,  "status": "succeeded",  "file": {    "name": "contract.pdf",    "bytes": 18874368,    "format": "pdf"  },  "report_id": "FV-3PXH-6WQ2-8NDC",  "report_url": "https://fileverity.com/verify/FV-3PXH-6WQ2-8NDC",  "summary": {    "kind": "docpro",    "level": "L3",    "action": "review",    "reason": null,    "findings": [],    "pages": 12,    "images": 3,    "text": "human"  },  "result": {    "report": {      "schema": "fileverity.docpro/1",      "id": "FV-3PXH-6WQ2-8NDC"    },    "stamped_at": 1793700340  },  "error": null,  "progress": null,  "usage": {    "amount": 599,    "currency": "usd",    "funding": "balance"  },  "metadata": null,  "completed_at": 1793700341,  "expires_at": 1794305141}

Felder des Bildberichts

result.report einer Bildanalyse. Verschachtelte Objekte sind in der API-Referenz aufgeführt.

FeldTypErforderlichBeschreibung
schema"fileverity.report/1"Ja
idstringJaBerichts-ID, FV-XXXX-XXXX-XXXX.
sampletrueNeinVorhanden in den festen Beispielberichten, die Testschlüssel liefern.
issuedAtstringNeinZeitpunkt der Ausstellung des Berichts, ISO 8601 in UTC. Format date-time.
issuerobjectNeinAussteller des Berichts.
fileobjectNeinDas geprüfte Bild.
proobjectNeinDie Einstufung. Dieselben Werte wie summary, mit reason.
scoreinteger oder nullNeinEchtheitswert von 0 bis 100 in Schritten von 5: wie stark die Belege dafür sprechen, dass das Bild eine echte, unbearbeitete Aufnahme ist. null, wenn nicht ausgewertet.
confidenceeiner der Werte "high", "medium", "low"NeinWie viel sich anhand dieser Datei feststellen lässt. Eine geringe Aussagesicherheit liegt meist an der Datei selbst, etwa an niedriger Auflösung oder starker Komprimierung.
questionsobjectNeinDie drei Fragen, die der Bericht beantwortet.
generatorobject oder nullNeinDer für das Bild genannte KI-Generator oder null.
regionsarray von objectNeinMarkierte Bereiche, in Pixeln des angezeigten Bildes.
provenanceobjectNeinWas die eigenen Angaben der Datei über ihre Herkunft aussagen.
digeststringNeinFingerabdruck des Berichtsinhalts, den die Verifizierungsseite verwendet.

Felder des Dokumentberichts

result.report einer Dokumentanalyse.

FeldTypErforderlichBeschreibung
schema"fileverity.docpro/1"Ja
idstringJaBerichts-ID, FV-XXXX-XXXX-XXXX.
sampletrueNeinVorhanden in den festen Beispielberichten, die Testschlüssel liefern.
issuedAtstringNeinZeitpunkt der Ausstellung des Berichts, ISO 8601 in UTC. Format date-time.
receivedAtstringNeinZeitpunkt des Dateieingangs, ISO 8601 in UTC. Format date-time.
issuerobjectNeinAussteller des Berichts.
fileobjectNeinDas geprüfte Dokument.
leveleiner der Werte "L0", "L1", "L2", "L3", "L4", "L5"NeinRisikostufe, L0 bis L5.
actioneiner der Werte "accept", "note", "review", "reject", "resubmit"Nein
reasonstring oder nullNeinDer Befund oder Zustand hinter der Stufe.
findingsarray von objectNeinDie Befunde hinter der Stufe, jeweils mit den Seiten und eingebetteten Fotos, auf die sie sich beziehen.
textobjectNeinDas Ergebnis für den Text des Dokuments.
imagesarray von objectNeinDie eingebetteten Fotos und Grafiken, in Dokumentreihenfolge nummeriert.
structureobject oder nullNeinDer Änderungsverlauf der Datei oder null, wenn er nicht untersucht wurde.
provenanceobjectNeinWas die eigenen Angaben der Datei über ihre Herkunft aussagen.
digeststringNeinFingerabdruck des Berichtsinhalts, den die Verifizierungsseite verwendet.

Abrufen, auflisten und abbrechen

  • GET /analyses/{id} liefert die Analyse, einschließlich ihres Ergebnisses, solange dieses aufbewahrt wird.
  • GET /analyses listet die Analysen des Workspace auf, die neuesten zuerst. limit liegt zwischen 1 und 100 (Standardwert 20), type filtert nach image oder document, und starting_after nimmt den next_cursor der vorherigen Seite entgegen. Listeneinträge enthalten nie result.
  • POST /analyses/{id}/cancel bricht eine noch laufende Dokumentanalyse ab und gibt den reservierten Betrag frei. Bildanalysen lassen sich nicht abbrechen; ein verspätetes oder bereits abgeschlossenes Abbrechen liefert not_cancelable.
curl "https://api.fileverity.com/v1/analyses?limit=20&type=document" \  -H "Authorization: Bearer $FILEVERITY_API_KEY" curl -X POST https://api.fileverity.com/v1/analyses/an_8Hk2pQ4vN9sL1xR7cW3mY6zB/cancel \  -H "Authorization: Bearer $FILEVERITY_API_KEY"

PDF-Bericht

GET /analyses/{id}/report.pdf lädt den versiegelten PDF-Bericht einer erfolgreichen Analyse herunter, solange deren Ergebnis aufbewahrt wird. Ergänzen Sie ?locale= mit en, fr, de, es, zh, vi oder ar (Standardwert en). Senden Sie den Header Authorization; die Antwort ist application/pdf.

curl "https://api.fileverity.com/v1/analyses/an_8Hk2pQ4vN9sL1xR7cW3mY6zB/report.pdf?locale=en" \  -H "Authorization: Bearer $FILEVERITY_API_KEY" \  -o Fileverity-FV-7K2M-9QXD-4T8R.pdf

Bei Dokumenten werden Seitenbilder und Textauszüge nach der Prüfung 3 Stunden lang aufbewahrt. Danach enthält das PDF sie nicht mehr, und der Antwort-Header x-evidence-included ist false. Wenn das PDF die Belege enthalten soll, laden Sie es herunter, sobald die Analyse abgeschlossen ist.

Fehler

CodeStatusUrsache
file_not_found400Die Datei-ID ist unbekannt, abgelaufen oder bereits verwendet, oder der Upload an upload.url ist noch nicht abgeschlossen.
model_not_found404Unbekanntes Modell.
invalid_parameter400Ein Feld fehlt, hat einen falschen Typ oder ist unbekannt. Textmodelle verwenden Sie mit POST /text/detections.
unsupported_file, invalid_file415, 422Das Dateiformat wird für das Modell nicht unterstützt, oder die Datei ist beschädigt.
file_too_large, too_many_pixels, too_many_pages, document_too_long413Ein Größenlimit wurde überschritten.
password_required, wrong_password422Das Dokument ist verschlüsselt. Senden Sie options.password.
not_examinable422Im Dokument lässt sich nichts untersuchen. Es wird nichts berechnet.
insufficient_balance, spend_limit_reached402Das Guthaben oder das monatliche Ausgabenlimit des Schlüssels reicht für den Preis nicht aus.
service_unavailable, analysis_failed503, 502Ein vorübergehender Fehler oder ausgelastete Kapazität. Es wird nichts berechnet; wiederholen Sie die Anfrage. Bei service_unavailable enthält die Antwort den Header retry-after. Siehe Wenn der Dienst ausgelastet ist.
unsupported_media_type415Der Anfragetext wird nicht als application/json gesendet.
idempotency_mismatch, idempotency_in_progress409Der Idempotency-Key wurde mit einem anderen Anfragetext verwendet, oder seine erste Anfrage läuft noch. Siehe Idempotenz.
not_cancelable409Nur Dokumente, die noch verarbeitet werden, lassen sich abbrechen.

Manche Fehler treten erst auf, nachdem die Analyse erstellt wurde, zum Beispiel wenn ein Modell die Verarbeitung nicht abschließen kann. Sie setzen an der Analyse status: failed und error; der Aufruf zum Erstellen schlägt nicht fehl, und der Webhook analysis.failed wird ausgelöst. Siehe Fehler.