Skip to main content
POST
/
takedowns
/
list
List takedowns
curl --request POST \
  --url https://app.chainpatrol.io/api/v2/takedowns/list \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <api-key>' \
  --data '
{
  "query": "<string>",
  "startDate": "<string>",
  "endDate": "<string>",
  "assetType": [
    "URL"
  ],
  "takedownStatus": [
    "TODO"
  ],
  "livenessStatus": [
    "UNKNOWN"
  ],
  "sorting": [
    {
      "key": "updatedAt",
      "direction": "asc"
    }
  ],
  "per_page": 10,
  "next_page": "<string>"
}
'
{
  "takedowns": [
    {
      "id": 123,
      "status": "TODO",
      "createdAt": "<string>",
      "updatedAt": "<string>",
      "asset": {
        "id": 123,
        "content": "<string>",
        "type": "URL",
        "livenessStatus": "UNKNOWN"
      },
      "assignee": {
        "id": 123,
        "fullName": "<string>"
      },
      "brand": {
        "id": 123,
        "name": "<string>",
        "slug": "<string>"
      }
    }
  ],
  "next_page": "<string>"
}
This API requires an API key with appropriate permissions. See API Key Documentation for more details.
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.

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:

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));

Authorizations

X-API-KEY
string
header
required

Your API key. This is required by most endpoints to access our API programatically. Reach out to us at support@chainpatrol.io to get an API key for your use.

Body

application/json
query
string
startDate
string
endDate
string
assetType
enum<string>[]
Available options:
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
takedownStatus
enum<string>[]
Available options:
TODO,
IN_PROGRESS,
COMPLETED,
CANCELLED,
PENDING_RETRACTION,
RETRACTION_SENT,
RETRACTED
livenessStatus
enum<string>[]
Available options:
UNKNOWN,
ALIVE,
DEAD
sorting
object[]
per_page
integer
default:10
Required range: 1 <= x <= 100
next_page
string | null

Response

Successful response

takedowns
object[]
required
next_page
string | null