CANADASOCCERAPI

Reference

Canada Soccer API v1

Read-only JSON access to CPL matches, live state, tables, player ratings and leaderboards, team and match stats, officials, venues, weather, and odds. No key or registration required.

Quick start

Production base URL:

https://canadasoccerapi.com/api/v1
curl "https://canadasoccerapi.com/api/v1/players?eligible=true&limit=10"
const data = await fetch(
  'https://canadasoccerapi.com/api/v1/live'
).then(r => r.json());

Legacy /api/{resource} URLs remain aliases. New applications should use /api/v1/{resource}.

Conventions

Pagination

limit (1–500) and offset. Responses include total, count, and has_more.

Filtering

Team/name searches are case-insensitive partial matches. Dates use YYYY-MM-DD.

Caching

Live match state caches 15 seconds; live season stats 60 seconds; stable archives longer.

Resource index

ResourceWhat it returnsKey parameters

Machine-readable definitions: OpenAPI 3.1 JSON. Live discovery: GET /api/v1.

Matches and competition

GET/matches

The complete 2019–2026 result archive plus the official live current-season schedule. Filter with season, team, status, match_id, date, from, to, order, limit, and offset.

GET /api/v1/matches?season=2026&team=Forge&status=FINISHED&limit=10

GET/live

Live fixtures and matches within a configurable 1–168 hour window. Use all=true for the whole current schedule, or filter by team.

GET/match-stats

Advanced stats for one match_id, or all available matches in a season: possession, shots, xG, passes, duels, cards, scorers, and attendance.

GET/standings

Official live 2026 standings with form, movement, and qualification; archived official tables for 2019–2025. Omit season to return every table.

Players, ratings, and teams

GET/players

Current player identities plus appearances, minutes, goals, assists, xG, shooting, creation, passing, carrying, duels, defending, goalkeeping, discipline, overall rating, rank, and five-area rating breakdown.

Filters: team, position, search, min_minutes, eligible. Sorting: sort accepts any documented player metric; order=asc|desc.

GET/leaderboards

Request one or multiple comma-separated metrics: rating, goals, assists, goal_involvements, xg, shots, shots_on_target, key_passes, successful_dribbles, tackles, interceptions, recoveries, clearances, saves, pass_accuracy.

Rating methodology

Each player is percentile-scored against positional peers in attack, creativity, possession, defending, and discipline. Role-specific weights produce a 0–10 rating. Samples shrink toward league average through 720 minutes; 270 minutes is the public leaderboard threshold. The complete area breakdown is returned for transparency.

GET/team-stats and /teams

Season-long advanced team metrics and a normalized current/historical club directory. Set raw=true on team stats to include every source metric.

Context and market data

/referees

Officials by match, team, season, or name. summary=true aggregates assignments.

/venues

Capacity, surface, founding year, city, and coordinates.

/weather

Historical temperature, wind, and precipitation observations.

/odds · /odds-quotes

Recorded closing prices and timestamped bookmaker snapshots. Coverage varies by season.

Errors and limits

Errors use HTTP status codes and a stable JSON body:

{
  "error": "Bad Request",
  "message": "order must be asc or desc",
  "status": 400
}

The best-effort public limit is 300 requests per IP per hour. Responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. CORS is enabled for all origins.

Sources and attribution

Live competition data is normalized from the official CPL public site feeds. Archived match/context files and derived rating fields are maintained by this independent project. The API is not affiliated with or endorsed by the Canadian Premier League or Canada Soccer. When publishing results, attribute Canada Soccer API and preserve source fields returned by each resource.