{
  "openapi": "3.0.1",
  "info": {
    "title": "ERC-20 Token Due Diligence — Holders, Contract Risks, Liquidity",
    "description": "Token intelligence on Base, Ethereum, Arbitrum, Optimism, Polygon and 9 more Blockscout chains: supply, price, market cap, top holders with concentration metrics, verified-contract facts and owner powers (mint/pause/blacklist/fees), whale transfers, DexScreener liquidity and pair age, risk flags.",
    "version": "0.1",
    "x-build-id": "mgeBJKuIFl9z8YWYx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yadroo~base-token-intel/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yadroo-base-token-intel",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/yadroo~base-token-intel/runs": {
      "post": {
        "operationId": "runs-sync-yadroo-base-token-intel",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/yadroo~base-token-intel/run-sync": {
      "post": {
        "operationId": "run-sync-yadroo-base-token-intel",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "tokens",
              "search"
            ],
            "type": "string",
            "description": "`tokens` = full due-diligence item per contract address in `tokens`. `search` = find token contracts by name/symbol (`queries`) and return lightweight summary items (address, holders, price) — use it to discover the right contract address before a `tokens` run.",
            "default": "tokens"
          },
          "tokens": {
            "title": "Token contract addresses",
            "type": "array",
            "description": "ERC-20 (also ERC-721/1155) contract addresses for mode=tokens. One dataset item (and one charge) per token found on the chosen chain. Letter case does not matter and an address listed twice is analyzed once. Values that are not 0x addresses, and addresses that are not a token on this chain, are not dataset items and are not charged: they are listed in the SUMMARY record (`errors`, `notFound`).",
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "Token names or symbols for mode=search, e.g. [\"aerodrome\", \"USDC\"].",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchLimit": {
            "title": "Max search results per query",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "mode=search only. Every search hit is one dataset item, charged at the same per-item price as an analyzed token, so keep this small. The first N tokens Blockscout returns for each query are kept.",
            "default": 10
          },
          "searchTokenType": {
            "title": "Search token type",
            "enum": [
              "all",
              "ERC-20",
              "ERC-721",
              "ERC-1155"
            ],
            "type": "string",
            "description": "mode=search only: restrict results to one token standard.",
            "default": "all"
          },
          "chain": {
            "title": "Chain",
            "enum": [
              "base",
              "ethereum",
              "arbitrum",
              "optimism",
              "polygon",
              "gnosis",
              "zksync",
              "scroll",
              "celo",
              "unichain",
              "soneium",
              "mode",
              "ink",
              "worldchain",
              "sepolia",
              "base-sepolia"
            ],
            "type": "string",
            "description": "Blockscout-hosted chain, one key from the list (README → Reference → Chains). The platform refuses any other value (for example eth or mainnet) before the run starts. DexScreener market data is available on every chain in the list except Gnosis, Mode and the two testnets (there `market` stays null and `dexPairs` empty, with a warning).",
            "default": "base"
          },
          "holdersLimit": {
            "title": "Top holders",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "How many top holders to include (0 = skip holders and concentration metrics). The explorer cannot list the holders of the very largest tokens (USDC, WETH class: millions of holders) in time; such rows come with an empty list and a warning, so use 0 for them.",
            "default": 50
          },
          "transfersLimit": {
            "title": "Recent transfers",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "How many most recent transfers to include (0 = skip). With a `minTransfer*` filter: how many matching (large) transfers to return. How far back the actor looks is set by transferScanPages / transferScanHours and reported in `transferScan`.",
            "default": 20
          },
          "minTransferAmount": {
            "title": "Min transfer amount (token units)",
            "minimum": 0,
            "type": "number",
            "description": "Keep only transfers of at least this many tokens (whale watching). 0 = no filter.",
            "default": 0
          },
          "minTransferUsd": {
            "title": "Min transfer value (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Keep only transfers worth at least this much USD at the explorer's current price. 0 = no filter. Ignored (with a warning) when the token has no price. Converted to a token amount and filtered server-side by the explorer, so matches come from hours or days back, not only from the latest few hundred transfers.",
            "default": 0
          },
          "transferScanPages": {
            "title": "Transfer pages to scan (max)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Upper bound on transfer pages (50 transfers each) read per token when a minTransfer* filter or a time window is set. Large-transfer filters run server-side (Blockscout advanced filters), so each page holds only matching transfers. If the explorer can't filter (NFTs, or the endpoint is unavailable), the actor reads the latest pages and filters them itself; on busy tokens like USDT or PEPE, 10 pages cover only minutes to an hour. The time range actually covered is reported in `transferScan`.",
            "default": 10
          },
          "transferScanHours": {
            "title": "Transfer time window (hours)",
            "minimum": 0,
            "maximum": 8760,
            "type": "number",
            "description": "Only consider transfers from the last N hours, e.g. 24 = large transfers in the last day. The scan stops at the window start or at transferScanPages, whichever comes first. 0 = no time limit: newest first until transfersLimit matches are found.",
            "default": 0
          },
          "includeContract": {
            "title": "Include contract analysis",
            "type": "boolean",
            "description": "Verification status, compiler, license, proxy/implementations, creator, creation tx, explorer tags and an ABI capability scan (mint, pause, blacklist, fee/max-tx setters, upgradeability, meme-token style controls).",
            "default": true
          },
          "includeDexPairs": {
            "title": "Include DEX market data (DexScreener)",
            "type": "boolean",
            "description": "Pools for the token from DexScreener: liquidity, 24h volume, buys/sells, price change, pair age, websites and socials — plus a market summary used by the risk flags.",
            "default": true
          },
          "dexPairsLimit": {
            "title": "Max DEX pairs",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Pairs kept in `dexPairs` (sorted by liquidity). The market summary always uses all pairs.",
            "default": 5
          },
          "fields": {
            "title": "Only these output fields",
            "type": "array",
            "description": "Keep only these top-level fields, in this order. address, chain, symbol, found and fetchedAt (and query in mode=search) are always kept and come first unless you list them. Letter case does not matter; an unknown name is left out with a note in the status message and SUMMARY, and the run is refused when none of the names exists in this mode's rows. Example: [\"holdersCount\",\"holderConcentration\",\"flags\"].",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requestDelayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Minimum gap between two requests to the same host (the Blockscout explorer, DexScreener). Values below 250 are raised to 250: both sources publish a limit of 300 requests per minute per IP. At most 2 requests per host wait for an answer at once. An HTTP 429 answer pauses that host for the time it asks (Retry-After; without one 10 s, doubling for 429s in a row) and slows the pace to it. Raise this if the status message reports rate limiting.",
            "default": 250
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}