Dev experience · Full quickstart composition

Ship the SDK — full quickstart

Every dev-experience primitive assembled into the quickstart flow used in the Mufflermen developer portal — install, five-step walk-through, auth card, multi-language request example, cursor pagination, webhook payload, version selector, and a changelog footer.

Production answer

Ship the SDK — full quickstart is a reusable Oak Flats Muffler Men UI primitive with documented states, accessibility expectations, theme behavior, and implementation evidence.

Primary CTAReview Ship the SDK — full quickstart states
Generative search brief

Ship the SDK — full quickstart: Every dev-experience primitive assembled into the quickstart flow used in the Mufflermen developer portal — install, five-step walk-through, auth card, multi-language request example, cursor pagination, webhook payload, version selector, and a changelog footer.

InstallInstall the Mufflermen SDK@mufflermen/sdk
pnpm add @mufflermen/sdk
Step · TypeScript

Authenticate the SDK

Create one client per workshop, scoped by your live API key. Server-side only — never ship the key to the browser.

TYPESCRIPTlib/muff.ts
import { Mufflermen } from "@mufflermen/sdk" export const muff = new Mufflermen({  workshopId: "wsh_oak_flats",  apiKey: process.env.MUFFLERMEN_API_KEY,})
Step · TypeScript

Create your first instant quote

quotes.create resolves bay availability for the requested bay and returns a draft quote with line items, totals (AUD), and an expiry.

TYPESCRIPTscripts/first-quote.ts
const quote = await muff.quotes.create({  vehicleId: "veh_2026_ford_ranger_xl",  partIds: ["part_extractor_xforce_4cyl"],  bayId: "bay_oak_flats_03",})
Step · TypeScript

Look up parts

parts.lookup is a vector search over the Mufflermen parts catalogue. Pass a freeform query — the SDK handles embeddings.

TYPESCRIPTscripts/parts-lookup.ts
const parts = await muff.parts.lookup({  query: "xforce 4-cylinder extractor",  limit: 10,})
Step · TypeScript

List bookings

bookings.list returns the bookings for one bay across a date range. Responses are cursor-paginated — see step 6 for the cursor flow.

TYPESCRIPTscripts/bookings.ts
const bookings = await muff.bookings.list({  bayId: "bay_oak_flats_03",  from: "2026-05-21",  to: "2026-05-28",})
Step · TypeScript

Subscribe to webhooks

Verify every payload using the Mufflermen-Signature header before acting on it. The SDK ships a verifier helper.

TYPESCRIPTapp/webhooks/route.ts
import { verifySignature } from "@mufflermen/sdk/webhooks" export async function POST(req: Request) {  const raw = await req.text()  const sig = req.headers.get("mufflermen-signature") ?? ""  verifySignature(raw, sig, process.env.MUFFLERMEN_WEBHOOK_SECRET)   const event = JSON.parse(raw)  if (event.type === "quote.created") {    await notifyService(event.data)  }   return Response.json({ received: true })}
Authentication

Bearer token

Recommended for server-side workshop integrations.

Open in Postman
TYPESCRIPT
const muff = new Mufflermen({  apiKey: process.env.MUFFLERMEN_API_KEY,})
Code sampleCreate the quote — same call, three languages
TYPESCRIPTquote.ts
const quote = await muff.quotes.create({  vehicleId: "veh_2026_ford_ranger_xl",  partIds: ["part_extractor_xforce_4cyl"],  bayId: "bay_oak_flats_03",})
Pagination

Cursor-based — three calls

First request returns a next_cursor. Forward the cursor on the next call to receive the following page until next_cursor is null.

  1. First pageGET /v1/bookings?limit=20
    CURL
    curl https://api.mufflermen.com/v1/bookings?limit=20 \  -H "Authorization: Bearer $MUFFLERMEN_API_KEY"
  2. Response · next_cursor200 OK
    JSON
    {  "data": [    { "id": "bkg_01HQ8E...", "bay_id": "bay_oak_flats_03" },    { "id": "bkg_01HQ8F...", "bay_id": "bay_oak_flats_01" }  ],  "page": { "limit": 20, "next_cursor": "cur_b6f9c4d0", "has_more": true }}
  3. Second pageGET /v1/bookings?cursor=...
    CURL
    curl https://api.mufflermen.com/v1/bookings?limit=20&cursor=cur_b6f9c4d0 \  -H "Authorization: Bearer $MUFFLERMEN_API_KEY"
quote.created
Version2026-05-01Sent2026-05-21T08:42:11Z
Mufflermen-Signaturet=1716280931,v1=8f2e9a4d3c6b1f7e0c5a2b8d4e6f9c1a3b5d7e8f2a4c6b8d0e2f4a6c8b1d3f5e
JSON
{  "id": "evt_01HQ8FK4ZJM7CVS3Y9VTBP2NTR",  "type": "quote.created",  "created": "2026-05-21T08:42:11Z",  "workshop_id": "wsh_oak_flats",  "data": {    "quote_id": "qte_2026_xforce_extractor_001",    "bay_id": "bay_oak_flats_03",    "total_aud": 1842.50  }}
Recent releases

@mufflermen/sdk changelog

v3.4.02026-05-21
AddedChanged

Add bay-availability streaming + retag quote.created events with bay_id.

Drop-in upgrade — existing webhook handlers continue receiving JSON.

v3.3.22026-05-05
Fixed

Resolve Idempotency-Key collision when retrying quotes.create within 1s.

v3.3.02026-04-18
AddedDeprecated

Add parts.lookup vector search. Deprecate parts.search — removal in v4.0.