> ## 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.

# Load an asset's details

> Loads one expand for **one** asset page by page, without repeating the
query. `expandName` is one of the four names `object_data`,
`object_essentials`, `object_blocks`, `children`; any other is
rejected with `400`. `cursor` comes from `incompleteExpands` of an
earlier response; without `cursor` the expand starts from the
beginning.

Send only the fields you need: a placeholder such as
`"cursor": "<string>"` is read as a cursor and ends with `400`.

An asset the user cannot see yields `404`.

**Known limitation (2026-11-04):** For `object_data`,
`object_essentials` and `object_blocks` this endpoint currently returns
empty entries shaped like an asset, without `data`. Only `children`
comes back correctly. Until this is fixed, read the details through
`POST /assets/query` with a filter on `id` and `expands`.

Permission: *Read*.




## OpenAPI

````yaml /api-reference/openapi.en.yaml post /assets/expand
openapi: 3.0.4
info:
  title: Docusnap365 REST API
  version: v1
  description: |
    Public REST API of Docusnap365. Read access to a tenant's assets with
    filtering, sorting, cursor-based paging and loading of asset details
    (expands); write access through creating and updating assets.

    **Authentication.** API key in the `x-api-key` header. Owners and
    administrators create keys in Docusnap365 under *Administration ›
    Integrations › API Keys*, with the access *Read* or *Read and Write*. Read
    endpoints require *Read*, write endpoints require *Read and Write*.

    **Visibility.** The key belongs to a user, and that user's rights apply.
    Only what the user's filters on organization, platform, domain and
    location allow is returned. Missing rights do not raise an error – they
    yield a smaller result set. Only **active** assets are returned; deleted,
    archived and hidden ones cannot be reached, not even through a filter on
    `status`. Assets of a deactivated type are not returned.

    **Quota.** Every request counts against the subscription's quota (*API &
    MCP requests*). With a limited quota every response carries the headers
    `X-RateLimit-Limit`, `X-RateLimit-Remaining`,
    `X-RateLimit-Extra-Remaining` and `X-RateLimit-Reset`; once it is used up,
    the API answers `429` with `Retry-After`.

    **Errors.** All errors come as `application/problem+json` with
    `errorCode`, `errors[]` and `traceId`.
servers:
  - url: https://api.docusnap365.com/api/v1
    description: Production
security:
  - apiKey: []
tags:
  - name: Assets
    description: Read, query, create and update assets.
paths:
  /assets/expand:
    post:
      tags:
        - Assets
      summary: Load an asset's details
      description: |
        Loads one expand for **one** asset page by page, without repeating the
        query. `expandName` is one of the four names `object_data`,
        `object_essentials`, `object_blocks`, `children`; any other is
        rejected with `400`. `cursor` comes from `incompleteExpands` of an
        earlier response; without `cursor` the expand starts from the
        beginning.

        Send only the fields you need: a placeholder such as
        `"cursor": "<string>"` is read as a cursor and ends with `400`.

        An asset the user cannot see yields `404`.

        **Known limitation (2026-11-04):** For `object_data`,
        `object_essentials` and `object_blocks` this endpoint currently returns
        empty entries shaped like an asset, without `data`. Only `children`
        comes back correctly. Until this is fixed, read the details through
        `POST /assets/query` with a filter on `id` and `expands`.

        Permission: *Read*.
      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: Load one expand of a specific asset page by page.
      required:
        - parentId
        - expandName
      properties:
        parentId:
          type: string
          format: uuid
          description: ID of the asset the details belong to.
        expandName:
          type: string
          enum:
            - object_data
            - object_essentials
            - object_blocks
            - children
          example: children
        cursor:
          type: string
          description: Cursor from `incompleteExpands`. Omit to start from the beginning.
        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: >-
        Conditions combined with `And` or `Or`. Groups can be nested through
        `groups`.
      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: Error according to 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: Meant for the application.
          example: UNKNOWN_PATH
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              path:
                type: string
                description: >-
                  Location in the request, such as `filter`, `sort`, `select` or
                  a parameter name.
              data:
                type: object
                additionalProperties: true
        traceId:
          type: string
          description: Quote it when contacting support.
    FilterLogic:
      type: string
      enum:
        - And
        - Or
      default: And
    ApiFilterCondition:
      type: object
      required:
        - path
        - op
      properties:
        path:
          type: string
          description: >
            Field. In the query only core fields; within an expand its fields,
            with `data.` also values from the data.
          example: name
        op:
          $ref: '#/components/schemas/FilterOperator'
        value:
          description: >-
            Comparison value; its data type follows the field. An array for
            `In`/`NotIn`, omitted for `IsNull`/`IsNotNull`.
          example: SRV
        arrayFilter:
          $ref: '#/components/schemas/ApiFilterGroup'
          description: Conditions on the list entries for `ArrayAny` and `ArrayAll`.
      additionalProperties: false
    NullsPosition:
      type: string
      enum:
        - Default
        - First
        - Last
      default: Default
    FilterOperator:
      type: string
      description: |
        Comparison: `Eq`, `Neq`, `Gt`, `Gte`, `Lt`, `Lte` ·
        Text, case-insensitive: `Contains`, `StartsWith`, `EndsWith` ·
        Pattern with `%` and `_`, case-sensitive: `Like` ·
        Set (`value` is an array): `In`, `NotIn` ·
        Empty: `IsNull`, `IsNotNull` ·
        Lists in an expand's data: `ArrayAny`, `ArrayAll` (with
        `arrayFilter`), `ArrayContains`
      enum:
        - Eq
        - Neq
        - Gt
        - Gte
        - Lt
        - Lte
        - Contains
        - StartsWith
        - EndsWith
        - Like
        - In
        - NotIn
        - IsNull
        - IsNotNull
        - ArrayAny
        - ArrayAll
        - ArrayContains
  responses:
    ExpandPage:
      description: One page of an expand's entries.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ExpandPage'
    BadRequest:
      description: >
        Invalid request – body unreadable, required field missing, unknown field
        (`UNKNOWN_PATH`), value does not fit the field (`FIELD_TYPE_MISMATCH`),
        operator does not fit (`UNSUPPORTED_OPERATOR`), `select`/`search` is not
        a JSON array (`INVALID_FORMAT`), unknown expand name
        (`VALIDATION_FAILED`), cursor damaged (`INVALID_CURSOR`) or expired
        (`CURSOR_EXPIRED`).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    Unauthorized:
      description: The request could not be assigned to a user (`UNAUTHORIZED`).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    Forbidden:
      description: >
        API key missing or without the required access (`FORBIDDEN`;
        `data.missingScopes` names what is missing) – or the cursor belongs to
        another user or tenant (`CURSOR_USER_MISMATCH`).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    NotFound:
      description: >
        No asset with this ID among the visible assets (`NOT_FOUND`,
        `data.entityType` = `asset`, `data.id`).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    TooManyRequests:
      description: >
        Quota used up (`REST_REQUEST_QUOTA_EXCEEDED`); the request was not
        executed and still counted.
      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: >-
        Unexpected error (`INTERNAL_ERROR`). Quote the `traceId` when contacting
        support.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    ServiceUnavailable:
      description: >
        The quota could not be checked (`SERVICE_UNAVAILABLE`); the request was
        not executed. Retry later.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
  headers:
    RetryAfter:
      description: Start of the next period as an HTTP date.
      schema:
        type: string
    RateLimitLimit:
      description: Requests included in the period. Absent without a limit.
      schema:
        type: integer
    RateLimitRemaining:
      description: Requests still available, included and purchased together.
      schema:
        type: integer
    RateLimitExtraRemaining:
      description: Of these, the purchased extra quota still available.
      schema:
        type: integer
    RateLimitReset:
      description: Start of the next period as a Unix timestamp (seconds).
      schema:
        type: integer
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >
        API key from Docusnap365 (*Administration › Integrations › API Keys*).
        Read endpoints require the access *Read*, write endpoints *Read and
        Write*.

````

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