{"version":"https://jsonfeed.org/version/1.1","title":"PuntersEdge devlog","home_page_url":"https://puntersedge.online/devlog","feed_url":"https://puntersedge.online/devlog.json","description":"Weekly write-up of what PuntersEdge API customers asked for and what shipped, grouped by request, with the still-open list at the end.","language":"en-AU","items":[{"id":"https://puntersedge.online/devlog/2026-09-03","url":"https://puntersedge.online/devlog/2026-09-03","title":"Devlog #1: What you asked for, and what shipped","content_text":"PuntersEdge devlog #1: What you asked for, and what shipped\nMonday 31 August to Thursday 3 September 2026, AEST\n\nThis was a week driven almost entirely by customer requests. Every section below opens with who asked and what for. Where something is half-done, it says so.\n\nHISTORICAL ODDS: EVERY PRICE CHANGE, KEPT FOR GOOD\nAsked by three customers building modelling and backtesting tools, who needed timestamped price movement rather than a single closing line.\n- Every price change per runner per bookmaker is now archived permanently, from 4 August 2026 onward. Snapshots are still purged after about six weeks, but the change-only path for every runner and book is kept before that happens.\n- /v1/racing/price-history now serves races that have aged out of the live store from the archive, in the same response shape. You will not notice the switch.\n- New /v1/racing/price-paths: a bulk export of the archive as CSV or JSON, one row per observed price point, up to a seven-day window per call. Paid plans. Betfair prices are withheld pending a data licence.\n\nWEBHOOKS: RACE.ODDS_OPEN, AND WEBHOOKS ON EVERY PAID PLAN\nAsked by a daily picks service that was polling on a schedule to find out when a race had been priced.\n- New event race.odds_open fires once per race, the moment the first bookmaker prices land. Subscribe to it and stop polling.\n- Webhooks are now available on Starter and Standard plans. They used to start at Business.\n- /v1/racing/next-to-go accepts num_races up to 200, so one call returns the whole priced card.\n- The /v1/racing/results docs now explain when starting prices appear: every final result carries settled prices, and a null SP means the race is still in the interim window.\n\nRESULTS: THE FULL FIELD, STABLE RUNNER IDS, JOCKEY AND TRAINER EVERYWHERE\nAsked by two customers maintaining historical runner databases, who needed a finishing position for every starter and an ID that survives name spelling.\n- Thoroughbred results now carry the full field, every starter with its finishing position, collected from Racing Australia and including jumps. Greyhound full fields come from the official Topaz feed for now.\n- Every runner, on results and on live prices, carries runner_ref: a stable registry ID (ra:<horsecode> for horses, grv:<dogId> for greyhounds). Join on it, never on the name.\n- Jockey, trainer, barrier and weight are now consistent across every Australian thoroughbred meeting, filled from Racing Australia acceptances about two days ahead. Previously only meetings covered by one particular bookmaker had them.\n- Horse form runs carry the trainer of the day, joined from the results archive. This populates from 1 September onward and grows with every meeting.\n\nGREYHOUNDS: FORM, STATS, A CHANGES FEED, AND CLEAN SCRATCHINGS\nAsked by a customer building a greyhound analysis app, who sent a ten-item list.\n- New /v1/racing/greyhounds/form and /v1/racing/greyhounds/stats (3 credits each). Form history per dog, and track, distance, box and grade statistics, from the official Topaz feed. Form runs include grade_in and grade_out, and a second split time where the track records one.\n- New /v1/racing/changes: a changed-since feed with a since cursor. Poll it once instead of re-downloading the card. Deliveries are at-least-once, so treat a repeated row as harmless.\n- /v1/racing/events now serves scratchings and market status. Box-vacancy placeholders, which used to appear under several spellings and double-count the field, collapse to one canonical Vacant Box entry per box.\n\nTHOROUGHBREDS: FORM PER HORSE, PREMIERSHIP TABLES\nAsked by a customer building a thoroughbred model app, who needed last-ten-start histories and career splits joined to the odds feed.\n- New /v1/racing/horses/form: last starts, career record, and going splits per horse, from Racing Australia form pages, with stable horse IDs that join straight onto the live feed.\n- Live surfaces (next-to-go and events) now carry Racing Australia race and meeting metadata.\n- New /v1/racing/jockeys/stats and /v1/racing/trainers/stats (2 credits). Premiership top-20 tables, national and per state, split by metro, provincial, country and picnic, for the current and previous season. The store is still filling. Both endpoints answer 503 until it does. Do not build on them this week.\n\nVENUES: ONE IDENTITY PER TRACK\nAsked by a customer whose model joins broke on Sandown Hillside versus Lakeside and on Pakenham Synthetic.\n- Every racing response now carries venue_id, venue_canonical and venue_site. The raw venue string is unchanged.\n- New /v1/racing/venues (1 credit), the measured venue directory.\n- track_name on next-to-go and events gives Racing Australia's course name verbatim (Hillside, Lakeside, Main).\n- Closing-lines and price-paths exports carry venue_id and venue_site as trailing columns, so positional CSV readers keep working.\n\nBEST ODDS: PLACE PRICES, SOURCE LINKS, AND A SPORTSBET FIX\nAsked by a tipping service that rejected every place quote for lacking a link, and a customer who noticed Sportsbet coverage fall away.\n- best_place quotes on /v1/racing/best-odds now carry source_url, matching best_win.\n- Ladbrokes, Neds and Palmerbet place prices are now read. They were published, and we were only reading win.\n- Sportsbet was showing its mid-day promotional price instead of its board price. Fixed. The separate Sportsbet coverage drop, which began 28 August, was traced and fixed the same day.\n- age_seconds now reports the true age of a pushed price.\n- Deep links to the bookmaker's race page are surfaced where we already had them, and results can be split by country.\n\nOFFICIAL MCP SERVER\nAsked by a customer who had wrapped the API in an MCP server himself, and suggested a first-party one.\n- puntersedge-mcp 0.1.0 is on PyPI. Ten read-only tools, credit cost in every tool description, and credits_remaining on every response.\n  pip install puntersedge-mcp\n\nPLANS AND BILLING\n- Two new plans: Plus at A$49 for 140,000 credits, and Platform at A$199 for 1,500,000 credits with redistribution rights. Platform is the only plan that permits redistribution.\n- Upgrades now happen in place and are prorated. You keep your key and pay the difference for the rest of the period. No more cancelling and re-checking out at full price.\n- A self-serve cancel page. Cancelling no longer requires writing a request by hand.\n- The site now states what the feed has carried all along: Australian and New Zealand thoroughbreds and harness. Use country=NZ.\n\nHOUSEKEEPING\n- Every marketing email now carries a working one-click unsubscribe, backed by a single suppression list that every sender checks. Transactional mail (key delivery, verification, billing) is never suppressed.\n- Six bookmakers that had delivered no prices for more than 48 hours are out of the active catalogue. Their keys are still accepted in requests, so nothing 422s. The coverage claim now reads 14 Australian bookmakers and matches the catalogue.\n- The OpenAPI description carries a per-endpoint credit-cost table, pinned by a test. The Postman collection has been regenerated with the new required-parameter endpoints.\n- Sports: direct bookmaker connectors poll every 120 seconds, down from 900. Sportsbet sports fixtures near the jump re-price every 60 seconds.\n\nSTILL OPEN\n- Full-day card in the morning. Connectors fetch races about three hours ahead, so a 10am pull sees no afternoon races. Requested for whole-of-day win and place. In design. It touches every bookmaker connector, so it will land as one change rather than piecemeal.\n- Separate win and place bookmaker counts on /v1/racing/best-odds. books_quoting is one combined number today.\n- Starting price per runner on results is sparse. The fix is a join to the official feed.\n- Greyhound results from our own collection are running in parity mode against the interim source and will switch over after clean days.\n- Premiership stats data is filling, as above.\n- Early-market capture for early-morning jumps, where bookmakers price the race well before our window opens.\n\nReply with anything you want on the list. Requests from the last week drove nearly everything above.","date_published":"2026-09-03T00:00:00+00:00"}]}