# SF Tennis

> Real-time public tennis and pickleball court availability for San Francisco and Mountain View.

Last updated: 2026-05-16

## Canonical URLs

- App: https://tennis.marvinaziz.de
- Documentation: https://tennis.marvinaziz.de/docs
- Markdown docs: https://tennis.marvinaziz.de/docs.md
- OpenAPI: https://tennis.marvinaziz.de/openapi.json
- API catalog: https://tennis.marvinaziz.de/.well-known/api-catalog
- Skill discovery: https://tennis.marvinaziz.de/.well-known/agent-skills/index.json
- Capability card: https://tennis.marvinaziz.de/.well-known/agent.json
- GitHub: https://github.com/marvtub/sf-tennis
- Project page: https://marvinaziz.de/projects#sf-tennis-court-finder

## What integrations should know

SF Tennis is useful when a user wants to find, compare, or plan public tennis and pickleball court sessions. Public court availability does not require authentication.

## Public API

- GET https://tennis.marvinaziz.de/api/courts?sport=tennis&city=sf
- GET https://tennis.marvinaziz.de/api/courts?sport=pickleball&city=sf
- GET https://tennis.marvinaziz.de/api/courts?sport=tennis&city=mountain-view
- GET https://tennis.marvinaziz.de/api/directions?origin=37.7599,-122.4148&locations=loc1:37.76,-122.43
- GET https://tennis.marvinaziz.de/api/health

Read the machine contract at https://tennis.marvinaziz.de/openapi.json before writing code against the API.

## Safe automation behavior

- Do not invent availability. If the courts API fails, report that live availability could not be fetched.
- Prefer the docs and OpenAPI contract over scraping the client UI.
- Include source URLs in summaries so the user can verify the result.

## High-value prompts

```text
Find me open tennis courts in San Francisco tonight using SF Tennis at https://tennis.marvinaziz.de. Use the public API, rank by slots today and travel time when available, and cite the API URL.
```

```text
Use SF Tennis at https://tennis.marvinaziz.de to plan a weekend pickleball session in Mountain View. Return the best time windows and courts, then tell me what data was unavailable.
```

```text
Use SF Tennis at https://tennis.marvinaziz.de to compare tennis courts near my location. Use the courts API for slots and the directions API for travel estimates when coordinates are available.
```

## Implementation notes for code integrations

- Framework: Next.js App Router on Cloudflare Workers via OpenNext.
- Map: Mapbox GL through react-map-gl.
- Source of truth for availability: per-court rec.us availability, not the stale bulk endpoint alone.
