Skill: jambocoder159/polyox-nba (version 0.2.0)

--- name: polyox-nba description: > Query the PolyOx API for NBA data, Polymarket predictions, and AI matchup analysis. The analysis endpoint uses the x402 payment protocol (USDC on Base Sepolia). metadata: author: polyox version: "0.2" --- # PolyOx NBA API Base URL: `https://api-hoobs.polyox.io` All responses are JSON. Paginated endpoints return `{ data, page, pageSize, total }`. --- ## Step 0 — Check your wallet Before calling any paid endpoint you need an EVM wallet with USDC on **Base Sepolia**. **Already have a wallet?** Make sure the `EVM_PRIVATE_KEY` environment variable is set and skip to [Quick start](#quick-start). **Don't have a wallet?** Set one up with [Coinbase Agentic Wallet](https://docs.cdp.coinbase.com/agentic-wallet/welcome) — a CLI wallet built for AI agents. No private key management required. ### Set up Coinbase Agentic Wallet Prerequisites: **Node.js 24+** and an email address. ```bash # Install the agentic-wallet skills (one-time) npx skills add coinbase/agentic-wallet-skills ``` #### Authenticate ```bash # 1. Start login — sends a 6-digit code to your email npx awal@latest auth login [REDACTED_SECRET] # 2. Verify with the code you received npx awal@latest auth verify <flowId> <otp> # 3. Confirm authentication npx awal@latest status ``` #### Check address & balance ```bash npx awal@latest address npx awal@latest balance ``` #### Fund your wallet Get testnet USDC from the Base Sepolia faucet, or ask another agent / user to send USDC to your wallet address. > **Full Agentic Wallet docs:** > <https://docs.cdp.coinbase.com/agentic-wallet/quickstart> --- ## Quick start ```bash # Today's games curl "https://api-hoobs.polyox.io/nba/games?date=2026-02-08" # Matchup context (injuries, recent form, Polymarket odds) curl "https://api-hoobs.polyox.io/nba/games/context?date=2026-02-08&home=MIN&away=LAC" # Latest injury report curl "https://api-hoobs.polyox.io/nba/injury-reports/latest" ``` --- ## Free endpoints ### NBA | Method | Path | Description | |--------|------|-------------| | GET | `/nba/teams` | List all teams | | GET | `/nba/teams/{id}` | Get one team | | GET | `/nba/games` | List games (filter: `date`, `from`, `to`, `status`, `season`, `teamId`) | | GET | `/nba/games/{id}` | Get one game | | GET | `/nba/games/{id}/markets` | Polymarket markets for a game | | GET | `/nba/games/context` | Full matchup context — requires `date`, `home`, `away` | | GET | `/nba/players` | List players (filter: `search`, `isActive`, `teamId`) | | GET | `/nba/players/{id}` | Get one player | | GET | `/nba/team-stats` | Team game stats (filter: `gameId`, `teamId`) | | GET | `/nba/player-stats` | Player game stats (filter: `gameId`, `playerId`, `teamId`) | | GET | `/nba/injury-reports` | List injury reports | | GET | `/nba/injury-reports/latest` | Latest entries (filter: `team`, `status`, `date`) | ### Polymarket | Method | Path | Description | |--------|------|-------------| | GET | `/polymarket/events` | List events (filter: `date`, `search`) | | GET | `/polymarket/markets` | List markets (filter: `eventId`, `search`) | | GET | `/polymarket/price` | Live CLOB prices (`tokenId` or `marketIds`) | | GET | `/polymarket/orderbook` | Live CLOB orderbook (`tokenId` or `marketIds`) | All list endpoints support `page` and `pageSize` query params. --- ## Paid endpoint — x402 protocol ### `POST /nba/analysis` AI-powered matchup analysis. Payment via **x402** — the HTTP-native payment standard. - **Network:** Base Sepolia (chain ID `84532`) - **Token:** USDC at [REDACTED_SECRET] - **Protocol docs:** https://docs.x402.org #### Request body ```json { "date": "2026-02-08", "home": "MIN", "away": "LAC" } ``` All three fields required. `date` is `YYYY-MM-DD`, `home`/`away` are team abbreviations. --- ### How x402 works (step by step) #### Step 1 — Send the request Make a normal HTTP request. The server will respond with **HTTP 402**. ```bash curl -s -D - -X POST \ -H "Content-Type: application/json" \ -d '{"date":"2026-02-08","home":"MIN","away":"LAC"}' \ "https://api-hoobs.polyox.io/nba/analysis" ``` #### Step 2 — Parse the 402 response The 402 response includes a `PAYMENT-REQUIRED` header. Decode it from base64 to get the payment requirements: ```bash # Extract and decode the payment requirements PAYMENT_REQUIRED=$(curl -s -D - -X POST \ -H "Content-Type: application/json" \ -d '{"date":"2026-02-08","home":"MIN","away":"LAC"}' \ "https://api-hoobs.polyox.io/nba/analysis" \ | grep -i "payment-required" | cut -d' ' -f2 | tr -d '\r') echo "$PAYMENT_REQUIRED" | base64 -d | jq . ``` The decoded JSON contains: ```json { "maxAmountRequired": "...", "resource": "...", "payTo": "0x...", "asset": [REDACTED_SECRET], "network": "eip155:84532", "expiresAt": "...", "nonce": "...", "paymentId": "...", "accepts": [{ "scheme": "exact", "network": "eip155:84532" }] } ``` #### Step 3 — Sign and construct the payment Using the payment requirements, create an **EIP-712 typed-data signature** that authorises the USDC transfer. This is an off-chain signature — no gas spent. The signature must be sent as a base64-encoded JSON payload in the `PAYMENT-SIGNATURE` header when retrying the request. **Important:** The EIP-712 signing step requires a crypto library. Pure `curl` cannot sign. Use one of the approaches below. #### Step 4 — Retry with payment ```bash curl -X POST \ -H "Content-Type: application/json" \ -H "PAYMENT-SIGNATURE: <base64_encoded_signed_payload>" \ -d '{"date":"2026-02-08","home":"MIN","away":"LAC"}' \ "https://api-hoobs.polyox.io/nba/analysis" ``` The server verifies the signature, settles the payment on-chain, and returns the analysis. A `PAYMENT-RESPONSE` header is included with settlement proof. --- ### Agent integration options Choose the approach that matches your setup: #### Option A — Coinbase Agentic Wallet (recommended) The simplest path. If you set up your wallet via `awal` in Step 0, you can pay for x402 endpoints in a single command — no code, no private key handling. ```bash # Pay and call the analysis endpoint npx awal@latest x402 pay \ "https://api-hoobs.polyox.io/nba/analysis" \ -X POST \ -d '{"date":"2026-02-08","home":"MIN","away":"LAC"}' ``` The `awal x402 pay` command handles the full 402 → sign → retry flow automatically. Options: | Flag | Description | |------|-------------| | `-X, --method <method>` | HTTP method (default: GET) | | `-d, --data <json>` | JSON request body | | `-q, --query <params>` | Query parameters | | `--max-amount <amount>` | Max USDC to spend (in micro-units) | | `--json` | Output raw JSON | > **Agentic Wallet skills reference:** > <https://docs.cdp.coinbase.com/agentic-wallet/skills/overview> #### Option B — Node.js / TypeScript If you already have an EVM private key and prefer programmatic control: ```bash npm install @x402/fetch @x402/core @x402/evm viem ``` ```typescript import { wrapFetchWithPayment } from "@x402/fetch"; import { x402Client } from "@x402/core/client"; import { registerExactEvmScheme } from "@x402/evm/exact/client"; import { privateKeyToAccount } from "viem/accounts"; const signer = privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x${string}`); const client = new x402Client(); registerExactEvmScheme(client, { signer }); const fetchWithPayment = wrapFetchWithPayment(fetch, client); const res = await fetchWithPayment( "https://api-hoobs.polyox.io/nba/analysis", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ date: "2026-02-08", home: "MIN", away: "LAC" }), }, ); console.log(await res.json()); ``` > **Note for AI agents:** Option A is the fastest way to get started — no > private key required. Option B gives full programmatic control if you > already manage your own wallet. --- ## Reference **Team abbreviations:** ATL, BOS, BKN, CHA, CHI, CLE, DAL, DEN, DET, GSW, HOU, IND, LAC, LAL, MEM, MIA, MIL, MIN, NOP, NYK, OKC, ORL, PHI, PHX, POR, SAC, SAS, TOR, UTA, WAS **Date format:** `YYYY-MM-DD` **Pagination:** `page` (1-indexed), `pageSize` (default 50)


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)