Skip to main content
This page tracks significant changes to the Pods API and documentation.

API Versioning

The API reference shows /v2 only where the current contract requires it. Unified routes such as GET /strategies, strategy bytecode, and strategy status use unversioned paths. Version-specific strategy detail, wallet, and swap routes include /v2, and the prefix is a required part of those URLs. Cross-resource routes such as /actions are also unversioned.

2026

October 2026

API
  • Strategy quote and bytecode requests reuse compiled routing topology for up to one hour. Customer access, strategy availability, fees and provider quotes remain current for each request.
  • With strategy routing enabled, bytecode requests overlap independent metadata and admission reads to reduce response latency. Current strategy validation, workflow ownership checks and required settlement acknowledgements still complete before funding instructions are returned.
  • Added Pods Hosted KYC: POST /api/v1/kyc/hosted/sessions creates a verification on a page Pods hosts and returns a link, and POST /api/v1/kyc/hosted/reset restarts a retryable rejection from the first step. GET /api/v1/kyc/status returns verificationLink and verificationLinkExpiresAt for these profiles. Available per account on request. New rejection reason codes ADDRESS_INVALID (retryable) and REGION_NOT_SUPPORTED (final).
  • Brazil Pix ↔ USDT0 on Stable (stable, chain 988) through GET /v2/swap/quote, in both directions. The offramp can be paid with the quote’s transactionData batch or with a plain USDT0 transfer to its depositAddress.
  • UnblockPay USD wire quotes list UnblockPay’s flat wire fee as a paymentRail charge (USD). USD onramp quotes, Avenia included, no longer count the rail fee a second time in bridgeAndSlippage. USD offramp quotes no longer return rawQuote.
  • UnblockPay USD wire offramp: POST /api/v1/kyc/currency-unlock accepts optional isThirdParty (default false) and only registers a wire External Account for a US beneficiary address (beneficiaryCountry=USA; otherwise UNBLOCKPAY_WIRE_BENEFICIARY_COUNTRY_UNSUPPORTED). Offramp quotes return UNBLOCKPAY_WIRE_EXTERNAL_ACCOUNT_NOT_APPROVED until the account is approved, and RAMP_RAIL_TEMPORARILY_UNAVAILABLE (503) while the provider has the rail disabled.
  • Aave deposit-address fee accounting now uses the same scaled-share basis as direct deposits and withdrawals. Public funding amounts remain in token units; partial and full withdrawals preserve the accepted fee caps and customer minimum.
  • Added partial and full quoted-balance Aave Polygon withdrawals through deposit-address funding without a helper deployment. Send the quoted aToken amount once; the withdrawal redeems that position and its accrued interest. Fee-bearing withdrawals redeem into the address before paying fees and the customer remainder. Completion requires verified delivery and an empty receipt position. Full quoted withdrawals may leave interest in the source wallet.
  • Universal Router deposit addresses require one exact customer funding transfer. Underpayments and overpayments are refunded to the verified source, with completion recorded after refund confirmation. Wrong tokens and additional transfers are flagged for review. This policy applies to SettlementWorkflow-owned addresses; older Quote-based deposit-address routes retain their existing behavior.
  • With strategy routing enabled, the strategy bytecode route supports same-chain swaps and cross-chain bridge/swaps into the Aave or supported Morpho investment selected by strategyId. Deposits use verified actual proceeds while preserving the accepted minimum and a single entry fee. Supported customer-wallet execution and deposit-address funding retain their custody and recipient boundaries. Existing underlying-asset deposit addresses remain available.
  • Ondo stock strategies on BSC and Ethereum accept optional slippage on GET /strategies/:id/bytecode (fraction of 1, same range as swap quotes). It sets the CoW or primary order tolerance. Omitted, BSC market orders stay at 100 bps, BSC client limits stay at 10 bps, and Ethereum primary orders stay at 60 bps. order.buyAmount, tokenOut.expectedAmountOut, and tokenOut.minAmountOut stay equal. Other strategies return SLIPPAGE_NOT_SUPPORTED.
Documentation

September 2026

API
  • Added an operator-controlled Universal Router swap kill switch, disabled by default (explicit UNIVERSAL_ROUTER_SWAPS_ENABLED=true enables it). When disabled, new crypto swaps use legacy provider-direct execution and Actions, including requests for deposit-address mode. Existing workflows continue; previously issued router quotes require a fresh quote for new execution.
  • Standardized swap quote and bytecode mode selection on settlementMode (direct or depositAddress). Existing bytecode auto behavior is unchanged.
  • Deposit-address swap preparation now starts Alchemy registration before provider quotation and waits for source monitoring acknowledgement before issuing funding instructions. Independent transfer discovery remains active.
  • Fixed Arbitrum native deposit discovery through the independent RPC scanner by preserving the configured trace method through ingress verification. Failed RPC evidence retains retryable coverage and sanitized diagnostics.
  • Swap quotes accept explicit settlementMode: direct | depositAddress. Provider instructions are generated for the selected wallet or predicted workflow Safe and reused while valid. A conflicting bytecode mode rejects; omitted-mode behavior is unchanged.
  • Ondo BSC CoW (Ondo-*-bsc) GET /strategies/:id/bytecode accepts independent priceInUsd (integer USD cents) and expireAt (UTC Unix seconds) on request-lend / request-withdraw. Client limits use 10 bps slippage; market quotes stay at 100 bps. Other strategies return PRICE_IN_USD_NOT_SUPPORTED / EXPIRE_AT_NOT_SUPPORTED.
  • GET /actions/:id/cancel?wallet= refunds a funded, unfilled client-limit Ondo BSC order. ExpireAt-only orders are not cancellable. HTTP 200 means the refund outbox was queued; ACTION_CANCEL_REFUND_QUEUE_FAILED (502) if queueing fails after REFUNDED.
Documentation
  • Ondo Global Markets: limit price, expiry matrix, quote fields (clientLimitPriceUsd, spotPriceUsd, distanceBps), and cancel
  • OpenAPI: priceInUsd / expireAt on strategy bytecode; GET /actions/{id}/cancel

August 2026

API
  • Public Brazil Pix rails via GET /v2/swap/quote (+ bytecode): Pix↔USDC on Base and Monad; Pix↔BRLA on Polygon (mint-to-user onramp / user-send offramp); Pix BRL ↔ BRS Solana (1:1 BRLA inventory; user never holds BRLA); Pix BRL ↔ BRZ Polygon (1:1 BRLA inventory; offramp is bridge-direct + Track); Pix↔Morpho hyperUSDCa on Monad. BRLA, BRS, and BRZ rails charge no Pods/customer swap markup — amounts pass through Avenia / inventory. Deframe-solver Pix rails use two-step ON_RAMP_FIAT / OFF_RAMP_FIAT Actions with Moralis TRANSFER suppression.
  • Ramp KYC walletAddress accepts a checksummed EVM address or a Solana public key on Sumsub share-token and BigDataCorp session routes.
  • Solana-origin swap bytecode supports output=instructions ({ instructions, lutsByAddress? }). BRS offramp Memo V1 carries quote.quoteId (UUID).
Documentation
  • Foreign USD KYC and ramps: Sumsub share token for non-Brazil users, USD currency unlock, and USD↔USDC quote patterns (bank fields resolve-or-create beneficiary on offramp quote)
  • OpenAPI: POST /api/v1/kyc/foreign/sumsub-share-token, POST /api/v1/kyc/currency-unlock; KycStatusResponse adds usdEnabled and eurEnabled
  • Move money with Pods Ramp: supported-route matrix, USDC addresses for Base/Monad, Pix↔BRLA Polygon examples, Pix↔BRS Solana, Pix↔BRZ Polygon, and Morpho hyperUSDCa Monad onramp/offramp
  • Set up Pods KYC: KYC walletAddress may be a Solana public key
  • Ramp, KYC money-movement, and Swap guides now treat GET /v2/swap/quote with addresses/pixKey as the only recommended path; POST /v2/swap/bytecode is documented as legacy/optional
  • OpenAPI (GET /v2/swap/quote / POST /v2/swap/bytecode): one-call quote preference; bytecode marked legacy/optional; WalletAddress schema for EVM or Solana

July 2026

API — breaking
apy is now the gross rate. On GET /strategies, GET /v2/strategies/{id} and GET /v2/wallets/{id}, apy previously carried a partial fee deduction and now mirrors grossAPY — the raw protocol rate with no Pods fee subtracted. For a strategy earning 10% gross with a 5% performance fee and a 2% markup, apy changes from 0.095 to 0.10.If you display apy as a net figure you will now overstate returns. Read netAPY instead. See Fees.
  • netAPY now deducts the integrator markup fee in addition to the performance fee: grossAPY × (1 − (performanceFeeBps + markupFeeBps) / 10000). Previously only the performance fee was subtracted, so customers on a markup agreement were shown a net APY higher than they would actually earn.
  • grossAPY is now consistently the raw protocol rate on every endpoint. It was previously understated on Aave and Morpho strategies.
  • apyAfterFees has been removed from position responses. It was undocumented, absent on Aave and Morpho strategies, and duplicated netAPY.
Documentation
  • Fees: new APY Fields section documenting which figures include Pods fees and the netAPY formula
  • OpenAPI: gross/net semantics documented on every APY field

May 2026

API
  • GET /v2/swap/quote: optional preferredProvider query parameter to pin which swap provider’s quote is persisted when multiple providers support the route; response remains a single { quote } object (best expectedAmountOut when omitted)
Documentation
  • Get a Quote: preferredProvider, multi-route aggregation, and related error codes
  • OpenAPI (/v2/swap/quote): preferredProvider parameter and updated endpoint description

April 2026

Documentation
  • Documented canonical chain fields (chainIdIn, chainIdOut, chainId) across OpenAPI, swap quote guide, architecture overview, and Cursor route rules—aligned with enriched swap, strategy, and tracking responses
  • Documented success-response contract (2xx JSON body, 204, no success flag) in OpenAPI intro, Architecture, and Cursor rules
  • Documented unified error envelope (removed redundant httpStatus in body); aligned Error Codes examples and rate-limit payload to live behavior
  • OpenAPI and Architecture: document ISO deadlines and strategy quote timestamps; aligned scripts/generate-docs.js strategy quote response schema.
API
  • Added /transfer/bytecode to API Reference with canonical originAddress/destinationAddress and deprecated alias fields (walletOrigin, walletDestination)
  • Standardized success responses: removed { success: true/false } envelopes; invalid API key on GET /customers/by-api-key is now 401; Supabase signup webhook returns 400/409/500 with HttpError shape; member delete returns 204; health and fulfill endpoints return JSON objects instead of bare strings
  • Standardized error JSON to { error: { code, message, details? } } across responser, auth middlewares, 404/500 handlers, rate limits, and OpenAPI
  • Standardized date/time fields in JSON responses to ISO 8601 (UTC): GET /v2/swap/quote quote.deadlineDate; wallet history DTOs; top-level dates on GET /actions/:id.

March 2026

Documentation
  • Added Why Pods page with competitive differentiation and build-vs-buy comparison
  • Added Fees page documenting swap fees (25 BPS), yield performance fees (5%), and integrator markup
  • Added Error Codes reference with 20+ error codes organized by category
  • Added llms.txt for AI agent discoverability
  • Published OpenAPI spec at docs.pods.finance/openapi.yaml
  • Linked status page from Architecture and API Reference pages
  • Fixed rate limit documentation: aligned to 100 req/min, 1,000 req/hr per API key across all pages
  • Added .env template and walletAddress setup to Quickstart
  • Fixed strategy response shapes in docs to match live API (data pagination, flat asset field, composite id)
  • Aligned list-pagination docs across OpenAPI, Quickstart, yield guide, and examples: pagination now documents total, totalPages, and hasMore (replacing mongoose-style totalRecords / hasNextPage on public responses)
  • Updated all swap code examples to use /v2/ endpoints
API
  • Added cross-chain investment support
  • Added Lido staking strategies (ETH and USD)
  • Added covered savings xDAI strategy
  • Added fee administration endpoints for integrators
  • Fixed Lido addresses and ABIs
  • Fixed withdraw history tracking
  • Removed request-lend action

February 2026

Documentation
  • Added iframe integration guides (Privy, wagmi/viem)
  • Added EarnWidget and SwapWidget documentation
  • Added LLM playbook for AI tool integration
  • Added external integration guides (Privy, Fireblocks, Dynamic)

January 2026

API
  • Launched v2 swap endpoints (/v2/swap/quote, /v2/swap/bytecode, /v2/swap/status/{id})
  • Added strategy analytics endpoint
  • Added wallet transaction history endpoint (/wallets/{wallet}/history/{strategyId})
  • Added Sepolia testnet support for Aave strategies
  • Added Base network strategies
Documentation
  • Migrated documentation to Mintlify
  • Added yield guides (check protocol info, deposit, check positions, withdraw)
  • Added swap guides (get quote, execute swap)
  • Added JavaScript code examples (strategy deposit, same-chain swap, cross-chain swap)

Deprecation Notices