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_XXXX

Every 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
EndpointScopeBehavior
GET /api/portal/v1/dealers/:dealerSlugDealer profile.
GET …/brandBrand assets and theme.
GET …/servicesServices offered.
GET …/locationsLocations.
GET …/promotionsActive promotions.
GET …/catalog-categoriesCatalog categories.
POST …/quote-requestsSubmit a quote request.
POST …/appointmentsBook a service appointment.
POST …/warranty-intakeStart a warranty intake.
POST …/fleet-inquiriesSubmit a fleet inquiry.
POST …/eventsRecord 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.