Discover/DeBank API
live

DeBank APIdebank.com

Access DeBank wallet portfolios via API. Retrieve DeFi protocol positions, idle token balances, asset exposure buckets, and wallet profile data for any address.

Endpoints
2
Updated
2mo ago

What is the DeBank API?

The DeBank API exposes 2 endpoints covering wallet-level DeFi portfolio data from debank.com. The get_full_portfolio_json endpoint returns protocol-level positions, idle token balances, asset exposure buckets, and a wallet overview in a single call. A companion get_wallet_profile endpoint provides summary figures — including total USD value and follower count — for any Ethereum-compatible wallet address.

Try it
Wallet address to retrieve portfolio data for.
Exclude positions below this USD value
api.parse.bot/scraper/b9d9f61a-6336-4f05-850e-3189194dbada/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/b9d9f61a-6336-4f05-850e-3189194dbada/get_full_portfolio_json' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace debank-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
DeBank Portfolio API Client using Parse.bot

Track wallet balances and DeFi positions across multiple chains and protocols.
Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Optional, Any


class ParseClient:
    """Client for interacting with DeBank Portfolio API via Parse.bot"""

    def __init__(self, api_key: Optional[str] = None):
        """Initialize the Parse client with API credentials.
        
        Args:
            api_key: Parse API key. If not provided, reads from PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "13747502-b591-4e2c-be8b-aebdd0d18362"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")
        
        if not self.api_key:
            raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")

    def _call(self, endpoint: str, method: str = "POST", **params) -> dict[str, Any]:
        """Make a request to the Parse API.
        
        Args:
            endpoint: The endpoint name (e.g., 'get_full_portfolio_json')
            method: HTTP method ('GET' or 'POST')
            **params: Query/body parameters
            
        Returns:
            Response JSON as dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }
        
        if method == "GET":
            response = requests.get(url, headers=headers, params=params)
        else:  # POST
            response = requests.post(url, headers=headers, json=params)
        
        response.raise_for_status()
        return response.json()

    def get_full_portfolio_json(
        self,
        address: str,
        min_position_usd: float = 0
    ) -> dict[str, Any]:
        """Get full portfolio JSON for a wallet address.
        
        Includes profile, DeFi positions, and idle tokens across all chains and protocols.
        
        Args:
            address: Wallet address to analyze (e.g., '0xd8...')
            min_position_usd: Exclude positions below this USD value (default: 0)
            
        Returns:
            Portfolio data including wallet overview, protocols, and positions
        """
        return self._call(
            "get_full_portfolio_json",
            method="GET",
            address=address,
            min_position_usd=min_position_usd
        )

    def get_wallet_profile(self, address: str) -> dict[str, Any]:
        """Get basic profile information for a wallet address.
        
        Args:
            address: Wallet address to analyze
            
        Returns:
            Profile data including USD value and follower count
        """
        return self._call(
            "get_wallet_profile",
            method="GET",
            address=address
        )


def analyze_wallet_portfolio(client: ParseClient, wallet_address: str):
    """Analyze a wallet's portfolio with practical insights.
    
    This demonstrates a real workflow:
    1. Fetch wallet profile to get basic info
    2. Get full portfolio to analyze positions
    3. Process and display meaningful insights
    """
    
    print(f"\n{'='*60}")
    print(f"Analyzing Wallet: {wallet_address}")
    print('='*60)
    
    # Step 1: Get wallet profile
    print("\n📊 Fetching wallet profile...")
    profile = client.get_wallet_profile(wallet_address)
    
    print(f"  Portfolio Value: ${profile['usd_value']:,.2f}")
    print(f"  Followers: {profile['follower_count']:,}")
    
    # Step 2: Get full portfolio with minimum position filter
    print("\n🔍 Analyzing portfolio positions (minimum $100)...")
    portfolio = client.get_full_portfolio_json(
        address=wallet_address,
        min_position_usd=100
    )
    
    # Step 3: Extract and process wallet overview
    overview = portfolio.get('wallet_overview', {})
    print(f"\n  Chains Active: {overview.get('num_chains', 0)}")
    print(f"  Protocols Used: {overview.get('num_protocols', 0)}")
    print(f"  Total Net Value: ${overview.get('total_net_value_usd', 0):,.2f}")
    
    # Step 4: Analyze protocols
    protocols = portfolio.get('protocols', [])
    if protocols:
        print(f"\n📈 Top Protocols (by position count):")
        for i, protocol in enumerate(protocols[:5], 1):
            protocol_name = protocol.get('name', 'Unknown')
            protocol_value = protocol.get('portfolio_item_list', [])
            print(f"  {i}. {protocol_name}: {len(protocol_value)} positions")
    
    # Step 5: Analyze exposure buckets if available
    buckets = portfolio.get('exposure_buckets', {})
    if buckets:
        print(f"\n💼 Exposure Distribution:")
        for bucket_type, bucket_data in buckets.items():
            if isinstance(bucket_data, dict):
                bucket_value = bucket_data.get('usd_value', 0)
                bucket_percentage = bucket_data.get('percentage', 0)
                print(f"  {bucket_type}: ${bucket_value:,.2f} ({bucket_percentage:.1f}%)")
    
    # Step 6: Check idle wallet info
    idle_wallet = portfolio.get('idle_wallet', {})
    if idle_wallet:
        idle_value = idle_wallet.get('usd_value', 0)
        if idle_value > 0:
            print(f"\n💤 Idle Assets: ${idle_value:,.2f}")
    
    print(f"\n{'='*60}\n")


if __name__ == "__main__":
    # Initialize client
    client = ParseClient()
    
    # Example wallet addresses to analyze (using common public addresses)
    # You can replace these with actual addresses you want to analyze
    wallet_addresses = [
        "0x1234567890123456789012345678901234567890",
        "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"
    ]
    
    print("🚀 DeBank Portfolio Analysis Tool")
    print("Powered by Parse.bot API")
    
    for address in wallet_addresses:
        try:
            analyze_wallet_portfolio(client, address)
        except requests.exceptions.HTTPError as e:
            if e.response.status_code == 404:
                print(f"⚠️  Wallet {address} not found or has no data")
            else:
                print(f"❌ Error analyzing {address}: {e}")
        except Exception as e:
            print(f"❌ Unexpected error: {e}")
All endpoints · 2 totalmissing one? ·

Returns the full portfolio JSON for a wallet address, including wallet profile, DeFi protocol positions, asset exposure buckets, and idle token balances.

Input
ParamTypeDescription
addressrequiredstringWallet address to retrieve portfolio data for.
min_position_usdnumberExclude positions below this USD value
Response
{
  "type": "object",
  "fields": {
    "protocols": "array",
    "idle_wallet": "object",
    "wallet_overview": "object",
    "exposure_buckets": "object"
  },
  "sample": {
    "wallet_overview": {
      "address": "0xd8...",
      "num_chains": 70,
      "num_protocols": 20,
      "total_net_value_usd": 1990862
    }
  }
}

About the DeBank API

Portfolio Data

The get_full_portfolio_json endpoint accepts a required address parameter and an optional min_position_usd filter to exclude small positions from the response. It returns four top-level objects: protocols (an array of DeFi protocol positions), idle_wallet (tokens sitting in the wallet not deployed to any protocol), wallet_overview (aggregate balances and net worth), and exposure_buckets (categorical breakdown of asset exposure, such as stablecoins, native assets, or yield-bearing positions).

Wallet Profile

The get_wallet_profile endpoint retrieves lightweight identity and summary data for a given address. The response includes the wallet id, total usd_value, and follower_count — the last field reflecting DeBank's social layer, where addresses can be followed by other users on the platform.

Filtering and Scope

The min_position_usd parameter on get_full_portfolio_json is the primary way to reduce noise from dust positions. The filter applies across protocol positions, letting you focus on material holdings. Both endpoints key off a single address string, so multi-wallet aggregation requires multiple calls. There is no batch-address parameter in the current specification.

Reliability & maintenance

The DeBank API is a managed, monitored endpoint for debank.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when debank.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official debank.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Track a wallet's total DeFi net worth over time using usd_value from get_wallet_profile
  • Build a protocol-exposure dashboard by parsing the protocols array from get_full_portfolio_json
  • Identify idle (undeployed) tokens in a wallet using the idle_wallet response field
  • Filter out dust positions in automated portfolio reports with the min_position_usd parameter
  • Analyze asset category exposure (stablecoin vs. native vs. yield) via the exposure_buckets field
  • Monitor whale wallets by combining usd_value and follower_count from get_wallet_profile
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does DeBank have an official developer API?+
Yes. DeBank offers a Pro API at https://pro.debank.com/ targeting developers and institutions. It provides on-chain and protocol data with its own pricing and authentication model, separate from this Parse API.
What does the `exposure_buckets` field contain in `get_full_portfolio_json`?+
The exposure_buckets object breaks down a wallet's holdings into asset categories — for example, stablecoins, native chain assets, and yield-bearing or LP positions. It gives a percentage or value distribution across those buckets rather than listing individual tokens.
Can I retrieve historical portfolio snapshots or transaction history through this API?+
Not currently. The two endpoints return the current portfolio state: live protocol positions, idle balances, and wallet overview figures. Historical snapshots and transaction history are not covered. You can fork this API on Parse and revise it to add an endpoint for historical data if DeBank exposes that on their platform.
Does the API support querying multiple wallet addresses in a single request?+
Both endpoints accept a single address parameter per call. Batch queries are not supported in the current specification. You can fork this API on Parse and revise it to loop over multiple addresses or add a batch endpoint.
What does `follower_count` in `get_wallet_profile` represent?+
DeBank has a social layer where users can follow wallet addresses. The follower_count field reflects how many DeBank users follow the queried address. It is a DeBank-specific metric and does not represent on-chain activity.
Page content last updated . Spec covers 2 endpoints from debank.com.
Related APIs in Crypto Web3See all →
polymarketanalytics.com API
Track any trader's performance on Polymarket by retrieving their wallet positions, trade history, profit/loss records, category breakdowns, and deposit/withdrawal activity. Monitor trading strategies and market exposure across multiple prediction markets in real-time.
moondev.com API
Access live crypto market data from MoonDev's public endpoints: aggregated Hyperliquid positions near liquidation, fees leaderboard, PnL share stats by address, Polymarket sweep trades, and soon-to-expire Polymarket markets — plus a single aggregate endpoint that pulls all major datastreams at once.
vfat.io API
Track yield farming opportunities, compare token liquidity and lending rates across 30+ blockchains, and monitor your DeFi portfolio performance in real-time. Analyze farm details, platform statistics, and market data to make informed decisions about where to deploy your assets.
cfbenchmarks.com API
Monitor real-time cryptocurrency prices and market cap data—both free float and full valuations—to screen and compare digital assets. Access comprehensive pricing information across the crypto market to inform your investment decisions and portfolio analysis.
a16zcrypto.com API
Access a16z Crypto's latest blog posts, portfolio companies, and team member information with powerful search and filtering capabilities. Get comprehensive details about their investments, team profiles, and company insights all in one place.
docs.centrifuge.io API
Access comprehensive Centrifuge protocol information including documentation, pools, tokens, vaults, and investor data through intelligent search and navigation tools. Query transaction history, investment positions, and detailed protocol metrics across the Centrifuge ecosystem.
blockchair.com API
Query Bitcoin blockchain data in real-time to check address balances, review transaction details, explore block information, and monitor network statistics. Track cryptocurrency news and compare data across multiple blockchain networks all in one place.
a16z.com API
Access Andreessen Horowitz's complete portfolio of invested companies with detailed information including founders, investment stages, social media profiles, and recent announcements. Search and filter through a16z's portfolio to research companies, track investments, and discover emerging startups in their network.