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

# Get one asset

> Returns one asset by its id. A value that is not a GUID does not match the route and is answered like any unknown route: 404 `NOT_FOUND` with `detail` "No endpoint matches 'GET …'.".

Requires the scope `api_read` (*Read*). The query parameter `search` is read but has no effect on this operation.




## OpenAPI

````yaml /api-reference/openapi.en.yaml get /asset/{id}
openapi: 3.0.3
info:
  title: Docusnap365 REST API
  version: v1
  description: >
    The public REST API of Docusnap365 for reading, querying and writing assets.


    **Request flow.** Every request passes these checks in this order: the API
    key (401 if it is missing or invalid), the rights of the key (403 if it
    lacks the right for the operation), the request quota (429, or 503 when the
    quota cannot be checked), then the operation itself. You grant the rights
    when you create the API key under *Administration › Integrations › API
    Keys*: *Read* (`api_read`) or *Read and Write* (`api_write`).


    **Request quota.** Every call to one of the operations counts as one
    request. The quota is shared with the MCP server of the same subscription.
    Once a request has been counted, the `X-RateLimit-*` headers accompany the
    response, including error responses; a subscription without a limit gets
    none.


    **Errors.** Errors are `application/problem+json` (RFC 9457) with the
    members `type`, `title`, `status`, `detail`, `instance`, `errorCode`,
    `traceId` and `errors`. Do not parse `detail`. There are two exceptions: the
    answer 401 has neither a body nor a Content-Type, even when the API key is
    missing; and on the write path an error of the ingest service is returned
    unchanged and carries `errorMessage` instead.
servers:
  - url: https://api.docusnap365.com/api/v1
security:
  - ApiKeyAuth: []
tags:
  - name: Assets
    description: Read and write single assets.
  - name: Query
    description: Query assets with filter, sort, expands and paging.
paths:
  /asset/{id}:
    get:
      tags:
        - Assets
      summary: Get one asset
      description: >
        Returns one asset by its id. A value that is not a GUID does not match
        the route and is answered like any unknown route: 404 `NOT_FOUND` with
        `detail` "No endpoint matches 'GET …'.".


        Requires the scope `api_read` (*Read*). The query parameter `search` is
        read but has no effect on this operation.
      operationId: getAssetById
      parameters:
        - name: id
          in: path
          required: true
          description: The id of the asset.
          schema:
            type: string
            format: uuid
        - $ref: '#/components/parameters/select'
      responses:
        '200':
          description: The asset.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Extra-Remaining:
              $ref: '#/components/headers/X-RateLimit-Extra-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetDto'
        '400':
          description: >-
            `select` is not a JSON array of strings, or a field is not
            available.
          x-error-codes:
            - INVALID_FORMAT
            - UNKNOWN_PATH
            - VALIDATION_FAILED
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/ForbiddenRead'
        '404':
          description: No asset with this id, or the asset is not visible to the user.
          x-error-codes:
            - NOT_FOUND
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              examples:
                An asset that does not exist:
                  value:
                    type: urn:ds365:error:not-found
                    title: Not Found
                    status: 404
                    detail: >-
                      Asset '3f2504e0-4f89-11d3-9a0c-0305e82c3301' was not
                      found.
                    instance: /api/v1/asset/3f2504e0-4f89-11d3-9a0c-0305e82c3301
                    errorCode: NOT_FOUND
                    traceId: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
                    errors:
                      - code: NOT_FOUND
                        data:
                          entityType: asset
                          id: 3f2504e0-4f89-11d3-9a0c-0305e82c3301
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  parameters:
    select:
      name: select
      in: query
      required: false
      description: >-
        JSON array of strings with the fields to return, for example
        `["name","status"]`. The id is always read. Another value is rejected
        with 400 `INVALID_FORMAT`.
      schema:
        type: string
  headers:
    X-RateLimit-Limit:
      description: >-
        Requests included per quota period. Not sent for a subscription without
        a limit.
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Included plus extra requests still available in the running period.
      schema:
        type: integer
    X-RateLimit-Extra-Remaining:
      description: Extra requests still available. They are not reset with the period.
      schema:
        type: integer
    X-RateLimit-Reset:
      description: Start of the next quota period as Unix time in seconds.
      schema:
        type: integer
        format: int64
    Retry-After:
      description: >-
        Start of the next quota period as an HTTP date. The same instant as
        `X-RateLimit-Reset`.
      schema:
        type: string
  schemas:
    AssetDto:
      title: Asset
      type: object
      additionalProperties: true
      description: >
        An asset. With `select` on `POST /assets/query` an item holds only the
        selected properties and the lifted expands under their names
        (`object_data` as an object, the others as a list).
      properties:
        id:
          type: string
          format: uuid
        entityId:
          type: string
          format: uuid
          nullable: true
        schemaId:
          type: string
          format: uuid
          description: The type of the asset.
        parentId:
          type: string
          format: uuid
          nullable: true
        name:
          type: string
        objectType:
          type: string
        type:
          type: string
        iconId:
          type: string
        sourceType:
          type: string
        organizationId:
          type: string
          format: uuid
          nullable: true
        locationId:
          type: string
          format: uuid
          nullable: true
        platformId:
          type: string
          format: uuid
          nullable: true
        domainId:
          type: string
          format: uuid
          nullable: true
        version:
          type: integer
          format: int32
        status:
          type: string
        isManually:
          type: boolean
        createdAt:
          type: string
          format: date-time
          nullable: true
        createdBy:
          type: string
          format: uuid
          nullable: true
        createdByDisplayName:
          type: string
        modifiedAt:
          type: string
          format: date-time
          nullable: true
        modifiedBy:
          type: string
          format: uuid
          nullable: true
        modifiedByDisplayName:
          type: string
        deletedAt:
          type: string
          format: date-time
          nullable: true
        deletedBy:
          type: string
          format: uuid
          nullable: true
        deletedByDisplayName:
          type: string
        expands:
          type: object
          nullable: true
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/ExpandRow'
          description: >-
            The expands by name. Only in the complete form, not when `select`
            lifted them.
    ProblemDetails:
      title: Problem details
      type: object
      description: >-
        An error according to RFC 9457. `errors` is never empty; for one error
        `errors[0].code` equals `errorCode`.
      properties:
        type:
          type: string
          description: >-
            A URN derived from `errorCode`, for example
            `urn:ds365:error:not-found`. It cannot be resolved.
        title:
          type: string
          description: A fixed English text per code.
        status:
          type: integer
          description: The HTTP status code.
        detail:
          type: string
          description: >-
            A technical English sentence. The text may change and should not be
            evaluated.
        instance:
          type: string
          description: The request path.
        errorCode:
          type: string
          description: >-
            The error code. The codes of an operation are listed in
            `x-error-codes` of its response.
        traceId:
          type: string
          description: The trace id of the request. Give it to support.
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ProblemErrorItem'
    ExpandRow:
      title: Expand row
      type: object
      additionalProperties: true
      description: >-
        One row of an expand. Columns without a value are omitted. JSON columns
        (`data`) are returned as JSON.
    ProblemErrorItem:
      title: Error item
      type: object
      required:
        - code
      properties:
        code:
          type: string
          description: The specific code of this item.
        path:
          type: string
          description: >-
            The field or parameter the error concerns. Absent when it concerns
            the whole request.
        data:
          type: object
          additionalProperties: true
          description: >-
            Further values, for example `entityType` and `id` of a missing asset
            or `missingScopes`. Absent when empty.
  responses:
    Unauthorized:
      description: The API key is missing or invalid.
      x-error-codes:
        - UNAUTHORIZED
    ForbiddenRead:
      description: >-
        The key lacks the scope `api_read` (*Read*), or the permission layer of
        the database refused the access.
      x-error-codes:
        - FORBIDDEN
        - PERMISSION_DENIED
        - MODULE_NOT_IN_EDITION
        - TENANT_FROZEN
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
          examples:
            A key without the required scope:
              value:
                type: urn:ds365:error:forbidden
                title: Forbidden
                status: 403
                detail: 'Missing required scopes: api_read'
                instance: /api/v1/assets
                errorCode: FORBIDDEN
                traceId: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
                errors:
                  - code: FORBIDDEN
                    data:
                      missingScopes:
                        - api_read
    TooManyRequests:
      description: >-
        The request quota of the subscription is used up, included and extra
        requests alike. Retry after the instant in `Retry-After`. A denied
        request is counted as well.
      x-error-codes:
        - REST_REQUEST_QUOTA_EXCEEDED
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Extra-Remaining:
          $ref: '#/components/headers/X-RateLimit-Extra-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
          examples:
            The quota is used up:
              value:
                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-12-01T00:00:00.0000000+00:00.
                instance: /api/v1/assets
                errorCode: REST_REQUEST_QUOTA_EXCEEDED
                traceId: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
                errors:
                  - code: REST_REQUEST_QUOTA_EXCEEDED
                    data:
                      requestsLimit: 10000
                      requestsUsed: 10000
                      quotaResetAt: '2026-12-01T00:00:00+00:00'
    InternalError:
      description: >-
        An unexpected fault. `detail` is a fixed sentence; use `traceId` when
        reporting it.
      x-error-codes:
        - INTERNAL_ERROR
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    ServiceUnavailable:
      description: >-
        The request quota could not be checked and the request was therefore not
        served, or the database failed transiently. Retrying may succeed.
      x-error-codes:
        - SERVICE_UNAVAILABLE
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        The API key of the subscription. Each operation names the scope it needs
        in `x-pat-scopes`: `api_read` (in the interface *Read*) or `api_write`
        (*Read and Write*). The key is created under *Administration ›
        Integrations › API Keys*.

````

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