{"id":22244334,"url":"https://github.com/mewhrzad/marzpy","last_synced_at":"2025-07-28T02:32:20.134Z","repository":{"id":195606945,"uuid":"693361166","full_name":"mewhrzad/marzpy","owner":"mewhrzad","description":"A Python library that helps you easily use Marzban's API panel","archived":false,"fork":false,"pushed_at":"2024-08-21T21:03:22.000Z","size":67,"stargazers_count":111,"open_issues_count":8,"forks_count":31,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-07-06T14:05:20.137Z","etag":null,"topics":["api","library","marzban","marzban-api-python","python","python-marzban","python-marzban-api","vpn"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mewhrzad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-18T22:00:28.000Z","updated_at":"2025-06-25T19:25:13.000Z","dependencies_parsed_at":"2024-04-18T15:41:08.260Z","dependency_job_id":"884b2e90-d230-4397-83f5-5d6d029e3078","html_url":"https://github.com/mewhrzad/marzpy","commit_stats":null,"previous_names":["mewhrzad/marzpy"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/mewhrzad/marzpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewhrzad%2Fmarzpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewhrzad%2Fmarzpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewhrzad%2Fmarzpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewhrzad%2Fmarzpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mewhrzad","download_url":"https://codeload.github.com/mewhrzad/marzpy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewhrzad%2Fmarzpy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267453930,"owners_count":24089844,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","library","marzban","marzban-api-python","python","python-marzban","python-marzban-api","vpn"],"created_at":"2024-12-03T04:35:46.684Z","updated_at":"2025-07-28T02:32:19.821Z","avatar_url":"https://github.com/mewhrzad.png","language":"Python","funding_links":[],"categories":["🔥 Awesome [Marzban](https://github.com/Gozargah/Marzban)","API"],"sub_categories":["API","Другие скрипты"],"readme":"# marzpy\nA Python library that helps you easily use [Marzban](https://github.com/Gozargah/Marzban)'s API panel\n\u003e[!IMPORTANT]\n\u003e**Status:** Working on new update 🔥\n## installation\n```shell\npip install marzpy --upgrade\n```\nrequirements : ```aiohttp```\n# How To Use\n```python\nfrom marzpy import Marzban\nimport asyncio\n        \nasync def main():\n    panel = Marzban(\"username\",\"password\",\"https://example.com\")\n    token = await panel.get_token()\n    #await panel.anyfunction(token)\n\nasyncio.run(main())\n\n```\n# Features\n\n- Admin\n    - [get token](#get-token)\n    - [get admin](#get-current-admin)\n    - [create admin](#create-admin)\n    - [modify admin](#modify-admin)\n    - [remove admin](#remove-admin)\n    - [get all admins](#get-all-admins)\n- Subscription\n    - [user subscription](#user-subscription)\n    - [user subscription info](#user-subscription-info)\n- System\n    - [get system stats](#get-system-stats)\n    - [get inbounds](#get-inbounds)\n    - [get hosts](#get-hosts)\n    - [modify hosts](#modify-hosts)\n- Core\n    - [get core stats](#get-core-stats)\n    - [restart core](#restart-core)\n    - [get core config](#get-core-config)\n    - [modify core config](#modify-core-config)\n- User\n    - [add user](#add-user)\n    - [get user](#get-user)\n    - [modify user](#modify-user)\n    - [remove user](#remove-user)\n    - [reset user data usage](#reset-user-data-usage)\n    - [reset all users data usage](#reset-all-users-data-usage)\n    - [get all users](#get-all-users)\n    - [get user usage](#get-user-usage)\n- User Template\n    - [get all user templates](#get-all-user-templates)\n    - [add user template](#add-user-template)\n    - [get user template](#get-user-template)\n    - [modify user template](#modify-user-template)\n    - [remove user template](#remove-user-template)\n- Node\n    - [add node](#add-node)\n    - [get node](#get-node)\n    - [modify node](#modify-node)\n    - [remove node](#remove-node)\n    - [get all nodes](#get-all-nodes)\n    - [reconenct node](#reconenct-node)\n    - [get all nodes usage](#get-node-usage)\n\n## Thanks To \n- [ErfanTech](https://github.com/ErfanTech) :laughing:\n\n# Contributors\n\u003ca href=\"https://github.com/mewhrzad/marzpy/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=mewhrzad/marzpy\"/\u003e\n\u003c/a\u003e\n\n# Examples\n### Get Token\n```python\n\nfrom marzpy import Marzban\n\npanel = Marzban(\"username\",\"password\",\"https://example.com\")\n\nmytoken = await panel.get_token()\n\n```\n### Get Current admin\n```python\nadmin = await panel.get_current_admin(token=mytoken)\nprint(admin) #output: {'username': 'admin', 'is_sudo': True}\n```\n### Create Admin\n```python\ninfo = {'username':'test','password':'pasword','is_sudo':False}\nrsault = await panel.create_admin(token=mytoken,data=info)\nprint(result) #output: success\n```\n### Modify Admin\n```python\ntarget_admin = \"test\"\ninfo = {'password':'newpassword','is_sudo':False}\nresult = await panel.change_admin_password(username=target_admin,token=mytoken,data=info)\nprint(result) #output: success\n```\n### Remove Admin\n```python\ntarget_admin = \"test\"\nresult = await panel.delete_admin(username=target_admin,token=mytoken)\nprint(result) #output: success\n```\n### Get All Admins\n```python\nresult = await panel.get_all_admins(token=mytoken)\nprint(result) \n#output: [{'username': 'test', 'is_sudo': True}, {'username': 'test1', 'is_sudo': False}]\n```\n### User Subscription\n```python\nsubscription_url = \"https://sub.yourdomain.com/sub/eyJhbGciOiJIUzI8NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJNbWRDcmFaeSIsImFjY2VzcyI8InN1YnNjcmlwdGlvbiIsImlhdCI1MTY5NDk1NTkxMH0.o75ML5835SPXpVPKXcvEIUxMTwSy-4XGS9NIdWOAmXY\"\nresult = await panel.get_subscription(subscription_url)\nprint(result) #output: Configs\n```\n### User Subscription info\n```python\nsubscription_url =  \"https://sub.yourdomain.com/sub/eyJhbGciOiJIUzI8NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJNbWRDcmFaeSIsImFjY2VzcyI8InN1YnNjcmlwdGlvbiIsImlhdCI1MTY5NDk1NTkxMH0.o75ML5835SPXpVPKXcvEIUxMTwSy-4XGS9NIdWOAmXY\"\nresult = await panel.get_subscription_info(subscription_url)\nprint(result) #output: User information (usage,links,inbounds,....)\n```\n### Get System Stats\n```python\nresult = await panel.get_system_stats(token=mytoken)\nprint(result) #output: system stats Memory \u0026 CPU usage ...\n```\n### Get Inbounds\n```python\nresult = await panel.get_inbounds(token=mytoken)\nprint(result) #output: list of inbounds\n```\n### Get Hosts\n```python\nresult = await panel.get_hosts(token=mytoken)\nprint(result) #output: list of hosts\n```\n### Modify Hosts\n```python\nhosts = {\n  \"VMess TCP\": [\n    {\n      \"remark\": \"somename\",\n      \"address\": \"someaddress\",\n      \"port\": 0,\n      \"sni\": \"somesni\",\n      \"host\": \"somehost\",\n      \"security\": \"inbound_default\",\n      \"alpn\": \"\",\n      \"fingerprint\": \"\"\n    }\n  ]\n}\n# **Backup first**\nresult = await panel.modify_hosts(token=mytoken,data=hosts)\nprint(result) #output: hosts\n```\n### Get Core Stats\n```python\nresult = await panel.get_xray_core(token=mytoken)\nprint(result)\n #output: {'version': '1.8.1', 'started': True, 'logs_websocket': '/api/core/logs'}\n```\n### Restart Core\n```python\nresult = await panel.restart_xray_core(token=mytoken)\nprint(result)\n #output: success\n```\n### Get Core Config\n```python\nresult = await panel.get_xray_config(token=mytoken)\nprint(result) #output: your xray core config\n```\n### Modify Core Config\n```python\nnew_config={\"your config\"}\nresult = await panel.modify_xray_config(token=mytoken,config=new_config)\nprint(result) #output: success\n```\n### Add User\n```python\nfrom marzpy.api.user import User\n\nuser = User(\n    username=\"Mewhrzad\",\n    proxies={\n        \"vmess\": {\"id\": \"35e7e39c-7d5c-1f4b-8b71-508e4f37ff53\"},\n        \"vless\": {\"id\": \"35e7e39c-7d5c-1f4b-8b71-508e4f37ff53\"},\n    },\n    inbounds={\"vmess\": [\"VMess TCP\"], \"vless\": [\"VLESS TCP REALITY\"]},\n    expire=0,\n    data_limit=0,\n    data_limit_reset_strategy=\"no_reset\",\n    status=\"active\"\n)\nresult = await panel.add_user(user=user, token=token) #return new User object\n\nprint(result.username) #-\u003e Mewhrzad, #user.proxies, #user.inbounds, #user.expire, #user.data_limit, #userdata_limit_reset_strategy, #user.status, #user.used_traffic, #user.lifetime_used_traffic, #user.created_at, #user.links, #user.subscription_url, #user.excluded_inbounds\n```\n### Get User\n```python\nresult = await panel.get_user(\"Mewhrzad\",token=mytoken) #return User object\nprint(result.subscription_url)\n```\n### Modify User\n```python\nnew_user = User(\n    username=\"test\",\n    proxies={\n        \"vmess\": {\"id\": \"35e4e39c-7d5c-4f4b-8b71-558e4f37ff53\"},\n        \"vless\": {\"id\": \"35e4e39c-7d5c-4f4b-8b71-558e4f37ff53\"},\n    },\n    inbounds={\"vmess\": [\"VMess TCP\"], \"vless\": [\"VLESS TCP REALITY\"]},\n    expire=0,\n    data_limit=0,\n    data_limit_reset_strategy=\"no_reset\",\n    status=\"active\",\n)\nresult = await panel.modify_user(\"Mewhrzad\", token=mytoken, user=new_user)\nprint(result.subscription_url) #output: modified user object\n```\n### Remove User\n```python\nresult = await panel.delete_user(\"test\", token=mytoken)\nprint(result) #output: success\n```\n### Reset User Data Usage\n```python\nresult = await panel.reset_user_traffic(\"test\", token=mytoken)\nprint(result) #output: success\n```\n### Reset All Users Data Usage\n```python\nresult = await panel.reset_all_users_traffic(token=mytoken)\nprint(result) #output: success\n```\n### Get All Users\n```python\nresult = await panel.get_all_users(token=mytoken) #return list of users\nfor user in result:\n    print(user.username) \n```\n### Get User Usage\n```python\nresult = await panel.get_user_usage(\"mewhrzad\",token=mytoken)\nprint(result) \n#output: [{'node_id': None, 'node_name': 'MTN', 'used_traffic': 0}, \n#{'node_id': 1, 'node_name': 'MCI', 'used_traffic': 0}]\n```\n### Get All User Templates\n```python\nresult = await panel.get_all_templates(token=mytoken) #return template list object\nfor template in result:\n    print(template.name)\n```\n### Add User Template\n```python\nfrom marzpy.api.template import Template\n\ntemp = Template(\n    name=\"new_template\",\n    inbounds={\"vmess\": [\"VMESS TCP\"], \"vless\": [\"VLESS TCP REALITY\"]},\n    data_limit=0,\n    expire_duration=0,\n    username_prefix=None,\n    username_suffix=None,\n)\nresult = await panel.add_template(token=mytoken, template=temp)  # return new Template object\nprint(result.name) #output: new_template\n```\n### Get User Template\n```python\ntemplate_id = 11\nresult = await panel.get_template_by_id(token=mytoken, id=template_id) # return Template object\nprint(result.name) #output: new_template\n```\n### Modify User Template\n```python\nfrom marzpy.api.template import Template\n\ntemp = Template(\n    name=\"new_template2\",\n    inbounds={\"vmess\": [\"VMESS TCP\"], \"vless\": [\"VLESS TCP REALITY\"]},\n    data_limit=0,\n    expire_duration=0,\n    username_prefix=None,\n    username_suffix=None,\n)\nresult = await panel.modify_template_by_id(\n    id=1, token=mytoken, template=temp)  # return Modified Template object\nprint(result.name) #output: new_template2\n```\n### Remove User Template\n```python\nresult = await panel.delete_template_by_id(id=1, token=mytoken)\nprint(result) #output: success\n```\n### Add Node\n```python\nfrom marzpy.api.node import Node\n\nmy_node = Node(\n    name=\"somename\",\n    address=\"test.example.com\",\n    port=62050,\n    api_port=62051,\n    certificate=\"your_cert\",\n    id=4,\n    xray_version=\"1.8.1\",\n    status=\"connected\",\n    message=\"string\",\n)\n\nresult = await panel.add_node(token=mytoken, node=my_node)  # return new Node object\nprint(result.address)\n```\n### Get Node\n```python\nresult = await panel.get_node_by_id(id=1, token=mytoken)  # return exist Node object\nprint(result.address) #output: address of node 1\n```\n### Modify Node\n```python\nfrom marzpy.api.node import Node\n\nmy_node = Node(\n    name=\"somename\",\n    address=\"test.example.com\",\n    port=62050,\n    api_port=62051,\n    certificate=\"your_cert\",\n    id=4,\n    xray_version=\"1.8.1\",\n    status=\"connected\",\n    message=\"string\",\n)\n\nresult = await panel.modify_node_by_id(id=1, token=mytoken,node=my_node)  # return modified Node object\nprint(result.address) #output:test.example.com\n```\n### Remove Node\n```python\nresult = await panel.delete_node(id=1, token=mytoken)\nprint(result) #output: success\n```\n### Get All Nodes\n```python\nresult = await panel.get_all_nodes(token=mytoken)  # return List of Node object\nfor node in result:\n    print(node.address)\n```\n### Reconenct Node\n```python\nresult = await panel.reconnect_node(id=1,token=mytoken)\nprint(result) #output: success\n```\n### Get Node Usage\n```python\nresult = await panel.get_nodes_usage(token=mytoken)\nfor node in result:\n    print(node)\n#output:{'node_id': 1, 'node_name': 'N1', 'uplink': 1000000000000, 'downlink': 1000000000000}\n# {'node_id': 2, 'node_name': 'N2', 'uplink': 1000000000000, 'downlink': 1000000000000}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmewhrzad%2Fmarzpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmewhrzad%2Fmarzpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmewhrzad%2Fmarzpy/lists"}