{"primer":"BallStreet is a per-league fantasy-football market. Before reasoning about it, note what is NOT true here, because it differs from ordinary markets:\n\n- Trading does not move prices. No order book, no per-trade impact, one posted price for everyone.\n- Speed is not an edge. Buys batch into a fill run and member fill order ROTATES each cycle, so an order placed seconds after news fills alongside one placed hours later. (Hardcore leagues and Day Trading are the exceptions: see below.)\n- There are no limit or conditional orders. Every order is a market order at the posted price.\n- Price responds to actual-versus-PROJECTED points, not raw production. Beating a small projection beats meeting a large one.\n- A price can move on a day the player did not play, when his rest-of-season outlook changes.\n- Shares are finite: league size x 100 per player. When they are held, buying is refused.\n- Players who are IR/OUT/inactive cannot be bought or newly shorted. Players whose game has started cannot be bought or shorted (except in hardcore leagues, which price games live). Selling out is always allowed.\n\nTwo ways to play run on a LIVE market instead, where the market stays open while games are played and every order fills in a 60-second batch a couple of minutes later, at the price then: hardcore leagues (a league setting) and Day Trading (one-day contests over a slate of games, everyone starting with the same cash, best portfolio at the final whistle wins). Their demand is followers-only: a buyer pays a premium for the people who bought before them, and a holder earns from the people who buy after. An API key can read both but cannot trade in either. get_rules with topic \"hardcore\" or \"day-trading\" has their rules.\n\nUse get_rules and get_league_rules for specifics; league settings differ, and demand pricing is off in many leagues.","constants":{"starting_balance":"100,000","shares_per_player":100,"base_price_max":100,"base_price_floor":2,"base_price_n":200,"performance_decay":0.6,"performance_alpha":0.4,"performance_coefficient":0.16,"performance_min":0.2,"performance_bounds":"It never falls below 0.2 and has no ceiling: a player who keeps beating his projection keeps rising.","performance_formula":"sticky","projection_weight":0.16,"projection_ema_alpha":0.5,"projection_min":0.6,"projection_max":1.6,"demand_k":0.04,"demand_max_premium":1.3,"demand_max_premium_pct":30,"short_margin_initial_pct":100,"short_margin_call":"Margin call. If a price rise leaves your cash plus your shorts' profit or loss below 30% of what it would cost to cover them, enough of your shorts are covered automatically, largest first, to bring you back to that level. It happens right after the price move that caused it, at the price a cover would pay, and you get a notification. A player whose game has been played this week is covered last. A price can jump past that level in a single move, so a short can still lose more than the margin it opened with.","draft_rounds":10,"draft_round_cap":"10,000","draft_window_minutes":30,"hardcore_window_seconds":60,"hardcore_fill_delay_seconds":150,"hardcore_demand_max_premium_pct":30,"hardcore_demand_window_days":14,"hardcore_demand_half_life_hours":24,"hardcore_demand_settle_minutes":15},"contest_constants":{"starting_cash":"100,000","min_entrants":2,"max_entrants":50,"price_per_point":"5.00","base_price_floor":"2.00","float_shares_per_entrant":"100","sensitivity_pct":30,"perf_min":"0.20","perf_max":"4.00","demand_max_premium_pct":30,"settle_minutes":15,"window_seconds":60,"fill_delay_seconds":150,"short_margin":"1.00","short_margin_example":"1,000","short_maintenance_pct":30,"backup_pct":100,"outage_minutes":4,"results_buffer_minutes":20},"tabs":[{"id":"leagues","title":"Leagues","intro":"How a BallStreet league works, from the IPO through the final settlement.","sections":[{"id":"overview","title":"Overview","topics":["basics","getting started","goal","portfolio value"],"body":"BallStreet is fantasy football built on stock-market mechanics. Instead of setting a weekly lineup, you build a portfolio of NFL player shares. A player's share price moves on how he performs against his projection, the way a stock reacts to an earnings report.\n\nEvery member starts each league with $100,000 in BallStreet Bucks. There is no real money anywhere in the game. You win by finishing the season with the most valuable portfolio, where\n\n    portfolio value = cash + market value of every holding\n\nLeagues are private and invite-only. Your league is scored independently: prices are per-league, so the same player can be worth different amounts in two different leagues.","blocks":[{"type":"paragraph","text":"BallStreet is fantasy football built on stock-market mechanics. Instead of setting a weekly lineup, you build a portfolio of NFL player shares. A player's share price moves on how he performs against his projection, the way a stock reacts to an earnings report."},{"type":"paragraph","text":"Every member starts each league with $100,000 in BallStreet Bucks. There is no real money anywhere in the game. You win by finishing the season with the most valuable portfolio, where"},{"type":"formula","text":"portfolio value = cash + market value of every holding"},{"type":"paragraph","text":"Leagues are private and invite-only. Your league is scored independently: prices are per-league, so the same player can be worth different amounts in two different leagues."}]},{"id":"pricing","title":"How prices are calculated","topics":["price","pricing","multiplier","formula","why did the price change"],"body":"A player's posted price is his base price multiplied by up to three multipliers:\n\n    price = base price x performance x projection x demand\n\n- Base price never changes during a season. It comes from pre-season consensus rankings.\n- The performance multiplier moves when he plays, on actual points versus projected points.\n- The projection multiplier moves between games, when the outlook for the rest of his season changes.\n- The demand multiplier reflects how much of his float your league owns (in a hardcore league, what members bought ahead of you recently). It is optional and off in many leagues.\n\nTwo things surprise people, and both are deliberate.\n\nFirst, trading does not move prices. There is no order book and no per-trade price impact. Everyone sees and pays the same posted price, and buying a player heavily does not make him cost more for the next buyer. (Hardcore leagues with demand on are the exception, and the rule there is spelled out on the Hardcore mode tab.)\n\nSecond, a price can move on a day your player did not take the field. That is the projection multiplier: if his rest-of-season outlook is cut or raised, his price follows, because a price is what he is worth from here, not what he did last Sunday.","blocks":[{"type":"paragraph","text":"A player's posted price is his base price multiplied by up to three multipliers:"},{"type":"formula","text":"price = base price x performance x projection x demand"},{"type":"bullets","items":["Base price never changes during a season. It comes from pre-season consensus rankings.","The performance multiplier moves when he plays, on actual points versus projected points.","The projection multiplier moves between games, when the outlook for the rest of his season changes.","The demand multiplier reflects how much of his float your league owns (in a hardcore league, what members bought ahead of you recently). It is optional and off in many leagues."]},{"type":"paragraph","text":"Two things surprise people, and both are deliberate."},{"type":"paragraph","text":"First, trading does not move prices. There is no order book and no per-trade price impact. Everyone sees and pays the same posted price, and buying a player heavily does not make him cost more for the next buyer. (Hardcore leagues with demand on are the exception, and the rule there is spelled out on the Hardcore mode tab.)"},{"type":"paragraph","text":"Second, a price can move on a day your player did not take the field. That is the projection multiplier: if his rest-of-season outlook is cut or raised, his price follows, because a price is what he is worth from here, not what he did last Sunday."}]},{"id":"base-price","title":"Base price","topics":["base price","adp","starting price","rankings"],"body":"Base price is set once, before your league's market opens, from consensus expert rankings. The top-ranked player starts near $100 and the curve falls away logarithmically to a $2 floor by about rank 200. Unranked players sit at the floor.\n\nBase price does not move for the rest of the season. Every price change you see is a multiplier moving.\n\nA league that holds its IPO after the season has started prices off the current outlook rather than pre-season rankings, so a player who has taken over a starting job is priced like a starter instead of like the backup he was ranked as in August.","blocks":[{"type":"paragraph","text":"Base price is set once, before your league's market opens, from consensus expert rankings. The top-ranked player starts near $100 and the curve falls away logarithmically to a $2 floor by about rank 200. Unranked players sit at the floor."},{"type":"paragraph","text":"Base price does not move for the rest of the season. Every price change you see is a multiplier moving."},{"type":"paragraph","text":"A league that holds its IPO after the season has started prices off the current outlook rather than pre-season rankings, so a player who has taken over a starting job is priced like a starter instead of like the backup he was ranked as in August."}]},{"id":"performance-multiplier","title":"Performance multiplier","topics":["performance","settlement","actual vs projected","beat projection"],"body":"This is the core of the game. Every player starts at 1.00 and moves only when he plays:\n\n    new = old + old x 0.16 x (actual - projected) / projected\n\nWhat matters is the gap between actual and projected points, not raw production. A backup projected for 4 points who scores 12 moves far more than a star projected for 20 who scores 24. Beating a low number is worth more than meeting a high one, which is why reading a depth chart pays here.\n\nMeeting the projection exactly changes nothing. A bye changes nothing. A missed game changes nothing -- no stats means no signal, in either direction.\n\nThe multiplier is sticky: it persists between weeks and carries strong past performance forward, fading only if the player keeps underperforming. It never falls below 0.2 and has no ceiling: a player who keeps beating his projection keeps rising.","blocks":[{"type":"paragraph","text":"This is the core of the game. Every player starts at 1.00 and moves only when he plays:"},{"type":"formula","text":"new = old + old x 0.16 x (actual - projected) / projected"},{"type":"paragraph","text":"What matters is the gap between actual and projected points, not raw production. A backup projected for 4 points who scores 12 moves far more than a star projected for 20 who scores 24. Beating a low number is worth more than meeting a high one, which is why reading a depth chart pays here."},{"type":"paragraph","text":"Meeting the projection exactly changes nothing. A bye changes nothing. A missed game changes nothing — no stats means no signal, in either direction."},{"type":"paragraph","text":"The multiplier is sticky: it persists between weeks and carries strong past performance forward, fading only if the player keeps underperforming. It never falls below 0.2 and has no ceiling: a player who keeps beating his projection keeps rising."}]},{"id":"projection-multiplier","title":"Projection multiplier","topics":["projection","outlook","price moved without playing","injury news","rest of season","why did my price change"],"body":"Between games, a player's price tracks his rest-of-season projection per remaining game. When his outlook changes -- a starter goes down ahead of him, he is downgraded, his role shrinks -- the price moves with it.\n\nThis is the answer to 'my guy didn't play, why did his price change'. It is also what stops a downgrade from being free money: without it, bad news would lower the bar he has to clear at settlement without lowering what you pay for him, so buying every downgrade would win.\n\nThree properties keep it honest:\n\n- The projection level is smoothed before it prices anything, because raw weekly projections bounce around and a price that chases a bouncing number can be farmed by buying every dip.\n- The response is damped, weight 0.16, and clamped between 0.6 and 1.6. Prices move with the outlook, not one-for-one.\n- It freezes once his game kicks off, so nothing shifts under you mid-game.\n\nA player who is ruled OUT does not move at all. A one-week absence is a missed payment, not a re-rating -- he is coming back, and cratering him would make every injury a predictable round trip for everyone else.","blocks":[{"type":"paragraph","text":"Between games, a player's price tracks his rest-of-season projection per remaining game. When his outlook changes — a starter goes down ahead of him, he is downgraded, his role shrinks — the price moves with it."},{"type":"paragraph","text":"This is the answer to 'my guy didn't play, why did his price change'. It is also what stops a downgrade from being free money: without it, bad news would lower the bar he has to clear at settlement without lowering what you pay for him, so buying every downgrade would win."},{"type":"paragraph","text":"Three properties keep it honest:"},{"type":"bullets","items":["The projection level is smoothed before it prices anything, because raw weekly projections bounce around and a price that chases a bouncing number can be farmed by buying every dip.","The response is damped, weight 0.16, and clamped between 0.6 and 1.6. Prices move with the outlook, not one-for-one.","It freezes once his game kicks off, so nothing shifts under you mid-game."]},{"type":"paragraph","text":"A player who is ruled OUT does not move at all. A one-week absence is a missed payment, not a re-rating — he is coming back, and cratering him would make every injury a predictable round trip for everyone else."}]},{"id":"demand-multiplier","title":"Demand multiplier","topics":["demand","deferred demand","scarcity premium","pricing mode"],"body":"Optional, and set per league. In a demand-enabled league, a player who is widely owned carries a premium of up to 30% on top of his performance and projection multipliers. In a performance-only league this multiplier is absent entirely.\n\nDemand is recalculated once a week at the weekly close, and once per round during the IPO. It never moves on an individual trade. That means buying does not immediately raise the price -- the effect is deferred to the next recalculation, which is why the mode is called deferred demand.\n\nWhen you sell, or when your portfolio is valued, your own shares are excluded from the demand calculation. You are paid what the player is worth to everyone else, not what he is worth partly because you bought him. For a normal position the difference is pennies; it only bites someone trying to corner a player's float to inflate their own holdings.\n\nHardcore leagues use a different demand rule, built for a market that fills orders all day: see the Hardcore mode tab.","blocks":[{"type":"paragraph","text":"Optional, and set per league. In a demand-enabled league, a player who is widely owned carries a premium of up to 30% on top of his performance and projection multipliers. In a performance-only league this multiplier is absent entirely."},{"type":"paragraph","text":"Demand is recalculated once a week at the weekly close, and once per round during the IPO. It never moves on an individual trade. That means buying does not immediately raise the price — the effect is deferred to the next recalculation, which is why the mode is called deferred demand."},{"type":"paragraph","text":"When you sell, or when your portfolio is valued, your own shares are excluded from the demand calculation. You are paid what the player is worth to everyone else, not what he is worth partly because you bought him. For a normal position the difference is pennies; it only bites someone trying to corner a player's float to inflate their own holdings."},{"type":"paragraph","text":"Hardcore leagues use a different demand rule, built for a market that fills orders all day: see the Hardcore mode tab."}]},{"id":"ipo","title":"The IPO (your draft)","topics":["ipo","draft","rounds","bidding","auction"],"body":"Your league's season opens with an IPO instead of a snake draft. It runs 10 rounds by default, each with a spending cap ($10,000 by default) and a time window (30 minutes by default). Commissioners can change all three.\n\nIn each round you submit the players and share counts you want. Everyone's orders for that round fill together when the round closes -- it is not a turn order and there is no advantage to submitting first within a round.\n\nIf more shares are wanted than exist, the float is allocated and some orders fill partially or not at all; the money from an unfilled order rolls into your next round. Demand is recalculated between rounds, so a player everyone piled into gets more expensive in the round that follows.\n\nOne deliberate exception to uniform pricing applies here: on an IPO buy, shares you already hold are excluded from the demand you pay. Otherwise a member accumulating a player across rounds would be bidding against himself and paying a premium he created. It is always a discount, never a surcharge.","blocks":[{"type":"paragraph","text":"Your league's season opens with an IPO instead of a snake draft. It runs 10 rounds by default, each with a spending cap ($10,000 by default) and a time window (30 minutes by default). Commissioners can change all three."},{"type":"paragraph","text":"In each round you submit the players and share counts you want. Everyone's orders for that round fill together when the round closes — it is not a turn order and there is no advantage to submitting first within a round."},{"type":"paragraph","text":"If more shares are wanted than exist, the float is allocated and some orders fill partially or not at all; the money from an unfilled order rolls into your next round. Demand is recalculated between rounds, so a player everyone piled into gets more expensive in the round that follows."},{"type":"paragraph","text":"One deliberate exception to uniform pricing applies here: on an IPO buy, shares you already hold are excluded from the demand you pay. Otherwise a member accumulating a player across rounds would be bidding against himself and paying a premium he created. It is always a discount, never a surcharge."}]},{"id":"autodraft","title":"Autodraft","topics":["autodraft","missed the draft","absent"],"body":"If you cannot attend the IPO, autodraft submits sensible orders for you each round so you are not left holding only cash. It skips players who cannot play. Showing up to the draft lobby turns it off automatically -- the assumption is that if you are present, you want to pick for yourself -- unless you deliberately switched it on.","blocks":[{"type":"paragraph","text":"If you cannot attend the IPO, autodraft submits sensible orders for you each round so you are not left holding only cash. It skips players who cannot play. Showing up to the draft lobby turns it off automatically — the assumption is that if you are present, you want to pick for yourself — unless you deliberately switched it on."}]},{"id":"preseason","title":"Between the IPO and Week 1","topics":["preseason","before week 1","trading early"],"body":"If your league drafts before the season starts, the market stays open the whole way to Week 1 and you can keep trading.\n\nBy default, NFL preseason games do not move the performance multiplier: most people expect prices to wait for real football. Commissioners can opt in to settling preseason games if they want them to count.","blocks":[{"type":"paragraph","text":"If your league drafts before the season starts, the market stays open the whole way to Week 1 and you can keep trading."},{"type":"paragraph","text":"By default, NFL preseason games do not move the performance multiplier: most people expect prices to wait for real football. Commissioners can opt in to settling preseason games if they want them to count."}]},{"id":"trading","title":"Buying and selling","topics":["buy","sell","orders","queue","fill","pending"],"body":"Buy orders are queued, not filled on the spot. They execute together in a fill run after that day's games are final. Sells and covers execute immediately while the market is open.\n\nPlacing a buy earlier in the window gains you nothing. There is no price improvement for being fast, and the queue is not first-come-first-served: the order in which members are filled rotates every cycle, so whoever was last this time is first next time. This is on purpose -- your league should be won by knowing football, not by refreshing the page fastest.\n\nWhat you do control is the order of your own pending orders. Cash is the binding constraint on a fill night, so if you have queued more than you can afford, the ones at the front of your queue are the ones that fill. You can reorder them until the run.\n\nAll orders are market orders at the posted price. There are no limit orders, and there is nothing to bid, because everyone transacts at the same price.\n\nHardcore leagues work differently: every order fills within a few minutes, games or no games. See the Hardcore mode tab.","blocks":[{"type":"paragraph","text":"Buy orders are queued, not filled on the spot. They execute together in a fill run after that day's games are final. Sells and covers execute immediately while the market is open."},{"type":"paragraph","text":"Placing a buy earlier in the window gains you nothing. There is no price improvement for being fast, and the queue is not first-come-first-served: the order in which members are filled rotates every cycle, so whoever was last this time is first next time. This is on purpose — your league should be won by knowing football, not by refreshing the page fastest."},{"type":"paragraph","text":"What you do control is the order of your own pending orders. Cash is the binding constraint on a fill night, so if you have queued more than you can afford, the ones at the front of your queue are the ones that fill. You can reorder them until the run."},{"type":"paragraph","text":"All orders are market orders at the posted price. There are no limit orders, and there is nothing to bid, because everyone transacts at the same price."},{"type":"paragraph","text":"Hardcore leagues work differently: every order fills within a few minutes, games or no games. See the Hardcore mode tab."}]},{"id":"float","title":"Limited shares","topics":["float","sold out","shares outstanding","cannot buy","scarcity"],"body":"Each player has a finite number of shares in your league: league size x 100. A 12-person league has 1,200 shares of every player, and no more can be created.\n\nWhen a player's float is fully held, further buys are refused until someone sells. This is the game's real scarcity -- not everyone can own the breakout everybody wants, so portfolios genuinely differ. Selling returns shares to the float.\n\nShort positions are synthetic and do not consume float.","blocks":[{"type":"paragraph","text":"Each player has a finite number of shares in your league: league size x 100. A 12-person league has 1,200 shares of every player, and no more can be created."},{"type":"paragraph","text":"When a player's float is fully held, further buys are refused until someone sells. This is the game's real scarcity — not everyone can own the breakout everybody wants, so portfolios genuinely differ. Selling returns shares to the float."},{"type":"paragraph","text":"Short positions are synthetic and do not consume float."}]},{"id":"halts","title":"When you cannot trade a player","topics":["cannot buy","why can't i buy","halted","locked","injured","out","already played"],"body":"Three situations block a trade, and each blocks only one direction.\n\nInjury halt. A player listed IR, OUT, or inactive cannot be bought, and a new short cannot be opened against him. He has no game to settle and his projection deliberately does not move, so his price cannot respond to football -- buying him would be a bet on the pricing around him, not on the player. You can always sell or cover a player you already hold.\n\nAlready played. Once a player's game has kicked off this week, he is locked: you cannot buy or short him, because the result is known or in progress. Sells and covers are accepted but queue until after the weekly close. Not in a hardcore league: there the price moves during the game, so a player can be traded at any time.\n\nFloat exhausted. Every share is held by someone. Nothing to buy until someone sells.\n\nIf none of these apply and a buy is still refused, check your buying power: cash already committed to pending buys is not available to spend twice.","blocks":[{"type":"paragraph","text":"Three situations block a trade, and each blocks only one direction."},{"type":"paragraph","text":"Injury halt. A player listed IR, OUT, or inactive cannot be bought, and a new short cannot be opened against him. He has no game to settle and his projection deliberately does not move, so his price cannot respond to football — buying him would be a bet on the pricing around him, not on the player. You can always sell or cover a player you already hold."},{"type":"paragraph","text":"Already played. Once a player's game has kicked off this week, he is locked: you cannot buy or short him, because the result is known or in progress. Sells and covers are accepted but queue until after the weekly close. Not in a hardcore league: there the price moves during the game, so a player can be traded at any time."},{"type":"paragraph","text":"Float exhausted. Every share is held by someone. Nothing to buy until someone sells."},{"type":"paragraph","text":"If none of these apply and a buy is still refused, check your buying power: cash already committed to pending buys is not available to spend twice."}]},{"id":"shorting","title":"Short selling","topics":["short","shorting","margin","cover","interest","bet against"],"body":"You can bet against a player by shorting him: you profit if his price falls and lose if it rises.\n\nOpening a short requires cash equal to 100% of the position's value as margin, measured across all of your shorts together, plus any loss they are carrying; a short in profit holds back that much less. There is no fee or interest for holding a short. The margin is a requirement, not a deposit -- no cash leaves your balance when you short; the profit or loss is settled in cash when you cover. While your shorts are open, the cash their margin requires is held back: you cannot spend it on buys. A buy can only use the cash above what your shorts need.\n\nMargin call. If a price rise leaves your cash plus your shorts' profit or loss below 30% of what it would cost to cover them, enough of your shorts are covered automatically, largest first, to bring you back to that level. It happens right after the price move that caused it, at the price a cover would pay, and you get a notification. A player whose game has been played this week is covered last. A price can jump past that level in a single move, so a short can still lose more than the margin it opened with.\n\nYour short gains whenever the posted price falls -- a game below projection, a worse rest-of-season outlook, or other members selling and lowering demand. Your own sales cannot help your short: its price already leaves out the demand from your own shares. In a hardcore league with demand on, a short's demand is fixed when it opens, so only performance and projection move it.\n\nWhen the market is open a short executes immediately. During games it queues for the next fill run, and if you are short on cash but have sales pending, it queues behind them so their proceeds can cover the margin. In a hardcore league a short fills in a batch like any other order. A short cannot exceed the player's share float.\n\nThe trap worth understanding: an injured player who does not play produces no stats, so there is no underperformance and his price does not move. You also cannot open a new short on a player listed IR, OUT or inactive. You want a player who plays and disappoints.","blocks":[{"type":"paragraph","text":"You can bet against a player by shorting him: you profit if his price falls and lose if it rises."},{"type":"paragraph","text":"Opening a short requires cash equal to 100% of the position's value as margin, measured across all of your shorts together, plus any loss they are carrying; a short in profit holds back that much less. There is no fee or interest for holding a short. The margin is a requirement, not a deposit — no cash leaves your balance when you short; the profit or loss is settled in cash when you cover. While your shorts are open, the cash their margin requires is held back: you cannot spend it on buys. A buy can only use the cash above what your shorts need."},{"type":"paragraph","text":"Margin call. If a price rise leaves your cash plus your shorts' profit or loss below 30% of what it would cost to cover them, enough of your shorts are covered automatically, largest first, to bring you back to that level. It happens right after the price move that caused it, at the price a cover would pay, and you get a notification. A player whose game has been played this week is covered last. A price can jump past that level in a single move, so a short can still lose more than the margin it opened with."},{"type":"paragraph","text":"Your short gains whenever the posted price falls — a game below projection, a worse rest-of-season outlook, or other members selling and lowering demand. Your own sales cannot help your short: its price already leaves out the demand from your own shares. In a hardcore league with demand on, a short's demand is fixed when it opens, so only performance and projection move it."},{"type":"paragraph","text":"When the market is open a short executes immediately. During games it queues for the next fill run, and if you are short on cash but have sales pending, it queues behind them so their proceeds can cover the margin. In a hardcore league a short fills in a batch like any other order. A short cannot exceed the player's share float."},{"type":"paragraph","text":"The trap worth understanding: an injured player who does not play produces no stats, so there is no underperformance and his price does not move. You also cannot open a new short on a player listed IR, OUT or inactive. You want a player who plays and disappoints."}]},{"id":"market-hours","title":"Market hours","topics":["market hours","market closed","halted","game time","when can i trade"],"body":"The market is halted while NFL games are in progress. You can still queue orders during a halt; they resolve when the market reopens.\n\nThis exists so you can watch football instead of trading it. Nobody should have to sit on their phone during the 1pm window to avoid being picked off, and because prices only move at settlement anyway, nobody gains by trying.\n\nHardcore leagues are the exception: their market stays open through the games. So is Day Trading. Each has its own tab.","blocks":[{"type":"paragraph","text":"The market is halted while NFL games are in progress. You can still queue orders during a halt; they resolve when the market reopens."},{"type":"paragraph","text":"This exists so you can watch football instead of trading it. Nobody should have to sit on their phone during the 1pm window to avoid being picked off, and because prices only move at settlement anyway, nobody gains by trying."},{"type":"paragraph","text":"Hardcore leagues are the exception: their market stays open through the games. So is Day Trading. Each has its own tab."}]},{"id":"settlement","title":"Settlement","topics":["settlement","when do prices update","4am","repricing"],"body":"Settlement is when performance actually moves prices. It runs early each morning, after that day's games go final: a Thursday-night player reprices Friday morning, Sunday's players Monday morning, Monday night's on Tuesday.\n\nAt settlement each player who played is compared with his projection, his performance multiplier is updated, and his price is rebuilt. Queued orders fill in the same run. The weekly close, after Monday night, additionally recalculates demand in leagues that use it.\n\nBetween settlements the posted price is stable. Projection updates are the one thing that can move a price outside settlement.\n\nIn a hardcore league the price has already moved during the game, and settlement keeps it exactly where the game ended. Settlement does not recalculate demand there either: a hardcore league's demand moves as members buy and sell (see the Hardcore mode tab).","blocks":[{"type":"paragraph","text":"Settlement is when performance actually moves prices. It runs early each morning, after that day's games go final: a Thursday-night player reprices Friday morning, Sunday's players Monday morning, Monday night's on Tuesday."},{"type":"paragraph","text":"At settlement each player who played is compared with his projection, his performance multiplier is updated, and his price is rebuilt. Queued orders fill in the same run. The weekly close, after Monday night, additionally recalculates demand in leagues that use it."},{"type":"paragraph","text":"Between settlements the posted price is stable. Projection updates are the one thing that can move a price outside settlement."},{"type":"paragraph","text":"In a hardcore league the price has already moved during the game, and settlement keeps it exactly where the game ended. Settlement does not recalculate demand there either: a hardcore league's demand moves as members buy and sell (see the Hardcore mode tab)."}]},{"id":"winning","title":"Winning your league","topics":["winning","standings","leaderboard","scoring"],"body":"Highest portfolio value at the end of the season wins: cash plus the market value of everything you hold, with short positions marked against you.\n\nBecause prices are per-league and the float is limited, your league is a closed contest -- you are competing for the same finite shares as everyone else in it. Dues and prizes, if your league has them, are arranged by your commissioner outside the app. BallStreet processes no payments.","blocks":[{"type":"paragraph","text":"Highest portfolio value at the end of the season wins: cash plus the market value of everything you hold, with short positions marked against you."},{"type":"paragraph","text":"Because prices are per-league and the float is limited, your league is a closed contest — you are competing for the same finite shares as everyone else in it. Dues and prizes, if your league has them, are arranged by your commissioner outside the app. BallStreet processes no payments."}]},{"id":"ai-agents","title":"Asking an AI about your league","topics":["ai","agent","mcp","api","bot","claude","chatgpt"],"body":"BallStreet has an MCP server, which lets an AI assistant read your league directly and answer questions with your actual numbers: why a price moved, what you can afford, who is available, what settlement is about to do.\n\nCreate a key at https://ballstreetleague.com/dashboard/api-keys/ (signed in), then point your assistant at the ballstreet-mcp server. A read-only key can look but not trade, and that is the right choice if you only want explanations. If you give it permission to trade, your leaguemates will see a BOT tag on your team -- automation is allowed here, hiding it is not.\n\nThe assistant reads these same rules from the server, so its answers stay current with the game rather than with whatever it was trained on.\n\nThere is a setup page written for the assistant rather than for you at https://ballstreetleague.com/agents/ -- hand it that URL and your key and it can work out the rest, including what it is and is not allowed to do.","blocks":[{"type":"paragraph","text":"BallStreet has an MCP server, which lets an AI assistant read your league directly and answer questions with your actual numbers: why a price moved, what you can afford, who is available, what settlement is about to do."},{"type":"paragraph","text":"Create a key at https://ballstreetleague.com/dashboard/api-keys/ (signed in), then point your assistant at the ballstreet-mcp server. A read-only key can look but not trade, and that is the right choice if you only want explanations. If you give it permission to trade, your leaguemates will see a BOT tag on your team — automation is allowed here, hiding it is not."},{"type":"paragraph","text":"The assistant reads these same rules from the server, so its answers stay current with the game rather than with whatever it was trained on."},{"type":"paragraph","text":"There is a setup page written for the assistant rather than for you at https://ballstreetleague.com/agents/ — hand it that URL and your key and it can work out the rest, including what it is and is not allowed to do."}]}]},{"id":"hardcore","title":"Hardcore mode","intro":"Leagues whose market stays open while the games are played.","sections":[{"id":"hardcore","title":"What hardcore mode is","topics":["hardcore","hardcore mode","hardcore league","trade during games","live trading","batch","fill delay","when does my order fill"],"body":"A commissioner can make a league hardcore when they create it. In a hardcore league the market stays open while games are played, and prices move with each game as it happens. Everything not on this tab works as in any other league.\n\nEvery order -- buy, sell, short or cover -- joins a batch that collects orders for 60 seconds. When the batch closes its orders lock, and 150 seconds later the whole batch fills at the market price at that moment. Everyone in a batch gets the same price. Sells and covers fill before buys, so a sale can pay for a buy placed beside it, and if a player's float cannot cover every buy in the batch it is split equally. You can cancel an order until its batch closes. The delay is there because TV is ahead of our stats feed: by the time your order fills, the play you just watched is in the price.","blocks":[{"type":"paragraph","text":"A commissioner can make a league hardcore when they create it. In a hardcore league the market stays open while games are played, and prices move with each game as it happens. Everything not on this tab works as in any other league."},{"type":"paragraph","text":"Every order — buy, sell, short or cover — joins a batch that collects orders for 60 seconds. When the batch closes its orders lock, and 150 seconds later the whole batch fills at the market price at that moment. Everyone in a batch gets the same price. Sells and covers fill before buys, so a sale can pay for a buy placed beside it, and if a player's float cannot cover every buy in the batch it is split equally. You can cancel an order until its batch closes. The delay is there because TV is ahead of our stats feed: by the time your order fills, the play you just watched is in the price."}]},{"id":"hardcore-prices","title":"Prices during games","topics":["live price","game in progress","hurt","injured during the game","already played","lock","hardcore settlement"],"body":"During a player's game his performance multiplier is the settlement formula applied to what his game is on course for:\n\n    expected points = points so far + projection x share of the game left\n\nA player on pace holds his price, a big first half lifts it, and at the final whistle it is exactly the price settlement keeps, so nothing moves overnight. If he is hurt during the game his price stops counting on more production, and new shorts in him are closed until he returns.\n\nBecause a finished game is already in the price, there is no lock on players who have played: you can sell Thursday's player Friday and put the money into Sunday's games.","blocks":[{"type":"paragraph","text":"During a player's game his performance multiplier is the settlement formula applied to what his game is on course for:"},{"type":"formula","text":"expected points = points so far + projection x share of the game left"},{"type":"paragraph","text":"A player on pace holds his price, a big first half lifts it, and at the final whistle it is exactly the price settlement keeps, so nothing moves overnight. If he is hurt during the game his price stops counting on more production, and new shorts in him are closed until he returns."},{"type":"paragraph","text":"Because a finished game is already in the price, there is no lock on players who have played: you can sell Thursday's player Friday and put the money into Sunday's games."}]},{"id":"hardcore-demand","title":"Demand in a hardcore league","topics":["hardcore demand","market day","premium","followers","buying first","fading","same day"],"body":"Demand works differently in a hardcore league, because its market fills orders all day. With demand pricing on, a player's price carries a premium of up to 30% built from what members have bought recently, and who pays it depends on who came first:\n\n- When you buy, you pay a premium for the shares other members bought before you, on earlier days in the last 14 days.\n- Your shares rise as other members buy the player after you, on later days within 14 days of your purchase.\n- Everyone who buys on the same market day, 4:15 AM to 4:15 AM Eastern, counts as buying together. Nobody pays for, or earns from, anyone else who bought that day, however many minutes apart they were.\n- When a member sells shares they held for at least 15 minutes, those shares keep counting for a while, losing half their weight every 24 hours. A sale never wipes out the people ahead of the seller at once, so there is nothing to gain by racing to sell first.\n- Your own shares never count toward your own price, either way. A sale takes your newest shares first, so buying and selling straight back always costs you the premium you paid.\n\nSo following the crowd costs money and getting there first earns it. Buying a player many members bought this week shows a loss of the premium at once, won back only if others buy after you. Your shares can be worth more than the price a new buyer pays: the members who followed you count for you for 14 days after your purchase, while a new buyer only pays for the last 14 days.\n\nShares from the draft, which is priced without demand, create no demand but earn from members who buy after the draft, like any other purchase. Settlement does not move demand. With demand pricing off, price is base x performance x projection.","blocks":[{"type":"paragraph","text":"Demand works differently in a hardcore league, because its market fills orders all day. With demand pricing on, a player's price carries a premium of up to 30% built from what members have bought recently, and who pays it depends on who came first:"},{"type":"bullets","items":["When you buy, you pay a premium for the shares other members bought before you, on earlier days in the last 14 days.","Your shares rise as other members buy the player after you, on later days within 14 days of your purchase.","Everyone who buys on the same market day, 4:15 AM to 4:15 AM Eastern, counts as buying together. Nobody pays for, or earns from, anyone else who bought that day, however many minutes apart they were.","When a member sells shares they held for at least 15 minutes, those shares keep counting for a while, losing half their weight every 24 hours. A sale never wipes out the people ahead of the seller at once, so there is nothing to gain by racing to sell first.","Your own shares never count toward your own price, either way. A sale takes your newest shares first, so buying and selling straight back always costs you the premium you paid."]},{"type":"paragraph","text":"So following the crowd costs money and getting there first earns it. Buying a player many members bought this week shows a loss of the premium at once, won back only if others buy after you. Your shares can be worth more than the price a new buyer pays: the members who followed you count for you for 14 days after your purchase, while a new buyer only pays for the last 14 days."},{"type":"paragraph","text":"Shares from the draft, which is priced without demand, create no demand but earn from members who buy after the draft, like any other purchase. Settlement does not move demand. With demand pricing off, price is base x performance x projection."}]},{"id":"hardcore-limits","title":"Shorts, pauses and bots","topics":["hardcore short","long and short","pause","stats feed","api key","bot","hardcore_no_bots"],"body":"A short's demand is fixed when it opens. After that only performance and projection move it, so members buying cannot squeeze it, and for the same reason you cannot hold a long and a short in the same player in a hardcore league with demand on.\n\nFills pause, while orders keep queueing, when the stats feed stops updating during a game and while settlement runs.\n\nAPI keys can read a hardcore league but cannot trade in it: orders fill every few minutes, so reaction time is an edge there, and the game keeps that edge for people.","blocks":[{"type":"paragraph","text":"A short's demand is fixed when it opens. After that only performance and projection move it, so members buying cannot squeeze it, and for the same reason you cannot hold a long and a short in the same player in a hardcore league with demand on."},{"type":"paragraph","text":"Fills pause, while orders keep queueing, when the stats feed stops updating during a game and while settlement runs."},{"type":"paragraph","text":"API keys can read a hardcore league but cannot trade in it: orders fill every few minutes, so reaction time is an edge there, and the game keeps that edge for people."}]}]},{"id":"day-trading","title":"Day Trading","intro":"One-day contests over a slate of games, with the market open the whole time.","sections":[{"id":"dt-overview","title":"What Day Trading is","topics":["day trading","contest","daily fantasy","slate","how it works"],"body":"Daily fantasy, BallStreet style. A contest covers one slate of games: Thursday night, the Sunday main slate (the 1pm and 4pm ET games; an early international game is left out), all of Sunday, Sunday night or Monday night. Instead of setting a lineup, you buy and sell shares of the players in those games, before kickoff and while they play.\n\nEveryone starts with $100,000 in BallStreet Bucks, and the best portfolio at the final whistle wins. There is no real money anywhere. Contests are private: you join with the host's invite link, up to 50 entrants.","blocks":[{"type":"paragraph","text":"Daily fantasy, BallStreet style. A contest covers one slate of games: Thursday night, the Sunday main slate (the 1pm and 4pm ET games; an early international game is left out), all of Sunday, Sunday night or Monday night. Instead of setting a lineup, you buy and sell shares of the players in those games, before kickoff and while they play."},{"type":"paragraph","text":"Everyone starts with $100,000 in BallStreet Bucks, and the best portfolio at the final whistle wins. There is no real money anywhere. Contests are private: you join with the host's invite link, up to 50 entrants."}]},{"id":"dt-opening","title":"Before kickoff: the opening auction","topics":["opening auction","queue","before kickoff","float","split","backup"],"body":"Until the first kickoff you queue orders. Nothing fills yet, and nobody can see anyone else's queue. At the first kickoff every queued order fills at once, at the same opening price for everyone:\n\n    opening price = $5.00 x his projected points for this slate\n\nwith a floor of $2.00. Your queue fills top to bottom, so put first what you want most.\n\nEach player has a limited number of shares, his float: 100 shares for every entrant, the same for every player whatever his price. It is set at kickoff from who actually joined. If more is wanted than a float holds, it is split equally among everyone who wanted him, and the cash for what you did not get comes back to you.\n\nBefore kickoff you may queue past your buying power, up to another 100% of your starting cash. Those orders are backups: they fill only if a split gives cash back, in your queue order. A backup that is never needed costs nothing.\n\nOpening shares do not create demand. Everyone gets in at the same price, and demand only reflects what people buy once the games are on.","blocks":[{"type":"paragraph","text":"Until the first kickoff you queue orders. Nothing fills yet, and nobody can see anyone else's queue. At the first kickoff every queued order fills at once, at the same opening price for everyone:"},{"type":"formula","text":"opening price = $5.00 x his projected points for this slate"},{"type":"paragraph","text":"with a floor of $2.00. Your queue fills top to bottom, so put first what you want most."},{"type":"paragraph","text":"Each player has a limited number of shares, his float: 100 shares for every entrant, the same for every player whatever his price. It is set at kickoff from who actually joined. If more is wanted than a float holds, it is split equally among everyone who wanted him, and the cash for what you did not get comes back to you."},{"type":"paragraph","text":"Before kickoff you may queue past your buying power, up to another 100% of your starting cash. Those orders are backups: they fill only if a split gives cash back, in your queue order. A backup that is never needed costs nothing."},{"type":"paragraph","text":"Opening shares do not create demand. Everyone gets in at the same price, and demand only reflects what people buy once the games are on."}]},{"id":"dt-pricing","title":"How prices move during the games","topics":["price","live price","performance","projection","why did the price change"],"body":"A player's price is the same formula as the rest of BallStreet:\n\n    price = opening price x performance x demand\n\nPerformance starts at 1 and moves live while he plays. His price assumes he keeps producing at his projection for the time left in the game: points so far plus his projection for the rest of it. Beating that pace by 100% raises his price 30%, and performance stays between 0.20x and 4.00x. When his game ends the price stops moving on football.\n\n- On pace, performance stays at 1.\n- A player ruled out before his kickoff is priced as if he scores nothing.\n- A player hurt during his game is priced on what he has already scored, with nothing more expected.","blocks":[{"type":"paragraph","text":"A player's price is the same formula as the rest of BallStreet:"},{"type":"formula","text":"price = opening price x performance x demand"},{"type":"paragraph","text":"Performance starts at 1 and moves live while he plays. His price assumes he keeps producing at his projection for the time left in the game: points so far plus his projection for the rest of it. Beating that pace by 100% raises his price 30%, and performance stays between 0.20x and 4.00x. When his game ends the price stops moving on football."},{"type":"bullets","items":["On pace, performance stays at 1.","A player ruled out before his kickoff is priced as if he scores nothing.","A player hurt during his game is priced on what he has already scored, with nothing more expected."]}]},{"id":"dt-demand","title":"Demand: you earn from people who follow you","topics":["demand","premium","followers","be first"],"body":"When people buy a player during the games, his price carries a demand premium, up to 30%. Who pays it and who earns it is the point:\n\n- When you buy, you pay a premium for every stake other people bought before you.\n- When you hold or sell, you earn only from stakes other people bought after you.\n- Your own buying never raises your own price.\n\nSo being right early pays, and chasing a player everyone already bought costs. A stake keeps counting for the people ahead of it after it is sold, once it has been held 15 minutes, so selling a stake held that long never lowers his price. A stake sold sooner stops counting.","blocks":[{"type":"paragraph","text":"When people buy a player during the games, his price carries a demand premium, up to 30%. Who pays it and who earns it is the point:"},{"type":"bullets","items":["When you buy, you pay a premium for every stake other people bought before you.","When you hold or sell, you earn only from stakes other people bought after you.","Your own buying never raises your own price."]},{"type":"paragraph","text":"So being right early pays, and chasing a player everyone already bought costs. A stake keeps counting for the people ahead of it after it is sold, once it has been held 15 minutes, so selling a stake held that long never lowers his price. A stake sold sooner stops counting."}]},{"id":"dt-orders","title":"Trading during the games","topics":["orders","batch","fill","delay","why the wait","price protection"],"body":"Once the games start, orders collect in batches of 60 seconds. Each batch fills 150 seconds after it closes, at the market price at that moment, and everyone in a batch pays the same price. Within a batch, sells and covers fill first, so a sale can pay for a buy placed beside it. You can cancel an order until its batch closes.\n\nWhy the wait: TV runs ahead of our live data. Filling after the data has caught up means the play you just watched is already in the price, so nobody can buy a touchdown before it counts.\n\n- Buy by dollars (the default) or by shares. By dollars you get as many whole shares as the money buys at the fill price.\n- Price protection cancels an order if the fill price moves more than the percentage you set. It never fills at a better price than the market.\n- There are no limit orders: every order fills at the market price.\n- Trading closes when the last game in the slate is final.","blocks":[{"type":"paragraph","text":"Once the games start, orders collect in batches of 60 seconds. Each batch fills 150 seconds after it closes, at the market price at that moment, and everyone in a batch pays the same price. Within a batch, sells and covers fill first, so a sale can pay for a buy placed beside it. You can cancel an order until its batch closes."},{"type":"paragraph","text":"Why the wait: TV runs ahead of our live data. Filling after the data has caught up means the play you just watched is already in the price, so nobody can buy a touchdown before it counts."},{"type":"bullets","items":["Buy by dollars (the default) or by shares. By dollars you get as many whole shares as the money buys at the fill price.","Price protection cancels an order if the fill price moves more than the percentage you set. It never fills at a better price than the market.","There are no limit orders: every order fills at the market price.","Trading closes when the last game in the slate is final."]}]},{"id":"dt-buying-power","title":"Buying power and limits","topics":["buying power","max","cash","limit","float"],"body":"Your buying power is your cash, less what is set aside for your shorts and everything you have queued, plus what your queued sales will bring in:\n\n    buying power = cash - short margin - queued buys - queued short margin + queued sales\n\nA buy uses its cost. A short sets aside 1.00x its value, so a $1,000 short uses $1,000, plus any loss your shorts are carrying (less any profit). The Max button fills in the most you can put into one order, and it can also be limited by the player's float: before kickoff, by the float he would have if every seat filled.","blocks":[{"type":"paragraph","text":"Your buying power is your cash, less what is set aside for your shorts and everything you have queued, plus what your queued sales will bring in:"},{"type":"formula","text":"buying power = cash - short margin - queued buys - queued short margin + queued sales"},{"type":"paragraph","text":"A buy uses its cost. A short sets aside 1.00x its value, so a $1,000 short uses $1,000, plus any loss your shorts are carrying (less any profit). The Max button fills in the most you can put into one order, and it can also be limited by the player's float: before kickoff, by the float he would have if every seat filled."}]},{"id":"dt-shorts","title":"Shorts","topics":["short","shorting","cover","negative","margin"],"body":"You can short a player, before kickoff or during the games, and cover to close it. A short gains when his price falls and loses when it rises.\n\n- A short moves only with how he plays. Its demand is fixed when it opens, so other people buying him cannot squeeze it.\n- You cannot be long and short the same player at once.\n- Nobody can open a position, long or short, in a player ruled out before his game, and nobody can open a new short in a player hurt or ruled out during his game until he returns. Once a player's game is final his price cannot move, so nobody can buy or short him either. Selling and covering are always allowed.\n- Margin call: if a price rise leaves your cash plus your shorts' profit or loss below 30% of what covering them would cost, enough of them are covered automatically, largest first, to bring you back to that level. Your order history marks those covers.\n- A price can jump past that level in one move, so a portfolio can still finish below zero. Below zero you can still sell and cover, but you cannot buy.","blocks":[{"type":"paragraph","text":"You can short a player, before kickoff or during the games, and cover to close it. A short gains when his price falls and loses when it rises."},{"type":"bullets","items":["A short moves only with how he plays. Its demand is fixed when it opens, so other people buying him cannot squeeze it.","You cannot be long and short the same player at once.","Nobody can open a position, long or short, in a player ruled out before his game, and nobody can open a new short in a player hurt or ruled out during his game until he returns. Once a player's game is final his price cannot move, so nobody can buy or short him either. Selling and covering are always allowed.","Margin call: if a price rise leaves your cash plus your shorts' profit or loss below 30% of what covering them would cost, enough of them are covered automatically, largest first, to bring you back to that level. Your order history marks those covers.","A price can jump past that level in one move, so a portfolio can still finish below zero. Below zero you can still sell and cover, but you cannot buy."]}]},{"id":"dt-outages","title":"When live stats stop","topics":["outage","paused","stats provider","feed"],"body":"If our stats provider stops sending live updates (no new stats or plays from any game in play for 4 minutes, not counting breaks between quarters), fills are paused and the app says so. You can still queue orders. They fill at the caught-up prices as soon as live stats are back, so nobody trades on stale prices.","blocks":[{"type":"paragraph","text":"If our stats provider stops sending live updates (no new stats or plays from any game in play for 4 minutes, not counting breaks between quarters), fills are paused and the app says so. You can still queue orders. They fill at the caught-up prices as soon as live stats are back, so nobody trades on stale prices."}]},{"id":"dt-winning","title":"Winning and results","topics":["winning","standings","results","rank","ties","trade log"],"body":"Standings are live portfolio values:\n\n    value = cash + longs at your sell price + shorts at (entry - cover price)\n\nTies share a place. An entrant who never trades is not ranked. Results freeze 20 minutes after the last game ends, to absorb late stat corrections, and are never changed after that.\n\nEvery trade is on the record. Everyone in the contest can see the full trade log (who traded which player, which side, how many shares and at what price) as each batch fills. Orders still waiting to fill stay private.","blocks":[{"type":"paragraph","text":"Standings are live portfolio values:"},{"type":"formula","text":"value = cash + longs at your sell price + shorts at (entry - cover price)"},{"type":"paragraph","text":"Ties share a place. An entrant who never trades is not ranked. Results freeze 20 minutes after the last game ends, to absorb late stat corrections, and are never changed after that."},{"type":"paragraph","text":"Every trade is on the record. Everyone in the contest can see the full trade log (who traded which player, which side, how many shares and at what price) as each batch fills. Orders still waiting to fill stay private."}]},{"id":"dt-contests","title":"Joining, leaving and weekly contests","topics":["join","leave","weekly","series","host","delete"],"body":"The host sets the slate and the size, and can rename or resize the contest until kickoff. You can leave before kickoff; after it, positions ride to the final whistle.\n\nA host can run a contest every week. When a week ends, next week's contest for the same slate is created and its members are entered automatically. You can skip a week by leaving it before kickoff, or turn off automatic entry. Anyone who was entered and did not trade is not entered again until they rejoin from the invite link.","blocks":[{"type":"paragraph","text":"The host sets the slate and the size, and can rename or resize the contest until kickoff. You can leave before kickoff; after it, positions ride to the final whistle."},{"type":"paragraph","text":"A host can run a contest every week. When a week ends, next week's contest for the same slate is created and its members are entered automatically. You can skip a week by leaving it before kickoff, or turn off automatic entry. Anyone who was entered and did not trade is not entered again until they rejoin from the invite link."}]}]}],"sections":[{"id":"overview","title":"Overview","topics":["basics","getting started","goal","portfolio value"],"body":"BallStreet is fantasy football built on stock-market mechanics. Instead of setting a weekly lineup, you build a portfolio of NFL player shares. A player's share price moves on how he performs against his projection, the way a stock reacts to an earnings report.\n\nEvery member starts each league with $100,000 in BallStreet Bucks. There is no real money anywhere in the game. You win by finishing the season with the most valuable portfolio, where\n\n    portfolio value = cash + market value of every holding\n\nLeagues are private and invite-only. Your league is scored independently: prices are per-league, so the same player can be worth different amounts in two different leagues.","blocks":[{"type":"paragraph","text":"BallStreet is fantasy football built on stock-market mechanics. Instead of setting a weekly lineup, you build a portfolio of NFL player shares. A player's share price moves on how he performs against his projection, the way a stock reacts to an earnings report."},{"type":"paragraph","text":"Every member starts each league with $100,000 in BallStreet Bucks. There is no real money anywhere in the game. You win by finishing the season with the most valuable portfolio, where"},{"type":"formula","text":"portfolio value = cash + market value of every holding"},{"type":"paragraph","text":"Leagues are private and invite-only. Your league is scored independently: prices are per-league, so the same player can be worth different amounts in two different leagues."}]},{"id":"pricing","title":"How prices are calculated","topics":["price","pricing","multiplier","formula","why did the price change"],"body":"A player's posted price is his base price multiplied by up to three multipliers:\n\n    price = base price x performance x projection x demand\n\n- Base price never changes during a season. It comes from pre-season consensus rankings.\n- The performance multiplier moves when he plays, on actual points versus projected points.\n- The projection multiplier moves between games, when the outlook for the rest of his season changes.\n- The demand multiplier reflects how much of his float your league owns (in a hardcore league, what members bought ahead of you recently). It is optional and off in many leagues.\n\nTwo things surprise people, and both are deliberate.\n\nFirst, trading does not move prices. There is no order book and no per-trade price impact. Everyone sees and pays the same posted price, and buying a player heavily does not make him cost more for the next buyer. (Hardcore leagues with demand on are the exception, and the rule there is spelled out on the Hardcore mode tab.)\n\nSecond, a price can move on a day your player did not take the field. That is the projection multiplier: if his rest-of-season outlook is cut or raised, his price follows, because a price is what he is worth from here, not what he did last Sunday.","blocks":[{"type":"paragraph","text":"A player's posted price is his base price multiplied by up to three multipliers:"},{"type":"formula","text":"price = base price x performance x projection x demand"},{"type":"bullets","items":["Base price never changes during a season. It comes from pre-season consensus rankings.","The performance multiplier moves when he plays, on actual points versus projected points.","The projection multiplier moves between games, when the outlook for the rest of his season changes.","The demand multiplier reflects how much of his float your league owns (in a hardcore league, what members bought ahead of you recently). It is optional and off in many leagues."]},{"type":"paragraph","text":"Two things surprise people, and both are deliberate."},{"type":"paragraph","text":"First, trading does not move prices. There is no order book and no per-trade price impact. Everyone sees and pays the same posted price, and buying a player heavily does not make him cost more for the next buyer. (Hardcore leagues with demand on are the exception, and the rule there is spelled out on the Hardcore mode tab.)"},{"type":"paragraph","text":"Second, a price can move on a day your player did not take the field. That is the projection multiplier: if his rest-of-season outlook is cut or raised, his price follows, because a price is what he is worth from here, not what he did last Sunday."}]},{"id":"base-price","title":"Base price","topics":["base price","adp","starting price","rankings"],"body":"Base price is set once, before your league's market opens, from consensus expert rankings. The top-ranked player starts near $100 and the curve falls away logarithmically to a $2 floor by about rank 200. Unranked players sit at the floor.\n\nBase price does not move for the rest of the season. Every price change you see is a multiplier moving.\n\nA league that holds its IPO after the season has started prices off the current outlook rather than pre-season rankings, so a player who has taken over a starting job is priced like a starter instead of like the backup he was ranked as in August.","blocks":[{"type":"paragraph","text":"Base price is set once, before your league's market opens, from consensus expert rankings. The top-ranked player starts near $100 and the curve falls away logarithmically to a $2 floor by about rank 200. Unranked players sit at the floor."},{"type":"paragraph","text":"Base price does not move for the rest of the season. Every price change you see is a multiplier moving."},{"type":"paragraph","text":"A league that holds its IPO after the season has started prices off the current outlook rather than pre-season rankings, so a player who has taken over a starting job is priced like a starter instead of like the backup he was ranked as in August."}]},{"id":"performance-multiplier","title":"Performance multiplier","topics":["performance","settlement","actual vs projected","beat projection"],"body":"This is the core of the game. Every player starts at 1.00 and moves only when he plays:\n\n    new = old + old x 0.16 x (actual - projected) / projected\n\nWhat matters is the gap between actual and projected points, not raw production. A backup projected for 4 points who scores 12 moves far more than a star projected for 20 who scores 24. Beating a low number is worth more than meeting a high one, which is why reading a depth chart pays here.\n\nMeeting the projection exactly changes nothing. A bye changes nothing. A missed game changes nothing -- no stats means no signal, in either direction.\n\nThe multiplier is sticky: it persists between weeks and carries strong past performance forward, fading only if the player keeps underperforming. It never falls below 0.2 and has no ceiling: a player who keeps beating his projection keeps rising.","blocks":[{"type":"paragraph","text":"This is the core of the game. Every player starts at 1.00 and moves only when he plays:"},{"type":"formula","text":"new = old + old x 0.16 x (actual - projected) / projected"},{"type":"paragraph","text":"What matters is the gap between actual and projected points, not raw production. A backup projected for 4 points who scores 12 moves far more than a star projected for 20 who scores 24. Beating a low number is worth more than meeting a high one, which is why reading a depth chart pays here."},{"type":"paragraph","text":"Meeting the projection exactly changes nothing. A bye changes nothing. A missed game changes nothing — no stats means no signal, in either direction."},{"type":"paragraph","text":"The multiplier is sticky: it persists between weeks and carries strong past performance forward, fading only if the player keeps underperforming. It never falls below 0.2 and has no ceiling: a player who keeps beating his projection keeps rising."}]},{"id":"projection-multiplier","title":"Projection multiplier","topics":["projection","outlook","price moved without playing","injury news","rest of season","why did my price change"],"body":"Between games, a player's price tracks his rest-of-season projection per remaining game. When his outlook changes -- a starter goes down ahead of him, he is downgraded, his role shrinks -- the price moves with it.\n\nThis is the answer to 'my guy didn't play, why did his price change'. It is also what stops a downgrade from being free money: without it, bad news would lower the bar he has to clear at settlement without lowering what you pay for him, so buying every downgrade would win.\n\nThree properties keep it honest:\n\n- The projection level is smoothed before it prices anything, because raw weekly projections bounce around and a price that chases a bouncing number can be farmed by buying every dip.\n- The response is damped, weight 0.16, and clamped between 0.6 and 1.6. Prices move with the outlook, not one-for-one.\n- It freezes once his game kicks off, so nothing shifts under you mid-game.\n\nA player who is ruled OUT does not move at all. A one-week absence is a missed payment, not a re-rating -- he is coming back, and cratering him would make every injury a predictable round trip for everyone else.","blocks":[{"type":"paragraph","text":"Between games, a player's price tracks his rest-of-season projection per remaining game. When his outlook changes — a starter goes down ahead of him, he is downgraded, his role shrinks — the price moves with it."},{"type":"paragraph","text":"This is the answer to 'my guy didn't play, why did his price change'. It is also what stops a downgrade from being free money: without it, bad news would lower the bar he has to clear at settlement without lowering what you pay for him, so buying every downgrade would win."},{"type":"paragraph","text":"Three properties keep it honest:"},{"type":"bullets","items":["The projection level is smoothed before it prices anything, because raw weekly projections bounce around and a price that chases a bouncing number can be farmed by buying every dip.","The response is damped, weight 0.16, and clamped between 0.6 and 1.6. Prices move with the outlook, not one-for-one.","It freezes once his game kicks off, so nothing shifts under you mid-game."]},{"type":"paragraph","text":"A player who is ruled OUT does not move at all. A one-week absence is a missed payment, not a re-rating — he is coming back, and cratering him would make every injury a predictable round trip for everyone else."}]},{"id":"demand-multiplier","title":"Demand multiplier","topics":["demand","deferred demand","scarcity premium","pricing mode"],"body":"Optional, and set per league. In a demand-enabled league, a player who is widely owned carries a premium of up to 30% on top of his performance and projection multipliers. In a performance-only league this multiplier is absent entirely.\n\nDemand is recalculated once a week at the weekly close, and once per round during the IPO. It never moves on an individual trade. That means buying does not immediately raise the price -- the effect is deferred to the next recalculation, which is why the mode is called deferred demand.\n\nWhen you sell, or when your portfolio is valued, your own shares are excluded from the demand calculation. You are paid what the player is worth to everyone else, not what he is worth partly because you bought him. For a normal position the difference is pennies; it only bites someone trying to corner a player's float to inflate their own holdings.\n\nHardcore leagues use a different demand rule, built for a market that fills orders all day: see the Hardcore mode tab.","blocks":[{"type":"paragraph","text":"Optional, and set per league. In a demand-enabled league, a player who is widely owned carries a premium of up to 30% on top of his performance and projection multipliers. In a performance-only league this multiplier is absent entirely."},{"type":"paragraph","text":"Demand is recalculated once a week at the weekly close, and once per round during the IPO. It never moves on an individual trade. That means buying does not immediately raise the price — the effect is deferred to the next recalculation, which is why the mode is called deferred demand."},{"type":"paragraph","text":"When you sell, or when your portfolio is valued, your own shares are excluded from the demand calculation. You are paid what the player is worth to everyone else, not what he is worth partly because you bought him. For a normal position the difference is pennies; it only bites someone trying to corner a player's float to inflate their own holdings."},{"type":"paragraph","text":"Hardcore leagues use a different demand rule, built for a market that fills orders all day: see the Hardcore mode tab."}]},{"id":"ipo","title":"The IPO (your draft)","topics":["ipo","draft","rounds","bidding","auction"],"body":"Your league's season opens with an IPO instead of a snake draft. It runs 10 rounds by default, each with a spending cap ($10,000 by default) and a time window (30 minutes by default). Commissioners can change all three.\n\nIn each round you submit the players and share counts you want. Everyone's orders for that round fill together when the round closes -- it is not a turn order and there is no advantage to submitting first within a round.\n\nIf more shares are wanted than exist, the float is allocated and some orders fill partially or not at all; the money from an unfilled order rolls into your next round. Demand is recalculated between rounds, so a player everyone piled into gets more expensive in the round that follows.\n\nOne deliberate exception to uniform pricing applies here: on an IPO buy, shares you already hold are excluded from the demand you pay. Otherwise a member accumulating a player across rounds would be bidding against himself and paying a premium he created. It is always a discount, never a surcharge.","blocks":[{"type":"paragraph","text":"Your league's season opens with an IPO instead of a snake draft. It runs 10 rounds by default, each with a spending cap ($10,000 by default) and a time window (30 minutes by default). Commissioners can change all three."},{"type":"paragraph","text":"In each round you submit the players and share counts you want. Everyone's orders for that round fill together when the round closes — it is not a turn order and there is no advantage to submitting first within a round."},{"type":"paragraph","text":"If more shares are wanted than exist, the float is allocated and some orders fill partially or not at all; the money from an unfilled order rolls into your next round. Demand is recalculated between rounds, so a player everyone piled into gets more expensive in the round that follows."},{"type":"paragraph","text":"One deliberate exception to uniform pricing applies here: on an IPO buy, shares you already hold are excluded from the demand you pay. Otherwise a member accumulating a player across rounds would be bidding against himself and paying a premium he created. It is always a discount, never a surcharge."}]},{"id":"autodraft","title":"Autodraft","topics":["autodraft","missed the draft","absent"],"body":"If you cannot attend the IPO, autodraft submits sensible orders for you each round so you are not left holding only cash. It skips players who cannot play. Showing up to the draft lobby turns it off automatically -- the assumption is that if you are present, you want to pick for yourself -- unless you deliberately switched it on.","blocks":[{"type":"paragraph","text":"If you cannot attend the IPO, autodraft submits sensible orders for you each round so you are not left holding only cash. It skips players who cannot play. Showing up to the draft lobby turns it off automatically — the assumption is that if you are present, you want to pick for yourself — unless you deliberately switched it on."}]},{"id":"preseason","title":"Between the IPO and Week 1","topics":["preseason","before week 1","trading early"],"body":"If your league drafts before the season starts, the market stays open the whole way to Week 1 and you can keep trading.\n\nBy default, NFL preseason games do not move the performance multiplier: most people expect prices to wait for real football. Commissioners can opt in to settling preseason games if they want them to count.","blocks":[{"type":"paragraph","text":"If your league drafts before the season starts, the market stays open the whole way to Week 1 and you can keep trading."},{"type":"paragraph","text":"By default, NFL preseason games do not move the performance multiplier: most people expect prices to wait for real football. Commissioners can opt in to settling preseason games if they want them to count."}]},{"id":"trading","title":"Buying and selling","topics":["buy","sell","orders","queue","fill","pending"],"body":"Buy orders are queued, not filled on the spot. They execute together in a fill run after that day's games are final. Sells and covers execute immediately while the market is open.\n\nPlacing a buy earlier in the window gains you nothing. There is no price improvement for being fast, and the queue is not first-come-first-served: the order in which members are filled rotates every cycle, so whoever was last this time is first next time. This is on purpose -- your league should be won by knowing football, not by refreshing the page fastest.\n\nWhat you do control is the order of your own pending orders. Cash is the binding constraint on a fill night, so if you have queued more than you can afford, the ones at the front of your queue are the ones that fill. You can reorder them until the run.\n\nAll orders are market orders at the posted price. There are no limit orders, and there is nothing to bid, because everyone transacts at the same price.\n\nHardcore leagues work differently: every order fills within a few minutes, games or no games. See the Hardcore mode tab.","blocks":[{"type":"paragraph","text":"Buy orders are queued, not filled on the spot. They execute together in a fill run after that day's games are final. Sells and covers execute immediately while the market is open."},{"type":"paragraph","text":"Placing a buy earlier in the window gains you nothing. There is no price improvement for being fast, and the queue is not first-come-first-served: the order in which members are filled rotates every cycle, so whoever was last this time is first next time. This is on purpose — your league should be won by knowing football, not by refreshing the page fastest."},{"type":"paragraph","text":"What you do control is the order of your own pending orders. Cash is the binding constraint on a fill night, so if you have queued more than you can afford, the ones at the front of your queue are the ones that fill. You can reorder them until the run."},{"type":"paragraph","text":"All orders are market orders at the posted price. There are no limit orders, and there is nothing to bid, because everyone transacts at the same price."},{"type":"paragraph","text":"Hardcore leagues work differently: every order fills within a few minutes, games or no games. See the Hardcore mode tab."}]},{"id":"float","title":"Limited shares","topics":["float","sold out","shares outstanding","cannot buy","scarcity"],"body":"Each player has a finite number of shares in your league: league size x 100. A 12-person league has 1,200 shares of every player, and no more can be created.\n\nWhen a player's float is fully held, further buys are refused until someone sells. This is the game's real scarcity -- not everyone can own the breakout everybody wants, so portfolios genuinely differ. Selling returns shares to the float.\n\nShort positions are synthetic and do not consume float.","blocks":[{"type":"paragraph","text":"Each player has a finite number of shares in your league: league size x 100. A 12-person league has 1,200 shares of every player, and no more can be created."},{"type":"paragraph","text":"When a player's float is fully held, further buys are refused until someone sells. This is the game's real scarcity — not everyone can own the breakout everybody wants, so portfolios genuinely differ. Selling returns shares to the float."},{"type":"paragraph","text":"Short positions are synthetic and do not consume float."}]},{"id":"halts","title":"When you cannot trade a player","topics":["cannot buy","why can't i buy","halted","locked","injured","out","already played"],"body":"Three situations block a trade, and each blocks only one direction.\n\nInjury halt. A player listed IR, OUT, or inactive cannot be bought, and a new short cannot be opened against him. He has no game to settle and his projection deliberately does not move, so his price cannot respond to football -- buying him would be a bet on the pricing around him, not on the player. You can always sell or cover a player you already hold.\n\nAlready played. Once a player's game has kicked off this week, he is locked: you cannot buy or short him, because the result is known or in progress. Sells and covers are accepted but queue until after the weekly close. Not in a hardcore league: there the price moves during the game, so a player can be traded at any time.\n\nFloat exhausted. Every share is held by someone. Nothing to buy until someone sells.\n\nIf none of these apply and a buy is still refused, check your buying power: cash already committed to pending buys is not available to spend twice.","blocks":[{"type":"paragraph","text":"Three situations block a trade, and each blocks only one direction."},{"type":"paragraph","text":"Injury halt. A player listed IR, OUT, or inactive cannot be bought, and a new short cannot be opened against him. He has no game to settle and his projection deliberately does not move, so his price cannot respond to football — buying him would be a bet on the pricing around him, not on the player. You can always sell or cover a player you already hold."},{"type":"paragraph","text":"Already played. Once a player's game has kicked off this week, he is locked: you cannot buy or short him, because the result is known or in progress. Sells and covers are accepted but queue until after the weekly close. Not in a hardcore league: there the price moves during the game, so a player can be traded at any time."},{"type":"paragraph","text":"Float exhausted. Every share is held by someone. Nothing to buy until someone sells."},{"type":"paragraph","text":"If none of these apply and a buy is still refused, check your buying power: cash already committed to pending buys is not available to spend twice."}]},{"id":"shorting","title":"Short selling","topics":["short","shorting","margin","cover","interest","bet against"],"body":"You can bet against a player by shorting him: you profit if his price falls and lose if it rises.\n\nOpening a short requires cash equal to 100% of the position's value as margin, measured across all of your shorts together, plus any loss they are carrying; a short in profit holds back that much less. There is no fee or interest for holding a short. The margin is a requirement, not a deposit -- no cash leaves your balance when you short; the profit or loss is settled in cash when you cover. While your shorts are open, the cash their margin requires is held back: you cannot spend it on buys. A buy can only use the cash above what your shorts need.\n\nMargin call. If a price rise leaves your cash plus your shorts' profit or loss below 30% of what it would cost to cover them, enough of your shorts are covered automatically, largest first, to bring you back to that level. It happens right after the price move that caused it, at the price a cover would pay, and you get a notification. A player whose game has been played this week is covered last. A price can jump past that level in a single move, so a short can still lose more than the margin it opened with.\n\nYour short gains whenever the posted price falls -- a game below projection, a worse rest-of-season outlook, or other members selling and lowering demand. Your own sales cannot help your short: its price already leaves out the demand from your own shares. In a hardcore league with demand on, a short's demand is fixed when it opens, so only performance and projection move it.\n\nWhen the market is open a short executes immediately. During games it queues for the next fill run, and if you are short on cash but have sales pending, it queues behind them so their proceeds can cover the margin. In a hardcore league a short fills in a batch like any other order. A short cannot exceed the player's share float.\n\nThe trap worth understanding: an injured player who does not play produces no stats, so there is no underperformance and his price does not move. You also cannot open a new short on a player listed IR, OUT or inactive. You want a player who plays and disappoints.","blocks":[{"type":"paragraph","text":"You can bet against a player by shorting him: you profit if his price falls and lose if it rises."},{"type":"paragraph","text":"Opening a short requires cash equal to 100% of the position's value as margin, measured across all of your shorts together, plus any loss they are carrying; a short in profit holds back that much less. There is no fee or interest for holding a short. The margin is a requirement, not a deposit — no cash leaves your balance when you short; the profit or loss is settled in cash when you cover. While your shorts are open, the cash their margin requires is held back: you cannot spend it on buys. A buy can only use the cash above what your shorts need."},{"type":"paragraph","text":"Margin call. If a price rise leaves your cash plus your shorts' profit or loss below 30% of what it would cost to cover them, enough of your shorts are covered automatically, largest first, to bring you back to that level. It happens right after the price move that caused it, at the price a cover would pay, and you get a notification. A player whose game has been played this week is covered last. A price can jump past that level in a single move, so a short can still lose more than the margin it opened with."},{"type":"paragraph","text":"Your short gains whenever the posted price falls — a game below projection, a worse rest-of-season outlook, or other members selling and lowering demand. Your own sales cannot help your short: its price already leaves out the demand from your own shares. In a hardcore league with demand on, a short's demand is fixed when it opens, so only performance and projection move it."},{"type":"paragraph","text":"When the market is open a short executes immediately. During games it queues for the next fill run, and if you are short on cash but have sales pending, it queues behind them so their proceeds can cover the margin. In a hardcore league a short fills in a batch like any other order. A short cannot exceed the player's share float."},{"type":"paragraph","text":"The trap worth understanding: an injured player who does not play produces no stats, so there is no underperformance and his price does not move. You also cannot open a new short on a player listed IR, OUT or inactive. You want a player who plays and disappoints."}]},{"id":"market-hours","title":"Market hours","topics":["market hours","market closed","halted","game time","when can i trade"],"body":"The market is halted while NFL games are in progress. You can still queue orders during a halt; they resolve when the market reopens.\n\nThis exists so you can watch football instead of trading it. Nobody should have to sit on their phone during the 1pm window to avoid being picked off, and because prices only move at settlement anyway, nobody gains by trying.\n\nHardcore leagues are the exception: their market stays open through the games. So is Day Trading. Each has its own tab.","blocks":[{"type":"paragraph","text":"The market is halted while NFL games are in progress. You can still queue orders during a halt; they resolve when the market reopens."},{"type":"paragraph","text":"This exists so you can watch football instead of trading it. Nobody should have to sit on their phone during the 1pm window to avoid being picked off, and because prices only move at settlement anyway, nobody gains by trying."},{"type":"paragraph","text":"Hardcore leagues are the exception: their market stays open through the games. So is Day Trading. Each has its own tab."}]},{"id":"settlement","title":"Settlement","topics":["settlement","when do prices update","4am","repricing"],"body":"Settlement is when performance actually moves prices. It runs early each morning, after that day's games go final: a Thursday-night player reprices Friday morning, Sunday's players Monday morning, Monday night's on Tuesday.\n\nAt settlement each player who played is compared with his projection, his performance multiplier is updated, and his price is rebuilt. Queued orders fill in the same run. The weekly close, after Monday night, additionally recalculates demand in leagues that use it.\n\nBetween settlements the posted price is stable. Projection updates are the one thing that can move a price outside settlement.\n\nIn a hardcore league the price has already moved during the game, and settlement keeps it exactly where the game ended. Settlement does not recalculate demand there either: a hardcore league's demand moves as members buy and sell (see the Hardcore mode tab).","blocks":[{"type":"paragraph","text":"Settlement is when performance actually moves prices. It runs early each morning, after that day's games go final: a Thursday-night player reprices Friday morning, Sunday's players Monday morning, Monday night's on Tuesday."},{"type":"paragraph","text":"At settlement each player who played is compared with his projection, his performance multiplier is updated, and his price is rebuilt. Queued orders fill in the same run. The weekly close, after Monday night, additionally recalculates demand in leagues that use it."},{"type":"paragraph","text":"Between settlements the posted price is stable. Projection updates are the one thing that can move a price outside settlement."},{"type":"paragraph","text":"In a hardcore league the price has already moved during the game, and settlement keeps it exactly where the game ended. Settlement does not recalculate demand there either: a hardcore league's demand moves as members buy and sell (see the Hardcore mode tab)."}]},{"id":"winning","title":"Winning your league","topics":["winning","standings","leaderboard","scoring"],"body":"Highest portfolio value at the end of the season wins: cash plus the market value of everything you hold, with short positions marked against you.\n\nBecause prices are per-league and the float is limited, your league is a closed contest -- you are competing for the same finite shares as everyone else in it. Dues and prizes, if your league has them, are arranged by your commissioner outside the app. BallStreet processes no payments.","blocks":[{"type":"paragraph","text":"Highest portfolio value at the end of the season wins: cash plus the market value of everything you hold, with short positions marked against you."},{"type":"paragraph","text":"Because prices are per-league and the float is limited, your league is a closed contest — you are competing for the same finite shares as everyone else in it. Dues and prizes, if your league has them, are arranged by your commissioner outside the app. BallStreet processes no payments."}]},{"id":"ai-agents","title":"Asking an AI about your league","topics":["ai","agent","mcp","api","bot","claude","chatgpt"],"body":"BallStreet has an MCP server, which lets an AI assistant read your league directly and answer questions with your actual numbers: why a price moved, what you can afford, who is available, what settlement is about to do.\n\nCreate a key at https://ballstreetleague.com/dashboard/api-keys/ (signed in), then point your assistant at the ballstreet-mcp server. A read-only key can look but not trade, and that is the right choice if you only want explanations. If you give it permission to trade, your leaguemates will see a BOT tag on your team -- automation is allowed here, hiding it is not.\n\nThe assistant reads these same rules from the server, so its answers stay current with the game rather than with whatever it was trained on.\n\nThere is a setup page written for the assistant rather than for you at https://ballstreetleague.com/agents/ -- hand it that URL and your key and it can work out the rest, including what it is and is not allowed to do.","blocks":[{"type":"paragraph","text":"BallStreet has an MCP server, which lets an AI assistant read your league directly and answer questions with your actual numbers: why a price moved, what you can afford, who is available, what settlement is about to do."},{"type":"paragraph","text":"Create a key at https://ballstreetleague.com/dashboard/api-keys/ (signed in), then point your assistant at the ballstreet-mcp server. A read-only key can look but not trade, and that is the right choice if you only want explanations. If you give it permission to trade, your leaguemates will see a BOT tag on your team — automation is allowed here, hiding it is not."},{"type":"paragraph","text":"The assistant reads these same rules from the server, so its answers stay current with the game rather than with whatever it was trained on."},{"type":"paragraph","text":"There is a setup page written for the assistant rather than for you at https://ballstreetleague.com/agents/ — hand it that URL and your key and it can work out the rest, including what it is and is not allowed to do."}]},{"id":"hardcore","title":"What hardcore mode is","topics":["hardcore","hardcore mode","hardcore league","trade during games","live trading","batch","fill delay","when does my order fill"],"body":"A commissioner can make a league hardcore when they create it. In a hardcore league the market stays open while games are played, and prices move with each game as it happens. Everything not on this tab works as in any other league.\n\nEvery order -- buy, sell, short or cover -- joins a batch that collects orders for 60 seconds. When the batch closes its orders lock, and 150 seconds later the whole batch fills at the market price at that moment. Everyone in a batch gets the same price. Sells and covers fill before buys, so a sale can pay for a buy placed beside it, and if a player's float cannot cover every buy in the batch it is split equally. You can cancel an order until its batch closes. The delay is there because TV is ahead of our stats feed: by the time your order fills, the play you just watched is in the price.","blocks":[{"type":"paragraph","text":"A commissioner can make a league hardcore when they create it. In a hardcore league the market stays open while games are played, and prices move with each game as it happens. Everything not on this tab works as in any other league."},{"type":"paragraph","text":"Every order — buy, sell, short or cover — joins a batch that collects orders for 60 seconds. When the batch closes its orders lock, and 150 seconds later the whole batch fills at the market price at that moment. Everyone in a batch gets the same price. Sells and covers fill before buys, so a sale can pay for a buy placed beside it, and if a player's float cannot cover every buy in the batch it is split equally. You can cancel an order until its batch closes. The delay is there because TV is ahead of our stats feed: by the time your order fills, the play you just watched is in the price."}]},{"id":"hardcore-prices","title":"Prices during games","topics":["live price","game in progress","hurt","injured during the game","already played","lock","hardcore settlement"],"body":"During a player's game his performance multiplier is the settlement formula applied to what his game is on course for:\n\n    expected points = points so far + projection x share of the game left\n\nA player on pace holds his price, a big first half lifts it, and at the final whistle it is exactly the price settlement keeps, so nothing moves overnight. If he is hurt during the game his price stops counting on more production, and new shorts in him are closed until he returns.\n\nBecause a finished game is already in the price, there is no lock on players who have played: you can sell Thursday's player Friday and put the money into Sunday's games.","blocks":[{"type":"paragraph","text":"During a player's game his performance multiplier is the settlement formula applied to what his game is on course for:"},{"type":"formula","text":"expected points = points so far + projection x share of the game left"},{"type":"paragraph","text":"A player on pace holds his price, a big first half lifts it, and at the final whistle it is exactly the price settlement keeps, so nothing moves overnight. If he is hurt during the game his price stops counting on more production, and new shorts in him are closed until he returns."},{"type":"paragraph","text":"Because a finished game is already in the price, there is no lock on players who have played: you can sell Thursday's player Friday and put the money into Sunday's games."}]},{"id":"hardcore-demand","title":"Demand in a hardcore league","topics":["hardcore demand","market day","premium","followers","buying first","fading","same day"],"body":"Demand works differently in a hardcore league, because its market fills orders all day. With demand pricing on, a player's price carries a premium of up to 30% built from what members have bought recently, and who pays it depends on who came first:\n\n- When you buy, you pay a premium for the shares other members bought before you, on earlier days in the last 14 days.\n- Your shares rise as other members buy the player after you, on later days within 14 days of your purchase.\n- Everyone who buys on the same market day, 4:15 AM to 4:15 AM Eastern, counts as buying together. Nobody pays for, or earns from, anyone else who bought that day, however many minutes apart they were.\n- When a member sells shares they held for at least 15 minutes, those shares keep counting for a while, losing half their weight every 24 hours. A sale never wipes out the people ahead of the seller at once, so there is nothing to gain by racing to sell first.\n- Your own shares never count toward your own price, either way. A sale takes your newest shares first, so buying and selling straight back always costs you the premium you paid.\n\nSo following the crowd costs money and getting there first earns it. Buying a player many members bought this week shows a loss of the premium at once, won back only if others buy after you. Your shares can be worth more than the price a new buyer pays: the members who followed you count for you for 14 days after your purchase, while a new buyer only pays for the last 14 days.\n\nShares from the draft, which is priced without demand, create no demand but earn from members who buy after the draft, like any other purchase. Settlement does not move demand. With demand pricing off, price is base x performance x projection.","blocks":[{"type":"paragraph","text":"Demand works differently in a hardcore league, because its market fills orders all day. With demand pricing on, a player's price carries a premium of up to 30% built from what members have bought recently, and who pays it depends on who came first:"},{"type":"bullets","items":["When you buy, you pay a premium for the shares other members bought before you, on earlier days in the last 14 days.","Your shares rise as other members buy the player after you, on later days within 14 days of your purchase.","Everyone who buys on the same market day, 4:15 AM to 4:15 AM Eastern, counts as buying together. Nobody pays for, or earns from, anyone else who bought that day, however many minutes apart they were.","When a member sells shares they held for at least 15 minutes, those shares keep counting for a while, losing half their weight every 24 hours. A sale never wipes out the people ahead of the seller at once, so there is nothing to gain by racing to sell first.","Your own shares never count toward your own price, either way. A sale takes your newest shares first, so buying and selling straight back always costs you the premium you paid."]},{"type":"paragraph","text":"So following the crowd costs money and getting there first earns it. Buying a player many members bought this week shows a loss of the premium at once, won back only if others buy after you. Your shares can be worth more than the price a new buyer pays: the members who followed you count for you for 14 days after your purchase, while a new buyer only pays for the last 14 days."},{"type":"paragraph","text":"Shares from the draft, which is priced without demand, create no demand but earn from members who buy after the draft, like any other purchase. Settlement does not move demand. With demand pricing off, price is base x performance x projection."}]},{"id":"hardcore-limits","title":"Shorts, pauses and bots","topics":["hardcore short","long and short","pause","stats feed","api key","bot","hardcore_no_bots"],"body":"A short's demand is fixed when it opens. After that only performance and projection move it, so members buying cannot squeeze it, and for the same reason you cannot hold a long and a short in the same player in a hardcore league with demand on.\n\nFills pause, while orders keep queueing, when the stats feed stops updating during a game and while settlement runs.\n\nAPI keys can read a hardcore league but cannot trade in it: orders fill every few minutes, so reaction time is an edge there, and the game keeps that edge for people.","blocks":[{"type":"paragraph","text":"A short's demand is fixed when it opens. After that only performance and projection move it, so members buying cannot squeeze it, and for the same reason you cannot hold a long and a short in the same player in a hardcore league with demand on."},{"type":"paragraph","text":"Fills pause, while orders keep queueing, when the stats feed stops updating during a game and while settlement runs."},{"type":"paragraph","text":"API keys can read a hardcore league but cannot trade in it: orders fill every few minutes, so reaction time is an edge there, and the game keeps that edge for people."}]},{"id":"dt-overview","title":"What Day Trading is","topics":["day trading","contest","daily fantasy","slate","how it works"],"body":"Daily fantasy, BallStreet style. A contest covers one slate of games: Thursday night, the Sunday main slate (the 1pm and 4pm ET games; an early international game is left out), all of Sunday, Sunday night or Monday night. Instead of setting a lineup, you buy and sell shares of the players in those games, before kickoff and while they play.\n\nEveryone starts with $100,000 in BallStreet Bucks, and the best portfolio at the final whistle wins. There is no real money anywhere. Contests are private: you join with the host's invite link, up to 50 entrants.","blocks":[{"type":"paragraph","text":"Daily fantasy, BallStreet style. A contest covers one slate of games: Thursday night, the Sunday main slate (the 1pm and 4pm ET games; an early international game is left out), all of Sunday, Sunday night or Monday night. Instead of setting a lineup, you buy and sell shares of the players in those games, before kickoff and while they play."},{"type":"paragraph","text":"Everyone starts with $100,000 in BallStreet Bucks, and the best portfolio at the final whistle wins. There is no real money anywhere. Contests are private: you join with the host's invite link, up to 50 entrants."}]},{"id":"dt-opening","title":"Before kickoff: the opening auction","topics":["opening auction","queue","before kickoff","float","split","backup"],"body":"Until the first kickoff you queue orders. Nothing fills yet, and nobody can see anyone else's queue. At the first kickoff every queued order fills at once, at the same opening price for everyone:\n\n    opening price = $5.00 x his projected points for this slate\n\nwith a floor of $2.00. Your queue fills top to bottom, so put first what you want most.\n\nEach player has a limited number of shares, his float: 100 shares for every entrant, the same for every player whatever his price. It is set at kickoff from who actually joined. If more is wanted than a float holds, it is split equally among everyone who wanted him, and the cash for what you did not get comes back to you.\n\nBefore kickoff you may queue past your buying power, up to another 100% of your starting cash. Those orders are backups: they fill only if a split gives cash back, in your queue order. A backup that is never needed costs nothing.\n\nOpening shares do not create demand. Everyone gets in at the same price, and demand only reflects what people buy once the games are on.","blocks":[{"type":"paragraph","text":"Until the first kickoff you queue orders. Nothing fills yet, and nobody can see anyone else's queue. At the first kickoff every queued order fills at once, at the same opening price for everyone:"},{"type":"formula","text":"opening price = $5.00 x his projected points for this slate"},{"type":"paragraph","text":"with a floor of $2.00. Your queue fills top to bottom, so put first what you want most."},{"type":"paragraph","text":"Each player has a limited number of shares, his float: 100 shares for every entrant, the same for every player whatever his price. It is set at kickoff from who actually joined. If more is wanted than a float holds, it is split equally among everyone who wanted him, and the cash for what you did not get comes back to you."},{"type":"paragraph","text":"Before kickoff you may queue past your buying power, up to another 100% of your starting cash. Those orders are backups: they fill only if a split gives cash back, in your queue order. A backup that is never needed costs nothing."},{"type":"paragraph","text":"Opening shares do not create demand. Everyone gets in at the same price, and demand only reflects what people buy once the games are on."}]},{"id":"dt-pricing","title":"How prices move during the games","topics":["price","live price","performance","projection","why did the price change"],"body":"A player's price is the same formula as the rest of BallStreet:\n\n    price = opening price x performance x demand\n\nPerformance starts at 1 and moves live while he plays. His price assumes he keeps producing at his projection for the time left in the game: points so far plus his projection for the rest of it. Beating that pace by 100% raises his price 30%, and performance stays between 0.20x and 4.00x. When his game ends the price stops moving on football.\n\n- On pace, performance stays at 1.\n- A player ruled out before his kickoff is priced as if he scores nothing.\n- A player hurt during his game is priced on what he has already scored, with nothing more expected.","blocks":[{"type":"paragraph","text":"A player's price is the same formula as the rest of BallStreet:"},{"type":"formula","text":"price = opening price x performance x demand"},{"type":"paragraph","text":"Performance starts at 1 and moves live while he plays. His price assumes he keeps producing at his projection for the time left in the game: points so far plus his projection for the rest of it. Beating that pace by 100% raises his price 30%, and performance stays between 0.20x and 4.00x. When his game ends the price stops moving on football."},{"type":"bullets","items":["On pace, performance stays at 1.","A player ruled out before his kickoff is priced as if he scores nothing.","A player hurt during his game is priced on what he has already scored, with nothing more expected."]}]},{"id":"dt-demand","title":"Demand: you earn from people who follow you","topics":["demand","premium","followers","be first"],"body":"When people buy a player during the games, his price carries a demand premium, up to 30%. Who pays it and who earns it is the point:\n\n- When you buy, you pay a premium for every stake other people bought before you.\n- When you hold or sell, you earn only from stakes other people bought after you.\n- Your own buying never raises your own price.\n\nSo being right early pays, and chasing a player everyone already bought costs. A stake keeps counting for the people ahead of it after it is sold, once it has been held 15 minutes, so selling a stake held that long never lowers his price. A stake sold sooner stops counting.","blocks":[{"type":"paragraph","text":"When people buy a player during the games, his price carries a demand premium, up to 30%. Who pays it and who earns it is the point:"},{"type":"bullets","items":["When you buy, you pay a premium for every stake other people bought before you.","When you hold or sell, you earn only from stakes other people bought after you.","Your own buying never raises your own price."]},{"type":"paragraph","text":"So being right early pays, and chasing a player everyone already bought costs. A stake keeps counting for the people ahead of it after it is sold, once it has been held 15 minutes, so selling a stake held that long never lowers his price. A stake sold sooner stops counting."}]},{"id":"dt-orders","title":"Trading during the games","topics":["orders","batch","fill","delay","why the wait","price protection"],"body":"Once the games start, orders collect in batches of 60 seconds. Each batch fills 150 seconds after it closes, at the market price at that moment, and everyone in a batch pays the same price. Within a batch, sells and covers fill first, so a sale can pay for a buy placed beside it. You can cancel an order until its batch closes.\n\nWhy the wait: TV runs ahead of our live data. Filling after the data has caught up means the play you just watched is already in the price, so nobody can buy a touchdown before it counts.\n\n- Buy by dollars (the default) or by shares. By dollars you get as many whole shares as the money buys at the fill price.\n- Price protection cancels an order if the fill price moves more than the percentage you set. It never fills at a better price than the market.\n- There are no limit orders: every order fills at the market price.\n- Trading closes when the last game in the slate is final.","blocks":[{"type":"paragraph","text":"Once the games start, orders collect in batches of 60 seconds. Each batch fills 150 seconds after it closes, at the market price at that moment, and everyone in a batch pays the same price. Within a batch, sells and covers fill first, so a sale can pay for a buy placed beside it. You can cancel an order until its batch closes."},{"type":"paragraph","text":"Why the wait: TV runs ahead of our live data. Filling after the data has caught up means the play you just watched is already in the price, so nobody can buy a touchdown before it counts."},{"type":"bullets","items":["Buy by dollars (the default) or by shares. By dollars you get as many whole shares as the money buys at the fill price.","Price protection cancels an order if the fill price moves more than the percentage you set. It never fills at a better price than the market.","There are no limit orders: every order fills at the market price.","Trading closes when the last game in the slate is final."]}]},{"id":"dt-buying-power","title":"Buying power and limits","topics":["buying power","max","cash","limit","float"],"body":"Your buying power is your cash, less what is set aside for your shorts and everything you have queued, plus what your queued sales will bring in:\n\n    buying power = cash - short margin - queued buys - queued short margin + queued sales\n\nA buy uses its cost. A short sets aside 1.00x its value, so a $1,000 short uses $1,000, plus any loss your shorts are carrying (less any profit). The Max button fills in the most you can put into one order, and it can also be limited by the player's float: before kickoff, by the float he would have if every seat filled.","blocks":[{"type":"paragraph","text":"Your buying power is your cash, less what is set aside for your shorts and everything you have queued, plus what your queued sales will bring in:"},{"type":"formula","text":"buying power = cash - short margin - queued buys - queued short margin + queued sales"},{"type":"paragraph","text":"A buy uses its cost. A short sets aside 1.00x its value, so a $1,000 short uses $1,000, plus any loss your shorts are carrying (less any profit). The Max button fills in the most you can put into one order, and it can also be limited by the player's float: before kickoff, by the float he would have if every seat filled."}]},{"id":"dt-shorts","title":"Shorts","topics":["short","shorting","cover","negative","margin"],"body":"You can short a player, before kickoff or during the games, and cover to close it. A short gains when his price falls and loses when it rises.\n\n- A short moves only with how he plays. Its demand is fixed when it opens, so other people buying him cannot squeeze it.\n- You cannot be long and short the same player at once.\n- Nobody can open a position, long or short, in a player ruled out before his game, and nobody can open a new short in a player hurt or ruled out during his game until he returns. Once a player's game is final his price cannot move, so nobody can buy or short him either. Selling and covering are always allowed.\n- Margin call: if a price rise leaves your cash plus your shorts' profit or loss below 30% of what covering them would cost, enough of them are covered automatically, largest first, to bring you back to that level. Your order history marks those covers.\n- A price can jump past that level in one move, so a portfolio can still finish below zero. Below zero you can still sell and cover, but you cannot buy.","blocks":[{"type":"paragraph","text":"You can short a player, before kickoff or during the games, and cover to close it. A short gains when his price falls and loses when it rises."},{"type":"bullets","items":["A short moves only with how he plays. Its demand is fixed when it opens, so other people buying him cannot squeeze it.","You cannot be long and short the same player at once.","Nobody can open a position, long or short, in a player ruled out before his game, and nobody can open a new short in a player hurt or ruled out during his game until he returns. Once a player's game is final his price cannot move, so nobody can buy or short him either. Selling and covering are always allowed.","Margin call: if a price rise leaves your cash plus your shorts' profit or loss below 30% of what covering them would cost, enough of them are covered automatically, largest first, to bring you back to that level. Your order history marks those covers.","A price can jump past that level in one move, so a portfolio can still finish below zero. Below zero you can still sell and cover, but you cannot buy."]}]},{"id":"dt-outages","title":"When live stats stop","topics":["outage","paused","stats provider","feed"],"body":"If our stats provider stops sending live updates (no new stats or plays from any game in play for 4 minutes, not counting breaks between quarters), fills are paused and the app says so. You can still queue orders. They fill at the caught-up prices as soon as live stats are back, so nobody trades on stale prices.","blocks":[{"type":"paragraph","text":"If our stats provider stops sending live updates (no new stats or plays from any game in play for 4 minutes, not counting breaks between quarters), fills are paused and the app says so. You can still queue orders. They fill at the caught-up prices as soon as live stats are back, so nobody trades on stale prices."}]},{"id":"dt-winning","title":"Winning and results","topics":["winning","standings","results","rank","ties","trade log"],"body":"Standings are live portfolio values:\n\n    value = cash + longs at your sell price + shorts at (entry - cover price)\n\nTies share a place. An entrant who never trades is not ranked. Results freeze 20 minutes after the last game ends, to absorb late stat corrections, and are never changed after that.\n\nEvery trade is on the record. Everyone in the contest can see the full trade log (who traded which player, which side, how many shares and at what price) as each batch fills. Orders still waiting to fill stay private.","blocks":[{"type":"paragraph","text":"Standings are live portfolio values:"},{"type":"formula","text":"value = cash + longs at your sell price + shorts at (entry - cover price)"},{"type":"paragraph","text":"Ties share a place. An entrant who never trades is not ranked. Results freeze 20 minutes after the last game ends, to absorb late stat corrections, and are never changed after that."},{"type":"paragraph","text":"Every trade is on the record. Everyone in the contest can see the full trade log (who traded which player, which side, how many shares and at what price) as each batch fills. Orders still waiting to fill stay private."}]},{"id":"dt-contests","title":"Joining, leaving and weekly contests","topics":["join","leave","weekly","series","host","delete"],"body":"The host sets the slate and the size, and can rename or resize the contest until kickoff. You can leave before kickoff; after it, positions ride to the final whistle.\n\nA host can run a contest every week. When a week ends, next week's contest for the same slate is created and its members are entered automatically. You can skip a week by leaving it before kickoff, or turn off automatic entry. Anyone who was entered and did not trade is not entered again until they rejoin from the invite link.","blocks":[{"type":"paragraph","text":"The host sets the slate and the size, and can rename or resize the contest until kickoff. You can leave before kickoff; after it, positions ride to the final whistle."},{"type":"paragraph","text":"A host can run a contest every week. When a week ends, next week's contest for the same slate is created and its members are entered automatically. You can skip a week by leaving it before kickoff, or turn off automatic entry. Anyone who was entered and did not trade is not entered again until they rejoin from the invite link."}]}],"glossary":[{"term":"base price","definition":"A player's starting price, set from pre-season rankings. Never changes during the season."},{"term":"posted price","definition":"The price everyone sees and transacts at. Base price times the active multipliers."},{"term":"performance multiplier","definition":"Tracks actual points against projected points. The main driver of price."},{"term":"projection multiplier","definition":"Tracks changes in a player's rest-of-season outlook between games."},{"term":"demand multiplier","definition":"Optional per-league premium. In most leagues it reflects how much of a player's float the league owns; in a hardcore league, what other members bought ahead of you in the last 14 days."},{"term":"float","definition":"The total shares of a player that exist in your league: league size times 100."},{"term":"shares outstanding","definition":"How many of a player's shares are currently held by members."},{"term":"settlement","definition":"The daily process that updates multipliers and rebuilds prices after games go final."},{"term":"fill run","definition":"The batch that executes queued buy orders, in rotating member order."},{"term":"fill priority","definition":"Where one of your own pending orders sits in your personal queue."},{"term":"buying power","definition":"Cash minus everything already committed to pending buys. What you can actually spend."},{"term":"IPO","definition":"BallStreet's draft: multi-round, simultaneous, with a per-round spending cap."},{"term":"halted","definition":"The market is closed to execution because games are in progress. Orders still queue."},{"term":"locked","definition":"A player whose game has started this week. Cannot be bought or shorted."},{"term":"injury halt","definition":"A player listed IR, OUT, or inactive. Cannot be bought or newly shorted."},{"term":"short","definition":"A position that profits when a player's price falls. Margin-backed; no fee to hold."},{"term":"cover","definition":"Closing a short position."},{"term":"BallStreet Bucks","definition":"The in-game currency. Not real money and not redeemable."},{"term":"hardcore league","definition":"A league whose market stays open during games. Prices move live and every order fills in a batch."},{"term":"batch","definition":"In a hardcore league, the orders placed in one 60-second window, filled together 150 seconds later at one price per player."},{"term":"market day","definition":"In a hardcore league, the day demand is counted by: 4:15 AM to 4:15 AM Eastern. Everyone who buys a player on the same market day counts as buying together."},{"term":"Day Trading","definition":"One-day contests over a slate of games. The market stays open while they are played, everyone starts with the same cash, and the best portfolio at the final whistle wins."},{"term":"slate","definition":"The games a Day Trading contest covers: Thursday night, the Sunday main games, all of Sunday, Sunday night or Monday night."}],"faq":[{"question":"Why did my player's price change when he didn't play?","answer":"His rest-of-season outlook changed. Between games, price tracks the projection for the remainder of his season, so a downgrade or an upgrade moves the price without a snap being taken. See the projection multiplier.","topics":["projection","price","didn't play"]},{"question":"Why did my player score a lot and barely move?","answer":"Price moves on the gap between actual and projected points, not on raw points. A star who was projected for 20 and scored 24 beat his number by a little. A backup projected for 4 who scored 12 tripled his.","topics":["performance","price"]},{"question":"Why can't I buy this player?","answer":"One of four reasons: he is listed IR/OUT/inactive, his game has already started this week, every share is currently held, or your buying power is lower than you think because cash is committed to pending buys.","topics":["cannot buy","halted","float"]},{"question":"When do prices update?","answer":"At settlement, early each morning after that day's games go final. Not on individual trades. Projection changes can also move a price between settlements.","topics":["settlement","prices"]},{"question":"Does buying a lot of a player push his price up?","answer":"Not immediately, and never for you. There is no per-trade price impact. In leagues using demand, heavy ownership raises the price at the next weekly recalculation -- and your own shares are excluded when your position is valued, so you cannot inflate your own holdings. In a hardcore league with demand, your buying raises the price for members who buy after you, from the next market day, and never your own.","topics":["demand","price impact"]},{"question":"Is it better to place my order early?","answer":"No. Queued buys all fill in the same run at the same price, and the order in which members fill rotates each cycle. The only ordering you control is among your own pending orders, which matters when you have queued more than your cash covers. In a hardcore league with demand, what counts is the market day: buying a day before other members earns you their premium, and within the same day it makes no difference.","topics":["orders","timing","queue"]},{"question":"My order is still pending. Did it fail?","answer":"Probably not. Buys queue by design and fill at the next run. A sell or cover of a player who has already played this week also waits, until after the weekly close. You can cancel a pending order any time before it fills.","topics":["orders","pending"]},{"question":"Can I trade during games?","answer":"In a hardcore league, or in Day Trading. There the market stays open, prices move as each game is played, and every order fills about 150 seconds after its 60-second batch closes, at the price then. In every other league the market halts for games and orders wait for it to reopen.","topics":["hardcore","trade during games","live"]},{"question":"Is BallStreet free, and is real money involved?","answer":"Free to play, and no. Balances are BallStreet Bucks with no cash value and the app processes no payments. If your league collects dues, the commissioner handles that outside the app.","topics":["money","free","dues"]},{"question":"Can I use an AI assistant to manage or explain my team?","answer":"Yes. Create an API key at https://ballstreetleague.com/dashboard/api-keys/ and connect the ballstreet-mcp server. A read-only key lets an assistant explain your league without being able to trade. Keys that can trade mark your team with a visible BOT tag.","topics":["ai","mcp","bot","api"]}]}