Reference

Storefront API

The app proxy endpoints your theme can call.

The storefront widgets talk to the app through Shopify's app proxy. Requests leave from your own domain and arrive HMAC-signed, so these endpoints are available to your theme's own JavaScript too.

Base path on your store:

text
https://<your-store>/apps/wysync/api/...
Read-only, rate-limited, no auth of your own

The proxy is signed by Shopify. There is no API key to manage and no way to authenticate as a specific customer — these endpoints serve catalog and fitment data only, never customer data.

Vehicle cascade#

text
GET /apps/wysync/api/ymms/years
→ { "years": [2026, 2025, 2024, ...] }

GET /apps/wysync/api/ymms/makes?year=2024
→ { "makes": ["Acura", "Alfa Romeo", "Audi", ...] }

GET /apps/wysync/api/ymms/models?year=2024&make=Ford
→ { "models": ["Bronco", "Escape", "F-150", ...] }

GET /apps/wysync/api/ymms/submodels?year=2024&make=Ford&model=F-150
→ { "submodels": ["Lariat", "Platinum", "Raptor", "XL", "XLT"] }

GET /apps/wysync/api/ymms/resolve?year=2024&make=Ford&model=F-150&submodel=Lariat
→ { "vehicle_id": 36968, "label": "2024 Ford F-150 Lariat" }

Products in a collection#

text
GET /apps/wysync/api/collections/:handle/products
      ?vehicle_id=36968
      &page=1&per_page=24
      &sort=best_match
      &filters[spec_num_lift_height][min]=4
      &filters[stock]=in_stock

Returns products, the total, facet counts for the current result set, and whether the fitment filter was applied. sort accepts best_match, price_asc, price_desc, title_asc.

Search and suggestions#

text
GET /apps/wysync/api/search?q=f150+lift+kit&vehicle_id=36968
GET /apps/wysync/api/suggest?q=f15

Search responses include a detected_vehicle when one was found in the query, and a rescue object when the zero-result ladder substituted results.

Fitment for one product#

text
GET /apps/wysync/api/products/:id/fits?vehicle_id=36968
→ {
    "verdict": "fits",
    "tier": "stock",
    "sources": ["vendor_feed", "editor"],
    "note": "Not with factory tow package",
    "message": "This kit fits your 2024 Ford F-150 Lariat"
  }

verdict is one of fits, does_not_fit, unconfirmed. tier is present only when spec matching produced the answer.

Vehicle specs#

text
GET /apps/wysync/api/vehicles/:id/specs

Returns the vehicle's wheel specs — bolt pattern, hub bore and envelopes. Requires the Fitment Data add-on — without it, this endpoint returns 404, because those specs are the paid entitlement.

Rate limiting and caching#

Endpoints are rate-limited per shop and cached in Redis. If you build something custom on top, cache client-side too and avoid firing a request per keystroke without debouncing — suggest is already debounced by our own widget.

These endpoints are a convenience, not a contract

They exist so your theme can do something we didn't anticipate. Shapes may gain fields; they won't lose them without a note in the changelog. If you're depending on one heavily, tell us so we know it matters.

Still stuck?

Support is answered by the people who wrote this code — not a ticket queue.

Contact support