{"openapi":"3.1.0","info":{"title":"Oh My Sod public API","version":"0.3.57","description":"Public JSON endpoints for Oh My Sod (Raleigh, NC sod, trees, and stump services). Lead-submission POSTs may require Turnstile when configured. Admin routes require a bearer token and are not listed here.","contact":{"name":"Oh My Sod","url":"https://ohmysod.pro","email":"help@ohmysod.pro"}},"servers":[{"url":"https://ohmysod.pro"}],"paths":{"/api/health":{"get":{"operationId":"getHealth","summary":"Liveness / version probe","responses":{"200":{"description":"Service is up","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/nursery-inventory":{"get":{"operationId":"getNurseryInventory","summary":"Public nursery / tree inventory (no wholesale pricing)","responses":{"200":{"description":"Inventory payload","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/big-box-sod-prices":{"get":{"operationId":"getBigBoxSodPrices","summary":"Big-box sod price comparison data","responses":{"200":{"description":"Price comparison JSON","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/maps-public-config":{"get":{"operationId":"getMapsPublicConfig","summary":"Browser Maps / Turnstile public keys (no secrets)","responses":{"200":{"description":"Public client configuration","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/sod-stack-leaderboard":{"get":{"operationId":"getSodStackLeaderboard","summary":"Sod Stack game leaderboard","responses":{"200":{"description":"Leaderboard rows","content":{"application/json":{"schema":{"type":"object"}}}}}},"post":{"operationId":"postSodStackScore","summary":"Submit a Sod Stack score","responses":{"200":{"description":"Accepted"},"400":{"description":"Invalid payload"}}}},"/api/calendar/new-sod.ics":{"get":{"operationId":"getNewSodCalendar","summary":"ICS calendar for new-sod care reminders","responses":{"200":{"description":"text/calendar"}}}},"/api/contact":{"post":{"operationId":"postContactLead","summary":"Contact / call-request lead","responses":{"200":{"description":"Lead accepted"},"400":{"description":"Validation or captcha failure"}}}},"/api/sod-order":{"post":{"operationId":"postSodOrderLead","summary":"Sod delivery / install order lead","responses":{"200":{"description":"Lead accepted"},"400":{"description":"Validation or captcha failure"}}}},"/api/tree-order":{"post":{"operationId":"postTreeOrderLead","summary":"Tree / plant order lead","responses":{"200":{"description":"Lead accepted"},"400":{"description":"Validation or captcha failure"}}}},"/api/install-estimate":{"post":{"operationId":"postInstallEstimateLead","summary":"Sod install estimate lead","responses":{"200":{"description":"Lead accepted"},"400":{"description":"Validation or captcha failure"}}}},"/api/stump-estimate":{"post":{"operationId":"postStumpEstimateLead","summary":"Stump grinding estimate lead","responses":{"200":{"description":"Lead accepted"},"400":{"description":"Validation or captcha failure"}}}},"/api/hub-question":{"post":{"operationId":"postHubQuestion","summary":"Info Hub question lead","responses":{"200":{"description":"Lead accepted"},"400":{"description":"Validation or captcha failure"}}}},"/api/verify-address":{"post":{"operationId":"postVerifyAddress","summary":"Address validation helper used by estimate flows","responses":{"200":{"description":"Verification result"}}}}}}