Core concepts
Limits
How often to call each endpoint, and how to pull large amounts of data without hammering the API.
Guidelines, not hard limits
We don't enforce these technically — no request of yours will be rejected for exceeding them. But we do monitor usage, and we will step in if we see misuse.
Recommended call frequency
| Endpoint | Recommended frequency | Why |
|---|---|---|
/Catalog/Products | Once a day | Product data is stable |
/Catalog/Products/Inventory | Every 5–15 minutes | Quantities change throughout the day |
/Catalog/Products/Prices | Once a day | Prices change occasionally |
/Catalog/Products/Images | Once a day | Images are refreshed once per day |
/Orders/Tracking | Every 15 minutes | Carrier updates arrive in batches |
Inventory is the only endpoint worth polling frequently. Everything else should be pulled on a daily schedule and cached — see Caching for suggested TTLs.
Fetching many SKUs
The most common cause of excessive call volume is fetching a large number of SKUs one page — or one SKU — at a time. Two habits keep your call count low:
Use a large page size, or no paging at all. A small page size multiplies your call count for no benefit. If you need the full catalog, ask for the full catalog.
Batch your SKUs into a single call. For /Catalog/Products/Inventory, either call it without filters to get everything at once, or pass multiple SKUs in one request, separated by commas.
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
// Good: one call for every SKU you care about
const res = await fetch(
`${baseUrl}/Catalog/Products/Inventory?skus=460181-S-001,460181-M-001,020056-07`,
{
headers: { Authorization: `ApiKey ${apiKey}`, language: 'en' },
},
)
if (!res.ok) {
throw new Error(`HTTP ${res.status}: ${res.statusText}`)
}
const inventory = await res.json()
// Avoid: one call per SKU
for (const sku of skus) {
await fetch(`${baseUrl}/Catalog/Products/Inventory?skus=${sku}`, {
headers: { Authorization: `ApiKey ${apiKey}`, language: 'en' },
})
}
Paging
When you do page through results, stay under 10 calls per minute.
If that pace makes a full sync too slow, the answer is a larger page size — not more calls. See Pagination for pageStartIndex, pageSize, and the X-Pagination response header.
What misuse looks like
Polling inventory for individual SKUs every few minutes, re-downloading the full catalog several times a day, or paging through a large result set as fast as your client can issue requests. Sustained patterns like these lead to throttling or account penalties.