API reference
Orders
Order endpoints handle the complete order lifecycle, from creation to tracking. Supports both doorstep and season order fulfillment.
GET /Carts
Retrieve saved shopping carts created via the API or B2B portal.
Parameters
No query parameters required beyond standard headers.
Refresh Schedule
Data is updated in real-time.
Example
Request
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(`${baseUrl}/Carts`, {
headers: { Authorization: `ApiKey ${apiKey}`, language: 'en' },
})
const carts = await res.json()
Response
[
{
"CartId": 0,
"PONumber": "string",
"Note": "string",
"Items": [
{
"VariantNo": "string",
"Quantity": 0,
"Note": "string"
}
]
}
]
POST /Carts
Create a new shopping cart for customer continuation. The system tracks the cart origin for reference.
Payload
All fields marked with * are optional.
{
*"PONumber": "string",
*"Note": "string",
"Items": [{
"Sku": "020056-07",
"Quantity": 0,
*"Note": "string"
}]
}
Important
The sku variable could be either the HLC variant number, UPC, EAN or Vendor Number.
Example
Request
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(`${baseUrl}/Carts/Create`, {
method: 'POST',
headers: {
Authorization: `ApiKey ${apiKey}`,
language: 'en',
'Content-Type': 'application/json',
},
body: JSON.stringify({
cartName: 'Spring 2026 Order',
items: [
{ variantNo: '020056-07', quantity: 5 },
{ variantNo: '030012-M', quantity: 3 },
],
}),
})
const cart = await res.json()
Response
{
"CartId": 0
}
POST /Orders/Prices
Retrieve order pricing for validation before order submission.
Important
Originally introduced in API version 4.0, now available across all API versions.
Payload
{
"OrderLines": [
{
"Sku": "string",
"Quantity": 0
}
]
}
**Example**
#### Request
```js
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(`${baseUrl}/Orders/Prices`, {
method: 'POST',
headers: {
Authorization: `ApiKey ${apiKey}`,
language: 'en',
'Content-Type': 'application/json',
},
body: JSON.stringify({
OrderLines: [
{
Sku: '500027-01',
Quantity: 1,
},
{
Sku: '620185-05',
Quantity: 2,
},
{
Sku: '030152-04',
Quantity: 10,
},
],
}),
})
const order = await res.json()
Response
{
"ResponseLines": [
{
"LineTotal": 0,
"ItemPrice": 0,
"OriginalPrice": 0,
"Sku": "string",
"Quantity": 0
}
],
"OrderSubTotal": 0
}
GET /Orders
Retrieve order history with line item details.
Parameters
The following request parameters are available:
| Parameter | Description |
|---|---|
| dateFrom | Starting date from which orders will be returned. Supported formats: 'mm/dd/yyyy' and 'yyyy-mm-dd'. |
| dateTo | Ending date up to which orders will be returned. Supported formats: 'mm/dd/yyyy' and 'yyyy-mm-dd' |
Refresh Schedule
Data is refreshed 4 times daily.
Example
Request
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(
`${baseUrl}/Orders?dateFrom=2026-01-01&dateTo=2026-01-31`,
{ headers: { Authorization: `ApiKey ${apiKey}`, language: 'en' } },
)
const orders = await res.json()
Response
[{
"OrderId": 0,
"AccountNo": "string",
"OrderNumber": "string",
"OrderDate": "2017-03-21T16:39:36.950Z",
"OrderDateText": "string",
"OrderDateHourText": "string",
"StoreName": "string",
"ShippingAddress": {
"Street": "string",
"City": "string",
"State": "string",
"PostalCode": "string"
},
"CartName": "string",
"PoNumber": "string",
"LanguageId": "string",
"OrderType": "string",
"OrderStatus": "string" (Processing, Invoiced),
"SubTotal": 0,
"PaymentTerms": "string",
"PaymentMethod": "string",
"SubmittedBy": "string",
"NumShipments": 0,
"OrderLines": [{
"LineId": 0,
"VariantNo": "string",
"Description": "string",
"Qty": 0,
"NetPrice": 0,
"DisplayNetPrice": "string",
"Note": "string",
"NetAmount": 0,
"DisplayNetAmount": "string",
"KitVariantNo": "string",
"KitSeqNo": "string",
"LabelPrice": 0,
"LabelPriceFormatted": "string",
"DealerBarcode": "string"
}]
}]
POST /Orders/Create/FulFillment
Create fulfillment orders.
Important
This endpoint is deprecated but remains functional for v3.0 compatibility. Use /Orders/FulFillment for v4.0+ implementations. Request body schemas differ between versions.
Parameters
No query parameters required. Request body contains order details.
Payload
All fields marked with * are optional.
{
*"OrderOptions":{
"PONumber": "string",
"Note": "string"
},
"ShippingOptions":{
*"CarrierAccountNumber": "string",
"SignatureRequired": false|true,
*"DocumentLanguage": "en|fr",
"DeliveryAddress":{
"ContactName": "string",
"Street": "string",
"City": "string",
"State": "string",
"ZipCode": "string",
"CountryCode": "ca|us",
*"PrimaryPhoneNumber": "phone"
}
},
"ReturnOptions":{
*"ReturnAddressID": 1
},
"Items":[{
"Sku": "020056-07",
"Quantity": 0,
*"Note": "string"
}]
}
- If ReturnAddressID is not sent, the service will take by default the address that is set on the My Account > Doorstep Delivery preferences page. Otherwise, the ID should be retrieved by calling the Account/Addresses function, and taking the ID of the address of Type Shipping that you want as a return address.
- The State of the DeliveryAddress must be the abbreviated (2 letters) code. Please refer to the State Codes table below.
- Please be advised that **the Note in the OrderOptions is the equivalent of the Special Processing Instructions ** in the cart when submitting an order through the website. This means that one of our team members will be required to personally review this order. This may cause a delay in processing, and ultimately, in delivery.
Example
Request
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(`${baseUrl}/Orders/Create/FulFillment`, {
method: 'POST',
headers: {
Authorization: `ApiKey ${apiKey}`,
language: 'en',
'Content-Type': 'application/json',
},
body: JSON.stringify({
items: [{ variantNo: '020056-07', quantity: 2 }],
shippingAddress: {
name: 'John Doe',
address1: '123 Main St',
city: 'Springfield',
state: 'IL',
zip: '62701',
},
}),
})
const order = await res.json()
Response
{
"CartId": 123456
}
POST /Orders/FulFillment
Create fulfillment orders.
Important
Available in API version 4.0 and later.
Parameters
No query parameters required. Request body contains order details.
Payload
{
"ShippingAddress": {
"Name": "string",
"Street": "string",
"City": "string",
"StateCode": "None",
"ZipCode": "string",
"CountryCode": "None",
"PrimaryPhoneNumber": "string",
"IsResidential": true
},
"Note": "string",
"PurchaseOrderNumber": "string",
"SignatureRequired": true,
"DocumentLanguage": "string",
"OrderLines": [
{
"Sku": "string",
"Quantity": 0,
"Note": "string",
"Warehouse": "string"
}
]
}
- If ReturnAddressID is not sent, the service will take by default the address that is set on the My Account > Doorstep Delivery preferences page. Otherwise, the ID should be retrieved by calling the Account/Addresses function, and taking the ID of the address of Type Shipping that you want as a return address.
- The State of the DeliveryAddress must be the abbreviated (2 letters) code. Please refer to the State Codes table below.
- Please be advised that **the Note in the OrderOptions is the equivalent of the Special Processing Instructions ** in the cart when submitting an order through the website. This means that one of our team members will be required to personally review this order. This may cause a delay in processing, and ultimately, in delivery.
Example
Request
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(`${baseUrl}/Orders/Create/FulFillment`, {
method: 'POST',
headers: {
Authorization: `ApiKey ${apiKey}`,
language: 'en',
'Content-Type': 'application/json',
},
body: JSON.stringify({
DocumentLanguage: 'en',
OrderLines: [
{
Sku: '010828-01-26',
Quantity: 1,
Note: 'Demo',
Warehouse: '',
},
],
PurchaseOrderNumber: 'PO#1000',
ShippingAddress: {
Name: 'John Doe',
Street: '1000 BestBike East',
City: 'North Vancouver',
StateCode: 'BC',
ZipCode: 'V7L 1A4',
CountryCode: 'CAN',
PrimaryPhoneNumber: '+16466756646',
isResidential: true,
},
SignatureRequired: 'true',
Note: 'THIS IS A TEST',
}),
})
const order = await res.json()
Response
{
"id": "string",
"Status": "string",
"ContactEmailAddress": "string",
"PurchaseOrderNumber": "string"
}
POST /Orders/Season
Create season orders.
Important
Originally introduced in API version 4.0, now available across all API versions.
Parameters
No query parameters required. Request body contains order details.
Payload
{
"DeliveryLocationId": 0,
"PurchaseOrderNumber": "string",
"OrderLines": [
{
"Sku": "string",
"Quantity": 0,
"Note": "string",
"Warehouse": "string"
}
],
"Note": "string"
}
**Example**
#### Request
```js
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(`${baseUrl}/Orders/Create/FulFillment`, {
method: 'POST',
headers: {
Authorization: `ApiKey ${apiKey}`,
language: 'en',
'Content-Type': 'application/json',
},
body: JSON.stringify({
DeliveryLocationId: 1,
Note: '',
PurchaseOrderNumber: 'PO#10000',
OrderLines: [
{
Sku: '751417-01',
Quantity: 1,
Note: 'Demo',
Warehouse: '',
},
{
Sku: '891049-01',
Quantity: 1,
Note: 'Demo',
Warehouse: '',
},
],
}),
})
const order = await res.json()
Response
{
"id": "string",
"Status": "string",
"ContactEmailAddress": "string",
"PurchaseOrderNumber": "string"
}
GET /Orders/Packages
Retrieve the packages of your orders, with their tracking numbers and items.
Parameters
The following request parameters are available:
| Parameter | Description |
|---|---|
| identifiers | Required. Order numbers, purchase order numbers or tracking numbers, separated by a comma , (for instance ORD-12345,PO#1000). |
Refresh Schedule
Data is updated every 15 minutes.
Example
Request
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(`${baseUrl}/Orders/Packages?identifiers=ORD-12345`, {
headers: { Authorization: `ApiKey ${apiKey}`, language: 'en' },
})
const tracking = await res.json()
Response
[
{
"SalesId": "string",
"PoNumber": "string",
"OrderShippingStatus": "string",
"Packages": [
{
"PackageId": "string",
"TrackingNumber": "string",
"Carrier": "string",
"Items": [
{
"VariantNo": "string",
"Qty": 0
}
],
"ContainerTypeCode": "string"
}
],
"UnshippedQuantities": [
{
"VariantNo": "string",
"Qty": 0
}
]
}
]
GET /Orders/Tracking
Retrieve shipment tracking information for your orders.
Parameters
The following request parameters are available:
| Parameter | Description |
|---|---|
| orderNumbers | The order numbers to track, separated by a comma , (for instance ORD-12345,ORD-12346). |
| cartIds | The cart ids of the orders to track, separated by a comma , (for instance 12345678,12345689). |
At least one of orderNumbers or cartIds is required (error ORD0017 otherwise). When nothing is found, the response is 204 No Content.
Refresh Schedule
Data is updated every 15 minutes.
Example
Request
const baseUrl = 'https://api.hlc.bike/us/v4.1'
const apiKey = process.env.HLC_API_KEY
const res = await fetch(`${baseUrl}/Orders/Tracking?orderNumbers=ORD-12345,ORD-12346`, {
headers: { Authorization: `ApiKey ${apiKey}`, language: 'en' },
})
const tracking = await res.json()
Response
[
{
"OrderNumber": "string",
"CartId": "string",
"Carrier": "string",
"BoxNumber": "string",
"TrackingNumber": "string",
"TrakingUrl": "string",
"PurchaseOrderNumber": "string"
}
]