Skip to main content
Glama

Bitquery: Crypto & Blockchain Data

Polymarket Market Info

polymarket_market_info
Read-only

Full detail for ONE OR MANY Polymarket prediction markets BY ID — the batch resolver that hands you the OUTCOME ASSET IDS every outcome-level tool needs, plus the oracle, the collateral token, the created/resolved lifecycle with their transaction hashes, the resolution source, the image and the market's written resolution rules. Pass a "|"-separated LIST of ids to resolve a whole batch in ONE call instead of calling once per market, or a group_id to get every market of one event. It also resolves an OUTCOME ASSET ID back to the market that issued it — the way back when an outcome asset id is the only identifier a record left you with. NOT a way to find a market from its wording → run polymarket_find_markets first. NOT current prices or implied probability → use polymarket_market_odds. NOT the fills of a market → use polymarket_market_trades.

Polymarket on Polygon, history from September 2025 onward, down to the second.

FIVE ways in, every one of them optional and every one of them accepting a "|"-separated batch: question_id (the direct lookup — by far the fastest, use it whenever you have it), condition_id, group_id (every market of one event), market_id and outcome_asset_id. question_id / condition_id / group_id are 0x-hex and case-insensitive, so an upper-case or checksummed id works and the "0x" prefix is optional; market_id is the short numeric id; outcome_asset_id is a long DECIMAL number, never hex. Setting more than one key ANDs them — question_id + group_id keeps only those of your ids that belong to that event. Ids that match nothing are simply absent from the result, with no error, so a batch never fails as a whole. Passing NO key returns nothing.

RECOVERING A MARKET FROM AN OUTCOME ASSET ID: many trade records carry an outcome asset id but no market id at all, and this tool is the only way back from one to the other. Pass the ids you are stuck with — batched, not one call each — and read Matched_Outcomes, which names the outcome each of them is.

EXPECT FEWER ROWS THAN IDS, for two ordinary reasons, neither of them an error or a bad id: a sizeable minority of outcome asset ids have no market record at all and return nothing (do not read "no market" as "wrong id"), and two ids belonging to the SAME market — the two sides of a binary market, say — collapse into that market's single row, with both listed in its Matched_Outcomes. The same holds for the other keys: any id that matches nothing is simply absent.

condition_id, group_id, market_id and outcome_asset_id have to be searched for and take a couple of seconds regardless of how many you pass, so batch them rather than calling once per id — and prefer question_id, which answers almost instantly.

Returns one row PER MARKET, newest-created first: Question_Id, Condition_Id, Title, Status, Created_Time / Created_Tx / Created_Onchain, Resolved_Time / Resolved_Tx / Resolved_Outcome (the winning outcome) / Resolved_Outcome_Asset_Id / Resolution_Attempts_Failed, Outcomes (one entry per outcome with its label, asset_id and index), Matched_Outcomes (filled only when you passed outcome_asset_id: the requested outcome(s) this market holds, each with its label and its index, so an asset id maps to a name and a position without a second call), Oracle, Outcome_Token_Contract, Registered_Collateral_Token + Registered_Collateral_Symbol + Registered_Collateral_Decimals (the collateral declared by the market registration), Marketplace, Protocol, Market_Id, Group_Id + Group_Title, Resolution_Source, Image, and Rules — the full written criteria the market resolves on, which is usually the real answer to "how does this market settle?".

Notes: a market counts as resolved only once a resolution transaction has actually SUCCEEDED on-chain: attempts that failed are excluded from Status, Resolved_Time, Resolved_Tx and Resolved_Outcome, so a market whose every attempt failed correctly still reads "open" rather than settled. Resolution_Attempts_Failed reports how many failed attempts that market accumulated — it is 0 for almost every market, and a large number means a settlement that was contested or repeatedly retried before it went through. The registered collateral can differ from the token the market's orders actually settle in (for example USDC in registration versus pUSD in trading), so it is named Registered_Collateral_* here and in polymarket_market_odds, while the traded token is Trade_Collateral_* in polymarket_market_odds and polymarket_top_markets; all USD amounts use the trade record's own decimals. Compare token addresses, not symbols: different contracts can share the symbol USDC. Created_Onchain = 0 means the registration itself is not in the recorded history, so Created_Time is the market's own creation timestamp capped at its first recorded event. A small share of markets carry no outcome asset ids at all — those come back with empty asset_id values and cannot be queried at outcome level. Every row carries that market's full rules text, so a large batch is a large answer — ask only for the markets you need. If you pass more ids than limit, or query an event with more markets than limit, the extra markets are dropped silently (newest kept) — raise limit to match.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "polymarket_market_info"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNoMax markets to return (newest-created first). Raise it when you pass more ids than this, or when an event holds more markets than this — extras are dropped silently. At most 10000.
formatNoShape of the returned data. "rows" (the default) returns one item per row. "columnar" returns a single item, {"columns":[...],"rows":[[value,...],...]}, naming the columns once and listing each row's values in that order; it is more compact for large results and carries the same values.rows
group_idNoGroup (event) id(s), 0x-hex (case-insensitive; the 0x prefix is optional), as returned by polymarket_find_markets and by this tool — returns EVERY market of that event, which can be well over a hundred, so raise `limit` to match. Several groups may be passed separated by "|". Each id must be 64 hex characters; a malformed id rejects the call. Empty = do not filter by group.
market_idNoMarket id(s) — the short numeric Market_Id returned by polymarket_find_markets and by this tool. Several may be passed separated by "|". Digits only; anything else rejects the call. Empty = do not filter by market id.
question_idNoMarket question id(s), 0x-hex (case-insensitive; the 0x prefix is optional) — as returned by polymarket_find_markets. Several ids may be passed separated by "|" (batch lookup, one row per market). The preferred, fastest key. Each id must be 64 hex characters; a malformed id rejects the call. Empty = do not filter by question id.
condition_idNoCondition id(s) of the market, 0x-hex (case-insensitive; the 0x prefix is optional), as returned by polymarket_find_markets. Several may be passed separated by "|". Slower than question_id — use it only when you do not have the question id. Each id must be 64 hex characters; a malformed id rejects the call. Empty = do not filter by condition id.
outcome_asset_idNoOutcome asset id(s) — the long DECIMAL number identifying one outcome token (NOT hex, no "0x" prefix), as returned in Outcomes[].asset_id by this tool and carried by trade and settlement records. Returns the market(s) those outcomes belong to and fills Matched_Outcomes with the label and index of each. Several may be passed separated by "|" (one pass for the whole batch). Each id must be a plain decimal number of at most 78 digits; anything else rejects the call. Empty = do not filter by outcome asset id.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / format
      Added value: +{
      +  "default": "rows",
      +  "description": "Shape of the returned data. \"rows\" (the default) returns one item per row. \"columnar\" returns a single item, {\"columns\":[...],\"rows\":[[value,...],...]}, naming the columns once and listing each row's values in that order; it is more compact for large results and carries the same values.",
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-safety, but the description adds real behavioral context: multi-key AND semantics, unmatched ids silently absent rather than erroring, FEWER rows than ids for two named reasons, per-key latency differences, limit truncation dropping oldest silently, and resolution counted only on a succeeded on-chain tx. This is precisely the kind of behavior an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and sectioned well (routing exclusions, five keys, recovery recipe, return shape, notes), but it is very long and repetitive — the 'ids that match nothing are simply absent' rule is stated three times and the row-field enumeration runs for over a dozen lines. Every section is on topic, yet trimming would improve it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates fully: it names the returned columns, explains Matched_Outcomes, Registered_Collateral_* vs Trade_Collateral_*, Created_Onchain=0, empty asset_ids, and row ordering. Nothing needed to call or interpret a call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents batching, hex/decimal formats and case-insensitivity for every key — baseline 3 applies. The description adds some value on top (question_id is 'by far the fastest', no key returns nothing, keys AND together, limit interplay), but most of its parameter prose restates what the schema descriptions already say.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and scope ('Full detail for ONE OR MANY Polymarket prediction markets BY ID'), and immediately distinguishes itself from polymarket_find_markets, polymarket_market_odds and polymarket_market_trades by name. An agent can route to it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('NOT a way to find a market from its wording → run polymarket_find_markets first', 'NOT current prices → polymarket_market_odds', 'NOT fills → polymarket_market_trades'), plus positive guidance on batching, preferring question_id, and recovering a market from an outcome_asset_id. Alternatives and exclusions are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.