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

# Continue from a cursor

> Continues a query from the `nextCursor` of a page or from the cursor of an incomplete expand. The cursor carries the original query; nothing else is sent.

A cursor is valid for one hour, for the user and the subscription it was issued to.

The items are always complete assets with `expands`, also if the first page was requested with `select`. A continued page holds the expands of the cardinality "one" only; expands that return several rows per asset are not carried to the next pages. For an expand cursor the items are the rows of that expand.

Requires the scope `api_read` (*Read*).




## OpenAPI

````yaml /api-reference/openapi.en.yaml post /cursor/continue
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:
  /cursor/continue:
    post:
      tags:
        - Query
      summary: Continue from a cursor
      description: >
        Continues a query from the `nextCursor` of a page or from the cursor of
        an incomplete expand. The cursor carries the original query; nothing
        else is sent.


        A cursor is valid for one hour, for the user and the subscription it was
        issued to.


        The items are always complete assets with `expands`, also if the first
        page was requested with `select`. A continued page holds the expands of
        the cardinality "one" only; expands that return several rows per asset
        are not carried to the next pages. For an expand cursor the items are
        the rows of that expand.


        Requires the scope `api_read` (*Read*).
      operationId: continueFromCursor
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiCursorRequest'
      responses:
        '200':
          description: The next page.
          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/ApiQueryResponse'
        '400':
          description: The body cannot be read, or the cursor is invalid or expired.
          x-error-codes:
            - VALIDATION_FAILED
            - INVALID_CURSOR
            - CURSOR_EXPIRED
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/ForbiddenCursor'
        '404':
          description: >-
            The cursor is an expand cursor and its parent asset is no longer
            visible to the user.
          x-error-codes:
            - NOT_FOUND
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  schemas:
    ApiCursorRequest:
      title: Cursor request
      type: object
      required:
        - cursor
      properties:
        cursor:
          type: string
          description: The cursor from `nextCursor` or from `incompleteExpands`.
    ApiQueryResponse:
      title: Query response
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            anyOf:
              - $ref: '#/components/schemas/AssetDto'
              - $ref: '#/components/schemas/ExpandRow'
          description: The assets, or for an expand cursor the rows of the expand.
        nextCursor:
          type: string
          nullable: true
          description: >-
            Present when more items exist. Valid for one hour, for the same user
            and subscription.
        hasMore:
          type: boolean
          description: True when more items exist.
        incompleteExpands:
          type: object
          nullable: true
          additionalProperties:
            $ref: '#/components/schemas/ApiIncompleteExpand'
          description: >-
            Expands that hold more rows than their `limit`, keyed
            `name:parentId`.
    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'
    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.
    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.
    ApiIncompleteExpand:
      title: Incomplete expand
      type: object
      required:
        - parentId
        - cursor
      properties:
        parentId:
          type: string
          format: uuid
          description: The asset whose expand is incomplete.
        cursor:
          type: string
          description: The cursor to continue the expand with `POST /assets/expand`.
        loadedCount:
          type: integer
          format: int32
          description: The number of rows already returned.
    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.
  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
  responses:
    Unauthorized:
      description: The API key is missing or invalid.
      x-error-codes:
        - UNAUTHORIZED
    ForbiddenCursor:
      description: >-
        The key lacks the scope `api_read` (*Read*), the cursor was issued to
        another user or another subscription, or the permission layer of the
        database refused the access.
      x-error-codes:
        - FORBIDDEN
        - CURSOR_USER_MISMATCH
        - CURSOR_DATA_SOURCE_MISMATCH
        - PERMISSION_DENIED
        - MODULE_NOT_IN_EDITION
        - TENANT_FROZEN
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    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.