A comprehensive Python SDK for managing Marzban panel (Gozargah/Marzban) through its REST API.
- Complete English Documentation - Full guide with examples and best practices
- Complete Persian Documentation (فارسی) - راهنمای کامل با مثالها و بهترین روشها
- Complete Chinese Documentation (中文) - 完整指南,包含示例和最佳实践
- ✅ Complete API coverage for all Marzban endpoints
- ✅ Admin management (create, modify, remove admins)
- ✅ User management (CRUD operations, usage tracking)
- ✅ Node management (add, modify, remove, reconnect nodes)
- ✅ Core configuration and statistics
- ✅ System statistics and monitoring
- ✅ User template management
- ✅ Subscription management
- ✅ Comprehensive error handling
- ✅ Type hints for better IDE support
pip install sarbanfrom sarban import SARBAN
from sarban.errors import BadLogin
# Initialize the client
sb = SARBAN(
full_address="https://your-marzban-panel.com:2087",
https=True
)
# Login
try:
sb.login("admin_username", "admin_password")
print("Login successful!")
except BadLogin:
print("Invalid credentials")login()- Authenticate and get access token
get_current_admin()- Get current authenticated admincreate_admin()- Create a new adminget_admins()- Get list of adminsmodify_admin()- Modify admin detailsremove_admin()- Remove an admindisable_all_active_users()- Disable all active users under adminactivate_all_disabled_users()- Activate all disabled users under adminreset_admin_usage()- Reset admin usageget_admin_usage()- Get admin usage statistics
get_client()- Get user by usernameget_client_by_subLink()- Get user by subscription tokenadd_client()- Add a new useredit_client()- Modify existing userdelete_client()- Remove a userget_users()- Get list of users with filtersreset_user_data_usage()- Reset user data usagerevoke_user_subscription()- Revoke user subscriptionget_user_usage()- Get user usage statisticsactive_next_plan()- Activate next plan for userset_owner()- Set owner (admin) for userreset_users_data_usage()- Reset all users data usageget_users_usage()- Get all users usage statisticsget_expired_users()- Get expired usersdelete_expired_users()- Delete expired users
get_node_settings()- Get node settingsadd_node()- Add a new nodeget_node()- Get node by IDget_nodes()- Get all nodesmodify_node()- Modify node detailsremove_node()- Remove a nodereconnect_node()- Reconnect a nodeget_usage()- Get nodes usage statistics
get_core_stats()- Get core statisticsrestart_core()- Restart the coreget_core_config()- Get core configurationmodify_core_config()- Modify core configuration
get_system_stats()- Get system statisticsget_inbounds()- Get inbound configurationsget_hosts()- Get proxy hostsmodify_hosts()- Modify proxy hosts
add_user_template()- Add a new user templateget_user_templates()- Get list of user templatesget_user_template()- Get user template by IDmodify_user_template()- Modify user templateremove_user_template()- Remove user template
user_subscription()- Get user subscriptionuser_subscription_info()- Get subscription infouser_get_usage()- Get subscription usageuser_subscription_with_client_type()- Get subscription by client type
The SDK provides comprehensive error handling:
from sarban.errors import (
BadLogin,
Unauthorized,
Forbidden,
NotFound,
Conflict,
BadRequest,
ValidationError,
HTTPException
)
try:
user = sb.get_client(username="nonexistent")
except NotFound:
print("User not found")
except Unauthorized:
print("Not authenticated")
except Forbidden:
print("Access denied")from sarban.sub_gen import sub_generator
subscription_link = sub_generator(
userToken="token",
fullAddress="sub.example.com:2096",
verify=True
)from sarban import SARBAN
sb = SARBAN(full_address="https://panel.example.com:2087", https=True)
sb.login("admin", "password")
# Get all users
users = sb.get_users(limit=10)
# Add a new user
new_user = sb.add_client(
username="test_user",
inboundTag=["VLESS_INBOUND"],
total_gb=10,
expire_time=1735689600
)
# Get system stats
stats = sb.get_system_stats()
print(f"Total users: {stats['total_user']}")
print(f"Online users: {stats['online_users']}")MIT License
liwyd
Contributions are welcome! Please feel free to submit a Pull Request.