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

# Get report findings

> Read the GET /reports/{reportId}/findings request and response contract generated from the live Ultiwrite OpenAPI document.

This reference is generated from the [canonical Ultiwrite OpenAPI contract](https://dwsoffshorepartners.com/.well-known/openapi.json), shared with the native API documentation. [Follow the quickstart](https://docs.dwsoffshorepartners.com/quickstart.md) to obtain approved account access before calling the API.


## OpenAPI

````yaml https://dwsoffshorepartners.com/.well-known/openapi.json GET /reports/{reportId}/findings
openapi: 3.1.0
info:
  title: Ultiwrite API
  version: '2026-11-01'
  description: >-
    Ultiwrite is operated by DWS Offshore Fund dba Ultiwrite. Ultiwrite examines
    the documents and evidence behind opportunities, organizations,
    counterparties, acquisitions, financings and portfolios, and returns
    released findings: source economics, document integrity, material
    contradictions, unresolved claims and the next diligence move. The API never
    renders an autonomous approve or decline.


    Partner API (dashboard API key or OAuth 2.1): explicitly approved accounts
    submit evidence, continue asynchronous processing and read the released
    report. Polling uses API requests but no additional analysis credits.
    Reports are never assumed to be immediate.


    Provisioned routes authenticate with an admin-issued uw_live_ API key and
    are listed by name only.


    Versioning: the major version is in the path (/api/v1). Within v1, changes
    are additive; a field or operation is removed only after a deprecation
    notice in this document (deprecated: true) and the changelog. Response
    header Ultiwrite-Api-Version identifies the contract revision.


    API access requires an explicit administrator grant, independent of paid
    plan. Monthly and fixed-minute request limits are pooled across every key
    and partner OAuth grant on the account. Every admitted request, including
    polling and authenticated validation errors, uses one request; failed
    authentication and quota denials do not. Analysis credits use the existing
    separate ledger. Exceeding a limit returns 429 with Retry-After.
  contact:
    name: Ultiwrite
    url: https://dwsoffshorepartners.com/contact
  termsOfService: https://dwsoffshorepartners.com/terms
servers:
  - url: https://dwsoffshorepartners.com/api/v1
    description: Production v1
security: []
tags:
  - name: Account
    description: Who the token acts for, what the API supports, and analysis allowance.
  - name: Cases
    description: Submit evidence packages and follow the asynchronous analysis workflow.
  - name: Results
    description: Released findings and Decision Briefs. Reads never run the engine.
  - name: Reports
    description: Delivery options for released reports.
  - name: Provisioned (API key)
    description: Pre-existing provisioned server-to-server routes.
externalDocs:
  description: Developer documentation
  url: https://dwsoffshorepartners.com/docs/api
paths:
  /reports/{reportId}/findings:
    get:
      tags:
        - Results
      summary: Read a released report by id
      description: >-
        Same as the case findings read, addressed by report id (including
        website reports with no case).
      operationId: getReportFindings
      parameters:
        - name: reportId
          in: path
          required: true
          description: >-
            Saved report id (linkedReportId on a case, or reportId in the cases
            list).
          schema:
            $ref: '#/components/schemas/ResourceId'
        - name: cursor
          in: query
          required: false
          description: >-
            Decimal offset into findings. For the next report page use
            report.nextCursor, or retain report.pageBinding.findingsOffset when
            it is null (zero only when absent). Send all eight collection
            cursors together: pageToken binds the entire offered cursor tuple.
            Do not append this collection again when its offset is unchanged.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: sectionCursor
          in: query
          required: false
          description: >-
            Decimal offset into sections. For the next report page use
            report.nextSectionCursor, or retain report.pageBinding.sectionOffset
            when it is null (zero only when absent). Send all eight collection
            cursors together: pageToken binds the entire offered cursor tuple.
            Do not append this collection again when its offset is unchanged.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: evidenceCursor
          in: query
          required: false
          description: >-
            Decimal offset into evidence items. For the next report page use
            report.nextEvidenceCursor, or retain
            report.pageBinding.evidenceOffset when it is null (zero only when
            absent). Send all eight collection cursors together: pageToken binds
            the entire offered cursor tuple. Do not append this collection again
            when its offset is unchanged.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: limitationCursor
          in: query
          required: false
          description: >-
            Decimal offset into limitations. For the next report page use
            report.nextLimitationCursor, or retain
            report.pageBinding.limitationOffset when it is null (zero only when
            absent). Send all eight collection cursors together: pageToken binds
            the entire offered cursor tuple. Do not append this collection again
            when its offset is unchanged.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: chronologyCursor
          in: query
          required: false
          description: >-
            Decimal offset into chronology. For the next report page use
            report.nextChronologyCursor, or retain
            report.pageBinding.chronologyOffset when it is null (zero only when
            absent). Send all eight collection cursors together: pageToken binds
            the entire offered cursor tuple. Do not append this collection again
            when its offset is unchanged.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: actionCursor
          in: query
          required: false
          description: >-
            Decimal offset into actions. For the next report page use
            report.nextActionCursor, or retain report.pageBinding.actionOffset
            when it is null (zero only when absent). Send all eight collection
            cursors together: pageToken binds the entire offered cursor tuple.
            Do not append this collection again when its offset is unchanged.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: metricCursor
          in: query
          required: false
          description: >-
            Decimal offset into metrics. For the next report page use
            report.nextMetricCursor, or retain report.pageBinding.metricOffset
            when it is null (zero only when absent). Send all eight collection
            cursors together: pageToken binds the entire offered cursor tuple.
            Do not append this collection again when its offset is unchanged.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: extensionCursor
          in: query
          required: false
          description: >-
            Decimal offset into schema extensions. For the next report page use
            report.nextExtensionCursor, or retain
            report.pageBinding.extensionOffset when it is null (zero only when
            absent). Send all eight collection cursors together: pageToken binds
            the entire offered cursor tuple. Do not append this collection again
            when its offset is unchanged.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: limit
          in: query
          required: false
          description: Findings per page, 1 through 12.
          schema:
            type: integer
            minimum: 1
            maximum: 12
        - name: snapshot
          in: query
          required: false
          description: >-
            Use report.snapshot from the previous saved-report response.
            Required with any non-zero cursor so pages come from one frozen
            document.
          schema:
            type: string
            pattern: ^[a-f0-9]{64}$
        - name: pageToken
          in: query
          required: false
          description: >-
            Use the top-level pageToken from the previous response. It binds
            this grant, target, snapshot and the entire offered cursor tuple:
            send all eight matching next collection positions together,
            retaining a collection’s current report.pageBinding offset when its
            next cursor is null. An arbitrary cursor mix returns unbound_page.
            Required with any non-zero cursor.
          schema:
            type: string
            pattern: ^[A-Za-z0-9_-]{8,2000}\.[A-Za-z0-9_-]{20,200}$
        - name: spanField
          in: query
          required: false
          description: >-
            Field of spanTarget to read. brief/decisionBrief returns the
            structured Decision Brief JSON in slices.
          schema:
            type: string
            enum:
              - summary
              - conclusion
              - whyItMatters
              - coherenceExplanation
              - action
              - counterEvidence
              - title
              - observation
              - interpretation
              - takeaway
              - statement
              - label
              - brief
              - decisionBrief
              - limitation
              - detail
              - source
              - unit
              - value
        - name: spanId
          in: query
          required: false
          description: Item id for finding, section and evidence spans.
          schema:
            type: string
            pattern: ^[A-Za-z0-9_-]{1,40}$
        - name: spanIndex
          in: query
          required: false
          description: >-
            Item index for list spans (counter-evidence, statements,
            limitations, chronology, actions, metrics).
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: spanCursor
          in: query
          required: false
          description: Unicode code-point offset into the field.
          schema:
            type: string
            pattern: ^[0-9]{1,9}$
        - name: spanLimit
          in: query
          required: false
          description: Code points per slice, 1 through 2000.
          schema:
            type: integer
            minimum: 1
            maximum: 2000
        - name: spanTarget
          in: query
          required: false
          description: >-
            Read one long field in code-point slices instead of a page. Requires
            spanField and spanCursor.
          schema:
            type: string
            enum:
              - finding
              - section
              - evidence
              - brief
              - limitation
              - chronology
              - action
              - metric
      responses:
        '200':
          description: Report page.
          headers:
            X-Request-Id:
              description: Request correlation id.
              schema:
                type: string
            X-Api-Requests-Limit:
              description: >-
                Monthly account API request limit. Present after successful
                admission.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Remaining:
              description: >-
                Monthly requests remaining immediately after this request was
                admitted; other concurrent requests may reduce it.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Reset:
              description: >-
                Next UTC calendar-month reset as an ISO 8601 timestamp. Present
                after successful admission.
              schema:
                type: string
                format: date-time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Findings'
        '400':
          description: >-
            Invalid input. No new evidence package was accepted. If
            authenticated and admitted, the request counts toward the API
            request allowance.
          headers:
            X-Request-Id:
              description: Request correlation id.
              schema:
                type: string
            X-Api-Requests-Limit:
              description: >-
                Monthly account API request limit. Present after successful
                admission.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Remaining:
              description: >-
                Monthly requests remaining immediately after this request was
                admitted; other concurrent requests may reduce it.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Reset:
              description: >-
                Next UTC calendar-month reset as an ISO 8601 timestamp. Present
                after successful admission.
              schema:
                type: string
                format: date-time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: >-
            Missing, invalid, expired or revoked token, or a token issued for
            another resource. See WWW-Authenticate.
          headers:
            X-Request-Id:
              description: Request correlation id.
              schema:
                type: string
            X-Api-Requests-Limit:
              description: >-
                Monthly account API request limit. Present after successful
                admission.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Remaining:
              description: >-
                Monthly requests remaining immediately after this request was
                admitted; other concurrent requests may reduce it.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Reset:
              description: >-
                Next UTC calendar-month reset as an ISO 8601 timestamp. Present
                after successful admission.
              schema:
                type: string
                format: date-time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Explicit account API approval is missing or the credential lacks a
            required scope.
          headers:
            X-Request-Id:
              description: Request correlation id.
              schema:
                type: string
            X-Api-Requests-Limit:
              description: >-
                Monthly account API request limit. Present after successful
                admission.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Remaining:
              description: >-
                Monthly requests remaining immediately after this request was
                admitted; other concurrent requests may reduce it.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Reset:
              description: >-
                Next UTC calendar-month reset as an ISO 8601 timestamp. Present
                after successful admission.
              schema:
                type: string
                format: date-time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            Not found in the authorized organization, or the API is not enabled.
            Another organization’s records are indistinguishable from absent
            ones.
          headers:
            X-Request-Id:
              description: Request correlation id.
              schema:
                type: string
            X-Api-Requests-Limit:
              description: >-
                Monthly account API request limit. Present after successful
                admission.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Remaining:
              description: >-
                Monthly requests remaining immediately after this request was
                admitted; other concurrent requests may reduce it.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Reset:
              description: >-
                Next UTC calendar-month reset as an ISO 8601 timestamp. Present
                after successful admission.
              schema:
                type: string
                format: date-time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            Account monthly request allowance, rate limit or concurrency budget
            exceeded. See Retry-After.
          headers:
            X-Request-Id:
              description: Request correlation id.
              schema:
                type: string
            X-Api-Requests-Limit:
              description: >-
                Monthly account API request limit. Present after successful
                admission.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Remaining:
              description: >-
                Monthly requests remaining immediately after this request was
                admitted; other concurrent requests may reduce it.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Reset:
              description: >-
                Next UTC calendar-month reset as an ISO 8601 timestamp. Present
                after successful admission.
              schema:
                type: string
                format: date-time
            Retry-After:
              description: >-
                Suggested delay in seconds before retrying; present for
                rate/quota denials and transient failures with a known retry
                window.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Temporarily unavailable. See Retry-After. No completion is claimed.
          headers:
            X-Request-Id:
              description: Request correlation id.
              schema:
                type: string
            X-Api-Requests-Limit:
              description: >-
                Monthly account API request limit. Present after successful
                admission.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Remaining:
              description: >-
                Monthly requests remaining immediately after this request was
                admitted; other concurrent requests may reduce it.
              schema:
                type: integer
                minimum: 0
            X-Api-Requests-Reset:
              description: >-
                Next UTC calendar-month reset as an ISO 8601 timestamp. Present
                after successful admission.
              schema:
                type: string
                format: date-time
            Retry-After:
              description: >-
                Suggested delay in seconds before retrying; present for
                rate/quota denials and transient failures with a known retry
                window.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - UltiwriteApiKey: []
        - UltiwriteOAuth:
            - ultiwrite:read
components:
  schemas:
    ResourceId:
      type: string
      minLength: 1
      maxLength: 80
      pattern: ^[A-Za-z0-9_-]+$
    Findings:
      type: object
      additionalProperties: true
      required:
        - caseId
      properties:
        caseId:
          type:
            - string
            - 'null'
        reportId:
          type: string
        state:
          type: string
          description: >-
            saved_report, not_ready, stale_snapshot, unbound_page, or
            continuation_unavailable. not_ready is not a negative finding.
        report:
          type:
            - object
            - 'null'
          description: >-
            Authorized customer document when a report page was returned.
            savedDecision is the published label, not a stored favorable
            sentence. Null when the report was not returned.
        completeness:
          type: object
          description: >-
            Present on not_ready and page-denial results. A saved_report page
            carries completeness inside report.
        link:
          type: string
        snapshot:
          type:
            - string
            - 'null'
        contentTrust:
          type: string
    Error:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
            - requestId
          properties:
            code:
              type: string
              description: >-
                Stable machine-readable code, for example invalid_input,
                invalid_token, api_access_denied, insufficient_scope,
                api_quota_exceeded, not_found, choice_frozen, file_too_large,
                refused_content, rate_limited, deadline, service_unavailable.
            message:
              type: string
              description: >-
                Safe human-readable explanation. Never contains credentials,
                stack traces or document text.
            requestId:
              type: string
              description: Echo of the X-Request-Id response header. Quote it to support.
  securitySchemes:
    UltiwriteApiKey:
      type: http
      scheme: bearer
      bearerFormat: ultiwrite_live_*
      description: >-
        Create a key at /settings/api after an administrator approves your
        account. The key is shown once, can be revoked, and shares the account
        request allowance with other keys and partner OAuth grants. Send only in
        Authorization. These keys are not accepted by MCP or the legacy
        provisioned routes.
    UltiwriteOAuth:
      type: oauth2
      description: >-
        OAuth 2.1 authorization code with PKCE (S256), public clients
        (token_endpoint_auth_method none). Register a client (RFC 7591) at
        https://dwsoffshorepartners.com/api/integrations/ultiwrite/oauth/register;
        registration accepts only approved HTTPS callbacks or a native loopback
        callback http://127.0.0.1:<port>/callback with application_type native.
        Send resource=https://dwsoffshorepartners.com/api/v1 (RFC 8707) on the
        authorization and token requests; tokens for any other resource are
        refused. Access tokens last 10 minutes; refresh tokens last 14 days and
        rotate; authorization codes expire after 60 seconds.
      flows:
        authorizationCode:
          authorizationUrl: >-
            https://dwsoffshorepartners.com/api/integrations/ultiwrite/oauth/authorize
          tokenUrl: >-
            https://dwsoffshorepartners.com/api/integrations/ultiwrite/oauth/token
          refreshUrl: >-
            https://dwsoffshorepartners.com/api/integrations/ultiwrite/oauth/token
          scopes:
            ultiwrite:read: >-
              Read cases, status, released reports, Decision Briefs and delivery
              options in the authorized organization.
            ultiwrite:evidence: >-
              Submit authorized evidence for analysis in the authorized
              organization.

````

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