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
- TypeScript
- cURL
const response = await fetch("https://na1-prod.okcapsule.app/v2/products", {
headers: { Authorization: `Bearer ${access_token}` },
});
const { products } = await response.json();
curl -X GET "https://na1-prod.okcapsule.app/v2/products" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
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:
- TypeScript
- cURL
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();
curl -X GET "https://na1-prod.okcapsule.app/v2/products?filter[product_assembly_type]=PRODUCT" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Filter Active Products Only
- TypeScript
- cURL
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();
curl -X GET "https://na1-prod.okcapsule.app/v2/products?filter[active]=true&filter[product_assembly_type]=PRODUCT" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Pagination
Use cursor-based pagination for large result sets:
- TypeScript
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
| Field | Description |
|---|---|
product_assembly_type | PRODUCT or ASSEMBLY |
active | true or false |
product_name | Product display name |
client_custom_product_id | Your internal product ID |
client_sku | Your SKU |
client_upc | Your UPC |
Key Response Fields
| Field | Description |
|---|---|
id | Product UUID (use in order contents) |
product_name | Display name |
active | Whether product can be ordered |
serving_size | Default serving size |
product_assembly_type | PRODUCT (individual) or ASSEMBLY |
okc_product | OKC product details (category, family) |
Get Single Product
- TypeScript
- cURL
const response = await fetch(
`https://na1-prod.okcapsule.app/v2/products/${productId}`,
{
headers: { Authorization: `Bearer ${access_token}` },
}
);
const { products: product } = await response.json();
curl -X GET "https://na1-prod.okcapsule.app/v2/products/{id}" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
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.