API Migration
The legacy https://api.boros.finance/open-api/*, /send-txs-bot/*, and /core/* mounts will be shut off on 20 June 2026. After that date, requests to those hosts will fail. Migrate to https://api-boros.pendle.finance/apis/* before then.
The legacy Boros Open API is being replaced. All integrations should move to the redesigned API at https://api-boros.pendle.finance/apis/.
Interactive docs for the new API: api-boros.pendle.finance/apis/docs.
If you integrate via our SDK, migrate from @pendle/sdk-boros (legacy) to @pendle/boros-sdk-public (new). The legacy SDK targets the legacy API and will stop working after 20 June 2026.
Hosts
| Old | New | |
|---|---|---|
| Public API | https://api.boros.finance/open-api/* | https://api-boros.pendle.finance/apis/* |
| Send Txs | https://api.boros.finance/send-txs-bot/* | https://api-boros.pendle.finance/apis/v1/send-txs/* |
| Internal UI API | https://api.boros.finance/core/* | https://api-boros.pendle.finance/apis/* |
/open-api/* → /apis/*
| Old | New |
|---|---|
GET /open-api/v1/markets | GET /apis/v1/markets |
GET /open-api/v1/markets/{id} | GET /apis/v1/markets/by-ids?marketIds={id} (batched) |
GET /open-api/v1/markets/chart | GET /apis/v1/markets/ohlcv (indicators moved to /apis/v1/indicators) |
GET /open-api/v1/assets/all | GET /apis/v1/assets |
GET /open-api/v1/agents/expiry-time | GET /apis/v1/agents/expiry-time |
GET /open-api/v1/gas-price/current | GET /apis/v1/gas-price/current |
GET /open-api/v1/accounts/gas-balance | GET /apis/v1/accounts/gas-balance |
GET /open-api/v1/accounts/active-positions | GET /apis/v1/accounts/active-positions |
POST /open-api/v1/accounts/market-acc-infos | POST /apis/v1/accounts/market-acc-infos |
GET /open-api/v1/incentives/maker-incentives/campaigns/{id} | GET /apis/v1/incentives/maker-incentives/campaigns/{id} |
GET /open-api/v1/calldata/cancel-order | POST /apis/v1/calldata-builder/agent/cancel-orders (GET → POST, body { markets: [...] }) |
POST /open-api/v1/calldata/place-orders | POST /apis/v1/calldata-builder/agent/place-orders |
POST /open-api/v1/calldata/place-orders-with-rate | POST /apis/v1/calldata-builder/agent/place-orders (merged; use desiredRate XOR slippage) |
GET /open-api/v2/accounts/transactions | GET /apis/v1/accounts/position-update-events (cursor-based) |
GET /open-api/v2/accounts/limit-orders | GET /apis/v1/accounts/orders (cursor-based) |
GET /open-api/v2/markets/order-books | GET /apis/v1/markets/order-book |
GET /open-api/v2/simulations/place-order | POST /apis/v1/simulations/place-order (GET → POST) |
/send-txs-bot/* → /apis/v1/send-txs/*
| Old | New |
|---|---|
POST /send-txs-bot/v1/agent/approve | POST /apis/v1/send-txs/approve |
POST /send-txs-bot/v1/agent/trace | POST /apis/v1/send-txs/trace |
POST /send-txs-bot/v1/agent/tx-status | POST /apis/v1/send-txs/tx-status |
POST /send-txs-bot/v1/agent/tx-status-with-events | POST /apis/v1/send-txs/tx-status-with-events |
POST /send-txs-bot/v2/agent/dedicated/bulk-direct-call | POST /apis/v1/send-txs/dedicated/bulk-calls |
POST /send-txs-bot/v2/agent/dedicated/tx-status | POST /apis/v1/send-txs/tx-status |
POST /send-txs-bot/v2/agent/dedicated/tx-status-with-events | POST /apis/v1/send-txs/tx-status-with-events |
/core/* → /apis/*
The /core/* mount will be deprecated on 20 June 2026. Migrate to the public /apis/v1/* equivalent below.
| Old | New |
|---|---|
GET /core/v1/markets | GET /apis/v1/markets |
GET /core/v1/markets/{id} | GET /apis/v1/markets/by-ids?marketIds={id} |
GET /core/v1/markets/chart | GET /apis/v1/markets/ohlcv |
GET /core/v1/order-books/{id} | GET /apis/v1/markets/order-book?marketId={id} |
GET /core/v2/amm/{id} | GET /apis/v1/amm/states?marketIds={id} (batched; up to 100 IDs) |
GET /core/v2/assets/all | GET /apis/v1/assets |
GET /core/v1/accounts/gas-balance | GET /apis/v1/accounts/gas-balance |
GET /core/v1/gas-price | GET /apis/v1/gas-price/current |
GET /core/v1/collaterals/summary | GET /apis/v1/accounts/market-acc-infos-by-root?root={addr} or POST /apis/v1/accounts/market-acc-infos |
GET /core/v1/pnl/positions | GET /apis/v1/accounts/active-positions |
GET /core/v1/pnl/limit-orders, GET /core/v2/pnl/limit-orders | GET /apis/v1/accounts/orders |
GET /core/v1/pnl/transactions | GET /apis/v1/accounts/position-update-events |
GET /core/v1/pnl/market-acc-cumulative-pnl | POST /apis/v1/accounts/market-acc-infos (cumulative PnL inlined) |
GET /core/v1/settlement/settlements | GET /apis/v1/accounts/settlement-events |
GET /core/v2/incentives/maker-incentives/statistics | GET /apis/v1/incentives/maker-incentives/campaigns/{id}?maker={addr} |
Use WebSocket to Reduce Polling
The new API enforces strict rate limits (see Computing Units). If you currently poll the same endpoint many times per minute (markets, order-book, account state), switch to a WebSocket channel — subscribe once and receive push updates.
Account Channel
Subscribe per root address. See WebSocket → Account Channels.
| Event | Replaces polling of |
|---|---|
POSITION_UPDATE | /accounts/position-update-events, /accounts/market-acc-infos (position fields), legacy /core/v1/pnl/transactions, /open-api/v2/accounts/transactions |
ORDER_UPDATE | /accounts/orders, legacy /open-api/v2/accounts/limit-orders, /core/v1/pnl/limit-orders |
Market-Data Channel
Subscribe per marketId. See WebSocket → Market-Data Events.
| Replaces polling of |
|---|
/apis/v1/markets/by-ids, legacy /open-api/v1/markets/{id}, /core/v1/markets/{id}, /core/v2/amm/{id} |
/apis/v1/incentives/maker-incentives/campaigns/{id}, legacy /core/v2/incentives/maker-incentives/statistics |
Order-Book Channel
Subscribe per marketId. See WebSocket → Orderbook Events.
| Replaces polling of |
|---|
/apis/v1/markets/order-book, legacy /open-api/v2/markets/order-books, /core/v1/order-books/{id} |
Cross-Cutting Changes
marketAccrequired on every account-scoped endpoint. Anonymous mode is removed.- Pagination:
skip/limit→cursor/limit. - Response envelope:
{ results: [...], cursor?: { next, hasMore }, syncStatus: { ... } }. - Computing Units: every endpoint advertises CU cost via the
x-computing-unitresponse header. See Computing Units for the budget and per-endpoint costs. - Field renames:
metadata.assetSymbol→underlyingSymbol;config.statusnumeric → string label; body fieldtif→timeInForce; place-orders bodyorderRequests[].singleOrder→orders[].