# Scanna Event Catalog Search

> Scanna Event Catalog Search is a paid API for AI agents from api.scanna.xyz, paid per call via x402, $0.010014/call, status unknown (last checked 2026-09-15).

Searches and pages through a cross-venue prediction market event catalog with free-text title search, venue and status filters, and limit/offset pagination

## Facts

- Endpoint: GET https://api.scanna.xyz/catalog/events
- Price: $0.010014/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/scanna-event-catalog-search-8bd6d1bc
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_GeazRX6eYDEKP7aD35HRN

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-event-catalog-search-8bd6d1bc
```

Example prompt: Search the Scanna event catalog for active events about the US election on Polymarket, and show me the first 20 results.

## When to prefer this

Use this endpoint when you need to discover or search prediction market events across venues (Polymarket, Kalshi, etc.) by keyword, filter by venue or lifecycle status, and page through results. Prefer this over market-level endpoints when you want event-level metadata and want to search by title text. It is the right choice for event discovery workflows, catalog browsing, or building lists of matching events before diving into market detail.

## Known failure modes

- 400 BAD_VENUE: the venue parameter value is not recognized — check supported venue names
- Empty result (200, total=0): no events match the query/filter combination — not an error but still billed
- Total capped at 10000: if total equals 10000, actual count may be higher; cannot determine exact total beyond cap
- Stale data: updated_at reflects request time, not data freshness — catalog may be hours old
- Trigram index fallback: if index is absent or invalid, search uses bounded ILIKE which may be slower or less precise

## How this service works

Cross-venue event catalog with free-text search (q), venue and status filters, and limit/offset paging pushed into SQL. Search uses a trigram index on title; if that index is absent or INVALID it falls back to a bounded ILIKE, so search stays bounded either way. total is CAPPED for display: 10000 means at least 10000, not exactly. Unknown venue is 400 BAD_VENUE. No match returns total 0 and an empty, billable 200.

## Output

Returns a paginated list of cross-venue prediction market events, each with title, slug, venue, status, market count, mutually_exclusive flag, sub_title, URL, and a stable public UUID. Also returns total (capped at 10000 for display), limit, offset, and the request timestamp as updated_at. If no events match, returns total 0 and an empty events array (still a billable 200). Invalid venue returns 400 BAD_VENUE.

## 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": {
      "q": {
       "type": "string",
       "description": "Free-text search over the event title"
      },
      "limit": {
       "type": "integer",
       "default": 50,
       "maximum": 200,
       "minimum": 1
      },
      "venue": {
       "type": "string",
       "description": "Single venue. Unknown venue is 400 BAD_VENUE."
      },
      "offset": {
       "type": "integer",
       "default": 0,
       "maximum": 10000,
       "minimum": 0
      },
      "status": {
       "type": "string",
       "default": "active",
       "description": "Lifecycle status. Defaults to active."
      }
     },
     "additionalProperties": false
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "events",
      "limit",
      "offset",
      "total",
      "updated_at"
     ],
     "properties": {
      "limit": {
       "type": "integer"
      },
      "total": {
       "type": "integer",
       "description": "CAPPED for display. A value at the cap means 'at least', not 'exactly'."
      },
      "events": {
       "type": "array",
       "items": {
        "type": "object",
        "required": [
         "category",
         "id",
         "market_count",
         "mutually_exclusive",
         "slug",
         "status",
         "sub_title",
         "title",
         "url",
         "venue",
         "venue_event_id"
        ],
        "properties": {
         "title": {
          "type": "string"
         },
         "venue": {
          "type": "string"
         },
         "status": {
          "type": "string"
         },
         "public_id": {
          "type": "string",
          "description": "Stable public UUID — internal ids are never exposed"
         },
         "market_count": {
          "type": "integer"
         }
        }
       }
      },
      "offset": {
       "type": "integer"
      },
    
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/scanna-event-catalog-search-8bd6d1bc/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)
