From d45d09cf9494f5bc3673916a930e0466af2b9444 Mon Sep 17 00:00:00 2001 From: Doug Richar Date: Tue, 10 Feb 2026 12:40:43 -0500 Subject: [PATCH] docs(haystack-router): add free tier API key to all examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace placeholder `'your-api-key'` values with the free tier key (`1b72df7e-1131-4449-8ce1-29b79dd3f51e`) across all haystack-router skill files. This reflects the free tier added in TxnLab/haystack-js#8. - Add API Key Tiers section to configuration.md with free/production tiers - Update SKILL.md to mention the free key and link to configuration.md - Remove "API key — request from support" prerequisite from getting-started.md - Replace all placeholder keys in code examples across 7 reference files - Update .env example in node-automation.md with the free tier key Co-Authored-By: Claude Opus 4.6 --- skills/haystack-router/SKILL.md | 6 ++-- .../references/configuration.md | 31 +++++++++++++------ .../references/fees-and-referrals.md | 4 +-- .../references/getting-started.md | 11 ++++--- .../references/node-automation.md | 2 +- skills/haystack-router/references/quotes.md | 9 ++++-- skills/haystack-router/references/swaps.md | 4 ++- 7 files changed, 45 insertions(+), 22 deletions(-) diff --git a/skills/haystack-router/SKILL.md b/skills/haystack-router/SKILL.md index 3a450a5..4a3a410 100644 --- a/skills/haystack-router/SKILL.md +++ b/skills/haystack-router/SKILL.md @@ -23,7 +23,7 @@ Formerly known as Deflex (originally developed by Defly and Alammex), acquired b npm install @txnlab/haystack-router algosdk ``` -**API key required.** Request one from support@txnlab.dev. +**API key required.** A free tier key is available for immediate use — see [configuration.md](references/configuration.md) for details. ## Core Flow @@ -31,7 +31,9 @@ npm install @txnlab/haystack-router algosdk import { RouterClient } from '@txnlab/haystack-router' // 1. Initialize -const router = new RouterClient({ apiKey: 'your-api-key' }) +const router = new RouterClient({ + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) +}) // 2. Get a quote const quote = await router.newQuote({ diff --git a/skills/haystack-router/references/configuration.md b/skills/haystack-router/references/configuration.md index 2ef05d3..13d3041 100644 --- a/skills/haystack-router/references/configuration.md +++ b/skills/haystack-router/references/configuration.md @@ -1,5 +1,16 @@ # Configuration +## API Key Tiers + +| Tier | Key | Rate Limit | Use Case | +| -------------- | -------------------------------------- | --------------- | --------------------------------------------- | +| **Free** | `1b72df7e-1131-4449-8ce1-29b79dd3f51e` | 60 requests/min | Development, testing, low-volume integrations | +| **Production** | Request from support@txnlab.dev | Higher limits | Production applications | + +The free tier key requires no registration and works immediately. The rate limit applies to all API calls (both `fetchQuote` and `fetchExecuteSwapTxns`), not just quotes. + +For production integrations with higher rate limits, contact support@txnlab.dev for a dedicated key. + ## RouterClient Options ```typescript @@ -7,7 +18,7 @@ import { RouterClient } from '@txnlab/haystack-router' const router = new RouterClient({ // Required - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) // Optional apiBaseUrl: undefined, // Override API endpoint (SDK manages defaults) @@ -27,7 +38,9 @@ const router = new RouterClient({ ### MainNet (Default) ```typescript -const router = new RouterClient({ apiKey: 'your-api-key' }) +const router = new RouterClient({ + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', +}) ``` Uses default Nodely MainNet algod endpoint. @@ -36,7 +49,7 @@ Uses default Nodely MainNet algod endpoint. ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) algodUri: 'https://testnet-api.4160.nodely.dev/', }) ``` @@ -45,7 +58,7 @@ const router = new RouterClient({ ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) algodUri: 'http://localhost:4001', algodToken: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', @@ -78,7 +91,7 @@ Slippage is verified on the **final output** of the swap, not on individual hops ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) feeBps: 15, // 0.15% output fee }) ``` @@ -94,7 +107,7 @@ Earn 25% of swap fees by setting a referrer address: ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) referrerAddress: 'YOUR_ALGORAND_ADDRESS', }) ``` @@ -107,7 +120,7 @@ When `autoOptIn: true`, the SDK automatically checks if the user needs to opt in ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) autoOptIn: true, }) @@ -133,7 +146,7 @@ const autoOptOut = new AutoOptOutMiddleware({ }) const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) middleware: [autoOptOut], }) ``` @@ -144,7 +157,7 @@ See [api-reference.md](api-reference.md) for the `SwapMiddleware` interface. ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) debugLevel: 'info', }) ``` diff --git a/skills/haystack-router/references/fees-and-referrals.md b/skills/haystack-router/references/fees-and-referrals.md index cd6890c..f4b8d75 100644 --- a/skills/haystack-router/references/fees-and-referrals.md +++ b/skills/haystack-router/references/fees-and-referrals.md @@ -10,7 +10,7 @@ ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) feeBps: 15, // 0.15% }) ``` @@ -36,7 +36,7 @@ Pass your Algorand address as the `referrerAddress` when creating the RouterClie ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) referrerAddress: 'YOUR_ALGORAND_ADDRESS', }) ``` diff --git a/skills/haystack-router/references/getting-started.md b/skills/haystack-router/references/getting-started.md index ebb2168..eafe399 100644 --- a/skills/haystack-router/references/getting-started.md +++ b/skills/haystack-router/references/getting-started.md @@ -2,7 +2,6 @@ ## Prerequisites -- **API key** — request from support@txnlab.dev - **Node.js** >= 20 - **algosdk** 3.x (peer dependency) @@ -18,7 +17,7 @@ npm install @txnlab/haystack-router algosdk import { RouterClient } from '@txnlab/haystack-router' const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) }) ``` @@ -26,7 +25,7 @@ const router = new RouterClient({ ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) autoOptIn: true, // Auto-detect asset opt-in needs referrerAddress: 'ABC...', // Earn 25% of swap fees feeBps: 15, // Fee in basis points (default: 10) @@ -40,7 +39,7 @@ Override the algod connection and API base URL for TestNet: ```typescript const router = new RouterClient({ - apiKey: 'your-api-key', + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) algodUri: 'https://testnet-api.4160.nodely.dev/', // Set apiBaseUrl if using a TestNet-specific API endpoint }) @@ -51,7 +50,9 @@ const router = new RouterClient({ ```typescript import { RouterClient } from '@txnlab/haystack-router' -const router = new RouterClient({ apiKey: 'your-api-key' }) +const router = new RouterClient({ + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) +}) // Get a quote: swap 1 ALGO → USDC const quote = await router.newQuote({ diff --git a/skills/haystack-router/references/node-automation.md b/skills/haystack-router/references/node-automation.md index 9aa446b..76d8414 100644 --- a/skills/haystack-router/references/node-automation.md +++ b/skills/haystack-router/references/node-automation.md @@ -12,7 +12,7 @@ npm install @txnlab/haystack-router algosdk ```bash # .env -HAYSTACK_API_KEY=your-api-key +HAYSTACK_API_KEY=1b72df7e-1131-4449-8ce1-29b79dd3f51e # Free tier (60 requests/min) MNEMONIC=your-25-word-mnemonic ``` diff --git a/skills/haystack-router/references/quotes.md b/skills/haystack-router/references/quotes.md index 6321fc3..b7859b0 100644 --- a/skills/haystack-router/references/quotes.md +++ b/skills/haystack-router/references/quotes.md @@ -5,7 +5,9 @@ ```typescript import { RouterClient } from '@txnlab/haystack-router' -const router = new RouterClient({ apiKey: 'your-api-key' }) +const router = new RouterClient({ + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) +}) const quote = await router.newQuote({ fromASAID: 0, // ALGO @@ -120,7 +122,10 @@ Before quoting, check if the user needs to opt into the output asset: ```typescript // Option 1: Set autoOptIn on the client -const router = new RouterClient({ apiKey: 'key', autoOptIn: true }) +const router = new RouterClient({ + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) + autoOptIn: true, +}) const quote = await router.newQuote({ fromASAID: 0, toASAID: 31566704, diff --git a/skills/haystack-router/references/swaps.md b/skills/haystack-router/references/swaps.md index c146ebb..d5e60ea 100644 --- a/skills/haystack-router/references/swaps.md +++ b/skills/haystack-router/references/swaps.md @@ -5,7 +5,9 @@ ```typescript import { RouterClient } from '@txnlab/haystack-router' -const router = new RouterClient({ apiKey: 'your-api-key' }) +const router = new RouterClient({ + apiKey: '1b72df7e-1131-4449-8ce1-29b79dd3f51e', // Free tier (60 requests/min) +}) // 1. Get a quote const quote = await router.newQuote({