Skip to main content

Sync and Async Object-oriented Python SDK for the 3x-ui app.

Project description

Sync and Async Object-oriented Python SDK for the 3x-ui API.

OverviewCompatibility TableQuick StartExamplesBugs and Feature RequestsPyPI

GitHub release (latest SemVer) GitHub issues Build Status Checked with mypy PyPI - Downloads
PyPI - Python Version PyPI - Version Maintainability Test Coverage

Overview

This SDK is designed to interact with the 3x-ui app in a more object-oriented way. It provides both synchronous and asynchronous methods to interact with the app. The SDK is designed to be as simple as possible to use, while still providing a lot of flexibility and uses Pydantic models to validate the data.
Used dependencies:

  • requests for synchronous API
  • httpx for asynchronous API
  • pydantic for models

Supported Python versions:

  • 3.11
  • 3.12

Compatibility Table

Since the 3x-ui app is under development, the SDK may not be compatible with all versions of the app. The table below shows the compatibility between the SDK and the 3x-ui app. Since the developer of SDK is not related to the 3x-ui app, the latest versions of the software are not guaranteed to be compatible with the SDK. It's recommended to use the specified versions of the software to avoid any issues.

py3xui Version 3x-ui Version
>=0.2.2 >=2.3.9, <=2.3.11
0.2.1 >=2.3.7

The SDK does not support older versions of the 3x-ui app.

Quick Start

You can use both synchronous and asynchronous methods to interact with the 3x-ui app. Both APIs have the same methods and return the same data, so it's up to you to choose which one to use.
After installing the SDK, you can create a new instance of the API. When creating a new instance, you can either use environment variables or pass the credentials directly. It's strongly recommended to use environment variables to store the API credentials.
On creation, the Api won't connect to the 3x-ui app, so you can spawn new instances without spending resources. But after creating an instance, you'll need to call the login method to authenticate the user and save the cookie for future requests.

Installation

pip install py3xui

Create a new instance of the SDK

It's recommended to use an environment variable to store the API credentials:

import os

os.environ["XUI_HOST"] = "http://your-3x-ui-host.com:2053"
os.environ["XUI_USERNAME"] = "your-username"
os.environ["XUI_PASSWORD"] = "your-password"

To work synchronously:

from py3xui import Api

# Using environment variables:
api = Api.from_env()

# Or using the credentials directly:
api = Api("http://your-3x-ui-host.com:2053", "your-username", "your-password")

To work asynchronously:

from py3xui import AsyncApi

# Using environment variables:
api = AsyncApi.from_env()

# Or using the credentials directly:
api = AsyncApi("http://your-3x-ui-host.com:2053", "your-username", "your-password")

*️⃣ If you're using a custom URI Path, ensure that you've added it to the host, for example:
If your host is http://your-3x-ui-host.com:2053 and the URI Path is /test/, then the host should be http://your-3x-ui-host.com:2053/test/.
Otherwise, all API requests will fail with a 404 error.

Login

No matter which API you're using or if was it created using environment variables or credentials, you'll need to call the login method to authenticate the user and save the cookie for future requests.

from py3xui import Api, AsyncApi

api = Api.from_env()
api.login()

async_api = AsyncApi.from_env()
await async_api.login()

Examples

You'll find detailed docs with usage examples for both APIs and for used models in the corresponding package directories:

In this section, you'll find some examples of how to use the SDK. In the examples, we'll use the synchronous API, but you can use the asynchronous API in the same way, just remember to use await before calling the methods.

Get inbounds list

from py3xui import Api, Inbound

api = Api.from_env()
api.login()
inbounds: List[Inbound] = api.inbound.get_list()

Add a new inbound

from py3xui import Api
from py3xui.inbound import Inbound, Settings, Sniffing, StreamSettings

api = Api.from_env()
api.login()

settings = Settings()
sniffing = Sniffing(enabled=True)

tcp_settings = {
    "acceptProxyProtocol": False,
    "header": {"type": "none"},
}
stream_settings = StreamSettings(security="reality", network="tcp", tcp_settings=tcp_settings)

inbound = Inbound(
    enable=True,
    port=443,
    protocol="vless",
    settings=settings,
    stream_settings=stream_settings,
    sniffing=sniffing,
    remark="test3",
)

api.inbound.add(inbound)

Get a client by email

from py3xui import Api, Client

api = Api.from_env()
api.login()

client: Client = api.client.get_by_email("some-email")

Add a new client

from py3xui import Api, Client

api = Api.from_env()
api.login()

new_client = Client(id=str(uuid.uuid4()), email="test", enable=True)
inbound_id = 1

api.client.add(inbound_id, [new_client])

Bugs and Feature Requests

If you find a bug or have a feature request, please open an issue on the GitHub repository.
You're also welcome to contribute to the project by opening a pull request.

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

py3xui-0.2.3.tar.gz (27.8 kB view details)

Uploaded Source

Built Distribution

py3xui-0.2.3-py3-none-any.whl (34.4 kB view details)

Uploaded Python 3

File details

Details for the file py3xui-0.2.3.tar.gz.

File metadata

  • Download URL: py3xui-0.2.3.tar.gz
  • Upload date:
  • Size: 27.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for py3xui-0.2.3.tar.gz
Algorithm Hash digest
SHA256 6e47f4ba32814c62c1fe8f7e6c7dd0257f2ddbd8e8dce697f33f53a944b9db01
MD5 0528161afcb84eb0bae2f2625d861260
BLAKE2b-256 8e93659edce0acb9008a76addbc8d4f8fb55fceb20094deb1fb7e9570e406263

See more details on using hashes here.

File details

Details for the file py3xui-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: py3xui-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 34.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for py3xui-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 841785bd5b529db02c18ed315fd26bcc57e7bfdf5eeec48bba24f5679af2cc56
MD5 2d48ad711184133cc8d973c23d3a42dc
BLAKE2b-256 67a38e757caa5c0408a94a91ae4af666ef04c3e1e16c39ff7e05a6a3d430da7e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page