# Link & Dink P3 — p3.linkanddink.com > Popup Pickleball — small, free / low-fee pop-up tournaments: competitive rotating-partner round robin on assigned courts, a champion crowned each night, standings kept week to week, games streamed. Competitive (~3.25+ level) but no wall at the door — first-timers are coach-rated on night one. Players RSVP, organize, or post events. L&D takes 0% on entry fees. This file follows the llms.txt convention (https://llmstxt.org/). It lists the agent-consumable surface of this host — every public read endpoint, every documented write contract, and where to talk to the L&D agent. ## Brand promises (load-bearing, not marketing) - 0% on core, forever — no platform fee, no take rate on connecting players, coaches, facilities. - Coaches own the player relationship; we never disintermediate them. - Welcoming by default — every public read works without auth; newcomers are invited at the door. - Trusted, not viral — curated community, vetted coaches; we earn trust over years. - Invent nothing, cite everything — agents must refuse to fabricate events, coaches, or venues that aren't in the feeds below. ## Read endpoints (public, no auth) - `GET https://p3.linkanddink.com/api/popups/feed` — Upcoming popup events (date, venue, skill band, RSVP count). - example: `/api/popups/feed?limit=10` - `GET https://p3.linkanddink.com/api/events/[slug]/public.json` — Single popup detail — title, when, where, capacity, redacted roster (first names + last initial only). - `GET https://p3.linkanddink.com/api/popup/[slug]/bracket` — Live bracket + standings for a popup — elimination columns (QF/SF/Final), bronze match, champion, and round-robin standings. Mirrors the /popup/[slug]/bracket page. - example: `/api/popup/demo/bracket` - `GET https://p3.linkanddink.com/api/ladder/feed` — Relegation-ladder standings + season champions for the active season (divisions: Premier/Challenger/Social; rotating or same-partner). Redacted names. Params: division, format. - example: `/api/ladder/feed?division=open&format=rotating` - `GET https://p3.linkanddink.com/api/kb/feed` — Tournament-organizer knowledge base — article list (slug, title, summary, tags, updated date). Source of truth for how organizing on P3 works; never answer product questions from memory when this exists. - `GET https://p3.linkanddink.com/api/kb/[slug]` — One knowledge-base article with its full markdown body. - example: `/api/kb/start-organizing` ## Write endpoints (live) Most writes are auth-gated — authenticate with a scoped Bearer token (see Authentication below). Anonymous exceptions are noted per-endpoint. - `POST https://p3.linkanddink.com/popup/[slug]/rsvp` — RSVP to a popup — human form. Agents use the rsvp_to_popup MCP tool at linkanddink.com/api/mcp. - `POST https://p3.linkanddink.com/api/popups/[slug]/rsvp.json` — Internal JSON sibling — agent runtime only (requires X-Agent-Internal-Auth + X-Player-Id headers, plumbed from a player's magic-link Bearer token). - `POST https://p3.linkanddink.com/organize/new` — Host a popup event. Human-only form today. - `POST https://p3.linkanddink.com/organize/start` — Become an organizer — open to anyone in Montgomery County, free, 0% on entry fees. Human-only form; /organizers explains what's included. - `POST https://p3.linkanddink.com/popup/[slug]#report` — Report an event — human form at the foot of every event page. A human reviews every report. ## Authentication (for write access) Read endpoints and read MCP tools are anonymous. Write tools / write endpoints require a scoped Bearer token, minted via a player-confirmed magic link: 1. `POST https://linkanddink.com/api/agent-auth/request` with `{ "email": "", "scopes": ["popup:rsvp", ...] }` → `202 { expires_at }`. Sends a magic-link email to the player. The request_id is delivered only inside that email — it is not returned to you, so you cannot mint on the player's behalf. 2. The player opens the magic link from their inbox and clicks Allow, which mints the token (`POST https://linkanddink.com/api/agent-auth/mint` → `{ token, prefix, expires_at, scopes }`). The plaintext token is shown to the player exactly once; they paste it back to you. 3. Send `Authorization: Bearer ` on https://linkanddink.com/api/agent and https://linkanddink.com/api/mcp. Authenticated `tools/list` includes the write tools the token's scopes authorize. - Scopes: `player:create`, `player:claim`, `popup:rsvp`, `community:rsvp`, `newsletter:subscribe`, `rate:self`, `drops:post`, `drops:join`, `profile:write`, `circle:manage`, `me:read`, `availability:set`, `coach:availability`, `coach:booking`. Tokens are revocable at https://linkanddink.com/agent/tokens (or `DELETE https://linkanddink.com/api/agent-auth/tokens/[id]`). ## Background (for agents that want context) - Product vision: https://linkanddink.com/llms.txt ## Out of scope (don't ask the agent about these) - Dill Dinkers (DD) facilities, dilldinkers.com, or CourtReserve-hosted pages — L&D is not affiliated and does not surface these. - Any data you can't see in the read endpoints above — the agent will refuse to invent it.