Skip to main content

A modern async Python client library for Marzban VPN panel API

Project description

MarzbanAPILib

A modern, async Python client library for interacting with Marzban VPN panel API.

Features

  • 🚀 Async/await support - Built with modern Python async patterns
  • 📦 Modular design - Organized into logical sections for better maintainability
  • 🔐 Type hints - Full type annotation for better IDE support
  • Simple & intuitive - Easy to use API interface
  • 🛡️ Error handling - Comprehensive error handling with meaningful messages
  • 📚 Well documented - Detailed documentation for all methods

Installation

Install using pip:

pip install marzbanapilib

Quick Start

Authentication with Username/Password

import asyncio
from marzbanapilib import MarzbanAPI

async def main():
    # Create API client using username and password
    async with MarzbanAPI(
        base_url="http://127.0.0.1:8000",
        username="admin", 
        password="password"
    ) as api:
        # Get system statistics
        stats = await api.system.get_stats()
        print(f"Total users: {stats['total_user']}")
        
        # Create a new user
        user = await api.user.create_user({
            "username": "test_user",
            "proxies": {"vmess": {}, "vless": {}},
            "expire": 0,  # No expiration
            "data_limit": 0  # Unlimited
        })
        print(f"Created user: {user['username']}")

# Run the async function
asyncio.run(main())

Authentication with Access Token

import asyncio
from marzbanapilib import MarzbanAPI

async def main():
    # Use pre-existing access token (no username/password needed)
    async with MarzbanAPI(
        base_url="http://127.0.0.1:8000",
        access_token="your_jwt_token_here"
    ) as api:
        # Get system statistics
        stats = await api.system.get_stats()
        print(f"Total users: {stats['total_user']}")

asyncio.run(main())

Architecture

The library is organized into modular sections:

  • user - User management operations
  • admin - Admin management operations
  • system - System statistics and configuration
  • core - Xray core management
  • node - Multi-node management

Using Sections

async with MarzbanAPI(...) as api:
    # User operations
    await api.user.create_user(...)
    await api.user.get_users()
    await api.user.reset_data_usage("username")
    
    # System operations
    await api.system.get_stats()
    await api.system.get_inbounds()
    
    # Core operations
    await api.core.restart()
    await api.core.get_config()
    
    # Node operations
    await api.node.get_all()
    await api.node.create(...)

Advanced Usage

Manual Authentication

# With username/password
api = MarzbanAPI("http://127.0.0.1:8000", "admin", "password")
await api.authenticate()

# Or with access token
api = MarzbanAPI("http://127.0.0.1:8000", access_token="your_jwt_token")
await api.authenticate()

# Use the API
users = await api.user.get_users()

# Don't forget to close
await api.close()

Error Handling

from marzbanapilib import MarzbanAPI

async with MarzbanAPI(...) as api:
    try:
        user = await api.user.get_user("nonexistent")
    except ValueError as e:
        print(f"User not found: {e}")
    except httpx.HTTPStatusError as e:
        print(f"HTTP error: {e}")

Filtering Users

# Get active users with pagination
users = await api.user.get_users(
    offset=0,
    limit=50,
    status="active",
    sort="created_at"
)

API Reference

User Management

  • create_user(data) - Create new user
  • get_user(username) - Get user details
  • modify_user(username, data) - Modify user
  • delete_user(username) - Delete user
  • get_users(**filters) - List users with filters
  • reset_data_usage(username) - Reset user data usage
  • revoke_subscription(username) - Revoke user subscription
  • get_usage(username) - Get user usage statistics
  • And more...

System Management

  • get_stats() - Get system statistics
  • get_inbounds() - Get inbound configurations
  • get_hosts() - Get proxy hosts
  • modify_hosts(data) - Modify proxy hosts

Core Management

  • get_stats() - Get core statistics
  • restart() - Restart Xray core
  • get_config() - Get core configuration
  • modify_config(data) - Modify core configuration

Node Management

  • get_all() - List all nodes
  • create(data) - Create new node
  • get(node_id) - Get node details
  • modify(node_id, data) - Modify node
  • delete(node_id) - Delete node
  • reconnect(node_id) - Reconnect node
  • get_usage() - Get nodes usage statistics

Requirements

  • Python 3.7+
  • httpx
  • pydantic
  • aiofiles

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

For issues and feature requests, please use the GitHub issue tracker.

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

marzbanapilib-0.2.0.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

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

marzbanapilib-0.2.0-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file marzbanapilib-0.2.0.tar.gz.

File metadata

  • Download URL: marzbanapilib-0.2.0.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for marzbanapilib-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3aaacb5759385927c25b858b13adc6e48e72e3b8d7e90dfb680ed9ce00ad1035
MD5 0fef1ef3e0f447bd615265619e872a83
BLAKE2b-256 6145b5e2041ef58c127344120fbbcff68dea1c632eed59a4da0fea732ce69278

See more details on using hashes here.

File details

Details for the file marzbanapilib-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: marzbanapilib-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for marzbanapilib-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e4bd927356defcff7bacb90f8b78319ccc02bc54d15c8bbcdf4c7fa60cb87f22
MD5 8e42d87a30b75fda78638e1cf1666c85
BLAKE2b-256 467f9a549cc4e144af8eefeb09d6beaf69c6f582f429e0c275210863a90cad8f

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