# Scanna Matched Market Clusters

> Scanna Matched Market Clusters is a paid API for AI agents from api.scanna.xyz, paid per call via x402, $0.010008/call, status unknown (last checked 2026-09-14).

Returns cross-venue matched and LLM-verified market clusters from Scanna's database, grouping equivalent prediction markets across Polymarket, Kalshi, Limitless, and other venues with member markets, outcomes, and optional relationship edges.

## Facts

- Endpoint: GET https://api.scanna.xyz/matched-market-clusters
- Price: $0.010008/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/scanna-matched-market-clusters-bf8fa5b7
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_jfapzDJknPi9j2TGqYSXc

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability scanna-matched-market-clusters-bf8fa5b7
```

Example prompt: Show me the top 20 cross-venue matched market clusters on Kalshi with at least 0.8 confidence, including related markets — I want to see which questions are live on multiple platforms simultaneously.

## When to prefer this

Use this endpoint when you need to find equivalent prediction markets across multiple venues (Polymarket, Kalshi, Limitless, etc.) that cover the same underlying event. It is ideal for cross-venue arbitrage detection, market coverage analysis, or building unified views of prediction market activity. Prefer this over single-venue market feeds when cross-platform market matching with LLM verification and confidence scoring is required. Use the anchor_market_id parameter to pivot from a known market to its cross-venue equivalents.

## Known failure modes

- 400 error if limit/offset is out of range or a non-digit value is passed for numeric parameters
- 400 error if an invalid venue enum value is provided
- Empty page (0 clusters) returned as a billable 200 when no clusters match filters or coverage is incomplete due to paused adjudication
- Incomplete coverage: new matches may not be promoted if adjudication is paused — freshness field signals this state
- min_confidence must be a digit-led decimal; non-digit values return 400

## How this service works

Cross-venue matched market clusters from Postgres: cluster row, member markets with outcomes, optional related/raw edges. LIMIT/OFFSET pushed into SQL (max 100). Served matches are LLM-verified and stay valid, but COVERAGE can be incomplete: adjudication is a separate gated step and while paused no new match is promoted - see `freshness`. An empty page is a billable 200.

## Output

A paginated JSON response containing an array of cluster objects, each with a cluster_id, canonical_title, category, LLM-verified confidence score, 24-hour volume, updated_at timestamp, verified flag, relations array, and a members array of constituent markets with their outcomes. Also returns total count (capped at 10000), limit, offset, updated_at, and a freshness object indicating adjudication status. Optionally includes related[] and raw_edges[] arrays.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [],
     "properties": {
      "limit": {
       "type": "integer",
       "default": 20,
       "maximum": 100,
       "minimum": 1
      },
      "venue": {
       "enum": [
        "polymarket",
        "kalshi",
        "limitless",
        "polymarket_us",
        "myriad",
        "opinion"
       ],
       "type": "string"
      },
      "offset": {
       "type": "integer",
       "default": 0,
       "maximum": 10000,
       "minimum": 0
      },
      "min_confidence": {
       "type": "number",
       "default": 0.6,
       "maximum": 1,
       "minimum": 0,
       "description": "Digit-led decimal only"
      },
      "include_related": {
       "type": "boolean",
       "default": false,
       "description": "Adds related[]"
      },
      "anchor_market_id": {
       "type": "string",
       "description": "Catalog market UUID"
      },
      "include_raw_edges": {
       "type": "boolean",
       "default": false,
       "description": "Adds raw_edges[]"
      }
     },
     "description": "No clamping: an out-of-range or non-digit value is a 400, never an adjusted 200.",
     "additionalProperties": false
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "clusters",
      "freshness",
      "limit",
      "offset",
      "total",
      "updated_at"
     ],
     "properties": {
      "limit": {
       "type": "integer"
      },
      "total": {
       "type": "integer",
       "description": "Capped at 10000"
      },
      "offset": {
       "type": "integer"
      },
      "clusters": {
       "type": "array",
       "items": {
        "type": "object",
        "required": [
         "cluster_id",
         "canonical_title",
         "category",
         "confidence",
         "volume_24h",
         "updated_at",
         "verified",
         "relations",
         "members"
        ],
        "properties": {
         "me
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/scanna-matched-market-clusters-bf8fa5b7/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.scanna.xyz](https://www.zero.xyz/host/api.scanna.xyz/llms.txt)
