IG Trading Library
Typed operations and safe workflows for IG's REST and streaming APIs.
The library removes protocol decisions from trading code. You call IG concepts such as
markets.search, positions.create, and confirmations.get; the library owns authentication,
endpoint paths, IG protocol versions, response normalisation, safe-read retries, mutation
ambiguity, and streaming recovery.
| Direct HTTP | This library |
|---|---|
| Choose a path and protocol version | Call one named operation |
| Build and validate dictionaries | Use typed request and response models |
| Reimplement auth, retry, and redaction | Share one hardened transport |
| Risk retrying an uncertain trade | Receive AmbiguousExecutionError |
| Compose trade confirmation manually | Use a safe workflow |
One mental model
IG(config)
├── operations one faithful typed IG call
└── workflows a journey composed only from operations
- Use
ig.operationswhen the IG reference names the call you need. - Use
ig.workflowswhen you need a complete journey such as open and confirm. - Use
AsyncIGwithawaitin applications built onasyncio. - Treat library v4 as the Python package version; IG protocol versions stay private.
Install
pip install ig-trading-lib==4.0.3
Python 3.11–3.13 is supported.
Discover and inspect
from ig_trading_lib import Environment, IG, IGConfig, SessionCredentials
config = IGConfig(
environment=Environment.DEMO,
credentials=SessionCredentials(
api_key="your-api-key",
identifier="your-identifier",
password="your-password",
),
)
with IG(config) as ig:
matches = ig.operations.markets.search("EUR/USD")
market = ig.operations.markets.get(matches.markets[0].epic)
print(market.instrument.epic, market.snapshot.market_status if market.snapshot else None)
Provider-added response fields remain available while documented fields are typed and
normalised to snake_case.
Trade and confirm
from ig_trading_lib import CreatePositionRequest, IG, TradingPermit
request = CreatePositionRequest(
epic="CS.D.EURUSD.CFD.IP",
direction="BUY",
size=1,
order_type="MARKET",
currency_code="GBP",
)
with IG(config, trading_permit=TradingPermit()) as ig:
confirmation = ig.workflows.positions.open_and_confirm(request)
print(confirmation.deal_status, confirmation.deal_id)
TradingPermit is mandatory for live mutations. Network failures after a mutation may raise
AmbiguousExecutionError; reconcile the deal before deciding whether to issue another request.
If confirmation retrieval fails after IG returns a deal reference, DealConfirmationError
preserves that reference so you can retrieve the existing confirmation without replaying the trade.
Async
from ig_trading_lib import AsyncIG
async with AsyncIG(config) as ig:
matches = await ig.operations.markets.search("EUR/USD")
Documentation
- Documentation
- PyPI
- Getting started
- Operation reference
- Types and exceptions
- Library reference
- Machine-readable API index
- Source
The automated suite uses mocked IG responses. It never submits a real demo or live trade.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ig_trading_lib-4.0.3.tar.gz.
File metadata
- Download URL: ig_trading_lib-4.0.3.tar.gz
- Upload date:
- Size: 28.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb8f30a0bc3370f2eab3b2750dbc3874c2fac2d1d98e199a60264a91008ea14c
|
|
| MD5 |
5c55a4cfcd888f51afefa6493c4d59ae
|
|
| BLAKE2b-256 |
23815295b6db2d61103c309867589d60068dd39a61f0262a5b22aab3ec4be56e
|
File details
Details for the file ig_trading_lib-4.0.3-py3-none-any.whl.
File metadata
- Download URL: ig_trading_lib-4.0.3-py3-none-any.whl
- Upload date:
- Size: 37.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70da7ae7c2c9a3dee417f6270877c6164fa216ccdcfc627e898fcccb01680d33
|
|
| MD5 |
224e3b4c84a63ea449c4054b6c65369b
|
|
| BLAKE2b-256 |
4478d1e446fb9488f10cee314bae872a7e6643b7de59b9b4157ee9c6e23f4dd8
|