Quickstart notes
Ping the feed before you poll it
A public ping endpoint answers whether the service is alive, before your script writes an empty row. One guard call at the top of the script.
Your script ran at 15 minutes past and the row it wrote is empty. Before you debug the parser, the query or your own code, there is a cheaper question: was the feed itself well? The API answers that directly, and a two-line preflight at the top of any script tells you in a second.
The free heartbeat
The feed exposes a public liveness endpoint, GET /ping, which needs no key and answers ok in plain text, as the network's health check documentation describes it, checked 2026-11-05. One curl call from the same terminal that runs your script settles whether the service is answering at all:
curl -s "$ODDS_BASE_URL/ping"
An ok means the front door works. Anything else means the afternoon's mystery is upstream, not in your jq filter. That is a better first check than any log you own, because it splits the problem in half for one request.
The detailed check, with your key
For more than liveness, the same service exposes an authenticated /health that reports each feed's status and how fresh its writes are, with ages in milliseconds, checked 2026-11-05. A healthy read shows write ages well under a second; a degraded one names the feed and how long it has been quiet.
You do not need this in every run of a hobby script. You want it in the two scripts that matter: the one that feeds a screen people watch, and the one that feeds your own records. When the data looks wrong there, the health read answers "is it them" before you burn an evening on "is it me".
Where the preflight belongs
Put the ping at the top of the script and let it decide whether the run proceeds. A simple pattern for any of this site's quickstarts, like the curl and jq first request, is: ping, and only if the answer is ok, poll. A failed ping writes a line to your log and exits quietly instead of writing an empty row that reads like a quiet market.
The same pattern holds in Apps Script and Python. One guard call, one early exit, and your sheet never fills with blanks that masquerade as data.
What the preflight cannot prove
A live ping proves the door is open, not that your key works, your plan covers the endpoint, or your sport has matches today. Those are the next three checks, and they fail differently: 401 and 403 for the key, a plan error for the stream, an empty events list for a quiet slate.
The habit is ordering, not cleverness. Door, key, plan, slate: check them in that order, and most broken afternoons end at the first line instead of the fourth hour.