Skip to content

Publisher JS Plugin

Warning

The publisher JS plugin will not function in the iOS WebView due to Safari's new cookie policy, which blocks cross-domain cookie management in iframes. You will need to implement offsite order execution. We recommend using offsite order execution for all Kite Publisher use cases.

The Kite Publisher Javascript plugin lets you add one-click trade buttons to your webpage. It works like a basket combined with a payment gateway, where an inline popup opens on your webpage, guides the user through a trade, and lands the user back on your page. As described in the offsite order execution section, it is possible to capture the request_token from this flow to start a Kite Connect session as well.

You can add one or more stocks to the basket (maximum 10) dynamically using the Javascript plugin, or embed simple static buttons using plain HTML.

Getting started

<script src="https://kite.trade/publisher.js?v=3"></script>

Include Kite Publisher on your webpage by pasting the following script tag at the end of your webpage, just before the closing </body> tag. You only need to include this once to render any number of buttons on a page.

Branded HTML5 buttons

<!--  A link that initiates a buy (market) of the SBIN stock //-->
<kite-button
  href="#"
  data-kite="your_api_key"
  data-exchange="NSE"
  data-tradingsymbol="SBIN"
  data-transaction_type="BUY"
  data-quantity="1"
  data-order_type="MARKET"
  >Buy SBI stock</kite-button
>

You can use the custom <kite-button> HTML5 tag to render branded Kite buttons that initiate a trade with a single click. The branded buttons work in a similar fashion to social media buttons, and you can include as many as you want on a page.

Custom HTML5 buttons

<!--  A link that initiates a buy (market) of the SBIN stock //-->
<a
  href="#"
  data-kite="your_api_key"
  data-exchange="NSE"
  data-tradingsymbol="SBIN"
  data-transaction_type="BUY"
  data-quantity="1"
  data-order_type="MARKET"
  >Buy SBI stock</a
>

<!--  A button that initiates a sell (LIMIT) of the RELIANCE stock //-->
<button
  data-kite="your_api_key"
  data-exchange="NSE"
  data-tradingsymbol="RELIANCE"
  data-transaction_type="SELL"
  data-quantity="1"
  data-order_type="LIMIT"
  data-price="100"
>
  Buy RELIANCE
</button>

<!--  A button that initiates a CO of the RELIANCE stock //-->
<button
  data-kite="your_api_key"
  data-exchange="NSE"
  data-tradingsymbol="RELIANCE"
  data-transaction_type="BUY"
  data-quantity="1"
  data-order_type="LIMIT"
  data-variety="co"
  data-product="MIS"
  data-price="915"
  data-trigger_price="910"
>
  Buy RELIANCE (Cover Order)
</button>

You can use the HTML5 data attributes on any HTML element and turn it into a trade button which gets invoked with a single click. The examples on the right show a link and a button being turned into trade buttons.

Generating dynamic buttons with Javascript

<!-- A Kite button will be generated inside this container //-->
<p id="default-button"></p>

<!-- The basket will be linked to this element's onClick //-->
<button id="custom-button">Buy the basket</button>

<!-- Include the plugin //-->
<script src="https://kite.trade/publisher.js?v=3"></script>

<script>
  // Only run your custom code once KiteConnect has fully initialised.
  // Use KiteConnect.ready() to achieve this.
  KiteConnect.ready(function () {
    // Initialize a new Kite instance.
    // You can initialize multiple instances if you need.
    var kite = new KiteConnect("your_api_key");

    // Add a stock to the basket
    kite.add({
      exchange: "NSE",
      tradingsymbol: "INFY",
      quantity: 5,
      transaction_type: "BUY",
      order_type: "MARKET",
    });

    // Add another stock
    kite.add({
      exchange: "NSE",
      tradingsymbol: "SBIN",
      quantity: 1,
      order_type: "LIMIT",
      transaction_type: "SELL",
      price: 105,
    });

    // Add a Cover Order
    kite.add({
      tradingsymbol: "RELIANCE",
      exchange: "NSE",
      transaction_type: "BUY",
      order_type: "LIMIT",
      product: "MIS",
      price: 915.15,
      quantity: 1,
      variety: "co",
      trigger_price: 910,
      readonly: true,
    });

    // Register an (optional) callback.
    kite.finished(function (status, request_token) {
      alert("Finished. Status is " + status);
    });

    // Render the in-built button inside a given target
    kite.renderButton("#default-button");

    // OR, link the basket to any existing element you want
    kite.link("#custom-button");
  });
</script>

You can create a basket of stocks and get the plugin to render a Kite button that executes it, or link the basket to your own button (or any HTML element).

The plugin loads it's assets asynchronously, so it's important that you initialise your custom KiteConnect calls after it has fully loaded. You need to use the KiteConnect.ready() function to achieve this.

Note

Include your custom code after the publisher.js inclusion. Also, make sure to wrap your code in KiteConnect.ready()

Parameters

parameter  
variety Order variety (regular, amo, co. Defaults to regular)
tradingsymbol Tradingsymbol of the instrument
exchange Name of the exchange
transaction_type BUY or SELL
order_type Order type (MARKET, LIMIT etc.)
quantity Quantity to transact
product Margin product to use for the order (margins are blocked based on this) ?
price For LIMIT orders
trigger_price For SL, SL-M etc.
disclosed_quantity Quantity to disclose publicly (for equity trades)
validity Order validity
readonly Default is false. If set to true, the UI does not allow the user to edit values such as quantity, price etc., and they can only review and execute.
tag An optional tag to apply to an order to identify it (alphanumeric, max 8 chars)

Methods

method arguments  
KiteConnect.ready() function() Safe wrapper for all API calls that waits asynchronously for all assets to load.
add() entry Adds an object literal {} with the parameters mentioned in the previous section represeting a single trading entry to the basket.
get() Returns an array[] of all added entries.
count() Returns the number of added entries.
setOption() key, value Sets the value for certain supported keys.
  redirect_url A redirect URL to override the registered Kite Connect redirect URL (using setOption()). The value can be a single '#', a 127.0.0.1 url for testing, or a fully qualified URL belonging to the same domain as the registered URL.
renderButton() element_selector Renders a branded Kite button in the given target element, which when clicked, will start the transaction in an overlay popup. element_selector is an HTML selector, for example, #buy-button, .buttons etc.
link() element_selector Links the basket to the given HTML element, which when clicked, will start the transaction in an overlay popup. element_selector is an HTML selector, for example, #buy-button, .buttons etc.
html() Returns a serialized HTML form with the necessary hidden fields and the basket payload which can be written to the document body and submitted to initiate the transaction.
finished() function(status, request_token) Register a callback which is triggered after order placement is finished.
authHoldings() request_id, callback(data) Request ID from the holdings authorisation call along with an optional callback function that triggers when the holdings authorisation flow finishes.