# uselayer

> Python SDK for trading prediction markets with your own venue keys. This release trades Polymarket US in paper mode (real order books, simulated fills; the default), live mode (your own key) and backtest mode. Guardrails check every order; fees match Layer's API to the millionth of a dollar.

Read AGENTS.md (next to this file) before trading. Key facts:

- `Client()` is paper mode. `client.preview(order)` shows the fill, fees and every rule's decision and sends nothing.
- Orders: `client.order(venue="polymarket_us", market=<slug>, side="yes"|"no", price=<0..1>, size=<contracts>)`, then `client.send(order)`; or `client.buy(...)` / `client.sell(...)`.
- Every error is `VenueError(code, message, hint, next, retryable)`. Never resend after `outcome_unknown`; call `client.sync()`.
- The kill switch (`client.kill()`, `python -m uselayer kill`) blocks new orders until a person runs `python -m uselayer resume`.
- Paper and backtest fills are `SimulatedFill` (`simulated=True`); no venue saw them.

## Modules

- uselayer.client: Client, Admin, Preview
- uselayer.orders: Order (schema/order.json)
- uselayer.guardrails: rules, Context, Decision
- uselayer.fill: estimate_fill, calculate_fee, FeeSettings
- uselayer.venue_rules: dated fee schedules, rules_at
- uselayer.calc: profit, size (same answers as Layer's POST /v0/profit and /v0/size)
- uselayer.events: TradePrint, MarketStatus, Resolution (market events); SimulatedFill, SimulatedPosition (simulated results)
- uselayer.trading: Quote, Trade (client.quote / client.trade / client.run)
- uselayer.backtest: save_events, load_books, record_books
