When a pickleball court opens up, today’s issue goes out, a city posts an agenda or the surf comes up, elsegundo.xyz can tell your bot right away. Signed webhooks for builders, plain feeds for everyone else.
Not an official City of El Segundo page. Not affiliated with rec.us, LA Metro, NWS, NOAA, AirNow, Heal the Bay or any city named here. Election-neutral: no candidates, and ballot measures only as the official agenda wording.
Schema elsegundo.xyz/webhooks/v1 · updated Oct 27, 2026, 3:50 PM PT · The event feeds start on merge. Webhook deliveries open once a signing key is set. Partner intake is coming later.
Court opened
The first webhook: a Rec Park pickleball court frees up.
A court hour at Rec Park that was booked in the previous /pickleball snapshot shows as open in the next one, for a future hour on a day both snapshots cover. Checked at :20 past each hour; new snapshots arrive about 7, 10 AM, 1, 4 and 7 PM PT, so a typical day has up to 5 chances.
Reads the snapshot /pickleball already stores. Makes no extra calls to rec.us.
Public availability only: open or not, per court per hour. No booker names or accounts are read or stored.
Credits rec.us and links to rec.us to book. We never book or hold courts.
Stops when the /pickleball kill switch is on (PICKLEBALL_LIVE=off or live_enabled:false), or when the snapshot is stale.
Rec Park is the only court with live data today. Other South Bay courts are listed on /pickleball without live availability.
Pick what you care about. Filter by day (dows), hours (hour_from, hour_to), courts (courts) and how many open at once (min_courts). Example: weekend mornings, two courts or more.
Availability from rec.us’s public court listing. Book on rec.us.
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_921135886c11c07ef2345bce",
"type": "court.opened",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "3 court hours opened up at Rec Park since the last check; the first is Tue 5 PM (3 courts). Book on rec.us.",
"url": "https://elsegundo.xyz/pickleball/",
"source": {
"name": "rec.us public court listing",
"url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd",
"retrieved_at": "2026-10-27T13:05:11-07:00",
"credit": "Availability from rec.us’s public court listing. Book on rec.us."
},
"provenance": {
"label": "availability",
"sources": [
{
"publisher": "rec.us",
"url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd"
}
],
"note": "Aggregate open/not-open per court per hour from rec.us’s public listing, read 5 times a day by /pickleball. No booker identity is read or stored. A slot may be taken by the time you look."
},
"data": {
"location": {
"id": "7527b987-0f0b-473e-9680-0c90758f6dcd",
"name": "Recreation Park pickleball courts, El Segundo",
"page": "https://elsegundo.xyz/pickleball/",
"book_url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd"
},
"detected_between": {
"from": "2026-10-27T10:05:09-07:00",
"to": "2026-10-27T13:05:11-07:00"
},
"openings": [
{
"date": "2026-10-27",
"dow": "Tue",
"hour": 17,
"start": "2026-10-27T17:00:00-07:00",
"end": "2026-10-27T18:00:00-07:00",
"newly_open_courts": [
6,
7,
8
],
"court_names": [
"Pickleball Court 6",
"Pickleball Court 7",
"Pickleball Court 8"
],
"open_courts_total": 4,
"book_url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd?date=2026-10-27"
},
{
"date": "2026-10-27",
"dow": "Tue",
"hour": 21,
"start": "2026-10-27T21:00:00-07:00",
"end": "2026-10-27T22:00:00-07:00",
"newly_open_courts": [
3,
4,
7
],
"court_names": [
"Pickleball Court 3",
"Pickleball Court 4",
"Pickleball Court 7"
],
"open_courts_total": 5,
"book_url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd?date=2026-10-27"
},
{
"date": "2026-10-28",
"dow": "Wed",
"hour": 17,
"start": "2026-10-28T17:00:00-07:00",
"end": "2026-10-28T18:00:00-07:00",
"newly_open_courts": [
3
],
"court_names": [
"Pickleball Court 3"
],
"open_courts_total": 1,
"book_url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd?date=2026-10-28"
}
],
"credit": "Availability from rec.us’s public court listing. Book on rec.us."
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
}
Event catalog
7 events, one envelope. Every event carries its source and a label.
court.openedOn at launch
A pickleball court opened up
When it fires: A court hour at Rec Park that was booked in the previous /pickleball snapshot shows as open in the next one, for a future hour on a day both snapshots cover.
How often: Checked at :20 past each hour; new snapshots arrive about 7, 10 AM, 1, 4 and 7 PM PT, so a typical day has up to 5 chances.
When it fires: An item in the /metro guide’s "Right now" list or project tracker is new, changes, or is cleared. Covers the C and K Lines, SkyLink and LAX connections.
How often: Hourly. /metro.json changes by reviewed PR, so these follow our edits, not Metro’s live feed.
Filters:kinds ["service","airport","project"]
Each alert links the agency source it came from and keeps its fact or reported label.
Live Metro alerts would need a Metro/Swiftly key; see blockers.
When it fires: A new agenda appears in El Segundo’s or Redondo Beach’s Granicus agenda feed, or a Manhattan Beach Legistar meeting gets an agenda file.
How often: 5 times a day (7, 10 AM, 1, 4, 7 PM PT).
When it fires: A new NWS alert for El Segundo; an NWS daytime forecast high of 90°F or more; Santa Monica Bay buoy wave height crossing 1.8 m (about 6 ft); AQI crossing 101; a nearby beach water grade moving into or out of C/D/F.
Unsubscribe: POST {"id","token"} to /api/v1/webhooks/unsubscribe, or answer any delivery with 410 Gone. Status:GET /api/v1/webhooks/subscription?id=… with Authorization: Bearer mt_….
URL rules. Public https only, port 443, no user:password, no IP addresses, no localhost or internal names, no elsegundo.xyz or netlify.app. The host must resolve to public addresses, checked again before every delivery.
Limits. 6 per minute per IP; 5 active per host; 500 in total. Privacy. We store your URL, chosen events and filters, an optional label, and delivery status. No email, no IP log in our records. Secrets are derived, not stored.
Signing
HMAC-SHA256, in the Standard Webhooks format.
Each delivery has webhook-id, webhook-timestamp, webhook-signature. The signature is v1,<base64 HMAC-SHA256> over {webhook-id}.{webhook-timestamp}.{raw request body}, keyed with your whsec_… secret. Reject anything older than 5 minutes. webhook-id equals the event id and stays the same across retries. Libraries from Standard Webhooks verify it as-is.
Delivery. POST, application/json, 10-second timeout. Any 2xx. Retries after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h. Up to 7 attempts over about 21 hours, then the delivery is dropped to a dead-letter list. Redirects are not followed. Answer 410 Gone to unsubscribe yourself. After 50 failures in a row we pause the subscription. Best effort, not guaranteed. Use created_at and id.
Example payloads
Built by running the real diff code on saved data.
court.opened 1 example
Real availability from the Oct 27, 1:05 PM PT snapshot, diffed against an edited copy standing in for the 10:05 AM one.
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_921135886c11c07ef2345bce",
"type": "court.opened",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "3 court hours opened up at Rec Park since the last check; the first is Tue 5 PM (3 courts). Book on rec.us.",
"url": "https://elsegundo.xyz/pickleball/",
"source": {
"name": "rec.us public court listing",
"url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd",
"retrieved_at": "2026-10-27T13:05:11-07:00",
"credit": "Availability from rec.us’s public court listing. Book on rec.us."
},
"provenance": {
"label": "availability",
"sources": [
{
"publisher": "rec.us",
"url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd"
}
],
"note": "Aggregate open/not-open per court per hour from rec.us’s public listing, read 5 times a day by /pickleball. No booker identity is read or stored. A slot may be taken by the time you look."
},
"data": {
"location": {
"id": "7527b987-0f0b-473e-9680-0c90758f6dcd",
"name": "Recreation Park pickleball courts, El Segundo",
"page": "https://elsegundo.xyz/pickleball/",
"book_url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd"
},
"detected_between": {
"from": "2026-10-27T10:05:09-07:00",
"to": "2026-10-27T13:05:11-07:00"
},
"openings": [
{
"date": "2026-10-27",
"dow": "Tue",
"hour": 17,
"start": "2026-10-27T17:00:00-07:00",
"end": "2026-10-27T18:00:00-07:00",
"newly_open_courts": [
6,
7,
8
],
"court_names": [
"Pickleball Court 6",
"Pickleball Court 7",
"Pickleball Court 8"
],
"open_courts_total": 4,
"book_url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd?date=2026-10-27"
},
{
"date": "2026-10-27",
"dow": "Tue",
"hour": 21,
"start": "2026-10-27T21:00:00-07:00",
"end": "2026-10-27T22:00:00-07:00",
"newly_open_courts": [
3,
4,
7
],
"court_names": [
"Pickleball Court 3",
"Pickleball Court 4",
"Pickleball Court 7"
],
"open_courts_total": 5,
"book_url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd?date=2026-10-27"
},
{
"date": "2026-10-28",
"dow": "Wed",
"hour": 17,
"start": "2026-10-28T17:00:00-07:00",
"end": "2026-10-28T18:00:00-07:00",
"newly_open_courts": [
3
],
"court_names": [
"Pickleball Court 3"
],
"open_courts_total": 1,
"book_url": "https://www.rec.us/locations/7527b987-0f0b-473e-9680-0c90758f6dcd?date=2026-10-28"
}
],
"credit": "Availability from rec.us’s public court listing. Book on rec.us."
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
}
today.published 1 example
Real Oct 27 edition; the two asks are illustrative until /asks.json ships.
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_37151b4fb25f2ea8a047db98",
"type": "today.published",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "South Bay Today for 2026-10-27 is up: 5 top stories and 2 open asks for bots.",
"url": "https://elsegundo.xyz/today/",
"source": {
"name": "South Bay Today (elsegundo.xyz)",
"url": "https://elsegundo.xyz/today.json",
"retrieved_at": "2026-10-27T22:00:50.699Z"
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "elsegundo.xyz",
"url": "https://elsegundo.xyz/today/"
}
],
"note": "Each story keeps its own label (fact, reported) and links its best source. Asks come from /asks.json."
},
"data": {
"edition": "2026-10-27",
"title": "South Bay Today",
"page_url": "https://elsegundo.xyz/today/",
"json_url": "https://elsegundo.xyz/today.json",
"feed_url": "https://elsegundo.xyz/today/feed.json",
"markdown_url": "https://elsegundo.xyz/today.md",
"updated_at": "2026-10-27T15:00:50-07:00",
"top_stories": [
{
"rank": 1,
"headline": "El Segundo Reaches Deal With Chevron to Increase Payments to City",
"label": "reported",
"source": "MyNewsLA.com",
"url": "https://news.google.com/rss/articles/CBMipgFBVV95cUxPZTBwRi1jRWQ5NzM2VWcxV2pVRGtBVTU1WXpuNnAyQW4wcGEzUnFWa21WWnozVEJmekZ6NDBoamo3RFM5bTQybzFZV05JXzRhZFowUmZLZTBHX1JVc3IyX3RaVURPMTdVcVNwN29HVEVsQi1yTWlWa3dWWklMUUFkY3FiYkU0Z25zQ0N6RFNyd0ROS2pWcDR5MWx0cmhPT25ROXJuemt3?oc=5"
},
{
"rank": 2,
"headline": "Epicenter Acquires Culver City Flex Industrial Site For $11M",
"label": "reported",
"source": "Bisnow",
"url": "https://news.google.com/rss/articles/CBMiuwFBVV95cUxNZlF1VFVRSnBKSnhEQnhqZWgteXczTndNSl9raEZYWGduQS11eUpJZ1cxQlVRR0pRN08wc24tSWNuczluNVdodFNHQXRoSEFsd2wwdnFvaHF2bVZPc0RXLWFqYllwRHNPV0RMSnFrTVZUdDBzR245ai02enZVaGJON19DQUZiNEIta0x6ampjbDFBbC1vNkdKSHpqTS1YLTE0aGJ0WjB1MHprTHdNa1NmLTNZdjd1c2NWTG5Z?oc=5"
},
{
"rank": 3,
"headline": "Redondo Beach bar still open for business despite major flooding",
"label": "reported",
"source": "Jocelyn Fiset",
"url": "https://ktla.com/news/local-news/redondo-beach-bar-still-open-major-flooding/"
},
{
"rank": 4,
"headline": "News | LA investor bets on defense demand with Culver City industrial purchase",
"label": "reported",
"source": "CoStar",
"url": "https://news.google.com/rss/articles/CBMiswFBVV95cUxNZE9adjZ6U2ppZWRjVlJxSWN0YjdEd3NWYVhFaThfcFJFRzJEc2VxSmw1S1JzUWNzakgzVDQ1OFlxeWZHYWxoU1pxenpMV2ZiU01rQnlocUlvQ012b053cjZkTC03Uy10aDM3eV9ERkVXaXNOVmVGYWlyWXdvRUlEUHJWZ0pOODhqdzB5NUFaanR4WFVTVU9YZWNsWmoyeFg4M2tZTzBTUEE3N2tBSnNEcXlhVQ?oc=5"
},
{
"rank": 5,
"headline": "LAX’s embattled ‘People Mover’ malfunctions with massive arc flash during routine test of train",
"label": "reported",
"source": "New York Post",
"url": "https://news.google.com/rss/articles/CBMirgFBVV95cUxOeWlqOUhiNFIyRkNOYWhHM0dHdVUzNEw0cjIxMDBBWTJBV0F2MVB2TEd4UnRJS1JHa2V5Y3dIYXdkV0xBQ1B1d3RaM05kcnRob1pkelJVX1NoRGFBYzZ1VU80eHRkUmlZWDhEQVpxSnQ2UUs1TGFyNGIydjNaVzM4U2xoRlF6OE0yZGNhbnA2RVpjN1dHR1ZGUXZsTU9yanhhajFFajBKQWpnQ2U2d3c?oc=5"
}
],
"asks": [
{
"id": "ask-court-hours-check",
"type": "contribute",
"title": "Confirm this weekend's hours at one South Bay pickleball court",
"url": "https://elsegundo.xyz/pickleball/"
},
{
"id": "ask-council-reminder",
"type": "remind",
"title": "Remind your people: El Segundo City Council meets Nov 3",
"url": "https://elsegundo.granicus.com/ViewPublisher.php?view_id=10"
}
],
"asks_url": "https://elsegundo.xyz/asks.json"
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
}
ask.opened 1 example
Illustrative ask; /asks.json is not published yet.
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_71b2da75e8d11d35cf8b1686",
"type": "ask.opened",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "New contribute ask: Confirm this weekend's hours at one South Bay pickleball court",
"url": "https://elsegundo.xyz/pickleball/",
"source": {
"name": "elsegundo.xyz open asks",
"url": "https://elsegundo.xyz/asks.json",
"retrieved_at": null
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "source",
"url": "https://elsegundo.xyz/pickleball/"
},
{
"publisher": "elsegundo.xyz",
"url": "https://elsegundo.xyz/asks.json"
}
]
},
"data": {
"id": "ask-court-hours-check",
"ask_type": "contribute",
"title": "Confirm this weekend's hours at one South Bay pickleball court",
"opens_at": "2026-10-27T15:00:00-07:00",
"closes_at": "2026-10-31T18:00:00-07:00",
"how_to_respond": "Send the court, the hours and the official page that lists them through /report/.",
"url": "https://elsegundo.xyz/pickleball/"
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
}
transit.alert 2 examples
Real /metro items, marked new or updated against an edited earlier state.
[
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_57fb1af08ee666dc700c7f2a",
"type": "transit.alert",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "New transit alert: D Line: three Wilshire stations closed until 4 AM Mon, Nov 2",
"url": "https://elsegundo.xyz/metro/",
"source": {
"name": "elsegundo.xyz /metro guide",
"url": "https://elsegundo.xyz/metro.json",
"retrieved_at": "2026-10-27"
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "The Source (LA Metro)",
"url": "https://thesource.metro.net/three-d-line-stations-to-close-oct-23-through-nov-1-for-maintenance-work/",
"title": "Three D Line stations to close Oct. 23 through Nov. 1 for maintenance work"
}
]
},
"data": {
"change": "new",
"kind": "service",
"id": "dline-closure",
"title": "D Line: three Wilshire stations closed until 4 AM Mon, Nov 2",
"text": "Wilshire/La Brea, Wilshire/Fairfax and Wilshire/La Cienega are closed for electrical work. D Line trains run Union Station to Wilshire/Western, with Line 855 shuttle buses every 10 minutes to the closed stations.",
"status": null,
"opening": null,
"expires": "2026-11-02T04:00:00-08:00",
"lines": []
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
},
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_7fee60082fc1f2f35cf13307",
"type": "transit.alert",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "Updated LAX connection note: LAX SkyLink (Automated People Mover)",
"url": "https://elsegundo.xyz/metro/",
"source": {
"name": "elsegundo.xyz /metro guide",
"url": "https://elsegundo.xyz/metro.json",
"retrieved_at": "2026-10-27"
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "LAX (Los Angeles World Airports)",
"url": "https://www.flylax.com/sites/lax/files/2026-10/LAX-SkyLink_Myth-vs-Fact_Web_0.pdf",
"title": "LAX SkyLink Myth vs Fact (information current as of Oct 23, 2026)"
},
{
"publisher": "LAX (Los Angeles World Airports)",
"url": "https://www.flylax.com/skylink",
"title": "SkyLink"
},
{
"publisher": "The Source (LA Metro)",
"url": "https://thesource.metro.net/how-to-use-the-lax-metro-transit-center-with-new-bus-and-rail-connections/",
"title": "How to use the LAX/Metro Transit Center with new bus and rail connections"
}
]
},
"data": {
"change": "updated",
"kind": "airport",
"id": "skylink",
"title": "LAX SkyLink (Automated People Mover)",
"text": "Testing, not open. No confirmed date (LAX)",
"status": "Testing, not open",
"opening": "No confirmed date (LAX)",
"expires": null,
"lines": []
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
}
]
civic.agenda_posted 1 example
Real El Segundo Granicus agenda item.
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_3a8853ddaf6e94bea69dca9b",
"type": "civic.agenda_posted",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "El Segundo: agenda posted for Special Council Meeting (2026-10-26).",
"url": "https://elsegundo.granicus.com/AgendaViewer.php?view_id=10&clip_id=5077",
"source": {
"name": "El Segundo City Council agenda feed (Granicus)",
"url": "https://elsegundo.granicus.com/ViewPublisherRSS.php?view_id=10&mode=agendas",
"retrieved_at": null
},
"provenance": {
"label": "official record",
"sources": [
{
"publisher": "City of El Segundo",
"url": "https://elsegundo.granicus.com/AgendaViewer.php?view_id=10&clip_id=5077"
}
]
},
"data": {
"city": "El Segundo",
"body": "City Council",
"meeting_title": "Special Council Meeting",
"meeting_date": "2026-10-26",
"meeting_time": null,
"agenda_url": "https://elsegundo.granicus.com/AgendaViewer.php?view_id=10&clip_id=5077",
"detail_url": null,
"neutrality": "Meeting title, date and the official agenda link only. We do not summarize items, and never mention candidates; ballot measures appear only as the official agenda wording."
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
}
conditions.threshold 5 examples
NWS alert and water grades are real readings; the surf, heat and AQI numbers are synthetic so each kind shows.
[
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_f1574f5cbe01091a21ab6e88",
"type": "conditions.threshold",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "NWS: Coastal Flood Advisory until Thu, Oct 29, 1:00 PM PT.",
"url": "https://elsegundo.xyz/#conditions",
"source": {
"name": "National Weather Service active alerts",
"url": "https://api.weather.gov/alerts/active?point=33.9192,-118.4165",
"retrieved_at": null
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "National Weather Service",
"url": "https://api.weather.gov/alerts/active?point=33.9192,-118.4165"
}
]
},
"data": {
"kind": "nws_alert",
"event": "Coastal Flood Advisory",
"headline": "Coastal Flood Advisory issued October 27 at 6:54AM PDT until October 29 at 1:00PM PDT by NWS Los Angeles/Oxnard CA",
"ends": "2026-10-29T13:00:00-07:00",
"alert_url": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.37c31ccf7b9546160110964f4c4322180655466f.001.1"
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
},
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_9d9234b86ff9a343543a57ea",
"type": "conditions.threshold",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "Heat: NWS forecasts a high near 92°F for Saturday.",
"url": "https://elsegundo.xyz/#conditions",
"source": {
"name": "National Weather Service forecast (LOX/148,40)",
"url": "https://api.weather.gov/gridpoints/LOX/148,40/forecast",
"retrieved_at": null
},
"provenance": {
"label": "model",
"sources": [
{
"publisher": "National Weather Service",
"url": "https://api.weather.gov/gridpoints/LOX/148,40/forecast"
}
]
},
"data": {
"kind": "heat",
"date": "2026-10-31",
"period": "Saturday",
"forecast_high_f": 92,
"threshold_f": 90
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
},
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_24e2acb463b9fbc5224d4bd3",
"type": "conditions.threshold",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "Big surf: Santa Monica Bay buoy shows 2.1 m (6.9 ft) significant wave height.",
"url": "https://elsegundo.xyz/#conditions",
"source": {
"name": "NDBC station 46221, Santa Monica Bay (CDIP)",
"url": "https://www.ndbc.noaa.gov/data/realtime2/46221.txt",
"retrieved_at": null
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "NOAA National Data Buoy Center",
"url": "https://www.ndbc.noaa.gov/data/realtime2/46221.txt"
}
]
},
"data": {
"kind": "surf",
"station": "46221",
"wave_height_m": 2.1,
"wave_height_ft": 6.9,
"dominant_period_s": 15,
"observed_at": "2026-10-27T21:56:00Z",
"threshold_m": 1.8,
"note": "Offshore buoy wave height, not breaking surf at a given beach."
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
},
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_f0f31d2d70da1be170f00317",
"type": "conditions.threshold",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "Air quality: AQI 112 (Unhealthy for Sensitive Groups) near El Segundo.",
"url": "https://elsegundo.xyz/#conditions",
"source": {
"name": "AirNow current observations, ZIP 90245",
"url": "https://docs.airnowapi.org/CurrentObservationsByZip/query",
"retrieved_at": null
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "U.S. EPA AirNow",
"url": "https://docs.airnowapi.org/CurrentObservationsByZip/query"
}
]
},
"data": {
"kind": "aqi",
"aqi": 112,
"category": "Unhealthy for Sensitive Groups",
"observed_at": "2026-10-27 15:00 PST",
"threshold": 101
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
},
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_bf9d6d2eecb6594420aa9aaf",
"type": "conditions.threshold",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "Beach water: Manhattan Beach Pier drain went from A to C (Heal the Bay).",
"url": "https://elsegundo.xyz/#conditions",
"source": {
"name": "Heal the Bay Beach Report Card",
"url": "https://brc.healthebay.org/",
"retrieved_at": null
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "Heal the Bay",
"url": "https://brc.healthebay.org/"
}
]
},
"data": {
"kind": "water_grade",
"beach_id": 44,
"beach": "Manhattan Beach Pier drain",
"grade": "C",
"previous_grade": "A",
"grade_updated": "2026-10-23T00:00:00.000Z",
"direction": "worse"
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
}
]
record.changed 2 examples
Real records; the earlier state is edited so a correction and an addition show.
[
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_131cc84f5511a01a382a360a",
"type": "record.changed",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "Resource corrected: Parks & Facilities Directory.",
"url": "https://elsegundo.xyz/#directory",
"source": {
"name": "elsegundo.xyz resources",
"url": "https://elsegundo.xyz/resources.json",
"retrieved_at": null
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "record source",
"url": "https://www.elsegundorecparks.gov/parks-facilities/parks-facilities-directory"
},
{
"publisher": "elsegundo.xyz",
"url": "https://elsegundo.xyz/resources.json"
}
],
"record_source_date": "2026-10-24",
"verification": "Official or operator source reviewed; some City pages reviewed via their search index"
},
"data": {
"dataset": "resources",
"record_id": "parks-facilities-directory",
"change": "corrected",
"changes": [
{
"field": "url",
"before": "https://www.elsegundorecparks.gov/parks-facilities",
"after": "https://www.elsegundorecparks.gov/parks-facilities/parks-facilities-directory"
},
{
"field": "verified_date",
"before": "2026-10-10",
"after": "2026-10-24"
}
],
"record": {
"title": "Parks & Facilities Directory",
"category": "Play & parks",
"url": "https://www.elsegundorecparks.gov/parks-facilities/parks-facilities-directory",
"locality": "El Segundo",
"verified_date": "2026-10-24"
}
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
},
{
"schema": "elsegundo.xyz/webhooks/v1",
"id": "evt_803e1efd5623d312fca26b13",
"type": "record.changed",
"version": 1,
"created_at": "2026-10-27T15:20:00-07:00",
"summary": "Business added: Citizens Business Bank.",
"url": "https://elsegundo.xyz/businesses/",
"source": {
"name": "elsegundo.xyz businesses",
"url": "https://elsegundo.xyz/api/v1/businesses?limit=100&city=El%20Segundo",
"retrieved_at": null
},
"provenance": {
"label": "fact",
"sources": [
{
"publisher": "record source",
"url": "https://www.openstreetmap.org/way/439602995"
},
{
"publisher": "elsegundo.xyz",
"url": "https://elsegundo.xyz/api/v1/businesses?limit=100&city=El%20Segundo"
}
],
"record_source_date": "2026-10-24",
"verification": "Mapped listing; current operation not independently verified"
},
"data": {
"dataset": "businesses",
"record_id": "osm-way-439602995",
"change": "added",
"changes": null,
"record": {
"name": "Citizens Business Bank",
"category": "Local services",
"type": "bank",
"address": "275 Main Street, El Segundo, 90245",
"website": null,
"sourceUrl": "https://www.openstreetmap.org/way/439602995",
"sourceDate": "2026-10-24"
}
},
"not_official": "Not an official City of El Segundo page or service. Independent local guide; check the linked source before acting.",
"follow": "https://x.com/elsegundotoday"
}
]
Sending us events
Coming later.
Partner intake is coming later. This release does not publish an intake route. Send tips and corrections through Share a local update.
What’s on, what’s not
Plain status, sources and limits.
Webhook subscriptions and signed deliveries. Needs a signing key set on the server.
Partner intake is coming later. Coming later. Not routed in this release.
AQI threshold events. Needs an AirNow API key on the server.
Beach water grade events. Off until we confirm we may use Heal the Bay’s app data feed.
Email subscribers. Not in v1. Use a webhook URL or a feed.
Still missing: Hermosa Beach, Torrance, Hawthorne, Inglewood, LA City and LA County agendas are not wired yet; their public feeds weren’t found or answered with errors on Oct 27. Only Rec Park has live court data; other South Bay courts stay static. Transit alerts follow our /metro edits, not Metro’s live alert feed.
Kill switches.WEBHOOKS_LIVE=off: Stops the diff job, deliveries, subscribe and intake. Feeds keep serving the last log. WEBHOOKS_OFF_TYPES: Comma list of event types to stop, for example court.opened,conditions.threshold. PICKLEBALL_LIVE=off: Also stops court.opened.
Corrections. Spot a wrong event or a missing source? Send it through Share a local update.