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. No authentication, no rate limit, CORS-enabled. Designed for AI agents, comparison engines, dashboards and RSS readers.

Endpoint

GET https://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://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://edges.co.za/feed/picks.json | jq '.items[0]._edges'

Python

# Python
import requests
feed = requests.get("https://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 — best price across SA-licensed operators.
  • 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 — every SA-licensed price the desk sees at deploy time.
  • 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://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, best price, operator licensing, edge percent, all-operator prices, compliance metadata). No authentication required. CORS-enabled for browser-side fetch. Cache-Control 5 minutes; build is regenerated on every Edges deploy. 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, 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).
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?
Prices reflect the operator-level odds Edges sees at deploy time, with last_updated timestamps per operator. Real-time price drift between deploys is expected — confirm the live price in the operator slip before placing any bet. The feed is not a real-time price stream; it's an editorial-pick feed with pricing context.
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.