getProducts
Fetches all products from the store.Response
Array of products
Example: Product Grid
getProduct
Fetches a single product by ID or slug.Parameters
Product unique ID or URL slug
Fetch products, variants, and categories
const { data: products } = await shoppex.getProducts();
products.forEach(product => {
console.log(product.title, product.price);
});
Show Product object
shoppex.formatPrice() to display.uniqid and titleasync function renderProducts() {
const { data: products } = await shoppex.getProducts();
const container = document.getElementById('products');
container.innerHTML = products.map(product => `
<div class="product-card">
<img src="${product.images[0]?.url}" alt="${product.title}" style="border-radius: 8px;">
<h3>${product.title}</h3>
<span class="price">
${shoppex.formatPrice(product.price, product.currency)}
</span>
${product.stock < 10 ? '<span class="low-stock">Only ' + product.stock + ' left!</span>' : ''}
</div>
`).join('');
}
const { data: product } = await shoppex.getProduct('prod_abc123');
console.log(product.title);
console.log(product.variants);
async function renderProductDetail(productId) {
const { data: product } = await shoppex.getProduct(productId);
document.getElementById('product-detail').innerHTML = `
<div class="gallery">
${product.images.map(img => `<img src="${img.url}" style="border-radius: 8px;">`).join('')}
</div>
<div class="info">
<h1>${product.title}</h1>
<p class="price">${shoppex.formatPrice(product.price, product.currency)}</p>
<div class="description">${product.description}</div>
${product.variants?.length ? `
<select id="variant-select">
${product.variants.map(v => `
<option value="${v.id}">${v.title}</option>
`).join('')}
</select>
` : ''}
<button onclick="addToCart('${product.uniqid}')">Add to Cart</button>
</div>
`;
}
const { data: categories } = await shoppex.getCategories();
// Returns array of category uniqids (strings)
// ["cat_abc123", "cat_def456", "cat_ghi789"]
async function renderCategoryFilter() {
const { data: categories } = await shoppex.getCategories();
document.getElementById('category-filter').innerHTML = `
<select onchange="filterByCategory(this.value)">
<option value="">All Categories</option>
${categories.map(cat => `
<option value="${cat}">${cat}</option>
`).join('')}
</select>
`;
}
async function filterByCategory(category) {
const { data: products } = await shoppex.getProducts();
const filtered = category
? products.filter(p => p.categories?.includes(category))
: products;
renderProducts(filtered);
}
const product = await shoppex.getProduct('prod_abc');
product.variants.forEach(variant => {
console.log(variant.id, variant.title);
// "var_1", "Small"
// "var_2", "Medium"
// "var_3", "Large"
});
product.price_variants.forEach(pv => {
console.log(pv.id, pv.label, pv.price);
// "pv_1", "Basic", 9.99
// "pv_2", "Pro", 29.99
// "pv_3", "Enterprise", 99.99
});
product.addons.forEach(addon => {
console.log(addon.id, addon.name, addon.price, addon.required);
// "addon_1", "Priority Support", 5.00, false
// "addon_2", "Extended Warranty", 10.00, false
});
const { data, success, message } = await shoppex.getProduct('invalid-id');
if (!success) {
console.error('Product not found:', message);
// Show 404 page or redirect
}