Prerequisites
Before starting, make sure you have:- A Turtle organization created at dashboard.turtle.xyz — see Distribution Dashboard for a walkthrough
- Your API key (
pk_live_for client-side orsk_live_for server-side) — see API Keys - Your distributor ID (found in Distribution > Dashboard in the Client Portal)
New organizations require approval from the Turtle team before API keys are issued. Reach out on Discord if you need to expedite.
Step 1: Verify your API key
Test your key by fetching the opportunity catalog. If this works, authentication is set up correctly.opportunities array. If you get a 401, double-check your API key.
See API Keys for details on key types, scopes, and rate limits.
Step 2: Register the user’s wallet
Every wallet must be a Turtle member before it can deposit. The membership flow uses EIP-4361 (Sign-In with Ethereum) for wallet verification.2a. Check if already a member
isMember is true, skip to Step 3.
2b. Request a signature message
2c. Sign the message and create membership
Have the user sign the returnedmessage with their wallet, then submit the signature:
See Register Wallet for the full endpoint reference including Solana and TON support.
Step 3: Find an opportunity
Fetch your distributor’s curated opportunity set, or browse the full catalog with filters.id (UUID) you’ll use in the next step, plus useful fields:
| Field | What it tells you |
|---|---|
estimatedApr | Current estimated annual return |
tvl | Total value locked in USD |
depositTokens | Which tokens the vault accepts |
transactionalProperties.depositStepsType | instant or complex (async) |
swapDirectEnabled / swapRouteEnabled | Whether direct and swap deposit modes are available |
See Get Opportunities and Distributor Opportunities for full response schemas.
Step 4: Generate a deposit transaction
Call the deposit action endpoint with the opportunity ID, wallet address, token, amount, and your distributor ID. The API returns unsigned transactions ready for the user to sign.transactions array — typically an approve transaction followed by a deposit transaction. Have the user sign and submit each one in order:
Step 5: Verify attribution
After the deposit confirms on-chain, you can verify that Turtle’s attribution system picked it up correctly:distributorId in the metadata and signatureValid: true. Attribution is automatic via the Lumon collector — you don’t need to call any additional endpoints.
What’s next
You now have a working integration with an attributed deposit. From here:Distributor Opportunities
Curate which opportunities your users see.
Withdraw
Generate withdrawal transactions.
Wallet Activity
Query deposit and withdrawal history by wallet.
Distributor Model
Understand attribution and revenue share.
Swap Mode
Let users deposit with any token via DEX routing.
Earn Widget SDK
Skip the API and embed a drop-in React component instead.

