Skip to main content
DawBets

DawBets Public API

Quick answer

A small GET-only JSON API with no authentication: the sportsbooks DawBets compares, which of them are licensed in each US state, current subscription prices, and the version of the expected-value methodology. The machine-readable OpenAPI 3.1 document is at /openapi.json. Odds, fair prices and EV are not served here — those need an account, in the app or through the Claude connector.

What it is for

Agents and integrators kept scraping the marketing pages for facts that a JSON endpoint states better: which books we cover, what a state allows, what a plan costs, and what "EV" means on a DawBets card. This API is those facts, versioned, with the same rate limits and error shape on every route. Point a client generator at /openapi.json and every operation below has a stable operationId.

  • Base URL https://dawbets.com, HTTPS only.
  • Every response is application/json. Every date is ISO-8601 in UTC.
  • No API key, no OAuth, no CORS restrictions on the spec itself.

Endpoints

GET/api/sportsbooks

Sportsbooks DawBets currently compares. operationId listSportsbooks

Rate limit 60 requests per 60s per IP · cached for 24 hours

Request

curl "https://dawbets.com/api/sportsbooks"

Example response

[
  {
    "id": "bet365",
    "name": "bet365",
    "logo": "sportsbooks/bet365",
    "fee_percentage": 0,
    "desktop_link_cta": "Go to market page",
    "mobile_link_cta": "Add to slip",
    "is_prediction_market": false
  },
  {
    "id": "kalshi",
    "name": "Kalshi",
    "logo": "sportsbooks/kalshi",
    "fee_percentage": 0,
    "desktop_link_cta": "Add to slip",
    "mobile_link_cta": "Add to slip",
    "is_prediction_market": true
  }
]

GET/api/state-sportsbooks

Sportsbook ids licensed in a US state. operationId listStateSportsbooks

Rate limit 60 requests per 60s per IP · cached for 24 hours

Request

curl "https://dawbets.com/api/state-sportsbooks?state=NJ"

Example response

{
  "sportsbooks": [
    "draftkings",
    "fanduel",
    "betmgm",
    "caesars"
  ]
}

state is a two-letter USPS code, uppercase (DC for Washington DC). An unknown or unlicensed state returns an empty list, not an error. Ids match the id field of /api/sportsbooks.

GET/api/prices

Current subscription prices. operationId getPrices

Rate limit 30 requests per 60s per IP · cached for 24 hours

Request

curl "https://dawbets.com/api/prices"

Example response

{
  "hasAnnual": true,
  "plus": {
    "monthly": "$19",
    "annual": "$15",
    "annualTotal": "$190"
  },
  "pro": {
    "monthly": "$30",
    "annual": "$25",
    "annualTotal": "$300"
  }
}

Prices are pre-formatted US-dollar strings, read from Stripe on a cache miss. annual is the annual plan expressed per month; annualTotal is the full annual charge. The values above are examples of the format, not a price list — fetch the endpoint for the live numbers.

GET/api/methodology

The EV methodology version and its parameters. operationId getMethodology

Rate limit 60 requests per 60s per IP · not cached

Request

curl "https://dawbets.com/api/methodology"

Pin version. It changes only when a number a bet is scored or sized by changes, so a stored value that no longer matches means the math moved, not the site. The current version is 1.0.0, last changed 2026-05-27; the prose it summarizes is our methodology page.

FieldTypeMeaning
versionstringSemantic version of the methodology. Pin this.
namestringHuman name of the methodology.
descriptionstringOne plain-text paragraph: devig, EV, Kelly sizing, badge tiers.
lastUpdatedstring (date)ISO-8601 calendar date the methodology last changed, UTC.
documentationUrlstring (uri)The prose methodology page.
kelly.fractionsobjectFraction of full Kelly per risk tolerance (high, medium, low); 0.5 = half Kelly.
kelly.playerPropReductionnumberExtra multiplier applied to player-prop wagers.
badgeTiers[]arrayvalue (4 best to 0), label, and the EV band each tier covers.

Rate limits

Each endpoint has its own per-IP sliding window, listed above and in the spec as x-rate-limit. Exceed it and you get HTTP 429 with a Retry-After header holding the seconds until the window resets; wait that long and retry. Cached endpoints rarely reach the limiter — the shared cache answers repeat requests — but a loop over distinct state values misses the cache every time and is counted.

Error shape

Every non-2xx response is the same JSON object. statusCode and statusMessage are always present; data carries validation detail (an issues array) when there is any.

{
  "error": true,
  "url": "https://dawbets.com/api/state-sportsbooks",
  "statusCode": 400,
  "statusMessage": "state query parameter is required"
}
  • 400 — a required parameter is missing or malformed.
  • 429 — rate limit exceeded; honor Retry-After.
  • 500 — the data behind the route could not be loaded; retry later.

Versioning and changelog

The spec carries a semantic version in info.version (currently 1.0.0). Adding a field or an endpoint is a minor bump; removing or renaming anything, or changing a type, is a major bump and is announced here first. Every change a client could notice is a line in x-changelog, newest first:

  • 2026-09-03v1.0.0
    • Published the OpenAPI 3.1 document at /openapi.json.
    • Added GET /api/methodology.
    • Documented GET /api/sportsbooks, GET /api/state-sportsbooks and GET /api/prices, and put a per-IP rate limit on each.

Odds and EV for agents: the Claude connector

Live odds, fair prices, expected value and a user's own tracked bets are not part of this API. They are available to AI agents through the DawBets MCP server, which a subscriber connects to Claude with OAuth on /connect-claude. The connector is scoped to the signed-in user's own account, is not available on the Free plan, and requires a one-time confirmation of legal sports-betting age before any tool answers.

Terms

  • The public API answers GET requests only and serves reference data only. It never serves odds, fair prices or EV.
  • Use is governed by our Terms of Service and Privacy Policy. The citation policy in /llms.txt applies to anything you republish.
  • The Claude connector is a per-user, account-bound service: the legal-age rules of the user's jurisdiction apply (21+ in most US states), and it is not offered as a data feed.
  • We may change or withdraw an endpoint; a breaking change is a major version and appears in the changelog before it ships.

Contact

Questions, a field you need, or something the spec gets wrong: team@dawbets.com. Data licensing and partnership inquiries go to the same address.

Frequently asked questions

Does the DawBets public API include odds or expected value?

No. The public API serves reference data only: the sportsbook catalog, per-state licensing, subscription prices and the methodology version. Odds, fair prices, EV and tracked bets require an account and are available in the app or to a subscriber through the Claude MCP connector.

Do I need an API key?

No. Every public endpoint is unauthenticated and rate-limited per IP. The limits are listed per endpoint on this page and in the x-rate-limit extension of /openapi.json.

How do I know when the EV methodology changes?

GET /api/methodology returns a semantic version and a lastUpdated date. The version changes only when a number a bet is scored or sized by changes, so compare the value you stored against the one served.