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 эти случаи не различает.WaitTimeout—wait_forне дождался. Активация всё ещё выполняется: опроситеredeem.getпозже. Повторно активировать код нельзя — он спишется дважды.
Ресурсы
- accounts —
connect(country=, email=, password=)·list()·get(account_id) - catalog —
games()·items(game)·get_item(item_id) - inventory —
add(items)·list()·stock() - redeem —
activate(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() - tasks —
batch(...)·package(...)·get(id)·list() - subscription —
get()— состояние ключа: статус, срок, темп, остаток квоты
Про бету
Пока идёт бета, ограничитель — темп запросов, а не суточная квота:
упёршись, вы получаете 429, ждёте и продолжаете работать. Суточный потолок
активаций тоже есть, но он аварийный.
По итогам беты числа будут пересмотрены, и часть возможностей станет платной — о том, какие именно, сказано заранее: доставка результатов вебхуками, ссылки для выдачи и второй подключённый Midas-аккаунт.
Лицензия
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e8888fde1c7b6ddc359ce8aeaf6d485ca3efce24a1b929f3905fffbe3090868
|
|
| MD5 |
ffbd378ddc746a399d45bfacbcfda9ef
|
|
| BLAKE2b-256 |
f7502f03d3cfeba1758500ec68f5c672f509b883e31732912d495b7e805e6589
|
Provenance
The following attestation bundles were made for midasbuy_sdk-0.2.0.tar.gz:
Publisher:
publish.yml on zlexdev/midasbuy-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
midasbuy_sdk-0.2.0.tar.gz -
Subject digest:
0e8888fde1c7b6ddc359ce8aeaf6d485ca3efce24a1b929f3905fffbe3090868 - Sigstore transparency entry: 2256203494
- Sigstore integration time:
-
Permalink:
zlexdev/midasbuy-sdk@280032d783360f742a75a4caa5ad1081bfb9175e -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/zlexdev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@280032d783360f742a75a4caa5ad1081bfb9175e -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
168e72c5fe0ffd364c3122641f8f201f09bac965fa8304d4a04c45886bcf67e7
|
|
| MD5 |
bd05fc71db92484242d7fa915b071a1f
|
|
| BLAKE2b-256 |
dbbb29f026995ef29a32902f5ae1cf1e21c91b201d2fdf085758365ab12deceb
|
Provenance
The following attestation bundles were made for midasbuy_sdk-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on zlexdev/midasbuy-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
midasbuy_sdk-0.2.0-py3-none-any.whl -
Subject digest:
168e72c5fe0ffd364c3122641f8f201f09bac965fa8304d4a04c45886bcf67e7 - Sigstore transparency entry: 2256203504
- Sigstore integration time:
-
Permalink:
zlexdev/midasbuy-sdk@280032d783360f742a75a4caa5ad1081bfb9175e -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/zlexdev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@280032d783360f742a75a4caa5ad1081bfb9175e -
Trigger Event:
push
-
Statement type: