Skip to main content

Firstock Developer SDK for Python

Project description

Firstock Connect API Python Client

The official Python library for the Firstock Connect API, providing a seamless interaction with Firstock's trading and financial data services. This library has been designed for developers to easily integrate Firstock's advanced trading capabilities into their Python applications.

Features

  • HTTP calls are converted to methods.
  • JSON responses are wrapped into Python-compatible objects.
  • The handling of WebSocket connections is automated.

Installation

This module is installed via pip:

pip install firstock

Getting started with API

The API consists of five major section

  • Login & Profile
  • Orders & Report
  • Market Connect

Login

For the Login process we require to generate the appkey and vendor code by logging in with the firstock credentials in the give link Key Generation.

from firstock import firstock

login = firstock.login(
    userId="{{userID}}",
    password="{{Password}}",
    TOTP="{{TOTP}}",
    vendorCode="{{vendorCode}}",
    apiKey="{{apiKey}}",
  )

Logout

from firstock import firstock

logout = firstock.logout(userId="{{userId}}")

User Details

from firstock import firstock

userDetails = firstock.userDetails(userId="{{userId}}")

Place Order

from firstock import firstock

placeOrder = firstock.placeOrder(
    userId="{{userId}}",
    exchange="NSE",
    tradingSymbol="ITC-EQ",
    quantity="1",
    price="300",
    product="I",
    transactionType="B",
    priceType="LMT",
    retention="DAY",
    triggerPrice="0",
    remarks="Python Package Order"
)

Order Margin

from firstock import firstock

orderMargin = firstock.orderMargin(
    userId="{{userId}}",
    exchange="NSE",
    tradingSymbol="ITC-EQ",
    quantity="1",
    priceType="LMT",
    product="C",
    price="350",
    transactionType="B"
)

Order Book

from firstock import firstock

orderBook = firstock.orderBook(userId="{{userId}}")

Cancel Order

from firstock import firstock

cancelOrder = firstock.cancelOrder(
    userId="{{userId}}",
    orderNumber="25063000011862"
)

Modify Order

from firstock import firstock

modifyOrder = firstock.modifyOrder(
    userId="{{userId}}",
    orderNumber="25070100015934",
    quantity="1",
    price="418",
    triggerPrice="0",
    tradingSymbol="IDEA-EQ",
    priceType="LMT",
    retention="DAY",
    mkt_protection="0.5",
    product="C"
)

Single Order History

from firstock import firstock

singleOrderHistory = firstock.singleOrderHistory(
    userId="{{userId}}",
    orderNumber="25063000011911"
)

Trade Book

from firstock import firstock

tradeBook = firstock.tradeBook(userId="{{userId}}")

Position Book

from firstock import firstock

positionBook = firstock.positionBook(userId="{{userId}}")

Convert Product

from firstock import firstock

convertProduct = firstock.productConversion(
    userId="{{userId}}",
    transactionType="B",
    tradingSymbol="ITC-EQ",
    quantity="1",
    product="C",
    previousProduct="I",
    positionType="DAY",
    exchange="NSE"
)

Holdings

from firstock import firstock

holdings = firstock.holdings(userId="{{userId}}")

Limits

from firstock import firstock

limits = firstock.limit(userId="{{userId}}")

Basket Margin

from firstock import firstock

basketMargin = firstock.basketMargin(
    userId="{{userId}}",
    exchange="NSE",
    transactionType="B",
    product="C",
    tradingSymbol="RELIANCE-EQ",
    quantity="1",
    priceType="MKT",
    price="0",
    BasketList_Params=[
        {
            "exchange": "NSE",
            "tradingSymbol": "IDEA-EQ",
            "quantity": "1",
            "transactionType": "B",
            "price": "0",
            "product": "C",
            "priceType": "MKT"
        }
    ]
)

Get Security Info

from firstock import firstock

getSecurityInfo = firstock.securityInfo(
    userId="{{userId}}",
    exchange="NSE",
    tradingSymbol="NIFTY"
)

Get Quote

from firstock import firstock

getQuotes = firstock.getQuote(
    userId="{{userId}}",
    exchange="NSE",
    tradingSymbol="NIFTY"
)

Get Index List

from firstock import firstock

getIndexList = firstock.indexList(userId="{{userId}}")

Option Chain

from firstock import firstock

optionChain = firstock.optionChain(
    userId="{{userId}}",
    exchange="NFO",
    symbol="NIFTY",
    strikePrice="23150",
    expiry="03JUL25",
    count="5"
)

Search Scrips

from firstock import firstock

searchScrips = firstock.searchScrips(
    userId="{{userId}}",
    stext="ITC"
)

Get Quote LTP

from firstock import firstock

getQuoteLtp = firstock.getQuoteltp(
    userId="{{userId}}",
    exchange="NSE",
    tradingSymbol="RELIANCE-EQ"
)

Get Multi Quote

from firstock import firstock

multiQuote = firstock.getMultiQuotes(
    userId="{{userId}}",
    dataToken=[
        {
            "exchange": "NSE",
            "tradingSymbol": "Nifty 50"
        },
        {
            "exchange": "NFO",
            "tradingSymbol": "NIFTY03APR25C23500"
        }
    ]
)

Get Multi Quote LTP

from firstock import firstock

multiQuoteLtp = firstock.getMultiQuotesltp(
    userId="{{userId}}",
    dataToken=[
        {
            "exchange": "NSE",
            "tradingSymbol": "Nifty 50"
        },
        {
            "exchange": "NSE",
            "tradingSymbol": "Nifty Bank"
        }
    ]
)

Brokerage Calculator

from firstock import firstock

brokerageCalc = firstock.brokerageCalculator(
    userId="{{userId}}",
    exchange="NFO",
    tradingSymbol="RELIANCE27FEB25F",
    transactionType="B",
    product="M",
    quantity="500",
    price="125930",
    strike_price="0",
    inst_name="FUTSTK",
    lot_size="1"
)

Get Expiry

from firstock import firstock

getExpiry = firstock.getExpiry(
    userId="{{userId}}",
    exchange="NSE",
    tradingSymbol="NIFTY"
)

Time Price Series

from firstock import firstock

timePriceSeries = firstock.TimePriceSeries(
    userId="{{userId}}",
    exchange="NSE",
    tradingSymbol="Nifty 50",
    startTime="13/02/2023 09:45:45",
    endTime="13/12/2023 13:56:34",
    interval="30"
)

Get Holdings Details

from firstock import firstock

holdings_details = firstock.getHoldingsDetails(
    userId="{{userId}}"
)

Refer to the Firstock Connect Documentation for the complete list of supported methods.

WebSockets

The WebSocket architecture has been completely upgraded. You must initialize the WebSocket with a configuration model, define callback methods, and then call subscribe() / unsubscribe() on the active connection.

Import from firstock import firstock

  1. Define Your Callback Methods

These functions will receive real-time streaming data and are fully customizable.

def on_connection(conn): # Save the connection for future subscribe/unsubscribe global ws_conn ws_conn = conn

def on_subscribe_feed(data): print("Feed Data:", data)

def on_option_greeks(data): print("Option Greeks:", data)

def on_order_book(data): print("Order Book:", data)

def on_position_book(data): print("Position Book:", data)

  1. Create WebSocket Model model = firstock.WebSocketModel( orderData=on_order_book, positionData=on_position_book, subscribeFeedData=on_subscribe_feed, subscribeOptionGreeksData=on_option_greeks, subscribeFeedTokens=[], subscribeOptionGreeksTokens=["NSE:26000", "BSE:1"], webSocketConnection=on_connection )

  2. Initialize WebSocket err = firstock.initializeWebSocket(userId="{{userId}}", model=model) print("Initialize Error:", err)

  3. Subscribe Tokens if ws_conn: err = firstock.subscribe(ws_conn, ["NSE:26000", "BSE:1"]) print("Subscribe Error:", err)

  4. Unsubscribe Tokens err = firstock.unsubscribe(ws_conn, ["NSE:26000", "BSE:1", "NSE:2885"]) print("Unsubscribe Error:", err)

  5. Close WebSocket err = firstock.closeWebSocket(ws_conn) print("Close Error:", err)

Notes

Tokens can be provided as pipe-separated ("NSE:26000|BSE:1") or list format.

If tokens are not pipe-separated, the library will auto-format them.

Each callback runs on every incoming tick update.

WebSocket supports:

Feed updates

Option Greeks

Order book stream

Position book stream

Changelog

  • The Python package has been updated to automatically convert passwords into SHA256 hashes prior to submission to the login URL.

  • The package now includes a multi-login feature, enabling simultaneous login for multiple users, with each user's session being individually stored.

  • For all APIs, it is now required to pass the userId. The corresponding jKey session linked to the userId will be utilized for executing the API.

  • The following methods have been updated to require trading symbols instead of tokens:

    • Get Multi Quotes LTP
    • Get Multi Quotes
    • Day Interval Time Price Series
    • Time Price Series
    • Security Info
    • Get Quotes
  • The method for accessing the websocket has been entirely revamped. Detailed information will be available in an upcoming blog post. Additionally, sample code illustrating the new method can be found in the examples section.

[1.0.5] - 2025-11-15

Changed

  • Minor version bump for compatibility updates.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

firstock-1.0.5.tar.gz (43.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

firstock-1.0.5-py3-none-any.whl (98.4 kB view details)

Uploaded Python 3

File details

Details for the file firstock-1.0.5.tar.gz.

File metadata

  • Download URL: firstock-1.0.5.tar.gz
  • Upload date:
  • Size: 43.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for firstock-1.0.5.tar.gz
Algorithm Hash digest
SHA256 72994542aec9d5e17dd9c61faac0637694319c33c54b3ddd2e1d33c179bd819f
MD5 ef8dbff1d10dc2e4c4f39d4f4bd8cdaa
BLAKE2b-256 8cd6e8a8aa78b4a6b0c4fe68e606e3a899513baf6299b43b24722c935c998a0c

See more details on using hashes here.

File details

Details for the file firstock-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: firstock-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 98.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for firstock-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ffb7fc4077eaf3f23412e6cb3268165e483cb7132e7fe492d658dabd9efc2ed4
MD5 1b92b62fc086845a7dc28e0d4c3ec74f
BLAKE2b-256 304f8ade8969d08632805f5c7694d6125c045564d0e4283ff2e64734f9063568

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page