noesis-api
v0.3.2
Published
Official TypeScript SDK for the Noesis on-chain intelligence API — Solana token & wallet analytics.
Maintainers
Readme
noesis-api
Official TypeScript SDK for the Noesis on-chain intelligence API.
Install
npm install noesis-api
# or
pnpm add noesis-api
# or
yarn add noesis-apiQuick start
import { Noesis } from "noesis-api";
const noesis = new Noesis({ apiKey: process.env.NOESIS_API_KEY! });
// Token preview
const preview = await noesis.token.preview("<MINT>");
console.log(preview);
// Wallet profile
const wallet = await noesis.wallet.profile("<ADDRESS>");
console.log(wallet);
// Bundle detection
const bundles = await noesis.token.bundles("<MINT>");
console.log(bundles);Get an API key at noesisapi.dev/keys.
API
new Noesis(config)
const noesis = new Noesis({
apiKey: "se_...", // required
baseUrl: "https://...", // optional — defaults to https://noesisapi.dev
fetch: customFetch, // optional — inject your own fetch
});Token methods
noesis.token.preview(mint, chain?)
noesis.token.scan(mint, chain?)
noesis.token.info(mint, chain?)
noesis.token.topHolders(mint, chain?)
noesis.token.holders(mint, { chain?, limit?, cursor? })
noesis.token.bundles(mint)
noesis.token.freshWallets(mint)
noesis.token.teamSupply(mint, chain?)
noesis.token.entryPrice(mint, chain?)
noesis.token.devProfile(mint, chain?)
noesis.token.bestTraders(mint, chain?)
noesis.token.earlyBuyers(mint, { chain?, hours? })Wallet methods
noesis.wallet.profile(address, chain?)
noesis.wallet.history(address, { chain?, limit?, type?, source?, before? })
noesis.wallet.connections(address, { min_sol?, max_pages? })
noesis.wallet.batchIdentity(addresses)
noesis.wallet.crossHolders(tokens)
noesis.wallet.crossTraders(tokens)Chain / on-chain methods
noesis.chain.status()
noesis.chain.account(address)
noesis.chain.accountsBatch(addresses)
noesis.chain.parseTransactions(signatures)Live streams (SSE)
Streams are fetch-backed (not native EventSource), so the X-API-Key
header travels with the request — authenticated streams work in Node ≥ 18,
Deno, Bun, and modern browsers.
// Callback style
const stream = noesis.streams.pumpfunNewTokens();
stream.onmessage = (event) => {
const token = JSON.parse(event.data);
console.log("New token:", token);
};
stream.onerror = (err) => console.error(err);
// stream.close() when done
// Or async iterator
for await (const event of noesis.streams.pumpfunMigrations()) {
const migration = JSON.parse(event.data);
console.log("Migration:", migration);
}Available streams: pumpfunNewTokens, pumpfunMigrations, raydiumNewPools, meteoraNewPools.
Error handling
Non-2xx responses are thrown as NoesisError, a real Error subclass with
typed fields for rate limits:
import { Noesis, NoesisError } from "noesis-api";
try {
const data = await noesis.token.preview("<MINT>");
} catch (err) {
if (err instanceof NoesisError && err.isRateLimit) {
console.log(`Rate limited (${err.limit}); retrying in ${err.retryAfterSeconds}s`);
await new Promise(r => setTimeout(r, (err.retryAfterSeconds ?? 5) * 1000));
} else if (err instanceof NoesisError && err.status === 401) {
console.error("Invalid or missing API key — check process.env.NOESIS_API_KEY");
} else {
throw err;
}
}NoesisError fields: status, message, details, and on 429 also
retryAfterSeconds, limit (e.g. "1 request/5 seconds"), limitType
("Light" | "Heavy" | "VeryHeavy"), and signedIn. retryAfterSeconds
falls back to the Retry-After response header when the body omits it.
Environment support
- Node.js ≥ 18 (native
fetch) - Deno, Bun
- Modern browsers (pass an API key via a proxy — don't expose it client-side)
License
MIT — see LICENSE.
