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

# Takedowns List

> List takedowns for an organization. Authenticate with an API key (the org is derived from the key) or with a user session (pass `organizationSlug` in the request body).

<Warning>
  This API requires an API key with appropriate permissions. See [API Key
  Documentation](/general/api-key) for more details.
</Warning>

<Info>
  This endpoint uses cursor-based pagination for efficient retrieval of large
  datasets. If you encounter errors related to payload size, please use the
  pagination feature as described below.
</Info>

## Pagination

To use pagination, include the `per_page` and `next_page` parameters in your request:

* `per_page <number>`: Number of takedowns to return per page (min: 1, max: 100)
* `next_page <string>`: Cursor for the next page of results

### Example implementation for pagination:

<CodeGroup>
  ```javascript JavaScript theme={null}
  async function fetchAllTakedowns() {
    let allTakedowns = [];
    let nextPage = null;
    while (true) {
      const response = await fetch(
        "https://app.chainpatrol.io/api/v2/takedowns/list",
        {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            "X-API-KEY": "YOUR_API_KEY_HERE",
          },
          body: JSON.stringify({
            per_page: 100,
            next_page: nextPage,
            takedownStatus: ["TODO", "IN_PROGRESS"],
            livenessStatus: ["ALIVE"],
          }),
        }
      );
      const data = await response.json();
      allTakedowns = allTakedowns.concat(data.takedowns);
      nextPage = data.next_page;
      if (!nextPage) {
        break;
      }
    }
    return allTakedowns;
  }
  fetchAllTakedowns()
    .then((takedowns) => console.log("All takedowns:", takedowns))
    .catch((error) => console.error("Error fetching takedowns:", error));
  ```

  ```typescript TypeScript theme={null}
  async function fetchAllTakedowns(): Promise<any[]> {
    let allTakedowns: any[] = [];
    let nextPage: string | null = null;

    while (true) {
      const response = await fetch(
        "https://app.chainpatrol.io/api/v2/takedowns/list",
        {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            "X-API-KEY": "YOUR_API_KEY_HERE",
          },
          body: JSON.stringify({
            per_page: 100,
            next_page: nextPage,
            takedownStatus: ["TODO", "IN_PROGRESS"],
            livenessStatus: ["ALIVE"],
          }),
        }
      );
      const data = await response.json();
      allTakedowns = allTakedowns.concat(data.takedowns);
      nextPage = data.next_page;

      if (!nextPage) {
        break;
      }
    }
    return allTakedowns;
  }

  fetchAllTakedowns()
    .then((takedowns) => console.log("All takedowns:", takedowns))
    .catch((error) => console.error("Error fetching takedowns:", error));
  ```

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

  def fetch_all_takedowns() -> list:
      all_takedowns = []
      next_page = None
      while True:
          response = requests.post(
              "https://app.chainpatrol.io/api/v2/takedowns/list",
              headers={
                  "Content-Type": "application/json",
                  "X-API-KEY": "YOUR_API_KEY_HERE",
              },
              json={
                  "per_page": 100,
                  "next_page": next_page,
                  "takedownStatus": ["TODO", "IN_PROGRESS"],
                  "livenessStatus": ["ALIVE"],
              },
          )
          data = response.json()
          all_takedowns.extend(data["takedowns"])
          next_page = data.get("next_page")
          if not next_page:
              break
      return all_takedowns

  try:
      takedowns = fetch_all_takedowns()
      print("All takedowns:", takedowns)
  except Exception as error:
      print("Error fetching takedowns:", str(error))
  ```
</CodeGroup>


## OpenAPI

````yaml POST /takedowns/list
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:
  /takedowns/list:
    post:
      tags:
        - takedowns
      summary: List takedowns
      description: >-
        List takedowns for an organization. Authenticate with an API key (the
        org is derived from the key) or with a user session (pass
        `organizationSlug` in the request body).
      operationId: takedownsList
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                organizationSlug:
                  type: string
                  description: >-
                    Organization slug. Required when authenticating with a user
                    session (Bearer token); ignored when using an API key (org
                    is derived from the key).
                query:
                  type: string
                  description: Search query to filter takedowns by asset content
                startDate:
                  type: string
                  description: >-
                    The start date to list takedowns from. This should be in the
                    format `YYYY-MM-DD` and is inclusive.
                endDate:
                  type: string
                  description: >-
                    The end date to list takedowns to. This should be in the
                    format `YYYY-MM-DD` and is inclusive.
                assetType:
                  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
                  description: Filter by asset types
                takedownStatus:
                  type: array
                  items:
                    type: string
                    enum:
                      - TODO
                      - IN_PROGRESS
                      - COMPLETED
                      - CANCELLED
                      - PENDING_RETRACTION
                      - RETRACTION_SENT
                      - RETRACTED
                      - PENDING_INPUT
                      - PENDING_EVIDENCE
                  description: Filter by takedown status
                livenessStatus:
                  type: array
                  items:
                    type: string
                    enum:
                      - UNKNOWN
                      - ALIVE
                      - DEAD
                  description: Filter by liveness status
                brandIds:
                  type: array
                  items:
                    type: integer
                    minimum: 0
                    exclusiveMinimum: true
                  description: Filter by brand IDs
                assigneeIds:
                  type: array
                  items:
                    type: integer
                    minimum: 0
                    exclusiveMinimum: true
                  description: Filter by takedown assignee user IDs
                startedAtStartDate:
                  type: string
                  description: >-
                    Inclusive start of the `takedown started at` date range, in
                    YYYY-MM-DD or ISO 8601. A takedown's started-at is the
                    earliest IN_PROGRESS status-change event.
                startedAtEndDate:
                  type: string
                  description: >-
                    Inclusive end of the `takedown started at` date range.
                    Defaults to the current time when `startedAtStartDate` is
                    provided alone.
                hideAutomatedTakedowns:
                  type: boolean
                  description: >-
                    Hide takedowns whose target asset type (or content) is
                    handled by the automated platform-takedown pipeline (e.g.
                    Telegram, Medium, *.webflow.io).
                hideAutomatedLivenessChecks:
                  type: boolean
                  description: >-
                    Hide takedowns whose asset type (or content) is checked for
                    liveness automatically (e.g. Twitter, Bluesky,
                    *.gitbook.io).
                sorting:
                  type: array
                  items:
                    type: object
                    properties:
                      key:
                        type: string
                        enum:
                          - updatedAt
                          - createdAt
                          - takedownStatus
                          - takedownUpdatedAt
                          - assigneeId
                          - brandId
                        description: Field to sort by
                      direction:
                        type: string
                        enum:
                          - asc
                          - desc
                        description: Sort direction
                    required:
                      - key
                      - direction
                  description: Sorting configuration
                per_page:
                  type: integer
                  minimum: 1
                  maximum: 100
                  default: 10
                  description: The number of takedowns to return per page
                next_page:
                  type: string
                  nullable: true
                  description: Cursor for fetching the next page of results
              description: >-
                List takedowns request body


                Defaults to getting all takedowns in the last 30 days.


                You can also choose a `startDate` and `endDate` for the range of
                takedown updates, most 

                timestamp formats should work, we use
                [Luxon](https://moment.github.io/luxon/#/parsing) 

                for parsing the dates.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  takedowns:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: number
                          description: Takedown ID
                        status:
                          type: string
                          enum:
                            - TODO
                            - IN_PROGRESS
                            - COMPLETED
                            - CANCELLED
                            - PENDING_RETRACTION
                            - RETRACTION_SENT
                            - RETRACTED
                            - PENDING_INPUT
                            - PENDING_EVIDENCE
                          description: Takedown status
                        externalId:
                          type: string
                          nullable: true
                          description: >-
                            Provider's own reference for this takedown (e.g.
                            CleanDNS report ID, registrar ticket number). Use
                            this to reconcile a takedown against the vendor's
                            dashboard. `null` when no vendor has picked it up
                            yet.
                        hasFilingDelay:
                          type: boolean
                          description: >-
                            Manually set by staff to exclude the takedown from
                            median-time metrics when its filing was delayed for
                            reasons unrelated to platform performance. Useful
                            for explaining a stuck-looking takedown.
                        hasLivenessCheckDelay:
                          type: boolean
                          description: >-
                            Manually set by staff to exclude the takedown from
                            median-time metrics when the liveness-check step was
                            delayed for reasons unrelated to platform
                            performance.
                        createdAt:
                          type: string
                          description: When the takedown was created
                        updatedAt:
                          type: string
                          description: When the takedown was last updated
                        asset:
                          type: object
                          properties:
                            id:
                              type: number
                              description: Asset ID
                            content:
                              type: string
                              description: Asset content (URL, handle, etc.)
                            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
                              description: Asset type
                            livenessStatus:
                              type: string
                              nullable: true
                              enum:
                                - UNKNOWN
                                - ALIVE
                                - DEAD
                                - null
                              description: Asset liveness status
                            blockedAt:
                              type: string
                              nullable: true
                              description: >-
                                When the asset was blocked (transitioned to
                                BLOCKED status). `null` if the asset was never
                                blocked (rare for takedown rows). Distinct from
                                `updatedAt`, which changes on any mutation.
                          required:
                            - id
                            - content
                            - type
                            - livenessStatus
                            - blockedAt
                          description: Associated asset information
                        assignee:
                          type: object
                          nullable: true
                          properties:
                            id:
                              type: number
                              description: Assignee user ID
                            fullName:
                              type: string
                              nullable: true
                              description: Assignee full name
                          required:
                            - id
                            - fullName
                          description: Takedown assignee information
                        brand:
                          type: object
                          nullable: true
                          properties:
                            id:
                              type: number
                              description: Brand ID
                            name:
                              type: string
                              description: Brand name
                            slug:
                              type: string
                              nullable: true
                              description: Brand slug
                          required:
                            - id
                            - name
                            - slug
                          description: Associated brand information
                        domainRegistrar:
                          type: object
                          nullable: true
                          properties:
                            id:
                              type: number
                              description: Provider ID
                            name:
                              type: string
                              description: Provider name (e.g. `Namecheap`, `GoDaddy`)
                          required:
                            - id
                            - name
                          description: >-
                            Domain registrar assigned to this takedown. `null`
                            when unresolved. Distinct from the per-task
                            `takedownProvider` — this is the takedown-level
                            assignment for the domain itself.
                        hostingProvider:
                          type: object
                          nullable: true
                          properties:
                            id:
                              type: number
                              description: Provider ID
                            name:
                              type: string
                              description: Provider name (e.g. `Cloudflare`, `AWS`)
                          required:
                            - id
                            - name
                          description: >-
                            Hosting provider assigned to this takedown. `null`
                            when unresolved. Answers 'who hosts this?' without a
                            follow-up call.
                        tldRegistrar:
                          type: object
                          nullable: true
                          properties:
                            id:
                              type: number
                              description: Provider ID
                            name:
                              type: string
                              description: >-
                                TLD registrar name (e.g. `Verisign`, `Public
                                Interest Registry`)
                          required:
                            - id
                            - name
                          description: >-
                            Top-level-domain registrar assigned to this
                            takedown. `null` when unresolved.
                      required:
                        - id
                        - status
                        - externalId
                        - hasFilingDelay
                        - hasLivenessCheckDelay
                        - createdAt
                        - updatedAt
                        - asset
                        - assignee
                        - brand
                        - domainRegistrar
                        - hostingProvider
                        - tldRegistrar
                    description: List of takedowns
                  next_page:
                    type: string
                    nullable: true
                    description: Cursor for fetching the next page of results
                required:
                  - takedowns
                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'
        '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.

````