Backend and Hosted SDK
Pendle Backend offers developers accurate and up-to-date data, empowering them to build and innovate with the latest protocol information.
Pendle backend is hosted at https://api-v2.pendle.finance/core/docs
Our Pendle Backend includes two core features: Pendle Hosted SDK and Pendle API.
- Pendle Hosted SDK: Offers a more optimized and efficient way to interact with the Pendle Router to buy and sell PTs/YTs, add/remove liquidity, and more.
- Code with examples: Pendle Hosted SDK demo
- Pendle API: Provides developers with accurate and up-to-date data, empowering them to build and innovate with the latest protocol information.
- Code with examples: Pendle Backend API demo
Pendle Hosted SDK
Pendle accommodates a vast array of assets, each characterized by its unique nuances and complexities. While the Pendle protocol remains immutable, the underlying assets don't share this feature, requiring our app and SDK to be updated frequently to align with changes in these assets.
To address this, Pendle has introduced a hosted version of our SDK. It ensures the output remains consistent with Pendle's UI and keeps up-to-date with the latest protocol changes. The API design prioritizes simplicity and stability, with a high rate limit to meet the needs of most users.
Supported functions
- Swap
- Add liquidity
- Add liquidity ZPI
- Remove liquidity
- Mint PT & YT
- Redeem PT & YT
- Transfer liquidity
- Transfer liquidity ZPI
- Roll over PT
- Add liquidity dual
- Remove liquidity dual
- Mint SY
- Redeem SY
All actions above can be accessed via the all new Convert API.
Examples
Swap
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&tokensOut=0xf99985822fb361117fcf3768d34a6353e6022f5f&amountsIn=1000000000&enableAggregator=true&aggregators=kyberswap&additionalData=impliedApy,effectiveApy
In code:
export async function swapTokenToPt() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${USDC_ADDRESS}`,
amountsIn: 1000000000,
tokensOut: `${PT_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
enableAggregator: true,
aggregators: "kyberswap",
additionalData: "impliedApy,effectiveApy",
});
}
Add liquidity
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0&tokensOut=0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2&amountsIn=1000000000000000000
In code:
export async function addLiquiditySingleToken() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${WSTETH_ADDRESS}`,
amountsIn: "1000000000000000000",
tokensOut: `${MARKET_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
});
}
Add liquidity ZPI
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0&tokensOut=0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2,0xf3abc972a0f537c1119c990d422463b93227cd83&amountsIn=1000000000000000000
In code:
export async function addLiquiditySingleTokenKeepYt() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${WSTETH_ADDRESS}`,
amountsIn: "1000000000000000000",
tokensOut: `${MARKET_ADDRESS},${YT_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
});
}
Remove liquidity
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2&tokensOut=0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0&amountsIn=1000000000000000000&enableAggregator=true
In code:
export async function removeLiquiditySingleToken() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${MARKET_ADDRESS}`,
amountsIn: "1000000000000000000",
tokensOut: `${WSTETH_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
enableAggregator: true,
});
}
Mint PT & YT
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0&tokensOut=0xf99985822fb361117fcf3768d34a6353e6022f5f,0xf3abc972a0f537c1119c990d422463b93227cd83&amountsIn=1000000000000000000
In code:
export async function mintPyFromToken() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${WSTETH_ADDRESS}`,
amountsIn: "1000000000000000000",
tokensOut: `${PT_ADDRESS},${YT_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
});
}
Redeem PT & YT
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0xf99985822fb361117fcf3768d34a6353e6022f5f,0xf3abc972a0f537c1119c990d422463b93227cd83&tokensOut=0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0&amountsIn=1000000000000000000,1000000000000000000
In code:
export async function redeemPyToToken() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${PT_ADDRESS},${YT_ADDRESS}`,
amountsIn: "1000000000000000000,1000000000000000000",
tokensOut: `${WSTETH_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
});
}
Transfer liquidity
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0x9bc2fb257e00468fe921635fe5a73271f385d0eb,0x21aace56a8f21210b7e76d8ef1a77253db85bf0a,0x3787c19c32e727310708c0693aec00fb37a01e7b&tokensOut=0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2&amountsIn=1000000000000000000,1000000000000000000,1000000000000000000&enableAggregator=true&aggregators=kyberswap
In code:
export async function transferLiquidity() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${FXSAVE_MARKET_ADDRESS},${FXSAVE_PT_ADDRESS},${FXSAVE_YT_ADDRESS}`,
amountsIn: "1000000000000000000,1000000000000000000,1000000000000000000",
tokensOut: `${MARKET_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
enableAggregator: true,
aggregators: "kyberswap",
});
}
Transfer liquidity ZPI
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0x9bc2fb257e00468fe921635fe5a73271f385d0eb,0x21aace56a8f21210b7e76d8ef1a77253db85bf0a,0x3787c19c32e727310708c0693aec00fb37a01e7b&tokensOut=0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2,0xf3abc972a0f537c1119c990d422463b93227cd83&amountsIn=1000000000000000000,1000000000000000000,1000000000000000000&enableAggregator=true&aggregators=kyberswap
In code:
export async function transferLiquidityKeepYt() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${FXSAVE_MARKET_ADDRESS},${FXSAVE_PT_ADDRESS},${FXSAVE_YT_ADDRESS}`,
amountsIn: "1000000000000000000,1000000000000000000,1000000000000000000",
tokensOut: `${MARKET_ADDRESS},${YT_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
enableAggregator: true,
aggregators: "kyberswap",
});
}
Roll over PT
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0x21aace56a8f21210b7e76d8ef1a77253db85bf0a&tokensOut=0xf99985822fb361117fcf3768d34a6353e6022f5f&amountsIn=1000000000000000000&enableAggregator=true
In code:
export async function rollOverPt() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${FXSAVE_PT_ADDRESS}`,
amountsIn: "1000000000000000000",
tokensOut: `${PT_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
enableAggregator: true,
});
}
Add liquidity dual
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0xcbc72d92b2dc8187414f6734718563898740c0bc,0xf99985822fb361117fcf3768d34a6353e6022f5f&tokensOut=0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2&amountsIn=1000000000000000000,1000000000000000000
In code:
export async function addLiquidityDualSyAndPt() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${SY_ADDRESS},${PT_ADDRESS}`,
amountsIn: "1000000000000000000,1000000000000000000",
tokensOut: `${MARKET_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
});
}
Remove liquidity dual
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2&tokensOut=0xf99985822fb361117fcf3768d34a6353e6022f5f,0xcbc72d92b2dc8187414f6734718563898740c0bc&amountsIn=1000000000000000000
In code:
export async function removeLiquidityDualSyAndPt() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${MARKET_ADDRESS}`,
amountsIn: "1000000000000000000",
tokensOut: `${PT_ADDRESS},${SY_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
});
}
Mint SY
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0&tokensOut=0xcbc72d92b2dc8187414f6734718563898740c0bc&amountsIn=1000000000000000000
In code:
export async function mintSyFromToken() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${WSTETH_ADDRESS}`,
amountsIn: "1000000000000000000",
tokensOut: `${SY_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
});
}
Redeem SY
GET https://api-v2.pendle.finance/core/v2/sdk/1/convert?receiver=<RECEIVER_ADDRESS>&slippage=0.01&tokensIn=0xcbc72d92b2dc8187414f6734718563898740c0bc&tokensOut=0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0&amountsIn=1000000000000000000
In code:
export async function redeemSyToToken() {
const res = await callSDK<ConvertResponse>(`/v2/sdk/${CHAIN_ID}/convert`, {
tokensIn: `${SY_ADDRESS}`,
amountsIn: "1000000000000000000",
tokensOut: `${WSTETH_ADDRESS}`,
receiver: RECEIVER_ADDRESS,
slippage: 0.01,
});
}