---
name: cdp-data
description: Queries on-chain data with CDP's SQL API, checks EVM/Solana token balances, and discovers available tables via the grammar endpoint.
---

# cdp-data

On-chain data queries and token balances.

## SQL queries

### Discover tables

```
cdp data query grammar
```
Returns available tables, columns, and SQL dialect.

### Run query

```
cdp data query run 'sql=SELECT block_number, timestamp FROM base.blocks LIMIT 5'
```

Tables are namespaced by network (e.g., `base.blocks`, `base.transactions`, `ethereum.blocks`).

## Token balances

### EVM

```
cdp evm token-balances get <network> <address>
```
Also available via data group:
```
cdp data evm token-balances <network> <address>
```

### Token ownership (EVM)

```
cdp data evm token-ownership <network> <address>
```

### Solana

```
cdp solana token-balances get <network> <address>
```

## Webhooks

### Create subscription

```
cdp data webhooks subscriptions create target.url=<url> 'eventTypes:=["wallet.activity.detected"]' 'isEnabled:=true' 'labels:={"params.to":"<address>"}'
```

- `wallet.activity.detected` requires `labels` with `params.to` or `params.from` — omitting labels returns a 400 error.

### Update subscription

```
cdp data webhooks subscriptions update <id> 'eventTypes:=["wallet.activity.detected"]' 'isEnabled:=false' target.url=<url> 'labels:={"params.to":"<address>"}'
```

- `update` requires ALL fields (eventTypes, target, isEnabled), not just changed fields — it's a full replace. Omitting any field causes an error.

### Delete subscription

```
cdp data webhooks subscriptions delete <id>
```

## Notes

- Both `cdp evm token-balances` and `cdp data evm token-balances` return the same data.
- Use token balances to verify mutations (funding, sends, swaps).
