SafetyDataSheetAPI is a product of Dscvry. Explore Dscvry →

DACH

Sicherheitsdatenblatt automatisiert auslesen

Von der ersten Anfrage bis zur robusten Anbindung: Anfrage senden, Antwort lesen, Fehler richtig behandeln.

Letzte Aktualisierung: 2026-10-24

1. Zugang

Für erste Tests genügt der kostenlose Beispiel-Upload auf der Startseite. Für die Anbindung brauchen Sie einen API-Schlüssel aus dem Self-Serve-Formular; Enterprise-Kunden erhalten ein dediziertes Deployment mit eigener Basis-URL. Der Schlüssel gehört auf Ihren Server, nicht in Quellcode oder Browser.

2. Anfrage senden

curl -X POST "https://safetydatasheetapi.com/extract-sds" \
  -H "Authorization: Bearer $SDS_API_KEY" \
  -F "[email protected]" \
  -F "language_hint=de"

3. Antwort lesen

  • outputs.json enthält einen Schlüssel je SDB-Abschnitt, outputs.xml und outputs.csv dieselben Daten.
  • confidence_score (0 bis 1) und warnings beschreiben das Dokument als Ganzes.
  • request_id bewahren Sie zusammen mit dem Ergebnis auf; sie ist der Rückweg zur Extraktion.

4. Fehler richtig behandeln

StatusCodeReaktion
400unsupported_file_typeEchte PDF-Datei anfordern; Wiederholen hilft nicht.
401unauthorizedSchlüssel prüfen; Wiederholen hilft nicht.
413file_too_largeDatei aufteilen oder verkleinern.
429rate_limitedDie im Header Retry-After genannte Zahl an Sekunden warten, dann erneut senden.
500, 502output_processing_failed, provider_errorMit wachsender Wartezeit erneut versuchen.

5. Wiederholungen automatisieren

Diese Funktion nutzt den Python-Client (englisch). Sie wiederholt bei Ratenlimit und Serverfehlern und gibt bei allen anderen Fehlern sofort auf:

import os
import time
from safetydatasheetapi import Client, ApiError, RateLimitError

client = Client(api_key=os.environ["SDS_API_KEY"])


def sdb_auslesen(pfad, versuche=3):
    """Liest ein SDB und wiederholt bei Ratenlimit (429) sowie bei Serverfehlern (500, 502)."""
    for versuch in range(1, versuche + 1):
        try:
            return client.extract(pfad, language_hint="de")
        except RateLimitError as fehler:
            if versuch == versuche:
                raise
            time.sleep(fehler.retry_after or 60)  # Wartezeit aus dem Retry-After-Header
        except ApiError as fehler:
            if fehler.status not in (500, 502) or versuch == versuche:
                raise  # 400, 401, 413 ...: Wiederholen hilft nicht
            time.sleep(2 ** versuch)


ergebnis = sdb_auslesen("aceton-sdb.pdf")
print(ergebnis["confidence_score"], ergebnis["warnings"])

6. Viele Dateien

Für Rückstände senden Sie bis zu 10 Dateien je Stapelauftrag mit einem Idempotency-Key, sodass ein erneuter Versuch keinen doppelten Auftrag erzeugt. Fragen Sie den Status ab oder nutzen Sie einen signierten Webhook, siehe Stapel und Webhooks (englisch). Auf dem gemeinsamen, gehosteten Endpunkt gelten Standardlimits von 20 Stapelaufträgen je 24 Stunden; Ihr Tarif legt die Limits für Self-Serve und Enterprise fest.

Mehrsprachige Dokumente

Die API liest SDB-PDFs in der Sprache, in der das Dokument verfasst ist. Optional unterstützt language_hint (zum Beispiel de) die Auslegung. Die Feldnamen der Antwort sind immer dieselben englischen Schlüssel; H- und P-Sätze, CAS- und UN-Nummern sind sprachunabhängig. Prüfen Sie Freitextfelder gegen das Originaldokument: Konfidenzwert und Warnungen zeigen, wann eine Prüfung nötig ist. Wir veröffentlichen keine Genauigkeitswerte pro Sprache; validieren Sie daher vor dem Produktivbetrieb mit einer eigenen Stichprobe.

Häufige Fragen

Muss ich die Sprache angeben?

Nein. language_hint ist optional und unterstützt nur die Auslegung.

Was tue ich bei einer 429-Antwort?

Warten Sie die Sekunden aus dem Header Retry-After und senden Sie erneut. Die Funktion oben erledigt das.

Kann ich dieselbe Datei gefahrlos erneut senden?

Einzelabfragen können Sie wiederholen. Für Stapelaufträge verwenden Sie einen Idempotency-Key, damit kein zweiter Auftrag entsteht.

Verwandte Seiten

Möchten Sie es mit einem eigenen Dokument sehen? Beispiel-SDB testen oder Implementierungsplan anfragen.