Quickstart¶
Put a stablecoin balance to work in about ten minutes: run an auction for your deposit, sign once, and watch shares land in your own address. Gas is relayed — the depositing account needs no native token.
1. Get an API key¶
Requests carry your key in the api-key header —
Get API access.
2. See what the market pays¶
Indicative APYs per venue, in basis points. To commit real money you don't take these — you run an auction.
3. Request a quote (this runs the auction)¶
const res = await fetch("https://meadow.example.com/v1/quotes", {
method: "POST",
headers: { "api-key": process.env.EDITH_API_KEY!, "Content-Type": "application/json" },
body: JSON.stringify({
userAddress: account.address,
chain: 84532,
asset: USDC_ADDRESS,
amount: "900000000", // 900 USDC, smallest units, as a string
riskTier: "balanced",
}),
});
const { data: quote } = await res.json();
Solvers bid for your deposit; the response is the winning bid plus everything you must sign:
{
"success": true,
"data": {
"quoteId": "68fa41c2…",
"netApy": 4.87,
"grossApy": 5.2,
"feeBps": 25,
"allocation": [{ "venueId": "usdc-vault-1", "vault": "0x…", "shareBps": 10000 }],
"txPayload": {
"authorization": { "chainId": 84532, "address": "0xDelegate…", "nonce": 3 },
"executeDigest": "0x…",
"calls": [ { "target": "0xUSDC…", "value": "0", "data": "0x095ea7b3…" },
{ "target": "0xVault…", "value": "0", "data": "0x6e553f65…" } ],
"executeNonce": "0"
},
"expiresAt": 1753795200
},
"timestamp": "2026-07-29T12:00:00.000Z"
}
4. Sign twice, submit once¶
Two signatures from the depositing wallet — an EIP-7702 authorization and a
signature over executeDigest:
const auth = await walletClient.signAuthorization({
contractAddress: quote.txPayload.authorization.address,
chainId: quote.txPayload.authorization.chainId,
nonce: quote.txPayload.authorization.nonce,
});
const executeSignature = await account.sign({ hash: quote.txPayload.executeDigest });
await fetch("https://meadow.example.com/v1/deposits", {
method: "POST",
headers: { "api-key": process.env.EDITH_API_KEY!, "Content-Type": "application/json" },
body: JSON.stringify({ quoteId: quote.quoteId, authorization: auth, executeSignature }),
});
The response is an order. Quotes expire (expiresAt) — deposit promptly or
re-quote.
5. Watch it confirm¶
status runs relaying → confirmed (or failed). Once confirmed:
curl "https://meadow.example.com/v1/positions?userAddress=0xYourAddress" \
-H "api-key: $EDITH_API_KEY"
Your vault shares sit in your own address — not in a pool. Withdraw any time; there is no lock-in.
Next¶
- Core concepts — the auction, net APY, and why two signatures.
- Deposit into a venue — the full recipe with failure handling.
- Withdraw from a venue.