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:

ParameterDescription
dateFromStarting date from which orders will be returned. Supported formats: 'mm/dd/yyyy' and 'yyyy-mm-dd'.
dateToEnding 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:

ParameterDescription
identifiersRequired. 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:

ParameterDescription
orderNumbersThe order numbers to track, separated by a comma , (for instance ORD-12345,ORD-12346).
cartIdsThe 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"
  }
]

Previous
Catalog