Python SDK for Plisio API
Current project is a Python SDK for Plisio API.
To use it, you should be registered on Plisio
The account can be created here)
You will receive a personal secret key, that is used for all calls to API.

Install
To download Plisio SDK, either fork this GitHub repo or simply use PyPI via pip:
$ pip install plisio
Usage
Initialize the connection
To be able to send the requests, create an instance of class
PlisioClient.
import plisio
...
client = plisio.PlisioClient(api_key='your_secret_key')
Balance
Plisio supports 9 cryptocurrencies(https://plisio.net/documentation/appendices/supported-cryptocurrencies).
To view, for example the Ethereum (ETH) balance:
Send the request by client and process the response
with the help of an appropriate model.
balance = client.get_balance(plisio.CryptoCurrency.ETH)
Currencies
To view current exchange rate for the supported cryptocurrencies to
the definite fiat currency,
send a request to API by the method get_currency
with the selected fiat currency.
Example: getting the rate of Australian Dollar (AUD).
If no fiat currency is selected, the rate of
United States Dollar (USD) is used by default. The response is a list of models
that consist rates of exchanges.
currencies = client.get_currencies(plisio.FiatCurrency.AUD)
Creating a new invoice
The request has to receive the following required parameters:
currency - the name of cryptocurrency;
order_name - merchant internal order name;
order_number - merchant internal order number.
Additional parameters:
amount - any cryptocurrency float value. If a fiat currency is to be converted,
skip this field and use the next two fields instead;
source_currency - the name of the fiat currency;
source_amount - any float value;
allowed_psys_cids - comma-separated list of cryptocurrencies that are
allowed for a payment. Also, you will be able to select one of them. Example: 'BTC,ETH,TZEC';
description - merchant invoice description;
callback_url - merchant full URL to get invoice updates.
The POST request will be sent to this URL. If this parameter isn't set,
a callback will be sent to the URL that can be set under profile in API settings, in the 'Status URL' field; Add ?json=true to this url to get data in JSON and validate it client.validate_callback
email - an auto-fill invoice email.
You will be asked to enter an email to which a notification will be sent;
language - en_US (supports English only);
plugin - Plisio's internal field to determine integration plugin;
version - Plisio's internal field to determine integration plugin version.
redirect_to_invoice - Instead of JSON response user will be redirected to the Plisio's invoice page (is not working for a white-label shop).
expire_min - Interval in minutes when invoice will be expired.
The response is a model that can fill differently depending on
whether you have While Label or not.
In the first case, only two fields are returned:
txn_id is a Plisio's intertnal ID and
invoice_url is an invoice URL. And in the second case,
extra fields are added to them:
amount - invoice amount in the selected cryptocurrency;
pending_amount - the remaining amount to be paid in
the selected cryptocurrency;
wallet_hash - invoice hash;
psys_cid - cryptocurrencies ID;
currency - cryptocurrencies code;
source_currency - fiat currency;
source_rate - exchange rate from the psys_cid
to the source_currency at the moment of transfer;
expected_confirmations - the number of expected confirmations
to mark the invoice as completed;
qr_code - QR code image in base64 format;
verify_hash - hash to verify the POST
data signed with your API_KEY;
invoice_commission - Plisio commission;
invoice_sum - shop pays commission: invoice amount -
invoice_commission, client pays commission: invoice amount;
invoice_total_sum - shop pays commission: invoice amount,
client pays commission: invoice_commission + invoice_sum.
Create a few Python examples, where use:
- required fields only;
- all the fields besides the
amount;
- all the fields besides the
source_currency and the source_amount.
first_invoice = plisio.invoice(plisio.CryptoCurrency.BTC, 'order1', 20230903182401, 0.00001)
second_invoice = plisio.invoice(
plisio.CryptoCurrency.TRX,
'order2',
20230903182402,
amount=100,
email='test@plisio.net'
)
third_invoice = plisio.invoice(
plisio.CryptoCurrency.TRX,
'order3',
20230903182403,
source_currency=plisio.FiatCurrency.USD,
source_rate=10.2,
allowed_currencies=[plisio.CryptoCurrency.TRX,plisio.CryptoCurrency.USDT_TRX]
)
Validate callback data
To validate invoice's callback data use next code:
PlisioClient.
import plisio
...
client = plisio.PlisioClient(api_key='your_secret_key')
isValid = client.validate_callback(request.body)
If you have some issues with it - verify that you've added json=true to yours callback_url
Commission
To estimate the cryptocurrency fee and Plisio commission,
call method get_commission. It takes
one required parameter (crypto_currency, the name of the cryptocurrency) and five additional parameters:
addresses - wallet address or comma separated addresses when estimating fee for mass withdrawal;
amounts - amount or comma separated amount that will be send in case of mass withdraw;
type_ - operation type, such as:
fee_plan - the name of fee plan;
custom_fee_rate - custom fee plan value.
Method returns the model Commission, which has fields:
commission - Plisio commission value;
fee - cryptocurrency fee value;
max_amount - maximum allowed amount to withdrawal;
plan - Plisio's cryptocurrency fee estimation plan,
the PlanName enum;
use_wallet - pay fee from wallet;
use_wallet_balance - balance of wallet that will be used to pay fee;
plans - the model FeePlan;
custom - the model Custom;
errors - the number of errors;
custom_fee_rate - custom fee plan value.
Example: a request using Ethereum (ETH):
commission = plisio.get_commission(
plisio.CryptoCurrency.ETH
)
Custom
There are 5 fields:
min_ - minimal custom fee plan value;
max_ - maximum custom fee plan value;
default - estimated fee parameter to confirm the transaction in
the "conf_target" blocks;
borders - rate of the supported plan;
unit - fee unit.
Withdrawal
To withdraw, call the withdraw method and
apply the following parameters:
crypto_currency - a name of cryptocurrency;
to - hash or multiple comma separated hashes pooled for the mass_cash_out;
amount - any comma separated float values for the mass_cash_out
in the order that hashes are in to parameter;
fee_plan - a name of the one of
fee plans;
fee_rate (expected param, unavailable) - custom feeRate. conf_target (blocks) for BTC like
cryptocurrencies or gasPrice in GWAI for ETH based cryptocurrencies;
type_ - operation type, likes in get_commission method
(it's an optional parameter).
After that you are getting model Withdraw with fields:
type_ - operation type, given in the request;
status - specifies whether the operation was completed or not (completed, error);
currency - name of the cryptocurrency;
source_currency - name of the fiat currency (only USD available);
source_rate - exchange rate from the currency to
the source_currency at the moment of transfer;
fee - transaction fee stated in the transfer;
wallet_hash - destination hash (if type_ is the cash_out);
sendmany - dictionary of hashes and values (if type is the mass_cash_out);
params - a model WithdrawParams;
created_at_utc - timestamp in the UTC timezone; it may need to be divided by 1000;
amount - transfer amount in cryptocurrency
tx_url - link to the cryptocurrency block explorer;
tx_id - link of transaction ids;
id - internal Plisio operation ID.
withdraw = plisio.withdraw(
crypto_currency = plisio.CryptoCurrency.LTC,
to = 'wallet_address',
amount = float(0.01),
type_ = plisio.OperationType.cash_out
)
Fee estimation
To estimate fee, apply to get_fee the following parameters:
crypto_currency - name of the cryptocurrency;
addresses - wallet address or comma separated addresses
when estimating fee for a mass withdrawal;
amounts - amount or comma separated amount
that will be sent in case of a mass withdraw;
fee_plan - a name of the one of
fee plans
(it is not required).
The response model has three fields:
fee - transaction fee;
currency - name of the cryptocurrency;
plan - name of fee plan.
fee = plisio.get_fee(
plisio.CryptoCurrency.ETH,
'wallet_address',
'amount',
'normal',
)
Fee plan
Returns the model with fee plans
by selected cryptocurrency. Also this model has additional fields
according to the fee plan.
fee = plisio.get_fee_plan(
plisio.CryptoCurrency.ETH
)
Operations
To view transactions, call:
get_operation to view a specific transaction by id;
get_operations to view all transactions.
In the first case, it returns a model Operation
for the required operation's id.
In the second case - model Operations,
which consists of operations list, links for current, first and last pages
and metadata about all your operations. The second case has several
optional variables:
page - page number;
limit - number of elements on the page;
shop_id - filter operation by shop;
type_ - transaction type;
status - transaction status;
currency - name of the cryptocurrency;
search - text search by the transaction id (txid),
invoice's order number or customer email from invoice.
Operation
The Operation model has the next fields:
user_id - Profile ID;
shop_id - Shop ID;
type_ - model OperationType
consisted 4 types: cash_in, cash_out, mass_cash_out, invoice;
status - model OperationStatus, described with 6
statuses: pending, completed, error, new, expired, mismatch, cancelled;
pending_sum - unconfirmed amount (mempool);
currency - name of the cryptocurrency;
source_currency - fiat currency;
source_rate - exchange rate from the "cryptocurrency";
to the "source_currency" at the moment of transfer;
fee - transaction fee stated in the transfer;
wallet_hash - destination hash or invoice hash;
sendmany - pairs of hashes and values;
params - model WithdrawParams;
expire_at_utc - timestamp in UTC timezone; it may need to be divided by 1000;
created_at_utc - timestamp in the UTC timezone; it may need to be divided by 1000;
amount - amount received/transferred by an operation;
sum_:
- invoice: params.amount + Plisio commission (if the customer pays the commission)
or params.amount (if the merchant pays the commission);
- cash-out: transfer amount + network fee;
- cash-in: received amount.
commission - Plisio commission;
tx_url - link to the cryptocurrency block explorer;
tx_id - list of transaction ids;
id_ - internal Plisio operation ID;
actual_sum - real incoming amount;
actual_commission - Plisio commission taken;
actual_fee - network fee (move invoice to wallet);
actual_invoice_sum - actual_sum -
actual_commission_sum - actual_fee;
tx - list of transactions details;
status_code - code of status.
WithdrawParams
There are 4 params:
source_currency - name of the cryptocurrency;
source_rate - exchange rate from the "cryptocurrency";
to the "source_currency" at the moment of transfer;
usd_rate - exchange rate from the "cryptocurrency";
to the USD at the moment of transfer;
fee - transaction fee stated in the transfer.
Async usage
All these methods have their async analogues in PlisioAioClient.
They can be easily integrated into your async functions.
import plisio
...
client = plisio.PlisioAioClient('your_secret_key')
currencies = await client.get_currencies(plisio.FiatCurrency.AUD)