> ## 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 False Positive Rate

> Get the share of blocks that were later reversed for a date range, for one organization (`slug`) or several (`slugs`). Returns a pooled `total`, a `byOrganization` breakdown, and a `byAssetType` breakdown. Every asset type blocked in the range is returned, including ones with no false positives. The range bounds when the asset was blocked; whether the block still stands is read as of now, so a recent range reads low simply because its reversals have not happened yet.

## Overview

Get the share of blocks that were later reversed, for assets blocked in a date range.
A block counts as a false positive when the asset is no longer blocked today.

```bash theme={null}
curl --request POST \
  --url https://app.chainpatrol.io/api/v2/metrics/false-positive-rate \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <api-key>' \
  --data '{
    "startDate": "2026-08-01",
    "endDate": "2026-09-30"
  }'
```

## Request Body

| Field | Type | Required | Description |
| - | - | - | - |
| `slug` | `string` | ❌ No | Organization slug. Optional with an organization API key, which uses its own organization. Do not send it with `slugs`. |
| `slugs` | `string[]` | ❌ No | Several organizations at once, up to 200. Each one is checked against your credentials, and one you cannot access fails the call. |
| `startDate` | `string` | ❌ No | Only assets blocked on or after this date. A date-only value (`YYYY-MM-DD`) starts at midnight UTC. |
| `endDate` | `string` | ❌ No | Only assets blocked on or before this date. A date-only value covers the whole day in UTC. |
| `brandIds` | `number[]` | ❌ No | Only assets belonging to these brands. |
| `countryCodes` | `string[]` | ❌ No | Only assets scanned from these ISO 3166-1 alpha-2 countries. |

## Reading the response

Every breakdown has `blocked`, `falsePositives` and `falsePositiveRate`
(`falsePositives / blocked`, from 0 to 1, or `null` when nothing was blocked).

* `total` pools every requested organization: all false positives over all blocks,
  not an average of per-organization rates.
* `byOrganization` has one entry per requested organization, most blocks first. An
  organization that blocked nothing in the range is listed with `blocked: 0`.
* `byAssetType` lists every asset type blocked in the range, including types with no
  false positives.

> [!WARNING]
>
> Whether a block still stands is read as of now. A recent range reads low because
> its reversals have not happened yet, so compare ranges that have had the same time
> to settle.


## OpenAPI

````yaml POST /metrics/false-positive-rate
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:
  /metrics/false-positive-rate:
    post:
      tags:
        - metrics
      summary: Get false positive rate for one or more organizations
      description: >-
        Get the share of blocks that were later reversed for a date range, for
        one organization (`slug`) or several (`slugs`). Returns a pooled
        `total`, a `byOrganization` breakdown, and a `byAssetType` breakdown.
        Every asset type blocked in the range is returned, including ones with
        no false positives. The range bounds when the asset was blocked; whether
        the block still stands is read as of now, so a recent range reads low
        simply because its reversals have not happened yet.
      operationId: metricsFalsePositiveRate
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                slug:
                  type: string
                  minLength: 1
                  description: >-
                    Organization slug. Optional when authenticating with an
                    org-scoped API key (its own organization is used). Mutually
                    exclusive with `slugs`.
                slugs:
                  type: array
                  items:
                    type: string
                    minLength: 1
                  minItems: 1
                  maxItems: 200
                  description: >-
                    Multi-org form. Each slug is auth-checked individually. The
                    response pools every listed organization into `total` and
                    `byAssetType`, and breaks it down per organization in
                    `byOrganization`. Capped at 200 slugs per call. Mutually
                    exclusive with `slug`.
                startDate:
                  type: string
                  description: >-
                    Only include assets blocked on or after this date. A
                    date-only value (YYYY-MM-DD) starts at midnight UTC
                endDate:
                  type: string
                  description: >-
                    Only include assets blocked on or before this date. A
                    date-only value (YYYY-MM-DD) covers the whole day in UTC;
                    pass a full timestamp for a precise cut-off
                brandIds:
                  type: array
                  items:
                    type: integer
                    minimum: 0
                    exclusiveMinimum: true
                  description: Only include assets belonging to these brands
                countryCodes:
                  type: array
                  items:
                    type: string
                    minLength: 2
                    maxLength: 2
                  description: >-
                    Only include assets scanned from these ISO 3166-1 alpha-2
                    countries
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: object
                    properties:
                      blocked:
                        type: number
                        description: Blocks made within the date range
                      falsePositives:
                        type: number
                        description: Of those, how many are no longer blocked today
                      falsePositiveRate:
                        type: number
                        nullable: true
                        description: >-
                          falsePositives / blocked, 0-1. Null when nothing was
                          blocked in the range
                    required:
                      - blocked
                      - falsePositives
                      - falsePositiveRate
                    description: >-
                      Pooled across every requested organization: all false
                      positives over all blocks, not an average of
                      per-organization rates
                  byOrganization:
                    type: array
                    items:
                      type: object
                      properties:
                        slug:
                          type: string
                          description: Organization slug
                        blocked:
                          type: number
                          description: Blocks made within the date range
                        falsePositives:
                          type: number
                          description: Of those, how many are no longer blocked today
                        falsePositiveRate:
                          type: number
                          nullable: true
                          description: >-
                            falsePositives / blocked, 0-1. Null when nothing was
                            blocked in the range
                      required:
                        - slug
                        - blocked
                        - falsePositives
                        - falsePositiveRate
                    description: >-
                      One entry per requested organization, descending by number
                      blocked. An organization that blocked nothing in the range
                      is included with `blocked: 0` and a null rate
                  byAssetType:
                    type: array
                    items:
                      type: object
                      properties:
                        assetType:
                          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
                            - MASTODON
                          description: Asset type that was blocked
                        blocked:
                          type: number
                          description: Assets of this type blocked within the date range
                        falsePositives:
                          type: number
                          description: Of those, how many are no longer blocked today
                        falsePositiveRate:
                          type: number
                          nullable: true
                          description: >-
                            falsePositives / blocked, 0-1. Null only when
                            nothing was blocked, which cannot happen for a
                            returned row
                      required:
                        - assetType
                        - blocked
                        - falsePositives
                        - falsePositiveRate
                    description: >-
                      False positive rate, one entry per asset type blocked in
                      the range, descending by number blocked. Asset types with
                      no false positives are included with a rate of 0; asset
                      types with no blocks at all in the range are omitted,
                      since they have no rate to report. The denominator counts
                      block events, not distinct assets, so an asset blocked
                      twice in the range counts twice. Whether a block still
                      stands is read as of now while the range bounds the block
                      itself, so a recent range reads low. An asset's blocked
                      status is global, so a block another organization's report
                      caused to be reversed is counted here too
                required:
                  - total
                  - byOrganization
                  - byAssetType
        '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.

````

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