> ## Documentation Index
> Fetch the complete documentation index at: https://docs.b3os.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Wallet Positions (Zerion)

Retrieve fungible token positions for any wallet address via Zerion API. Returns detailed position data including DeFi deposits, loans, staking rewards, and wallet balances with real-time valuations. Supports filtering by chain, position type, and DApp. Ideal for: token balance tracking, DeFi position monitoring, portfolio analytics, wallet auditing.

![Get Wallet Positions (Zerion) logo](https://ai-icon.b3.fun/logo/zerion)
Catalog action Blockchain Data

Retrieve fungible token positions for any wallet address via Zerion API. Returns detailed position data including DeFi deposits, loans, staking rewards, and wallet balances with real-time valuations. Supports filtering by chain, position type, and DApp. Ideal for: token balance tracking, DeFi position monitoring, portfolio analytics, wallet auditing.


## At a Glance

| Field | Value |
| --- | --- |
| Action ID | `zerion-get-wallet-positions` |
| Category | Blockchain Data |
| Connector | Not required |
| Requires gas | No |
| Funds movement | None declared |
| Tags | `zerion`, `blockchain`, `wallet`, `positions`, `tokens`, `defi`, `multi-chain`, `read` |

## Payload Schema

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `address` | `string` | Yes | The wallet address to query positions for. Must be a valid 42-character hex address starting with 0x. |
| `positions` | `string` | No | Filter by position type. Default: only_simple |
| `positionTypes` | `array` | No | Filter by specific position types \(deposit, loan, locked, staked, reward, wallet, investment\) |
| `chainIds` | `array` | No | Filter by chains. Accepts numeric EVM chain IDs \(e.g. 1, 56, 8453\) or Zerion slugs \(e.g. 'ethereum', 'polygon'\). Chains B3 supports but Zerion does not are rejected with INVALID_INPUT. Max 25. |
| `sort` | `string` | No | Sort order by position value. Verified against the API: 'value' returns highest first and '-value' returns lowest first — the sign convention is inverted from the usual reading, so pass 'value' when you want the largest positions first. |
| `currency` | `string` | No | Currency to denominate values in. Default: usd |
| `trash` | `string` | No | Spam filter applied by Zerion. Defaults to 'only_non_trash' \(spam/airdrop tokens excluded\) — pass 'no_filter' to include everything. |
| `filterSpamTokens` | `boolean` | No | Post-process results through the B3OS token filter service to remove spam and low-liquidity tokens. Default: true |

## Result Schema

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `address` | `string` | Yes | The wallet address that was queried |
| `positions` | `array` | Yes | Array of fungible positions |
| `nextCursor` | `string` | No | Cursor for next page of results |

## Examples

**Workflow node**

```json
{
  "type": "zerion-get-wallet-positions",
  "payload": {
    "address": "0x0000000000000000000000000000000000000000"
  },
  "children": []
}
```
  **Test with API**

```bash
curl -X POST "https://api.b3os.org/v1/actions/zerion-get-wallet-positions/test" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "inputs": {
    "address": "0x0000000000000000000000000000000000000000"
  }
}'
```

**Use expressions for dynamic values**

Payload fields can use workflow expressions such as `{{$trigger.body.amount}}`, `{{$nodes.fetch.result.price}}`, and `{{$props.asset}}` when the value should come from a trigger, prior node, or reusable workflow prop.