October 2026
Earn API/v1 removed
- Every
/v1endpoint has been removed and now returns404. All butGET /v1/route(below) have a/v2path for the same resource. /v2reads camelCase parameters only (for exampledistributorId,tokenIn,slippageBps). The snake_case names that/v1accepted are now ignored.GET /v1/routehas no/v2counterpart: setmode=swapon the deposit request, or callGET /v2/swap/for a standalone swap. See Swap Mode.- OpenAPI operationIds dropped their
V2suffix:GetEarnSwapV2is nowGetSwap, andBuildSwapOrderV2,SubmitSwapOrderV2,GetSwapOrderStatusV2,ReportSwapExecutionV2,GetDistributorDepositsV2,CreateMembershipV2andCreateMembershipAgreementV2lose the suffix. Five more operationIds get real names:GetAttribution(wasgetDistributeAttribution),GetDistributorMetrics(wasgetDistributorMetrics),GetDistributorLPs(wasgetDistributorLPs),GetMerkleProofs(wasturtle/streams.GetMerkleProofsHandler) andGetWalletPortfolio(wasturtle/portfolio.GetTurtleBalanceHandler). The membership request schemas are nowV2CreateMembershipInputandV2CreateMembershipAgreementInput. Clients generated from the OpenAPI spec get the new method and type names when regenerated; requests and responses are unchanged.
- New
POST /v2/streams/{id}/withdrawalssigns a withdrawal of the reward tokens a token stream holds beyond what it must keep for rewards: the surplus above its budget while it runs, and the undistributed leftover once it is fully processed. The stream admin submits the returnedtxParamstowithdrawFundson theStreamFactory. toandamountare optional and default to the stream admin and the max withdrawable amount.signatureExpirationSeconds(300 by default, up to 86400) gives multisig admins time to collect signatures.- A stream accepts one admin operation (a withdrawal or a budget increase) at a time. New
GET /v2/streams/{id}/admin-operations/activereturns the operation blocking a stream, itsblockingUntil, whether it executed, and the same signedtxParamsso a client that lost them can still submit them before the deadline. - Both endpoints are available on
/v2only, and require a secret key and theorganization:incentivize:streamspermission. - Documented on Withdraw Funds and Get Active Admin Operation.
August 2026
Wallet portfolio matches the app holdings payloadGET /v1/wallet/{address}/portfolioandGET /v2/wallet/{address}/portfolionow return the same holdings envelope as the main Turtle APIGET /wallet/{address}/balance(the shape the app uses).- The response is
{ portfolio: { productsEarnings, holdings } }. Idle ERC-20 and native balances live underholdings.wallets[].tokens; structured DeFi positions live underholdings.wallets[].protocols. - Breaking: the previous DeFi-only
{ total_stats, protocols }top-level shape is gone from Earn. Read protocol positions fromportfolio.holdings.wallets[].protocols. - New query param
includeProtocolTokens(defaultfalse) keeps protocol receipt tokens out of the token list so they are not double-counted with DeFi rows. - Documented on User Positions.
July 2026
Deposit and withdraw: on-chain balance preflight- Deposit and withdraw endpoints now read the user’s on-chain balance of
tokenIn(or vault shares, for withdraw) before building the transactions. - Requests where the wallet holds less than
amountare rejected up front with400 INVALID_ARGUMENTand errorinsufficient token balance, instead of failing later on-chain. - Documented on the Deposit and Withdraw pages under Error Handling.
- Token streams now include a 1.5% creation fee, charged in the reward token and pulled at stream creation on top of the net reward budget. Point streams remain free.
- Turtle Pro organizations are exempt (0%).
- The exact fee is surfaced as
FeeAmountin the create-stream response and shown on the Client Portal review screen before you confirm. - See Streams: before you start for prerequisites and funding requirements.
- Eligible wallets can now check allocations and claim $TURTLE directly in the Turtle app under Your Earnings on the Liquidity Campaigns page.
- Allocations are bound to the wallet used to contribute to the Turtle DAO — connecting a different wallet will show nothing to claim.
- Claiming once forfeits any unvested portion. Review Vesting & Mechanics before you claim.
- Full walkthrough: Genesis Airdrop.
April 2026
Documentation revamp- Added new pages: Authentication Overview, Opportunities Overview, Historical Data (stub), Earn API Overview, Swap Mode, Async Deposits, Portfolio Overview, Streams Overview, Distributor Model, Error Codes, OpenAPI Spec, and Changelog
- Removed Route API page
- Removed the
POST /v1/actions/attributeendpoint; attribution is now fully automatic and documented in the Distributor Model concept - Retitled the distributor deposits page to “Distributor Activity” and grouped it with the wallet-scoped activity and positions endpoints under “Portfolio & Activity”
- Added three previously undocumented response fields to Opportunities:
minDepositAmountUsd,swapDirectEnabled,swapRouteEnabled - Added three previously undocumented query filters to Opportunities:
chainIds,depositToken,tvlGreaterThan

