Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

igapy – IG API Wrapper

PyPI version License: MIT Python versions CI codecov Code style: black

A complete, modern, production-ready Python wrapper for the IG REST and streaming API.


Why igapy?

igapy is an unofficial, open source Python client for IG's REST and streaming API. It is designed for quant developers, algo traders, and anyone who wants a robust, well-documented and production-ready interface to IG's trading platform. The project aims to be a reference implementation for clean API wrappers in Python.

  • 100% endpoint coverage (REST & streaming)
  • Modern, type-annotated, PEP8/Black-formatted codebase
  • CLI for all public API endpoints
  • Full test suite and CI/CD
  • No unnecessary complexity – easy to read, extend, and audit

Features

  • Full REST API coverage (session, accounts, markets, orders, prices, watchlists, sentiment, history, costs, operations)
  • WebSocket streaming client with reconnect, ping, custom subscription management
  • Authentication (session management, token handling, account switching, encryption keys)
  • Market data retrieval (search, details, bulk, navigation)
  • Order management (positions, working orders, confirmations)
  • Client sentiment access (single, related, batch)
  • Historical prices (multiple date/resolution variants)
  • Account preferences management
  • Watchlist management (create, modify, delete, add/remove markets)
  • Command-line interface (CLI)
  • GitHub Actions CI workflow
  • Unit tests with pytest (90 tests, 100% coverage)
  • PEP8-compliant, Black-formatted codebase

Quickstart

Install

pip install igapy

Python Example

from igapy import IGClient, Accounts, Markets

client = IGClient(
    api_key="YOUR_API_KEY",
    username="YOUR_USERNAME",
    password="YOUR_PASSWORD",
    is_demo=True
)
client.login()

accounts = Accounts(client).list_accounts()
print(accounts)

# Search for Apple stock (AAPL)
apple_search = Markets(client).search_markets("APPLE")
print(apple_search)

# Get details for the first Apple market found (if any)
if apple_search and apple_search["markets"]:
    apple_epic = apple_search["markets"][0]["epic"]
    apple_details = Markets(client).get_market_details(apple_epic)
    print(apple_details)

CLI Example

# List accounts
igapy accounts list --api-key KEY --username USER --password PASS --demo

# Get market details
igapy markets get-details --api-key KEY --username USER --password PASS --demo --epic IX.D.FTSE.DAILY.IP

# Create order
igapy orders create --api-key KEY --username USER --password PASS --demo --order '{"epic":"IX.D.FTSE.DAILY.IP","expiry":"DFB","direction":"BUY","size":1,"orderType":"MARKET","currencyCode":"GBP"}'

# Get prices
igapy prices get --api-key KEY --username USER --password PASS --demo --epic IX.D.FTSE.DAILY.IP

# Get transactions for type and period
igapy history transactions-period --api-key KEY --username USER --password PASS --demo --transaction-type ALL --last-period MONTH

# Get cost history
igapy costs history --api-key KEY --username USER --password PASS --demo --from-date 2024-01-01 --to-date 2024-06-01

Streaming Example

from igapy import IGClient, IGStreamingClient
import time

client = IGClient(
    api_key="YOUR_API_KEY",
    username="YOUR_USERNAME",
    password="YOUR_PASSWORD",
    is_demo=False
)
client.login()

def on_chart_tick(data):
    print("Chart tick update:", data)

# IGStreamingClient supports automatic reconnect and re-subscription on connection loss.
# You can control this with the 'reconnect' and 'reconnect_delay' parameters.
stream = IGStreamingClient(client, reconnect=True, reconnect_delay=5)
stream.start()
stream.subscribe_chart_tick(
    epic = "CS.D.BITCOIN.CFD.IP",
    fields=["BID", "OFR", "UTM"],
    callback=on_chart_tick
)

try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    print("Stopping streaming...")
    stream.stop()

API Documentation


Development & Contribution

  • Clone repo, create a virtualenv, install with pip install -e .[dev]
  • Run tests: pytest
  • Lint: flake8 src/igapy tests
  • Format: black src/igapy tests

Pull requests and issues are welcome!


Project Structure

.
├── LICENSE
├── pyproject.toml
├── MANIFEST.in
├── README.md
├── .gitignore
├── .github/
│   └── workflows/
│       └── python-ci.yml
├── src/
│   └── igapy/
│       ├── __init__.py
│       ├── cli.py
│       ├── client.py
│       ├── session.py
│       ├── accounts.py
│       ├── markets.py
│       ├── prices.py
│       ├── orders.py
│       ├── sentiment.py
│       ├── history.py
│       ├── repeat.py
│       ├── watchlists.py
│       ├── costs.py
│       ├── operations.py
│       ├── streaming.py
│       ├── exceptions.py
│       └── utils.py
└── tests/

Code Style

  • PEP8 via flake8
  • Black formatting
  • Type annotations and docstrings for all public classes/methods

Continuous Integration

  • GitHub Actions: .github/workflows/python-ci.yml
  • Coverage via pytest-cov

License

MIT License – see LICENSE file for details.


Contact

hi@vilhelmhilding.com


This project is not affiliated with or endorsed by IG Group. Use at your own risk.

About

A modern, fully featured Python wrapper for IG’s REST and streaming trading APIs – built for quant developers and algo traders. Includes CLI, full test coverage, and production-ready design.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages