Prerequisites:
Request Transaction Data
Fetch ready-to-use transaction data using:
Pick the section that matches how the user is funding the deposit. Each shows the extra parameters, an example request, and the response you get back.
Simple deposit
Deposit the strategy’s underlying token directly on the strategy’s chain — no swap or bridge. Only the required parameters above are needed, andcrossChain.isCrossChain stays false.
Example Request:
Same-chain swap deposit
Hold a different token on the strategy’s chain? PassfromTokenAddress (with a fromChainId/chainIdIn matching the strategy chain) to swap into the underlying asset before depositing. The response prepends the swap transaction(s) before the deposit bytecode, and crossChain.isCrossChain stays false.
Additional Parameters:
When
fromTokenAddress is provided with a fromChainId matching the strategy
chain, the API automatically prepends a same-chain swap from
fromTokenAddress to the strategy’s underlying asset. The amount parameter
refers to the amount of fromTokenAddress to swap, and
crossChain.isCrossChain remains false.fromTokenAddress to swap first:
Cross-chain swap deposit
Funding from another chain? Pass afromChainId/chainIdIn that differs from the strategy’s chain. The response adds a quote object describing the bridge selection, the resolved tokens, and the expected/minimum output amount, and sets crossChain.isCrossChain to true.
Additional Parameters:
Example Request:
To bridge USDC on Base into a USDC yield strategy on Arbitrum, pass the Base
fromChainId and fromTokenAddress:
The top-level
id is used for execution tracking — store it and pass it to GET /actions/:id to track the cross-chain deposit through completion (see Checking Cross-Chain Deposit Status below).The quote object describes which bridge was selected (bridge), the expected outputAmount, and the worst-case minimumOutputAmount (slippage floor). Display these to the user before they sign.Output format options
By default the endpoint returns rawbytecode. These optional parameters change the response format and apply to any of the deposit types above.
Example Request (Fireblocks output):
If you are using Fireblocks custody, set
output=fireblocks and pass your vault accountId. The wallet parameter must be a smart wallet previously provisioned via POST /fireblocks-smart-account (see Fireblocks Integration).
transactionData.transactionRequest payload can be submitted directly to the Fireblocks Transactions API (POST /v1/transactions) — no further encoding required. The Earn Owner vault must be configured as the signer (see Fireblocks Integration).
Use
GET /strategies to list available protocols, then pass the chosen
strategy ID into the bytecode endpoint above.Executing the Transaction
Checking Cross-Chain Deposit Status
Cross-chain deposits are asynchronous: the source-chain bridge transaction is signed first, then the bridged funds are delivered and deposited on the destination chain. To track progress to completion, use theid returned in the bytecode response:
Example Request:
Poll this endpoint until
status reaches a terminal value (SUCCESS, FAILED, REFUNDED, or EXPIRED). The transactions array lists each on-chain hash as it is confirmed, so you can surface progress to the user as the bridge and the destination-chain deposit complete in sequence.
Same-chain deposits do not need this polling — the deposit completes inline
with the user’s signed transaction. The
id is still returned for
record-keeping and can be queried the same way.Webhook Notifications
As an alternative to polling, Pods can push every status transition to a URL you control. The payload is identical toGET /actions/:id, so you can drive the same UI off either source.
Default webhook URL configuration is currently provisioned manually — contact the Pods team to register your default
webhookURL (and any optional custom headers, e.g. an HMAC signature header). For a single deposit request, pass webhookURL on the bytecode endpoint to override the customer-level default. Self-service configuration via the admin panel is coming soon.
Body shape:
SUCCESS):
- A request fires for every status change, so you may receive multiple deliveries per deposit (
INITIAL→PENDING→SUCCESS). - Pods expects a
2xxresponse. Non-2xxresponses are recorded but not automatically retried; reconcile withGET /actions/:idif you need at-least-once guarantees. - Respond as quickly as possible; do the heavy work asynchronously on your side.
Next Steps
Check Positions
Monitor your open yield positions
Withdraw
Learn how to withdraw from positions