Skip to main content

sova-partner

PyPI Python License: MIT

Официальный Python SDK партнёрского API SOVA VPN — ресейл VPN-серверов и конфигов (WireGuard, AmneziaWG, VLESS Reality, Trojan, Shadowsocks, OpenVPN, SOCKS5, Tailscale) через простой типизированный клиент.

  • 🖥️ Серверы: заказ у провайдера (Inferno/UltaHost, 40+ стран), питание, переустановка, продление.
  • 🔑 Конфиги: мгновенный выпуск, ротация, отзыв (hard-revoke), метрики.
  • 💳 Биллинг: баланс, каталог/цены, пополнение (CryptoBot/USDT), лестница скидок.
  • 🔔 Вебхуки: проверка HMAC-подписи из коробки.
  • 🛡️ Идемпотентность заказа/выпуска/продления — автоматически.
  • 🧩 Sandbox: ключ sova_test_… — весь флоу без списаний и реальных VPS.

Установка

pip install sova-partner

Требует Python ≥ 3.8. Единственная зависимость — httpx.

Быстрый старт

from sova_partner import SovaPartner

sova = SovaPartner("sova_live_…")          # sova_test_… — песочница

# цена без покупки
print(sova.quote(pc=10, term_days=30)["prices"])

# заказать сервер и дождаться готовности (выдача 10 мин – 2 ч)
srv = sova.create_server(country="DE", pc=10, term_days=30)   # provider="inferno"/"ultahost" опц.
srv = sova.wait_for_server(srv["server_id"])

# выпустить конфиг — вернётся готовый .conf/URI
cfg = sova.issue_config(srv["server_id"], protocol="wireguard", name="ноутбук")
print(cfg["config"])

sova.rotate_config(cfg["config_id"])        # ротация ключей
sova.revoke_config(cfg["config_id"])        # отзыв (снимает пир на сервере)
sova.renew(srv["server_id"], term_days=30)  # продление

Idempotency-Key для create_server / issue_config / renew генерируется автоматически (можно передать свой через idempotency_key=).

Онбординг нового партнёра (без ключа)

from sova_partner import Onboarding

ob = Onboarding()
r = ob.register(name="Моя компания", password="…")     # -> claim_token
ob.deposit(r["claim_token"], amount=50)                # -> pay_url (CryptoBot)
# ob.deposit_usdt(r["claim_token"], amount=50)         # или прямой USDT TRC20
api_key = ob.wait_for_key(r["claim_token"])            # после оплаты -> первый ключ (ОДИН раз!)

Первый ключ выдаётся после депозита ≥ min_deposit. Крупный первый депозит даёт бонус на баланс (≥$300 +5% / ≥$1000 +10% / ≥$3000 +15%) и постоянную скидку.

Вебхуки — проверка подписи

from sova_partner import verify_signature

ok = verify_signature(
    secret=endpoint_secret,                        # выдан при create_webhook (один раз)
    signature_header=request.headers["X-Sova-Signature"],
    raw_body=request.body,                         # СЫРОЕ тело до JSON-парсинга
)
event    = request.headers["X-Sova-Event"]         # см. список ниже
event_id = request.headers["X-Sova-Event-Id"]      # дедуп (доставка at-least-once)

События: server.ready · server.failed · server.expiring · config.created · config.revoked · config.rotated · deposit.paid · balance.low.

Справочник методов

SovaPartner(api_key, base_url=…, timeout=30) — клиент по API-ключу:

Раздел Методы
Аккаунт balance() · catalog() · quote(pc/plan_id, term_days) · stats() · ledger()
Пополнение¹ deposit(amount) · deposit_usdt(amount) · deposit_usdt_status(id)
Ключи¹ list_keys() · create_key(mode, scopes, ip_allowlist) · revoke_key(id)
Серверы create_server(country, pc, …) · list_servers() · get_server(id) · wait_for_server(id) · server_metrics(id) · server_protocols(id) · power(id, action) · reinstall(id) · renew(id, term_days)
Конфиги issue_config(server_id, protocol, …) · list_configs(id) · get_config(id) · rename_config(id, name) · rotate_config(id) · revoke_config(id)
Вебхуки¹ create_webhook(url, events) · list_webhooks() · delete_webhook(id)
Поддержка¹ create_ticket(message, topic, server_id) · list_tickets()

Onboarding(base_url=…) — публичный флоу: register · deposit · deposit_usdt · status · wait_for_key.

¹ требует scope account:manage (в дефолтные ключи не входит — используйте вход в ЛК или ключ с этим правом).

Обработка ошибок

Все не-2xx поднимают исключение с .status и .code (машинный detail):

from sova_partner import SovaError, SovaInsufficientBalance, SovaAuthError, SovaRateLimited

try:
    sova.create_server(country="DE", pc=10)
except SovaInsufficientBalance:      # 402
    ...
except SovaAuthError as e:           # 401/403 (invalid_key / insufficient_scope / ip_not_allowed)
    print(e.code)
except SovaRateLimited:              # 429
    ...
except SovaError as e:               # 409 idempotency_key_reused, 404, …
    print(e.status, e.code)

Права ключа (scopes)

catalog:read · balance:read · vpn:read · vpn:issue · vpn:revoke · account:manage. Ключ можно ограничить по IP (ip_allowlist). Управление ключами/вебхуками/депозитами/тикетами требует account:manage.

Ссылки

Базовый URL по умолчанию — https://api.sova-vpn.online/partner/v1 (меняется параметром base_url).

MIT © SOVA VPN

Metadata

Release files for sova-partner 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sova-partner 0.1.1
File Size Uploaded Provenance
sova_partner-0.1.1.tar.gz 12.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for sova-partner 0.1.1
File Interpreter ABI Platform
sova_partner-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 23.7 kB

Release files / sova_partner-0.1.1.tar.gz

Download URL sova_partner-0.1.1.tar.gz
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
930922ca4b4297ac14bd06abd503312d4b27c5cf681e4b06fb14d6004ca7f124
BLAKE2b-256 checksum
How to use checksums
d7f406b2f084d53efe9836fa26c731d008f5a4bc830fb6d2127ec581d48849bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / sova_partner-0.1.1-py3-none-any.whl

Download URL sova_partner-0.1.1-py3-none-any.whl
Size 11.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b7f978a4ed07afb7d029dd02710f23f17e9f546e33840617e9aceae9e003eb90
BLAKE2b-256 checksum
How to use checksums
ffb190d7fb5af9a33bbb89d6b34fe557cfd12069ace981df50ee5b488db7e499
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Security for sova-partner 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page