Developer manual / v1
Model the game,
not just the final.
A stable v1 contract for schedules, live game state, play-by-play, box scores, season statistics, standings, transactions and provider-aware markets. REST snapshots and ordered WebSocket deltas use the same canonical IDs.
01 / First possession
Make your first request
Keep your key on your server. Every request uses a bearer token and returns a consistent data and meta envelope.
curl "https://lacrosse-api.com/v1/fixtures?status=in_progress" \
-H "Authorization: Bearer lax_live_YOUR_KEY"const response = await fetch(
"https://lacrosse-api.com/v1/fixtures?status=in_progress",
{ headers: { Authorization: `Bearer ${process.env.LACROSSE_API_KEY}` } }
);
if (!response.ok) throw new Error(`Lacrosse API: ${response.status}`);
const { data, meta } = await response.json();New accounts receive a 14-day trial. Generate and rotate keys from the dashboard; never embed a key in browser JavaScript, a mobile bundle, or a public repository.
02 / Domain
The lacrosse model
Competition
A league or governing competition, such as a field lacrosse circuit.
Season
A competition year and its date range.
Event
A weekend, venue stop, tournament, or scheduled block within a season.
Fixture
Exactly one team-versus-team game. One fixture maps to one match.
Match
The live scoring container for a fixture, with team participants.
Observation
A point-in-time scoreboard state: period, clock, scores and goals.
Play
An ordered game event such as a goal, penalty, faceoff or timeout.
Stat row
A player or team line at game or season grain. Null means unknown.
IDs are opaque strings. Join using IDs, display supplied names, and do not infer identity from abbreviations. A venue can belong to an event or fixture. Rosters and transactions are time-sensitive, so retain their effective dates.
03 / Scoring fields
Score, goals and point value
score and points carry the scoreboard total. goals carries the goal count, with explicit one- and two-point splits:
{
"team_id": "team_atlas",
"score": 11,
"points": 11,
"goals": 10,
"one_point_goals": 9,
"two_point_goals": 1
}The split is consistent across fixture sides, observations, play-by-play and stat rows. Period is numeric; clock minutes and seconds are nullable. Missing values remain null rather than being coerced to zero.
04 / Trust
Responses, cache and freshness
Responses include observation and delivery metadata with the requested resource. Use these fields to distinguish current, delayed and partial states in your product.
{
"data": [/* typed resource rows */],
"meta": {
"request_id": "req_01J...",
"source": "league_feed",
"retrieved_at": "2026-07-30T18:42:09.412Z",
"cached_at": "2026-07-30T18:42:10.003Z",
"cache_age_seconds": 2,
"is_stale": false,
"is_complete": true,
"next_cursor": null
}
}Inspect is_stale, is_complete, and cache age before making operational decisions. Conditional GETs may return 304 Not Modified when you send the last ETag. List endpoints use cursor pagination.
05 / Reference data
League catalogue
Competitions, seasons and events
/v1/competitionsList covered competitions./v1/competitions/{id}Get one competition./v1/seasonsFilter seasons by competition or year./v1/eventsList scheduled league events./v1/events/{id}Get an event and its venue context./v1/events/{id}/teamsTeams entered in an event.Teams, players and venues
/v1/teamsList or search teams./v1/teams/{id}Team identity, colours and league context./v1/teams/{id}/rosterTime-aware player roster./v1/playersList or search players./v1/players/{id}Player identity and biographical fields./v1/venues/{id}Venue name, locality and coordinates.06 / Game state
Fixtures, matches and observations
Schedule and scoreboard
/v1/fixturesFilter by season, event, team, date or status./v1/fixtures/{id}Fixture, teams, scores, venue and broadcast context./v1/fixtures/{id}/liveLatest scoreboard observation and period state./v1/fixtures/{id}/matchesThe scoring match associated with a fixture./v1/teams/{id}/fixturesA team schedule.Match detail
/v1/matches/{id}Status, timing and winning team./v1/matches/{id}/participantsTeam sides and their score/goals split./v1/matches/{id}/gamesQuarter and overtime segments./v1/matches/{id}/observationsOrdered scoreboard snapshots./v1/matches/{id}/eventsScoring and state-change events.07 / Performance
Play-by-play and statistics
Game grain
/v1/fixtures/{id}/playsOrdered play-by-play with period and clock./v1/matches/{id}/player-statsPlayer box-score lines./v1/matches/{id}/team-statsTeam box-score lines.Season grain
/v1/seasons/{id}/player-statsPlayer totals and rates for the season./v1/seasons/{id}/team-statsTeam totals and rates for the season.Stat records include explicit dimensions and a typed metric map. Common lacrosse concepts include points, goals, two-point goals, assists, shots, shots on goal, ground balls, caused turnovers, turnovers, faceoff wins and attempts, saves, penalties and penalty minutes. Availability varies by competition and season; absent data remains null.
08 / Season context
Standings and player movement
Tables
/v1/events/{id}/standings/latestCurrent standings at an event./v1/events/{id}/standings/historyHistorical standing snapshots./v1/seasons/{id}/standings/latestCurrent season table./v1/seasons/{id}/standings/historySeason table through time.Transactions
/v1/transactionsLeague player transactions with date and type./v1/players/{id}/transactionsMovement history for one player.Standings preserve league-published wins, losses, ties, scores for and against, differential, percentages, streak, clinch state and rank. Do not recompute the table unless your use case explicitly requires an independent model.
09 / Market tape
Provider-aware market data
Odds and prices
/v1/odds/eventsList provider events and their latest prices./v1/odds/events/{id}Event, markets, outcomes and current quotes./v1/odds/markets/{id}/pricesTimestamped price history by outcome./v1/fixtures/{id}/oddsOnly markets verified against that fixture.Provider names, market labels, outcome labels, decimal odds, probabilities, prices and observed timestamps are kept distinct. A provider event is not a lacrosse fixture until the association is verified. Prefer the fixture odds endpoint when showing a market beside a scoreboard.
Market data is informational and analytical context. It is not an official settlement source for wagering, contests, or financial instruments.
10 / Live
WebSocket streaming
Mint a single-use, 60-second ticket from your server, then use the ticket in a browser or server WebSocket connection. API keys never belong in the WebSocket URL.
# 1. Mint a ticket
curl -X POST "https://lacrosse-api.com/v1/realtime/tickets" \
-H "Authorization: Bearer lax_live_YOUR_KEY"
# 2. Connect to the returned stream_url
wss://lacrosse-api.com/v1/live?ticket=SINGLE_USE_TICKET
# 3. Subscribe after open
{"type":"subscribe","topics":["fixtures.live","markets.live"]}The stream subprotocol is lacrosse-live.v2+json. Messages include monotonic sequence values. Start with a REST snapshot, apply deltas in order, and refetch REST state when you receive resync_required or detect a gap. Heartbeats are liveness signals, not score changes.
11 / Operations
Errors, rate limits and retries
Errors use application/problem+json with a stable code and request ID. Expect 401 for missing or invalid authentication, 403 for plan restrictions, 404 for unknown resources, 409 for state conflicts, and 429 for rate or quota limits.
{
"type": "urn:lacrosse-api:error:rate_limited",
"title": "Too many requests",
"status": 429,
"code": "rate_limited",
"request_id": "req_01J..."
}Honour Retry-After, use exponential backoff with jitter for transient failures, and do not retry validation or authentication errors unchanged. Current plan limits and usage are available from GET /v1/usage.
12 / Contracts
Machine-readable specs
Generate clients and validate integrations against the published contracts. The field notes above describe API semantics; the specifications are the exact wire format.
Need help mapping a lacrosse workflow to the API? Contact support.