Dealer portal
Headless intake for dealer websites.
A customer-facing API and a set of drop-in widgets a dealer can paste into any website. Auth is a restricted, browser-safe key sent as X-Portal-Key — not a Bearer header.
Authentication
Request header
X-Portal-Key: pk_portal_dealer_XXXXEvery call validates the dealer, module enablement, an Origin allowlist, and per-key plus per-IP rate limits.
What a portal key cannot reach
Nothing internal is reachable with a portal key — no inventory, cost, customer records, or pricing/approval logic. Writes are intake only, never approval.
Endpoints
Base path
/api/portal/v1/dealers/:dealerSlug| Endpoint | Scope | Behavior |
|---|---|---|
| GET /api/portal/v1/dealers/:dealerSlug | — | Dealer profile. |
| GET …/brand | — | Brand assets and theme. |
| GET …/services | — | Services offered. |
| GET …/locations | — | Locations. |
| GET …/promotions | — | Active promotions. |
| GET …/catalog-categories | — | Catalog categories. |
| POST …/quote-requests | — | Submit a quote request. |
| POST …/appointments | — | Book a service appointment. |
| POST …/warranty-intake | — | Start a warranty intake. |
| POST …/fleet-inquiries | — | Submit a fleet inquiry. |
| POST …/events | — | Record a customer-side event. |
Drop-in widgets
Four hosted scripts: /embed/quote.js, /embed/booking.js, /embed/warranty.js, and /embed/fleet.js.
HTML
<div data-tread-ready-widget="quote"
data-dealer-slug="northwest-ag-tire"
data-portal-key="pk_portal_dealer_XXXX"></div>
<script src="https://middleware.treadready.com/embed/quote.js"></script>JS / React SDK
A dependency-free SDK is available for teams that want to control the markup: createTreadReadyPortalClient, TreadReadyQuoteForm, TreadReadyBookingForm, TreadReadyWarrantyStart, TreadReadyFleetInquiry, and TreadReadyDealerServices.
