{"openapi":"3.1.0","info":{"title":"Jackman Wheels Distributor API","description":"Live product, pricing and inventory feed for Jackman Wheels dealers and distributors. Every response reflects the catalog as of this second: no more emailed spreadsheets going stale. Authenticate with your dealer API key via the X-API-Key header, or mount a Beadlock session at /v1/beadlock/mount for a signed, expiring token. Rate limit: 120 calls per minute per key. Search the catalog by keyword at /v1/search or ask in plain English at /v1/search/ask.\n\n**Errors.** Every error body is `{\"detail\": <message>, \"code\": <code>}` (validation adds `errors`, the field list) and every response carries `X-Request-Id` to quote to Jackman Wheels. Codes:\n\n- `invalid_key`: missing, unknown, revoked or expired API key (401)\n- `session_expired`: the Beadlock session expired or its key was revoked; mount again (401)\n- `account_paused`: Jackman Wheels paused this dealer account (403)\n- `dealer_only`: a control room session tried a dealer only action (400 or 403)\n- `rate_limited`: over the per minute limit for this key; honor Retry-After (429)\n- `throttled`: too many failed attempts from this address; wait a minute (429)\n- `validation`: a parameter or body field is missing or out of range (400, 413 or 422)\n- `unknown_part`: no wheel with that part number (404)\n- `not_found`: nothing at that address (404)\n- `unpriced`: the wheel has no dealer price yet; contact Jackman Wheels (409)\n- `insufficient_stock`: not enough stock for the order (409)\n- `orders_disabled`: ordering through the API is switched off; order through Jackman Wheels (503)\n- `stale_preview`: control room: the catalog changed since an import preview; preview again (409)\n- `internal`: something failed on our side; quote the request id (500)","version":"0.2.0"},"paths":{"/v1/status":{"get":{"tags":["discovery"],"summary":"Service Status","description":"Public heartbeat: catalog size, latest event number, and how many\nstorefronts hold a live connection right now.","operationId":"service_status_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/capabilities":{"get":{"tags":["discovery"],"summary":"Capabilities","description":"Plain-English answer to the first question every AI asks: what can you do for me?","operationId":"capabilities_v1_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/beadlock/mount":{"post":{"tags":["security"],"summary":"Beadlock Mount","description":"Mount a Beadlock session: exchange your API key for a signed session\ntoken that expires in 15 minutes. Send it as Authorization: Bearer.\nLike the beadlock ring on a wheel, the token bolts your session to your\naccount: signed, expiring, and revocable by Jackman at any time.","operationId":"beadlock_mount_v1_beadlock_mount_post","parameters":[{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/login":{"post":{"tags":["dealer portal"],"summary":"Portal Login","description":"Dealer portal sign in: paste your API key once, receive a Beadlock\nsession in an HttpOnly cookie. The pages and the live stream then ride\nthe cookie; the key never appears in a URL.","operationId":"portal_login_portal_login_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/portal/logout":{"post":{"tags":["dealer portal"],"summary":"Portal Logout","operationId":"portal_logout_portal_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/account":{"get":{"tags":["account"],"summary":"My Account","description":"Your own account: usage metering, security activity, key and limits.\nStrictly tenant scoped: you see yours, never another distributor's.","operationId":"my_account_v1_account_get","parameters":[{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/security/posture":{"get":{"tags":["security"],"summary":"Security Posture","description":"Live security posture for the /security trust page. Aggregates only:\nno keys, no addresses, no per-distributor detail. Public on purpose,\nlike a status page.","operationId":"security_posture_v1_security_posture_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/search":{"get":{"tags":["search"],"summary":"Search","description":"Classical keyword search, ranked. Part number matches rank highest,\nthen model, bolt pattern, size and finish, then names and descriptions.\nEvery query is logged so Jackman can see what distributors look for.","operationId":"search_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Keywords: part numbers, model lines, finishes, sizes, bolt patterns","title":"Q"},"description":"Keywords: part numbers, model lines, finishes, sizes, bolt patterns"},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search/ask":{"get":{"tags":["search"],"summary":"Search Ask","description":"Plain language search. Understands sizes, bolt patterns and lug counts,\nfinishes, model lines, common trucks, price limits, in stock, and\nsuperlatives like lightest or strongest. Returns how the question was\nunderstood, the matching wheels, and a plain English answer. The same\nbrain backs the storefront Ask box and the MCP ask_catalog tool.\nVehicle names are answered only while Jackman has the fitment switch on,\nand always with a note to confirm the application with Jackman.","operationId":"search_ask_v1_search_ask_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"A plain English question, like: 17 inch bronze wheels for a Silverado under $400","title":"Q"},"description":"A plain English question, like: 17 inch bronze wheels for a Silverado under $400"},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/products":{"get":{"tags":["catalog"],"summary":"List Products","operationId":"list_products_v1_products_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text search over name and part number","title":"Q"},"description":"Free-text search over name and part number"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"diameter","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Wheel diameter in inches, e.g. 17","title":"Diameter"},"description":"Wheel diameter in inches, e.g. 17"},{"name":"bolt_pattern","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Either designation works: 6x5.5 or 6x139.7","title":"Bolt Pattern"},"description":"Either designation works: 6x5.5 or 6x139.7"},{"name":"finish","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finish"}},{"name":"in_stock","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"In Stock"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1 or more","default":1,"title":"Page"},"description":"1 or more"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"1 to 200 rows per page","default":50,"title":"Per Page"},"description":"1 to 200 rows per page"},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/products/{part_number}":{"get":{"tags":["catalog"],"summary":"Get Product","operationId":"get_product_v1_products__part_number__get","parameters":[{"name":"part_number","in":"path","required":true,"schema":{"type":"string","title":"Part Number"}},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/inventory":{"get":{"tags":["catalog"],"summary":"Inventory","description":"Compact stock and price list. Pass since_seq from your last sync to get only deltas.","operationId":"inventory_v1_inventory_get","parameters":[{"name":"since_seq","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Return only parts changed after this event sequence number","title":"Since Seq"},"description":"Return only parts changed after this event sequence number"},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/feed.csv":{"get":{"tags":["feeds"],"summary":"Feed Csv","description":"The spreadsheet Jackman used to email, generated fresh on every request.\nColumn headers are remapped to each distributor's own naming (their SKU is our part_number).","operationId":"feed_csv_v1_feed_csv_get","parameters":[{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/feed.xlsx":{"get":{"tags":["feeds"],"summary":"Feed Xlsx","description":"Same feed as native Excel, styled, with a freshness stamp.","operationId":"feed_xlsx_v1_feed_xlsx_get","parameters":[{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/products/{part_number}/spec.pdf":{"get":{"tags":["catalog"],"summary":"Spec Pdf","description":"A print ready, branded spec sheet for one wheel, generated from live\ndata the moment you ask. Change a price and pull it again: the sheet\nmoves with the catalog.","operationId":"spec_pdf_v1_products__part_number__spec_pdf_get","parameters":[{"name":"part_number","in":"path","required":true,"schema":{"type":"string","title":"Part Number"}},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/orders":{"post":{"tags":["orders"],"summary":"Place Order","description":"Place a purchase order. Switched off until the order system ships\n(503 `orders_disabled`); order through Jackman Wheels directly meanwhile.\n`GET /v1/orders` keeps showing any order history.","operationId":"place_order_v1_orders_post","parameters":[{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["orders"],"summary":"My Orders","operationId":"my_orders_v1_orders_get","parameters":[{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stream":{"get":{"tags":["live"],"summary":"Stream","description":"Server-Sent Events stream of price, stock and order events.","operationId":"stream_v1_stream_get","parameters":[{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"API key (discouraged: prefer the X-API-Key header)","title":"Key"},"description":"API key (discouraged: prefer the X-API-Key header)"},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)","title":"Token"},"description":"Beadlock session token (discouraged: prefer Authorization: Bearer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/reveal":{"post":{"tags":["dealer portal"],"summary":"Portal Reveal","description":"Show a newly issued key exactly once from the onboarding link.","operationId":"portal_reveal_portal_reveal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevealIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"OrderIn":{"properties":{"po_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Po Number"},"items":{"items":{"$ref":"#/components/schemas/OrderItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"OrderIn"},"OrderItem":{"properties":{"part_number":{"type":"string","title":"Part Number"},"qty":{"type":"integer","exclusiveMinimum":0.0,"title":"Qty"}},"type":"object","required":["part_number","qty"],"title":"OrderItem"},"RevealIn":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"RevealIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}