> ## Documentation Index
> Fetch the complete documentation index at: https://www.docusnap.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Details eines Assets laden

> Lädt ein Expand für **ein** Asset seitenweise, ohne die Abfrage zu
wiederholen. `expandName` ist einer der vier Namen `object_data`,
`object_essentials`, `object_blocks`, `children`; ein anderer wird mit
`400` abgewiesen. `cursor` stammt aus `incompleteExpands` einer
vorherigen Antwort; ohne `cursor` beginnt das Expand von vorn.

Nur die Felder senden, die gebraucht werden: Ein Platzhalter wie
`"cursor": "<string>"` wird als Cursor gelesen und endet mit `400`.

Ein Asset, das der Benutzer nicht sieht, ergibt `404`.

**Bekannte Einschränkung (04.11.2026):** Für `object_data`,
`object_essentials` und `object_blocks` liefert dieser Endpunkt derzeit
leere Einträge in der Form eines Assets, ohne `data`. Nur `children`
kommt richtig. Bis zur Behebung die Details über `POST /assets/query`
mit einem Filter auf `id` und `expands` lesen.

Berechtigung: *Lesen*.




## OpenAPI

````yaml /api-reference/openapi.de.yaml post /assets/expand
openapi: 3.0.4
info:
  title: Docusnap365 REST API
  version: v1
  description: |
    Öffentliche REST-API von Docusnap365. Lesender Zugriff auf die Assets
    eines Mandanten mit Filter, Sortierung, seitenweiser Ausgabe über Cursor
    und Laden von Asset-Details (Expands); schreibender Zugriff über das
    Anlegen und Aktualisieren von Assets.

    **Authentifizierung.** API-Schlüssel im Header `x-api-key`. Schlüssel
    legen Besitzer und Administratoren in Docusnap365 unter *Verwaltung ›
    Integrationen › API-Schlüssel* an, mit dem Zugriff *Lesen* oder *Lesen und
    Schreiben*. Lesende Endpunkte verlangen *Lesen*, schreibende *Lesen und
    Schreiben*.

    **Sichtbarkeit.** Der Schlüssel gehört einem Benutzer; dessen Rechte
    gelten. Zurückgegeben wird ausschließlich, was die Filter dieses Benutzers
    auf Organisation, Plattform, Domäne und Standort zulassen. Fehlende Rechte
    erzeugen keinen Fehler, sondern eine kleinere Ergebnismenge. Geliefert
    werden nur **aktive** Assets; gelöschte, archivierte und ausgeblendete sind
    nicht erreichbar, auch nicht über einen Filter auf `status`. Assets eines
    deaktivierten Typs werden nicht zurückgegeben.

    **Kontingent.** Jede Anfrage zählt gegen das Kontingent der Subscription
    (*API- & MCP-Anfragen*). Bei begrenztem Kontingent trägt jede Antwort die
    Header `X-RateLimit-Limit`, `X-RateLimit-Remaining`,
    `X-RateLimit-Extra-Remaining` und `X-RateLimit-Reset`; ist es erschöpft,
    antwortet die API mit `429` und `Retry-After`.

    **Fehler.** Alle Fehler kommen als `application/problem+json` mit
    `errorCode`, `errors[]` und `traceId`.
servers:
  - url: https://api.docusnap365.com/api/v1
    description: Produktion
security:
  - apiKey: []
tags:
  - name: Assets
    description: Assets lesen, abfragen, anlegen und aktualisieren.
paths:
  /assets/expand:
    post:
      tags:
        - Assets
      summary: Details eines Assets laden
      description: |
        Lädt ein Expand für **ein** Asset seitenweise, ohne die Abfrage zu
        wiederholen. `expandName` ist einer der vier Namen `object_data`,
        `object_essentials`, `object_blocks`, `children`; ein anderer wird mit
        `400` abgewiesen. `cursor` stammt aus `incompleteExpands` einer
        vorherigen Antwort; ohne `cursor` beginnt das Expand von vorn.

        Nur die Felder senden, die gebraucht werden: Ein Platzhalter wie
        `"cursor": "<string>"` wird als Cursor gelesen und endet mit `400`.

        Ein Asset, das der Benutzer nicht sieht, ergibt `404`.

        **Bekannte Einschränkung (04.11.2026):** Für `object_data`,
        `object_essentials` und `object_blocks` liefert dieser Endpunkt derzeit
        leere Einträge in der Form eines Assets, ohne `data`. Nur `children`
        kommt richtig. Bis zur Behebung die Details über `POST /assets/query`
        mit einem Filter auf `id` und `expands` lesen.

        Berechtigung: *Lesen*.
      operationId: expandAsset
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiExpandRequest'
            example:
              parentId: 01a13e83-6da5-7532-9162-617cf17f4553
              expandName: children
              limit: 100
      responses:
        '200':
          $ref: '#/components/responses/ExpandPage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  schemas:
    ApiExpandRequest:
      type: object
      description: Ein Expand eines bestimmten Assets seitenweise laden.
      required:
        - parentId
        - expandName
      properties:
        parentId:
          type: string
          format: uuid
          description: ID des Assets, zu dem die Details gehören.
        expandName:
          type: string
          enum:
            - object_data
            - object_essentials
            - object_blocks
            - children
          example: children
        cursor:
          type: string
          description: Cursor aus `incompleteExpands`. Weglassen, um von vorn zu beginnen.
        select:
          type: array
          items:
            type: string
        filter:
          $ref: '#/components/schemas/ApiFilterGroup'
        sort:
          type: array
          items:
            $ref: '#/components/schemas/ApiSortField'
        limit:
          type: integer
          format: int32
          default: 50
      additionalProperties: false
    ApiFilterGroup:
      type: object
      description: >-
        Bedingungen, verknüpft mit `And` oder `Or`. Gruppen lassen sich über
        `groups` schachteln.
      properties:
        logic:
          $ref: '#/components/schemas/FilterLogic'
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/ApiFilterCondition'
        groups:
          type: array
          items:
            $ref: '#/components/schemas/ApiFilterGroup'
      additionalProperties: false
    ApiSortField:
      type: object
      required:
        - path
      properties:
        path:
          type: string
          example: name
        desc:
          type: boolean
          default: false
        nulls:
          $ref: '#/components/schemas/NullsPosition'
      additionalProperties: false
    ExpandPage:
      type: object
      properties:
        items:
          type: array
          items:
            type: object
            additionalProperties: true
        nextCursor:
          type: string
          nullable: true
        hasMore:
          type: boolean
    Problem:
      type: object
      description: Fehler nach RFC 9457.
      properties:
        type:
          type: string
          example: urn:ds365:error:unknown-path
        title:
          type: string
          example: Unknown field path
        status:
          type: integer
          example: 400
        detail:
          type: string
        instance:
          type: string
          example: /api/v1/assets/query
        errorCode:
          type: string
          description: Für die Anwendung gedacht.
          example: UNKNOWN_PATH
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              path:
                type: string
                description: >-
                  Stelle der Anfrage, etwa `filter`, `sort`, `select` oder ein
                  Parametername.
              data:
                type: object
                additionalProperties: true
        traceId:
          type: string
          description: Bei Rückfragen an den Support angeben.
    FilterLogic:
      type: string
      enum:
        - And
        - Or
      default: And
    ApiFilterCondition:
      type: object
      required:
        - path
        - op
      properties:
        path:
          type: string
          description: >
            Feld. In der Abfrage nur Stammangaben; in einem Expand dessen
            Felder, mit `data.` auch Werte aus den Daten.
          example: name
        op:
          $ref: '#/components/schemas/FilterOperator'
        value:
          description: >-
            Vergleichswert; der Datentyp folgt dem Feld. Bei `In`/`NotIn` ein
            Array, bei `IsNull`/`IsNotNull` weglassen.
          example: SRV
        arrayFilter:
          $ref: '#/components/schemas/ApiFilterGroup'
          description: Bedingungen an die Listeneinträge für `ArrayAny` und `ArrayAll`.
      additionalProperties: false
    NullsPosition:
      type: string
      enum:
        - Default
        - First
        - Last
      default: Default
    FilterOperator:
      type: string
      description: |
        Vergleich: `Eq`, `Neq`, `Gt`, `Gte`, `Lt`, `Lte` ·
        Text, ohne Rücksicht auf Groß- und Kleinschreibung: `Contains`,
        `StartsWith`, `EndsWith` ·
        Muster mit `%` und `_`, Groß- und Kleinschreibung zählen: `Like` ·
        Menge (`value` ist ein Array): `In`, `NotIn` ·
        Leer: `IsNull`, `IsNotNull` ·
        Listen in den Daten eines Expands: `ArrayAny`, `ArrayAll` (mit
        `arrayFilter`), `ArrayContains`
      enum:
        - Eq
        - Neq
        - Gt
        - Gte
        - Lt
        - Lte
        - Contains
        - StartsWith
        - EndsWith
        - Like
        - In
        - NotIn
        - IsNull
        - IsNotNull
        - ArrayAny
        - ArrayAll
        - ArrayContains
  responses:
    ExpandPage:
      description: Eine Seite Einträge eines Expands.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ExpandPage'
    BadRequest:
      description: >
        Ungültige Anfrage – Body nicht lesbar, Pflichtfeld fehlt, unbekanntes
        Feld (`UNKNOWN_PATH`), Wert passt nicht zum Feld
        (`FIELD_TYPE_MISMATCH`), Operator passt nicht (`UNSUPPORTED_OPERATOR`),
        `select`/`search` ist kein JSON-Array (`INVALID_FORMAT`), unbekannter
        Expand-Name (`VALIDATION_FAILED`), Cursor beschädigt (`INVALID_CURSOR`)
        oder abgelaufen (`CURSOR_EXPIRED`).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    Unauthorized:
      description: Die Anfrage konnte keinem Benutzer zugeordnet werden (`UNAUTHORIZED`).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    Forbidden:
      description: >
        API-Schlüssel fehlt oder trägt nicht den nötigen Zugriff (`FORBIDDEN`;
        `data.missingScopes` nennt, was fehlt) – oder der Cursor gehört einem
        anderen Benutzer oder Mandanten (`CURSOR_USER_MISMATCH`).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    NotFound:
      description: >
        Kein Asset mit dieser ID im sichtbaren Bestand (`NOT_FOUND`,
        `data.entityType` = `asset`, `data.id`).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    TooManyRequests:
      description: >
        Kontingent erschöpft (`REST_REQUEST_QUOTA_EXCEEDED`); die Anfrage wurde
        nicht ausgeführt und trotzdem gezählt.
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
        X-RateLimit-Limit:
          $ref: '#/components/headers/RateLimitLimit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/RateLimitRemaining'
        X-RateLimit-Extra-Remaining:
          $ref: '#/components/headers/RateLimitExtraRemaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/RateLimitReset'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: urn:ds365:error:rest-request-quota-exceeded
            title: Request quota exceeded
            status: 429
            detail: >-
              The request quota of 10000 requests per period is exhausted until
              2026-10-17T09:52:44.0000000+00:00.
            instance: /api/v1/assets
            errorCode: REST_REQUEST_QUOTA_EXCEEDED
            errors:
              - code: REST_REQUEST_QUOTA_EXCEEDED
                data:
                  requestsLimit: 10000
                  requestsUsed: 10000
                  quotaResetAt: '2026-10-17T09:52:44+00:00'
            traceId: 00-…
    ServerError:
      description: >-
        Unerwarteter Fehler (`INTERNAL_ERROR`). Bei Rückfragen die `traceId`
        angeben.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    ServiceUnavailable:
      description: >
        Das Kontingent konnte nicht geprüft werden (`SERVICE_UNAVAILABLE`); die
        Anfrage wurde nicht ausgeführt. Später wiederholen.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
  headers:
    RetryAfter:
      description: Beginn des nächsten Zeitraums als HTTP-Datum.
      schema:
        type: string
    RateLimitLimit:
      description: Im Zeitraum enthaltene Anfragen. Fehlt ohne Begrenzung.
      schema:
        type: integer
    RateLimitRemaining:
      description: Noch verfügbare Anfragen, enthaltene und zugekaufte zusammen.
      schema:
        type: integer
    RateLimitExtraRemaining:
      description: Davon noch verfügbares Zusatzkontingent.
      schema:
        type: integer
    RateLimitReset:
      description: Beginn des nächsten Zeitraums als Unix-Zeitstempel (Sekunden).
      schema:
        type: integer
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >
        API-Schlüssel aus Docusnap365 (*Verwaltung › Integrationen ›
        API-Schlüssel*). Lesende Endpunkte verlangen den Zugriff *Lesen*,
        schreibende *Lesen und Schreiben*.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.