GET endpoint that returns JSON. The feeds come in four groups:
- Wallets. Balances and Transfers take one wallet address.
- Tokens. Tokens takes a list of tokens.
- Prediction markets. Activity, Positions, and Balances return Polymarket data on Polygon.
- Chain datasets. Blocks and Chain head return block headers for one chain.
Base URL
/feeds/wallets, such as /feeds/wallets/balances, and the token lookup is at /feeds/tokens. The Prediction markets feeds live under /polymarket, and the Chain datasets feeds under /blocks/{chain}.
Get an API key
One Feeds API key works for every feed in your project, from Balances to Blocks. It’s a Feeds API key, not the Goldsky API token the CLI and the Goldsky API use. Any project on a Goldsky plan, Starter included, can get a Feeds key.- Dashboard
- Goldsky API
- CLI
Open Feeds in the Goldsky dashboard and go to the API keys tab to create or copy a key.
Authentication
Pass your API key in thekey query parameter:
X-API-Key header, which keeps the key out of URLs and access logs:
Authorization header:
Pay per request with x402
You can call any feed without a Goldsky account or API key by paying in USDC over x402. Send the request with no key: the API answers402 with a payment challenge listing two ways to pay. Edge lists its CDP entries first, so a standard exact USDC payment settled through the Coinbase CDP facilitator (Base, Polygon, Arbitrum, World Chain, Monad) is what a standard x402 client pays by default, with no deposit and no extra configuration. Circle Gateway needs a one-time deposit; an x402 client such as Circle’s @circle-fin/x402-batching selects it explicitly and pays it.
- The challenge asks for a top-up. For Balances, Transfers, and Tokens, the minimum is 50000 atomic USDC ($0.05), which covers about 142 requests. For Prediction markets and Chain datasets, the minimum is 5000 atomic USDC ($0.005), which covers about 500 requests. Later requests are deducted from that balance until it runs out. This applies to either payment option.
- The balance is tied to your wallet and shared across every feed and Edge RPC, so one top-up pays for all of them.
Endpoints
Try it in the API reference
Send test requests with your key.
OpenAPI spec (JSON)
For codegen and AI agents.
Supported chains
The wallet feeds, Balances and Transfers, support 9 EVM chains and Solana. Tokens supports the 9 EVM chains.mainnet, arbitrum, and matic also work, as aliases for ethereum, arbitrum_one, and polygon. Values are case-insensitive, and a - reads as _, so Arbitrum-One works too. Any other value returns 400 BAD_REQUEST.
Tokens takes the same values, and aliases, as the chain in each chain:token_address pair.
The wallet address decides which chains a wallet feed reads. A Solana address reads Solana only, and an EVM address reads the EVM chains only. A chains value that leaves out the address’s chains, such as chains=solana with an EVM address, returns an empty data list rather than an error.
How far back the history goes can differ from chain to chain.
The other groups have their own chains. The Prediction markets feeds return Polymarket data, which is on Polygon, and take no chain parameter. Blocks and Chain head support 21 chains, named by a slug in the path, such as /blocks/matic. See Blocks supported chains.
Shared parameters
The wallet endpoints, Balances and Transfers, accept these query parameters. Each endpoint page lists its own additional parameters. Tokens doesn’t take them. It takes onlytokens. The Prediction markets and Chain datasets feeds have their own parameters, listed on each endpoint page.
string
required
The wallet to look up: an EVM address (
0x followed by 40 hex characters, in any case) or a Solana address (base58). Each request takes one address, so send one request per wallet.string
Comma-separated chain values, such as
ethereum,base. Defaults to every supported chain.string
Comma-separated token contract addresses, up to 100. Use the zero address,
0x0000000000000000000000000000000000000000, for each chain’s native token. For a Solana wallet, pass token mints (base58). Native SOL is So11111111111111111111111111111111111111111, and wrapped SOL (So11111111111111111111111111111111111111112) is a separate token.string
Comma-separated token symbols, such as
USDC,WETH. Up to 100 symbols of at most 32 characters each. Case-insensitive. Can’t be combined with include_token_metadata=false.boolean
default:"false"
By default, both wallet feeds leave out tokens Goldsky has no price source for. Set to
true to include them. They can come back without a price or USD value.boolean
default:"true"
Set to
false to skip the token metadata lookup, for example when you enrich tokens yourself. token_symbol, token_name, token_decimals, and token_logo_url come back null on every row. A USD value needs the token’s decimals, so amount_usd, value_usd, and total_value_usd are null too. Can’t be combined with token_symbol, or on Balances with min_value_usd: the request returns 422 CONFLICTING_FILTERS.boolean
default:"true"
Set to
false to skip the USD price lookup. price_usd, and on Balances last_priced_at, come back null on every row, and so do amount_usd, value_usd, and total_value_usd. It doesn’t change which tokens include_unknown_price leaves out. On Balances, it can’t be combined with min_value_usd: the request returns 422 CONFLICTING_FILTERS.boolean
default:"false"
integer
default:"100"
Results per page, up to
1000.string
The
next_page_token or prev_page_token from a previous response.Pagination
The wallet feeds and the other groups page differently.Wallet feeds
Balances and Transfers takepage_size and page_token, and their responses have a pagination object:
next_page_token as page_token to get the next page, and keep going until next_page_token is null. prev_page_token takes you back one page and is null on the first page.
A page token only works with the filters it was issued for. If you change a filter, start again from the first page, or the request returns 400 INVALID_CURSOR. You can change page_size between pages.
Tokens returns every token you ask for in one response, so it has no pagination.
Prediction markets and Chain datasets
Activity, Positions, Prediction markets Balances, and Blocks takelimit and cursor, and their responses have next_cursor and limit at the top level, beside data:
next_cursor as cursor to get the next page, and keep going until next_cursor is null. There’s no way back to a previous page.
limitdefaults to100. Each endpoint has its own maximum, listed on its page. A larger value is lowered to the maximum rather than rejected, so readlimitin the response to see the page size you got.- These feeds don’t read
page_sizeorpage_token. A request withpage_size=2gets the default 100 rows, and with an API key each row is billed. - A cursor only works with the
sortit was issued for. Keep the samesortand filters while you page.
Errors
API errors have a JSON body with a stablecode to branch on and a message that explains what went wrong:
A request over your rate limit gets
429 Too Many Requests with an empty body and a Retry-After header, in seconds.
The 422 QUERY_TOO_BROAD, 503 QUERY_TIMEOUT, and 503 UPSTREAM_BUSY errors also carry error.retryable, which says whether the same request can succeed later, so your code can act on fields instead of the message.
On the Prediction markets and Chain datasets feeds, a query string that can’t be parsed, such as limit=abc, returns 400 with a plain-text body instead of the JSON error object. Branch on the status code, not on the body.
Data types
amount_rawandbalance_raware integers in the token’s smallest unit, sent as strings so no precision is lost. Divide by10^token_decimalsfor the token amount.- Timestamps are RFC 3339 in UTC with milliseconds, such as
2026-09-30T06:47:23.000Z. - Addresses come back in lowercase. Solana addresses, mints, and transaction signatures are base58, where case matters, and come back as they are.
- A chain’s native token, such as ETH or BNB, has the zero address as its
token_address. Native SOL hasSo11111111111111111111111111111111111111111. - Token metadata (
token_symbol,token_name,token_decimals,token_logo_url) and prices can benull, and can fill in on a later request. They’re alwaysnullwhen you turn them off withinclude_token_metadata=falseorinclude_prices=false. - On Solana, only SOL, wrapped SOL, USDC, and USDT have a
token_symbol,token_name,token_decimals, and a price. No Solana token has atoken_logo_urlyet. Other mints come back only withinclude_unknown_price=true, and withtoken_symbol,token_name,token_logo_url, and the USD fieldsnull.
- Timestamps, such as
block_timestampandtimestamp, are integers in Unix seconds. - Polymarket Positions and Balances return amounts as strings in raw units of 10^6. Activity returns plain JSON numbers already in shares and USDC.