Skip to content
Quality Stoves & Spas logo

API Documentation

Machine-readable discovery via /.well-known/api-catalog (RFC 9727); OpenAPI spec at /api/openapi.json.

POST /api/contact

Contact & Lead Capture

Submits a contact form as a sales lead. Accepts application/json or form-encoded bodies with firstName, lastName, email, phone, and an optional message; JSON posts may also carry a structured configuration object (for example, a Fireplace Builder design).

JSON posts receive { ok: true } on success; form-encoded (no-JS) posts receive a 303 redirect back to /contact. Errors return 400 (invalid input), 429 (rate limited to 5 submissions per minute per IP), or 502 (upstream failure).

POST /api/newsletter

Newsletter Signup

Subscribes an email address to the newsletter. JSON only, with a single required email field; subscriptions enter the same lead pipeline as the contact form.

Returns { ok: true } on success, 400 for an invalid request or email, 429 when rate limited (10 requests per minute per IP), or 502 on upstream failure.

GET /api/reviews

Live Google Reviews

Returns the current Google reviews for the business: fetchedAt (ISO timestamp), aggregate (average rating and review count), and the reviews array with reviewer, rating, date, text, and source URL.

Responses are served from a cache seeded at build time and refreshed in the background at most every 15 minutes, so the endpoint never returns an empty set. Rate limited to 30 requests per minute per IP.

Get a Quote Today