Adresse und Aufrufe
Alle Aufrufe liegen unterhttps://api.docusnap365.com/api/v1. Die API arbeitet ausschließlich mit Assets und kennt sieben Endpunkte:
Parameter, Schemas und Beispiele jedes Endpunkts stehen in der API-Referenz in der Seitenleiste.
Schlüssel und Rechte
Jeder Aufruf trägt einen API-Schlüssel in der Kopfzeilex-api-key. Weitere Kopfzeilen und eine vorherige Anmeldung sind nicht nötig. Schlüssel legen Besitzer und Administratoren unter Verwaltung › Integrationen › API-Schlüssel an; wie das geht, steht unter API-Schlüssel verwalten.
Beim Anlegen wählen Sie den Zugriff. Lesen genügt für die lesenden Endpunkte, POST /asset und POST /asset/bulk verlangen Lesen und Schreiben. Ein Schlüssel ohne den nötigen Zugriff erhält die Antwort 403. Fehlt der Schlüssel oder ist er ungültig, antwortet die API mit 401 ohne Inhalt.
Ein Schlüssel gehört einem Benutzer, und dessen Rechte gelten: Was dieser Benutzer in der Oberfläche nicht sieht, liefert die API auch nicht. Fehlende Rechte erzeugen keinen Fehler, sondern eine kleinere Ergebnismenge. Wer weniger sieht als erwartet, prüft zuerst die Rechte des Benutzers, dann die Abfrage. Ein Asset, das der Benutzer nicht sieht, verhält sich wie ein nicht vorhandenes: GET /asset/{id} und POST /assets/expand antworten mit 404.
Assets und Typen
Ein Asset besteht aus seinen Stammangaben und, auf Wunsch, aus seinen Details. Die Stammangaben liefert jeder lesende Endpunkt: unter anderemid, name, schemaId, objectType, parentId, die Zuordnung zu Organisation, Standort, Plattform und Domäne sowie status, Herkunft und die Angaben zu Anlegen und Ändern. Alles Weitere steht nicht in den Stammangaben, sondern kommt über Expands.
Jedes Asset hat einen Typ, in der API schemaId. Der Typ bestimmt, welche Daten das Asset trägt. Die Typen mit ihren Feldern stehen im Datenmodell. Zum Anlegen eines Assets benötigen Sie die schemaId des passenden Typs.
Lesen und Abfragen
GET /assets liefert die ersten 50 Assets. select und search übergeben Sie als JSON-Array:
search nimmt Einträge der Form feld=wert und findet, was den Wert enthält, ohne Beachtung der Groß- und Kleinschreibung. Mehrere Einträge gelten zusammen. select bestimmt auf diesem Endpunkt nur, welche Felder gelesen werden; die Antwort trägt trotzdem alle Felder, nicht gewählte mit leerem Wert.
POST /assets/query ist der Weg für Filter, Sortierung und Feldauswahl. Alle Teile der Abfrage sind wahlweise:
data. im Filter der Abfrage endet mit 400 UNKNOWN_PATH. Die erfassten Daten eines Typs lesen Sie über ein Expand und werten sie in der eigenen Anwendung aus.
Details laden
Ein Expand lädt zu jedem Asset einen Teil seiner Details. Es gibt vier mit festen Namen:
Ein Expand hat eigene
select, filter, sort und limit (Vorgabe 50). select wählt auch einzelne Werte der Daten, etwa data.serialNumber. Welche Werte ein Typ hat, steht im Datenmodell. Ein Filter auf schemaId in der Abfrage beschleunigt die Auflösung der data.-Pfade. filter, sort und limit wirken je Asset bei object_essentials, object_blocks und children; bei object_data wirkt nur select.
Ein unbekannter Name in expands wird in POST /assets/query übergangen und von POST /assets/expand mit 400 abgewiesen.
Wo die Details in der Antwort stehen, hängt vom select ab. Mit select steht jedes Expand unter seinem Namen direkt am Asset, object_data als Objekt, die übrigen als Liste. Ohne select stehen alle Expands gesammelt unter expands, jedes als Liste.
POST /assets/expand lädt ein Expand für ein einzelnes Asset. Pflicht sind parentId und expandName. Mit einem cursor aus incompleteExpands oder nextCursor setzt der Aufruf an der Stelle fort, an der der Cursor ausgestellt wurde; select, filter, sort und limit im Körper gelten dann nicht.
Weiterblättern mit dem Cursor
Jede lesende Antwort außerGET /asset/{id} hat dieselbe Form:
POST /cursor/continue liefert mit { "cursor": "<nextCursor>" } die nächste Seite. Der Cursor ist an Subscription und Benutzer gebunden und läuft nach einer Stunde ab; danach beginnen Sie die Abfrage neu. Behandeln Sie ihn als undurchsichtigen Wert.
Folgeseiten tragen immer die ungekürzten Stammangaben und nur das Expand
object_data. Ein select und die übrigen Expands der ersten Seite gelten dort nicht. Für object_essentials, object_blocks und children auf jeder Seite rufen Sie POST /assets/expand je Asset auf.Anlegen und aktualisieren
POST /asset schreibt ein Asset, POST /asset/bulk bis zu 100 in einer Transaktion. Docusnap365 entscheidet selbst, ob es das Asset schon kennt: Dann wird es aktualisiert, sonst angelegt. Ein neu angelegtes Asset beantwortet die API mit 201, ein aktualisiertes mit 200.
Ohne
objectData ist object.id Pflicht, und das Asset wird aktualisiert. Ein vollständigerer vorhandener Datensatz, der nicht überschrieben werden darf, und ein Datensatz mit zu wenigen Identitätswerten werden abgelehnt.
Die Antwort nennt die ID des Assets (id, idPair.dbId), ob es angelegt wurde (isCreate) und ob es geklappt hat (isSuccess, sonst errorMessage).
Bei POST /asset/bulk liefert results ein Ergebnis je Eintrag in der Reihenfolge der Anfrage, zuzuordnen über idPair.fakeId, dazu successCount und failedCount. Ein Eintrag ohne object oder mit fehlendem oder zu langem Namen bricht den ganzen Aufruf mit 400 ab. Ein geschütztes Asset oder eines mit zu wenigen Identitätswerten wird übersprungen und trägt in results seine errorMessage; die übrigen Einträge werden geschrieben.
Fehler
Fehler der API kommen alsapplication/problem+json nach RFC 9457 mit status, errorCode, detail, instance und einer traceId. Werten Sie errorCode in der Anwendung aus; detail ist ein technischer englischer Satz, der sich ändern kann und Endanwendern nicht angezeigt wird. Bei Rückfragen an den Support nennen Sie die traceId.
Ablehnungen beim Schreiben, etwa ein geschütztes Asset, kommen nicht als Problem-Antwort, sondern als Ergebnis mit errorMessage. Unterscheiden Sie beide Formen am Content-Type: application/problem+json gegenüber application/json. Die Meldungen in errorMessage zeigen Sie höchstens an.
Kontingent
Jeder Aufruf eines der sieben Endpunkte zählt eine Anfrage gegen das Kontingent der Subscription (API- & MCP-Anfragen); REST-API und MCP teilen sich dieses Kontingent. Die Anfrage zählt auch dann, wenn sie danach scheitert, etwa an einem unbekannten Feld oder einem abgelaufenen Cursor. Nicht gezählt werden Anfragen, die schon an fehlendem Schlüssel (401), fehlendem Zugriff (403) oder einem unbekannten Endpunkt (404) scheitern.
Zusätzliche Anfragen werden mit dem Zeitraum nicht zurückgesetzt, die enthaltenen schon. Sind beide aufgebraucht, antwortet die API mit 429 und führt die Anfrage nicht aus; auch abgelehnte Anfragen zählen.
Bei begrenztem Kontingent tragen alle Antworten, auch Fehlerantworten, diese Kopfzeilen:
Bei unbegrenztem Kontingent fehlen diese Kopfzeilen.
Weiterführend
- Die API-Referenz (in der Seitenleiste unter API-Referenz) – alle Endpunkte mit Parametern, Schemas und Beispielen
- Datenmodell – Typen, Felder, Eigenschaften
- API-Schlüssel verwalten – Schlüssel anlegen, Rechte, Ablauf
- KI-Verbindungen – Verbrauch des Kontingents