Functions

Functions and properties available on the discountNinja.api namespace.

The documentation below describes the API as of version 9.x of the script.

Public properties or functions that are not in the discountNinja.api namespace should be considered obsolete and will be removed in the next major version release.

Using undocumented functions or objects will result in issues as custom code that relies on those functions or objects may break in the future when Discount Ninja's script is automatically updated.

Cart

Content

Property

discountNinja.api.cart.content

Can be used to get access to an object that represents the content of the cart, including any discounts applied by Shopify's backend.

Type

Public

This function is intended for use in integration code by third parties.

Return value

object Returns the Shopify cart object.

Syntax

function test() {
    const cart = discountNinja.api.cart;
    const itemCount = cart.item_count;
    console.log(`There are currently ${itemCount} items in the cart`);
}

Prefill

Property

discountNinja.api.cart.prefill(variants?: string[], redirectUrl?: string)

Can be used to prefill a cart with specific variants. Typically used to create a link to a prefilled, discounted cart. Cf. https://support.discountninja.io/en/articles/5194395-how-to-build-a-prefilled-discounted-cart

Type

Public

This function is intended for use in integration code by third parties.

Parameters

variants?: string[]: a comma-separated list of the variant id of the product variants you want to add to the cart; for each variant you'll need to specify the quantity.

This parameter is optional. If it is omitted, the app will look for a query parameter named variants instead. If neither is available the prefill method will not execute.

redirectUrl?: string: define which page should be loaded once the cart is prefilled

This parameter is optional. If it is omitted, the app will look for a query paramer named redirectUrl instead. If neither is available the default value is "/cart".

Return value

object Returns the Shopify cart object.

Syntax

function test() {
    document.addEventListener("la:dn:promotions:loaded", function() { 
	// Prefilling the cart based on the data in the query parameters
	// The query parameters may look as follows:
	// .../?variants=1234567x1,2345678x2&redirectUrl=/cart
	discountNinja.api.cart.prefill();
	
	// Add a quantity of 1 of the variant with id 1234567x1
	// and a quantity of 2 of the variant with id 2345678x2
	// then, redirect to the home page
	const variants = [];
	variants.push('1234567x1');
	variants.push('2345678x2');
	discountNinja.api.cart.prefill(variants, '/');
    });    
}

Checkout

Is discounted

Function

await discountNinja.api.checkout.isDiscounted()

Can be used to check if any of the promotions apply to the cart and result in a product, order or shipping discount.

Type

Public

This function is intended for use in integration code by third parties.

Return value

Promise<boolean> Returns a promise which resolves to a boolean.

The return value indicates if the app will instruct Shopify to apply discounts at checkout. Additionally, when this function returns true, the script will attempt to take over the checkout process when the cart form is submitted using a checkout button.

Syntax

document.addEventListener("la:dn:cart:updated", function(event) {
    const discountedCart = event.detail.data[0]; 
    const isDiscounted = await discountNinja.api.checkout.isDiscounted();
    if (isDiscounted) {                
        console.log('The cart is discounted', discountedCart);
        // Add logic when the cart is discounted by Discount Ninja offers
    }
    else {
        console.log('The cart is not discounted', discountedCart);
        // Add logic when the cart is not discounted by Discount Ninja offers
    }
});

Add pipeline rule

Function

await discountNinja.api.checkout.addPipelineRule()

Can be used to add custom business logic that is executed when the customer click the checkout button.

Discount Ninja needs to take over the checkout process when a user clicks the checkout button to ensure the checkout is correctly discounted.

As a result, the app overrides any logic you may have associated with clicking the checkout button. To execute this logic you can add it to the pipeline of rules that is executed by the app.

Each pipeline rule is a parameterless function that returns a boolean indicating if execution should continue (true) or not (false).

Type

Public

This function is intended for use in integration code by third parties.

Return value

boolean The return value indicates if the rule was added properly.

Syntax

function checkoutPipelineRule1() {
    //Add your logic here
    //Return true to indicate that the customer can continue to the checkout
    //Return false to halt the pipeline
    console.log('Executing checkout pipeline rule 1');
    return true; 
}

function checkoutPipelineRule2() {
    //Add your logic here
    //Return true to indicate that the customer can continue to the checkout
    //Return false to halt the pipeline
    console.log('Executing checkout pipeline rule 2');
    return true; 
}

function registerCheckoutPipelineRules() {
    const successfullyAddedRule1 = 
        discountNinja.api.checkout.addPipelineRule(checkoutPipelineRule1);
    const successfullyAddedRule2 = 
        discountNinja.api.checkout.addPipelineRule(checkoutPipelineRule2);
    if (successfullyAddedRule1 && successfullyAddedRule2) {
        console.log('Pipeline rules successfully registered');
    }
    else {
        console.error('Pipeline rules could not be registered');
    }
}

//Check if the API is ready
if (typeof discountNinja === 'undefined' || 
    typeof discountNinja.api === 'undefined') {
    //The API is not ready, wait for it
    document.addEventListener("la:dn:api:ready", function(event) { 
        registerCheckoutPipelineRules();
    });
}
else {
    //The API was already available, no need to wait
    registerCheckoutPipelineRules();
}

Discount code

Add

Function

await discountNinja.api.discountCode.add(discountCode: string)

Adds a discount code or promotion code to the Discount Ninja promotion code field programmatically.

Type

Public

This function is intended for use in integration code by third parties.

Parameters

discountCode (string): the discount code to add

Return value

Promise<void> Returns a void promise.

Syntax

function test() {
    const discountCode = 'ABCD';
    await discountNinja.api.discountCode.add(discountCode);
    console.log(`Added the promotion with promotion code '${discountCode}' to the cart`);
}

Remove

Function

await discountNinja.api.discountCode.remove(discountCode: string)

Removes a discount code or promotion code from the Discount Ninja promotion code field programmatically.

Type

Public

This function is intended for use in integration code by third parties.

Parameters

discountCode (string): the discount code to remove

Return value

Promise<void> Returns a void promise.

Syntax

function test() {
    const discountCode = 'ABCD';
    await discountNinja.api.discountCode.remove(discountCode);
    console.log(`Removed the promotion with promotion code '${discountCode}' from the cart`);
}

Discounted cart

Content

Property

discountNinja.api.discountedCart.content

Can be used to get access to an object that represents the content of the cart, including any discounts applied by Shopify's backend.

Type

Internal

This is an internal function or property. Use it only for debugging purposes. Do not rely on this function or property in your integration code.

Return value

object Returns an object representing the current cart, with the applicable Discount Ninja offers applied. Note that amounts returned are in dollars, not cents.

Syntax

function test() {
    const discountedCart = discountNinja.api.discountedCart;
    console.log(`Removed the promotion with promotion code '${discountCode}' from the cart`);
}

Events

Subscribe

Function

discountNinja.api.events.subscribe(eventName: string)

Provides instructions on how to subscribe to an event with a given name. Note: this function does not, itself, subscribe to the event.

See the list of available events.

Type

Public

This function is intended for use in integration code by third parties.

Syntax

function test() {
    discountNinja.api.events.subscribe('cart:updated');
}

// Prints the following message on the console:
// To subscribe to this event use the following code: 
// document.addEventListener("la:dn:cart:updated", function(event) { const eventData = event.detail.data[0]; console.log('Event la:dn:cart:updated was published.', eventData); });

Publish

Function

discountNinja.api.events.publish(eventName: string)

Publishes an event to the PriceRuleEngine.

See the list of available events.

Type

Public

This function is intended for use in integration code by third parties.

Syntax

function test() {
    discountNinja.api.events.publish('cart:updated');
}

Line item

Get updated key

Function

discountNinja.api.lineItem.getUpdatedKey(key: string)

Returns the updated key associated with a cart line item. A key can be updated by Shopify's back-end when properties are added, a selling plan changes or a discount is added. Cf. https://support.discountninja.io/en/articles/9109023-fix-network-requests-to-cart-js

Type

Public

This function is intended for use in integration code by third parties.

Parameters

key (string): the original key of the cart line item

Return value

string The updated key.

Syntax

function test() {
    for (let i = 0; i < cart.items.length; i++) {
        const item = cart.items[i];
        let key = item.key;
        if (discountNinja) {
            key = discountNinja.api.lineItem.getUpdatedKey(key);
        }
        
        // ... use the updated key, for example, to send requests to cart.js
    }
});

Offers

All

Function

discountNinja.api.offers.all

Lists all the active offers loaded by the app.

Type

Internal

This is an internal function or property. Use it only for debugging purposes. Do not rely on this function or property in your integration code.

Return value

object[] An array of offer objects, representing the offers that are applicable in the current context.

Syntax

document.addEventListener("la:dn:promotions:loaded", function(event) { 
    const offers = discountNinja.api.offers.all;
    console.log('Offers loaded', offers);
});

Get

Function

discountNinja.api.offers.get(token: string)

Finds a specific offer in the list of all the active offers loaded by the app.

Type

Internal

This is an internal function or property. Use it only for debugging purposes. Do not rely on this function or property in your integration code.

Parameters

token (string): the token of the offer to find

Return value

object | null Anoffer object if the offer is found, otherwise null.

Syntax

document.addEventListener("la:dn:promotions:loaded", function(event) { 
    const offerToken = 'ABCD';
    const bfcmOffer = discountNinja.api.offers.get(offerToken);
    if (bfcmOffer === null) {
        console.log(`Offer with token ${offerToken} not found`);
    }
    else {
        console.log(`Offer with token ${offerToken} found`, bfcmOffer);
    }
});

Promotions

All

Function

discountNinja.api.promotions.all

Lists all the active promotions loaded by the app.

Type

Internal

This is an internal function or property. Use it only for debugging purposes. Do not rely on this function or property in your integration code.

Return value

object[] An array of promotion objects, representing the promotions that are applicable in the current context. The promotion object provides information about the trigger used and the list of offers associated with the promotion.

Syntax

document.addEventListener("la:dn:promotions:loaded", function(event) { 
    const offers = discountNinja.api.offers.all;
    console.log('Offers loaded', offers);
});

Get

Function

discountNinja.api.promotions.get(token: string)

Finds a specific promotion in the list of all the active promotions loaded by the app.

Type

Internal

This is an internal function or property. Use it only for debugging purposes. Do not rely on this function or property in your integration code.

Parameters

token (string): the token of the promotion to find

Return value

object | null A promotion object if the promotion is found, otherwise null.

Syntax

document.addEventListener("la:dn:promotions:loaded", function(event) { 
    const promotionToken = 'ABCD';
    const bfcmPromotion = discountNinja.api.promotions.get(promotionToken);
    if (bfcmPromotion === null) {
        console.log(`Promotion with token ${promotionToken} not found`);
    }
    else {
        console.log(`Promotion with token ${promotionToken} found`, bfcmPromotion);
    }
});

Trigger

Function

discountNinja.api.promotions.trigger(token: string)

Triggers a promotion programmatically.

Use this as a programmatic alternative to using a discount link or a promotion code.

Type

Public

This function is intended for use in integration code by third parties.

Parameters

token (string): the token of the promotion to trigger

Syntax

function triggerCustomPromotion() {
    const bcfmPromotionToken = 'ABCD';
    discountNinja.api.promotions.trigger(bcfmPromotionToken);
}
<a href='javascript:triggerCustomPromotion()'>Unlock the BFCM promo!</a>
<button onclick='triggerCustomPromotion()'>Unlock the Cyber Monday offer!</button>

Help

Function

discountNinja.api.help()

Prints a link to this page on the console.

Type

Public

This function is intended for use in integration code by third parties.

Syntax

discountNinja.api.help()

Last updated