Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Discover Polymarket markets, place single immediate market orders, run v3 filled-data backtests, and plan/start live Nautilus deployments through Superior Trade's managed cloud.
.claude/skills/superior-trade-polymarket/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 146% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 520% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 276% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 161% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 226% | 0% |
Trade prediction markets on Polymarket through Superior Trade. Discover markets, place single immediate market orders, write NautilusTrader strategies, backtest against historical trade data, and deploy live — all through one API.
Base URL: https://api.superior.trade/v3. If the environment configures a different base URL, use that instead. Auth: Prefer x-api-key: <api_key> for Superior Trade product API keys. Browser/session callers may use Authorization: Bearer <token>. Docs: GET /v3/docs (interactive reference), GET /v3/openapi.json (OpenAPI spec)
Load these on demand — each is the full detail behind a summary below.
| Read | When | | --- | --- | | references/api.md | You need the exact request/response shape for any endpoint: account, portfolio funding, positions and orders, market search, backtest, deployment. | | references/strategy-authoring.md | You are writing NautilusTrader strategy code — structure, order submission, dollars-to-shares conversion, multi-instrument setups, available data. | | references/example-strategies.md | You want a worked starting point: carry/yield harvesting, momentum/news fade, or spread capture. | | references/strategies.md | You are choosing an archetype for the user's thesis and need the fit/anti-fit table. | | references/troubleshooting.md | A strategy source, backtest, or deployment is failing, or a deployment trades zero times. |
Environment-specific facts that defy reasonable assumptions. Read these before acting.
POST /v3/account/onboard. It is not part of the current main API. Bootstrap with POST /v3/account/{address}/polymarket instead./v3/portfolio/polymarket/deposit. Never give the user a raw address to send to.TradeTick data, not a full order book. They cannot model queue position or liquidity, so a strategy that depends on resting-order fills will look better in backtest than it trades. Say this when presenting results.POST /v3/markets/search; if the user pastes a Polymarket event URL, pass the whole URL as the query so child markets expand.shares = dollars / price (see references/strategy-authoring.md).wallet_address. Never send key material to POST /v3/deployment/{id}/credentials.This skill uses the same Superior Trade API key as every other venue — there is no separate prediction-market key:
x-api-key: $SUPERIOR_TRADE_API_KEYIf SUPERIOR_TRADE_API_KEY is not set, ask the user to provide or configure their Superior Trade API key through their normal credential flow. Do not call POST /v3/account/onboard; that path is not part of the current main API.
Trading-account wallets are managed through /v3/account. Polymarket readiness and balances are checked through /v3/account/{address}/status/polymarket. Deposits are not "send-to-address instructions"; the v3 API wraps Polygon USDC/USDC.e from an owned Superior wallet into Polymarket pUSD through /v3/portfolio/polymarket/deposit.
Before live trading:
/v3/account.POST /v3/account/{address}/polymarket.GET /v3/account/{address}/status/polymarket; it reports onboarding, approvals, credentials, and balances.POST /v3/portfolio/polymarket/deposit.POST /v3/deployment/{id}/credentials using only the owned wallet_address.The v3 credentials endpoint accepts wallet-address metadata only:
json{ "wallet_address": "0x1234567890123456789012345678901234567890" }
It rejects private_key and rejects wallet addresses outside the authenticated account list.
Current account/funding endpoints:
GET /v3/accountPOST /v3/accountPATCH /v3/account/{address}POST /v3/account/{address}/polymarketGET /v3/account/{address}/status/polymarketPOST /v3/portfolio/polymarket/depositPOST /v3/portfolio/polymarket/exitPOST /v3/authorize-and-send/polymarketUse POST /v3/authorize-and-send/polymarket when the user asks to place one immediate Polymarket bet/order. This is a fast path for a whitelisted placeMarketOrder action, not a strategy deployment. Do not create a deployment plan or run a backtest for a one-off order unless the user asks for a strategy or bot.
Required sequence:
SUPERIOR_TRADE_API_KEY.GET /v3/account.action.from only to a wallet_address returned in items[]. Never trust or invent an arbitrary from address; if the user supplied one, verify it appears in the account list before using it.GET /v3/account/{address}/status/polymarket for that wallet. If onboarding, approvals, credentials, or available pUSD balance are not ready for the requested order, stop and report the blocker.POST /v3/authorize-and-send/polymarket and report the real API result. Never fabricate fills, order IDs, balances, or status.Supported action:
json{ "action": { "type": "placeMarketOrder", "from": "0x1234567890123456789012345678901234567890", "tokenID": "1234567890", "side": "BUY", "amount": "10", "price": 0.55, "orderType": "FOK" } }
Fast confirmation format:
Order Summary:
• Venue: Polymarket
• Wallet address: [wallet_address from GET /v3/account] — readiness: [ready/blockers from status endpoint]
• Token ID: [tokenID]
• Side: [BUY/SELL]
• Amount: [amount] pUSD
• Limit price: [price]
• Order type: [orderType]
This will submit one REAL Polymarket market order immediately. Proceed? (yes/no)Current Polymarket state checks:
GET https://data-api.polymarket.com/positions — public current positions by wallet addressGET https://clob.polymarket.com/data/orders — authenticated open orders through Polymarket CLOB credentials/clientGET https://clob.polymarket.com/data/order/{orderId} — authenticated single-order lookupGET https://clob.polymarket.com/data/trades — authenticated fills/trade historyDo not advertise old/stale paths: /v3/account/onboard, /v3/account/wallets, /v3/account/deposit/polymarket, /v3/account/withdraw/polymarket, or /v3/deployment/{id}/exit.
This skill requires exactly one credential: a Superior Trade API key. The only secret the agent uses is SUPERIOR_TRADE_API_KEY.
Security rules (non-negotiable):
| Can do | Cannot do | | ------------------------------------------------------------------------------------ | ------------------------------------ | | List/create/rename trading accounts | Access other users' data | | Bootstrap Polymarket setup, check readiness, and deposit Polygon USDC/USDC.e to pUSD | Export, accept, or view private keys | | Search markets and run filled-data backtests | Withdraw to an external address | | Read current Polymarket positions and open orders | Guess holdings from deployment state | | Plan deployments, store wallet-address credential metadata, start/stop/delete v3 runs | Invent balances or trade results | | Close all Polymarket positions/orders with /v3/portfolio/polymarket/exit after confirmation | Transfer or bridge arbitrary funds |
volume_24h and liquidity.end_date. Never deploy a strategy on a market that resolves before the strategy has time to work.Before any live deployment start, the agent MUST present this summary and wait for an explicit affirmative response:
Deployment Summary:
• Deployment: [deployment_id]
• Venue: Polymarket
• Market(s): [market question(s)]
• Wallet address: [0x...] — readiness: [ready/blockers from status endpoint]
• Trade size/risk settings: [from deployment.config]
• Backtest reviewed: [backtest_id / result summary]
⚠️ This will trade with REAL funds. Proceed? (yes/no)Do NOT start a live deployment without an explicit affirmative response.
If the same task fails 3+ times (e.g. strategy source/config keeps failing, backtest keeps erroring), stop and:
1. Confirm auth → Use existing `SUPERIOR_TRADE_API_KEY`
2. Account setup → GET/POST /v3/account, then POST /v3/account/{address}/polymarket
3. Check readiness → GET /v3/account/{address}/status/polymarket; deposit if needed
4. Read live state → For holdings/order questions, fetch positions and open orders for the owned wallet
5. Deposit if needed → POST /v3/portfolio/polymarket/deposit using Polygon USDC/USDC.e
6. Discover markets → POST /v3/markets/search — find candidate market slugs matching the user's interest; pass exact Polymarket event URLs directly when the user provides one
7. Write strategy → Author NautilusTrader Python strategy code from the closest archetype
8. Backtest → POST /v3/backtest with `strategyId`, `strategySource`, and `strategyConfig`
9. Review results → Poll/read backtest status/result/logs; analyze performance; iterate or proceed
10. Plan deployment → POST /v3/deployment with `{ deployment: { code, config } }`
11. Store credentials → POST /v3/deployment/{id}/credentials with an owned `wallet_address`
12. Start → Confirm with user → PATCH /v3/deployment/{id}/status `{ "action": "start" }`
13. Monitor/stop → Status/logs plus live positions/orders; stop with PATCH `/v3/deployment/{id}/status` `{ "action": "stop" }`Deployment start requires both credential metadata and explicit user confirmation.
When a user asks for a Polymarket strategy, pick an archetype first and then generate strategy code from it. This keeps backtest assumptions explicit and reduces silent drift.
probability-momentum skill) — momentum, breakout, fast reaction in active marketsprobability-mean-reversion skill) — overreaction fade and range-like behaviordeadline-drift skill) — time-to-resolution behavior, especially before-date marketsrelated-market-spread skill) — relative-value checks across linked marketslarge-fill-pressure skill) — repeated oversized fills with directional follow-throughcatalyst-confirmation skill) — event thesis with market confirmation firstOperational rules:
POST /v3/backtest via strategySource with matching strategyConfig.TradeTick) in backtests; do not promise queue/maker behavior without matching evidence.Filled-data rule: Polymarket strategy logic should be driven by historical TradeTick replay in backtesting. If logic is quote-only, flag it as likely non-tradable in current backtest mode.
Before PATCH /v3/deployment/{id}/status → {"action":"start"}:
GET /v3/account/{address}/status/polymarket returns onboarding.ready: true. If not ready, resolve the blockers first; common blockers are no wallet, not onboarded, approvals missing, or balance below 5 USDC.POST /v3/deployment/{id}/credentials with an owned wallet_address; do not send private keys.POST /v3/markets/search → confirm the exact slug to use. If the user gives a Polymarket event URL, pass that URL as the search query so child markets can be expanded. If search returns multiple plausible candidates, show the candidate questions/slugs and ask the user to choose. For backtests, require backtestSupported: true, coverageStatus: "available", and a requested timerange inside the candidate coverage.instrument_id formatted as <clobTokenId>.POLYMARKET.Do NOT skip any step or assume it passed without the API call.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,995 | 8,126 | +2% | 1 | 1 | 0% | 1,419 | 4,609 | +225% | 0 | 0 | — |
case-02 | fail→fail | 27,851 | 12,313 | -56% | 1 | 1 | 0% | 5,791 | 4,481 | -23% | 0 | 0 | — |
case-03 | fail→fail | 21,400 | 9,238 | -57% | 1 | 1 | 0% | 2,346 | 4,530 | +93% | 0 | 0 | — |
case-04 | pass→pass | 19,079 | 16,312 | -15% | 1 | 1 | 0% | 4,265 | 7,485 | +75% | 0 | 0 | — |
case-05 | pass→pass | 20,825 | 17,859 | -14% | 1 | 1 | 0% | 3,907 | 7,502 | +92% | 0 | 0 | — |
case-06 | pass→pass | 13,429 | 8,732 | -35% | 1 | 1 | 0% | 1,927 | 5,673 | +194% | 0 | 0 | — |
case-07 | fail→pass | 12,792 | 7,605 | -41% | 1 | 1 | 0% | 2,345 | 5,769 | +146% | 0 | 0 | — |
case-08 | fail→pass | 5,542 | 7,105 | +28% | 1 | 1 | 0% | 877 | 5,440 | +520% | 0 | 0 | — |
case-09 | fail→pass | 9,910 | 7,373 | -26% | 1 | 1 | 0% | 1,409 | 5,296 | +276% | 0 | 0 | — |
case-10 | pass→pass | 6,398 | 5,670 | -11% | 1 | 1 | 0% | 1,183 | 5,097 | +331% | 0 | 0 | — |
case-11 | fail→pass | 10,802 | 2,772 | -74% | 1 | 1 | 0% | 1,739 | 4,545 | +161% | 0 | 0 | — |
case-12 | fail→pass | 11,008 | 9,574 | -13% | 1 | 1 | 0% | 1,814 | 5,909 | +226% | 0 | 0 | — |
case-13 | fail→pass | 13,813 | 6,720 | -51% | 1 | 1 | 0% | 2,289 | 5,408 | +136% | 0 | 0 | — |
case-14 | fail→pass | 9,273 | 8,738 | -6% | 1 | 1 | 0% | 1,695 | 5,567 | +228% | 0 | 0 | — |
case-15 | fail→pass | 16,183 | 10,667 | -34% | 1 | 1 | 0% | 2,382 | 5,781 | +143% | 0 | 0 | — |
case-16 | fail→pass | 3,591 | 8,222 | +129% | 1 | 1 | 0% | 560 | 5,551 | +891% | 0 | 0 | — |
case-17 | fail→pass | 11,998 | 8,843 | -26% | 1 | 1 | 0% | 1,829 | 5,654 | +209% | 0 | 0 | — |
case-18 | pass→pass | 14,311 | 5,778 | -60% | 1 | 1 | 0% | 2,453 | 5,018 | +105% | 0 | 0 | — |
case-19 | fail→pass | 16,241 | 10,197 | -37% | 1 | 1 | 0% | 2,889 | 5,827 | +102% | 0 | 0 | — |
case-20 | fail→fail | 9,519 | 4,999 | -47% | 1 | 1 | 0% | 1,492 | 4,915 | +229% | 0 | 0 | — |
case-21 | pass→pass | 10,917 | 7,188 | -34% | 1 | 1 | 0% | 1,948 | 5,342 | +174% | 0 | 0 | — |
case-22 | fail→pass | 6,348 | 4,530 | -29% | 1 | 1 | 0% | 992 | 4,942 | +398% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.