Zum Inhalt springen

Herkunft aus Ihrem ERP erfassen

Geschäftssysteme erfassen Ereignisse, die DICE nie selbst beobachtet: einen Wareneingang in SAP, die Freigabe einer Prüfung in Ihrem MES oder einen in Ihrer Handelsplattform abgeschlossenen Verkauf. Mit Deklarierten Transaktionen kann Ihre Integration solche Ereignisse unmittelbar in den Verlauf eines Datensatzes schreiben — jeweils als zugeordneter, dauerhafter Eintrag, der mit der Herkunft des Objekts weitergegeben wird und auf dessen Öffentlicher Seite erscheinen kann.

Diese Anleitung verbindet ein ERP (nach demselben Muster lassen sich auch ein WMS, MES oder jedes andere führende System anbinden) mit POST /api/v1/events/declare. Die Authentifizierung erfolgt über ein Dienstkonto, und jeder Eintrag wird dem menschlichen Bediener zugeordnet, der die Aktion in Ihrem System ausgeführt hat.

  1. Ihre Integration tauscht die Anmeldedaten ihres Dienstkontos gegen ein kurzlebiges Bearer-Token aus (Authentifizierung).
  2. In Ihrem System geschieht etwas — ein Warenausgang, eine Prüfung oder der Abschluss einer Reparatur.
  3. Ihre Integration ruft POST /api/v1/events/declare mit der Datensatz-ID, einer Überschrift sowie Zeitpunkt und Ort der Aussage auf und sendet die Identität des Bedieners im Header Dust-Ctx-Declared-Actor.
  4. Der Eintrag erscheint im Transaktionsprotokoll des Datensatzes in DICE, ist als Deklariert gekennzeichnet und dem Dienstkonto zugeordnet, das im Namen Ihres Bedieners handelt.
  • Ein Dienstkonto mit einem API-Schlüssel oder OAuth-Client — siehe Authentifizierung. Das Dienstkonto benötigt Bearbeitungszugriff auf die Datensätze, in die es schreiben soll. Gewähren Sie ihm dazu Zugriff auf das Team, dem diese Datensätze gehören.
  • Ihre Organisations-ID für den Header Dust-Ctx-Org-Id sowie die Team-ID, falls das Dienstkonto als bestimmtes Team handeln soll — siehe Konventionen für Anfragen.
  • Die Datensatz-IDs der beteiligten Objekte. Eine Integration ermittelt diese normalerweise über eine Suche nach dem Feld, das Ihr System und DICE gemeinsam verwenden — etwa eine Serien-, Chargen- oder Auftragsnummer — mittels GET /api/v1/threads (siehe den Leitfaden zur Datensatz-API).

Ein Aufruf erfasst einen Eintrag in einem Datensatz:

Terminal-Fenster
curl -fsS "https://apid.dustid.io/api/v1/events/declare" \
-H "Authorization: Bearer $DUST_TOKEN" \
-H "Dust-Ctx-Org-Id: $DUST_ORG_ID" \
-H 'Dust-Ctx-Declared-Actor: {"id": "JDOE", "system": "SAP", "displayName": "Jane Doe"}' \
-H "Content-Type: application/json" \
-d '{
"threadId": "0b9e7c9a-2f9d-4d8a-9a51-1c2e57ab8d10",
"title": "Incoming inspection passed",
"note": "Visual and dimensional inspection against PO 4500012345.",
"kind": "inspection",
"edtf": "2026-08-06",
"location": { "name": "Plant 1710, Springfield" }
}'

Anfragefelder — mit Ausnahme von threadId sind alle optional, eine vollständig leere Deklaration wird jedoch abgelehnt:

FeldTypHinweise
threadIdUUIDDer Datensatz, zu dem der Eintrag gehört. Erfordert Bearbeitungszugriff.
titlestring ≤ 80Kurze Überschrift — sie wird in Feeds und auf Seiten als Titel des Eintrags angezeigt.
notestring ≤ 4000Freitext mit Einzelheiten zum Geschehen.
kindstring ≤ 64Frei definierbare Klassifizierung: sale, inspection, repair, service, … gemäß Ihrem Vokabular. Standardwert ist other.
edtfstring ≤ 64Der Zeitpunkt des Ereignisses mit genau der Genauigkeit, die Ihnen tatsächlich bekannt ist — siehe unten. Lassen Sie das Feld weg, um es mit dem aktuellen Zeitpunkt zu erfassen.
locationobjectDer angegebene Ort: { "name": string, "latitude"?: number, "longitude"?: number }. name wird angezeigt.
resIdsUUID[] ≤ 25Nachweise: IDs von Dateien, die bereits an den Datensatz angehängt sind und den Eintrag dokumentieren — etwa ein Prüfbericht oder ein Zertifikat. IDs von Dateien, die nicht an diesen Datensatz angehängt sind, werden abgelehnt.

Die Antwort gibt die angelegte Aussage zurück — kind, title, note sowie ein strukturiertes when-Objekt mit der Anzeigezeichenfolge display, der Genauigkeit und den Grenzen der Aussage.

edtf akzeptiert eine Teilmenge von EDTF (ISO 8601-2), sodass die Aussage genau die in Ihrem System vorhandene Genauigkeit enthält — ein Jahr, einen Monat, einen Tag, einen Zeitraum oder eine ungefähre Angabe:

AussageedtfAnzeige
Ein genauer Tag2026-07-1414. Juli 2026
Ein Monat2026-07Juli 2026
Ein Jahr19681968
Ein abgeschlossener Zeitraum1968/19701968–1970
Ungefähr1835~Etwa 1835
Vor einem Datum../1970-03Vor März 1970
Nach einem Datum2019/..Nach 2019

Die Aussage wird überall mit der von Ihnen angegebenen Genauigkeit angezeigt — ein Zeitraum wie 1968/1970 wird niemals auf ein erfundenes genaues Datum reduziert. Übermitteln Sie die Genauigkeit, über die Sie tatsächlich verfügen, und keine mit Mitternacht als Zeitstempel versehene Schätzung.

Ein Dienstkonto authentifiziert Ihr System. Der Header Dust-Ctx-Declared-Actor benennt für jede Anfrage die Person, die darin gehandelt hat:

Dust-Ctx-Declared-Actor: {"id": "JDOE", "system": "SAP", "displayName": "Jane Doe", "role": "Quality Inspector"}

id ist erforderlich; system, displayName und role sind optional. Der JSON-Wert muss kleiner als 1 KB bleiben; URI-codieren Sie ihn, wenn er Nicht-ASCII-Zeichen enthält. Der deklarierte Akteur wird bei jedem von der Anfrage geschriebenen Eintrag unverändert erfasst und im Verlauf als deklarierte Zuordnung angezeigt — von Ihrer Integration bereitgestellt, nicht von DICE verifiziert und ohne Auswirkung auf Berechtigungen. Ein Organisationsadministrator kann diese Angabe verpflichtend machen. In diesem Fall werden Schreibvorgänge ohne den Header mit 403 ATTRIBUTION_REQUIRED abgelehnt. Die vollständige Semantik finden Sie unter Zuordnung des deklarierten Akteurs.

Für deklarierte Herkunft sollten Sie diesen Header in Ihrem eigenen Code als erforderlich behandeln: Die Aussage „Geprüft — bestanden“ ist wesentlich aussagekräftiger, wenn ihr „Jane Doe, Qualitätsprüferin“ zugeordnet ist, als wenn lediglich „SAP Connector“ angegeben wird.

Wenn ein einzelnes Geschäftsereignis viele Objekte betrifft — etwa den Wareneingang von 200 serialisierten Einheiten oder eine Prüfung auf Chargenebene — deklarieren Sie es einmal für alle:

Terminal-Fenster
curl -fsS "https://apid.dustid.io/api/v1/events/declare/batch" \
-H "Authorization: Bearer $DUST_TOKEN" \
-H "Dust-Ctx-Org-Id: $DUST_ORG_ID" \
-H 'Dust-Ctx-Declared-Actor: {"id": "JDOE", "system": "SAP"}' \
-H "Content-Type: application/json" \
-d '{
"threadIds": ["0b9e7c9a-…", "4f1d22c0-…", "9a8b11de-…"],
"title": "Incoming inspection passed",
"kind": "inspection",
"edtf": "2026-08-06",
"location": { "name": "Plant 1710, Springfield" }
}'
  • threadIds akzeptiert 1–500 Datensatz-IDs. Der Schreibvorgang wird nach dem Prinzip Alles oder nichts ausgeführt und erfordert Bearbeitungszugriff auf jeden Datensatz im Batch.
  • Dieselbe Aussage wird in jedem Datensatz angelegt — innerhalb eines Batchs sind keine datensatzspezifischen Abweichungen möglich. Daten, die sich je Objekt unterscheiden (Seriennummer, Charge, Messergebnisse), gehören in Datensatzfelder und nicht in die Aussage.
  • Die Antwort enthält eine gemeinsame operationId. Speichern Sie sie: Sie dient als Referenz zum Korrigieren des Batchs (siehe unten).

/declare/batch schreibt eine Aussage in viele Datensätze. Wenn Sie viele unterschiedliche Aussagen veröffentlichen müssen — etwa bei der Nachtragung historischer Daten, einer Migration aus einem tabellenbasierten System oder den Ereignissen eines ganzen Tages in der Fertigung — verwenden Sie stattdessen /declare/rows. Jede Zeile wird in jeden Datensatz aus threadIds geschrieben, und alle Einträge verwenden gemeinsam eine operationId:

Terminal-Fenster
curl -fsS "https://apid.dustid.io/api/v1/events/declare/rows" \
-H "Authorization: Bearer $DUST_TOKEN" \
-H "Dust-Ctx-Org-Id: $DUST_ORG_ID" \
-H 'Dust-Ctx-Declared-Actor: {"id": "JDOE", "system": "SAP"}' \
-H "Content-Type: application/json" \
-d '{
"threadIds": ["0b9e7c9a-…"],
"rows": [
{ "title": "Inspected", "kind": "inspection", "edtf": "2024-03-01", "location": { "name": "Geneva" } },
{ "title": "Sealed for shipment", "kind": "shipment", "edtf": "2024-03-04" },
{ "title": "Customs cleared", "edtf": "2024-03-11" }
]
}'
  • Pro Anfrage sind bis zu 100 Zeilen und 500 Datensätze zulässig, begrenzt auf insgesamt 2.000 Einträge (threadIds.length × rows.length). Teilen Sie größere Nachtragungen auf.
  • Alles oder nichts für die gesamte Anfrage: Ein einziges nicht erkanntes Datum führt zur Ablehnung aller Zeilen, statt eine unvollständige Nachtragung mit Einträgen zu hinterlassen, die nur einzeln zurückgezogen werden können.
  • Zeilen enthalten weder anchor noch Nachweis-resIds — beide Angaben gelten jeweils für eine einzelne Aussage. Verwenden Sie dafür /declare.
  • /declare/batch entspricht dem Fall mit einer Zeile bei diesem Endpunkt. Verwenden Sie ihn weiterhin, wenn es sich tatsächlich nur um eine Aussage handelt.

Dies ist derselbe Endpunkt, an den auch der DICE-eigene CSV-Import Daten sendet. Wenn Ihre Kunden Daten manuell statt aus einem System nachtragen, verweisen Sie sie auf Vergangene Ereignisse erfassen, statt eine Integration zu entwickeln.

Deklarierte Einträge sind unveränderlich — sie können weder bearbeitet noch gelöscht werden. Die Korrektur erfolgt durch Zurückziehen: Ein zweiter zugeordneter Eintrag erklärt, dass der erste falsch war. Das Original bleibt als zurückgezogen gekennzeichnet im Verlauf erhalten, und beide Einträge werden mit dem Datensatz weitergegeben — eine Berichtigung, niemals eine Löschung.

Um alle Einträge zurückzuziehen, die ein Batch geschrieben hat, etwa weil der Wareneingang in Ihrem ERP storniert wurde, übermitteln Sie die gespeicherte operationId:

Terminal-Fenster
curl -fsS "https://apid.dustid.io/api/v1/events/retract/by-operation" \
-H "Authorization: Bearer $DUST_TOKEN" \
-H "Dust-Ctx-Org-Id: $DUST_ORG_ID" \
-H "Content-Type: application/json" \
-d '{
"operationId": "7c3f0f9e-5b7a-4a4f-8f7d-2f1d0e6a9b21",
"reason": "Goods receipt reversed (movement type 102)."
}'

Dadurch werden alle noch aktiven Einträge zurückgezogen, die der Vorgang geschrieben hat. Bereits einzeln zurückgezogene Einträge werden übersprungen. Der Vorgang erfordert Bearbeitungszugriff auf alle beteiligten Datensätze. Ein einzelner Eintrag wird stattdessen über seine Ereignis-ID zurückgezogen: POST /api/v1/events/{event_id}/retract mit einem optionalen reason. Ereignis-IDs stammen aus dem Verlauf des Datensatzes (GET /api/v1/events?threadId=…).

Erfassen Sie nach dem Zurückziehen mit einer neuen Deklaration einen korrigierten Eintrag — dieses Paar aus fehlerhaftem Eintrag und Korrektur bildet den tatsächlichen Verlauf nachvollziehbar ab.

AntwortBedeutung
400 INVALID_DATADer Wert von edtf liegt außerhalb der unterstützten Teilmenge oder ist kein gültiges Kalenderdatum, die Deklaration ist leer oder eine Nachweis-ID ist nicht an diesen Datensatz angehängt.
400 INVALID_REQUESTFehlerhafter Anfrageinhalt — beispielsweise überschreitet ein Feld seine Längenbegrenzung.
403 ATTRIBUTION_REQUIREDDie Richtlinie des Dienstkontos erfordert einen deklarierten Akteur, die Anfrage enthielt jedoch keinen.
404 NOT_FOUNDEine Datensatz-ID, die für den Aufrufenden nicht sichtbar ist oder nicht existiert. Beim Batch-Endpunkt führt jede einzelne derartige ID zum Fehlschlagen des gesamten Batchs.

Fehlerantworten folgen dem Standardvertrag — siehe Konventionen für Anfragen sowie Fehler und Scanergebnisse für sämtliche Codes einschließlich Status und Hinweisen zu Wiederholungsversuchen.