# The Tennis Desk docs, every page > Every page of https://thetennisdesk.com/docs, as Markdown, in the order of its sidebar. Each page is also served alone at its address plus .md. # The Tennis Desk docs > How to find your Desk level, scout a team, plan a lineup and ask about any team the Desk covers, with every page listed. Use these docs to find your [Desk level](https://thetennisdesk.com/docs/desk-level), scout a team, plan a lineup and ask about any team The Tennis Desk covers. Your Desk level is the Desk's estimate of how you play now. ## Start here - [What the Desk is](https://thetennisdesk.com/docs/what-the-desk-is), and how it relates to USTA - [Ask the chat](https://thetennisdesk.com/docs/ask-the-chat) - [Connect an agent](https://thetennisdesk.com/docs/connect-an-agent), to ask free questions without a key ## Guides - [Follow your level](https://thetennisdesk.com/docs/follow-your-level) - [Understand a bump](https://thetennisdesk.com/docs/understand-a-bump), the year-end move up a level - [Scout an opponent](https://thetennisdesk.com/docs/scout-an-opponent), for free - [Plan a lineup](https://thetennisdesk.com/docs/plan-a-lineup) - [Send the announcement](https://thetennisdesk.com/docs/send-the-announcement) - [Buy and manage the Desk Pass](https://thetennisdesk.com/docs/buy-and-manage-the-desk-pass), or cancel it - [Report something wrong](https://thetennisdesk.com/docs/report-something-wrong), or ask to have your name withheld - [Ask the chat good questions](https://thetennisdesk.com/docs/ask-the-chat-good-questions) ## How it works - [Desk level](https://thetennisdesk.com/docs/desk-level), the number on your player page - [What the Desk covers, and when it updates](https://thetennisdesk.com/docs/coverage-and-data-runs) - [Where the data comes from](https://thetennisdesk.com/docs/where-the-data-comes-from) - [The Desk Pass](https://thetennisdesk.com/docs/desk-pass), what stays free and what you pay for - [How the forecast works](https://thetennisdesk.com/docs/how-the-forecast-works) - [How accurate the forecast has been](https://thetennisdesk.com/docs/forecast-accuracy) - [Bumps and year-end ratings](https://thetennisdesk.com/docs/bumps-and-year-end-ratings) - [Does my match count toward my NTRP rating?](https://thetennisdesk.com/docs/does-my-match-count) - [How do NorCal league playoffs work?](https://thetennisdesk.com/docs/how-norcal-playoffs-work) - [Privacy](https://thetennisdesk.com/docs/privacy), what's kept about you and for how long ## Reference - [Player page](https://thetennisdesk.com/docs/player-page) - [Team page](https://thetennisdesk.com/docs/team-page) - [Match page](https://thetennisdesk.com/docs/match-page) - [League page](https://thetennisdesk.com/docs/league-page) - [Club page](https://thetennisdesk.com/docs/club-page) - [The chat's limits and refusals](https://thetennisdesk.com/docs/chat-limits-and-refusals) - [Agent tools](https://thetennisdesk.com/docs/agent-tools) - [Glossary](https://thetennisdesk.com/docs/glossary) - [Questions about the Desk](https://thetennisdesk.com/docs/faq) - [Changelog](https://thetennisdesk.com/docs/changelog), one short list a week ## Read these docs as an agent Add .md to a page's address for its Markdown copy, as in `/docs/desk-pass.md`. [The full docs file](https://thetennisdesk.com/docs/llms-full.txt) holds every page in one file. Source: https://thetennisdesk.com/docs --- # What the Desk is > What The Tennis Desk does, what you can do with it, how it relates to USTA, and the research it publishes. The Tennis Desk follows USTA NorCal league tennis in parts of Northern California. It builds a page for each player, team, match and league from USTA's published results. Each player gets a Desk level, the Desk's estimate of how they're playing now, once they've played a line with a winner. ## What you can do here - Look up any player, team, match or league with no account. Start from [Browse](https://thetennisdesk.com/browse), or type a club name like Belvedere in [Search](https://thetennisdesk.com/search). - [Follow your Desk level](https://thetennisdesk.com/docs/follow-your-level), the Desk's estimate of how you're playing now. - [Scout a team](https://thetennisdesk.com/docs/scout-an-opponent) before you play it, for free. - [Ask the chat](https://thetennisdesk.com/docs/ask-the-chat) in your own words, or [connect your own agent](https://thetennisdesk.com/docs/connect-an-agent). - A [Desk Pass](https://thetennisdesk.com/docs/desk-pass) adds your win chance on each line before you play, when both teams are on the Desk. ## How it relates to USTA The Tennis Desk is not affiliated with USTA. The NTRP ratings on the Desk's pages are USTA's, from the rosters USTA publishes ([what the letters mean](https://thetennisdesk.com/docs/where-the-data-comes-from#what-the-letters-after-a-rating-mean)). A Desk level is the Desk's own number, on the same scale as an NTRP rating ([how the two compare](https://thetennisdesk.com/docs/desk-level#how-a-desk-level-compares-with-your-ntrp-rating)). ## Read the Desk's research The Desk also publishes research on the league as a whole. Each piece answers one question from the Desk's own results. - [Does winning move you up a level?](https://thetennisdesk.com/research/does-winning-move-you-up-a-level) - [Does the home team really win more?](https://thetennisdesk.com/research/does-the-home-team-really-win-more) - [Does winning at sectionals decide who gets bumped?](https://thetennisdesk.com/research/does-sectionals-decide-who-gets-bumped) - [Where do you have to finish to get bumped?](https://thetennisdesk.com/research/where-do-you-have-to-finish-to-get-bumped) - [What happens after a bump?](https://thetennisdesk.com/research/what-happens-after-a-bump) - [Does putting your best pair on line 1 win more matches?](https://thetennisdesk.com/research/does-putting-your-best-pair-on-line-1-win-more-matches) ### How a research piece is made Each piece starts from a question league players ask again and again, on tennis forums, in the chat and in searches, so it answers what readers want to know. The Desk answers it by counting match results, and each figure comes from a query that is run twice because both runs must agree. No piece is written when the results can't answer the question, because a guess is not a finding. A person reads and approves every piece before it's published, so nothing reaches a reader unchecked. Source: https://thetennisdesk.com/docs/what-the-desk-is --- # Ask the chat > What the Desk's chat can answer, what needs a Desk Pass, and how often you can ask. Ask the chat on the [front page](https://thetennisdesk.com/) about any team, player or league the Desk covers, in your own words and with no account. ## What you can ask The chat can look up any of these for you, where a [Desk level](https://thetennisdesk.com/docs/desk-level) is the Desk's estimate of how a player is playing now: - a team's roster with each player's Desk level and recent form - how two teams have done head-to-head - a player's record and trend - where a team stands in its league Name a team in full, like BELVEDERE TC 18AM4.0A, because a shorter name can match several teams. A club's name alone, like Belvedere, gets you a list of its teams. Ask how a club is doing this season, and the chat answers from its [club page](https://thetennisdesk.com/docs/club-page), so it matches what you'd see there. On a club page, **Brief me in the chat** puts a question about the club's week in the chat's box. Press Enter to ask. When you're signed out, the chat answers with up to 3 facts. The [club briefing](https://thetennisdesk.com/docs/club-page#brief-me-in-the-chat) counts as one question. Signed in, the chat usually answers in one or two sentences, and any table under the answer comes from the Desk's records. Names in the answer link to their Desk pages. ## Ask about the Desk itself Ask what a Desk level is, and the chat can use these docs to answer. If you're signed out and no paragraph fits, the chat says: > The chat says: “For questions about the Desk itself, read its docs.” A question about the Desk counts toward your limits when the chat's AI answers it. A hello, a thanks or a bye never does, because the chat sends a set reply to each with no AI. Say hello, and the chat replies: > The chat says: “Hi. I look up USTA NorCal league tennis from recorded match results, and I answer questions about the Desk from its docs.” Under it, each of these buttons asks its question for you: - “What can you look up?” - “Which leagues and levels do you cover?” A thanks or a bye gets one of these: > The chat says: “You're welcome. Ask me anything else about a team, a player or the Desk.” > The chat says: “Bye. Come back any time.” ## Ask for a forecast With an email sign-in, your first forecast each week is free, but more forecasts need a [Desk Pass](https://thetennisdesk.com/docs/desk-pass). A “Scout” question asks for a written analysis of a match, which needs a Desk Pass. Every other answer is free, except a team's [playoff chances](https://thetennisdesk.com/docs/ask-the-chat#ask-about-the-playoffs), which need one too. Ask in your own words for any of these: - your [win chance](https://thetennisdesk.com/docs/how-the-forecast-works) on each line of a team match - who has played most for your team - who would win between two players, or two pairs, that you name When a forecast needs a pass, the chat [says why](https://thetennisdesk.com/docs/chat-limits-and-refusals#a-forecast-without-a-pass), names your next match if it knows one, and offers the pricing page. It also links a free scout, so you can look at the team you named, or else your next opponent. ## Ask about the playoffs Signed in, you can ask how a team could still reach the playoffs, even with no Desk Pass. The chat shows the team's place, its matches left and how many of them it must win to get there. A Desk Pass adds each team's playoff chances. ## How often you can ask The chat has a [daily and a monthly limit](https://thetennisdesk.com/docs/chat-limits-and-refusals#how-many-questions-you-can-ask) on questions, and when you're signed in, your count follows your account. With a Desk Pass, forecasts also have a [weekly limit](https://thetennisdesk.com/docs/desk-pass#how-many-forecasts-you-get), which the chat and any [agent you connect](https://thetennisdesk.com/docs/connect-an-agent) share. ## Share an answer Signed in, choose **Share** under an answer to send its link, which shows your question, the answer and its tables. On a phone it opens your share options, but on a computer it copies the link. You can't share a paid answer, or one that shows a percentage. If it came with a report, **Share** sends the report alone. ## What happens to your questions The Desk stores each question with the chat's answer. It also records how its pages are used, including what you type, and you can read [what it keeps, and for how long](https://thetennisdesk.com/docs/privacy). Source: https://thetennisdesk.com/docs/ask-the-chat --- # Connect an agent > Connect Claude Code, Cursor, ChatGPT or another MCP client to the Desk, and learn what your agent can ask with a key or without one. Any MCP (Model Context Protocol) agent can ask the Desk free questions, such as a team's record, with the Desk's MCP server address alone. For forecasts and your own teams, sign in from your app with your email, or send a free key. ChatGPT and the Claude app connect with the address alone and sign you in when a question needs you. [Use the Desk in ChatGPT](https://thetennisdesk.com/docs/use-the-desk-in-chatgpt) has their steps. ## Get a key Make your key on the [agent page](https://thetennisdesk.com/#/mcp): 1. Choose **Sign in to get a key** and sign in. 2. Choose **Get a key**. The page shows your key once and the Desk keeps no copy, so save it like a password. 3. Choose **Copy setup prompt with your key** and paste the prompt into your agent. You hold one key at a time, so choosing **Make a new key** turns off the old one. To turn your key off without replacing it, choose **Revoke key**. ## Connect Claude Code You can sign in with your email instead of a key, so no key sits in Claude Code's settings file. Run this command, then run `/mcp` in Claude Code, choose the Desk and sign in: ``` claude mcp add -s user --transport http tennisdesk \ https://thetennisdesk.com/api/mcp ``` But to use a key, run this command. It adds the Desk to Claude Code in every folder, not only the one you run it in. Put your key in place of `` on its last line: ``` claude mcp add -s user --transport http tennisdesk \ https://thetennisdesk.com/api/mcp \ --header "Authorization: Bearer " ``` But that command saves your key as plain text in Claude Code's settings file. To keep it out, put your key in an environment variable named `TENNISDESK_KEY` and run this command instead: ``` claude mcp add -s user --transport http tennisdesk \ https://thetennisdesk.com/api/mcp \ --header 'Authorization: Bearer ${TENNISDESK_KEY}' ``` ## Connect Cursor Add this to `.cursor/mcp.json`, with your key in place of ``: ``` { "mcpServers": { "tennisdesk": { "url": "https://thetennisdesk.com/api/mcp", "headers": { "Authorization": "Bearer " } } } } ``` ## Connect another MCP client Point your client at `https://thetennisdesk.com/api/mcp` for free questions with no key, but for your teams or forecasts, sign in or send the header `Authorization: Bearer ` with each request. ## Can ChatGPT or the Claude app connect? Yes, on the web, on a computer or on a phone. Add the Desk by its address, as [Use the Desk in ChatGPT](https://thetennisdesk.com/docs/use-the-desk-in-chatgpt) shows. Free questions need no sign-in. For a forecast or your own teams, the app asks you to sign in to the Desk with your email, and then asks as you. ## Check that it worked Ask your agent to list the Desk's tools, which costs none of your calls, and if `plan_lineup` is on the list, your agent can reach the Desk. ## What your agent can ask Your agent can look up records, rosters, [Desk levels](https://thetennisdesk.com/docs/desk-level) and standings for covered players, teams, clubs and leagues, with or without a key. [Agent tools](https://thetennisdesk.com/docs/agent-tools) lists each tool with a question to ask it. You can name a team, a player or a club by pasting the link to its Desk page. A link also settles which player you mean when two share a name. One `query_club` call returns what a [club page](https://thetennisdesk.com/docs/club-page) shows, including, for each team with a team match left, whether it [can still finish first](https://thetennisdesk.com/docs/club-page#teams-by-league). Call `query_club` with `briefing` set to true for [the club's week](https://thetennisdesk.com/docs/club-page#the-week) instead: its team matches in the 7 days from the call, and the club page's checks. Your agent can also read these docs with `read_docs`. Your agent can also fill in USTA NorCal's forms, [step by step](https://thetennisdesk.com/docs/norcal-forms). The Desk keeps what your agent asks, and also sends it to PostHog, one of the [services that help run the site](https://thetennisdesk.com/docs/privacy#helpers). ## How many calls your agent gets Your account gets 40 tool calls a day and 150 a month, free, with or without a Desk Pass. The count follows your account, not the key, so a new key keeps the count the old one had. A `read_docs` call doesn't count toward the day's or month's calls, so your agent can still read the docs after it reaches either limit. Your agent's calls are counted apart from your [questions in the chat](https://thetennisdesk.com/docs/chat-limits-and-refusals#how-many-questions-you-can-ask). ## Get forecasts in your agent Your agent asks for a forecast with these tools: - plan_lineup - predict_matchup - project_standings - scout_team With a Desk Pass, your agent gets the whole forecast. Your key shares your free weekly forecast with the chat if your account has an email address. After that, a forecast tool returns `free_forecast_used`, which comes with a link to the pricing page. Your agent's forecasts share the chat's [weekly limit](https://thetennisdesk.com/docs/desk-pass#how-many-forecasts-you-get), and [How the forecast works](https://thetennisdesk.com/docs/how-the-forecast-works) says what each one shows. ## When your agent hits a limit When your agent reaches a limit, the Desk tells it why, so it can tell you. A refused call still counts toward the day's calls, so a forecast your agent asks for after the week's run out uses one too. **For developers: errors and status codes** - With a key the Desk doesn't recognize, before any call runs: HTTP 401, with the error `mcp_key_not_recognized`, which says what to do next. - With an OAuth sign-in that expired or was revoked: HTTP 401, with the error `invalid_token`. Your app refreshes it or signs you in again. - At the daily or monthly call limit: `quota_exceeded`, and the result names the limit it reached. - When your free forecast this week is used: `free_forecast_used`. The result says when the next one comes. - On a key with no account behind it: `desk_pass_required`. - At the weekly forecast limit: `forecast_limit_reached`. The result carries the [chat's message](https://thetennisdesk.com/docs/chat-limits-and-refusals#what-the-chat-says-when-it-stops) and one more line, which says each call until your forecasts come back still counts against the day's calls. - When the Desk can't check your week's forecasts: `forecast_check_failed`. With no key and no sign-in, a tool that answers about you or runs a forecast doesn't run. It returns `sign_in_required`, and every other tool still answers. What comes back, and what to do, depends on the client. | Client | What it gets | What to do | | --- | --- | --- | | ChatGPT | HTTP 200, a tool result with `isError` set and a sign-in challenge in its `_meta` | Nothing: ChatGPT asks the person to sign in | | The Claude app | HTTP 401, with a `WWW-Authenticate` header that names the OAuth metadata | Nothing: the app asks the person to sign in | | Claude Code | The same HTTP 401 | Run `/mcp`, choose the Desk and sign in, or [connect with a key](https://thetennisdesk.com/docs/connect-an-agent#connect-claude-code) | | Cursor | The same HTTP 401 | Add your key, as in [Connect Cursor](https://thetennisdesk.com/docs/connect-an-agent#connect-cursor) | | Another MCP client | The same HTTP 401 | Sign in with OAuth from that header, or [send your key](https://thetennisdesk.com/docs/connect-an-agent#connect-another-mcp-client) | A counted forecast says how many are left this week in `forecastsLeftThisWeek`. A call refused at a limit comes back as a tool result, with HTTP 200 and `isError` set, not as a 401, 403 or 429. A key that sends too many requests in a day is the one exception: it gets HTTP 429, with the error `too_many_requests`. Pings, tool lists and docs reads all count toward that limit, though they don't count as calls. Source: https://thetennisdesk.com/docs/connect-an-agent --- # Use the Desk in ChatGPT > Add the Desk to ChatGPT or the Claude app with one address, ask about any team or player with no sign-in, and sign in for your own teams. Add the Desk to ChatGPT or the Claude app with one address, then ask about any team or player [the Desk covers](https://thetennisdesk.com/docs/coverage-and-data-runs), with no sign-in. For a forecast or your own teams, you [sign in with your email](https://thetennisdesk.com/docs/use-the-desk-in-chatgpt#sign-in-for-your-own-teams). ## Add the Desk to ChatGPT The Desk's address is: ``` https://thetennisdesk.com/api/mcp ``` 1. On the web, open ChatGPT's plugins page, `chatgpt.com/plugins`, choose the plus button, then Add custom MCP server. 2. Name it The Tennis Desk, paste the address under Connection, and choose OAuth. 3. Accept the warning, then choose Create as a plugin. Then ask ChatGPT about a team you know. ## Add the Desk to the Claude app 1. At claude.ai, open Settings, then Connectors, and choose Add custom connector. 2. Name it The Tennis Desk, paste the same address, and choose Add. Nothing under Advanced settings needs filling in. The connector then works in the Claude app on your phone and computer too, so you add it once. ## What you can ask Your agent can look up records, rosters, standings and [Desk levels](https://thetennisdesk.com/docs/desk-level) for any team or player the Desk covers. A Desk level is the Desk's estimate of how a player is playing now. [Agent tools](https://thetennisdesk.com/docs/agent-tools) has a question to try for each tool. Forecasts and your own teams need you [signed in](https://thetennisdesk.com/docs/use-the-desk-in-chatgpt#sign-in-for-your-own-teams). Past your free forecast each week, you get the free part of the answer, but ChatGPT then says the rest needs a [Desk Pass](https://thetennisdesk.com/docs/desk-pass), the Desk's paid plan. In the Claude app you also get [a link to buy the pass](https://thetennisdesk.com/docs/buy-and-manage-the-desk-pass#buy-from-your-agent), which is tied to your account. Sign in with a pass, and ChatGPT gives you every answer in full too. ## Sign in for your own teams When you ask about your own teams or for a forecast, your app opens a Desk page to sign you in, because those answers are about you. 1. Check that the page names your app. Then type your email and choose Email me a code. 2. Type the 6-digit code from the email and choose Sign in. 3. Choose Continue, and you're back in your app. Your app then asks the Desk as you, on the Desk account with the email you typed. If no Desk account has that email, signing in makes one. To stop an app, choose Revoke beside it on the [agent page](https://thetennisdesk.com/#/mcp). ## How many calls you get Each ChatGPT account gets 40 tool calls a day and 150 a month, which are counted apart from [your questions in the Desk's chat](https://thetennisdesk.com/docs/chat-limits-and-refusals#how-many-questions-you-can-ask). One question can take two or three calls, because your agent may find the team first. In the Claude app, each conversation gets 40 calls a day. Signed in, you get your own 40 a day and 150 a month, which no one else uses up. A day's calls come back at midnight Pacific time, and a month's on the 1st. Source: https://thetennisdesk.com/docs/use-the-desk-in-chatgpt --- # Follow your level > Find your player page, read your Desk level and which way it's moving, and check your record, lines and partners. Your player page shows your [Desk level](https://thetennisdesk.com/docs/desk-level), the Desk's estimate of how you're playing now, and how it moved this year. ## Find your page Type your name in [Search](https://thetennisdesk.com/search), or open your team in [Browse](https://thetennisdesk.com/browse) and choose your name on its roster. ## Read your level Your level is the first number at the top of your page, and its label gives the date the Desk last read USTA's results. Read it against [the range your NTRP rating covers](https://thetennisdesk.com/docs/desk-level#how-a-desk-level-compares-with-your-ntrp-rating): a 4.0 rating covers Desk levels between 3.50 and 4.00. ## See which way it's moving After your level, an arrow and **up** or **down** show which way it has moved this year. They appear once it has moved at least 0.30, because [a smaller move is often chance](https://thetennisdesk.com/docs/desk-level#what-up-or-down-after-a-level-means). The chart beside your level plots it after each [rated line](https://thetennisdesk.com/docs/desk-level#how-a-rated-line-moves-your-level) you played this year, over a shaded strip for your NTRP rating's range. ## Check your record, lines and partners - “2026 record” is your wins and losses on rated lines. - **Every year** opens your record for each year, on one page. - “Recent lines” lists your rated lines, newest first. - “2026 by league” gives your record in each league. It puts the Desk's count beside your roster's, which [can differ](https://thetennisdesk.com/docs/player-page#desk-and-roster). - “Partners · lines together” lists the doubles partners you've played with most. - Under “Your season, written”, choose **Read your Year in Review** when you're signed in and the page is yours. ## If your page shows no level “No Desk level yet” means the Desk has no rated line for you yet. If another player shares your name, read [a shared name](https://thetennisdesk.com/docs/player-page#a-shared-name), and if something looks wrong, [report it](https://thetennisdesk.com/docs/report-something-wrong). ## Does your level predict a bump? No. The Desk [doesn't predict a bump for anyone](https://thetennisdesk.com/docs/bumps-and-year-end-ratings#does-the-desk-predict-bumps), and whether your NTRP rating moves up at the end of the year is USTA's decision. Source: https://thetennisdesk.com/docs/follow-your-level --- # Understand a bump > What a bump is, what the Desk's research found about who moved up, and how to follow your own year. A bump is USTA moving your NTRP rating up a level at the end of the year, when it publishes its computer ratings. The Desk [doesn't predict who will be bumped next](https://thetennisdesk.com/docs/bumps-and-year-end-ratings#does-the-desk-predict-bumps), but its research looks back at how past players did. ## What has the research found? There are four research pieces on bumps, and each one's rates are about its group of past players as a whole: - [Does winning move you up a level?](https://thetennisdesk.com/research/does-winning-move-you-up-a-level) - [Does winning at sectionals decide who gets bumped?](https://thetennisdesk.com/research/does-sectionals-decide-who-gets-bumped) - [Where do you have to finish to get bumped?](https://thetennisdesk.com/research/where-do-you-have-to-finish-to-get-bumped) - [What happens after a bump?](https://thetennisdesk.com/research/what-happens-after-a-bump) You'll find every research piece under [Research](https://thetennisdesk.com/research). ## Follow your own year [Your player page](https://thetennisdesk.com/docs/follow-your-level) charts your [Desk level](https://thetennisdesk.com/docs/desk-level), the Desk's estimate of how you play now, through the year, over a strip for the range your NTRP rating covers. After a bump, your Desk level [moves part way toward about the middle of the new range](https://thetennisdesk.com/docs/desk-level#when-usta-moves-your-ntrp-rating) at your first match after it, if it's below that point. Source: https://thetennisdesk.com/docs/understand-a-bump --- # Scout an opponent > Open the free scout of any team the Desk covers, see who is playing best and in form, and see how strong the team is on each line. To scout a team, open its team page and choose **See this roster by playing level**. It's free, and you don't need an account. ## Open the scout 1. Find the team in [Search](https://thetennisdesk.com/search) or [Browse](https://thetennisdesk.com/browse), and open its team page. 2. Under the roster, choose **See this roster by playing level**. 3. Read the players in groups by [Desk level](https://thetennisdesk.com/docs/desk-level), the Desk's estimate of how a player is playing now, highest first. You can also ask the chat “Who plays for BELVEDERE TC 18AM4.0A?” for free. Type “Scout” and a team's name in the chat for a written analysis, but that needs a [Desk Pass](https://thetennisdesk.com/docs/desk-pass). ## What to look for Start with the first group, because these players are playing best right now. - **Form**: each player's last 5 lines for this team, newest first, W for a win and L for a loss. A * marks a line the other side couldn't field. - **Record**: each player's wins and losses for this team, as its roster shows them. If someone asked to have their name withheld, the scout counts them but doesn't name them. ## See how strong they are on each line With a [Desk Pass](https://thetennisdesk.com/#/pricing?from=docs_scout_an_opponent), you get your win chance on each line against a team, when your team is on the Desk too. Beside each chance, you see how strong they've been on that line this season. Before the scouted team's next match this season, **Get a free forecast** puts a question about that match in the chat's box, so you only press Enter. With an email sign-in, your first forecast each week is free. Source: https://thetennisdesk.com/docs/scout-an-opponent --- # Plan a lineup > Ask for each line's win chance against another team, see who has played most for your team, tell it who's out, and read what it gives you. With a Desk Pass, you see your win chance on each line against another team, and who has played most for your team. ## Ask for a forecast - **In the chat.** Name each team in full, as in “What are BELVEDERE TC 18AM4.0A's chances against MILL VALLEY 18AM4.0A?” - **From your own agent.** [Your agent](https://thetennisdesk.com/docs/connect-an-agent#get-forecasts-in-your-agent) uses the `plan_lineup` tool. - **In your team's announcement.** With a Desk Pass, the announcement page adds a suggested lineup. [Each line shows a win chance](https://thetennisdesk.com/docs/send-the-announcement#add-a-suggested-lineup) when the other team is on the Desk too. Every forecast counts toward a [weekly limit](https://thetennisdesk.com/docs/desk-pass#how-many-forecasts-you-get), which the chat and your agents share. ## Tell it who's out Tell the chat who's away, like “Jane is out this week”, and your win chances [move most on the lines they've played](https://thetennisdesk.com/docs/how-the-forecast-works#how-it-reads-your-own-team). ## Give it your lineup Say “Ann and Bea play Doubles 1” in the chat, so the win chances follow your picks. The forecast uses who has played a line if you omit it or give a name it can't place. Your agent can also use the lineup you name. ## Suggested pairs Signed in, the chat and [your agent](https://thetennisdesk.com/docs/connect-an-agent) suggest doubles pairs. For Combo and 55, 65 and 70 and over teams, the Desk picks each line's strongest pair by [Desk level](https://thetennisdesk.com/docs/desk-level) that the league allows. For other teams, Mixed included, the Desk ranks your players by Desk level, and the chat or your agent pairs them. Anyone you say is away is left out. A pair has no win chance, so check it before you send your lineup. ## Read the forecast When both teams are on the Desk, you see each line's win chance and expected lines won. Beside each chance, you see how strong the other team has been on that line, as a [Desk level](https://thetennisdesk.com/docs/desk-level), the Desk's estimate of how players are playing now. The forecast reads who each team has played so far ([how it works](https://thetennisdesk.com/docs/how-the-forecast-works#how-it-reads-each-teams-level-on-a-line)), so check it against who's free this week. ## Scout for free instead A team's roster, record, head-to-head record and [scout](https://thetennisdesk.com/docs/scout-an-opponent) are free. Each line's win chance comes with a [Desk Pass](https://thetennisdesk.com/#/pricing?from=docs_plan_a_lineup). Source: https://thetennisdesk.com/docs/plan-a-lineup --- # Send the announcement > Copy or email your team's announcement for its next match, from the team page or your own teams, and add a suggested lineup. The Desk writes a short message about your team's next match. You send it yourself, from your own email or chat, so nothing goes out from the Desk. ## Copy it from the team page On the team page, tap “Announcement for the club” under the summary, then choose **Copy the announcement**, or **Email the announcement** to open it in your email app. It shows only when the team has a match on the schedule, but it needs no account. The text says who your team plays, home or away, and when. It names none of the other team's players and gives no [Desk level](https://thetennisdesk.com/docs/desk-level), the Desk's estimate of how a player is playing now. It ends with a link to the team page, after “Roster, every match and the schedule:”. ## Open it from your teams Signed in, choose **Announcement for the next match** beside a team in the sidebar, and the page shows “The text, as it will be sent” with the same two buttons. ## When there's no announcement When the page can't write one, it says why: > The page says: “Create a free account with your email to write your team's announcement. You also get 1 free forecast a week.” > “This is not one of your teams this season.” > “No match is on the schedule for this team yet.” ## Add a suggested lineup With a [Desk Pass](https://thetennisdesk.com/docs/desk-pass), the paid plan, the announcement page adds “Suggested lineup”, with each line's win chance when the Desk covers the other team too. Its table gives your chance to win each line under “Your chance”, your players' Desk level there under “Your level”, and the other team's under “Their level”. The text you send keeps the chances but leaves the levels out. Without a pass, **Add the suggested lineup** opens the pricing page. A line where you change a name loses its win chance, because the chance comes from who has played that line. The page marks that line “Changed, so no win chance”. Sometimes the Desk has no lineup or no win chances to suggest, and the page tells you which. > The page says: “The Desk has no recorded lineup for this team yet, so there is no suggested lineup.” > “No win chances for this match: one or both teams have too few players with a Desk level.” In a Combo, Mixed or 55 and over league, each suggested pair's NTRP ratings add up to the league's level or less, and are at most 1.0 apart. When no pair the Desk can check fits a line, that line comes empty with the reason under it, and you fill it yourself. A player whose rating the Desk doesn't hold is named under the lineup, so you can check that pair before you send it. Source: https://thetennisdesk.com/docs/send-the-announcement --- # Use the Desk with NorCal forms > Let your own agent fill in the lineup, score and match date forms on the USTA NorCal league site, with the Desk's values and checks. Your own agent can fill in the lineup, score and match date forms on the USTA NorCal league site, with values and checks from the Desk. The Desk never signs in to USTA, so you press the last button on each form, or your agent does in your own browser. Your lineup uses each player's [Desk level](https://thetennisdesk.com/docs/desk-level), the Desk's estimate of how they're playing now. ## What you need - Your own sign-in to the USTA NorCal league site, in the browser your agent works in. - A Desk key for your agent, which you make on [Connect an agent](https://thetennisdesk.com/docs/connect-an-agent). Know the one risk before you start: USTA's terms ban automated scripts and hold you responsible for everything done under your account. If your agent reads the NorCal site for you, you take that risk. The Desk never asks for your USTA password, and its answers leave out every player's phone number and email. Each path below starts after the league site's address. ## Read who can play Your players answer each match on the availability grid, at `league_reg/teamroster_availability.asp?id=`. Your agent reads the grid in your signed-in browser and sends the Desk each player's answer, so you never copy it yourself. Or tell the chat who can play, and for which match. Each answer is in USTA's own words, which are these: - No - yes - maybe - call last - First shift only - Second shift only A player who hasn't answered yet stays out of the lineup, but the Desk lists them separately, so you can ask them before the match. ## Set the lineup 1. Your agent sends your team, the match and each player's answer to `plan_lineup_from_availability`. 2. The Desk fills the lines with players who said yes first, then players free for one shift, then those who asked to be called last, then the maybes. It never picks a player who said No. 3. Your agent opens the lineup form, at `league_reg/lineup_edit.asp?matchid=&teamid=`, and picks each player by the USTA player id the Desk gives. 4. Your agent reads the lineup back to you, line by line, and you press **Save**. Among players who gave the same answer, the one with the higher [Desk level](https://thetennisdesk.com/docs/desk-level) goes first. Each player keeps their usual line where they can. Sometimes a name you gave matches a roster player only in part, such as a last name alone. The Desk then flags that player, so confirm it's the right one before your agent picks them. Before your agent saves, it checks these with you: - The players on each line, read back by name. - Whether to hide the lineup from the team. - Any pre-match notes. The lineup is free. Each line's win chance uses one of your forecasts, so your first each week is free and the rest need a [Desk Pass](https://thetennisdesk.com/docs/desk-pass). ## Post a home match date As the home captain, you post each home match's date on the post-dates form, at `leagues/onlinescheduling.asp?teamid=`, so the other team knows when to play. 1. Your agent sends your team, the match, and the date and start time you want to `match_date_check`. 2. The Desk checks that the form offers that start time, that the format suits your team's lines, and that your team has no other match that day. 3. Your agent fills in the row and reads it back to you. 4. You press **Submit**, or tell your agent to. Pressing Submit on the post-dates form emails the other team at once and posts the match on the team page. After that, the time can change only with the other captain's agreement or for weather. Before your agent submits, it checks these with you: - The date, the start time and the format, read back. - That the other captain agrees, when the date moves a set match. - That the member knows Submit emails the other team at once. The form offers a start time every 15 minutes, from 8:00 AM to 8:00 PM. A split format plays some lines in a first shift and the rest later, so it needs a second start time. The formats it offers are these: - All 3 - 2/1 - 1/2 - All 5 - 3/2 - 2/3 - 4/1 - 1/4 The Desk does not hold your area's deadline for posting home match dates. It is in the notes on your team page, or under League Resources. ## Enter the score Either captain can enter the score, from the score link beside the match on your team's schedule. The form's path is `scorecardentry.asp?l=:&s=&hid=&vid=&n=&action=insert&a=`. 1. Tell the chat or your agent each line's players and set scores, from your team's side. 2. Your agent sends them to `prepare_score_entry`, which writes each set from the winning team's side. 3. The Desk enters a third set as 1-0, as the form asks, and checks that each set is a finished set. 4. Your agent opens the form from that link, fills it in, and reads it back to you, line by line. 5. You press **Submit**. Before your agent submits the score, it reads each of these back to you: - The date the match was played. - Each line's players, winner and set scores, read back line by line. - Every line has a status: the site refuses a match with a line left blank. The Desk also checks the form's rules, which are these: - Enter the third set as 1-0. - Replace the date with the exact date the match was played. - Give each line a status. - Pick the winning team for each line. - Pick each player from the roster dropdown. - Enter each set score from the winning team's side. - Leave out tie-break points. - The site refuses an incomplete match. - A majority of the lines must be played. - When both teams default the same line, its status is Double Default. ## Check the other team's score When the other captain enters the score first, check it against your own record before you verify it. Your agent sends NorCal's score and yours to `prepare_score_entry`. The Desk lists every line where the two differ, so you can raise it with the other captain first. The verify page is one the Desk hasn't read yet, so your agent works from the buttons it sees there. Source: https://thetennisdesk.com/docs/norcal-forms --- # Buy and manage the Desk Pass > How to buy the Desk Pass, manage or cancel it, and keep the price you joined at. You buy the Desk Pass on the [pricing page](https://thetennisdesk.com/#/pricing?from=docs_buy_and_manage), and you manage or cancel it on Stripe's billing page, from a button on the Desk. [See what the pass adds](https://thetennisdesk.com/docs/desk-pass). ## Buy the pass 1. Open the [pricing page](https://thetennisdesk.com/#/pricing?from=docs_buy_and_manage). It shows today's price. 2. Choose **Get the Desk Pass**. 3. Not signed in? The page asks you to make an account with the form in the free column. The link in the email takes you on to Stripe. 4. Stripe takes the payment, and the Desk never sees your payment details. ## Buy from your agent You can also buy it from [an agent you've connected](https://thetennisdesk.com/docs/connect-an-agent), such as Claude, which takes three steps: 1. Ask for something the pass adds, and you get the free part and a link. 2. Within 30 minutes, open the link and choose **Continue to payment**, which opens Stripe with no second sign-in. 3. After you pay, ask again. ChatGPT doesn't sell it, so follow [Buy the pass](https://thetennisdesk.com/docs/buy-and-manage-the-desk-pass#buy-the-pass) on the pricing page, then sign in to ChatGPT with that email. ## Manage or cancel your pass In the side of the app, a “Desk Pass” block shows your renewal date and a **Manage** button. On the pricing page, a signed-in pass holder sees **Manage your Desk Pass**. Both open Stripe's billing page, where you can change or cancel your pass. Sign in with the email you paid with. ## What happens when you cancel After you cancel, your pass works until your paid time runs out, and the side of the app shows its end date instead of the renewal date. ## Keep your price Your price doesn't go up while you keep your pass. If you cancel and come back later, you pay that day's price. ## If the pass is off sale While the pass is off sale, its button on the pricing page reads **Not open yet** and doesn't work. **Manage** in the side of the app shows this message instead of Stripe's billing page: > The page says: “The Desk Pass is not open yet. Everything free on the Desk works today.” Source: https://thetennisdesk.com/docs/buy-and-manage-the-desk-pass --- # Report something wrong, or ask to withhold your name > Report a wrong score, result or name, find a missing result, or ask for your name to be withheld. To report a wrong score, result or name, write to support@thetennisdesk.com with the page's link and what's wrong. A person reads every message. ## Report a wrong score, result or name At the foot of every player, team, match and league page, choose **Something wrong on this page?**, which opens the [contact page](https://thetennisdesk.com/contact). Paste the page's link there and say what's wrong, like “Doubles 2: the score was 6-4, 6-3.” ## If a result is missing The Desk reads USTA's results [once a day](https://thetennisdesk.com/docs/coverage-and-data-runs#when-a-new-result-appears), so if a result is still missing after the next read, write to [support@thetennisdesk.com](mailto:support@thetennisdesk.com) with the team page's link. ## Ask to withhold your name Email support@thetennisdesk.com your player page's link to have your name withheld. Then your player page comes down, other pages print “Name withheld by request” where your name was, and the chat and agents leave you out. ## See or delete your own data To see or delete your own data, write to [support@thetennisdesk.com](mailto:support@thetennisdesk.com). The [privacy page](https://thetennisdesk.com/docs/privacy) lists what the Desk keeps from your use of the site, and for how long. Source: https://thetennisdesk.com/docs/report-something-wrong --- # Ask the chat good questions > Name a team, a player or a league, ask for something the chat can look up, and know what to do when it can't answer. Name a team, a player or a league, and ask for something the chat can look up, like “Who plays for BELVEDERE TC 18AM4.0A?” Here's [everything it can look up](https://thetennisdesk.com/docs/ask-the-chat#what-you-can-ask). ## Name the team or the player Use the team's full name as the site prints it, because a shorter name can match several teams. BELVEDERE TC 18AM4.0A, for example, is Belvedere Tennis Club's Adult 18 & Over men's 4.0 team. If your words fit more than one team or player, the chat asks which one you mean. ## Ask what it covers Ask what it can look up, or which leagues it covers, and its answer counts the teams and clubs the Desk covers today. ## Turn a weak question into a good one - **“Scout a team by name”** names no team, so the chat has nothing to look up. Name the team instead. - **“How is my team doing this season?”** needs to know your team, so sign in, or name the team. - **“Scout BELVEDERE TC 18AM4.0A”** asks for a written analysis, and that needs a [Desk Pass](https://thetennisdesk.com/docs/desk-pass). Ask who plays for it instead, for free. ## If the chat can't answer - **The chat says the answer needs a Desk Pass.** Its [reply](https://thetennisdesk.com/docs/chat-limits-and-refusals#what-the-chat-says-when-it-stops) lists what's still free, like a roster or [free scout](https://thetennisdesk.com/docs/scout-an-opponent). - **You asked about a team the Desk doesn't cover.** It may offer your own team, the covered clubs or areas, or a request for that area. - **The chat turned its answer down.** It couldn't match a figure to a result. Ask about one team, player or matchup. - **You've reached a limit.** Read [how many questions you get](https://thetennisdesk.com/docs/chat-limits-and-refusals#how-many-questions-you-can-ask). Source: https://thetennisdesk.com/docs/ask-the-chat-good-questions --- # Desk level > What a Desk level is, what it's built from, how it compares with your NTRP rating, how it moves, and how to read its chart. A Desk level is The Tennis Desk's estimate of how a player is playing now, on the NTRP scale to two decimals. It is not an NTRP rating. The Desk works out every level again each day. ## What a Desk level is built from Desk levels are built from recorded match results. Your level moves after each rated line, which is a line with both sides named, a winner recorded and nobody defaulted. The date beside a level is the [daily update](https://thetennisdesk.com/docs/coverage-and-data-runs#when-a-new-result-appears) it comes from. ## How a rated line moves your level Your level moves by how far the result and the score landed from what was expected. So a narrow win can lower it if you were expected to win big. Beating a much weaker player 7-5, 7-5 can do that. And a close loss to a much stronger player can raise it. - The score is your share of the games in each set. - A match tiebreak decides who wins the line, but it doesn't count toward the score. - A level more than a little outside the range your NTRP rating covers is nudged back toward it. ### When USTA moves your NTRP rating When USTA moves you up or down, your level jumps toward the middle of your new range at your first match under the new rating. Say you're at 3.40 when USTA moves you up to 4.0. At your first 4.0 match, you jump to about 3.66, near the range's middle of 3.75. The jump isn't a match, so it doesn't show on your chart or count toward **up** or **down**. **The exact rule** A move up takes a level below the middle about 75% of the way there, and a move down takes a level above it about 50% of the way. No jump is bigger than 0.50, and a level already past the middle doesn't move. Only a new number counts, so a new letter on the same rating, such as 4.0s to 4.0C, doesn't move your level. USTA can also move you up in the middle of a season, and your roster then shows a [D rating](https://thetennisdesk.com/docs/where-the-data-comes-from#what-the-letters-after-a-rating-mean). Your level jumps for that change at your first match of the next season, once the roster shows the new number. ## How a Desk level compares with your NTRP rating Read your level against the range of Desk levels your NTRP rating covers. A 4.0 rating covers levels above 3.50 and up to 4.00, so a 4.0 player at 3.68 is in range and one at 4.11 is above it. A level outside it can mean you're playing above or below that rating, or only that the estimate is off. Your league goes by your NTRP rating, not your Desk level. [Some matches](https://thetennisdesk.com/docs/does-my-match-count#which-matches-move-your-desk-level) count toward your Desk level and not your NTRP rating, or the other way round. ## What up or down after a level means The word **up** or **down** says which way a level has moved this year. You see it only after a move of at least 0.30, because a smaller move is often chance. ## How to read the chart beside a level The chart shows a level after each rated line in one year, oldest first, over a shaded strip for the range the player's NTRP rating covers. On a match page, a dot marks that match. Source: https://thetennisdesk.com/docs/desk-level --- # What the Desk covers, and when it updates > Where to see every league the Desk covers today, when a newly published result appears, what to do when one is missing, and how to ask for your area. [Browse](https://thetennisdesk.com/browse) lists every league the Desk covers today, by year and area. Every result comes from USTA NorCal and shows up within about a day of USTA publishing it. ## See what the Desk covers Open a league on [Browse](https://thetennisdesk.com/browse) to see its teams and players, or [ask the chat](https://thetennisdesk.com/docs/ask-the-chat) which leagues the Desk covers. ## When a new result appears Your result appears with the first daily update after USTA publishes it. The Desk reads USTA's new results once a day, then refreshes every player, team and league page. The date at the bottom of a page, beside the words [data run](https://thetennisdesk.com/docs/faq#run), tells you which update it came from. ## If a result is missing If a result is still missing or wrong after the next update, [report it](https://thetennisdesk.com/docs/report-something-wrong). ## If your area is not covered Today the Desk covers Marin and San Francisco. If you play somewhere else, [ask the Desk to add your area](https://thetennisdesk.com/request-area?from=docs) with one tap on its name. The Desk adds the areas people ask for most. The page may then offer to hold today's Desk Pass price for when your area opens, at no cost. Source: https://thetennisdesk.com/docs/coverage-and-data-runs --- # Where the data comes from > Where results and NTRP ratings come from, which club a team belongs to, what a rating's letters mean, and how to report a mistake. Every result on the Desk comes from league results USTA NorCal has already published. The Tennis Desk is not affiliated with USTA. ## Where the results come from The Desk reads USTA's new results [once a day](https://thetennisdesk.com/docs/coverage-and-data-runs#when-a-new-result-appears). Players' names and NTRP ratings come from the team rosters USTA publishes, but the [Desk level](https://thetennisdesk.com/docs/desk-level) is the Desk's own estimate, worked out from the results. ## Which club a team belongs to A team belongs to every club whose USTA page lists it, and the Desk reads those pages every day this season. When its name holds two clubs, like NOVATO TC/PIONEER PK, the team plays for both and shows up on [the page of each club](https://thetennisdesk.com/docs/club-page#which-teams-a-club-page-lists). An older season can still show a team under one club only, until the Desk reads that season's club pages. ## What the letters after a rating mean The letters after an NTRP rating are USTA's, and the Desk never changes them: - **C**: a computer rating, which USTA works out from match results. - **s**: self-rated, a rating the player picked. - **A**: a rating the player appealed. - **D**: USTA disqualified the rating during the year. It shows two numbers, like 4.0D/ 4.5: the old NTRP rating, then the new one. On [a league page](https://thetennisdesk.com/docs/league-page#highest-desk-levels), a rating at the league's own level shows only its letter. USTA's rules for [self-rated players](https://thetennisdesk.com/docs/does-my-match-count#what-changes-if-youre-self-rated) and [appeals](https://thetennisdesk.com/docs/does-my-match-count#can-you-appeal-your-ntrp-rating) are on the page about which matches count. ## If something looks wrong If a score, a result or a name is wrong, [report it](https://thetennisdesk.com/docs/report-something-wrong), and a person will read what you send. Source: https://thetennisdesk.com/docs/where-the-data-comes-from --- # The Desk Pass > What you get free on the Desk, what the Desk Pass adds, how many forecasts you get, and what it costs. Results, records and [Desk levels](https://thetennisdesk.com/docs/desk-level) are free to read, with no account. Create a free account with your email, so your first forecast each week is free as well. It shows your win chance on each line before a match. ## What you get free - “Every player, team and season we cover” - “Every result with its scorecard” - “Open any link a teammate sends you” - “Ask the Desk from Claude Code or Cursor” - “Email sign-in: 1 forecast a week in the chat” - “About 20 chat questions a month” - “A scout of any team we cover” Check your league on [Browse](https://thetennisdesk.com/browse) first. ## What the Desk Pass adds - “Forecasts: each line's win chance against teams the Desk covers” - “A suggested lineup in your team announcement” - “Your season summary” - “200 chat questions a day” - “10 forecasts a week, shared by chat and your agent” - “Founding rate, locked for as long as you stay” The chat's written analysis needs a pass too. ## Where you can use it Your forecasts work in the chat and in any agent you [connect](https://thetennisdesk.com/docs/connect-an-agent#get-forecasts-in-your-agent), with email sign-in or your own key. Without a pass, your agent still gets every free lookup. ## How many forecasts you get Signed in with an email address, you get 1 free forecast a week in the chat or your agent, with no Desk Pass. With a Desk Pass, you get 10 forecasts a week, which come back each Monday at midnight Pacific time. The chat and your agents share one weekly count. When it runs out, each one [tells you when your forecasts come back](https://thetennisdesk.com/docs/chat-limits-and-refusals#what-the-chat-says-when-it-stops). ## What counts as a forecast An answer uses one of your weekly forecasts when it shows any of these: - who has played most for a team this season, line by line - each line's win chance - who would win between two players, or two pairs, that you name If the Desk doesn't cover the other team, the first one shows your own team alone, but it still counts. A forecast that fails before it reaches you doesn't count, so you get it back for the week. Records, rosters, head-to-head records and the suggested lineup in your team announcement never use one up. ## What it costs A Desk Pass costs $39.99 a year. You [buy it](https://thetennisdesk.com/docs/buy-and-manage-the-desk-pass) on the [pricing page](https://thetennisdesk.com/#/pricing?from=docs_desk_pass), and [your price stays the same](https://thetennisdesk.com/docs/buy-and-manage-the-desk-pass#keep-your-price) for as long as you keep your pass, even if new buyers pay more later. But you can also start with a free account, from the pricing page's free column. Source: https://thetennisdesk.com/docs/desk-pass --- # How the forecast works > The three questions a forecast answers before a match, what each line's win chance comes from, and what the Desk never forecasts. A forecast uses published results to answer one of three questions before a match: - your win chance on each line of a team match - who has played most for a team this season, line by line - who would win one line between players you name Your first forecast each week is free when you're signed in with an email address, and a [Desk Pass](https://thetennisdesk.com/docs/desk-pass) gives you more. Each one counts toward your [weekly limit](https://thetennisdesk.com/docs/desk-pass#how-many-forecasts-you-get). ## How it gives each line's win chance You get each line's win chance and about how many lines you should win. There's no win chance for the whole team match, because that would need the lineup each team has actually chosen to play. The table gives each line a row: - “Your chance”: your team's chance to win that line alone, with no home-court edge. - “Your level”: your team's [Desk level](https://thetennisdesk.com/docs/desk-level) on that line, per player. A Desk level is the Desk's estimate of how a player is playing now. - “Their level”: the same for the other team. When the team isn't yours, the columns name each team in place of “Your” and “Their”. In Combo and Mixed, “Your pair” and “Their pair” give each pair's Desk level added together, and the league number is under the table. A pair at full strength reads a little under the league number, because a Desk level sits in the middle of its [NTRP range](https://thetennisdesk.com/docs/desk-level#how-a-desk-level-compares-with-your-ntrp-rating), not at the top. If the Desk doesn't cover the other team, you see only who has played most for your team. ## How it reads your own team Tell the chat who's out, and the forecast leaves them out. Or give it your lineup, like “Ann and Bea play Doubles 1”, which sets the players on each line you fill. Both work only for a team you're on. The other team's side never changes, and none of its players is named, because the forecast reads that team only from who has played each line. ## How it reads each team's level on a line A team's level on a line is the average Desk level of the players it has put there this season, each at their level today. When a team has played a line only once or twice, the forecast leans more on its whole roster's average, because one or two matches say little. **The full figures** The more often a team plays a line, the more its own players there count, and the less its roster does. Until a team plays a line, the forecast uses only the roster's average. That average counts only players who have a Desk level. In Adult leagues, the roster's average weighs as much as 1.5 earlier team matches on the line. In every other league, Combo and Mixed included, it weighs as much as 3. On an Adult doubles line, the table shows the level per player, not the pair's total, which is twice that. An agent also gets how many earlier team matches each level comes from. ## How it compares two players or pairs Name one player or a doubles pair on each side, and you get the home side's chance to win that line, with a small boost for playing at home. It weighs each Desk level, a pair's record together, and how much and how recently each player has played. ## What it knows A forecast knows only what scorecards show, so [say who's out](https://thetennisdesk.com/docs/how-the-forecast-works#how-it-reads-your-own-team). ## What it won't predict A forecast never predicts an NTRP rating or [who will be bumped up a level](https://thetennisdesk.com/docs/bumps-and-year-end-ratings#does-the-desk-predict-bumps). ## How often it's been right The Desk tested the line forecast on past lines, with the lineups that actually played, but only on lines played after it was set up. See [how often it picked the winner](https://thetennisdesk.com/docs/forecast-accuracy). Forecasts after your free one each week come with a [Desk Pass](https://thetennisdesk.com/#/pricing?from=docs_how_the_forecast_works). Source: https://thetennisdesk.com/docs/how-the-forecast-works --- # How accurate the forecast has been > How often the Desk's line forecast picked the winner, logged before play and in a replay of past lines, beside the higher Desk level and the higher NTRP rating. Before play, the Desk's forecast was right on 62.8% of 417 doubles lines, no more than the higher Desk level, a free player rating. 417 doubles lines logged before play, October 8 to October 21, 2026, in the Combo and Mixed 55 & Over leagues. The last two rows count all 567 lines logged since October 3, 2026, 150 of them by an earlier version of the forecast. | Way of picking the winner | Lines | Picked the winner (95% range) | | --- | --- | --- | | The Desk's forecast | 417 | 62.8% (58.1 to 67.3) | | The higher Desk level wins | 417 | 62.8% (58.1 to 67.3) | | The higher NTRP rating wins | 417 | 53.2% (48.4 to 58.0) | | The Desk's forecast, every line logged | 567 | 61.2% (57.1 to 65.1) | | The higher NTRP rating wins, every line logged | 567 | 55.4% (51.3 to 59.4) | The Desk's forecast and the higher Desk level chose the same side on 415 of the 417 doubles lines. So the forecast doesn't yet pick more winners than a guess anyone can make from the free Desk levels. The forecast's win chances sat a little closer to the results than the higher Desk level's, by too little to be sure. Logged before play, the forecast picked the winner less often than in a replay of past lines, which knew who played each line. Knowing who played, the higher Desk level picked the winner on 74.3% (69.9 to 78.3) of the same 417 doubles lines. So most of the gap is the guess of who will play. ## The replay of past lines The Desk's line forecast picked the winner on about two lines in three: 67.2% of 2,175 lines, replayed with the real lineups. A line is one singles or doubles match inside a team match. Picking the side with the higher NTRP rating, or else the home side, got 56.1% of the 2,175 replayed lines right. Anyone can make that guess for free, because the rosters show each player's NTRP rating. Most lines are even on paper. On about three lines in four of the replay, both sides carried the same NTRP rating, so the guess fell back to the home side. The home side won about one line in two: 51.7% of the 2,175 replayed lines. Where the NTRP ratings differ, on 504 replayed lines, the higher rating was right 71.8% of the time, about seven lines in ten, while the Desk's forecast got 74.8%. Picking the side with the higher Desk level got 68.0% of 2,172 replayed lines right, while the Desk's forecast got 67.2% of them. So in the replay the forecast picked no more winners than the free Desk level. Apart from the live record, the forecast's figures come from a replay of past lines. A forecast before a match also has to guess who will play, which the replay already knew. The forecast was tuned on earlier matches and replayed only on lines played after them. The forecast's figures are all for single lines. The Desk also logs a chance to win the whole team match, but doesn't show or sell it. If you want the Desk's line forecast before your next match, your first each week is free with an email sign-in, and the [Desk Pass](https://thetennisdesk.com/docs/desk-pass) gives you more. ## Method and full figures **How the replay was run, and every figure with its count and dates** The forecast gets each line's win chance from the Desk's line model. The replay scores that win chance on the Desk's 2026 lines, with the players who actually played. Two guesses from the free pages are scored too, the higher NTRP rating and the home side, because a forecast is only worth paying for if it beats them. All the main figures come from the same 2,175 lines, played July 6 to September 27, 2026. The Desk tried a line forecast for 217 team matches in the leagues it covers, scheduled before October 24, 2026. The Desk's last try logged one for 217 of them. The Brier score and log loss both measure how far each chance fell from what happened, so lower is better. Each percentage's 95% range comes from the Wilson method, a standard way to put a range on a share of right picks. Each score's range comes from drawing the team matches again 2,000 times, keeping each match's lines together. A free guess's chance is the share of earlier logged lines it got right, as in the replay. Doubles lines logged before play and scored before October 24, 2026. An even chance on every line scores 0.2500 on the Brier score and 0.6931 on log loss. | Way of picking the winner | Lines | Brier score (95% range) | Log loss (95% range) | | --- | --- | --- | --- | | The Desk's forecast | 417 | 0.2253 (0.2089 to 0.2421) | 0.6432 (0.6066 to 0.6814) | | The higher Desk level wins | 417 | 0.2365 (0.2249 to 0.2487) | 0.6661 (0.6422 to 0.6911) | | The higher NTRP rating wins | 417 | 0.2533 (0.2467 to 0.2606) | 0.7003 (0.6865 to 0.7152) | | The Desk's forecast, every line logged | 567 | 0.2363 (0.2212 to 0.2518) | 0.6690 (0.6343 to 0.7038) | | The higher NTRP rating wins, every line logged | 567 | 0.2481 (0.2421 to 0.2545) | 0.6895 (0.6771 to 0.7023) | ### The replay - The Desk ran this replay on September 29, 2026, on the data the live site uses, without changing it. No earlier replay exists to compare it with. - The replay ran in date order through all 55,087 league lines the Desk holds for the 2022 to 2026 seasons. - Each line was predicted from what the Desk knew at the end of the day before it was played. - The replay counts home court on every line, as a forecast for one line between named players does. A forecast for a whole team match leaves home court out, so its win chance for a close line can differ a little from the replay's. - The replay left out the 493 lines of the 2026 season that had a recorded winner and a side with no players named. - The Desk scored the higher Desk level on October 24, 2026, by running the same replay again on the scorecards it held before September 29, 2026. Scorecards changed since then leave that run 2,172 lines, and the Desk's forecast is scored again on them. ### How often each one picked the winner 2,175 lines played July 6 to September 27, 2026, and the 504 of them where the two sides' NTRP ratings differ. The NTRP ratings were equal on 1,670 of the 2,175 lines, and a player had none on 1, so on those lines the rating guess picked the home side. | Way of picking the winner | Lines | Picked the winner (%) | | --- | --- | --- | | The line model | 2,175 | 67.17 | | The higher NTRP rating | 2,175 | 56.14 | | The home side | 2,175 | 51.72 | | The higher Desk level, in the later run | 2,172 | 67.96 | | The line model, in the later run | 2,172 | 67.17 | | The line model, where NTRP ratings differ | 504 | 74.80 | | The higher NTRP rating, where NTRP ratings differ | 504 | 71.83 | ### How close each chance was Log loss and the Brier score both measure how far each chance was from what happened, so lower is better for both. Log loss weighs a confident miss most heavily. The Brier score is the average squared gap between each chance and the result. The higher NTRP rating's chance is the share of earlier lines the higher-rated side won, and the home side's is the share the home side won. 2,175 lines played July 6 to September 27, 2026. | Way of picking the winner | Log loss | Brier score | | --- | --- | --- | | The line model | 0.6063 | 0.2089 | | The higher NTRP rating | 0.6706 | 0.2391 | | The home side | 0.6931 | 0.2500 | | An even chance on every line | 0.6931 | 0.2500 | ### How often the line model's chances came true A well-judged chance comes true about as often as it says, so the two percentages in each row should sit close together. 2,175 lines, grouped by the line model's chance for the home side. | The line model's chance for the home side | Lines | Average chance (%) | Home side won (%) | | --- | --- | --- | --- | | 0.0 to under 0.1 | 28 | 6.43 | 17.86 | | 0.1 to under 0.2 | 76 | 15.83 | 15.79 | | 0.2 to under 0.3 | 201 | 25.50 | 22.39 | | 0.3 to under 0.4 | 260 | 35.34 | 34.62 | | 0.4 to under 0.5 | 355 | 44.85 | 39.44 | | 0.5 to under 0.6 | 365 | 55.00 | 49.32 | | 0.6 to under 0.7 | 335 | 64.87 | 64.18 | | 0.7 to under 0.8 | 296 | 74.92 | 75.34 | | 0.8 to under 0.9 | 184 | 84.10 | 79.89 | | 0.9 to 1.0 | 75 | 93.38 | 90.67 | ### The whole season Over all 11,206 lines of the 2026 season, the line model was right on 69.97% and the higher NTRP rating on 58.98%. The whole-season figures include lines the line model's settings saw: 9,031 of the 2026 season's lines were played on or before the last day of its tuning data. | Way of picking the winner | Picked the winner (%) | Log loss | Brier score | | --- | --- | --- | --- | | The line model | 69.97 | 0.5799 | 0.1978 | | The higher NTRP rating | 58.98 | 0.6608 | 0.2344 | | The home side | 53.02 | 0.6914 | 0.2491 | ### Against the free guess The line model did better than the free guess of the higher NTRP rating on both counts. On 2,175 replayed lines, it was right 67.17% of the time and the higher NTRP rating 56.14%. On log loss, where lower is better, it scored 0.6063 against 0.6706. ### What the replay cannot rule out - The Desk tuned the line model's settings on matches up to July 5, 2026, so the replay's main figures use only lines played after that date, and the figures for the whole 2026 season include lines the settings saw. - The replay uses the NTRP rating the roster shows now for the line's season, never a later one, so a rating that changed mid-season counts from the season's first line. The rating guess and the line model both read that rating, so they share the error. - The replay scores the chance for the players who actually played each line. A forecast before a match also has to guess who will play, and that adds error this replay does not measure. - Lines where one side named no players were not played, and are left out for all three predictors alike. ### The chance to win a whole team match The Desk logs a team's chance to win a whole team match before lineups, and scores it after the result, but does not show or sell it. A team match logged for both of its teams counts twice in the figures for the whole-team-match chance, once for each team's chance. The whole-team-match chance had a Brier score of 0.2489 and a log loss of 0.6911, over 705 chances logged for team matches played July 18 to September 27, 2026. An even chance scores 0.2500 on the Brier score and 0.6931 on log loss. 705 whole-team-match chances logged for team matches played July 18 to September 27, 2026, counted from the scorecards the Desk held on September 29, 2026. | Way of picking the team match winner | Chances | Picked the winner (%) | | --- | --- | --- | | The whole-team-match chance | 705 | 52.62 | | The home side | 705 | 52.06 | ### How the replay was checked As a check, the replay rebuilt each player's level before each line. Those levels matched the ones the Desk had stored on 40,074 of 40,074 player spots in the 2026 lines, one spot for each player on each line. Source: https://thetennisdesk.com/docs/forecast-accuracy --- # Bumps and year-end ratings > What a bump and a year-end rating are, where to read more, and whether the Desk predicts bumps. You're bumped when your year-end NTRP rating goes up a level. USTA publishes year-end ratings at the end of each year, each marked with a C after the number. ## Where to read more - [What the letters after a rating mean](https://thetennisdesk.com/docs/where-the-data-comes-from#what-the-letters-after-a-rating-mean) - [How a Desk level compares with an NTRP rating](https://thetennisdesk.com/docs/desk-level#how-a-desk-level-compares-with-your-ntrp-rating) - [What the Desk's research found about who moved up](https://thetennisdesk.com/docs/understand-a-bump#what-has-the-research-found) - [Which matches count toward a year-end rating, and when it comes out](https://thetennisdesk.com/docs/does-my-match-count) ## Does the Desk predict bumps? No, the Desk predicts no one's year-end rating or bump, on any page or to any agent. Its research gives rates over whole groups of past players, which say nothing about any one player in them. All of it is at [Research](https://thetennisdesk.com/research). Source: https://thetennisdesk.com/docs/bumps-and-year-end-ratings --- # Does my match count toward my NTRP rating? > Which USTA NorCal leagues, playoffs and tournaments count toward a year-end NTRP rating, the cutoff, when ratings come out, and how a Desk level differs. In USTA NorCal, Adult and Tri-Level matches count toward your year-end NTRP rating, according to [USTA NorCal's 2026 and 2027 league fact sheets and pages](https://thetennisdesk.com/docs/does-my-match-count#which-leagues-count-toward-your-ntrp-rating). Mixed matches count only if you play no other league, and Combo Doubles and Flex League matches don't. | League | Counts toward your NTRP rating? | Moves your Desk level? | | --- | --- | --- | | Adult | Yes | Yes | | Tri-Level | Yes | No, the Desk has no results | | Mixed | Only if you play no other league | Yes | | Combo Doubles | No | Yes | | Flex League | No | No, the Desk has no results | Your [Desk level](https://thetennisdesk.com/docs/desk-level) is the Desk's own estimate of how you play, and it counts your Combo and Mixed results even when USTA doesn't. Unless a rule names another source, it comes from [USTA's NTRP ratings FAQ as of October 2026](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html). ## Which leagues count toward your NTRP rating? Mixed is the tricky one. If you also play Adult, only your Adult matches count toward your year-end NTRP rating, because [USTA](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) uses Mixed only for players who play nothing else. **Each league and its fact sheet** USTA NorCal says matches in these leagues count toward your year-end NTRP rating: - [Adult 18 & Over](https://drive.google.com/file/d/1F4W2ZOm6Za12eZo13dSIfU-s79tRjJbY/view) (2026) - [Adult 40 & Over](https://drive.google.com/file/d/19pVenMvMdikJz3xKPpn_MQrEA_40U4QY/view) (2027) - [Adult 55 & Over](https://drive.google.com/file/d/1Ccji_KoptabDTr7Bx4CLdVXLa1UE3wGU/view) (2027) - [Adult 65 & Over Daytime](https://drive.google.com/open?id=14n_8vtllO8XeVmJ0VzSqqci7ZH0Qy_sH) (2027) - [Adult 70 & Over Daytime](https://drive.google.com/file/d/1p7KJoX4lYz5okkS37JQf8rootRJCUyCj/view) (2026) - [Early Start Reno/Tahoe Adult 40 & Over](https://drive.google.com/file/d/1dCQsJsqhNGB9aOqwIL5Lj-9lpLGTtjIe/view) (2027) - [Tri-Level](https://drive.google.com/file/d/190BRV-Ohu4VRjTvOkL1YjPx1XKgH_HOW/view) (2026) USTA NorCal counts these toward your year-end NTRP rating only if you play no other league: - [Mixed 18 & Over](https://drive.google.com/open?id=1vcxg9CFSVJuCBrhreUMGLNDxb-327tcH) (2027) - [Mixed 40 & Over](https://drive.google.com/file/d/1BbrVKhwGbmP1AEP_uLm5cuRqnkTgyO_9/view) (2026) - [Mixed 55 & Over](https://drive.google.com/file/d/1lQXH86wJRUKlGFnV4xn1lfcM8N0sTf-_/view) (2026) USTA NorCal doesn't count these toward your year-end NTRP rating: - [Combo Doubles](https://drive.google.com/file/d/1edNSDgjmb77FIPSRUfCqY-wBl6G3ZYMR/view) (2026) - [Flex League](https://www.usta.com/en/home/play/adult-tennis/programs/northerncalifornia/flex-league.html) (2026) ## Do playoffs and sectionals count? Yes, [USTA](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) counts district, section and National Championship matches toward your year-end NTRP rating. In NorCal's Adult 18 & Over league, the local playoffs and the Section Championship count too ([USTA NorCal's 2026 Adult 18 & Over fact sheet](https://drive.google.com/file/d/1F4W2ZOm6Za12eZo13dSIfU-s79tRjJbY/view)). Read the Desk's research: [Does winning at sectionals decide who gets bumped?](https://thetennisdesk.com/research/does-sectionals-decide-who-gets-bumped) ## Do tournaments count? Some do. [USTA](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) counts an NTRP tournament, open only to players at one level, the same as a league match, but not an age-group tournament. Sections can opt in or out of some kinds, so ask your local league coordinator which ones count in NorCal. ## Do defaults and retirements count? USTA doesn't say whether a default or a retirement counts toward your year-end NTRP rating, in [its NTRP ratings FAQ](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) or in [USTA NorCal's league rules FAQ](https://drive.google.com/file/d/1XCuTm_TYUtxo-CHDk3LQ4OLVvoYgXbH4/view). For your league's answer, ask your local league coordinator. A year-end rating needs at least three valid matches, and USTA calls a match valid when at least six games are completed. ## When is the cutoff? [USTA](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) sets the cutoff at the end of the last of three National Championships: Adult 18 & Over, 40 & Over and 55 & Over. Their dates change, so the cutoff moves each year. A match played after it counts toward the next year-end rating. ## When do year-end ratings come out? [USTA](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) publishes [year-end ratings](https://thetennisdesk.com/docs/bumps-and-year-end-ratings) each December, rounded to the nearest half point. Your new rating sets which USTA leagues and NTRP tournaments you can play the following year. ## What changes if you're self-rated? If you picked your own level, you're self-rated, and [USTA](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) keeps that self-rating for two years or until it generates a computer rating for you. Strikes don't apply to a [computer or tournament rating](https://thetennisdesk.com/docs/where-the-data-comes-from#what-the-letters-after-a-rating-mean), or to one that's mixed-exclusive, meaning earned playing only Mixed. Otherwise [USTA](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) gives you a strike each time your dynamic rating, the one it updates after every match, passes your level's limit. Three strikes mean a dynamic disqualification, and USTA tells you only after the third. ## Can you appeal your NTRP rating? Yes, and the route depends on how you got your rating ([USTA NorCal's league rules FAQ dated October 2025](https://drive.google.com/file/d/1XCuTm_TYUtxo-CHDk3LQ4OLVvoYgXbH4/view)). If USTA rated you from your match results, you're computer-rated, and you can request an automatic appeal, up or down, on TennisLink. Self-rated? You can appeal up at any time, but an appeal down goes to the Self-Rate Appeals Committee. When USTA denies an automatic appeal, you keep your rating for the rest of the year. [USTA](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html) lets you appeal a mixed-exclusive rating up or down too, but a denied appeal gets no second try. ## Which matches move your Desk level? Your Desk level moves with every line, one singles or doubles match for your team, that has both sides named and a winner recorded. That includes playoffs, sectionals and lines stopped early. A defaulted line leaves your Desk level where it was. Your Desk level can change once a day, when the Desk reads new results. There's no cutoff for your Desk level, so it carries straight into next year. The Desk holds no Tri-Level, tournament or Flex results, so a Combo match can move your Desk level without moving your NTRP rating, while a Tri-Level match does the opposite. ## Where USTA publishes these rules **Every USTA and USTA NorCal source, with its year** The Desk read each of these USTA and USTA NorCal sources on October 5, 2026. - [USTA's NTRP ratings FAQ](https://www.usta.com/en/home/play/adult-tennis/programs/national/usta-ntrp-ratings-faqs.html), which names no year. - Linked from [USTA NorCal's adult league calendar](https://www.usta.com/en/home/play/adult-tennis/programs/northerncalifornia/adult-league-calendar.html): - [USTA NorCal's 2026 Adult 18 & Over fact sheet](https://drive.google.com/file/d/1F4W2ZOm6Za12eZo13dSIfU-s79tRjJbY/view). - [USTA NorCal's 2027 Adult 40 & Over fact sheet](https://drive.google.com/file/d/19pVenMvMdikJz3xKPpn_MQrEA_40U4QY/view). - [USTA NorCal's 2027 Adult 55 & Over fact sheet](https://drive.google.com/file/d/1Ccji_KoptabDTr7Bx4CLdVXLa1UE3wGU/view). - [USTA NorCal's 2027 Adult 65 & Over Daytime fact sheet](https://drive.google.com/open?id=14n_8vtllO8XeVmJ0VzSqqci7ZH0Qy_sH). - [USTA NorCal's 2026 Adult 70 & Over Daytime fact sheet](https://drive.google.com/file/d/1p7KJoX4lYz5okkS37JQf8rootRJCUyCj/view). - [USTA NorCal's 2027 Early Start Reno/Tahoe Adult 40 & Over fact sheet](https://drive.google.com/file/d/1dCQsJsqhNGB9aOqwIL5Lj-9lpLGTtjIe/view). - [USTA NorCal's 2027 Mixed 18 & Over fact sheet](https://drive.google.com/open?id=1vcxg9CFSVJuCBrhreUMGLNDxb-327tcH). - [USTA NorCal's 2026 Mixed 40 & Over fact sheet](https://drive.google.com/file/d/1BbrVKhwGbmP1AEP_uLm5cuRqnkTgyO_9/view). - [USTA NorCal's 2026 Mixed 55 & Over fact sheet](https://drive.google.com/file/d/1lQXH86wJRUKlGFnV4xn1lfcM8N0sTf-_/view). - [USTA NorCal's 2026 Combo Doubles fact sheet](https://drive.google.com/file/d/1edNSDgjmb77FIPSRUfCqY-wBl6G3ZYMR/view). - [USTA NorCal's 2027 Combo Doubles fact sheet](https://drive.google.com/file/d/1pkyVaUdjIcNHzBKQbOCm8-M-0879wc_T/view). - [USTA NorCal's 2026 Tri-Level 3.0/3.5/4.0 fact sheet](https://drive.google.com/file/d/190BRV-Ohu4VRjTvOkL1YjPx1XKgH_HOW/view), linked from [USTA NorCal's Tri-Level team events page](https://www.usta.com/en/home/play/adult-tennis/programs/northerncalifornia/tri-level-team-events.html). - [USTA NorCal's 2026 Flex League page](https://www.usta.com/en/home/play/adult-tennis/programs/northerncalifornia/flex-league.html). - [USTA NorCal's league rules FAQ](https://drive.google.com/file/d/1XCuTm_TYUtxo-CHDk3LQ4OLVvoYgXbH4/view), dated October 2025, linked from [USTA NorCal's adult tennis resources page](https://www.usta.com/en/home/play/adult-tennis/programs/northerncalifornia/tennis-resources.html). Source: https://thetennisdesk.com/docs/does-my-match-count --- # How do NorCal league playoffs work? > Who goes to the playoffs in a USTA NorCal league and who hosts, who goes to Sectionals, how many matches you need to play, and the tie-break order. The top teams of your flight, the group of teams you play in the regular season, go to the playoffs. The higher place hosts each match, so a better finish also means home courts. ## Who goes to the playoffs, and who hosts? A flight of six teams or more sends its top four: 1st hosts 4th, 2nd hosts 3rd, and the higher place hosts the final. With five teams or fewer, only the top two go, so they play one match and 1st hosts 2nd. ([USTA NorCal's 2026 league regulations](https://drive.google.com/file/d/1JTguNwWMhe76WMa1AwE9YnHSxEAXu5KC/view)) In a flight of just two teams, the playoff match is played only if both captains agree, or else the team higher in the standings goes on. When an area such as Marin splits a league into flights, two flight winners then play once more, at the courts of the team higher in the standings. ## Who goes on to Sectionals? The team that wins an area's playoffs goes on to Sectionals, which decide the section's champion. USTA NorCal can also send a wildcard from the areas with the most teams in a league, but its regulations don't say which areas have one. ([USTA NorCal's rules](https://drive.google.com/file/d/1JTguNwWMhe76WMa1AwE9YnHSxEAXu5KC/view)) ## How many matches do you need to play in the playoffs? To play in your team's playoffs with a C (computer) or M (earned playing only Mixed) rating, you need two matches for that team, and one default counts. With an S (a level you picked yourself), A (appealed) or D (disqualified or promoted) rating, you need three matches in a 3-line league or four in a bigger one. No default counts for those ratings. A match that ended in a retirement still counts toward those numbers, so an injury on court doesn't cost you one. ([USTA NorCal's rules](https://drive.google.com/file/d/1JTguNwWMhe76WMa1AwE9YnHSxEAXu5KC/view)) [Where the data comes from](https://thetennisdesk.com/docs/where-the-data-comes-from#what-the-letters-after-a-rating-mean) says what each letter after a rating means. ## How is a tie in the table broken? A tie on team matches won goes to the most lines won, then the fewest sets lost, the fewest games lost, head-to-head and a coin toss. A match tiebreak in place of a third set counts as one set and one game, so it can decide a tie. ([USTA NorCal's rules](https://drive.google.com/file/d/1JTguNwWMhe76WMa1AwE9YnHSxEAXu5KC/view)) Adult 40 & Over 3.0 to 4.5 plays four lines and ranks teams by points instead, with doubles 1 worth 2 points and every other line worth 1. In those leagues a tie on points skips lines won, so it goes to the fewest sets lost, then the fewest games lost, head-to-head and a coin toss. ## What does the Desk do with these rules? The [league page](https://thetennisdesk.com/docs/league-page) orders its table by this tie-break order. With a [Desk Pass](https://thetennisdesk.com/docs/desk-pass), the chat's playoff report uses the playoff format, so it can give your team's chance of each round the format holds, up to the title. USTA NorCal can set another format for one league. So when a flight's playoffs this season took a different number of teams, the report gives only the team's chance of each seed, its place in the playoff draw. **Where each rule is in the regulations (LLAR is USTA NorCal's own Local League Area Regulations)** - Who goes to the playoffs, and who hosts: (NorCal LLAR) Playoffs, page 37. - Who goes on to Sectionals: 2.02A(1) Local League Competition, page 36. - Wildcards: (NorCal LLAR) Wildcards, page 39. - The matches you need to play in the playoffs: (NorCal LLAR) Match Minimum for Playoffs, page 25. - A retired match: 2.03A(3)a, page 40. - The tie-break order: (NorCal LLAR) Procedure in the Event of a Tie, page 36. - The match tiebreak: 2.01C(4) Match Scoring and Formats, page 34. - Adult 40 & Over points: (NorCal LLAR) Adult 40 & Over Tie-Break Procedure for a 4-line Format, pages 36 and 37. Source: https://thetennisdesk.com/docs/how-norcal-playoffs-work --- # Privacy: what the Desk keeps > What the Desk collects and why, who helps run it, how long it keeps each thing, and how to ask about your own data. Printed from the terms. These are the Desk's privacy [terms](https://thetennisdesk.com/terms), word for word. ## What the Desk collects and why The Desk collects usage data, which is a record of how people use the site. Usage data helps the Desk run the site, answer questions and make it better, but the Desk doesn't sell it or use it for advertising. The Desk records each visit as a screen recording: clicks, pointer movement, scrolling and what you type. Typed text is not masked, so a recording shows what you type in the search box, the chat box and the sign-in form. The Desk collects these kinds of data: - What you type, search and ask, and the Desk's answers. - The pages you open, what you click, and screen recordings of your visit. - Your device, browser, network address and rough location, such as your city. - If you sign in, your name, email address, the team, club and league you name, and a link to your player record. - If you buy a Desk Pass, your subscription, its status and its email address. - If you ask for your area, the area you pick and any email you leave, used only to tell you when your area opens. - If you hold today's Desk Pass price, the area, your email and that price, used only to tell you when your area opens. - If you vote on what's next, the item, the day and a one-way code that stops repeat votes. A vote holds no name, email or address. - If you get the weekly results email, your yes or no, and when each email went. Each chat question is stored with the Desk's answer, the date and codes that link it to your browser, network or account. Anyone with a shared answer's link sees your question and the Desk's answer, and nothing else about you. ## Who helps run the site - Vercel hosts the site. It logs each request and counts page opens. - Railway hosts the Desk's own database. - PostHog Inc. stores usage data and screen recordings in the United States. Your browser sends them through the Desk's own address. Each night the Desk's server also sends PostHog a list of chat, search, Desk Pass and link-open events, without names, emails or typed words. - The Desk's server also sends PostHog each chat question that goes to Anthropic's AI, with the answer and the recent conversation. If you are signed in, what the server sends PostHog can include your name and team. What an agent asks the Desk goes to PostHog too. - Each area request goes to PostHog too, with the area and the page you asked from, but not your email or network address. - Anthropic's AI, Claude, writes the chat's answers. Anthropic receives your questions, the recent conversation and, if you are signed in, your name and team. - Stripe takes Desk Pass payments and holds your payment details. - An email service sends sign-in links and codes and the weekly results email, so it receives your email address. - Telegram carries a message to the owner when a sign-in is refused because the name is already claimed. The message holds the name you typed. ## How long it is kept - Screen recordings are kept for up to 30 days. - PostHog keeps usage data other than recordings for up to a year. - If your browser holds a key from signing in or an invite link, PostHog keeps a profile of it with no end date. A profile holds the first page the browser opened, the site that sent it and a rough location. - The Desk's own database keeps search terms for up to a year. - The Desk keeps each area request, which holds the area, the day and a code made from your network address. The Desk deletes an area request's email and network code 365 days after the request. The Desk uses the email only to tell you when your area opens. - The Desk deletes a held price's email and network code 365 days after the hold. - Chat questions and answers, accounts and the Desk's other records have no set end date. - A shared answer stays readable at its link with no set end date. - Vercel keeps its request log for about an hour, and its count of page opens for 31 days. - Data in your browser stays until you clear it. ## What is left out - A shared report page is never recorded, and it sends nothing to PostHog. - A shared answer's page is never recorded, and PostHog events never hold its link. - Recording pauses on a page opened from a sign-in link or a Year in Review link. - Agent keys, sign-in links and sign-in keys are removed from PostHog events. A recording still shows a sign-in link, key or code on the screen. - Email addresses are removed from PostHog events too. A recording still shows an email address you type into a form. - Vercel's count of page opens never holds a search term, a sign-in link or a shared answer's link. ## What stays in your browser Your chat conversations are saved in your browser, so a reload keeps them. Your browser also keeps a random visitor code, your theme, a few small settings and, if you have one, your sign-in key. PostHog keeps its own random codes there, with the first page you opened and the site that sent you. All of it stays until you clear it. ## If you use the Desk from ChatGPT or Claude When an AI app asks the Desk for you, the Desk keeps these to answer it and to learn what people ask: - Each request: the Desk tool the app used, such as a team look-up, and what it asked that tool for. The record also holds the app's name and your question as the app passed it on. If you're signed in, the request is linked to your account. - If you're not signed in, a one-way code that only counts your free use and can't be turned back into its source. The code comes from your ChatGPT account in ChatGPT, from your conversation in the Claude app, and from your network in any other app. - If you link an app: which app, when you linked it and when it last asked. The Desk also keeps one-way codes of your email and of the app's tokens, the keys it holds to ask for you. - To count sign-ins from an app, the Desk also keeps your network address and a second one-way code of your email. - Each request also goes to PostHog, with your question and what the app asked the tool for. Each kind of record has its own end date, but a linked app stays until it's revoked. | What the Desk keeps | Deleted | | --- | --- | | Each request | 365 days after the request | | The code that counts your free use | 35 days after its last use | | An app's expired token | 1 day after it expires | | The code of your email from an app's sign-in | 1 day after the sign-in | | Your network address and the second code of your email | 35 days after their last use | | A linked app and its tokens | 30 days after it's revoked | You can revoke an app on [Bring your own agent](https://thetennisdesk.com/#/mcp). ## Your choices and questions You can clear the site's data in your browser at any time. Write to [support@thetennisdesk.com](mailto:support@thetennisdesk.com) to see or delete what the Desk holds from your use of the site. Questions about these terms go to the same address, and a person reads every message. ## A player's name The Desk prints the names USTA publishes on its rosters and results, but you can [ask to have your own name withheld](https://thetennisdesk.com/docs/report-something-wrong#ask-to-withhold-your-name). Source: https://thetennisdesk.com/docs/privacy --- # Player page > What each number, list and mark on a Desk player page means. A player page shows one person's [Desk level](https://thetennisdesk.com/docs/desk-level), record and lines, and a word with a dotted underline opens its answer in these docs. ## Summary - **Under the name**: their NTRP rating, clubs and teams in their latest year. The count of teams opens “2026 by league”. - **Desk level**: the Desk's estimate of how they play now, to two decimals, dated by its update. - “No Desk level yet”: they have no [rated line](https://thetennisdesk.com/docs/desk-level#what-a-desk-level-is-built-from), a line both sides played to a result. - **up** or **down**: the level has moved [enough to trust](https://thetennisdesk.com/docs/desk-level#what-up-or-down-after-a-level-means) this year. - **The chart**: the level after each rated line ([how to read it](https://thetennisdesk.com/docs/desk-level#how-to-read-the-chart-beside-a-level)). - “2026 record”: wins and losses on rated lines that year, with singles and doubles under it. ## Recent lines “Recent lines” lists the player's rated lines in their latest year, newest first: - **All 48 lines**: opens the lines past the first 10. - **The square, the date and the line**: W for a win, L for a loss. The date opens the match page. - **The score**: the player's games first in every set, so L 7-5, 2-6, 0-1 is a loss after winning the first set. - **The level and the change**: the player's Desk level after the line, and how much the line moved it. - **with** and **v**: the partner and the opponents, each with the Desk level they brought. - **A name**: opens that person's page when one person on their team's roster that season has it, or prints as plain text when the Desk can't place it. - “Name withheld by request”: a person who asked the Desk to withhold their name. ## By league “2026 by league” gives one row for each league the player played in that year, and each league opens its league page. - “Desk”: the Desk's record from the player's rated lines in that league. - “Roster”: the team's record on USTA's roster, which opens the team page. - **≠**: the two records differ, as [Desk and Roster](https://thetennisdesk.com/docs/player-page#desk-and-roster) explains. ### Desk and Roster The two records count in different ways, so the roster's can include a line the Desk couldn't score, or [one nobody played](https://thetennisdesk.com/docs/faq#default). The Desk's is the larger one when a playoff line counts in the flight its scorecard names. ## Partners “Partners · lines together” lists each partner the player has played 3 or more doubles lines with, most lines first, and leaves off anyone withheld by request. - **26 · 13-13**: 26 lines together, 13 won and 13 lost, drawn as a bar. - **A name**: opens the partner's page when one person with that name is on the player's team rosters. Two people with the name leave it unlinked, because the Desk won't guess. ## The Desk Pass link The page ends with the link **See their lines' win chances**, which opens the [pricing page](https://thetennisdesk.com/#/pricing?from=docs_player_page). On a player page, the win chance on each of a player's lines needs a [Desk Pass](https://thetennisdesk.com/docs/desk-pass). ## Every year - **Every year**: under the recent lines, each year's record, when there are two or more. It opens one page with every year the Desk holds for the player. - **The record**: every year's, headed with the first year and the latest. - **NTRP rating**: the rating in their latest year, with the years that carry it. - **The lines**: every year's, newest first. When there are more than the page holds, the closed section reads **400 newest lines**. - “By year”: a closed section for each year, with its record and its leagues. ## A shared name When two or more people in USTA's results share a name, each of them gets a page of their own. If the Desk can't tell this person's lines apart, the page lists only their teams, so it never mixes two people's play. ## Your own page Signed in on your own page, choose **Read your Year in Review** under “Your season, written”. Source: https://thetennisdesk.com/docs/player-page --- # Team page > What each number, column and mark on a Desk team page and its free scout means. A team page shows a team's season and who plays for it, and a word with a dotted underline opens its answer in the docs. ## Summary - The line under the name gives the league, area, season and [club](https://thetennisdesk.com/docs/club-page). - “Regular season” gives wins and losses, with a [square](https://thetennisdesk.com/docs/team-page#team-matches) for each team match. - “Playoffs” gives the playoff and sectionals records, labelled “Sectionals” for a team with no playoff match. - “Next match” gives the next match's date, time, side and opponent. It's missing when nothing is on the schedule. - “League table” gives the team's [place in its league](https://thetennisdesk.com/docs/team-page#league-table). ### League table - “League table” links the league page and gives the place, like 3rd of 11, or T3 of 11 when another team shares it. - The table is **unofficial** because the Desk builds it from USTA's scorecards, in [the league's own order](https://thetennisdesk.com/docs/faq#standings). - “Top” gives the top record and who holds it, when this team's differs. - The league's own rule sets the top, so a team with more losses can lead. - “Teams in this flight” with a dash under the record means some of the league's results are missing, so the team gets its record and no place. - The summary shows each record once, so it skips “Teams in this flight” when its record matches “Regular season”. ## Roster The roster lists the team's players, highest [Desk level](https://thetennisdesk.com/docs/desk-level) first, and a tap on a column's head sorts by it. - **Player**: The name as the roster publishes it, linked to that player's page. - **NTRP**: The roster's own published rating, with USTA's suffix: C computer, s self-rated, A appealed. An NTRP rating covers a range of levels, while a Desk level is one number. - **Desk level**: The Desk's estimate of the player's level, dated in the heading, with a small chart of the season's rated lines. An arrow with up or down marks a level that moved at least 0.30 this season. - **W-L**: Wins and losses as the roster publishes them for this team. - **Last 5**: The player's last 5 lines for this team, oldest first. A filled square is a win and a hollow square a loss. A dashed square is a default, a line nobody played: W if this team got the point, L if the other team did. - **Lines**: How many lines the roster credits this player with for this team. The page shows it under W-L only when it differs from wins plus losses. A line with no result on record makes the two differ. - Withheld players are left off, and counted under the roster. - **See this roster by playing level** opens [the scout](https://thetennisdesk.com/docs/team-page#the-scout). ### A shared name Two or more people can share a name. Each name on the roster links to its own person's page, and the row is [that person's own](https://thetennisdesk.com/docs/player-page#a-shared-name). ### Last 5 - The squares show the player's last 5 lines for this team, oldest first. A dashed one is a [default](https://thetennisdesk.com/docs/faq#default), a line nobody played. ## The league chart - “Rosters in this league, in table order” has a row for each team, when the Desk holds the whole table. - The bar spans the middle half of a roster's Desk levels. - The dot marks one of the roster's highest levels, which says nothing about who plays. - “typical error” is how far off a Desk level usually is, because [a level is an estimate](https://thetennisdesk.com/docs/desk-level#how-a-desk-level-compares-with-your-ntrp-rating). ## Team matches - Each row is a team match, latest first. Its date opens the match page. - The first square shows W for a win, L for a loss and D for a draw. - The squares after the score show each line in order. A dashed one is a default. - The toggle opens the line table, with the team's games first in each score. ## Next matches and the club's other teams - “Next matches” lists the matches after the next one. Each club that lists the team and has other teams that season gets a closed section of its own. Its heading gives that club's count of other teams, the club's name and the season. When two clubs list the team, a line links each club page, even when neither club has another team that season. When one club lists the team with no other team that season, the page ends without club links or a section. ## The announcement Before a match, a closed section under the summary holds [the announcement to send your team](https://thetennisdesk.com/docs/send-the-announcement). ## A free forecast Signed in with an email address, your first forecast each week is free. A [Desk Pass](https://thetennisdesk.com/docs/desk-pass) shows each line's win chance before a team match, when both teams are on the Desk. - **A match coming up this season**: **Get a free forecast** sits under the summary, or under the roster on a phone. It puts a question about that match in the chat's box. Press Enter to send it. - **No match left this season**: the page ends with the link **See each line's win chance**, which opens the [pricing page](https://thetennisdesk.com/#/pricing?from=docs_team_page). - **A past season**: neither one shows. ## The scout - The groups show the roster by Desk level, highest first. - **Form** shows the last 5 lines for this team, newest first, with * for a default. Source: https://thetennisdesk.com/docs/team-page --- # Match page > What each heading, column and mark on a Desk match page means. A match page shows one team match: the two teams, home team first, and every line they played. ## Under the heading - **The heading**: each team's club name opens the club's page for that season, when the Desk has one ([how to find a club](https://thetennisdesk.com/docs/club-page#find-a-club)). - **The line under it**: the league, the date and the score. ## The lines Each line is one person's or one pair's match inside the team match ([what counts as a line](https://thetennisdesk.com/docs/faq#line)). - **The line's heading**: such as “Singles 1” or “Doubles 2”, with the score as the scorecard printed it, usually winner first. - **A row for each side**: its players and any [Desk levels](https://thetennisdesk.com/docs/desk-level) the Desk has measured from their [rated lines](https://thetennisdesk.com/docs/desk-level#what-a-desk-level-is-built-from). - **won**: the side that won the line. - **combined estimate**: a pair's two levels added together, in a league that adds them. - **A name**: opens that player's page when one person on that side's roster that season has it. - “Name withheld by request”: a player who asked the Desk to withhold their name, with no link and no level. ## The marks on a line - **upset**: the side with the lower Desk levels on the page won, by more than a small gap ([more on upsets](https://thetennisdesk.com/docs/faq#upset)). - **default: one side could not field this line**: a line nobody played, which counts in no record ([more on defaults](https://thetennisdesk.com/docs/faq#default)). - **counts twice**: in an Adult 40 & Over league with four lines, a Doubles 1 win is worth 2 points ([more on league tables](https://thetennisdesk.com/docs/faq#standings)). - **What these marks mean**: opens [the FAQ](https://thetennisdesk.com/docs/faq). ## Recap, earlier meetings and the next meeting “Recap” says who won and names any upset. “Earlier meetings” lists the other times the two teams have met, and “Next meeting” shows the next one on the schedule. ## The Desk Pass link When the Desk covers either team, the link **See each line's win chance** near the end of the page opens the [pricing page](https://thetennisdesk.com/#/pricing?from=docs_match_page). On a match page, each line's win chance needs a [Desk Pass](https://thetennisdesk.com/docs/desk-pass). Source: https://thetennisdesk.com/docs/match-page --- # League page > What each number, heading and mark on a Desk league page means, and how its table is ordered. A league page shows where every team in a league stands and how each team match went. Each dotted word on it opens its answer in these docs. ## Summary The summary says where the season stands. - The line under the name gives the area, the season and how many teams the table lists. - “Regular season” shows how far the season has gone, like 3 to 5 “team matches each so far”. At the season's end it says “Over”, until playoff or sectionals results replace it. - “Next matches” gives the next date on the schedule, and how many team matches fall on it. - “Playoffs” names the latest playoff winner, with its playoff record. - “Sectionals” gives each league team's record at sectionals. If only the playoff winner went, it leaves out the name, which the playoffs line already gives. ## The table The table's heading tells you how complete it is, because the Desk may not hold every result. - “League table (unofficial)” means the Desk has every team's whole record, and orders them by the league's rules. - “Teams in this flight” means the Desk has only part of some team's record, so [no team gets a place](https://thetennisdesk.com/docs/league-page#teams-in-this-flight). - “Teams” lists the teams the Desk has, in no order of its own. - A ranked table gives each team's place, with a T when two teams share it, so the team at the top reads 1, or T1 when shared. - “W-L” counts regular-season team matches against teams in the table, so a team reads 0-0 until it plays one. - “Points” or “Lines won” comes next, whichever the league ranks on, then “Sets lost”. - The line under a team opens its [club page](https://thetennisdesk.com/docs/club-page), when the Desk has one. ### Teams in this flight When the Desk is missing some of a team's results, no team gets a place, because a place ranks each team against every result in the flight. The teams still follow the league's order over the results the Desk has. There's no grid either, because it lists teams by place. ### Partly observed Some teams play teams the Desk doesn't cover, so their records here miss those matches. When that happens, a note under the table says “Some of these records leave out matches against teams the Desk does not cover.” ### How the table is ordered The Desk orders the table by USTA's published league rules ([the full order, tiebreaks included](https://thetennisdesk.com/docs/faq#standings)). It still calls the table unofficial, because a match never played or never finished comes with no scorecard. Some leagues rank on points. A team's points are the league's own match points from each team match, so they can differ from the lines it won. ## Every result - “Every result, in table order” has a row and a column for each team, in table order, with every regular-season result between them. - A filled mark means the row's team won. A hollow ring means it lost, and neither means a draw. - An empty cell means the two teams haven't met. - A cell opens nothing, so to open a match, use its date in the [week lists](https://thetennisdesk.com/docs/league-page#week-by-week). - Some leagues get no grid, such as one with missing results. ### Week by week - **Week by week · 55 team matches** opens every regular-season team match, by week. Each date opens its match page. - “Latest results” shows the newest results, on a page with no grid. ## Playoffs and sectionals - “Playoffs and sectionals” lists each playoff and sectionals team match of the league's teams, oldest first. Each date opens its match page. ## Next matches “Next matches” lists the team matches of the next 7 days, or of the next date on the schedule when none fall in them. ## Highest Desk levels “Highest Desk levels” lists the league's 10 highest [Desk levels](https://thetennisdesk.com/docs/desk-level) in the page's area. A Desk level is the Desk's estimate of how someone plays now. - The list has no position numbers, because a hundredth between two levels is too small to rank on. - **Rated** is the NTRP rating, with only its letter at the league's own level. A disqualified rating always shows whole, because it carries two NTRP ratings. - If all 10 share one rating, the list drops **Rated** and names that rating once, after **Player**, since a column of one rating tells you nothing. The full player list always shows it. - In a league whose level adds two players' NTRP ratings, such as a mixed or combo league, a line under the heading says so. Each level in the list is still one player's own. - When two or more people share a name, each name links to its own person, and the level is [that one person's own](https://thetennisdesk.com/docs/team-page#a-shared-name). - **All 221 players** opens the full player list. Withheld players are left off and counted. ## Other areas and years The page ends with “Other areas and years:”, then links the same league in its other areas and years. ## The Desk Pass link A [Desk Pass](https://thetennisdesk.com/docs/desk-pass) shows each line's win chance before a team match, when both teams play in areas the Desk covers. This season's page ends with **See each line's win chance**. It opens the [pricing page](https://thetennisdesk.com/#/pricing?from=docs_league_page), and the ranking view shows it under the back link. A past season's league page has no link. Source: https://thetennisdesk.com/docs/league-page --- # Club page > What each number, list and mark on a Desk club page means, which teams it lists, and how to find a club. A club page shows how all of a [club's](https://thetennisdesk.com/docs/glossary#club) teams are doing in one season. ## Summary The top of a club page sums up its season in a few lines. - “Teams in” and the year count the club's teams that season, and how many are playing now. - “Players on its rosters” counts [each person on its rosters](https://thetennisdesk.com/docs/club-page#players-by-desk-level) once. - “Against other clubs” gives its [record against other clubs' teams](https://thetennisdesk.com/docs/club-page#against-other-clubs). - “Next match” gives the club's next team match, or “None scheduled”. It's left off when the page shows the week, which starts with that match. ### Against other clubs “Against other clubs” is the club's wins, losses and draws against other clubs' teams. A match between two of its own teams gets a row of its own, because the club can't win or lose it. ## The week “The week” lists the club's team matches in the next 7 days. - “Team matches” lists each match, soonest first. Tap to see more than the first few. - “Things to watch” come from the schedule, rosters and scorecards, so no AI writes them. Each kind of check is named once, with everything it found listed under it. - “Same-day rosters” means two teams play on one day and share players. For example, your 3.5 team and your 4.0 team both play Saturday, and two people are on both rosters. - “Lines not fielded” shows a team that has lost a line by [default](https://thetennisdesk.com/docs/faq#default) this season, because it put nobody on that line. - “Days in a row” means a team plays on back-to-back days. - “Plays the first-place team” shows a team playing whoever is 1st in the [unofficial table](https://thetennisdesk.com/docs/faq#standings). - “Rematch after a loss” means a team meets one that beat it last time. - “Two home matches in a day” flags two or more home matches on one day in the next 14 days. - “Listed under an earlier round” flags a match listed under a past round's week, which often means it moved. ## Brief me in the chat **Brief me in the chat** fills the chat's box with “Brief me on” and the club's name. Press Enter to send it. Signed in, the chat sums up the week and checks, usually in one or two sentences. Signed out, you get up to 3 of the club's checks and facts word for word, and any view the chat adds is labeled “The Desk's read.” A briefing counts toward [your chat limits](https://thetennisdesk.com/docs/chat-limits-and-refusals#how-many-questions-you-can-ask), so it uses one question. ## Teams by league “Teams by league” sorts the club's teams by kind of league, so its mixed teams sit together. A group with a team playing now starts open, but out of season the group with the newest result does. Tap any other group to open it. - Each row gives the league, the team's place in the [unofficial table](https://thetennisdesk.com/docs/faq#standings), its record, and a [square](https://thetennisdesk.com/docs/team-page#team-matches) for each team match. The column head says when a place can still change. A phone shows only the newest squares, but the team's page has them all. - A row with a dash for its place is missing some of its league's results, because some teams in that league play clubs outside the Desk's areas. ### Can your team still finish first? While a team can still finish first, if every scheduled match is played, its row shows one of these three. - “Can still finish first” means it can end alone in first, but winning its own matches isn't enough to make sure of it. - “Finishes first if it wins every match left” holds whatever the other teams do. - “Can at best tie for first” means its best finish is a tie with the leaders, and the league's tiebreaks then decide first place. No status on a row means the team can't finish first, has no match left, or the Desk can't tell. After the season ends, no row shows a status, though the schedule may still list an unplayed match. ## Later matches “Later matches” lists the club's team matches after the week. ## Latest results “Latest results” gives the club's 20 newest results, with a [square for each line](https://thetennisdesk.com/docs/team-page#team-matches). ## Players “Players” lists everyone on the club's rosters that season. Whoever played the most lines for the club comes first, so the club's regulars lead, and a tie goes to the higher [Desk level](https://thetennisdesk.com/docs/desk-level). It gives no position numbers. A Desk level is the Desk's estimate of how someone plays now. - “Women”, “Men” and “Players” are a list for each gender, and one for anyone else. - Each row gives the NTRP rating, the Desk level and “Teams here”: the club team the player played the most lines for, then a count of their other teams there. - A team can carry a name of its own, so that name shows under its players. ## Seasons “Seasons” has a row for each season the club had a team, from 2022, each opening that season's page. ## Which teams a club page lists A club page lists the teams USTA lists on that club's own page, which the Desk reads once a day. ### A team with two clubs A team whose name holds two clubs, such as NOVATO TC/PIONEER PK, is on both clubs' pages when USTA lists it under both. ## Find a club - [The clubs list](https://thetennisdesk.com/browse/clubs) has every club with a page. To open it, choose **Clubs** on [Browse](https://thetennisdesk.com/browse). - Player, match and league pages link each club they name. - When you're signed in, the sidebar links the club of each of your teams this season, unless the team has [two clubs](https://thetennisdesk.com/docs/club-page#a-team-with-two-clubs). ## The Desk Pass link With a [Desk Pass](https://thetennisdesk.com/docs/desk-pass), you see each line's win chance in the club's team matches before they're played, when the other team is on the Desk too. This season's club page shows the link **See each line's win chance** under the week, and it opens the [pricing page](https://thetennisdesk.com/#/pricing?from=docs_club_page). ## What a club page leaves out Lists and counts leave out anyone withheld by request. The page never ranks one club against another. Source: https://thetennisdesk.com/docs/club-page --- # The chat's limits and refusals > How many questions the chat answers, when your count starts again, and what it says when it stops. Chat questions have daily and monthly limits. ## How many questions you can ask Without a Desk Pass, you get about 20 answers a month, a budget which usually runs out before the limits of 40 questions a day and 600 a month. A Desk Pass raises that to 200 a day and about 250 a month, and counts restart at midnight Pacific time and on the 1st. - **Signed in.** Your count follows your account, and your agent has [its own](https://thetennisdesk.com/docs/connect-an-agent#how-many-calls-your-agent-gets). - **Signed out.** Your browser has a count, and your network a larger one. ### Replies that don't count Asked plainly, these never count: - hello, thanks or bye - a starter question, like what it can look up - whether the Desk is official USTA - what's free - **Signed out only:** - when the data is updated - a privacy question, or how to have your name withheld - a call for help - how to report something wrong, or send an idea Any question the chat's AI answers counts, even one of these reworded. ## What the chat says when it stops Each message names its limit and when chat returns. > The chat says: “Daily limit reached — you can ask again tomorrow.” > “Monthly limit reached — chat resets next month.” > “Your chat budget for this month is used up. Chat comes back on the 1st at midnight Pacific time.” > “Your free chat for this month is used up. A Desk Pass gives you more, or chat comes back on the 1st at midnight Pacific time.” ### Shared limits Readers without a pass share a daily and a monthly limit, which never stop pass holders. > The chat says: “The chat has reached its daily limit for readers without a Desk Pass. Chat comes back at midnight Pacific time.” > “The chat has reached its monthly spending limit for readers without a Desk Pass. It comes back on the 1st at midnight Pacific time.” ### If the Desk has to pause the chat for everyone > The chat says: “The chat is paused for now. Every page still opens, and you can ask again later.” ### At the monthly cost limit for everyone > The chat says: “The Desk has reached its monthly spending limit on the chat for everyone. Chat comes back on the 1st at midnight Pacific time. Every page still opens.” ### A forecast without a pass Create a free account with your email for a free forecast, and the chat says when your next one comes. ### Out of forecasts this week When your pass's [weekly forecasts](https://thetennisdesk.com/docs/desk-pass#how-many-forecasts-you-get) run out, the chat says: > The chat says: “You have used this week's 10 forecasts. They come back on Monday at midnight Pacific time. Records, rosters and head-to-head records are still free.” ### A figure the chat can't trace The chat won't send a figure it can't trace, so signed in it rewrites or drops that sentence, and signed out its reason begins: > The chat says: “My own check then turned my answer down” ## What the Desk keeps of your questions The Desk [keeps questions and answers](https://thetennisdesk.com/docs/privacy) with no set end date. Source: https://thetennisdesk.com/docs/chat-limits-and-refusals --- # Agent tools > Connect your MCP client to the Desk's server, see what works with no key, and find the tool that answers each question. Point your MCP client at `https://thetennisdesk.com/api/mcp`. Free questions need no key, so your agent can look up teams, players, clubs and leagues with the address alone. A forecast, or a question about you, needs a sign-in. A client that supports OAuth 2.1 signs you in with a code the Desk emails you. Otherwise, make a free key on the [agent page](https://thetennisdesk.com/#/mcp) and send it in the header `Authorization: Bearer `. The steps for each client are on [Connect an agent](https://thetennisdesk.com/docs/connect-an-agent), which also says how many calls your account gets. ## Which tool answers which question Ask in your own words, and your agent picks the right tool. Several tools give a player's [Desk level](https://thetennisdesk.com/docs/desk-level), the Desk's own estimate of how well they're playing now, worked out from match results every day. A Desk level uses the same scale as your NTRP rating. Your league still goes by the rating USTA gives you. ### Teams and leagues | question | tool | | --- | --- | | “How has Tiburon's team been doing, and who do they play next?” | [`query_team_record`](https://thetennisdesk.com/docs/agent-tools#query_team_record) | | “What happened the last time we played Mill Valley?” | [`query_matchup`](https://thetennisdesk.com/docs/agent-tools#query_matchup) | | “Who is on Tiburon's roster this season, and at what ratings?” | [`query_roster`](https://thetennisdesk.com/docs/agent-tools#query_roster) | | “What is our team's win rate this season?” | [`compute_aggregate`](https://thetennisdesk.com/docs/agent-tools#compute_aggregate) | | “How are their 4.0 players doing compared with their 3.5s?” | [`compute_roster_strength`](https://thetennisdesk.com/docs/agent-tools#compute_roster_strength) | | “Which match did we put out our strongest lineup in this season?” | [`compute_match_line_ratings`](https://thetennisdesk.com/docs/agent-tools#compute_match_line_ratings) | | “When is our next match, and is it home or away?” | [`query_team_forecast`](https://thetennisdesk.com/docs/agent-tools#query_team_forecast) | | “Where did we finish in our league this season?” | [`query_league_standings`](https://thetennisdesk.com/docs/agent-tools#query_league_standings) | | “How have our playoff chances changed this season?” | [`query_playoff_history`](https://thetennisdesk.com/docs/agent-tools#query_playoff_history) | | “What did the Desk give us last match, and how did it go?” | [`query_forecast_results`](https://thetennisdesk.com/docs/agent-tools#query_forecast_results) | ### Players | question | tool | | --- | --- | | “How has my doubles partner done in their last few matches?” | [`query_player_history`](https://thetennisdesk.com/docs/agent-tools#query_player_history) | | “How did my Desk level change over this season, match by match?” | [`query_match_log`](https://thetennisdesk.com/docs/agent-tools#query_match_log) | | “How strong a player is my next singles opponent?” | [`query_player_rating`](https://thetennisdesk.com/docs/agent-tools#query_player_rating) | ### Clubs | question | tool | | --- | --- | | “Which teams does Belvedere have this year?” | [`query_club_teams`](https://thetennisdesk.com/docs/agent-tools#query_club_teams) | | “How is Scott Valley doing against other clubs this season?” | [`query_club`](https://thetennisdesk.com/docs/agent-tools#query_club) | ### Forecasts, with a Desk Pass | question | tool | | --- | --- | | “How strong is Tiburon on each line, and what are our chances?” | [`plan_lineup`](https://thetennisdesk.com/docs/agent-tools#plan_lineup) | | “If my partner and I play their top doubles pair, who is likely to win?” | [`predict_matchup`](https://thetennisdesk.com/docs/agent-tools#predict_matchup) | | “What are our chances of making the playoffs?” | [`project_standings`](https://thetennisdesk.com/docs/agent-tools#project_standings) | | “Can you scout Tiburon's men's 3.5 team for me?” | [`scout_team`](https://thetennisdesk.com/docs/agent-tools#scout_team) | ### About you, signed in | question | tool | | --- | --- | | “Which teams have I played for this year?” | [`query_my_teams`](https://thetennisdesk.com/docs/agent-tools#query_my_teams) | | “Where do I rank among the 4.0 men in my age group?” | [`query_cohort_standing`](https://thetennisdesk.com/docs/agent-tools#query_cohort_standing) | | “Do I have the Desk Pass, and how many forecasts do I have left?” | [`get_desk_pass`](https://thetennisdesk.com/docs/agent-tools#get_desk_pass) | ### USTA NorCal forms | question | tool | | --- | --- | | “Who should play each line on Saturday, from who said yes on NorCal?” | [`plan_lineup_from_availability`](https://thetennisdesk.com/docs/agent-tools#plan_lineup_from_availability) | | “How do I enter last night's scores on NorCal?” | [`prepare_score_entry`](https://thetennisdesk.com/docs/agent-tools#prepare_score_entry) | | “Can we post our home match for Saturday evening?” | [`match_date_check`](https://thetennisdesk.com/docs/agent-tools#match_date_check) | | “Who hasn't answered for Sunday, and what should I text them?” | [`availability_loop`](https://thetennisdesk.com/docs/agent-tools#availability_loop) | ### Research | question | tool | | --- | --- | | “How do players usually do the season after they get bumped up?” | [`read_research`](https://thetennisdesk.com/docs/agent-tools#read_research) | ### The Desk itself | question | tool | | --- | --- | | “What is a Desk level, and how does it compare with my NTRP rating?” | [`read_docs`](https://thetennisdesk.com/docs/agent-tools#read_docs) | | “Which leagues and areas does the Desk cover?” | [`query_coverage`](https://thetennisdesk.com/docs/agent-tools#query_coverage) | ## Each tool, and what your agent reads The Desk's server lists 29 tools. Under each tool's name are its `title` and what it gives, and its fold holds the `description` your agent reads, word for word, with the tool's arguments. An answer that names a team, player, club or league the Desk covers also holds `pages`, the address of each one's Desk page. Your agent can link the name to it. ### Notes on signing in Three tools end their descriptions with the same notes: your own teams (`query_my_teams`), where you rank by Desk level (`query_cohort_standing`) and your Desk Pass and forecasts (`get_desk_pass`). **The shared notes** ``` Needs a signed-in member, because it answers about them. A key with no member gets the error member_required. ``` ### What `deskPass` holds Without a Desk Pass, four tools return their free part and a `deskPass` object: `plan_lineup`, `predict_matchup`, `project_standings` and `scout_team`. Your agent gives the person its `message`, while the other fields are there for code that reads the answer. | field | what it holds | | --- | --- | | `error` | `desk_pass_required`, but `free_forecast_used` when the person has used this week's free forecast. | | `tool` | The name of the tool that was called. | | `reason` | Why there's no pass: `no_member` (no account behind the key), `no_subscription` (no pass), `not_current` (a pass that has ended) or `billing_off` (the pass isn't on sale yet). | | `offer` | `full` the first time in a conversation, then `short`, because the person already has the full offer. It's `not_on_sale` while the pass isn't on sale, and always `needs_pass` in ChatGPT. | | `message` | The line your agent gives the person, in the Desk's words. A `full` offer says what the pass adds and how to buy it, with the price when it's known. A `short` one gives a link, but in ChatGPT the line only says what needs the pass. | | `whatThePassAdds` | One sentence on what the pass adds, which is the same for every tool. | | `pricingUrl` | The address of the pricing page, which shows today's price. | | `deskPassDocsUrl` | The address of the help page that says what the pass adds. | | `price` | The price and how often it renews, in a `full` offer only. It's left out when the price can't be read. | | `checkoutUrl` | A link to buy the pass, already tied to the key's account. It's left out when no link could be made, as for a key with no account. | | `checkoutExpiresAt` | When `checkoutUrl` stops working, 30 minutes after the link was made. | In ChatGPT, `deskPass` holds only `error`, `tool`, `reason`, `offer` and `message`, because OpenAI's app rules allow no price and no link. ### `plan_lineup` Your lineup and line chances Lists who has played most for your team. Against an opponent the Desk has a roster for, it adds each team's Desk level on each line, from who has played it this season, and your win chance there. In a Combo or Mixed league, each pair's total sits beside the league number. Tell it who's out, so your side is read without them. Or tell it who plays each line, so those lines are read from the players you pick. After your free forecast each week, it needs a Desk Pass. Without one it lists your players by Desk level and the pairs your league allows. It also gives the Desk's last forecast for your team, line by line, with how each went. **Description and arguments** ``` Plans a doubles and singles lineup for a team the Desk covers. It lists who has played most for your team this season, with their appearances, usual line and Desk level, the Desk's estimate of how they play now. Against a covered opponent it adds each line's win chance, each team's Desk level there and the expected number of lines won. Call it for 'what lineup should we play against X', 'who has played most for us' or 'how do we beat X'. Pass `unavailable` for your players who are out, but pass `lineup` only for the players the person put on each line. Needs a Desk Pass after the member's free forecast each week. Past that, a call gets the free part, with no chance for anything still to be played, and `deskPass`, whose `message` you give the person. Its error is free_forecast_used, or desk_pass_required for a key with no member. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | Your team, e.g. 'Belvedere 18AM3.5A', or its Desk page link or number. Must be a covered team. | | `opponent` | string | no | The opponent team to plan against, by name or Desk page link. Optional. | | `season` | integer | no | Season year. Defaults to the current season. | | `unavailable` | list of string | no | Players on YOUR team who are out. They leave your list and the averages your side of each line is read from. Names may be abbreviated ('Jane'). | | `lineup` | list of object | no | Your own team's lineup, only as the person states it, line by line. Never fill it in yourself. Each line named is read from those players. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_team_record` A team's results and next matches Gives a team's most recent results, line by line, and its next scheduled matches, which works for any team in the leagues the Desk covers. It also lists every team match of the season, and counts the season's record for you, by stage and by month. **Description and arguments** ``` Returns the recorded lines of any team the Desk covers, in any league and season, each with an evidenceId you can cite. It also gives the team's record, which is already counted, every team match of the period and its next matches. Call it when someone asks about a named team's matches, results or next match, or before you state a fact about them. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | Team name or partial name to resolve, e.g. 'Tiburon' or 'Mill Valley men's 18'. Or the team's Desk page link or number. | | `season` | integer | no | Optional season year to filter to, e.g. 2026 | | `includeAllSeasons` | boolean | no | Set true ONLY when the user explicitly asks about prior years / all history. | | `phase` | string | no | Optional competition phase: 'sectionals', 'playoffs', 'postseason', or 'regular season'. Pass it when the member names one — a sectional match keeps its REGULAR-SEASON league name in our data, so there is no other way to find it. Omit to return every phase. | | `date` | string | no | Optional match day, as YYYY-MM-DD, e.g. '2026-02-05'. The rows are then that day's lines, from any season unless `season` is given. Pass it when the question names the day of a match. | | `limit` | integer | no | Max rows to return (default 9, max 60). | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_matchup` Recent results between two teams Gives the most recent results from the matches two teams played against each other, line by line, so you see who won each line. **Description and arguments** ``` Returns the recorded lines from the scorecards where two named teams played each other, in any season, each with an evidenceId. Call it for the head-to-head between two teams, or before you state a fact about it. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team_a` | string | yes | First team name or partial name to resolve. Or the team's Desk page link or number. | | `team_b` | string | yes | Second team name or partial name to resolve. Or the team's Desk page link or number. | | `season` | integer | no | Optional season year to filter to, e.g. 2026 | | `includeAllSeasons` | boolean | no | Set true ONLY when the user explicitly asks about prior years / all history. | | `limit` | integer | no | Max rows to return (default 9, max 60). | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_roster` A team's roster and ratings Gives a team's roster for a season, which lists each player's NTRP rating, their record on that team, and their Desk level when there is one. **Description and arguments** ``` Returns a team's roster for a season, one row per player with an evidenceId: name, NTRP rating, wins, losses, matches and Desk level. Call it when someone asks who is on a team, or before you state a fact about a roster. Pass `season` when the person named a year, because without it the answer covers the current season. If `moreRows` is true, call again with a larger `limit`, up to 60. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | Team name or partial name to resolve. Or the team's Desk page link or number. | | `season` | integer | no | Optional season year to filter to, e.g. 2026 | | `includeAllSeasons` | boolean | no | Set true ONLY when the user explicitly asks about prior years / all history. | | `limit` | integer | no | Max roster rows to return (default 30 = the full roster, max 60). Omit to get the whole team. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_player_history` A player's recent results Gives a player's most recent results, line by line, and their record in singles and doubles for the season and for all years. It also gives the season's record for each team and league they played in, and for each stage: the regular season, the playoffs and the sectionals. **Description and arguments** ``` Returns the recorded lines a named player appeared in, as cited rows told from the player's side, with the player's record, which is already counted by season, team and stage. Call it when someone asks about a player's results, form or history. Never guess at their injury or availability, because the Desk does not hold it. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `player` | string | yes | Player name to resolve, e.g. 'First Last'. Or the player's Desk page link or number. | | `season` | integer | no | Optional season year to filter to, e.g. 2026 | | `includeAllSeasons` | boolean | no | Set true ONLY when the user explicitly asks about prior years / all history. | | `limit` | integer | no | Max rows to return (default 9, max 60). | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_match_log` Desk level, match by match Gives a player's matches in one season, with their Desk level before and after each one, so you see how it moved. It also gives the levels of the other players on court. **Description and arguments** ``` Returns a player's match-by-match rating history for one season: each match they played, their level before and after it, and the other players on court with their levels then. Call it when someone asks how a player's level changed, how they reached it, what one result did to it, or asks to see their matches. Prefer it to query_player_history when the question is about the level rather than the results, because it follows the level match by match. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `player` | string | yes | Player name as the member wrote it. Or the player's Desk page link or number. | | `season` | integer | no | Season year. Omit for the current season. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `compute_aggregate` A team's win rate and counts Counts a team's wins, losses or lines played, or works out its win rate, which it reads from the lines it played. **Description and arguments** ``` Works out one number for any covered team, in any league or season, in code from its recorded lines: `win_rate`, `win_count`, `loss_count` or `match_count`. Call it whenever you would state a count, an average or a win rate, and quote its value exactly rather than working one out. With no `phase` it counts the playoffs and sectionals too, so pass phase:'regular season' for a league record alone. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | Team key or display name. Or the team's Desk page link or number. | | `kind` | string | yes | Which number to compute, over the lines the team played: 'win_rate' (the share of them won, from 0 to 1), 'win_count' (lines won), 'loss_count' (lines lost) or 'match_count' (lines played). | | `season` | integer | no | Optional season year to filter to, e.g. 2026 | | `includeAllSeasons` | boolean | no | Set true ONLY when the user explicitly asks about prior years / all history. | | `phase` | string | no | Optional competition phase: 'sectionals', 'playoffs', 'postseason', or 'regular season'. Pass it when the member names one, or when they ask for a LEAGUE record — a sectional match keeps its REGULAR-SEASON league name in our data, so there is no other way to separate them. Omit to count every phase. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `compute_roster_strength` Each rating group's record Groups a team's players by NTRP rating and gives each group's record, which is counted in player appearances. **Description and arguments** ``` Splits a team's roster by published NTRP level and gives each level group's players, wins, losses and win rate this season, over every league line those players appeared in. Call it for a roster's shape rather than its results, as in 'how strong is their 4.0 half' or 'who carries this team'. It works even before a season has been played, because it then reads the season before. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | Team key or display name. Or the team's Desk page link or number. | | `season` | integer | no | Optional season year, e.g. 2026 | | `phase` | string | no | Optional competition phase: 'sectionals', 'playoffs', 'postseason', or 'regular season'. Pass it when the member names one, or when they ask how a level group did in their LEAGUE — a sectional match keeps its REGULAR-SEASON league name in our data, so there is no other way to separate them. Omit to count every phase. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `compute_match_line_ratings` Matches ranked by lineup strength Ranks a team's matches in a season by how strong a lineup it put out, which it works out from its players' current Desk levels. **Description and arguments** ``` Ranks a team's recorded matches by how strong a lineup it fielded, from each player's current Desk level, so it is not a rating at the time of the match. Call it when someone asks which match had the strongest or weakest lineup, or how a team's line strength moved. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | Team key or display name to resolve, e.g. 'Belvedere mixed 8.0'. Or the team's Desk page link or number. | | `season` | integer | no | Optional season year to filter to, e.g. 2026 | | `includeAllSeasons` | boolean | no | Set true ONLY when the user explicitly asks about prior years / all history. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_player_rating` A player's Desk level and record Gives a player's Desk level, when there is one, their win-loss record across every season on record, and each season's record in singles and doubles. Each season's record is also split by the teams and leagues they played in, and by stage, from the regular season to the sectionals. It also gives a level for singles, doubles, mixed and combo once the player has played enough lines in that format, and no Desk page shows those. A format level does not forecast results better than the Desk level, and in singles it forecasts worse. Use the Desk level for predictions. **Description and arguments** ``` Returns the Desk's read of a named player: their Desk level, their record by season, team, stage and format, the model card id and the lines behind it. Call it when someone asks how strong a player is, or about their rating, level, trend or bump risk. The USTA band is not here, because it is the `rating` on a query_roster row. The Desk publishes no bump prediction. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `player` | string | yes | Player name to resolve, e.g. 'First Last'. Or the player's Desk page link or number. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `predict_matchup` One line's win chance Gives the win chance for one singles or doubles line between the players you name. After your free forecast each week, it needs a Desk Pass, but without one it gives each player's Desk level and record. **Description and arguments** ``` Gives the home side's win probability for one line between named players. It weighs each player's Desk level, how a pair plays together and who is available, while a player the Desk has not yet rated gets a default level. Call it when someone asks who would win, the odds of a matchup, or how a pairing stacks up. Needs a Desk Pass after the member's free forecast each week. Past that, a call gets the free part, with no chance for anything still to be played, and `deskPass`, whose `message` you give the person. Its error is free_forecast_used, or desk_pass_required for a key with no member. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `home_players` | list of string | yes | Home-side player name(s), ideally as they appear on recorded lines, e.g. 'Last, First'. Each may also be a player's Desk page link or number. | | `away_players` | list of string | yes | Away-side player name(s), ideally as they appear on recorded lines. Each may also be a player's Desk page link or number. | | `line_type` | string | no | Optional; inferred from side sizes when omitted. One of 'singles' or 'doubles'. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_team_forecast` Upcoming matches Gives a team's upcoming matches, or a player's across their teams: the opponent, the day, the start time, and home or away. **Description and arguments** ``` Returns a team's upcoming matches on the league schedule, or those of every team a player is on: the opponent, the day, the start time, and home or away. Call it for a next match, today's or tomorrow's match, or the schedule. Pass `team` for a named team, or `player` for a first-person ask like 'who am I playing'. It gives no team win chance. A team match's chance is only in the live playoff report from project_standings, which comes with the Desk Pass. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | no | Team name to resolve, e.g. 'Belvedere mixed 8.0' or 'BELVEDERE TC 40MX8.0A'. Or the team's Desk page link or number. | | `player` | string | no | Player whose teams' upcoming matches to fetch, e.g. 'First Last'. Or the player's Desk page link or number. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_club_teams` A club's teams this year Gives the teams a club has this year, and which one plays next. **Description and arguments** ``` Returns the teams a named club fields this year, and which of them plays next. Call it whenever someone asks about a whole club by name, before you narrow the question to a single team. For how the club is doing, call query_club, which reads the club's page. Pass any league words the person used in `qualifier`, such as 'combo', 'mixed', 'womens', '40 & over' or '3.5', because dropping them answers a different question. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `club` | string | yes | The club name, e.g. 'Belvedere'. | | `qualifier` | string | no | Any league words the asker used alongside the club — 'combo', 'mixed', 'womens', '40 and over', '3.5'. Omit only when they named the club alone. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_club` What a club's page shows Gives what a club's page shows, for its newest season or a past one you name. That's each of its teams with its place in the Desk's unofficial league table and its record. While a team has a team match left, it also says whether the team can still finish first. Then come the club's next matches, its latest results, its record against other clubs, and every season the club fielded a team, each with its page. Asked for a briefing, it gives the club's week instead: its team matches and the checks the Desk writes from the records. **Description and arguments** ``` Returns what a club's page on The Tennis Desk shows, in one call. That is its teams in a season by league, each with its place in the Desk's unofficial league table and its record. It also gives the club's next matches, latest results and record against each other club. Call it when someone asks how a club is doing, its record against other clubs, or where its teams stand. For only its list of teams, or which plays next, query_club_teams is enough. Pass `club`: the club's name as people say it or as USTA prints it, or its page address or number. Pass `season`, a year, for that season's page, and `briefing` true for the club's week. A team's `firstPlace` says whether it can still finish first, which assumes each scheduled match is played. In a result, * marks a line won or lost by default. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `club` | string | yes | The club: its name as people say it or as USTA prints it, e.g. 'Scott Valley', or its club page address or number, e.g. '/c/218'. | | `briefing` | boolean | no | True for the club's week instead of its page: every team match in the next 7 days, counting the day of the call in Pacific time, each with the other team's place in the Desk's unofficial league table and their earlier meetings this season, and the checks the Desk writes from the records, each with the pages it rests on. Its `firstPlace` says whether each club team that plays in those days can still finish first, and when none plays, each team with a team match left. The answer's `briefing` is null when no team match falls in those days. Leave it out, or call again without it, for the club's page. | | `season` | integer | no | A season year, 2022 or later: the club's page in that season, its teams, places and records then. Leave it out for the newest season the club fielded a team. A season the club has no team in is not found, and the answer names the seasons it has. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_my_teams` Your own teams Gives the teams you are on or have played for, in the leagues the Desk covers. It needs a key you made while signed in. **Description and arguments** ``` Returns the member's own teams, the ones they are on or have played for, which come from their affiliations. Call it when the person asks about their own teams, as in 'what teams am I on', and set thisYear:true for this year's. A question that names a team, a club or a player is about that one, so use the other tools for it, signed in or not. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `thisYear` | boolean | no | Set true for 'this year / this season' — the current league year's teams only. Omit for all covered teams. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_cohort_standing` Where you rank by Desk level Ranks players by Desk level within an age group, gender or NTRP rating you choose, with your own place when you are in it. It needs a key you made while signed in. **Description and arguments** ``` Ranks a group of players by Desk level and gives the member's place in it. Call it for 'where do I stand', 'how do I compare to the top players', a ranking or a percentile, or the top players in an age group or level. Define the group with `ageBand`, `division` and `level`, or leave them out so it fills the group from the member's team. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `ageBand` | string | no | Age group: '18', '40', '55', '65', or '70' (the '& Over' band). | | `division` | string | no | 'men', 'women', or 'mixed' — the gender ladder. Omit to use the member's own. | | `level` | string | no | NTRP level as a string, e.g. '4.0' or '8.0' (mixed). Omit for a whole age-group ladder. | | `topN` | integer | no | How many top players to show (default 10). | | `season` | integer | no | Optional league year for cohort membership, e.g. 2026. Defaults to the current season. | | `includeAllSeasons` | boolean | no | Set true ONLY to pool cohort membership across all years. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_league_standings` An unofficial league table Works out the league table for a team's flight, or for a league in an area you name, from recorded results, with the team's place in it. It says whether the regular season is over, who won the playoffs when the Desk holds them, and what split teams on the same record. It also counts how far each team finished behind first place and behind the last place in the playoffs. It isn't USTA's official table, because a few USTA rules can't be worked out from results alone. **Description and arguments** ``` Builds the Desk's unofficial league table for a team's flight, with the named team's place, which it ranks from recorded results by the league's own rule and tie-breaks. Call it for the standings, how a team finished, who won the league or 'the table'. Pass the team name, or nothing for the member's own team. For a whole league, pass `league` and `area` instead, such as "55 & over men's 8.0" and 'Marin'. Never pass a club or an area as the team. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | no | Team or club name whose league table to build, e.g. 'Belvedere' or 'Belvedere mixed 8.0'. Omit to use the signed-in member's own team, or to ask by `league`. Or the team's Desk page link or number. | | `league` | string | no | A league to build the table of when no team is named, with every league word the question gives, the age group included: its name, e.g. 'Adult 55 & Over Mens 8.0', or its words, e.g. "55 & over men's 8.0" or "women's combo 6.5 daytime". Used only without `team`. | | `area` | string | no | The area of that league, as the Desk names it, e.g. 'Marin' or 'San Francisco'. Used only with `league`. | | `season` | integer | no | League year, e.g. 2025. Defaults to the current season. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `plan_lineup_from_availability` A lineup from NorCal availability Plans your lineup from the answers your players gave on the NorCal availability grid, with each player's USTA player id and the values for the lineup form. Each line's win chance comes with a Desk Pass, after your free forecast each week. **Description and arguments** ``` Plans a lineup from the availability a member's agent read on the USTA NorCal league site, so the agent can fill in the lineup form. Pass the team, the match and each player's answer in USTA's own words: yes, No, maybe, call last, First shift only or Second shift only. The result also holds the values for the lineup form, and what to confirm with the member before Save. Each line's win chance needs a Desk Pass after the member's free forecast each week. The Desk never acts on the USTA site, so the member, or their own agent in their own session, presses Save. Call it when someone pastes or describes who can play a match and asks for a lineup. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | The member's team: the Desk's team id, which is USTA NorCal's own team id, a link to its team page, or its name. | | `opponent` | string | no | The other team in the match, as the schedule names it. With date, or alone. | | `date` | string | no | The match date, as 2026-10-24. With opponent, or alone. With neither, the plan is for the team's next match. | | `matchId` | string | no | USTA NorCal's own id for the match, read from the link on the team page. Optional: it fills in the form's path. | | `availability` | list of object | yes | Each player's answer, as the agent read it on NorCal's availability grid or as the member pasted it. | | `season` | integer | no | Season year. Defaults to the current season. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `prepare_score_entry` Values for the score form Turns the scores you report into what the NorCal score form takes, each set from the winning team's side, and checks them against the form's rules. Given the posted score too, it says where the two differ. **Description and arguments** ``` Prepares the values for the score form on the USTA NorCal league site, from the scores a member reports. Pass the team, the match and each line: its players on both sides, its set scores, and its status when a line was not completed. Give the sets from the member's own side, unless scoresFrom says otherwise. Pass posted too, with each line as NorCal shows it, so it can list every line where the two differ. The Desk never acts on the USTA site, so the member, or their own agent in their own session, presses Submit. Call it when someone wants to enter or check a match score on NorCal. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | The member's team: the Desk's team id, which is USTA NorCal's own team id, a link to its team page, or its name. | | `opponent` | string | no | The other team in the match, as the schedule names it. With date, or alone. | | `date` | string | no | The date the match was played, as 2026-10-11. The form takes the date played, even when the schedule shows another. | | `matchId` | string | no | USTA NorCal's own id for the match, read from the link on the team page. Optional: it fills in the form's path. | | `weAreHome` | boolean | no | Whether the member's team was the home team. Read from the schedule when left out. | | `lines` | list of object | yes | Each line as the member reports it. | | `posted` | list of object | no | Each line as NorCal shows it after the other team entered the score, to compare with the member's record. | | `season` | integer | no | Season year. Defaults to the current season. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `match_date_check` A home match date, checked Checks a date and start time you want to post for a home match against what the NorCal form accepts. It also warns that posting the date emails the other team at once. **Description and arguments** ``` Checks a proposed date and time for a home match before the captain posts it on the USTA NorCal league site. Pass the team, the match and the proposed date and start time, and the format and second-shift time if the captain has them. It says whether the form offers that time, which formats the form offers for the team's lines, and whether the team already plays that day. The Desk never acts on the USTA site, so the captain, or their own agent in their own session, presses Submit. Call it when a captain asks whether a date works, or before an agent fills the post-dates form. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | The member's team: the Desk's team id, which is USTA NorCal's own team id, a link to its team page, or its name. | | `opponent` | string | no | The other team in the match, as the schedule names it. With date, or alone. | | `date` | string | no | The date the schedule shows for the match now, as 2026-10-24, to find it. Optional with opponent. | | `proposedDate` | string | yes | The date the captain wants to post, as 2026-10-24. | | `proposedTime` | string | yes | The start time the captain wants, as 6:30 PM. | | `format` | string | no | The match format, as the form names it: All 3, 2/1 or 1/2 for three lines, and All 5, 3/2, 2/3, 4/1 or 1/4 for five. | | `secondShiftTime` | string | no | The second shift's start time, for a two-shift format. | | `season` | integer | no | Season year. Defaults to the current season. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `availability_loop` Chase who hasn't answered Takes the NorCal availability grid your agent read and lists the players who haven't answered the next match or said maybe. It writes one group message for your team and a short text for each player, for you to send yourself, and asks a maybe for a yes or no. It says when to run it again, and plans the lineup and its team email at the deadline. Each line's win chance comes with a Desk Pass, after your free forecast each week. **Description and arguments** ``` Finds the players who have not answered the next match on the USTA NorCal availability grid. Pass the team and the grid as your agent read it: each match column's header, and each player's row with one cell per column. It lists each player whose answer is blank or maybe, and writes one group message for the team with the deadline and the team grid link. Each line's win chance needs a Desk Pass after the member's free forecast each week. The Desk writes, and the captain sends every message from their own phone or email. Never send a text or an email yourself, and never read a teammate's phone or email. Call it when a captain asks who has not answered on NorCal, or wants reminder texts. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | no | The team the grid is for: the Desk's team id, which is NorCal's own team id, a link to its team page, or its name. Left out, the signed-in member's own team this season. | | `columns` | list of string | no | Each match column's header on the grid, as NorCal prints it, in order, for example #8 Sunday 10/18/26. | | `rows` | list of object | no | One row for each player on the grid. | | `deadline` | string | no | The answer deadline, as 2026-10-16 1:00 PM. Left out, 48 hours before the match starts. | | `signAs` | string | no | The captain's first name, which signs the lineup email. | | `format` | string | no | The match format, as the NorCal post-dates form names it: All 3 or All 5 for one shift, or a split such as 2/1. | | `lineupNow` | boolean | no | Set true to plan the lineup now, before the deadline, from the answers so far. | | `matchId` | string | no | NorCal's own id for the match, from the Line-up link. Optional: it fills in the lineup form's path. | | `season` | integer | no | Season year. Defaults to the current season. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `read_docs` Paragraphs from the Desk's docs Gives the docs' own paragraphs on a question about the Desk itself, word for word, which it finds by topic on any page, each with a link to its section. **Description and arguments** ``` Reads The Tennis Desk's own docs, word for word. They cover what the Desk is, a Desk level, what is free and what the Desk Pass adds, coverage and updates, agents, privacy and how a league table is ordered. Call it when someone asks about the Desk itself rather than a team, a player or a match. Pass `about`, a few words on what to find, and `pages` for a page you know. It needs no Desk Pass, and a call does not count toward the account's daily or monthly limit. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `pages` | list of string | no | One or two docs pages, each named by its address after /docs/, as https://thetennisdesk.com/docs.md lists them, for example 'desk-level'. The front page is 'index'. A page read_docs does not hold is answered with the pages it holds. Optional: leave it out to find a topic on any page. | | `about` | string | no | A few words on what to find, for example 'how it compares with NTRP'. With no `pages`, the sections of any page that match it. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `read_research` The Desk's research figures Gives the Desk's published research about players in general, word for word: each piece's headline, its answers with their figures, and the group of past players it counts. It also gives every figure the piece prints, so a split by rating or by season comes back with the rest. **Description and arguments** ``` Reads the Desk's published research about players in general, word for word. Each piece comes with its question, headline, answers and figures, the group of past players it counts and the day it was measured. Call it when someone asks about players or teams in general, such as how often players move up or back down, or home advantage. Never call it for one named player, team or match, because every figure is a rate over a group. Pass `about`, a few words on the question, or `pieces` for a piece you know. It needs no Desk Pass. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `about` | string | no | A few words on the question, for example 'how players do after a bump, and how many move back down'. | | `pieces` | list of string | no | One or two pieces, each named by its address after /research/, as https://thetennisdesk.com/research lists them. Optional. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_coverage` What the Desk covers Says what the Desk covers: which areas, leagues, levels, clubs, teams and seasons, what kinds of question it can answer, and where to ask for another area. **Description and arguments** ``` Answers what the Desk covers: which areas, leagues, levels, clubs, teams and seasons are on record, and what kinds of question it can answer at all. Call it whenever someone asks what you can look up, what data you have, or which leagues, levels or areas are covered. It takes no arguments, because it reports the whole census rather than a slice of it. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `project_standings` How a league could finish Gives your team's live playoff report: its playoff chance today and the biggest jump or drop in it this season, with the matches played in that time. It also gives its chance for each number of matches left it could win, from none to all, and the projected table with each team's chance of each place. Every match left is listed too, with each side's chance and the result that helps you most, and your team's chance of each of its lines. It adds the help your team needs from other matches and its chance of each seed. It needs a Desk Pass. Without one it gives where your team stands, its matches left and how many results can still take it to the playoffs. **Description and arguments** ``` Projects how a league table could finish, from the matches left and the Desk's line forecasts. It gives each team's likely place, its chance to finish first and, when the Desk knows the playoff cut, its chance to make the playoffs. It also says what the named team needs, while a Desk Pass adds the team's live playoff report. Call it for a team's playoff chances or what it needs. Pass the team, or `league` and `area` for a whole league, or neither for the member's own team. Needs a Desk Pass. Without one, a call gets the free part, with no chance in it, and `deskPass`, whose `message` you give the person. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | no | The team whose league to project, e.g. 'Belvedere men's 7.5'. Omit for the signed-in member's own team. Or the team's Desk page link or number. | | `league` | string | no | A league to project when no team is named, with its words, e.g. "55 & over men's 8.0". Used only without `team`. | | `area` | string | no | The area of that league, e.g. 'Marin'. Used only with `league`. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_playoff_history` Past playoff chances Gives your team's playoff chances from a week ago and earlier, one a week, and what moved them most: the change between two days and the matches played between them. Today's chance is not in it. **Description and arguments** ``` Gives a team's playoff chances from a week ago and earlier, one a week, each as of its day. It also says what moved the chance most: the change between two days and the matches played between them. Call it for how a team's playoff chances have changed, or what its chances were last week. Pass the team, or nothing for the member's own team. It never gives today's chance: the `project_standings` tool gives that, with the Desk Pass. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | no | The team, e.g. 'Belvedere men's 7.5'. Omit for the signed-in member's own team. Or the team's Desk page link or number. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `query_forecast_results` How past forecasts did Gives your team's latest matches the Desk forecast before they were played: each line's chance for your team, and whether you won that line and the match. Matches still to come are not in it. **Description and arguments** ``` Gives a team's latest matches that the Desk forecast before they were played. For each line, it gives the team's chance as the Desk logged it the night before, and whether the team won the line. It also gives each match's result. Call it for how the Desk's forecasts did for a team, or what the Desk gave a team in a past match. Pass the team, or nothing for the member's own team. It gives only matches already played, never a chance for a match still to come, which comes with the Desk Pass. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | no | The team, e.g. 'Belvedere men's 7.5'. Omit for the signed-in member's own team. Or the team's Desk page link or number. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `scout_team` A written scout of one team Writes the Desk's scout of one team: its ranked reads of who matters and how the lines go, each with its evidence. It needs a Desk Pass, but without one it gives the team's record, recent results, strongest players by Desk level and its free scout page. **Description and arguments** ``` Writes the Desk's scout of one team it covers: its ranked reads of who matters and how the lines go, each with its evidence. Call it when someone asks for a scout, a breakdown of a team, or how to beat a named team. Pass `team`, a team the Desk covers, by name or Desk page link. Never call it for a whole club, because a scout is of one team. Needs a Desk Pass. Without one, a call gets the free part, with no chance in it, and `deskPass`, whose `message` you give the person. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `team` | string | yes | The team to scout, e.g. 'Belvedere 18AM3.5A', or its Desk page link or number. | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | ### `get_desk_pass` Your Desk Pass and forecasts Says whether you hold the Desk Pass and when it renews, and how many forecasts you have left this week. It needs you signed in. **Description and arguments** ``` Says whether the signed-in member holds the Desk Pass, when it renews or ends, how many forecasts they have left this week and when more come. Call it when someone asks about their Desk Pass or their forecasts. It takes no arguments. ``` | argument | type | required | what it is | | --- | --- | --- | --- | | `asked` | string | no | The person's question word for word, never paraphrased. Leave it out rather than invent one. | Source: https://thetennisdesk.com/docs/agent-tools --- # Glossary > Plain meanings of the tennis words and the Desk's own words used across these docs. The words the Desk uses for tennis and for its own numbers, and what each one means here. ## The structure of play **team match** One team against another on a date, made up of several lines. The two teams can be from the same club. **line** One individual match within a team match. **individual match** The regulation's formal term for a line. **flight** The group of teams inside one NTRP level of one local league that play each other. **division** The program: **Adult**, **Mixed**, and in NorCal **Combo**. **NTRP rating** The rating USTA publishes for a player, like "3.5C", "4.0s" or "4.5A". The letter after the number says how USTA set it. **C** is a computer rating, **s** is self-rated, **A** is a rating the player appealed, and **D** marks a rating USTA disqualified during the year. **rating year** USTA's name for the stretch of dates whose matches count toward a year-end NTRP rating. The docs page "Does my match count toward my NTRP rating?" says when a rating year ends, quoting and linking USTA. **age group** The ages a league is for: 18 & Over, 40 & Over, 55 & Over, 65 & Over or 70 & Over. **Section** One of the 17 USTA **Sectional Associations**, or the territory it runs. The Desk's section is USTA NorCal. **area** The geography a local league covers. The Desk covers some of the areas in USTA NorCal, and Browse lists them. **club** An organization that enters teams with USTA NorCal, such as a tennis club, a park or a school. A team belongs to every club whose USTA page lists it, so a NOVATO TC/PIONEER PK team that both clubs list belongs to both. ## Results and scoring **points** The league's own match points, as the scorecard records them. Under Points per Position, a win at Doubles 1 is worth **2** points, and a win at each other line **1**. So a team match of four lines totals **5**. **standings / league table** Teams in the order the league's published rule sets. First comes **total team matches won**, then most individual match wins, fewest sets lost, fewest games lost and head-to-head. **tie** Two teams with an equal score on one of the standings' criteria, such as team matches won. The league's rules use the word only this way. **draw** The **lottery performed by USTA NorCal staff** to settle an unfinished match or place advancing teams. **set, game, and the match tiebreak** A match tiebreak played in place of a third set counts as **one set**. When the standings break a tie, it also counts as **one game**. For a Desk level, a match tiebreak decides who won the line and adds nothing to the margin, which comes from the other sets. **default** A line the league scored without it being played. **valid match** USTA's term for a match in which at least six games were completed. USTA needs three of them to generate a year-end NTRP rating. USTA states no rule that leaves a shorter match out of the year-end calculation, so the Desk states none. The docs page "Does my match count toward my NTRP rating?" gives USTA's definition of a valid match, quoting and linking USTA. ## The Desk's own numbers **Desk level** The number the Desk computes for each player, its estimate of how they are playing now. It's on the **same scale as NTRP**, so one NTRP step is one whole point, and it shows two decimals. The Desk works it out again each time it reads new results, once a day. It moves after each rated line, by how the result and the score compare with what the Desk expected. When USTA moves a player's NTRP rating, it also moves part of the way toward about the middle of the new range, unless it's already past that point. It makes that move at the player's first match at the new rating. **Desk Pass** The paid tier. One person holds it, and its forecasts work for any team the Desk covers, opponents included. **range** The range of Desk levels that one NTRP rating covers. A rating covers the half point of Desk level up to it: a 4.0 covers Desk levels above 3.50, up to and including 4.00. So a 3.5 at Desk level 3.50 and a 4.0 at Desk level 3.50 meet as equals. Source: https://thetennisdesk.com/docs/glossary --- # Questions about the Desk > What a Desk level is, where the results come from, what is free, and what the marks on a line mean. ## What is a Desk level? Your Desk level is the Desk's estimate of how well you're playing now. Your NTRP rating covers a range of Desk levels on the same scale. A Desk level a little under your rating's number is normal, because that number is the top of the range it covers. A level is an estimate, so yours can fall outside the range of your rating. The Desk updates every level once a day from USTA's published results, so a page's levels are as of the data run at its foot. USTA doesn't publish Desk levels or stand behind them. ## What is a line? A line is one singles or doubles match inside a team match. A team match is one team against another on a date. A rated line is one the Desk could score: both sides named, a winner recorded, and nobody defaulted. Your record on the Desk counts only rated lines, so it can differ from your record on USTA's roster. ## What is the chart beside a Desk level? The chart traces a Desk level through one year, a point after each rated line, oldest first. On a match page, the chart covers the year the match was played, and a dot marks the match itself. One rated line in the year shows as a short dash. The shaded strip is the player's NTRP rating range, and a player page prints the rating on it, like NTRP 4.0, when there's room. ## What does up or down after a Desk level mean? “Up” or “down” shows which way a Desk level has moved this year. You see one only after a move of at least 0.30, since a level drifts a little even when nothing about your play has changed. When the Desk tested players whose play had not changed, about one in 20 still showed a move of 0.30 or more. ## What does upset mean on a line? A line is tagged upset when the side with the lower Desk levels won it. The tag compares the levels the match page prints, which are as of its data run, not the levels on the day of the match. The winners' average Desk level has to be lower than the losers' by more than 0.05, so a near-even line is never called an upset. ## What does default mean on a line? A line tagged default was not played. One side couldn't field players, so the other side got the win. The Desk leaves a defaulted line out of every player's record, and never tags it upset. A league table still counts a defaulted line for the side given the win, because USTA's scorecard does. ## How is a league table ordered? In most leagues, teams rank by team matches won, then by lines won. The ordering rule is in USTA NorCal's 2026 league regulations, page 36. An Adult 40 and Over league with four lines ranks by points instead, and a win at number one doubles counts twice. Teams still tied then rank by fewest sets lost, then fewest games lost, then head-to-head. If teams are still tied after head-to-head, they share a place, because the rule's last step is a coin toss the Desk can't make. Every set and game in the table comes from a recorded scorecard, but two published rules decide a result with no scorecard to read. An unplayed match counts as a loss for both teams. A NorCal staff draw picks the winner of an unfinished match. The Desk never sees a result decided either of those ways, which is why it marks every league table unofficial. ## What do the letters after an NTRP rating mean? After an NTRP rating, C means a computer rating, s means self-rated, and A means the player appealed. The letters after an NTRP rating are USTA's, and the Desk copies them exactly as the roster publishes them. D means USTA disqualified the rating during the year, and its two numbers are the old rating, then the new one. On a league page, the “Rated” column shows the letter alone when a rating is at the league's own NTRP level. A rating at any other NTRP level shows in full, like 3.5C on a 4.0 league. A disqualified rating always shows in full, because it has two numbers. ## What is a data run? A data run is one of the Desk's daily updates, when it reads the results USTA has published since the last update. A result USTA publishes between runs appears after the next one. Each run updates every player, team, match and league page, and each of those pages names the run and its date at its foot. ## What costs money? Only the Desk Pass costs money. Results, Desk levels, records and every player, team, match and league page are free to read, with no account. A Desk Pass adds each line's win chance. Signed in with an email address, your first forecast each week is free, in the chat or your own agent. See [how many forecasts you get a week](https://thetennisdesk.com/docs/desk-pass#how-many-forecasts-you-get) and [today's price](https://thetennisdesk.com/#/pricing?from=faq). ## Where do the results come from? The Desk is built from the USTA NorCal league results USTA has already published, and it reads the new ones once a day. Source: https://thetennisdesk.com/docs/faq --- # Changelog > What changed on the Desk that you can see, one short list per week, newest first. What changed on the Desk, one week at a time, newest first. ## Week of October 19, 2026 **[Connect without a key](https://thetennisdesk.com/docs/use-the-desk-in-chatgpt)** Ask free questions in ChatGPT or the Claude app, then sign in by email for your teams and forecasts. **[Playoff chances for teams](https://thetennisdesk.com/docs/ask-the-chat#ask-about-the-playoffs)** Signed in, ask how a team can still reach the playoffs, and see its chances with a Desk Pass. **[Share a chat answer](https://thetennisdesk.com/docs/ask-the-chat#share-an-answer)** Signed in, send a link that shows your question, the answer and its tables. ### Improved - [Signed-in chat gives short, fact-checked answers with linked names.](https://thetennisdesk.com/docs/ask-the-chat) - [Signed in, tap a button to pick between matching names.](https://thetennisdesk.com/docs/ask-the-chat) - [Signed in, lineup plans suggest doubles pairs from your players.](https://thetennisdesk.com/docs/plan-a-lineup#suggested-pairs) - [After an area request, hold today's Desk Pass price at no cost.](https://thetennisdesk.com/docs/coverage-and-data-runs#if-your-area-is-not-covered) - [Bump research uses current Desk levels for its figures.](https://thetennisdesk.com/research/where-do-you-have-to-finish-to-get-bumped) ### Fixed - [Pasted availability lists stay out of chat boxes.](https://thetennisdesk.com/docs/norcal-forms) - [Teams with the same name appear separately by flight.](https://thetennisdesk.com/docs/ask-the-chat) - [The sign-in panel leaves room for chat on phones.](https://thetennisdesk.com/docs/ask-the-chat) - [The chat gives a clear retry message when it cannot answer.](https://thetennisdesk.com/docs/ask-the-chat) - [League-table answers say a playoff winner won its flight's final.](https://thetennisdesk.com/docs/league-page) ## Week of October 12, 2026 **Your teams by email** Get your teams' results and next match by email each week, with a stop link in every message. **[Help with NorCal forms](https://thetennisdesk.com/docs/norcal-forms)** Have your agent or the chat prepare NorCal lineup, score and match date forms for you to check and submit. **[Research on lineup order](https://thetennisdesk.com/research/does-putting-your-best-pair-on-line-1-win-more-matches)** Read the measured finding on whether putting your best pair first wins more team matches. ### Improved - [Combo and Mixed forecasts show pair totals and the league number.](https://thetennisdesk.com/docs/how-the-forecast-works) - [Research findings appear on the home page and in chat.](https://thetennisdesk.com/research) - [Chat and agent answers show player records, league playoffs and next matches.](https://thetennisdesk.com/docs/agent-tools) - [Lineup plans follow pairing rules, and announcements flag pairs to check.](https://thetennisdesk.com/docs/norcal-forms) - [Team, league and player pages link to "Does my match count?"](https://thetennisdesk.com/docs/does-my-match-count) ### Fixed - [Players without a rated line now show no Desk level.](https://thetennisdesk.com/docs/desk-level#what-a-desk-level-is-built-from) - [When the chat asks which team, your choice answers that question.](https://thetennisdesk.com/docs/ask-the-chat) - [Team match results use the asked team's side and name postseason stages.](https://thetennisdesk.com/docs/agent-tools) - [After a failed chat, home starts fresh and keeps the old chat.](https://thetennisdesk.com/docs/ask-the-chat) - [Agent connections give clear key errors and accept team or player links.](https://thetennisdesk.com/docs/connect-an-agent) ## Week of October 5, 2026 **[Which matches count](https://thetennisdesk.com/docs/does-my-match-count)** Check which matches count toward your year-end NTRP rating in the docs or chat, with links to USTA's rules. **[After a bump](https://thetennisdesk.com/research/what-happens-after-a-bump)** Read how players did after a bump and how many moved down again. **[A free weekly forecast](https://thetennisdesk.com/docs/desk-pass)** Ask from the home page and get a free forecast each week when you create an account with your email. ### Improved - [Desk levels weigh the score more and move toward new NTRP ratings.](https://thetennisdesk.com/docs/desk-level#how-a-rated-line-moves-your-level) - [Pages, forecasts and chat answers lead with less text.](https://thetennisdesk.com/docs) - [Win chances now use who has actually played each line this season.](https://thetennisdesk.com/docs/how-the-forecast-works#how-it-reads-each-teams-level-on-a-line) - [Ask the Desk to cover your area from search or chat.](https://thetennisdesk.com/docs/coverage-and-data-runs#if-your-area-is-not-covered) - [Club player lists show regulars first and fit on phones.](https://thetennisdesk.com/docs/club-page#players) ### Fixed - [Agent setup commands now wrap on phones.](https://thetennisdesk.com/docs/connect-an-agent) - [Tennis advice questions get a question back, not unrelated help.](https://thetennisdesk.com/docs/ask-the-chat) - [Once your free forecast is used, replies still name your next match.](https://thetennisdesk.com/docs/chat-limits-and-refusals) - Signing up with an existing email opens your account. - [A help link now opens the right league section.](https://thetennisdesk.com/docs/league-page#highest-desk-levels) ## Week of September 28, 2026 **[Club pages](https://thetennisdesk.com/docs/club-page)** See every team a club fields, this week's matches, and which teams can still finish first. **[Player pages, simplified](https://thetennisdesk.com/docs/player-page)** Level, record and last match now sit at the top. **[Club briefings in the chat](https://thetennisdesk.com/docs/club-page#brief-me-in-the-chat)** Ask the chat to brief you on a club, with its key matches and what to watch. ### Improved - Every player name links to that player. - [Search lists teams still playing first.](https://thetennisdesk.com/search) - [A Desk Pass now covers 10 forecasts a week.](https://thetennisdesk.com/docs/desk-pass#how-many-forecasts-you-get) - [Team and league pages open with the season, standings and next matches.](https://thetennisdesk.com/docs/league-page) - [Help pages answer each task and show how forecasts did.](https://thetennisdesk.com/docs) ### Fixed - Line scores now match the W or L beside them. - January matches now show their year. - Desk Pass forecasts now include every line a team plays. - A team match filed by both teams now counts once. - [A finished league now reads final.](https://thetennisdesk.com/docs/league-page) ## Week of September 21, 2026 **[Sign in with email](https://thetennisdesk.com/docs/buy-and-manage-the-desk-pass)** Sign up with your email, then buy a Desk Pass from any phone or computer. **[Email your next match](https://thetennisdesk.com/docs/send-the-announcement)** Press one button and your email app opens with your team's next match announcement already written. **[Connect your own agent](https://thetennisdesk.com/docs/connect-an-agent)** Copy one setup prompt from the agent page to connect the Desk to Claude Code or Cursor. ### Improved - [Chat answers state each result, score and date as recorded.](https://thetennisdesk.com/docs/ask-the-chat) - [Ask what you play today and get the scheduled match.](https://thetennisdesk.com/docs/ask-the-chat) - In chat, tap the right player when two share a name. - Player names in chat answers link to their pages. - [Terms and privacy now sit together on one page.](https://thetennisdesk.com/terms) ### Fixed - Match pages set the score apart from the team names. - The player match log fits a phone screen. - The sign-in panel fits a phone and says what each button does. - Latest matches on the home page now show more on request. ## Week of September 14, 2026 **[Your next match, ready to share](https://thetennisdesk.com/docs/send-the-announcement)** Copy an announcement of your team's next match, and compare both rosters on one chart. **[Level changes in the match log](https://thetennisdesk.com/docs/player-page)** See what each line did to a player's Desk level, beside the levels of partners and opponents. **[New research on bumps](https://thetennisdesk.com/research)** Read where players finish in their range before a bump, and whether sectionals decide it. ### Improved - Two players who share a name each get their own linked page. - [The search page suggests names as you type.](https://thetennisdesk.com/search) - [Search marks which leagues are still being played.](https://thetennisdesk.com/search) - [Combo and mixed lines show the pair's combined level.](https://thetennisdesk.com/docs/match-page) - [A new self-rated player's level now starts from their first scores.](https://thetennisdesk.com/docs/desk-level) ### Fixed - Every team in a flight now lists its roster. - Chat league tables show one flight at a time. - [Search keeps combo and mixed teams when you type those words.](https://thetennisdesk.com/search) ## Week of September 7, 2026 **[Browse every league](https://thetennisdesk.com/browse)** See every league by year and area, filter to one, and find the leagues still playing first. **[Search as you type](https://thetennisdesk.com/search)** Find players, teams, leagues and clubs as you type, even with a nickname or a typo. **[Tennis Desk Research](https://thetennisdesk.com/research)** Read what years of league results show, such as whether the home team really wins more. ### Improved - [Paste a USTA scorecard link into search to open that match.](https://thetennisdesk.com/search) - [Player pages open on this year, with every year one tap away.](https://thetennisdesk.com/docs/player-page) - Sign in from the menu on any screen, phone included. - [Manage or cancel your Desk Pass from the pricing page.](https://thetennisdesk.com/docs/buy-and-manage-the-desk-pass) - A missing page links home and offers a tennis rally game. ### Fixed - [League tables list every team in the flight.](https://thetennisdesk.com/docs/league-page) - Upcoming matches show on their current date only. - Tables on a phone keep their numbers in view. - Team names in plus-level leagues read correctly. - The logo takes you home on a phone too. ## Week of August 31, 2026 **[Pages for players and teams](https://thetennisdesk.com/browse)** Every player, team, league and match has its own page you can open, bookmark and send. **[Search and newest matches](https://thetennisdesk.com/search)** Search any player, team or league by name, and see the newest matches on the home page. **[The Desk Pass](https://thetennisdesk.com/docs/desk-pass)** Buy a Desk Pass to scout an opponent and forecast a lineup in the chat. ### Improved - The site is now The Tennis Desk, at thetennisdesk.com. - [San Francisco teams and players are now covered, beside Marin.](https://thetennisdesk.com/docs/coverage-and-data-runs) - The chat answers more questions about players. ### Fixed - The chat now says correctly whether a player won or lost. - [Records and Desk levels now count only lines that were played.](https://thetennisdesk.com/docs/desk-level) - The chat labels career records as career, not this season. - [Your free chat allowance is your own, not your network's.](https://thetennisdesk.com/docs/chat-limits-and-refusals) ## Week of August 24, 2026 ### Fixed - [Match-by-match levels now run in date order, January included.](https://thetennisdesk.com/docs/follow-your-level) ## Week of August 17, 2026 **[Desk levels on every roster](https://thetennisdesk.com/docs/desk-level)** See each player's Desk level, to two decimals, on rosters, lineups and in chat answers. ## Week of August 10, 2026 **[Your level after every line](https://thetennisdesk.com/docs/follow-your-level)** See how a player's Desk level moved after each line, and tap any opponent to see theirs. **[Request your area](https://thetennisdesk.com/docs/coverage-and-data-runs)** Ask about a team outside the covered area, and request that the Desk add your area. ### Improved - [The Desk now covers 24 Marin clubs, up from 10.](https://thetennisdesk.com/docs/coverage-and-data-runs) - Share a league table like any other answer. - A long club team list shows how many teams it has. - Before a season starts, see a flight's teams, rosters and schedule. ### Fixed - Asking for a club's Combo teams now lists its Combo teams. - Questions that end in a question mark now find the team. - [Desk levels now sit on the NTRP scale, not above it.](https://thetennisdesk.com/docs/desk-level) - [Desk levels count a match tiebreak correctly and no longer drift upward.](https://thetennisdesk.com/docs/desk-level) - Every number in a chat answer now comes from recorded results. ## Week of August 3, 2026 **[Share an answer](https://thetennisdesk.com/docs/ask-the-chat)** Share any chat answer or report with one button, and anyone with the link can open it. **[Rosters by season](https://thetennisdesk.com/docs/ask-the-chat)** Pick any season a team played, or all seasons, on a roster in the chat. **[League standings in the chat](https://thetennisdesk.com/docs/league-page)** Ask how a team stands in its flight, in the order the league's published rule sets. ### Improved - On phones, the menu hides and reports open full screen. - A player's record shows Adult results beside the overall record. - [Ask the chat what it can look up to see its leagues.](https://thetennisdesk.com/docs/ask-the-chat) - [Desk levels now pick the winner of a line more often.](https://thetennisdesk.com/docs/desk-level) - For a team with few results, the chat names who they fielded. ### Fixed - The chat reads "this year" as the current season. - [New teams, Combo teams included, appear within a day.](https://thetennisdesk.com/docs/coverage-and-data-runs) - A club's team list shows only teams playing this season. - Your own reports still open after you sign in again. - Chat answers no longer fail when the data connection is slow. ## Week of July 27, 2026 **[Who might move up](https://thetennisdesk.com/docs/understand-a-bump)** See which players on a roster are likely to move up an NTRP rating at year end. **Share a report by link** Send a link to a scouting report, and anyone who opens it sees the report, read only. **[Plan a lineup](https://thetennisdesk.com/docs/plan-a-lineup)** Ask who a team is likely to field and the win chance on each line. ### Improved - [Scouting answers go deeper and keep every fact the Desk can check.](https://thetennisdesk.com/docs/scout-an-opponent) - Rosters and reports appear in seconds, before the written answer. - Names read first name first, and scores stay on one line. - A simpler start screen, plus a light and dark theme switch. - Ask how you rank among players in your age group. ### Fixed - Rosters now list the whole team, with each player's recent form. - [A team outside the Desk's area now gets a quick, clear answer.](https://thetennisdesk.com/docs/coverage-and-data-runs) - An expired sign-in now still gets you answers. - New chat now keeps earlier conversations, and you can reopen them. - A closed report now reopens from its answer. ## Week of July 20, 2026 **[Who your team plays next](https://thetennisdesk.com/docs/how-the-forecast-works)** Ask who a team plays next and when. **Sign in with your name** Type your name and confirm your player record to sign in, with no invitation needed. **[Ask without signing in](https://thetennisdesk.com/docs/ask-the-chat)** Anyone can now ask about any Marin team or player right away, without an account. ### Improved - Data tables appear in seconds, and the written answer follows. - Tables open in a report beside the chat that you can sort. - The chat remembers what you asked earlier in the conversation. - A misspelled name gets a one-tap "Did you mean" check. - A new design, with quick search on Command-K. ### Fixed - Answers now show tables and lists instead of raw formatting. - One missing detail no longer drops the rest of an answer. - Open report now opens the report beside the chat. - Naming a club now lists its teams so you can pick one. - Recent-form questions about a team now answer much faster. ## Week of July 13, 2026 **[Every Marin team since 2022](https://thetennisdesk.com/docs/coverage-and-data-runs)** The chat now answers from every Marin league team match since 2022, with each line's result. **[Player form and win chances](https://thetennisdesk.com/docs/ask-the-chat)** Ask how a player is playing or who is likely to win a matchup, with the lines behind each answer. **Ask for an invitation** Request access on the site, and once you're approved you get your own sign-in link. ### Improved - Answers show their progress while the chat works, then stream in. - Your earlier conversations stay listed beside the chat. - [A scouting report now covers the opponent you name.](https://thetennisdesk.com/docs/scout-an-opponent) - On a phone, the chat and report each take the full screen. - Questions about your own team now find your team. ### Fixed - A slow answer now always appears once it's ready. - Questions about how a player is playing lately now get answers. - Long matchup questions now get a clear reply instead of an error. - Scouting reports now state only results from real scorecards. - An invitation link now confirms you're signed in. ## Week of July 6, 2026 **[Scouting reports in the chat](https://thetennisdesk.com/docs/scout-an-opponent)** Ask about your next opponent and get a scouting report, with the scorecards behind it, ready to share. **[Player and team search](https://thetennisdesk.com/search)** Search for a player, team or club and see its results and recent form. **[Flag a chat answer](https://thetennisdesk.com/docs/report-something-wrong)** Mark any chat answer as useful, confusing, wrong or missing context, so the Desk can fix it. Source: https://thetennisdesk.com/docs/changelog