> ## Documentation Index
> Fetch the complete documentation index at: https://chainpatrol-knowledge-update-blockaid-and-hypernative-partn.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Report Create

> Create a new report on ChainPatrol for a particular organization

## Overview

The Report Create endpoint allows you to submit assets (URLs, domains, blockchain addresses, etc.) for review by the ChainPatrol team. This endpoint handles bulk submissions and provides detailed error reporting for validation failures.

## Error Responses

### 422 Unprocessable Content

Returned when the request is syntactically valid but contains validation errors or duplicate assets. This is the most common error type and provides detailed per-asset error information.

| Error Type               | Description                                           | Resolution                                           |
| ------------------------ | ----------------------------------------------------- | ---------------------------------------------------- |
| `DUPLICATE_ASSETS`       | Same asset appears multiple times in the report       | Remove duplicate assets from submission              |
| `INVALID_FORMAT`         | Asset format is invalid                               | Use valid URLs, domains, or blockchain addresses     |
| `ASSET_NOT_FOUND`        | Asset could not be located or created                 | Verify asset format and accessibility                |
| `ASSET_ALREADY_CORRECT`  | Asset already has the requested status                | No action needed - asset is already in desired state |
| `ALREADY_PENDING_REVIEW` | Asset has a pending proposal for the requested status | Wait for existing proposal to be processed           |
| `REPORT_ALREADY_EXISTS`  | A pending report/proposal for this asset exists       | Check existing reports or wait for processing        |
| `PROCESSING_FAILED`      | Technical error occurred during asset processing      | Retry the request or contact support                 |
| `DOMAIN_NOT_ALLOWED`     | Asset's domain is on the ignore list                  | Domain is excluded from reports per content policy   |
| `VALIDATION_ERROR`       | Generic validation error                              | Check asset format and requirements                  |

#### Example: Duplicate Assets

```json theme={null}
{
  "message": "Report creation failed: Duplicate assets found. 2 asset(s) appear multiple times in the same report.",
  "code": "UNPROCESSABLE_CONTENT",
  "data": {
    "errors": [
      {
        "asset": "scam.example",
        "errorType": "DUPLICATE_ASSETS",
        "message": "This asset appears multiple times in the same report",
        "suggestion": "Remove duplicate assets from your submission - each asset should only appear once per report"
      }
    ]
  }
}
```

#### Example: Multiple Validation Errors

```json theme={null}
{
  "message": "Report creation failed: 2 of 3 assets are invalid. All assets must be valid to create a report.",
  "code": "UNPROCESSABLE_CONTENT",
  "data": {
    "errors": [
      {
        "asset": "http",
        "errorType": "INVALID_FORMAT",
        "message": "This asset couldn't be processed due to invalid format",
        "suggestion": "Use valid URLs (https://example.com), domains (example.com), or blockchain addresses (eip155:1:0x123...)"
      },
      {
        "asset": "decen-masters.com",
        "errorType": "DOMAIN_NOT_ALLOWED",
        "message": "This domain cannot be reported as it's on the ignore list",
        "suggestion": "This domain is currently excluded from reports based on our content policy. Please reach out to us if you believe this is an error"
      }
    ]
  }
}
```

### 500 Internal Server Error

Returned for unexpected server conditions, including database errors and other technical failures. The response uses safe, generic messages to avoid exposing internal system details.

#### Standard Error Response

```json theme={null}
{
  "message": "Unable to process your report. Please try again or contact support if the issue persists.",
  "code": "INTERNAL_SERVER_ERROR"
}
```

#### Database Error Response

```json theme={null}
{
  "message": "A database error occurred. This has been reported internally - please contact support@chainpatrol.io for assistance.",
  "code": "INTERNAL_SERVER_ERROR"
}
```

## Best Practices

### Asset Validation

**URLs**: Include the full protocol (`https://` or `http://`)

**Domains**: Use clean domain names without protocols or paths

**Blockchain Addresses**: Use EIP-155 format for Ethereum addresses

**Avoid Duplicates**: Each asset should appear only once per report

### Error Handling

Always check the `data.errors` array in 422 responses for per-asset details

Use the `suggestion` field in error responses to guide users

Implement retry logic for 500 errors with exponential backoff

### Performance Tips

Batch multiple assets in a single request when possible

Validate asset formats client-side before submission

Handle rate limiting appropriately

## Troubleshooting

### Common Issues

**"INVALID\_FORMAT" errors:**

Ensure URLs include protocol (`https://` or `http://`)

Verify domain names don't include protocols or paths

Check blockchain address format matches EIP-155 standard

**"DUPLICATE\_ASSETS" errors:**

Remove duplicate entries from the assets array

Check for case sensitivity differences

Verify URL normalization (trailing slashes, etc.)

**"DOMAIN\_NOT\_ALLOWED" errors:**

The domain is on ChainPatrol's ignore list

Contact [disputes@chainpatrol.io](mailto:disputes@chainpatrol.io) to dispute this decision

Consider reporting specific URLs instead of the entire domain

**"ASSET\_ALREADY\_CORRECT" errors:**

The asset already has the status you're requesting

Check the current asset status before reporting

No action needed - the asset is already in the desired state

### Rate Limiting

The endpoint implements rate limiting to prevent abuse. If you encounter rate limit errors:

Implement exponential backoff in your retry logic

Consider batching requests to reduce API calls

Contact support for higher rate limits if needed

## Notes

Error payload shape is stable across 422 errors; check `data.errors` for per-asset details

Provide the `organizationSlug` and valid `assets` to minimize 500s caused by invalid state

All assets must be valid for the report to be created

A report can only be created once per email address for a specific asset

For technical issues or questions about error responses, contact [support@chainpatrol.io](mailto:support@chainpatrol.io) and include the full error response in your request.


## OpenAPI

````yaml POST /report/create
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:
  /report/create:
    post:
      tags:
        - report
      summary: Create a report
      description: Create a new report on ChainPatrol for a particular organization
      operationId: reportCreate
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                organizationSlug:
                  type: string
                discordGuildId:
                  type: string
                telegramGroupId:
                  type: string
                title:
                  type: string
                  minLength: 3
                description:
                  type: string
                contactInfo:
                  type: string
                attachmentUrls:
                  type: array
                  items:
                    type: string
                    format: uri
                externalSubmissionLink:
                  type: string
                  format: uri
                userAgent:
                  type: string
                referrer:
                  type: string
                assets:
                  type: array
                  items:
                    type: object
                    properties:
                      content:
                        type: string
                      status:
                        type: string
                        enum:
                          - UNKNOWN
                          - ALLOWED
                          - BLOCKED
                        default: BLOCKED
                      reporterConfidence:
                        type: string
                        enum:
                          - HIGH
                          - LOW
                      enrichments:
                        type: array
                        items:
                          type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - content_and_metadata
                                - browser_capture
                                - ownership_and_registration
                                - geolocation_and_ip
                                - dns
                                - tls
                                - tcp
                                - post
                                - profile
                                - twitter_followers
                                - cast
                                - farcaster_profile
                                - channel
                                - miniapp
                                - telegram_profile
                                - instagram_profile
                                - youtube_video
                                - youtube_channel
                                - apple_app_store_listing
                                - google_play_store_listing
                                - mozilla_addon
                                - reddit_subreddit
                                - email_validation
                                - bilibili_video
                                - bilibili_profile
                                - dailymotion_video
                                - vimeo_video
                                - vimeo_profile
                                - npm_package
                                - pypi_package
                                - rust_package
                                - linkedin_profile
                            source:
                              type: string
                              minLength: 1
                            output:
                              type: object
                              additionalProperties: {}
                          required:
                            - type
                            - source
                    required:
                      - content
                rawAssetsInput:
                  type: string
                externalReporter:
                  type: object
                  properties:
                    avatarUrl:
                      type: string
                      format: uri
                    platformIdentifier:
                      type: string
                    platform:
                      type: string
                    displayName:
                      type: string
                  required:
                    - platformIdentifier
                    - platform
                    - displayName
              required:
                - assets
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: number
                  createdAt:
                    type: string
                  organization:
                    type: object
                    nullable: true
                    properties:
                      id:
                        type: number
                      slug:
                        type: string
                      name:
                        type: string
                    required:
                      - id
                      - slug
                      - name
                required:
                  - id
                  - createdAt
                  - organization
        '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.

````