Embed SDK
Add the TruCustom widget to any website with our JavaScript SDK.
Quick Start
Add the SDK script and a container element to your page:
<!-- Container for the customizer -->
<div id="customizer"
data-pc-product-id="YOUR_PRODUCT_ID"
data-pc-store-id="YOUR_STORE_ID">
</div>
<!-- Load the SDK -->
<script src="https://trucustom.net/sdk/product-customizer.js" data-pc-auto-init></script>
Installation Methods
1. Auto-Init (Recommended)
The SDK automatically initializes customizers based on data attributes:
<div data-pc-product-id="prod_123"
data-pc-store-id="store_456"
data-pc-mode="inline"
data-pc-on-finalize="handleFinalize">
</div>
<script src="https://trucustom.net/sdk/product-customizer.js" data-pc-auto-init></script>
<script>
ProductCustomizer.registerCallback('handleFinalize', function(data) {
// Add to cart
console.log('Design:', data.design);
console.log('Preview:', data.previewUrl);
});
</script>
2. JavaScript API
For more control, use the JavaScript API:
<div id="customizer"></div>
<script src="https://trucustom.net/sdk/product-customizer.js"></script>
<script>
const instance = ProductCustomizer.init({
container: '#customizer',
storeId: 'store_456',
productId: 'prod_123',
mode: 'inline',
templateId: 'tmpl_789', // Optional: pre-load template
variantId: 'var_abc', // Optional: select variant
sessionToken: 'token', // Optional: resume session
// Callbacks
onReady: function(instance) {
console.log('Customizer ready');
},
onDesignChange: function(data) {
console.log('Design changed');
},
onFinalize: function(data) {
addToCart(data.design, data.previewUrl);
},
onError: function(error) {
console.error('Error:', error);
},
onClose: function() {
console.log('Customizer closed');
}
});
</script>
3. Button Trigger (Modal)
Open the customizer in a modal when clicking a button:
<button data-pc-open
data-pc-product-id="prod_123"
data-pc-store-id="store_456"
data-pc-mode="modal">
Customize This Product
</button>
<script src="https://trucustom.net/sdk/product-customizer.js" data-pc-auto-init></script>
Configuration Options
| Option | Data Attribute | Type | Description |
|---|---|---|---|
container |
- |
string/element | CSS selector or DOM element |
storeId |
data-pc-store-id |
string | Your store ID (required) |
productId |
data-pc-product-id |
string | Product to customize (required) |
mode |
data-pc-mode |
string | "inline", "modal", or "fullscreen" |
templateId |
data-pc-template-id |
string | Pre-load a design template |
variantId |
data-pc-variant-id |
string | Pre-select a product variant |
sessionToken |
data-pc-session |
string | Resume a previous session |
locale |
data-pc-locale |
string | Language code (e.g., "en", "es") |
theme |
- |
object | Custom theming options |
Theming
Customize the look of the widget:
ProductCustomizer.init({
// ... other options
theme: {
primaryColor: '#4f46e5',
primaryHover: '#4338ca',
fontFamily: 'Inter, sans-serif',
borderRadius: '8px'
}
});
Display Modes
Inline
Embed directly in your page layout:
<div id="customizer" style="width: 100%; height: 700px;"></div>
<script>
ProductCustomizer.init({
container: '#customizer',
mode: 'inline',
// ...
});
</script>
Modal
Open in a centered modal overlay:
ProductCustomizer.open({
mode: 'modal',
productId: 'prod_123',
storeId: 'store_456',
onFinalize: function(data) {
// Handle completion
ProductCustomizer.close();
}
});
Fullscreen
Take over the entire viewport:
ProductCustomizer.open({
mode: 'fullscreen',
// ...
});
JavaScript API
Methods
| Method | Description |
|---|---|
ProductCustomizer.init(options) |
Initialize an inline customizer |
ProductCustomizer.open(options) |
Open modal/fullscreen customizer |
ProductCustomizer.close(id?) |
Close a customizer instance |
ProductCustomizer.get(id) |
Get an instance by ID |
ProductCustomizer.registerCallback(name, fn) |
Register a global callback |
Events
| Event | Data | Description |
|---|---|---|
onReady |
instance |
Customizer is loaded and ready |
onDesignChange |
{ design } |
Design was modified |
onFinalize |
{ design, previewUrl } |
Customer completed customization |
onError |
{ message } |
An error occurred |
onClose |
- |
Customizer was closed |