CLOB Read (Public)
Get Tick Size Query
PM-compat query-string alias for GET /v1/tick-size/{token_id}.
Same response shape, same resolution chain, same error envelopes as the path form. Added to satisfy py-clob-client’s hardcoded query URL pattern (audit AF-5).
GET
Get Tick Size Query
Query Parameters
PM-compat round 2 (audit 2026-05-19 AF-5): py-clob-client builds the tick-size URL as {host}/tick-size?token_id=X (hardcoded query form). Polysim historically exposed only the path form /v1/tick-size/{token_id}, which 404'd. This route delegates to the same resolver.
Response
Successful Response
Previous
Get Tick SizePolymarket-compat ``GET /tick-size/{token_id}``.
Resolution order (freshest source wins):
1. **CLOB WS overlay** (PM-MCP P1-2): if a recent
``tick_size_change`` event has been observed for this token,
emit the post-change value. PM shrinks the tick from 0.01 →
0.001 when a book moves past 0.96 or below 0.04 (and grows
back when the book pulls away). The two directions have
asymmetric correctness consequences (Copilot review on
PR #1121):
- **Grow (0.001 → 0.01)**: previously-valid 0.001-step
quotes are no longer multiples of the new tick. PM rejects
with ``INVALID_ORDER_MIN_TICK_SIZE``. This is the case
where missing the change silently breaks the bot.
- **Shrink (0.01 → 0.001)**: 0.01-step quotes are still
valid multiples of 0.001, so orders aren't rejected — but
the bot is leaving precision on the table and quoting
less competitively than the rest of the book. SDK
porters reading PM docs expect tick refresh in both
directions.
2. **``markets.minimum_tick_size`` column** (populated by the
Gamma sync from ``orderPriceMinTickSize``).
3. **404 ``TOKEN_NOT_FOUND``** when the token doesn't resolve to
any market. Audit 2026-05-15 P0-E (PR #1239): pre-fix this
returned 200 with the default 0.01 fallback — a real-money
risk for py-clob-client porters who quote on the wrong tick.
On transient upstream failure (DB/Redis unavailable) the handler
returns ``503`` with ``Retry-After: 2``, NOT a silent default tick.
**Value consistency (P1-11, 2026-06-09):** the tick VALUE is resolved
through :func:`resolve_canonical_tick`, the single source shared with
``GET /book`` and order validation, so all three surfaces agree. This
handler resolves NETWORK-FREE (``allow_live_book=False``): overlay → DB
column → default, with NO per-read ``GET /book`` fetch — that fetch
would add up to ~8 s latency and contend for the shared CLOB
semaphore. ``/book`` reads keep seeding the overlay so this surface
stays fresh without paying the fetch on every read. This handler keeps
the **JSON-number** wire shape (``minimum_tick_size: 0.01``) — PM emits
``/tick-size`` as a number, distinct from ``/book``'s string
``tick_size``; we change the value source, not the type. The
token-existence (404) and upstream-failure (503) envelopes below are
unchanged.
Next
Get Tick Size Query