
feeds
Query Goldsky Feeds for one wallet's balances and transfers. Use for wallet holdings, portfolio value, transfer history, deposit checks, edge.goldsky.com/data/feeds, a Feeds API key, or GOLDSKYFEEDSAPIKEY. The same key also serves Polymarket activity, positions and balances, and block headers by number, hash or timestamp. Get the key with goldsky feeds key reveal, then call the feeds over HTTP. The CLI login token is not this key. For rows in the user's own database, use /turbo-builder. For a Turbo dataset name, use /datasets. For JSON-RPC, use /edge or /boost.
- Installs
- 2.9K
- Last 24h
- +235
- Trending rank
- #1159
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/goldsky-io/goldsky-agent --skill feeds- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads feeds automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Goldsky Feeds
Feeds answers one question about one wallet over HTTP: what it holds, or what it sent and received, across the supported chains in a single request. Goldsky indexes, normalizes, and prices the rows. The caller does not run a pipeline.
The same host and the same key also serve Polymarket and block-header feeds. Those are listed under "Other feeds on this key", and they do not follow the conventions below.
The CLI gets the key (goldsky feeds key reveal); the feeds themselves are plain HTTP. There are no goldsky feeds read commands. Do not mint the key with goldsky edge create. The endpoint name feeds is reserved on the Edge create path, so that command is rejected. The CLI login token is a different credential and does not authenticate these requests. Do not print the Feeds key.
When this is the wrong tool
- The rows need to land in the user's own database or webhook. That is a Turbo pipeline (
/turbo-builder,/datasets). Feeds does not stream into a sink; streaming is not offered yet (https://docs.goldsky.com/feeds/streaming). - The question is a Turbo dataset name or chain prefix. That is
/datasets. Those prefixes differ: Feeds sayspolygonandarbitrum_one, Turbo saysmaticandarbitrum. - The question is JSON-RPC. That is
/edge, or/boostwhen they want to keep their current provider.
Key
A project has one Feeds key, and every feed answers it. Get it with the CLI. Do not send the user to the dashboard, and do not run goldsky edge create.
goldsky feeds key reveal
export GOLDSKY_FEEDS_API_KEY="$(cat "$HOME/.goldsky/feeds-api-key")"
reveal creates the key if the project has none, otherwise fetches the existing one, and writes it to ~/.goldsky/feeds-api-key (mode 600). It never prints the key and never rotates it, so it is safe to run again. Do not cat that file into the chat, and do not write the key anywhere else.
Success prints Created Feeds API key and saved it to ~/.goldsky/feeds-api-key or Saved existing Feeds API key to ~/.goldsky/feeds-api-key. If it prints the general help instead, the CLI is older than 13.17.0 (an older CLI exits 0 there, so read the output, not the exit code); run /auth-setup to install the pinned version. Do not pass --token. A 401 means they are not logged in: use /auth-setup first. A 403 means the user is not an Editor on the project. A 409 means an Edge endpoint named feeds exists and is not the Feeds key; that endpoint has to be deleted first.
Do not rotate the key unless the user asks: rotate revokes the current key immediately.
Send the key in the x-api-key header. ?key= and Authorization: Bearer are also accepted, but prefer the header so the key does not land in a URL log. A missing key answers 402 with an x402 payment-required body, not 401, because the feeds are also offered pay-per-request. A key that is present but wrong is 401. So on a 402, the header did not arrive; check that GOLDSKY_FEEDS_API_KEY is set before assuming the key is bad.
Calls
curl -sS -H "x-api-key: $GOLDSKY_FEEDS_API_KEY" \
"https://edge.goldsky.com/data/feeds/wallets/balances?address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
curl -sS -H "x-api-key: $GOLDSKY_FEEDS_API_KEY" \
"https://edge.goldsky.com/data/feeds/wallets/transfers?address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
Balances returns the latest balance of each token the wallet holds, native assets included, plus total_value_usd. Transfers returns that wallet's movements, newest first. direction is in or out relative to address.
Read https://edge.goldsky.com/data/openapi.json before using a parameter or response field that the quickstart does not show. That document is the contract. The guide is https://docs.goldsky.com/feeds/quickstart and the overview is https://docs.goldsky.com/feeds.
Both feeds can also answer 502 when ClickHouse upstream fails, and balances can answer 503 when native balances are unavailable on some chains. The 503 names them in error.chains and sets Retry-After; it is a partial outage, so retry rather than reporting the wallet as empty.
address is required and is exactly one wallet. An EVM address is 0x plus 40 hex digits. A base58 Solana address passes validation but has no chain behind it yet, so it answers 200 with an empty data. A non-200 body is an error, not an empty wallet.
Parameters
Re-read the OpenAPI spec when a request is rejected. These are query parameters on the URL. The chain set lives on the chains parameter.
- Omit
chainsto query every supported chain. Pass canonical slugs, comma-separated.matic,arbitrum, andmainnetare aliases forpolygon,arbitrum_one, andethereum. Matching is case-insensitive, and-is read as_. Any other spelling returns 400. token_symbolmatches a symbol, so two contracts can both match —usdcreturns both the native and the bridged contract on several chains at once. Usetoken_addresswhen the token must be a specific contract; it takes up to 100, comma-separated. On balances, the zero address selects the native asset of every chain in scope.include_unknown_pricedefaults to false, which leaves out tokens Goldsky has no price source for. It is not a promise that every row is priced: at the default, rows whose token is priceable still come back withprice_usdandvalue_usdnull. Handle a null price on every row.include_historicaldefaults to false. Set it to true on balances to also get zero rows: tokens fully sold, and natives the wallet holds none of. On one wallet here that took 373 rows to 517. "Has this wallet ever held X" needs it; "what is it worth now" does not.min_value_usddrops rows below that USD value and also drops unpriced rows. It applies tototal_value_usdtoo.- On transfers,
fromandtoare inclusive RFC 3339 bounds onblock_timestamp.from_blockandto_blockrequire exactly one chain, because block numbers are not comparable across chains; without one they are 422CONFLICTING_FILTERS, not 400.transfer_typeisnative,erc20, or both, comma-separated. The NFT types (erc721,erc1155) return 400.splis accepted and returns 200 with an emptydata, because no Solana chain is served yet: that empty page means the filter matched nothing on the EVM chains, not that the wallet is empty.directionisinorout. page_sizedefaults to 100 and the maximum is 1000. A larger value is clamped to 1000 rather than rejected, so readpagination.page_sizeback instead of assuming the request size was honored. The next page ispage_tokenset to the previous response'spagination.next_page_token. A token is only valid for the filters that produced it. Each page is a separate billed request (https://docs.goldsky.com/pricing/summary#feeds). Do not walk the whole history unless the user asked for that range.
Other feeds on this key
/polymarket/activity, /polymarket/positions, /polymarket/balances, /blocks/{chain} and /blocks/{chain}/head are served by the same host and the same key. A Polymarket question does not have to become a pipeline: reach for /turbo-builder only when the rows have to land in the user's own database. Call them the same way, with the x-api-key header. Read the OpenAPI spec before calling one, because all three of the conventions above change:
- Pagination is
limitandcursor, notpage_sizeandpage_token, and the next cursor isnext_cursorat the top level, notpagination.next_page_token.page_sizeis accepted and silently ignored, so a request meaning to ask for 2 rows returns the default 100 — and every one of those is billed. Check what came back. - The chain vocabulary is not the wallet feeds' vocabulary.
/blocksserves 21 chains and spells Polygonmatic;polygon,mainnetand everyarbitrumspelling are 400 there. The wallet feeds serve 7 and spell itpolygon, withmaticonly an alias. A slug that works on one is not known to work on the other. - Errors are not always the
{"error":{"code","message"}}envelope. A bad query string on these paths comes back as a bare string (Failed to deserialize query string: ...), so reading.error.messagegets null. Branch on the status code, not on the body shape. - Numbers are scaled differently per path.
/polymarket/activityserves JSON numbers already in decimals (price: 0.65,amount_shares: 84.615385,amount_usdc: 55.0, andamount_usdc / amount_shares == price)./polymarket/positionsand/polymarket/balancesserve strings in raw 1e6 integer units, soavg_price: "100000"is $0.10 andamount: "12120000000"is 12120 shares. Divide by 1e6 before showing either to a user.positions.amountandbalances.balanceshare that scale but are not the same quantity and disagreed on half the rows sampled here:amountis the trade-derived net position,balanceis the conditional-token balance actually held, and splits, merges, redeems and plain transfers move tokens without a fill. Pick the one that answers the question and do not substitute one for the other. /polymarket/activityrefuses an unselective scan. It needs one ofaddress,token_id, a closed block window of 300000 blocks or fewer, a closed time window of 604800 seconds or fewer, orlimitof 100 or fewer with no filter. Anything else is 400MISSING_SELECTIVE_FILTER.- Three values carry warnings in the spec.
activity.fee's basis is inconsistent across some maker/taker pairs in the source data.positions.last_updated_atis pipeline upsert time, not block time, so rows with differentblock_numbercan share it; useblock_numberto order.balances.as_of_blockis the latest balance at or before that block by insert order, not a reconstruction of that block.
Writing code against a response
- Balances are the latest amount of each token, not a history. Several transfers in one block become one balance row. Reconstruct movement from the transfers feed.
- A transfer object has no id. Do not build a primary key that includes
block_numberorblock_timestamp: a transaction that survives a reorg comes back with different block fields. Do not assume one transaction emits a transfer only once. price_usdandamount_usdare computed when the request is served. A later read of the same transfer can show a different USD value.
FAQ
What does the feeds skill do?
Query Goldsky Feeds for one wallet's balances and transfers. Use for wallet holdings, portfolio value, transfer history, deposit checks, edge.goldsky.com/data/feeds, a Feeds API key, or GOLDSKYFEEDSAPIKEY. The same key also serves Polymarket activity, positions and balances, and block headers by number, hash or timestamp. Get the key with goldsky feeds key reveal, then call the feeds over HTTP. The CLI login token is not this key. For rows in the user's own database, use /turbo-builder. For a Turbo dataset name, use /datasets. For JSON-RPC, use /edge or /boost.
How do I install feeds?
Run npx skills add https://github.com/goldsky-io/goldsky-agent --skill feeds in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/feeds/ (personal) or .claude/skills/feeds/ (project).
Which AI agents can use feeds?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is feeds safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains feeds?
It is published by goldsky-io in goldsky-io/goldsky-agent. It has 2,912 recorded installs.
More from goldsky-io/goldsky-agent
turbo-pipelines
goldsky-io/goldsky-agent
Turbo pipeline YAML reference and architecture guide. Covers: YAML field syntax (startat, from, version, primarykey), source/transform/sink configuration, validation errors, resource sizing (xs–xxl), architecture decisions (dataset vs kafka, streaming vs job, fan-out vs fan-in, sink selection, pipeline splitting). Triggers on: 'what does field X do', 'what fields does a postgres sink need', 'what resource size', 'should I use kafka or dataset', 'how to structure my pipeline'. For writing transforms, use /turbo-transforms. For end-to-end building, use /turbo-builder.
turbo-transforms
goldsky-io/goldsky-agent
Write SQL, TypeScript, and dynamic table transforms for Turbo pipelines. Covers: decoding EVM logs with gslogdecode, filtering/casting blockchain data, UNION ALL for combining events, TypeScript/WASM transforms (invoke function), dynamic lookup tables (dynamictablecheck), transform chaining, and Solana decoding. Triggers on: 'decode Transfer events', 'write a SQL transform', 'filter by contract', 'TypeScript transform', 'dynamic table', 'UNION ALL'. For pipeline YAML structure, use /turbo-pipelines. For end-to-end building, use /turbo-builder.
turbo-doctor
goldsky-io/goldsky-agent
Diagnose and fix broken Goldsky Turbo pipelines interactively. Triggers on: pipeline in error state, stuck starting, connection refused, not getting data, duplicate rows, missing fields, slow backfill, or any named pipeline misbehaving. Runs logs/status commands, identifies root cause, and offers fixes. For CLI syntax or error pattern lookup without an active problem, use /turbo-operations instead.
turbo-builder
goldsky-io/goldsky-agent
Build and deploy new Goldsky Turbo pipelines: requirements, dataset selection, YAML, validation, and deployment. Use for 'build a pipeline', 'index X on Y chain', or moving chain/contract data into Postgres, MySQL, ClickHouse, Kafka, Pub/Sub, S3, SQS, or webhooks. Also use for data goals such as Polymarket fills/positions/PnL, prediction markets, stablecoin or circulating supply, proof of reserves, sanctions/AML transfer monitoring, deposit detection, CCTP burns/mints, cross-chain settlement, payment reconciliation, wallet history streamed into the user's own database, token holder registries, tokenized equities/RWA, and wash-trading detection. A REST lookup of one wallet's balances or transfers is /feeds, not a pipeline, and so is a read of Polymarket activity, positions or balances. Debug existing pipelines with /turbo-doctor; look up syntax with /turbo-pipelines.
datasets
goldsky-io/goldsky-agent
Use this skill when the user needs to look up or verify Goldsky blockchain dataset names, chain prefixes, dataset types, or versions. Triggers on questions like 'what\'s the dataset name for X?', 'what prefix does Goldsky use for chain Y?', 'what version should I use for Z?', or 'what datasets are available for Solana/Stellar/Arbitrum/etc?'. Also use for chain-specific dataset questions (e.g., polygon vs matic prefix, stellarnet balance datasets, solana token transfer dataset names), and to answer 'is there a dataset for X?' where X is a domain rather than a chain — decoded logs, token transfers and balances, mint/burn events for circulating supply, DEX or prediction-market activity (Polymarket), or the raw blocks, transactions and traces behind wallet history and reconciliation. Do NOT trigger for questions about CLI commands, pipeline setup, or general Goldsky architecture unless the core question is about finding the right dataset name or chain prefix. Wallet Feeds API queries are /
auth-setup
goldsky-io/goldsky-agent
Set up Goldsky CLI authentication and project configuration. Use this skill when the user needs to: install the goldsky CLI (what's the official install command?), run goldsky login (including when the browser opens but 'authentication failed'), run goldsky project list and see 'not logged in' or 'unauthorized', switch between Goldsky projects, check which project they're currently authenticated to, or fix 'unauthorized' errors when running goldsky turbo commands. Also use for 'walk me through setting up goldsky CLI from scratch for the first time', and when they just installed Goldsky and say 'Set it up and help me get started'. If any other Goldsky skill hits an auth error, redirect here first.
Popular backend & apis skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
google-agents-cli-adk-code
google/agents-cli
This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).
embedded-captions
heygen-com/hyperframes
Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.
entra-agent-id
microsoft/azure-skills
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).
neon
neondatabase/agent-skills
Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.