Stop hand-coding tournament schedules. One API call, fair and conflict-free.

Send your teams, venues, and constraints; get back a fair, conflict-free round-robin schedule -- or, if one isn't possible, exactly which constraint is the problem.

curl -X POST https://leaguesolver-api.fly.dev/v1/schedules/league \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "teams": [
    {
      "id": "tigers",
      "home_venue": "venue_a"
    },
    {
      "id": "lions",
      "home_venue": "venue_b"
    },
    {
      "id": "hawks",
      "home_venue": "venue_a"
    }
  ],
  "venues": [
    {
      "id": "venue_a",
      "available_slots": [
        "2026-08-01T10:00",
        "2026-08-08T10:00",
        "2026-08-15T10:00"
      ]
    },
    {
      "id": "venue_b",
      "available_slots": [
        "2026-08-02T10:00",
        "2026-08-09T10:00",
        "2026-08-16T10:00"
      ]
    }
  ],
  "format": "round_robin",
  "rounds": 1,
  "constraints": {
    "max_games_per_team_per_week": 1,
    "min_rest_days": 5,
    "balance_home_away": true
  },
  "objective": "minimize_schedule_length"
}'

Why LeagueSolver

Correct, constraint-based scheduling

A CP-SAT model enforces no venue double-booking, no same-team time overlap, and full round-robin coverage, while balancing home/away games and rest days.

Never a bare "no solution"

When a schedule truly isn't possible, LeagueSolver re-solves with relaxed constraints to pinpoint exactly which one is conflicting -- e.g. "venue_b does not have enough available slots" -- instead of leaving you to guess.

One API call

POST your teams, venues, and constraints to /v1/schedules/league and get a complete schedule back in seconds -- no dashboard or setup required.

Get started free

No credit card required. 50 solves/month, up to 8 teams.