H2Home Developer Documentation

H2Home is a premium bottled water delivery subscription service in Atlanta, GA. This page documents the public API surface and the conventions software agents should follow when working with h2home.io.

Machine-readable resources

  • OpenAPI 3.0 spec Machine-readable reference for the H2Home API
  • llms.txt Agent guidance: what H2Home is for and how to call it
  • Sitemap All indexable URLs with lastmod dates

Authentication

Customer endpoints use session cookies issued by better-auth. Sign in at /signin (email/password or Google OAuth); the session cookie authenticates subsequent API requests. Unauthenticated requests to protected endpoints return 401.

Public endpoints

POST /api/contact

Send a message to the H2Home team. Rate limit: 5 requests/minute per IP.

curl -X POST https://www.h2home.io/api/contact \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada","email":"ada@example.com","subject":"Delivery zones","message":"Do you deliver to Decatur?"}'

POST /api/funnel

Record an onboarding funnel analytics event. Requires a step field. Rate limit: 60 requests/minute per IP.

curl -X POST https://www.h2home.io/api/funnel \
  -H "Content-Type: application/json" \
  -d '{"step":"select_water_brand","completed":true}'

Rate limiting

API responses include the standard rate limit headers RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (seconds until the window resets), and RateLimit-Policy (e.g. 5;w=60). When a limit is exceeded the API returns 429 with a Retry-After header — wait that many seconds before retrying.

Markdown content negotiation

Key pages (home, pricing, FAQ, about, contact, blog, and this page) serve markdown when requested with Accept: text/markdown; responses set Vary: Accept. Unknown paths return a real HTTP 404.

curl -H "Accept: text/markdown" https://www.h2home.io/pricing