fragment-api-dev
The focused Python SDK for buying Telegram Stars and Telegram Premium through Fragment.
- GRAM and USDT on TON
- No API key
- Automatic status polling
- Zero runtime dependencies
Install
pip install fragment-api-dev
Quick start
This example uses a 12-word wallet at account index 0. If you use a 24-word TON mnemonic or a Base64 32-byte private key, remove account_index.
import os
from fragment_api import FragmentAPI
api = FragmentAPI()
purchase = api.buy_stars(
username="@telegram_user",
amount=50,
payment_method="gram",
seed=os.environ["TON_WALLET_SEED"],
account_index=0, # Required for a 12-word seed
)
result = api.wait(purchase.purchase_id)
if result.completed:
print("Delivered:", result.transaction_hash)
else:
print("Not completed:", result.status, result.error)
The SDK generates an idempotency key automatically, submits the purchase, and provides a typed Purchase result.
12-word wallets
A 12-word wallet can contain many TON accounts. Tell the API which account pays:
| What you know | Send | What happens |
|---|---|---|
| Seed + wallet address | seed, wallet_address |
The API finds the index |
| Seed + account index | seed, account_index |
The API uses V5R1 at that index |
| Seed + address + index | all three | The API verifies and uses that exact wallet |
A 12-word seed alone is not enough. Send wallet_address or account_index.
wallet = api.resolve_wallet(
seed=os.environ["TON_WALLET_SEED"],
wallet_address=os.environ["TON_WALLET_ADDRESS"],
)
purchase = api.buy_stars(
username="@telegram_user",
amount=50,
payment_method="gram",
seed=os.environ["TON_WALLET_SEED"],
account_index=wallet.account_index,
)
If you already know the index, skip resolve_wallet() and pass account_index=0 (or your actual index). You may also pass wallet_address="UQ..." directly. The API searches indices 0..20 during a purchase and 0..100 through resolve_wallet().
For a 24-word TON mnemonic or Base64 32-byte private key, omit both wallet selectors.
Wallet selection errors
FragmentAPIError exposes code and action so your app can show the correct next step.
| Code | Client action |
|---|---|
WALLET_SELECTION_REQUIRED |
Add wallet_address or account_index |
INVALID_BIP39_SEED |
Check all 12 words and their order |
INVALID_WALLET_ADDRESS |
Send a valid TON friendly or raw address |
INVALID_ACCOUNT_INDEX |
Send an integer from 0 to 100 |
WALLET_ADDRESS_MISMATCH |
Remove the index to search, or correct it |
WALLET_INDEX_NOT_FOUND |
Call the resolver, then use its returned index |
WALLET_RESOLVER_BUSY |
Wait briefly and retry the same resolve request |
Prices
Get the 50-Stars reference price and Premium prices for 3, 6, and 12 months before showing a price to your customer:
catalog = api.get_prices()
print(catalog.stars.amount, catalog.stars.prices.gram, catalog.stars.prices.usdt)
quote = api.get_stars_price(100)
print(quote.prices.gram, quote.prices.usdt)
Use get_premium_price(3), get_premium_price(6), or get_premium_price(12) for Premium. Price values are strings to preserve their exact decimal value. A quote can have stale=True when the latest available quote is being served.
Telegram Premium
purchase = api.buy_premium(
username="@telegram_user",
months=3,
payment_method="usdt",
seed=os.environ["TON_WALLET_SEED"],
account_index=0, # Required for a 12-word seed
)
result = api.wait(purchase.purchase_id)
Premium durations are 3, 6, or 12 months.
Payments
| Value | Payment |
|---|---|
gram |
GRAM on TON |
usdt |
USDT on TON |
USDT purchases require a small GRAM balance for the network fee.
Public API
| Method | Purpose |
|---|---|
buy_stars() |
Buy 50 or more Telegram Stars |
buy_premium() |
Buy Telegram Premium |
create_purchase() |
Create a purchase with explicit product fields |
get_purchase() |
Read the latest purchase state |
get_prices() |
Read the 50-Stars reference and Premium price catalog |
get_price() |
Read a Stars or Premium quote |
get_stars_price() |
Read a Stars quote for 50 to 1,000,000 Stars |
get_premium_price() |
Read a quote for 3, 6, or 12 months of Premium |
resolve_wallet() |
Find the account index for a 12-word wallet |
wait() |
Poll until the purchase reaches a terminal state |
No authentication token or API key is required.
Links
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 fragment_api_dev-1.2.0.tar.gz.
File metadata
- Download URL: fragment_api_dev-1.2.0.tar.gz
- Upload date:
- Size: 14.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1406e2317b84ca47b97bac2a1999bf9ad785055430f6f1af1d7c9ca3044106e7
|
|
| MD5 |
174ac8bd2cb737b4092a589b9fa58577
|
|
| BLAKE2b-256 |
cc75f0b29a24e4179e7d4b0a226925c4dc5a9253d711804022ecd5e72bf92c5e
|
File details
Details for the file fragment_api_dev-1.2.0-py3-none-any.whl.
File metadata
- Download URL: fragment_api_dev-1.2.0-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e5693da40850233c1c62dc9cd3201b4589ef8971065306030458e4177188241
|
|
| MD5 |
b67e7d753d5eb614465a660ff1968ec4
|
|
| BLAKE2b-256 |
20b243fd92260cb69307a300f096bf9965414f42522b65026f1dddcd92447685
|