# NCAAF Odds API | NCAAF Odds, Player Props & Results
URL: https://sockodds.com/leagues/ncaaf-odds-api/

> Our NCAAF odds API delivers NCAAF odds, player props and results for every game from 43 bookmakers, 38 Australian. Free tier available.

Our NCAAF odds API delivers NCAAF odds, player props, status and results for every game from 43 bookmakers, 38 of them Australian. `leagueID=NCAAF`. Free tier available.

Whether you're building a betting app, an odds comparison tool or a pricing model, the NCAAF odds API gives you structured data in the SportsGameOdds v2 shape so you can move fast.

Covering more than NCAAF? The [American Football](https://sockodds.com/sports/football-odds-api/) returns [CFL](https://sockodds.com/leagues/cfl-odds-api/), [NFL](https://sockodds.com/leagues/nfl-odds-api/) and NCAAF from a single sport-level request.

## NCAAF Odds API Features

Every endpoint is filterable, so you pull exactly the markets you need. Coverage spans 129 teams and 71 events currently carried, with 10 market families.

Available NCAAF betting markets include:

- Head to head / moneylines (2-way and 3-way markets)
- Lines, spreads and handicaps
- Totals (over/under)
- Alternative lines
- Player props and game props
- Period-specific markets (`1h`, `1q`)

All market data is pre-match, refreshed every ~2 minutes; see [pricing](https://sockodds.com/pricing/) for what each plan can see.

## NCAAF Player Props API

Access 3 NCAAF player proposition markets through the same endpoint — Touchdowns, Receptions — for every player the books price. See the [player prop odds API](https://sockodds.com/player-props-odds-api/) for the market list across every sport.

Filter by `playerID`, stat type or bookmaker to return only the props you need.

## NCAAF Odds API with Results

SockOdds delivers NCAAF odds and event data together in one response — no need to stitch data from multiple sources. Each response includes:

- Upcoming NCAAF events with status flags
- Home and away team data with ids
- Players with production ids where present
- Full odds coverage: lines, totals, head to head, props and alternative lines
- Results and `scoringSupported` flags where the source grades

Line movement tracking is yours to build: every bookmaker entry carries `lastUpdatedAt`, and finished events are retained.

## Quick start: your first NCAAF odds API call

Getting NCAAF odds takes a single HTTP request:

**Browser URL** · **cURL** · **JavaScript** · **Python** · **Ruby** · **PHP** · **Java** · **Go**

```text
https://api.sockodds.com/v2/events?apiKey=YOUR_API_KEY&oddsAvailable=true&leagueID=NCAAF&limit=10
```

```bash
curl -X GET "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&limit=10" -H "x-api-key: YOUR_API_KEY"
```

```javascript
const response = await fetch("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&limit=10", { headers: { "x-api-key": "YOUR_API_KEY" } });
const { data, nextCursor, notice } = await response.json();
console.log(JSON.stringify(data, null, 2));
```

```python
import requests

response = requests.get("https://api.sockodds.com/v2/events", params=dict(oddsAvailable="true", leagueID="NCAAF", limit="10"), headers={"x-api-key": "YOUR_API_KEY"})
output = response.json()
print(output["data"])
```

```ruby
require 'net/http'
require 'json'

uri = URI("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&limit=10")
req = Net::HTTP::Get.new(uri)
req['x-api-key'] = 'YOUR_API_KEY'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts JSON.pretty_generate(JSON.parse(res.body)['data'])
```

```php
<?php
$ch = curl_init("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&limit=10");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['x-api-key: YOUR_API_KEY']);
$output = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($output['data']);
```

```java
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&limit=10"))
    .header("x-api-key", "YOUR_API_KEY").GET().build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
```

```go
req, _ := http.NewRequest("GET", "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&limit=10", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil { log.Fatal(err) }
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
```

This returns all available markets — lines, totals, head to head and props — for upcoming NCAAF events.

To narrow to a specific market, use the `oddID` parameter, with `PLAYER_ID` standing for every player:

**Browser URL** · **cURL** · **JavaScript** · **Python** · **Ruby** · **PHP** · **Java** · **Go**

```text
https://api.sockodds.com/v2/events?apiKey=YOUR_API_KEY&oddsAvailable=true&leagueID=NCAAF&oddID=touchdowns-PLAYER_ID-game-yn-yes&includeOpposingOdds=true
```

```bash
curl -X GET "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&oddID=touchdowns-PLAYER_ID-game-yn-yes&includeOpposingOdds=true" -H "x-api-key: YOUR_API_KEY"
```

```javascript
const response = await fetch("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&oddID=touchdowns-PLAYER_ID-game-yn-yes&includeOpposingOdds=true", { headers: { "x-api-key": "YOUR_API_KEY" } });
const { data, nextCursor, notice } = await response.json();
console.log(JSON.stringify(data, null, 2));
```

```python
import requests

response = requests.get("https://api.sockodds.com/v2/events", params=dict(oddsAvailable="true", leagueID="NCAAF", oddID="touchdowns-PLAYER_ID-game-yn-yes", includeOpposingOdds="true"), headers={"x-api-key": "YOUR_API_KEY"})
output = response.json()
print(output["data"])
```

```ruby
require 'net/http'
require 'json'

uri = URI("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&oddID=touchdowns-PLAYER_ID-game-yn-yes&includeOpposingOdds=true")
req = Net::HTTP::Get.new(uri)
req['x-api-key'] = 'YOUR_API_KEY'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts JSON.pretty_generate(JSON.parse(res.body)['data'])
```

```php
<?php
$ch = curl_init("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&oddID=touchdowns-PLAYER_ID-game-yn-yes&includeOpposingOdds=true");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['x-api-key: YOUR_API_KEY']);
$output = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($output['data']);
```

```java
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&oddID=touchdowns-PLAYER_ID-game-yn-yes&includeOpposingOdds=true"))
    .header("x-api-key", "YOUR_API_KEY").GET().build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
```

```go
req, _ := http.NewRequest("GET", "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=NCAAF&oddID=touchdowns-PLAYER_ID-game-yn-yes&includeOpposingOdds=true", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil { log.Fatal(err) }
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
```

OddIDs follow the format `{statID}-{statEntityID}-{periodID}-{betTypeID}-{sideID}`, where the entity is a player for props and `home`, `away` or `all` for team and game markets.

Tips to keep responses fast:

- Add `bookmakerID=bearbet,betfocus` to limit to the bookmakers you care about
- Use `includeOpposingOdds=true` so you only need to specify one side of a market
- Keep your `oddID` list tight — only request markets you're actively using

### What a NCAAF response looks like

Every event returns an `odds` object keyed by `oddID`. Here's a real market from the feed with the bookmaker list cut to two books:

```json
{
  "eventID": "ncaaf_2026-09-25_california_vs_clemson",
  "leagueID": "NCAAF",
  "odds": {
    "points-all-game-ou-over": {
      "oddID": "points-all-game-ou-over",
      "opposingOddID": "points-all-game-ou-under",
      "marketName": "Total Points",
      "statID": "points",
      "statEntityID": "all",
      "periodID": "game",
      "betTypeID": "ou",
      "sideID": "over",
      "fairOdds": null,
      "bookOdds": null,
      "byBookmaker": {
        "123bet": {
          "odds": "-127",
          "decimal": 1.787,
          "available": true
        },
        "bearbet": {
          "odds": "-110",
          "decimal": 1.909,
          "available": true
        }
      }
    }
  }
}
```

Two things worth noting. Odds values are strings, not numbers, so `-108` arrives as `"-108"` — that keeps the leading `+` intact on underdog prices — and every book also carries `decimal`, because Australian books quote decimal. `bookOdds` is the consensus with the vig left in; `fairOdds` is the de-vigged price on Rookie and above, `null` where it cannot be computed.

## NCAAF Odds API Technical Specifications

### API Architecture

- **REST API** — Simple HTTP endpoints with JSON responses, identical to the SportsGameOdds v2 paths
- **Native WebSocket snapshots** - Pro/Platform at `/v2/stream/events`; polling-backed, with unchanged upstream freshness
- **Rate limits** — per-key, per-minute meters that bind under concurrency; plans sized to your usage
- **Authentication** — secure API key access via the `x-api-key` header or `apiKey` query parameter

### Data Update Speed

- **Odds updates** — every ~2 minutes across every bookmaker lane
- **Event status** — `status` flags and `info.stale` tell you exactly how current a price is

### Developer Resources

- [Interactive documentation](https://sockodds.com/docs/) — live examples, copy-paste snippets and an [AI (vibe coding)](https://sockodds.com/docs/info/ai-vibe-coding/) context
- [SDKs & libraries](https://sockodds.com/docs/sdk/) — the SportsGameOdds SDKs for TypeScript, Python, Ruby, Go and Java work unchanged with the base URL pointed here
- [Postman collection](https://sockodds.com/postman-collection/) — pre-built requests ready to run
- [Support](https://sockodds.com/docs/help/) — email support on every plan, priority on paid plans

### NCAAF betting market coverage in the SockOdds API, by category

| Market category | Example markets | Markets | Availability | Typical bookmakers |
| --- | --- | --- | --- | --- |
| **Full game lines** | Points / score O/U, Points / score line, Points / score | 6 oddIDs | Pre-match | [BearBet](https://sockodds.com/bookmakers/bearbet-odds-api/), [BetFocus](https://sockodds.com/bookmakers/betfocus-odds-api/), [CashCage](https://sockodds.com/bookmakers/cashcage-odds-api/), [Chasebet](https://sockodds.com/bookmakers/chasebet-odds-api/), [Dabble](https://sockodds.com/bookmakers/dabble-odds-api/), [LightningBet](https://sockodds.com/bookmakers/lightningbet-odds-api/) |
| **Period markets** | Points / score O/U, Points / score line, Points / score | 12 oddIDs | Pre-match | [BearBet](https://sockodds.com/bookmakers/bearbet-odds-api/), [BetFocus](https://sockodds.com/bookmakers/betfocus-odds-api/), [CashCage](https://sockodds.com/bookmakers/cashcage-odds-api/), [MintBet](https://sockodds.com/bookmakers/mintbet-odds-api/), [Chasebet](https://sockodds.com/bookmakers/chasebet-odds-api/), [Dabble](https://sockodds.com/bookmakers/dabble-odds-api/) |
| **Player props** | Touchdowns yes/no, Receptions O/U | 3 oddIDs | Pre-match | [Kalshi](https://sockodds.com/bookmakers/kalshi-odds-api/), [ProphetX](https://sockodds.com/bookmakers/prophetexchange-odds-api/), [bet365](https://sockodds.com/bookmakers/bet365-odds-api/), [Dabble](https://sockodds.com/bookmakers/dabble-odds-api/), [Neds](https://sockodds.com/bookmakers/neds-odds-api/), [Picklebet](https://sockodds.com/bookmakers/picklebet-odds-api/) |

**See every NCAAF market with its exact oddID** in the [markets browser](https://sockodds.com/docs/data-types/markets/?league=NCAAF).

## Use Cases

- [Arbitrage](https://sockodds.com/use-cases/arbitrage-betting-api/) & [+EV tools](https://sockodds.com/use-cases/positive-ev-betting-api/) — compare NCAAF odds across every Australian bookmaker to uncover arbitrage opportunities and positive expected value angles.
- [Odds comparison platforms](https://sockodds.com/use-cases/odds-comparison-api/) — display NCAAF odds from every book side by side for comprehensive line shopping.
- **Pricing models & trading** — use NCAAF market data as inputs for proprietary pricing algorithms and betting strategies.
- [Sports analytics & research](https://sockodds.com/use-cases/sports-betting-machine-learning/) — examine NCAAF line movements and betting-market patterns, and build predictive models on retained events.
- [Betting automation](https://sockodds.com/use-cases/odds-alert-bot-api/) — build systems that monitor NCAAF lines across bookmakers and trigger actions when your target odds appear.
- [Sportsbook & fantasy apps](https://sockodds.com/use-cases/sports-betting-app-api/) — power your NCAAF product with reliable odds, status and bet-slip deeplinks.

## NCAAF Odds API Documentation

Our interactive documentation covers everything you need to integrate NCAAF odds into your project:

- Full endpoint reference with parameters and response schemas
- Live request and response examples
- Code snippets in Python, JavaScript, Ruby, Go and Java
- Authentication setup and API key management
- Rate limiting and the `notice` field
- Error handling and troubleshooting

[View documentation](https://sockodds.com/docs/)

For more on querying `/v2/events` with NCAAF-specific examples, see the [API documentation](https://sockodds.com/docs/basics/).

## Frequently asked questions

### What NCAAF betting markets does the API cover?

21 distinct markets right now: Points / score, Touchdowns, Receptions and more — pre-match, across 43 bookmakers.

### Does the API cover props, status and results in one feed?

Yes, from the same request. A single `/v2/events` call returns the game lines, the props, the event status and the results the source has, so there is no separate results API to reconcile. Each market carries `scoringSupported` and the event carries `status.finalized`.

### How often is NCAAF odds data updated?

Every ~2 minutes across every bookmaker lane. Each bookmaker entry carries `lastUpdatedAt`.

### Can I get historical NCAAF odds data?

Pro/Platform include recorded odds history and observed opening/closing main-line quotes with includeOpenCloseOdds=true and one eventID.

### Is there a free trial?

Yes — a free Developer key covers AFL and NRL; Rookie unlocks every league including NCAAF. [Get a key →](https://sockodds.com/signup/)

### Which bookmakers are included?

43 bookmakers price NCAAF, 38 of them Australian: BearBet, BetFocus, CashCage, MintBet, Dabble, Chasebet, LightningBet, Star Sports and more.

### Are live NCAAF odds available?

Event status is live; prices are pre-match first and refresh every ~2 minutes.

### How are markets identified in the API?

Every market uses a structured oddID in the format `{statID}-{statEntityID}-{periodID}-{betTypeID}-{sideID}` — for example `touchdowns-PLAYER_ID-game-yn-yes`. The same pattern lets you construct, filter and parse markets programmatically.

### Can I compare bookmaker odds?

Yes — every market returns prices from every supporting bookmaker under one `oddID`, so lining up the best available price across BearBet, BetFocus, CashCage, MintBet and the rest is straightforward.

## Start building today

Free plan available. Set up in 5 minutes. Scale when you're ready.
