Documentation Index
Fetch the complete documentation index at: https://docs.shoppex.io/llms.txt
Use this file to discover all available pages before exploring further.
Reviews
getShopReviews
Fetches all public reviews for the store.
const { data: reviews } = await shoppex.getShopReviews();
reviews.forEach(review => {
console.log(review.rating, review.comment);
});
Response
Example: Reviews Section
async function renderReviews() {
const { data: reviews } = await shoppex.getShopReviews();
const container = document.getElementById('reviews');
// Calculate average
const avgRating = reviews.reduce((sum, r) => sum + r.rating, 0) / reviews.length;
container.innerHTML = `
<div class="reviews-header">
<h2>Customer Reviews</h2>
<div class="average">
${'★'.repeat(Math.round(avgRating))}${'☆'.repeat(5 - Math.round(avgRating))}
<span>${avgRating.toFixed(1)} / 5</span>
<span>(${reviews.length} reviews)</span>
</div>
</div>
<div class="reviews-list">
${reviews.map(review => `
<div class="review">
<div class="stars">${'★'.repeat(review.rating)}${'☆'.repeat(5 - review.rating)}</div>
<p class="comment">${review.comment || ''}</p>
<span class="date">${new Date(review.created_at).toLocaleDateString()}</span>
</div>
`).join('')}
</div>
`;
}
Invoices
getInvoice
Fetches full invoice details.
const { data: invoice } = await shoppex.getInvoice('inv_abc123');
console.log(invoice.status); // "COMPLETED"
console.log(invoice.total); // 29.99
console.log(invoice.products); // [{ title, quantity, price }]
Response
Invoice unique identifier
Invoice status (PENDING, COMPLETED, CANCELLED, etc.)
getInvoiceStatus
Lightweight endpoint for status polling. Use this instead of getInvoice for real-time updates.
const { data } = await shoppex.getInvoiceStatus('inv_abc123');
console.log(data.status); // "PENDING" | "COMPLETED" | "CANCELLED"
Example: Order Status Page
async function pollOrderStatus(invoiceId) {
const statusEl = document.getElementById('order-status');
const checkStatus = async () => {
const { data } = await shoppex.getInvoiceStatus(invoiceId);
switch (data.status) {
case 'PENDING':
statusEl.innerHTML = '<span class="pending">Waiting for payment...</span>';
break;
case 'PROCESSING':
statusEl.innerHTML = '<span class="processing">Processing payment...</span>';
break;
case 'COMPLETED':
statusEl.innerHTML = '<span class="success">Order complete! Check your email.</span>';
clearInterval(pollInterval);
break;
case 'CANCELLED':
statusEl.innerHTML = '<span class="error">Order cancelled</span>';
clearInterval(pollInterval);
break;
}
};
// Poll every 5 seconds
const pollInterval = setInterval(checkStatus, 5000);
checkStatus(); // Initial check
}
// Get invoice ID from URL
const invoiceId = new URLSearchParams(window.location.search).get('invoice');
if (invoiceId) {
pollOrderStatus(invoiceId);
}
Formats a price with currency symbol.
shoppex.formatPrice(29.99, 'USD'); // "$29.99"
shoppex.formatPrice(29.99, 'EUR'); // "€29.99"
shoppex.formatPrice(29.99, 'EUR', 'de'); // "29,99 €"
Parameters
currency
string
default:"Store currency"
ISO 4217 currency code
Creates a reusable Intl.NumberFormat instance.
const formatter = shoppex.createFormatter('EUR', 'de');
formatter.format(29.99); // "29,99 €"
formatter.format(100); // "100,00 €"
Next Steps
Products API
Fetch products, variants, and categories
SDK Types
Full TypeScript type reference