Skip to main content

Official Gunbot SDK for Python

Project description

Gunbot SDK logo

Gunbot SDK for Python

Python client for the Gunbot REST API for automated crypto‑/ETF‑/stock trading

PyPI License: MIT

Programmatically control Gunbot – the self‑hosted automated trading bot – from Python scripts, notebooks, CI jobs or serverless functions.


Key Features

  • 100 % OpenAPI 3.0 generated – every endpoint stays in sync with Gunbot Core
  • Typed models & services – PEP 561 compliant type hints for better IDE experience
  • Single source that works in CPython ≥ 3.9 and PyPy
  • Zero dynamic dependencies beyond the auto‑generated urllib3 stack
  • MIT‑licensed – free for commercial and open‑source use

Table of Contents

  1. Installation
  2. Quick Start
  3. Configuration
  4. Supported Exchanges
  5. API Coverage
  6. Type Hints
  7. Authentication
  8. Examples
  9. Troubleshooting
  10. Contributing
  11. License

Installation

# pip
to install: pip install gunbot-sdk-python
# poetry
poetry add gunbot-sdk-python
# pipenv
pipenv install gunbot-sdk-python

The distribution installs an import package named gunbot_sdk.


Quick Start

from datetime import datetime, timedelta
from gunbot_sdk import ApiClient, GunbotApi

# 1 – configure the shared ApiClient
api = ApiClient(
    base_path="http://localhost:3000/api/v1",   # ← REST base
    bearer_token="<JWT‑TOKEN>"                   # ← your bearer token
)

# 2 – create a service wrapper
gunbot = GunbotApi(api)

# 3 – call an endpoint
print("orders:", gunbot.orders("binance/USDT-BTC"))

Replace base_path and bearer_token with values from your own Gunbot deployment.

Documentation for every method is generated under docs/, and available on github pages: documentation.


Configuration

Option Default Description
base_path (parameter of ApiClient) http://localhost:3000/api/v1 Gunbot REST base path
bearer_token JWT from GUI localStorage or /auth/login
timeout (ApiClient kwarg) 60_000 ms Request timeout
user_agent (ApiClient kwarg) gunbot-sdk-python/<version> Custom UA header

Supported Exchanges

Gunbot ships with native connectors for 25 + exchanges.

Exchange Spot Futures / Perps DeFi (on‑chain) Extra notes
Binance ✔️ ✔️ (USD‑M & COIN‑M) Largest liquidity
Binance US ✔️ US‑regulated arm
Bitget ✔️ ✔️ (USDT & UM perps)
Bybit ✔️ ✔️ (USDT & inverse perps)
OKX ✔️ ✔️ (Perps & dated futures)
Kraken ✔️ ✔️ (via Kraken Futures)
KuCoin ✔️
Gate.io ✔️
MEXC ✔️
BingX ✔️
Crypto.com ✔️
Huobi Global ✔️
Bitfinex ✔️
HitBTC ✔️
Coinbase Advanced Trade ✔️ Former Coinbase Pro
CEX.io ✔️
Poloniex ✔️
Alpaca (stocks & crypto) ✔️
dYdX (v3/v4) ✔️ ✔️ Perpetual DEX
HyperLiquid ✔️ ✔️ ✔️ DeFi perps
PancakeSwap ✔️ ✔️ BSC DEX
Bitmex / Bitmex Testnet ✔️

API Coverage

This SDK targets Gunbot REST v1 (/api/v1), built from the official OpenAPI spec.

Tag / Section Status
Auth
Market Data
Orders
Strategy
Wallet
Exchange Mgmt

Type Hints

The wheel ships PEP 561 metadata so editors such as VS Code, PyCharm or Neovim (pylsp) show inline completions and docstrings.


Authentication

  • Bearer Token – easiest: copy from Gunbot GUI localStorage.jwtToken.
  • Password Encryption – To fetch a token programmatically, follow the Gunbot docs.
  • Always use HTTPS when connecting over public networks.

Examples

The code sets up the SDK client, creates a GunbotApi instance, and calls most of the available endpoints, so you can run it once to verify connectivity and see the expected argument patterns and raw responses. Use it as a reference checklist when integrating the SDK.

#!/usr/bin/env python3
"""
run_examples.py – complete parity demo for the Gunbot Python SDK
Requires:  pip install gunbot-sdk   (your renamed package)

HOW IT WORKS ------------------------------------------------------
1.  ApiClient sets REST base + Bearer token in one call.
2.  Every endpoint uses snake_case.
3.  POST/PUT endpoints take the JSON payload as 1st arg **body=...**.
4.  Path/query-only endpoints map exactly to their URL params.
-------------------------------------------------------------------
"""

from datetime import datetime, timedelta
from gunbot_sdk import ApiClient, GunbotApi


def ts(*, days: int = 0, hours: int = 0) -> int:
    """Return a UTC Unix timestamp in **milliseconds** with offset."""
    return int((datetime.utcnow() + timedelta(days=days, hours=hours)).timestamp() * 1000)


def main() -> None:
    # ───────────────── 1. CLIENT CONFIG ─────────────────
    api_client = ApiClient(
        base_path="http://localhost:3000/api/v1",
        bearer_token="<YOUR-JWT-HERE>",
    )

    # ───────────────── 2. SERVICE WRAPPER ───────────────
    gunbot = GunbotApi(api_client)

    # ───────────────── 3. EXAMPLES ──────────────────────
    # ---------- SYSTEM / AUTH ----------
    print("auth_status:", gunbot.auth_status())
    print("time:", gunbot.time())
    print("system_start:", gunbot.system_start())
    print("system_stop:", gunbot.system_stop())

    # ---------- CONFIGURATION ----------
    print("config_full:", gunbot.config_full())

    print("config_update:", gunbot.config_update(body={
        "data": {}      # full Gunbot config object
    }))

    print("config_pair_add:", gunbot.config_pair_add(body={
        "pair": "USDT-BTC",
        "exchange": "binance",
        "settings": {
            "strategy": "stepgrid",
            "enabled": True,
            "override": {
                "BUY_METHOD": "stepgrid",
                "SELL_METHOD": "stepgrid",
                "GAIN": "2",
            },
        },
    }))

    print("config_pair_remove:", gunbot.config_pair_remove(body={
        "pair": "USDT-BTC",
        "exchange": "binance",
    }))

    print("config_strategy_add:", gunbot.config_strategy_add(body={
        "name": "MY-STRATEGY",
        "settings": {"SOME_PARAM": True, "MORE_PARAMS": 2},
    }))

    print("config_strategy_remove:", gunbot.config_strategy_remove(body={
        "name": "MY-STRATEGY",
    }))

    # ---------- MARKET DATA ----------
    print("assets_total:", gunbot.assets_total(body={
        "exchange": "binance",
        "base": "USDT",
        "start": ts(days=-1),
        "end": ts(),
    }))

    print("chart_data:", gunbot.chart_data(body={
        "exchange": "binance",
        "pair": "USDT-BTC",
        "interval": "1h",
        "start": ts(days=-3),
        "end": ts(),
    }))

    print("chart_marks:", gunbot.chart_marks(
        "binance", "USDT-BTC", "1h", ts(days=-1), ts()
    ))

    print("market_candles:", gunbot.market_candles("binance/USDT-BTC"))
    print("market_orderbook:", gunbot.market_orderbook("binance/USDT-BTC"))

    # ---------- CORE MEMORY ----------
    print("coremem:", gunbot.coremem())

    print("coremem_request:", gunbot.coremem_request(body={
        "exchange": "binance",
        "pair": "USDT-BTC",
        "elements": [],
    }))

    print("coremem_single:", gunbot.coremem_single(body={
        "exchange": "binance",
        "pair": "USDT-BTC",
    }))

    # ---------- ORDERS ----------
    print("orders:", gunbot.orders("binance/USDT-BTC"))
    print("orders_page:", gunbot.orders_page("binance/USDT-BTC", 0, 50))
    print("orders_page_multi:", gunbot.orders_page_multi(
        ["binance/USDT-BTC", "binance/USDT-BTC"], 0, 100
    ))
    print("orders_day:", gunbot.orders_day("Europe/Berlin", ["binance/USDT-BTC"]))

    # ---------- BALANCES & PAIRS ----------
    print("balances:", gunbot.balances())
    print("pairs:", gunbot.pairs("binance"))
    print("pairs_detailed:", gunbot.pairs_detailed("binance"))

    # ---------- PNL ----------
    print("pnl_daily:", gunbot.pnl_daily("binance/USDT-BTC", ts(days=-1), ts()))
    print("pnl_daily_paginated:", gunbot.pnl_daily_paginated(
        "binance/USDT-BTC", 1, 30, ts()
    ))
    print("pnl_sum:", gunbot.pnl_sum("binance", ts(days=-7), ts()))
    print("pnl_total:", gunbot.pnl_total("binance/USDT-BTC"))

    print("pnl_overview:", gunbot.pnl_overview(body={
        "timezone": "Europe/Berlin",
        "keys": ["binance/USDT-BTC"],
    }))

    # ---------- FILES ----------
    print("files_state:", gunbot.files_state())
    print("files_strategy:", gunbot.files_strategy())

    print("files_strategy_write:", gunbot.files_strategy_write(body={
        "filename": "apistrat.js",
        "document": "full strategy as string",
    }))

    print("files_strategy_delete:", gunbot.files_strategy_delete(body={
        "filename": "apistrat.js",
    }))

    print("files_strategy_get:", gunbot.files_strategy_get(body={
        "filename": "mfi.js",
    }))

    print("files_acvar_get:", gunbot.files_acvar_get(body={
        "filename": "autoconfig-variables.json",
    }))

    print("files_acvar:", gunbot.files_acvar())

    print("files_autoconfig_write:", gunbot.files_autoconfig_write(body={
        # "document": {...}
    }))

    print("files_custom_editor_write:", gunbot.files_custom_editor_write(body={
        "document": {"test": True},
    }))

    print("files_custom_editor_get:", gunbot.files_custom_editor_get())
    print("files_backup:", gunbot.files_backup())

    print("files_backup_get:", gunbot.files_backup_get(body={
        "filename": "autoconfig.json.1623252417412",
    }))

    # ---------- TRADING ----------
    print("trade_buy:", gunbot.trade_buy(body={
        "exch": "binance",
        "pair": "USDT-BTC",
        "price": 100000,
        "amt": 0.001,
    }))

    print("trade_sell:", gunbot.trade_sell(body={
        "exch": "binance",
        "pair": "USDT-BTC",
        "price": 100000,
        "amt": 0.001,
    }))

    print("trade_buy_market:", gunbot.trade_buy_market(body={
        "exch": "binance",
        "pair": "USDT-BTC",
        "price": 100000,     # 0 if live trading
        "amt": 0.001,
    }))

    print("trade_sell_market:", gunbot.trade_sell_market(body={
        "exch": "binance",
        "pair": "USDT-BTC",
        "price": 100000,
        "amt": 0.001,
    }))


if __name__ == "__main__":
    main()

Troubleshooting

Symptom Checklist
401 Unauthorized ✓ Valid token? ✓ Correct base_path?
400 Bad Request ✓ Payload shape vs spec? ✓ Missing required param?
ConnectionRefused ✓ Gunbot core running? ✓ Port forwarded/open?

Set environment variable GUNBOT_SDK_DEBUG=1 for verbose request/response logs.


Contributing

  1. Fork → PR
  2. Follow Conventional Commits for commits & PR titles

License

MIT – see LICENSE.

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

gunbot_sdk_python-0.1.0.tar.gz (67.0 kB view details)

Uploaded Source

Built Distribution

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

gunbot_sdk_python-0.1.0-py3-none-any.whl (220.9 kB view details)

Uploaded Python 3

File details

Details for the file gunbot_sdk_python-0.1.0.tar.gz.

File metadata

  • Download URL: gunbot_sdk_python-0.1.0.tar.gz
  • Upload date:
  • Size: 67.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for gunbot_sdk_python-0.1.0.tar.gz
Algorithm Hash digest
SHA256 34cd726e93af8e66c04fa9a1f2f995d4f92e93825728e83d02140bbffdc3adcd
MD5 688e3f6da4a8be08b35ac4c350b49a20
BLAKE2b-256 c376379fda1a26f53393cc308282042c1173bad86282923a629f5d1e5f8eca7f

See more details on using hashes here.

File details

Details for the file gunbot_sdk_python-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gunbot_sdk_python-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bdd4842640dc8d9b299880eaae48796261728f907b75edffa87f38423e363e91
MD5 608ae1d342775d790d6762e708fb9e42
BLAKE2b-256 65c05fc2f5b03dbc30223d9d8f8f37ec2db2291890b388a7d94b0f388b711bc2

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