You need to ship an NRL standings and fixtures integration in C# this week. By the end of this guide, you’ll query live ladder standings, round fixtures, and match details from the NRL Data API on Zyla API Hub and render them in your app using HttpClient—plus see how to hit the same endpoints from JavaScript and AI agents via MCP.
What you can build with the NRL Data API
The NRL Data API provides current and historical competition data (back to 2002) for:
- Ladder: season standings with wins, losses, points for/against, etc.
- Fixture: matches for a given round and season, including scores and venues.
- Match details: in-depth data for a specific match ID, including scoresheets and lineups.
Developers typically use this API to power scoreboards, standings pages, match centers, notifications, and analytics for sports products. Because these endpoints are hosted on Zyla API Hub, you authenticate the same way you do with thousands of other APIs on the marketplace—one account, one API key, subscription + quota billing (not pay-per-call). The first API offers a 7-day trial or 50 requests; there’s no Free Plan. Check the API page for current access options and pricing.
Explore the listing: NRL Data API. Browse more than 10,000 public APIs on Zyla API Hub.
Getting started on Zyla API Hub
- Open the NRL Data API page on Zyla API Hub.
- Click Subscribe or Start Free Trial (when available). The platform uses a subscription + quota model (not pay-per-call). The first API offers a 7-day trial or 50 requests; there’s no Free Plan.
- Grab your API key from your dashboard. All requests use the header Authorization: Bearer YOUR_API_KEY.
If you don’t have an account yet, you can Register to create a free account and get an API key.
Endpoints overview
Base calling pattern: use the exact hub URLs below with the Authorization header. Do not add extra parameters.
1) Ladder (GET)
Get the ladder stats for a specific season (supports current year and historical data back to 2002).
- Method: GET
- URL: https://zylalabs.com/api/4535/nrl-data-api/5576/ladder
- Required query parameter:
- season (number): 2025
Official curl sample:
curl -s -X GET "https://zylalabs.com/api/4535/nrl-data-api/5576/ladder?season=2025" \
-H "Authorization: Bearer YOUR_API_KEY"
Official JSON response
Below is the official response sample you can expect from the ladder endpoint. Copying these exact values helps validate your parsing logic:
{"status":"success","data":[{"season":"2024","ladder":{"position":"1","team":"Melbourne","played":"24","wins":"19","losses":"5","draws":"-","bye":"3","for":"692","against":"449","ladder_points":"44"}},{"season":"2024","ladder":{"position":"2","team":"Penrith","played":"24","wins":"17","losses":"7","draws":"-","bye":"3","for":"580","against":"394","ladder_points":"40"}},{"season":"2024","ladder":{"position":"3","team":"Sydney","played":"24","wins":"16","losses":"8","draws":"-","bye":"3","for":"738","against":"463","ladder_points":"38"}},{"season":"2024","ladder":{"position":"4","team":"Cronulla","played":"24","wins":"16","losses":"8","draws":"-","bye":"3","for":"653","against":"431","ladder_points":"38"}},{"season":"2024","ladder":{"position":"5","team":"North Qld","played":"24","wins":"15","losses":"9","draws":"-","bye":"3","for":"657","against":"568","ladder_points":"36"}},{"season":"2024","ladder":{"position":"6","team":"Canterbury","played":"24","wins":"14","losses":"10","draws":"-","bye":"3","for":"529","against":"433","ladder_points":"34"}},{"season":"2024","ladder":{"position":"7","team":"Manly","played":"24","wins":"13","losses":"10","draws":"1","bye":"3","for":"634","against":"521","ladder_points":"33"}},{"season":"2024","ladder":{"position":"8","team":"Newcastle","played":"24","wins":"12","losses":"12","draws":"-","bye":"3","for":"470","against":"510","ladder_points":"30"}},{"season":"2024","ladder":{"position":"9","team":"Canberra","played":"24","wins":"12","losses":"12","draws":"-","bye":"3","for":"474","against":"601","ladder_points":"30"}},{"season":"2024","ladder":{"position":"10","team":"Dolphins","played":"24","wins":"11","losses":"13","draws":"-","bye":"3","for":"577","against":"578","ladder_points":"28"}},{"season":"2024","ladder":{"position":"11","team":"St Geo Illa","played":"24","wins":"11","losses":"13","draws":"-","bye":"3","for":"508","against":"634","ladder_points":"28"}},{"season":"2024","ladder":{"position":"12","team":"Brisbane","played":"24","wins":"10","losses":"14","draws":"-","bye":"3","for":"537","against":"607","ladder_points":"26"}},{"season":"2024","ladder":{"position":"13","team":"Warriors","played":"24","wins":"9","losses":"14","draws":"1","bye":"3","for":"512","against":"574","ladder_points":"25"}},{"season":"2024","ladder":{"position":"14","team":"Gold Coast","played":"24","wins":"8","losses":"16","draws":"-","bye":"3","for":"488","against":"656","ladder_points":"22"}},{"season":"2024","ladder":{"position":"15","team…
Field notes you’ll actually use:
- status: "success" indicates a successful call.
- data: an array containing ladder rows for the season you requested.
- Each item has:
- season: the season label as a string.
- ladder: an object containing position, team, played, wins, losses, draws, bye, for, against, and ladder_points as strings.
2) Fixture (GET)
Fetch fixtures (and scores when available) for a season and round.
- Method: GET
- URL: https://zylalabs.com/api/4535/nrl-data-api/5577/fixture
- Required query parameters:
- season (number): 2026
- round (number): 7
Official curl sample:
This endpoint returns the fixture for the chosen round, including fields such as match_id, date, time, home_team, home_score, away_team, away_points, referee, venue, and crowd (based on the provided example). Use match_id from this response to query detailed match data.
3) Match Details (GET)
Retrieve a specific match’s details (scores, lineups, and more) using a match_id from the Fixture endpoint.
- Method: GET
- URL: https://zylalabs.com/api/4535/nrl-data-api/5578/match-details
- Required query parameter:
- match_id (number): 5732
Official curl sample:
This endpoint returns a structure that includes keys like match_id, match_status, date, kick_off, referee, venue, crowd, home_team, away_team, and nested match_details (such as match_score and scoresheet) and lineups (based on the provided example).
C# HttpClient: call the Ladder endpoint and parse standings
The snippet below uses HttpClient to request the current ladder for a given season, then projects a simple model to display team, position, and ladder points. The only required parameter is season, and authentication is a Bearer token.
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
public class NrlLadderRow
{
[JsonPropertyName("season")]
public string Season { get; set; }
[JsonPropertyName("ladder")]
public LadderStats Ladder { get; set; }
}
public class LadderStats
{
[JsonPropertyName("position")]
public string Position { get; set; }
[JsonPropertyName("team")]
public string Team { get; set; }
[JsonPropertyName("played")]
public string Played { get; set; }
[JsonPropertyName("wins")]
public string Wins { get; set; }
[JsonPropertyName("losses")]
public string Losses { get; set; }
[JsonPropertyName("draws")]
public string Draws { get; set; }
[JsonPropertyName("bye")]
public string Bye { get; set; }
[JsonPropertyName("for")]
public string ForPoints { get; set; }
[JsonPropertyName("against")]
public string AgainstPoints { get; set; }
[JsonPropertyName("ladder_points")]
public string LadderPoints { get; set; }
}
public class LadderResponse
{
[JsonPropertyName("status")]
public string Status { get; set; }
[JsonPropertyName("data")]
public List<NrlLadderRow> Data { get; set; }
}
public class Program
{
private static async Task Main()
{
var apiKey = "YOUR_API_KEY";
var season = 2025; // required query param
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
var url = $"https://zylalabs.com/api/4535/nrl-data-api/5576/ladder?season={season}";
using var res = await http.GetAsync(url);
res.EnsureSuccessStatusCode();
var json = await res.Content.ReadAsStringAsync();
var opts = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var model = JsonSerializer.Deserialize<LadderResponse>(json, opts);
if (model?.Status != "success" || model.Data == null)
{
Console.Error.WriteLine("Unexpected API response.");
return;
}
// Print top 5
foreach (var row in model.Data)
{
if (int.TryParse(row.Ladder.Position, out var pos) && pos > 5) break;
Console.WriteLine($"#{row.Ladder.Position} {row.Ladder.Team} - Pts: {row.Ladder.LadderPoints} (W{row.Ladder.Wins}-L{row.Ladder.Losses})");
}
}
}
Notes:
- All ladder fields are strings in the sample. Convert to integers only where you need to compute values.
- Always check status equals "success". Handle non-success responses by logging and backing off.
- For server-side apps that refresh standings infrequently, cache the response per season to avoid redundant calls.
JavaScript example: fetch the ladder and read key fields
This JavaScript snippet replicates the same Ladder call. It uses the exact hub URL and required season parameter.
async function fetchNrlLadder(season = 2025) {
const res = await fetch(`https://zylalabs.com/api/4535/nrl-data-api/5576/ladder?season=${season}`, {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY"
}
});
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
const data = await res.json();
if (data.status !== "success" || !Array.isArray(data.data)) {
throw new Error("Unexpected API response format");
}
// Example: map to minimal objects
const topRows = data.data.slice(0, 5).map(r => ({
team: r.ladder.team,
position: r.ladder.position,
points: r.ladder.ladder_points,
wins: r.ladder.wins,
losses: r.ladder.losses
}));
return topRows;
}
fetchNrlLadder().then(rows => {
console.table(rows);
}).catch(err => {
console.error(err);
});
Practical usage patterns
- Standings page: call Ladder once per deploy or once daily (depending on your use case). The season parameter supports historical data back to 2002.
- Round center: call Fixture with season and round to build a schedule with scores and venues. Store match_id values to hydrate dedicated match pages.
- Match pages: fetch Match Details by match_id for scoresheets and lineups. The example shows nested objects like match_details.match_score and lineups.
- Timezone and display: date/time fields arrive as strings (for example, "2024-03-02" and "6:30pm"). Keep them as strings for display or normalize them in your app if you have known local contexts.
- Caching: for static data (past seasons or completed rounds), cache aggressively. For in-progress rounds, cache for a short TTL and invalidate on match start/end events in your product.
Calling the NRL Data API from AI agents via MCP
You can trigger the same HTTP calls from AI coding agents using the Zyla MCP endpoint. Any MCP-compatible client (e.g., Claude Code, Cursor, Windsurf) can access your subscribed APIs with your key:
- MCP endpoint: https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY
- Use the exact hub URLs and required parameters shown above. Authentication is still Authorization: Bearer YOUR_API_KEY.
- For client setup and details, see the MCP docs.
Error handling, limits, and operations tips
- Authentication: every request must include Authorization: Bearer YOUR_API_KEY.
- Parameters: only send the required params shown for each endpoint. Do not add body payloads; these endpoints are simple GET requests.
- Quotas: Zyla APIs use subscription + quota billing (not pay-per-call). The first API offers a 7-day trial or 50 requests; there’s no Free Plan. Monitor your usage in your Zyla dashboard.
- Resilience: on HTTP errors, log the URL and status code, then retry with backoff. Avoid hot loops on 4xx errors—these typically indicate missing/invalid params or auth.
- Schema changes: design parsers that tolerate additional fields. Only rely on keys shown in this guide or your runtime inspection.
Link recap
- NRL Data API listing: view on Zyla
- Explore more than 10,000 public APIs: Zyla API Hub
FAQ
Q: What header do I use for auth?
A: Authorization: Bearer YOUR_API_KEY on every request.
Q: Which seasons are supported?
A: The API supports the current season and historical data back to 2002 (per the endpoint descriptions).
Q: How do I get match_id for Match Details?
A: Call the Fixture endpoint with season and round. Read match_id from the fixtures array and pass it to the Match Details endpoint.
Q: Is there a free plan?
A: No Free Plan. The first API offers a 7-day trial or 50 requests. Check the API page for current access options and pricing.
Q: Can I call these APIs from AI agents?
A: Yes. Use the MCP endpoint at https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY with your subscribed API’s hub URLs and the same Authorization header.
Ready to integrate? Create an account on Zyla, subscribe to the NRL Data API, and start shipping with a single key across the marketplace. Register now and explore thousands of production-ready APIs.