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.jsonenthält einen Schlüssel je SDB-Abschnitt,outputs.xmlundoutputs.csvdieselben Daten.confidence_score(0 bis 1) undwarningsbeschreiben das Dokument als Ganzes.request_idbewahren Sie zusammen mit dem Ergebnis auf; sie ist der Rückweg zur Extraktion.
4. Fehler richtig behandeln
| Status | Code | Reaktion |
|---|---|---|
400 | unsupported_file_type | Echte PDF-Datei anfordern; Wiederholen hilft nicht. |
401 | unauthorized | Schlüssel prüfen; Wiederholen hilft nicht. |
413 | file_too_large | Datei aufteilen oder verkleinern. |
429 | rate_limited | Die im Header Retry-After genannte Zahl an Sekunden warten, dann erneut senden. |
500, 502 | output_processing_failed, provider_error | Mit 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.