Skip to main content

List Products

Retrieve products available for use in orders.

Full API Reference

Response examples are simplified. See the complete endpoint documentation for the full response schema.

List All Products

const response = await fetch("https://na1-prod.okcapsule.app/v2/products", {
headers: { Authorization: `Bearer ${access_token}` },
});

const { products } = await response.json();

Response:

{
"products": [
{
"id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"product_name": "Vitamin D3",
"active": true,
"serving_size": 1,
"product_assembly_type": "PRODUCT",
"okc_product": {
"product_family": "Supplement - Standard",
"supplement_category": "Vitamins"
}
}
]
}

Filter by Product Type

Exclude assemblies and only get individual products:

const params = new URLSearchParams({
"filter[product_assembly_type]": "PRODUCT",
});

const response = await fetch(
`https://na1-prod.okcapsule.app/v2/products?${params}`,
{
headers: { Authorization: `Bearer ${access_token}` },
}
);

const { products } = await response.json();

Filter Active Products Only

const params = new URLSearchParams({
"filter[active]": "true",
"filter[product_assembly_type]": "PRODUCT",
});

const response = await fetch(
`https://na1-prod.okcapsule.app/v2/products?${params}`,
{
headers: { Authorization: `Bearer ${access_token}` },
}
);

const { products } = await response.json();

Pagination

Use cursor-based pagination for large result sets:

async function getAllProducts(accessToken: string) {
const allProducts = [];
let cursor: string | undefined;

do {
const params = new URLSearchParams({
limit: "100",
"filter[product_assembly_type]": "PRODUCT",
});
if (cursor) params.set("cursor", cursor);

const response = await fetch(
`https://na1-prod.okcapsule.app/v2/products?${params}`,
{
headers: { Authorization: `Bearer ${accessToken}` },
}
);

const data = await response.json();
allProducts.push(...data.products);

// Get cursor from Link header or response
cursor = data.next_cursor;
} while (cursor);

return allProducts;
}

Filterable Fields

FieldDescription
product_assembly_typePRODUCT or ASSEMBLY
activetrue or false
product_nameProduct display name
client_custom_product_idYour internal product ID
client_skuYour SKU
client_upcYour UPC

Key Response Fields

FieldDescription
idProduct UUID (use in order contents)
product_nameDisplay name
activeWhether product can be ordered
serving_sizeDefault serving size
product_assembly_typePRODUCT (individual) or ASSEMBLY
okc_productOKC product details (category, family)

Get Single Product

const response = await fetch(
`https://na1-prod.okcapsule.app/v2/products/${productId}`,
{
headers: { Authorization: `Bearer ${access_token}` },
}
);

const { products: product } = await response.json();

Using Products in Orders

Once you have product IDs, use them in order creation:

const order = {
consumer: { first_name: "John", last_name: "Doe" },
shipping_address: {
address1: "742 Evergreen Terrace",
city: "Springfield",
country_name: "United States",
},
order_lines: [
{
pouches: [
{
contents: [
{
client_product_id: "d290f1ee-6c54-4b01-90e6-d701748f0851", // From /v2/products
serving_size: 2,
},
],
},
],
},
],
};

See Create Orders for complete order examples.