> ## 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 Time to Takedown Trend

> Get the median time from takedown start to completion bucketed by the month a takedown completed, over a trailing window of whole months, together with the month-over-month change. Returns one series per requested asset type, or a single pooled series. Crypto address (ADDRESS) takedowns are left out unless you filter to them: an address is reported on many sites at once and how long its takedown takes depends on how many platforms you want covered. `excludedAssetTypes` in the response lists what was left out.

## Overview

Get the median time to takedown for each month of a trailing window, with the change
from the previous month. Months are bucketed by when the takedown completed.

```bash theme={null}
curl --request POST \
  --url https://app.chainpatrol.io/api/v2/metrics/takedown-time/trend \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <api-key>' \
  --data '{
    "slug": "your-org",
    "months": 6,
    "assetTypes": ["URL", "TWITTER"]
  }'
```

## Request Body

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `slug` | `string` | ✅ Yes | - | Organization slug. |
| `months` | `number` | ❌ No | `12` | Size of the window in whole months, 2 to 36, counting the current month. |
| `assetTypes` | `AssetType[]` | ❌ No | - | Up to 5 asset types, one series each. Omit for a single series pooled across asset types. |
| `brandIds` | `number[]` | ❌ No | - | Only assets belonging to these brands. |
| `brandType` | `string` | ❌ No | - | Only brands of this type: `INDIVIDUAL`, `ORGANIZATION` or `PRODUCT`. |
| `blockLabel` | `string` | ❌ No | - | Only assets blocked with this review label, such as `Brand Impersonation`. |
| `countryCodes` | `string[]` | ❌ No | - | Only assets scanned from these ISO 3166-1 alpha-2 countries. |

The pooled series leaves crypto addresses (`ADDRESS`) out, and `excludedAssetTypes`
says so. Pass `ADDRESS` in `assetTypes` to get its own series. See
[Time to Takedown](https://chainpatrol.com/docs/external-api/metrics-takedown-time.md) for why.

## Reading the response

* `periods` lists every month in the window as `yyyy-MM`, oldest first.
* Each series has one point per month. A month with no completed takedowns has a
  `null` median and a `count` of 0. The pooled series has `assetType: null`.
* `change` compares the latest month that had completed takedowns with the one before
  it, skipping empty months. A negative `percentChange` means takedowns got faster,
  and `direction` reads it for you as `improved`, `worsened` or `unchanged`. Both are
  `null` when there is no earlier month to compare with.


## OpenAPI

````yaml POST /metrics/takedown-time/trend
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/takedown-time/trend:
    post:
      tags:
        - metrics
      summary: Get organization time-to-takedown trends
      description: >-
        Get the median time from takedown start to completion bucketed by the
        month a takedown completed, over a trailing window of whole months,
        together with the month-over-month change. Returns one series per
        requested asset type, or a single pooled series. Crypto address
        (ADDRESS) takedowns are left out unless you filter to them: an address
        is reported on many sites at once and how long its takedown takes
        depends on how many platforms you want covered. `excludedAssetTypes` in
        the response lists what was left out.
      operationId: metricsTakedownTimeTrend
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                slug:
                  type: string
                  minLength: 1
                  description: Organization slug
                months:
                  type: integer
                  minimum: 2
                  maximum: 36
                  default: 12
                  description: >-
                    Size of the trailing window in whole months, including the
                    current month
                assetTypes:
                  type: array
                  items:
                    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
                  maxItems: 5
                  description: >-
                    Break the trend down by these asset types, one series each.
                    Omit for a single pooled series. When no asset-type filter
                    is given, crypto address (ADDRESS) takedowns are left out:
                    an address is reported on many sites at once and how long
                    its takedown takes depends on how many platforms you want
                    covered, so it would skew the median for domains and
                    socials. Filter to ADDRESS (or the CRYPTO group) to include
                    them.
                blockLabel:
                  type: string
                  description: >-
                    Only include assets blocked with this review label, e.g.
                    "Brand Impersonation", "Employee Impersonation" or
                    "Targeting Org Users"
                brandType:
                  type: string
                  enum:
                    - INDIVIDUAL
                    - ORGANIZATION
                    - PRODUCT
                  description: Only include assets belonging to brands of this type
                countryCodes:
                  type: array
                  items:
                    type: string
                    minLength: 2
                    maxLength: 2
                  description: >-
                    Only include assets scanned from these ISO 3166-1 alpha-2
                    countries
                brandIds:
                  type: array
                  items:
                    type: integer
                    minimum: 0
                    exclusiveMinimum: true
                  description: Only include assets belonging to these brands
              required:
                - slug
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  months:
                    type: number
                    description: Size of the trailing window that was used
                  periods:
                    type: array
                    items:
                      type: string
                    description: Every yyyy-MM key in the window, oldest first
                  series:
                    type: array
                    items:
                      type: object
                      properties:
                        assetType:
                          type: string
                          nullable: true
                          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
                            - null
                          description: >-
                            Null for the series pooled across every asset type
                            but `excludedAssetTypes`
                        points:
                          type: array
                          items:
                            type: object
                            properties:
                              period:
                                type: string
                                description: >-
                                  Month the takedowns completed in, as a yyyy-MM
                                  key
                              medianTakedownMinutes:
                                type: number
                                nullable: true
                                description: Null when no takedowns completed in this month
                              medianTakedownHours:
                                type: number
                                nullable: true
                              medianTakedownDays:
                                type: number
                                nullable: true
                              count:
                                type: number
                                description: >-
                                  Number of completed takedowns behind the
                                  median
                            required:
                              - period
                              - medianTakedownMinutes
                              - medianTakedownHours
                              - medianTakedownDays
                              - count
                          description: >-
                            One point per month in the window, oldest first.
                            Months with no completed takedowns carry a null
                            median
                        change:
                          type: object
                          properties:
                            latest:
                              type: object
                              nullable: true
                              properties:
                                period:
                                  type: string
                                  description: >-
                                    Month the takedowns completed in, as a
                                    yyyy-MM key
                                medianTakedownMinutes:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Null when no takedowns completed in this
                                    month
                                medianTakedownHours:
                                  type: number
                                  nullable: true
                                medianTakedownDays:
                                  type: number
                                  nullable: true
                                count:
                                  type: number
                                  description: >-
                                    Number of completed takedowns behind the
                                    median
                              required:
                                - period
                                - medianTakedownMinutes
                                - medianTakedownHours
                                - medianTakedownDays
                                - count
                              description: >-
                                Most recent month in the window that had
                                completed takedowns
                            previous:
                              type: object
                              nullable: true
                              properties:
                                period:
                                  type: string
                                  description: >-
                                    Month the takedowns completed in, as a
                                    yyyy-MM key
                                medianTakedownMinutes:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Null when no takedowns completed in this
                                    month
                                medianTakedownHours:
                                  type: number
                                  nullable: true
                                medianTakedownDays:
                                  type: number
                                  nullable: true
                                count:
                                  type: number
                                  description: >-
                                    Number of completed takedowns behind the
                                    median
                              required:
                                - period
                                - medianTakedownMinutes
                                - medianTakedownHours
                                - medianTakedownDays
                                - count
                              description: >-
                                Month with completed takedowns immediately
                                before `latest`, skipping empty months
                            percentChange:
                              type: number
                              nullable: true
                              description: >-
                                Change in the median from `previous` to
                                `latest`, as a percentage. Negative means
                                takedowns got faster. Null when there is no
                                comparable earlier month
                            direction:
                              type: string
                              nullable: true
                              enum:
                                - improved
                                - worsened
                                - unchanged
                                - null
                              description: >-
                                Sign of `percentChange`, read as
                                lower-is-better. Null when it is null
                          required:
                            - latest
                            - previous
                            - percentChange
                            - direction
                          description: Month-over-month comparison for this series
                      required:
                        - assetType
                        - points
                        - change
                    description: >-
                      One series per requested asset type, in the order
                      requested, or a single pooled series when no asset types
                      were given
                  excludedAssetTypes:
                    type: array
                    items:
                      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 types left out of this result because no asset-type
                      filter was given. Empty when the result covers exactly the
                      asset types requested
                required:
                  - months
                  - periods
                  - series
                  - excludedAssetTypes
        '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.