---
title: "Free-text market/event lookup by title, normalized context, or native id (v2)"
method: GET
path: "/v2/search"
tags: ["data"]
---

# Free-text market/event lookup by title, normalized context, or native id (v2)

`GET /v2/search`

Market/event lookup by free text — the MCP find_markets front door (UNIFIED_PLAN §7: "an agent that
can't FIND a market can't use anything else"). Available to every tier — it reads the same uniformly-
delayed catalog REST already serves (§131), never a live/paid-only surface.

Sources from db.search() -- the SAME matched_markets predicate markets() uses (active/review,
complete_coverage, entity_confidence>=0.95), matched case-insensitively against team/league/sport/
market_type/slugs/native ids. Identity-only (no live price join): a lookup tool doesn't need prices,
just enough to hand a market_id to /v2/markets or /v2/pairs/{id} for pricing detail — this keeps the
endpoint fast and avoids duplicating the Centrifugo-history join machinery for a discovery surface.

## Query parameters

- `q` string, required — Free text: title, team, competition, location, asset, or institution
- `category` string, nullable
- `sport` string, nullable
- `status` string, nullable — Comma-separated: open,live,resolving,closed,settled. Default: open,live
- `page` integer
- `page_size` integer

## Headers

- `authorization` string

## Response `200`

Successful Response

- unknown

## Other responses

- `400` — Missing/blank q
- `401` — Missing or invalid API key
- `402` — Subscription inactive
- `422` — Validation Error
- `429` — Rate limit exceeded
- `503` — Auth admission gate full (transient) — retry shortly, see retry_after

---

[API](https://skmtc.net/dino/apis/dino-markets-api.md) · [All operations](https://skmtc.net/dino/apis/dino-markets-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/dino/dino-markets-api/revisions/8cbe8774824f/schema)
