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

# Bulk-reopen findings by component/path scope

> Reopens all findings matching the given project, domain_slug, and optional purl/path_prefix scope that are in a reopenable state (resolved, superseded_by_rule → reopened; assigned → open) in a single transaction — the symmetric undo of bulk-resolve. The operation is all-or-nothing: a failure on any finding rolls back all reopens. Already-open findings in scope are skipped idempotently. Each reopen clears the finding's resolution pointer and emits a finding.reopened audit event.



## OpenAPI

````yaml /api-reference/earnie/triage-openapi.json post /v1/findings/actions/bulk-reopen
openapi: 3.0.3
info:
  title: Earnie Findings API
  description: List and read findings, triage them, and review resolutions.
  version: 1.0.0
servers:
  - url: https://{tenant}.earnie.dev
    description: Your Earnie deployment
    variables:
      tenant:
        default: your-company
        description: >-
          Your organization's Earnie address, as shown in your browser when you
          sign in.
security:
  - bearerAuth: []
paths:
  /v1/findings/actions/bulk-reopen:
    post:
      tags:
        - findings
      summary: Bulk-reopen findings by component/path scope
      description: >-
        Reopens all findings matching the given project, domain_slug, and
        optional purl/path_prefix scope that are in a reopenable state
        (resolved, superseded_by_rule → reopened; assigned → open) in a single
        transaction — the symmetric undo of bulk-resolve. The operation is
        all-or-nothing: a failure on any finding rolls back all reopens.
        Already-open findings in scope are skipped idempotently. Each reopen
        clears the finding's resolution pointer and emits a finding.reopened
        audit event.
      operationId: PostV1FindingsActionsBulkReopen
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkReopenRequest'
      responses:
        '200':
          description: Bulk reopen result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkReopenResponse'
        '400':
          description: Validation error (invalid request)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Insufficient permissions (findings:write required)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    BulkReopenRequest:
      type: object
      description: >-
        Request body for bulk-reopening findings by component and/or path scope
        — the symmetric undo of bulk-resolve. All matching findings in a
        reopenable state (resolved, superseded_by_rule, assigned) are reopened
        in a single transaction. The operation is all-or-nothing: a failure on
        any finding rolls back all reopens. Already-open findings in scope are
        skipped idempotently. Reopen has no reason or replacement concept. When
        finding_ids is present it is the authoritative finding scope; purl and
        path_prefix are ignored, while organization, project, and domain
        authorization still apply.
      required:
        - project_id
        - domain_slug
        - scope
      properties:
        project_id:
          type: string
          format: uuid
          description: Project whose findings are targeted.
        domain_slug:
          type: string
          description: Producer domain_slug to filter findings (e.g. "oss").
        path_prefix:
          type: string
          nullable: true
          description: Optional folder path prefix scope filter.
        purl:
          type: string
          nullable: true
          description: Optional component PURL scope filter.
        finding_ids:
          type: array
          minItems: 1
          uniqueItems: true
          items:
            type: string
            format: uuid
          description: >-
            Optional exact finding IDs. When present, these IDs replace purl and
            path_prefix as the finding scope, then are intersected with the
            authorized organization, project, and domain scope.
        scope:
          $ref: '#/components/schemas/Scope'
        justification:
          type: string
          nullable: true
          description: Optional human-readable justification for the bulk reopen.
    BulkReopenResponse:
      type: object
      description: >-
        Result of a bulk-reopen operation. affected is the count of findings
        newly reopened in this call. unchanged counts findings that were already
        open/reopened and skipped idempotently. skipped counts findings excluded
        by scope or other non-error conditions. failed counts findings that
        caused an error (currently at most 1 — the operation aborts on first
        failure).
      required:
        - affected
        - unchanged
        - skipped
        - failed
      properties:
        affected:
          type: integer
          description: Number of findings newly reopened in this call.
        unchanged:
          type: integer
          description: Number of findings already open/reopened (idempotent skip).
        skipped:
          type: integer
          description: >-
            Number of findings excluded by scope filter or other non-error
            conditions.
        failed:
          type: integer
          description: Number of findings that caused an error (triggers full rollback).
        finding_ids:
          type: array
          items:
            type: string
            format: uuid
          description: >-
            IDs of the findings that were reopened in this call. Callers can use
            this list to update local state without a full re-fetch.
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
        message:
          type: string
    Scope:
      type: object
      required:
        - kind
        - value
      properties:
        kind:
          type: string
          enum:
            - path
            - purl
            - rule_param
        value:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        An Earnie API key, sent as `Authorization: Bearer sk_earnie_...`. Create
        one under Settings > API keys. The key's scopes decide which operations
        it may call.

````

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