Python client library for Monobank API.
pip3 install monobankua
- python >= 3.10
- requests >= 2.21
- ecdsa >= 0.13.2
Full personal API description see at https://api.monobank.ua/docs/
- Create your token at https://api.monobank.ua/
- Use it to initialize client.
from datetime import datetime, timedelta
from monobankua import Monobank, MonobankError, MonobankRateLimitError, MonobankUnauthorizedError
try:
currencies_info = Monobank.currencies_info() # you don't need token to get an exchange rates
print(*currencies_info, sep='\n')
token = 'xxxxxxxxxxxxxxxxxxxxx'
monobank = Monobank(token)
client_info = monobank.client_info()
print(client_info)
print(client_info.webHookUrl)
for account in client_info.accounts:
print(f'{account.card}: {account}')
statements = monobank.statements(account.id, (datetime.now() - timedelta(days=6)).date())
print(*statements, sep='\n')
except MonobankRateLimitError:
print('Too many requests. Wait 1 minute, please')
except MonobankUnauthorizedError as e:
print(f'Some authorization problem: {e}')
except MonobankError as e:
print(e)
Corporate API has the same methods as personal API, but doesn't have rate limitation.
Corporate API is the only way for non-personal use of open Monobank API.
Full description see at https://api.monobank.ua/docs/corporate.html
- Generate private key. Sample shell command:
openssl ecparam -genkey -name secp256k1 -rand /dev/urandom -out priv.key
- Generate public key. Sample shell command:
openssl ec -in priv.key -pubout -out pub.key
-
Request API access. Send brief description of your service to [email protected] with attached pub.key (be careful - not priv.key!).
-
Since Monobank approved your access, you should request user access.
-
Now, save request id to your DB or something else, and show the accept URL to user.
-
Check user acceptance & use all the same methods as for personal API.
from monobankua import MonobankCorporate
private_key = 'xxxxxxxxxxxxxxxxxxxxx' # from priv.key
request_id, accept_url = MonobankCorporate.access_request(private_key, statement=True, personal=True)
# you can set webhook URL to be notified about user acceptance:
# request_id, accept_url = MonobankCorporate.access_request(private_key, statement=True, personal=True, webhook_url='https://yourservice.com/hook/')
monobank_corporate = MonobankCorporate(private_key, request_id)
if monobank_corporate.access_check():
... # normal use the same way as for personal API