bluapi
Python client for the Blu Bank HTTP API.
The bank's own gateway speaks protobuf over HTTP/2 and only answers from an
Iranian IP, so the protocol is handled by the companion
blu-api server. This package is a
thin, typed client for that server.
pip install bluapi
Use
Start the server first (see the blu-api README), then:
import bluapi
with bluapi.Client() as blu:
print(blu.balance()["total"])
print(blu.owner("6104335551234567"))
Client defaults to http://127.0.0.1:8088, or $BLU_API_URL when set. Pass
api_key= (or set $BLU_API_KEY) if the server was started with BLU_API_KEY.
Session
blu.login("username", "password") # otpRequired: true on a fresh device
blu.otp("123456") # only then
blu.logout()
A device the bank has already trusted logs in without a code, and the server renews the token silently, so in practice you log in once.
Money
blu.transfer(1000, "6104335551234567") # card to card
blu.transfer(1000, "IR000560611828001111111101", method=bluapi.PAYA)
Amounts are IRR. Source and destination must differ, so the account's own Blu card cannot be the destination. This moves real money.
Everything else
blu.status() blu.profile() blu.balances()
blu.cards() blu.all_cards() blu.transactions()
blu.recent_transfers() blu.scheduled_transfers()
blu.banks() blu.contacts() blu.cheques()
blu.cashback_categories() blu.cashback_vendors()
blu.recent_charges() blu.recent_internet_packages()
blu.favorite_bills() blu.banners() blu.onboarding()
blu.junior() blu.identities() blu.processed_cards()
blu.transfer_get(id) blu.transfer_cancel(id)
Responses are the server's JSON. Gateway payloads are protobuf on the wire and arrive as nested dicts keyed by field number.
Raw routes
blu.raw(
"account/deposit/list/all",
"solutions.saman.bluebank.services.AccountListAllRequest",
"solutions.saman.bluebank.services.AccountListAllResponse",
)
Errors
ApiError carries status and payload. GatewayError is a subclass raised
when the bank itself rejected the call, and carries detail. Both derive from
BluApiError.
try:
blu.owner("0000000000000000")
except bluapi.GatewayError as exc:
print(exc.status, exc.detail)
Command line
bluapi status
bluapi balance
bluapi call owner 6104335551234567
Notes
- Python 3.8+, standard library only.
- The server is single-account: whichever session is active answers.
transfer_getandtransfer_cancelonly resolve ids from the two-steptransfer/init+submitflow, so an id fromtransfer()usually answers 404 or 500.
License
MIT.
Metadata
Release files for bluapi 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| bluapi-0.1.0.tar.gz | 8.1 kB | Without provenance | Details for bluapi-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| bluapi-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for bluapi-0.1.0-py3-none-any.whl |
Total release size: 18.4 kB
Release files / bluapi-0.1.0.tar.gz
| Download URL | bluapi-0.1.0.tar.gz |
|---|---|
| Size | 8.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a475882ebc9fde2f7438ce0d020e03db242ec104248dc5eb965996b661569549
|
|
BLAKE2b-256 checksum How to use checksums |
f35f1b45b438ed5a5f2ee62b773f11e28dc9693aa4366eac0873fc73bd7568d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Release files / bluapi-0.1.0-py3-none-any.whl
| Download URL | bluapi-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
07278cd2e6a8787d7121c262adbac41a7c92ab839ee46c86fb4f657847927fe7
|
|
BLAKE2b-256 checksum How to use checksums |
59c9c41ab73296ef1f46ba9878c5cb4d89dc1322f1d986f87541d631335a59ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Security for bluapi 0.1.0
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.