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

# Search Reports

> Answers 'do reports already exist for these specific assets?'. Takes a batch of asset contents, normalizes each one the way ChainPatrol normalizes assets, and returns the reports covering them along with which of your assets each report matched. Use it to avoid filing a duplicate before calling `POST /report/create`. To browse or filter an organization's reports instead — by status, asset type, brand, date, review state — use `GET /organization/reports`, which returns the full report records with pagination.

## Overview

Search for existing reports within your organization by asset contents. Use this to
check whether a report already exists before creating a new one with
[Report Create](/docs/external-api/report-create).


## OpenAPI

````yaml POST /reports/search
openapi: 3.0.3
info:
  title: ChainPatrol External API - OpenAPI 3.0
  description: ChainPatrol External API documentation
  version: 2.0.0
servers:
  - url: https://app.chainpatrol.io/api/v2
security: []
tags:
  - name: asset
  - name: report
externalDocs:
  url: https://chainpatrol.com/docs
paths:
  /reports/search:
    post:
      tags:
        - reports
      summary: Look up reports by asset content
      description: >-
        Answers 'do reports already exist for these specific assets?'. Takes a
        batch of asset contents, normalizes each one the way ChainPatrol
        normalizes assets, and returns the reports covering them along with
        which of your assets each report matched. Use it to avoid filing a
        duplicate before calling `POST /report/create`. To browse or filter an
        organization's reports instead — by status, asset type, brand, date,
        review state — use `GET /organization/reports`, which returns the full
        report records with pagination.
      operationId: reportSearchExternal
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                assetContents:
                  type: array
                  items:
                    type: string
                  description: >-
                    Asset contents to look up — URLs, handles, addresses. Each
                    is normalized the way ChainPatrol normalizes assets, so
                    `https://Bad.Site/` matches a report holding the canonical
                    form.
                slug:
                  type: string
                  description: >-
                    Organization slug. Optional for organization-scoped API
                    keys, which resolve the organization from the key itself.
                    Required when your credentials can reach more than one
                    organization.
                reportedByCustomer:
                  type: boolean
                limit:
                  type: integer
                  minimum: 1
                  maximum: 100
                  default: 50
                  description: >-
                    Maximum number of reports to return, newest first. Defaults
                    to 50, maximum 100. Compare with `totalCount` to tell
                    whether the results were truncated.
              required:
                - assetContents
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  reports:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: number
                        title:
                          type: string
                          nullable: true
                          description: >-
                            Report title. Nullable because external / anonymous
                            reports don't always carry one.
                        status:
                          type: string
                        reportedByCustomer:
                          type: boolean
                        createdAt:
                          type: string
                          description: When the report was created
                        assets:
                          type: array
                          items:
                            type: string
                          description: >-
                            Which of the searched asset contents this report
                            covers.
                      required:
                        - id
                        - title
                        - status
                        - reportedByCustomer
                        - createdAt
                        - assets
                  totalCount:
                    type: number
                    description: >-
                      Total number of reports matching the search, ignoring
                      `limit`. A value greater than `reports.length` means the
                      results were truncated.
                required:
                  - reports
                  - totalCount
        '400':
          description: Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.BAD_REQUEST'
        '401':
          description: Authorization not provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.UNAUTHORIZED'
        '403':
          description: Insufficient access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.FORBIDDEN'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.INTERNAL_SERVER_ERROR'
      security:
        - ApiKey: []
components:
  schemas:
    error.BAD_REQUEST:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Invalid input data
        code:
          type: string
          description: The error code
          example: BAD_REQUEST
        issues:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
          description: An array of issues that were responsible for the error
          example: []
      required:
        - message
        - code
      title: Invalid input data error (400)
      description: The error information
      example:
        code: BAD_REQUEST
        message: Invalid input data
        issues: []
    error.UNAUTHORIZED:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Authorization not provided
        code:
          type: string
          description: The error code
          example: UNAUTHORIZED
        issues:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
          description: An array of issues that were responsible for the error
          example: []
      required:
        - message
        - code
      title: Authorization not provided error (401)
      description: The error information
      example:
        code: UNAUTHORIZED
        message: Authorization not provided
        issues: []
    error.FORBIDDEN:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Insufficient access
        code:
          type: string
          description: The error code
          example: FORBIDDEN
        issues:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
          description: An array of issues that were responsible for the error
          example: []
      required:
        - message
        - code
      title: Insufficient access error (403)
      description: The error information
      example:
        code: FORBIDDEN
        message: Insufficient access
        issues: []
    error.INTERNAL_SERVER_ERROR:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Internal server error
        code:
          type: string
          description: The error code
          example: INTERNAL_SERVER_ERROR
        issues:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
          description: An array of issues that were responsible for the error
          example: []
      required:
        - message
        - code
      title: Internal server error error (500)
      description: The error information
      example:
        code: INTERNAL_SERVER_ERROR
        message: Internal server error
        issues: []
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-API-KEY
      description: >-
        Your API key. This is required by most endpoints to access our API
        programatically. Reach out to us at
        [support@chainpatrol.io](mailto:support@chainpatrol.io?subject=Re:%20API%20Key%20for%20SDK&body=Company:%20%0AName:%20%0APurpose:%20)
        to get an API key for your use.

````