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

# Get Organization Report

> Answers 'what happened to this report?'. Takes a report ID, for example from a report link (app.chainpatrol.io/admin/<slug>/reports/<reportId>), and returns the report with each of its assets: ChainPatrol's review, the asset's status and whether it was still online when last checked, and your organization's takedown of it. Only your organization's reports: any other ID returns 404. To find reports by filters instead, use `GET /organization/reports`.

## Overview

Get one of your organization's reports by its ID, with what happened to each asset in it: ChainPatrol's review, whether the asset is blocked, whether it was still online when last checked, and your organization's takedown.

Use it to answer "what happened to this report?" or "why is this still live?" for a report you already have, for example from a report link in the ChainPatrol app. The ID is the number at the end of the link: `app.chainpatrol.io/admin/<slug>/reports/<reportId>`. To find reports by filters instead, use [`GET /organization/reports`](/docs/external-api/organization-reports-list).

The organization is inferred from your API key. Only your organization's reports are returned: any other ID returns `404`, the same as an ID that doesn't exist.

## Quick Start

### Authentication

Include your API key in the `X-API-KEY` header:

```bash theme={null}
X-API-KEY: your_api_key_here
```

### Example Request

```typescript TypeScript theme={null}
const reportId = 1823334;

const response = await fetch(
  `https://app.chainpatrol.io/api/v2/organization/reports/${reportId}`,
  {
    method: "GET",
    headers: {
      "X-API-KEY": "YOUR_API_KEY_HERE",
    },
  }
);

const { report } = await response.json();
console.log(report.assets);
```

```python Python theme={null}
import requests

report_id = 1823334

response = requests.get(
    f"https://app.chainpatrol.io/api/v2/organization/reports/{report_id}",
    headers={
        "X-API-KEY": "YOUR_API_KEY_HERE",
    },
)

report = response.json()["report"]
print(report["assets"])
```

```bash cURL theme={null}
curl -X GET 'https://app.chainpatrol.io/api/v2/organization/reports/1823334' \
  -H 'X-API-KEY: YOUR_API_KEY_HERE'
```

## Path Parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| reportId | number | Yes | The report's ID, as in its link: `app.chainpatrol.io/admin/<slug>/reports/<reportId>` |

## Query Parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| slug | string | No | Organization slug. Leave it out with an organization API key, which already decides the organization. Needed only when your credentials can reach more than one organization. |

## Response

### Success Response

```json theme={null}
{
  "report": {
    "id": 1823334,
    "title": "Fake wallet site",
    "description": "Phishing site impersonating our wallet",
    "status": "IN_PROGRESS",
    "reportedByCustomer": true,
    "slaDueAt": "2026-10-21T18:00:00.000Z",
    "duplicateOfId": null,
    "createdAt": "2026-10-20T18:00:00.000Z",
    "updatedAt": "2026-10-21T09:12:00.000Z",
    "assets": [
      {
        "proposalId": 4321,
        "reviewStatus": "APPROVED",
        "asset": {
          "id": 12345,
          "type": "URL",
          "content": "https://fake-wallet.example",
          "status": "BLOCKED",
          "livenessStatus": "ALIVE"
        },
        "takedown": {
          "id": 987,
          "status": "IN_PROGRESS",
          "createdAt": "2026-10-20T19:05:00.000Z",
          "updatedAt": "2026-10-21T08:40:00.000Z"
        }
      }
    ]
  }
}
```

### Response Fields

| Field | Type | Description |
| - | - | - |
| report.id | number | The report's ID |
| report.title | string | The report's title |
| report.description | string | The report's description |
| report.status | string \| null | The report's status: `TODO`, `IN_PROGRESS` or `CLOSED` |
| report.reportedByCustomer | boolean | Whether your organization submitted the report |
| report.slaDueAt | string \| null | SLA deadline for the report. `null` when no SLA applies |
| report.duplicateOfId | number \| null | ID of the report this one duplicates. `null` when it isn't a duplicate |
| report.createdAt / report.updatedAt | string | ISO 8601 timestamps |
| report.assets | array | Each asset in the report, oldest first |
| report.assets\[].proposalId | number | The proposal for this asset in this report |
| report.assets\[].reviewStatus | string | ChainPatrol's review of this asset in this report: `PENDING`, `APPROVED` or `REJECTED` |
| report.assets\[].asset.id | number | The asset's ID |
| report.assets\[].asset.type | string | The asset type, such as `URL`, `TWITTER` or `ADDRESS` |
| report.assets\[].asset.content | string | The asset itself: the URL, handle or address |
| report.assets\[].asset.status | string | The asset's status now: `BLOCKED`, `ALLOWED` or `UNKNOWN` |
| report.assets\[].asset.livenessStatus | string | Whether the asset was still online when last checked: `ALIVE`, `DEAD` or `UNKNOWN` |
| report.assets\[].takedown | object \| null | Your organization's takedown of this asset. `null` when none was started |
| report.assets\[].takedown.status | string | `TODO`, `IN_PROGRESS`, `COMPLETED`, `CANCELLED`, `PENDING_INPUT`, `PENDING_EVIDENCE`, `PENDING_RETRACTION`, `RETRACTION_SENT` or `RETRACTED` |
| report.assets\[].takedown.createdAt / updatedAt | string | When the takedown started and when it last changed |

## Error Responses

### 401 Unauthorized

The API key is missing or invalid:

```json theme={null}
{
  "message": "Authentication required. Provide API key or valid session.",
  "code": "UNAUTHORIZED"
}
```

### 403 Forbidden

You passed a `slug` for an organization your credentials can't access.

### 404 Not Found

No report with this ID belongs to your organization, either because it doesn't exist or because it belongs to another organization:

```json theme={null}
{
  "message": "Report not found",
  "code": "NOT_FOUND"
}
```

## Use Cases

### Why is this still live?

An asset that's `BLOCKED` is already on ChainPatrol's blocklist, so wallets and browsers that use it warn people. Being offline is a separate step: the takedown with the site's host or platform. Read the two together:

```typescript theme={null}
const { report } = await response.json();

for (const { asset, takedown } of report.assets) {
  if (asset.livenessStatus === "ALIVE") {
    console.log(
      `${asset.content} is ${asset.status} and still online; takedown: ${takedown?.status ?? "not started"}`
    );
  }
}
```

## Notes

* The takedown shown is your organization's. A takedown another organization filed on the same asset isn't included.
* `livenessStatus` is from the last check, not a live request.
* All timestamps are ISO 8601 in UTC.


## OpenAPI

````yaml GET /organization/reports/{reportId}
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
  - name: dark-web
externalDocs:
  url: https://chainpatrol.com/docs
paths:
  /organization/reports/{reportId}:
    get:
      tags:
        - organization
      summary: Get one organization report
      description: >-
        Answers 'what happened to this report?'. Takes a report ID, for example
        from a report link (app.chainpatrol.io/admin/<slug>/reports/<reportId>),
        and returns the report with each of its assets: ChainPatrol's review,
        the asset's status and whether it was still online when last checked,
        and your organization's takedown of it. Only your organization's
        reports: any other ID returns 404. To find reports by filters instead,
        use `GET /organization/reports`.
      operationId: organizationReportsGet
      parameters:
        - in: path
          name: reportId
          description: >-
            The report's ID, as in its link:
            app.chainpatrol.io/admin/<slug>/reports/<reportId>
          schema:
            type: integer
            minimum: 0
            exclusiveMinimum: true
            description: >-
              The report's ID, as in its link:
              app.chainpatrol.io/admin/<slug>/reports/<reportId>
          required: true
        - in: query
          name: slug
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  report:
                    type: object
                    properties:
                      id:
                        type: number
                      title:
                        type: string
                      description:
                        type: string
                      status:
                        type: string
                        nullable: true
                        enum:
                          - TODO
                          - IN_PROGRESS
                          - CLOSED
                          - null
                      reportedByCustomer:
                        type: boolean
                      slaDueAt:
                        type: string
                        nullable: true
                        description: >-
                          SLA deadline for this report. `null` when no SLA
                          applies.
                      duplicateOfId:
                        type: number
                        nullable: true
                        description: >-
                          ID of the report this one duplicates. `null` when it
                          isn't a duplicate.
                      createdAt:
                        type: string
                      updatedAt:
                        type: string
                      assets:
                        type: array
                        items:
                          type: object
                          properties:
                            proposalId:
                              type: number
                            reviewStatus:
                              type: string
                              enum:
                                - PENDING
                                - APPROVED
                                - REJECTED
                              description: >-
                                ChainPatrol's review of this asset in this
                                report
                            asset:
                              type: object
                              properties:
                                id:
                                  type: number
                                type:
                                  type: string
                                  enum:
                                    - URL
                                    - PAGE
                                    - ADDRESS
                                    - DISCORD
                                    - LINKEDIN
                                    - TWITTER
                                    - FACEBOOK
                                    - YOUTUBE
                                    - REDDIT
                                    - TELEGRAM
                                    - GOOGLE_APP_STORE
                                    - APPLE_APP_STORE
                                    - AMAZON_APP_STORE
                                    - MICROSOFT_APP_STORE
                                    - TIKTOK
                                    - INSTAGRAM
                                    - THREADS
                                    - MEDIUM
                                    - CHROME_WEB_STORE
                                    - MOZILLA_ADDONS
                                    - OPERA_ADDONS
                                    - EMAIL
                                    - PATREON
                                    - OPENSEA
                                    - FARCASTER
                                    - IPFS
                                    - GOOGLE_FORM
                                    - WHATSAPP
                                    - DISCORD_USER
                                    - QUORA
                                    - GITHUB
                                    - TEACHABLE
                                    - SUBSTACK
                                    - DEBANK
                                    - TAWK_TO
                                    - JOTFORM
                                    - PRIMAL
                                    - BLUESKY
                                    - SNAPCHAT
                                    - DESO
                                    - PINTEREST
                                    - FLICKR
                                    - GALXE
                                    - VELOG
                                    - NPM
                                    - PYPI
                                    - HEX
                                    - DOCKER_HUB
                                    - VOCAL_MEDIA
                                    - TECKFINE
                                    - TENDERLY
                                    - HACKMD
                                    - ETSY
                                    - ZAZZLE
                                    - BASENAME
                                    - BILIBILI_TV
                                    - VIMEO
                                    - DAILYMOTION
                                    - PHONE_NUMBER
                                    - SLACK
                                    - CALENDLY
                                    - NGROK
                                    - RARIBLE
                                    - RUST_PACKAGE
                                    - FLATHUB
                                    - VIDLII
                                    - VEVIOZ
                                    - ISSUU
                                    - SOUNDCLOUD
                                    - ZAPPER
                                    - REDNOTE
                                    - SAMSUNG_APP_STORE
                                    - HUAWEI_APP_STORE
                                    - XIAOMI_APP_STORE
                                    - TENCENT_APP_STORE
                                    - OPPO_APP_STORE
                                    - VIVO_APP_STORE
                                    - F_DROID
                                    - GOOGLE_AD
                                    - BING_AD
                                    - TWITCH
                                    - BEHANCE
                                    - ZORA
                                    - META_AD
                                    - SIGNAL
                                    - DEVIANTART
                                    - BANDCAMP
                                    - ARCHIVE_ORG
                                    - FIVE_HUNDRED_PX
                                    - LUMA
                                    - SMARTMONEYMATCH
                                    - APK_GOLD
                                    - GLASSDOOR
                                    - PUMP_FUN
                                    - TUMBLR
                                content:
                                  type: string
                                status:
                                  type: string
                                  enum:
                                    - UNKNOWN
                                    - ALLOWED
                                    - BLOCKED
                                  description: >-
                                    The asset's status now: `BLOCKED`, `ALLOWED`
                                    or `UNKNOWN`
                                livenessStatus:
                                  type: string
                                  enum:
                                    - UNKNOWN
                                    - ALIVE
                                    - DEAD
                                  description: >-
                                    Whether the asset was still online when last
                                    checked
                              required:
                                - id
                                - type
                                - content
                                - status
                                - livenessStatus
                            takedown:
                              type: object
                              nullable: true
                              properties:
                                id:
                                  type: number
                                status:
                                  type: string
                                  enum:
                                    - TODO
                                    - IN_PROGRESS
                                    - COMPLETED
                                    - CANCELLED
                                    - PENDING_RETRACTION
                                    - RETRACTION_SENT
                                    - RETRACTED
                                    - PENDING_INPUT
                                    - PENDING_EVIDENCE
                                createdAt:
                                  type: string
                                updatedAt:
                                  type: string
                              required:
                                - id
                                - status
                                - createdAt
                                - updatedAt
                              description: >-
                                Your organization's takedown of this asset.
                                `null` when none was started.
                          required:
                            - proposalId
                            - reviewStatus
                            - asset
                            - takedown
                        description: Each asset in the report, oldest proposal first
                    required:
                      - id
                      - title
                      - description
                      - status
                      - reportedByCustomer
                      - slaDueAt
                      - duplicateOfId
                      - createdAt
                      - updatedAt
                      - assets
                required:
                  - report
                description: Successful operation
        '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'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.NOT_FOUND'
        '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.NOT_FOUND:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Not found
        code:
          type: string
          description: The error code
          example: NOT_FOUND
        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: Not found error (404)
      description: The error information
      example:
        code: NOT_FOUND
        message: Not found
        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.

````

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