streams-create permission, and (for token streams) that the creating wallet already holds enough reward token to cover the total plus the creation fee. See Before you start.
Choosing a reward model
Decide between the five stream types before you configure rates.
Create from the API
Build the request, get the signed transaction params, and broadcast it yourself.
Create from the Client Portal
Open the Client Portal and connect your wallet
Go to dashboard.turtle.xyz and connect the wallet you will create the stream from. For token streams this wallet pays the reward token and the creation fee, so connect the one that holds the funds on the right chain.
Reward token selection is currently supported on Ethereum, Base, Avalanche, BSC, and Sepolia. Make sure your wallet is on one of these chains before you continue.
Choose your reward source
A stream pays either a reward token or points, never both.
- Reward token: pays a real ERC-20 on-chain. The token must be an allowlisted reward token on a supported chain.
- Points: tracks off-chain points that can convert to tokens at a future TGE. Point streams are created instantly, with no on-chain transaction, no funding, and no creation fee.
Choosing points removes the later approval and signing steps, since there is no on-chain creation transaction. See Get tokens and Get points for what is available.
Select a stream type
Pick one of the five types. The type determines which rate field you fill in next.
- Fixed Rate: a set number of reward tokens per 1,000 USD of TVL per day.
- Fixed APR: an annualized rate, converted to a daily token figure at each snapshot.
- Daily Budget: a fixed daily token budget split pro-rata across all LPs.
- Airdrop: manual or retroactive allocations you upload yourself.
- Yield Match: a dynamic rate derived from the vault’s performance.
Configure rewards
Set the target vault or token, the rate for your type, and the schedule.
- Target: the vault or token whose on-chain balance is tracked to measure each wallet’s TVL contribution (the target token). This is distinct from the reward token you pay out.
- Rate: the field depends on your type. Fixed Rate takes a
tokensPerUSDvalue, Fixed APR takes anapr, Daily Budget takes atokensPerDay, and Yield Match takes atargetApy(gap-fill mode) or an optionalapyOffset(mirror mode). Airdrop has no rate; you upload allocations later through a dedicated snapshot endpoint. - Schedule: a start time and an optional end time.
For Daily Budget, the total is computed automatically from the daily budget times the duration, so there is no separate total amount to enter.
Add boost plugins (optional)
Boosts adjust rewards between the base computation and the final distribution. Common ones:
- Turtle User: boost wallets registered as Turtle members.
- X (Twitter): boost wallets with a verified X account link.
- Telegram: boost wallets with a verified Telegram link.
- Forwarder: forward rewards earned by a vault address through to that vault’s underlying LPs (for example a Euler Earn Vault).
Boosts are configured through the
adapters array. See Create a stream for the full plugin list and parameters.Set restrictions (optional)
Limit who can earn from the stream.
- Whitelist: restrict eligibility to a defined set of wallets.
- Blacklist: exclude specific wallets.
Review the summary
Check the reward source, type, target, rate, schedule, and any boosts or restrictions before you commit anything on-chain.
Approve the reward token and sign the transaction
For token streams, approve the reward token spend, then sign the
createStream transaction. The Turtle backend issues a signature and your wallet submits the transaction to the StreamFactory. Point streams skip this step and are created immediately.Confirmation
The stream is live. The indexer begins tracking target token balances, and the first reward snapshot lands within about 12 hours. Track participants and accrued rewards from the Distribution Dashboard. Once the first Merkle root is committed, LPs can start claiming; see Claiming rewards for the three ways to offer that.
Rewards accrue from creation, but the first claimable balance appears only once the first on-chain Merkle root is committed, roughly every 12 hours.
Launching from a multisig (Safe)
If the creating wallet is a Safe, create the stream through the API rather than signing in the browser. Call Create a stream to obtain the signedtxParams, then submit the reward token approval and the createStream call from the Safe Transaction Builder to the StreamFactory for your chain.
The submitting Safe must match the expected sender encoded in the signed params, or the transaction will revert. Contract addresses and the full broadcast walkthrough are in Create a stream.
Prefer to integrate programmatically?
Create a stream via the API
Request bodies, signing, base-units rules, and the StreamFactory broadcast guide for every chain.

