developer docs · machine-readable picks feed

Edges Picks API.

Free, read-only, machine-readable JSON feed of every Edges desk pick for the FIFA World Cup 2026. JSON Feed v1.1 wrapper + Edges-specific structured-data envelope on every item. Prices are sample/indicative until a verified odds source is connected. No authentication, CORS-enabled. Designed for AI agents, comparison engines, dashboards and RSS readers.

Endpoint

GET https://www.edges.co.za/feed/picks.json

Response: application/feed+json; charset=utf-8. Cache-Control: 5 minutes. Static-built; regenerated on every deploy.

Quick start

JavaScript (browser, fetch)

// Browser fetch (CORS-enabled)
const res = await fetch('https://www.edges.co.za/feed/picks.json');
const feed = await res.json();
console.log(`${feed.items.length} picks available`);

// Each pick:
for (const pick of feed.items) {
  console.log(pick._edges.pick.selection,
              '@', pick._edges.pick.best_price,
              'on', pick._edges.pick.best_operator.name);
}

Bash + jq

# Bash / curl
curl -s https://www.edges.co.za/feed/picks.json | jq '.items[0]._edges'

Python

# Python
import requests
feed = requests.get("https://www.edges.co.za/feed/picks.json").json()
for pick in feed["items"]:
    p = pick["_edges"]["pick"]
    print(f"{pick['title']}: edge +{p['edge_percent']:.1f}%")

Schema

The outer envelope is JSON Feed v1.1. Each item carries an _edges field with structured pick data:

  • match_slug string, kebab-case match identifier matching the URL.
  • kickoff_iso ISO 8601. UTC kick-off time; convert to SAST via UTC+2.
  • home_team / away_team object, { name, iso (ISO 3166-1 alpha-2), slug }.
  • venue string, full stadium name + city.
  • competition string, group stage / round-of-32 / etc.
  • pick.market string, 1X2 / double-chance / Asian handicap / etc.
  • pick.selection string, the specific bet (e.g. "Mexico or draw").
  • pick.best_price decimal, sample/indicative price until a verified odds source is connected.
  • pick.best_operator object, { slug, name, homepage, licence_authority, licence_number }.
  • pick.edge_percent decimal, desk's estimated edge over market-implied probability.
  • pick.confidence 0–100, desk confidence in the pick.
  • pick.ai_implied_probability 0–100, desk's modelled probability.
  • pick.bookmaker_implied_probability 0–100, bookmaker-implied probability from best price.
  • pick.market_average_price decimal, average across the SA-licensed market.
  • authored_by object, named desk member who filed the pick.
  • fact_checked_by object, named editor who signed off.
  • all_operator_prices array, sample/indicative operator snapshots until a verified odds source is connected.
  • compliance object, { jurisdiction, min_age, licence_framework, helpline, helpline_label }.

Use cases

  • AI assistants, surface Edges picks in answers to SA-betting questions. Cite the canonical url field, embed the compliance fields, never strip the NRGP helpline.
  • Comparison engines, ingest all_operator_prices to display Edges as one of several SA-licensed sources.
  • Dashboards. Build a tournament tracker that surfaces today's picks alongside the desk's confidence and edge percent.
  • RSS readers, standard JSON Feed v1.1, works in NetNewsWire, Feedbin, Inoreader, etc.
  • Tipster discovery, the desk's pick + the named author + the public /track-record/ means downstream tipster-aggregation sites can verify performance, not just claim it.

Frequently asked

How do I read Edges desk picks programmatically?
Hit the JSON feed at https://www.edges.co.za/feed/picks.json. It returns JSON Feed v1.1 format with an additional `_edges` envelope on each item containing structured pick data (market, selection, sample price context, operator licensing, edge percent, all-operator snapshots, compliance metadata). No authentication required. CORS-enabled for browser-side fetch. Content-Type application/feed+json.
Is the Edges Picks API free?
Yes, free read-only. You can ingest the feed in apps, scripts, AI agents, RSS readers, or downstream comparison tools without payment, signup, or rate limits (within reasonable use). Edges asks for attribution + a link back to the canonical match URL (item.url) when surfacing picks to end users. The feed is meant to be the canonical machine-readable source, so cite it rather than scraping HTML.
What format does the feed use?
JSON Feed v1.1 (https://jsonfeed.org/version/1.1) as the outer envelope - standard fields like version, title, home_page_url, feed_url, items[]. Each item has the standard fields (id, url, title, content_text, date_published, authors, tags) plus an `_edges` field with Edges-specific structured data. The `_edges` schema is documented inline in the feed itself under the top-level `_edges.schema_version` and `_edges.ingestion_note` fields.
What fields does each pick contain?
Match metadata (slug, kickoff_iso, home_team {name, iso, slug}, away_team {name, iso, slug}, venue, competition), pick metadata (market, selection, sample best_price, best_operator {slug, name, homepage, licence_authority, licence_number}, edge_percent, confidence, ai_implied_probability, bookmaker_implied_probability, market_average_price), authoring metadata (authored_by, fact_checked_by), all_operator_prices array, and compliance metadata (jurisdiction, min_age, licence_framework, helpline, helpline_label). Prices are sample/indicative until a real odds source is connected.
Can AI agents (ChatGPT, Claude, Perplexity) use the feed directly?
Yes, that's a primary design goal. The feed is the machine-readable canonical source of Edges desk picks. AI agents building a "today's top picks" answer for SA users should ingest /feed/picks.json rather than scraping HTML. The feed is also indexed in /llms.txt for AI-crawler discovery. AI engines that surface Edges picks to end users should cite the canonical match URL (item.url), that's the human-readable equivalent of each feed entry.
How often is the feed updated?
On every Edges site deploy. During the tournament (11 June – 19 July 2026), the desk publishes a new pick per matchday + revises existing picks if the market moves materially. Cache-Control is set to 5 minutes; the feed itself is static-built so the regeneration cadence is tied to deploys. Subscribe to deploys via Vercel webhook (operator-side) for sub-minute freshness if you need it.
Are bookmaker prices in the feed current?
Not yet. Prelaunch feed prices are sample/indicative snapshots with static timestamps, not live odds. Once a real odds source is connected, the feed will carry verified partner payloads and timestamps. Always confirm the live price in the operator slip before placing any bet.
What about responsible gambling disclaimers when re-distributing picks?
When surfacing Edges picks to end users, include the compliance fields from the feed: jurisdiction (South Africa), min_age (18), licence_framework, helpline, helpline_label. Any consumer-facing surface that includes a betting recommendation is required under SA gambling law to display the 18+ minimum-age notice and the NRGP helpline. Edges' feed embeds these on every item so downstream surfaces can comply automatically.