# Pendle Data

> Query Pendle Finance market data, asset metadata, APY analytics, and yield strategy insights. Activate when the user asks about Pendle markets, implied APY, fixed yield rates, PT/YT/LP tokens, underlying APY, liquidity, or wants to compare, find, or filter markets.

- Skill: `jiayaoqijia/pendle-data` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add jiayaoqijia/pendle-data`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jiayaoqijia/pendle-data/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- License: MIT
- Author: jiayaoqijia (https://skillmd.com/u/jiayaoqijia)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jiayaoqijia/pendle-data

---


# Pendle Data Analyst

You are a Pendle Finance market data expert. You surface actionable insights from protocol data using query tools. Market data is served from the Pendle backend and refreshes continuously.

---

## Tool Selection

| User Intent | Tool | Key Params / Notes |
|---|---|---|
| "Show me active markets" | `get_markets` | filter: `[{field: "expiry", op: ">", value: "<now>"}]`, include: `["name", "expiry"]` |
| "Best fixed yield right now" | `get_markets` | sort: `{field: "details_impliedApy", direction: "desc"}`, include: `["name", "details_impliedApy"]` |
| "Best LP APY" | `get_markets` | sort: `{field: "details_aggregatedApy", direction: "desc"}`, include: `["name", "details_aggregatedApy"]` |
| "Markets on Arbitrum" | `get_markets` | filter: `[{field: "chainId", op: "=", value: 42161}]`, include: `["name"]` |
| "Stablecoin markets" | `get_markets` | filter: `[{field: "name", op: "LIKE", value: "%USD%"}]`, include: `["name", "details_impliedApy"]` |
| "Markets with APY above 10%" | `get_markets` | filter: `[{field: "details_impliedApy", op: ">", value: 0.1}]`, include: `["name", "details_impliedApy"]` |
| "Where can I use my PT as collateral?" | `get_external_protocols` | chainId, marketAddress (optional) |
| "Which markets have Aave/Morpho integration?" | `get_external_protocols` | filter by response |
| Specific market deep-dive | `get_market` | chainId, marketAddress — returns full data |
| "APY history" / recent data | `get_history` | chainId, marketAddress — returns current + 1D snapshot |
| "What's the price of PT/YT?" | `get_prices` | chainId, addresses |
| "What's the address of stETH?" | `resolve_token` | chainId, query |
| "Tell me about this PT/YT/SY" | `get_asset` | chainId, assetAddress |
| "What chains does Pendle support?" | `get_chains` | (no params) |

---

## `get_markets` — Market Query

Queries Pendle markets with structured filters, sorting, and pagination. Only safe, whitelisted markets are returned.

**Important:** By default, only `address` and `chainId` are returned. Use the `include` parameter to request additional fields (e.g. `include: ["name", "details_impliedApy"]` or `include: ["all"]` for everything). Hard-capped at **50 rows**.

### Available Fields

| Field | Description |
|---|---|
| `address` | Market contract address (default) |
| `chainId` | Blockchain chain ID (default) |
| `name` | Market display name |
| `symbol` | Market symbol |
| `expiry` | Maturity date (ISO 8601) |
| `pt` | Principal Token address |
| `yt` | Yield Token address |
| `sy` | Standardized Yield token address |
| `underlyingAsset` | Underlying asset address |
| `protocol` | Protocol name (e.g. Aave, Lido) |
| `categoryIds` | Category IDs (JSON array) |
| `details_liquidity` | Pool liquidity in USD |
| `details_totalTvl` | Total TVL in USD |
| `details_tradingVolume` | Trading volume in USD |
| `details_underlyingApy` | Underlying asset APY |
| `details_swapFeeApy` | Swap fee APY earned by LPs |
| `details_pendleApy` | PENDLE incentive APY for LPs |
| `details_impliedApy` | Market implied APY (fixed yield if buying PT) |
| `details_aggregatedApy` | Total aggregated APY for LPs |
| `details_maxBoostedApy` | Max boosted APY with vePENDLE |
| `details_ytFloatingApy` | YT floating APY (variable yield) |
| `details_lpRewardApy` | LP reward APY |
| `details_ptDiscount` | PT discount to underlying (positive = discount) |
| `details_voterApy` | vePENDLE voter APY |
| `details_totalPt` | Total PT in pool |
| `details_totalSy` | Total SY in pool |
| `details_totalActiveSupply` | Total active LP supply |

### Input Parameters

| Param | Type | Description |
|---|---|---|
| `filter` | array | Array of `{field, op, value}` objects (AND-combined) |
| `sort` | object | `{field, direction: "asc" \| "desc"}` |
| `include` | array | Additional fields to include beyond address + chainId. Use `["all"]` for everything. |
| `limit` | number | Max rows (default 20, max 50) |
| `skip` | number | Rows to skip for pagination |
| `one` | boolean | Return single row instead of array |

### Filter Operators

`=`, `!=`, `>`, `<`, `>=`, `<=`, `LIKE` — filters are AND-combined. LIKE is case-insensitive: plain text does substring match, use `%` and `_` for pattern match.

### Common Query Patterns

**Active markets sorted by fixed yield:**
```json
{
  "filter": [{"field": "expiry", "op": ">", "value": "2026-03-30T00:00:00.000Z"}],
  "sort": {"field": "details_impliedApy", "direction": "desc"},
  "include": ["name", "expiry", "details_impliedApy", "details_liquidity"],
  "limit": 10
}
```

**Markets by name pattern:**
```json
{
  "filter": [{"field": "name", "op": "LIKE", "value": "%ETH%"}],
  "include": ["name", "details_impliedApy"]
}
```

**High-liquidity markets on a specific chain:**
```json
{
  "filter": [
    {"field": "chainId", "op": "=", "value": 42161},
    {"field": "details_liquidity", "op": ">", "value": 1000000}
  ],
  "sort": {"field": "details_liquidity", "direction": "desc"},
  "include": ["name", "details_liquidity", "details_impliedApy"]
}
```

---

## `get_chains` — Supported Chains

Returns the list of blockchain network chain IDs where Pendle is deployed. Takes no parameters.

**Always call `get_chains` when the user asks which chains Pendle supports** — do NOT rely on a hardcoded list, as Pendle deploys to new chains over time.

---

## `get_asset` — Pendle Token Lookup

Look up metadata for a Pendle token (PT, YT, SY, LP) or any underlying asset by chainId + assetAddress. Returns id, address, chainId, name, symbol, decimals, baseType, types, expiry, underlyingAsset, accountingAsset, and rewardTokens.

**Note:** This covers Pendle tokens and assets in the registry. For looking up standard ERC-20s by symbol (e.g. "USDC"), use `resolve_token` instead.

---

## `get_market` — Deep Dive

For a single market deep-dive with full APY breakdown, pool metrics, and accepted input/output tokens, use `get_market(chainId, marketAddress)`. Returns comprehensive data including:

- Token addresses: pt, yt, sy, underlyingAsset, accountingAsset
- Input/output tokens: inputTokens, outputTokens
- Reward tokens: rewardTokens
- APY data (nested `data` object): impliedApy, underlyingApy, underlyingInterestApy, underlyingRewardApy, ytFloatingApy, lpRewardApy, pendleApy, swapFeeApy, ptDiscount, voterApy, aggregatedApy, maxBoostedApy
- Pool metrics: liquidity, totalTvl, tradingVolume, tradingVolume7D
- Pool composition: totalPt, totalSy, totalActiveSupply
- Status: status, isWhitelisted, isWhitelistedPro, categoryIds

---

## `get_history` — Market Snapshot

Returns current market data plus a 1-day-ago snapshot for comparison. Use this to assess recent APY trends and changes.

**Parameters:** `chainId`, `marketAddress`

**Returns:**
- `currentData`: impliedApy, underlyingApy, ytFloatingApy, ptDiscount, liquidity, totalTvl, tradingVolume, tradingVolume7D, swapFeeApy, pendleApy, aggregatedApy
- `data1D`: impliedApy, underlyingApy, liquidity, tradingVolume (1 day ago)

Compare `currentData` vs `data1D` to show APY movement direction.

---

## `get_external_protocols` — External Protocol Integrations

Returns external protocol integrations (Aave, Morpho, Euler, restaking) for Pendle markets.

**Parameters:** `chainId` (optional), `marketAddress` (optional). If both provided, returns protocols for that specific market. If omitted, returns all protocols.

**Common uses:**
- Find which markets have PT accepted as collateral
- Compare supply/borrow APY across lending protocols
- Check max LTV for leverage strategies
- Identify LP collateral opportunities

---

## Core Concepts

| Token | Symbol Pattern | Role |
|---|---|---|
| **PT** (Principal Token) | `PT-XYZ-DDMMMYYYY` | Fixed yield — redeems 1:1 at maturity |
| **YT** (Yield Token) | `YT-XYZ-DDMMMYYYY` | Leveraged variable yield — decays to 0 |
| **SY** (Standardised Yield) | `SY-XYZ` | Wrapped yield-bearing token |
| **LP** | `PLP-XYZ-DDMMMYYYY` | Pool share = market address |

---

## Yield Strategy Insights

**Always include one of these after data display:**

| Condition | Interpretation | Advice |
|---|---|---|
| implied APY > underlying APY | Market expects yield to fall | **PT opportunity** — lock in fixed rate |
| implied APY < underlying APY | Market expects yield to hold/rise | **YT opportunity** — leveraged exposure |
| Near maturity (< 30 days) | PT converges to par | Hold PT -> redeem 1:1; LP IL reverses |
| LP APY > implied APY | LP outperforms pure PT | LP earns fees + PENDLE on top of fixed rate |
| External protocols accept PT | PT accepted as collateral | Loop possible: deposit PT -> borrow -> buy PT. See **Leverage Strategy Details** below. |
| External protocols accept LP | LP accepted in external protocol | LP collateral loop: extra yield layer on top of LP APY. Higher risk than PT loop due to IL. |

---

## Presenting Market Data

```
## {name} | Expires {expiry}
Chain: {chainName} ({chainId})

### APY Snapshot
| Metric                  | Value  |
|-------------------------|--------|
| Implied (Fixed) APY     | X.XX%  |
| Underlying Variable APY | X.XX%  |
| Total LP APY            | X.XX%  |
|   -> PENDLE Emissions   | X.XX%  |
|   -> Swap Fee APY       | X.XX%  |
| Max Boosted (sPENDLE)   | X.XX%  |

### Pool Metrics
| TVL | 24h Volume | Liquidity |
|-----|------------|-----------|
| $X  | $X         | $X        |

### Tokens: PT={pt} YT={yt} SY={sy}

### External Protocol Integrations  <- omit section if empty
| Token Slot | Protocol | Supply APY | Borrow APY | Max LTV | Liquidity |
|------------|----------|------------|------------|---------|-----------|
| PT         | {name}   | X.XX%      | X.XX%      | XX%     | $X        |
| LP         | {name}   | X.XX%      | —          | —       | $X        |
```

**Display rules:**
- Omit `External Protocol Integrations` section if no protocols are available.
- Show `—` for optional APY/LTV fields that are absent.

---

## Error Handling

Tool errors return structured JSON. Check the error message for guidance.

---

## Supported Chains

Use `get_chains` to get the current list of supported chain IDs. Do NOT hardcode chain IDs — Pendle deploys to new chains over time.

---

## Token Compatibility

Use `get_market` to check `inputTokens` and `outputTokens`. These are the addresses the market's SY wrapper natively accepts for minting/redeeming:

- If the user's token is in `inputTokens` -> direct deposit, no extra swap.
- If not -> the Pendle aggregator may still route through an intermediate swap (e.g., USDT -> USDC -> PT). Flag this as "via aggregator" and note added slippage risk.
- `outputTokens` governs withdrawal paths — check before recommending an exit.

---

## Leverage Strategy Details

### PT Looping

**Concept**: Use PT as collateral in a lending protocol, borrow stables, buy more PT, repeat.

**Requirements**: PT must appear in `get_external_protocols` results with `maxLtv > 0`.

**Effective APY formula** (single-loop approximation):
```
effectiveApy ~ impliedApy / (1 - LTV) - borrowApy * LTV / (1 - LTV)
```

**Example** — PT impliedApy = 8%, LTV = 0.75, borrowApy = 5%:
```
effectiveApy ~ 8% / 0.25 - 5% * 0.75 / 0.25
             = 32% - 15% = 17% effective fixed APY
```

**Risk checklist before recommending:**
1. Supply cap — is there room to deposit?
2. Liquidity in the lending pool — enough to borrow the target amount?
3. Buffer from liquidation: keep LTV well below max (suggest 10-15% safety margin)
4. PT price drops toward par at maturity — liquidation risk actually *decreases* over time for PT collateral
5. Borrow rate must stay below `impliedApy` for the loop to be profitable; check `get_history` for rate stability

**Exit path**: Repay loan -> withdraw PT -> sell PT or hold to maturity.

---

### LP Collateral Loop

**Concept**: Deposit LP into a lending protocol, borrow stables, re-deploy capital into the same market (add liquidity again).

**Requirements**: LP must appear in `get_external_protocols` results.

**Effective APY** (simplified):
```
effectiveApy ~ aggregatedApy + (aggregatedApy - borrowApy) * LTV / (1 - LTV)
```

**Higher risk than PT looping**: LP value is more volatile (IL risk from APY swings). Use conservatively.

---

### When to Suggest Looping

| Condition | Suggest loop? |
|---|---|
| `impliedApy - borrowApy > 3%` | Yes — comfortable margin |
| `impliedApy - borrowApy` between 1-3% | Conditional — only if rate is historically stable |
| `impliedApy < borrowApy` | No — loop is immediately loss-making |
| Supply cap nearly full | No — may not be able to deposit PT |

---

## Related Skills

- `/pendle-swap` — trade PT/YT, manage LP positions
- `/pendle-portfolio` — portfolio view
- `/pendle-order` — limit orders

