| Method | Path | Source | Status | Time |
|---|---|---|---|---|
| GET | /v2/slugs/13418 | network | 200 | 30 ms |
| GET | /v2/products/1009?$expand=items,media,attributes,related,applications,fitment,tabs,documents,modifiers | network | 200 | 33 ms |
| GET | /slugs('13418') | asked twice | — | — |
| GET | /me | cache 30m | — | — |
| GET | /v2/items/10009/attributes | network | 204 | 26 ms |
| GET | /categories | cache 15m | — | — |
204 and 404 both mean “no rows” on this API — which of the two an endpoint uses is per-endpoint, and the client maps both to an empty result rather than an error. Collections come wrapped in an OData envelope and are capped at 100 rows per page.
Rows marked cache were answered from memory, and the time beside each is how long that kind of read is held; one marked asked twice is something this page had already read while rendering, so it cost nothing either way. Catalog reads are cached by rate of change rather than on one site-wide timer:
Pricing and stock are read live on every view — there is
no setting that caches them. That is why a warm product page still makes
exactly one request: everything else on it came from memory.
The catalog can also drop all of it at once rather than waiting for a
tier to lapse, by calling POST /hooks/cache when it
publishes.