Skip to main content

Async-first typed client for the Midasbuy code-activation API — free tier included

Project description

midasbuy-sdk

Python-клиент для API активации кодов Midasbuy.

Есть бесплатный тариф: ключ выдаётся без регистрации и без оплаты. Это бета — лимиты временные и будут пересмотрены по её итогам.

pip install midasbuy-sdk

Как получить ключ

Напишите Telegram-боту @midasbuy_api_bot команду /free.

К заявке приложите ссылки на свои профили на площадках, где вы торгуете, и скриншоты-подтверждения. Это единственный барьер: он стоит не ради формальности, а чтобы бесплатные ключи не разошлись пачками по одноразовым аккаунтам.

Один бесплатный ключ в одни руки. Повторная заявка вернёт тот же ключ.

Первый вызов

Активация — задача про ожидание, а не про счёт: код уходит в Midas, и ответ приходит через секунды. Поэтому основной клиент асинхронный — пока одна активация идёт, остальные не стоят в очереди.

Методы сгруппированы по ресурсам: client.accounts, client.catalog, client.inventory, client.redeem, client.tasks, client.subscription.

import asyncio
from midasbuy_sdk import AsyncMidasbuyClient


async def main() -> None:
    async with AsyncMidasbuyClient("ваш-ключ") as client:
        # 1. подключите свой Midas-аккаунт — активировать нужно на него
        account = await client.accounts.connect(
            country="RU", email="you@example.com", password="..."
        )

        # 2. активируйте код и дождитесь результата — одним вызовом
        result = await client.redeem.activate_and_wait(
            "CODE-1234", account_id=account.account_id, game="pubgm"
        )
        print(result.status, result.granted_item)


asyncio.run(main())

Пачкой — ровно то, ради чего нужен async:

async with AsyncMidasbuyClient("ваш-ключ") as client:
    jobs = await asyncio.gather(*(
        client.redeem.activate(code, account_id="acc_...", game="pubgm")
        for code in codes
    ))
    rows = await client.redeem.status_batch([j.activation_id for j in jobs])

Синхронный клиент — то же самое без await, для скриптов и блокнотов, где событийный цикл дороже задачи:

from midasbuy_sdk import MidasbuyClient

with MidasbuyClient("ваш-ключ") as client:
    result = client.redeem.activate_and_wait(
        "CODE-1234", account_id="acc_...", game="pubgm"
    )

Что делает клиент за вас

Ключ идемпотентности. Каждый POST уходит с Idempotency-Key, и повтор использует тот же ключ. Поэтому таймаут или 429 не превращают одну активацию в две. Свой ключ можно передать явно — тогда и ваш собственный ретрай схлопнется в одну операцию:

client.redeem.activate("CODE-1234", account_id="acc_...", game="pubgm", idempotency_key="order-42")

Отступ при 429. Превышение темпа — это не ошибка, а обратное давление: клиент ждёт Retry-After и продолжает. Исключение RateLimited вы увидите только когда ретраи кончились.

Типизированные модели. Ответы — это pydantic-модели, собранные из контракта API, а не сырые словари: поля и их типы известны заранее.

Списки и страницы

Списковые методы возвращают Page: сами элементы плюс total и has_more. Чтобы пройти всё, не считая офсеты руками, — iterate:

async for activation in client.redeem.iterate(limit=100):
    ...

Ошибки

Каждая — отдельный тип, у всех есть code и request_id (его удобно цитировать в поддержке).

  • RateLimited — слишком быстро. Поле retry_after, ничего не потрачено.
  • DailyCapReached — исчерпан суточный потолок активаций, в reset_at время сброса.
  • AuthFailed — ключ не принят. Сервис намеренно не уточняет, почему.
  • OutOfStock — кода такого номинала нет в вашем стоке.
  • NotFound — объекта нет либо он чужой; API эти случаи не различает.
  • WaitTimeoutwait_for не дождался. Активация всё ещё выполняется: опросите redeem.get позже. Повторно активировать код нельзя — он спишется дважды.

Ресурсы

  • accountsconnect(country=, email=, password=) · list() · get(account_id)
  • cataloggames() · items(game) · get_item(item_id)
  • inventoryadd(items) · list() · stock()
  • redeemactivate(code, account_id=, game=) · activate_by_denomination(...) · activate_batch_by_denomination(...) · preview(...) · get(id) · list() · status_batch(ids) · wait_for(id) · activate_and_wait(...) · iterate()
  • tasksbatch(...) · package(...) · get(id) · list()
  • subscriptionget() — состояние ключа: статус, срок, темп, остаток квоты

Про бету

Пока идёт бета, ограничитель — темп запросов, а не суточная квота: упёршись, вы получаете 429, ждёте и продолжаете работать. Суточный потолок активаций тоже есть, но он аварийный.

По итогам беты числа будут пересмотрены, и часть возможностей станет платной — о том, какие именно, сказано заранее: доставка результатов вебхуками, ссылки для выдачи и второй подключённый Midas-аккаунт.

Лицензия

MIT.

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

midasbuy_sdk-0.2.0.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

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

midasbuy_sdk-0.2.0-py3-none-any.whl (31.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: midasbuy_sdk-0.2.0.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for midasbuy_sdk-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0e8888fde1c7b6ddc359ce8aeaf6d485ca3efce24a1b929f3905fffbe3090868
MD5 ffbd378ddc746a399d45bfacbcfda9ef
BLAKE2b-256 f7502f03d3cfeba1758500ec68f5c672f509b883e31732912d495b7e805e6589

See more details on using hashes here.

Provenance

The following attestation bundles were made for midasbuy_sdk-0.2.0.tar.gz:

Publisher: publish.yml on zlexdev/midasbuy-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: midasbuy_sdk-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 31.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for midasbuy_sdk-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 168e72c5fe0ffd364c3122641f8f201f09bac965fa8304d4a04c45886bcf67e7
MD5 bd05fc71db92484242d7fa915b071a1f
BLAKE2b-256 dbbb29f026995ef29a32902f5ae1cf1e21c91b201d2fdf085758365ab12deceb

See more details on using hashes here.

Provenance

The following attestation bundles were made for midasbuy_sdk-0.2.0-py3-none-any.whl:

Publisher: publish.yml on zlexdev/midasbuy-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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