Python SDK for the Buycoins API.

Overview

Buycoins Python Library

Build Status Circle CI PyPI version Python 3.6+

This library provides easy access to the Buycoins API using the Python programming language. It provides all the feature of the API so that you don't need to interact with the API directly. This library can be used with Python 3.6+

Table of Contents

Links

Installation

You can install this package using pip:

pip install --upgrade buycoins

Introduction

Primer

  • The library is structured around the concept of a type, so everything is a type.
  • All date quantities are specified as timestamps. So you would have to reconstruct the ISO dates yourself if you ever need to.
  • All cryptocurrency (and monetary) values are specified as decimals.
  • Supports all cryptocurrencies supported by Buycoins

Initialization

Firstly, request API access by sending an email to [email protected] with the email address you used in creating a Buycoins account. When you've been granted access, you should be able to generate a public and secret key from the 'API settings' section of your account.

You have to initialize the library once in your app. You can do this when initializing databases, logging, etc. As a security practice, it is best not to hardcode your API keys. You should store them in environmental variables or a remote Secrets Manager.

import buycoins

buycoins.initialize('', '')

Accounts

Accounts provide a way to programmatically create virtual naira accounts.

Types

VirtualDepositAccountType:
    account_number: str
    account_name: str
    account_type: str
    bank_name: str
    account_reference: str

Create Naira deposit account

import buycoins as bc

acc = bc.accounts.create_deposit('john doe')  # VirtualDepositAccountType

print(acc.account_name)  # john doe
print(acc.bank_name)  # bank name
print(acc.account_number)  # account number
print(acc.account_reference) # account reference
print(acc.account_type) # account type

Orders

Orders provide a way to buy from and sell directly to Buycoins. When buying or selling, price ID should be the ID gotten from calling either .get_price() or .get_prices(). Make sure to use price that hasn't expired yet, so call .get_price(cryptocurrency) to get the latest price for the cryptocurrency just before buying or selling.

Types

CoinPriceType:
    id: str
    cryptocurrency: str
    buy_price_per_coin: Decimal
    min_buy: Decimal
    max_buy: Decimal
    expires_at: int

class OrderType(NamedTuple):
    id: str
    cryptocurrency: str
    status: str
    side: str
    created_at: int
    total_coin_amount: str
    static_price: Decimal
    price_type: str
    dynamic_exchange_rate: str
    coin_amount: Decimal

Get cryptocurrency prices

import buycoins as bc

# Get prices of all cryptocurrencies
prices = bc.orders.get_prices()  # CoinPriceType[]

print(prices[0].id)  # ID of first price entry
print(prices[0].cryptocurrency)  # cryptocurrency
print(prices[0].expires_at)  # when this price entry will expire
print(prices[0].buy_price_per_coin)  # coin price
print(prices[0].min_buy)  # minimum amount you can buy
print(prices[0].max_buy)  # max amount you can buy

Get single cryptocurrency price

import buycoins as bc

price = bc.orders.get_price('bitcoin')  # CoinPriceType

print(price.id)  # ID of price entry
print(price.cryptocurrency)  # cryptocurrency
print(price.expires_at)  # when this price entry will expire
print(price.buy_price_per_coin)  # coin price
print(price.min_buy)  # minimum amount you can buy
print(price.max_buy)  # max amount you can buy

Buy a cryptocurrency

import buycoins as bc


order = bc.orders.buy(
    price_id='price-id',
    coin_amount=1.52,
    cryptocurrency='litecoin'
)  # OrderType

print(order.id)  # Order ID
print(order.status)  # either active or inactive
print(order.side)  # buy
print(order.cryptocurrency)  # litecoin
print(order.total_coin_amount)  # Total coin amount
print(order.price_type)  # Price type

Sell a cryptocurrency

import buycoins as bc


order = bc.orders.sell(
    price_id='price-id',
    coin_amount=0.0043,
    cryptocurrency='ethereum'
)  # OrderType

print(order.id)  # Order ID
print(order.status)  # either active or inactive
print(order.side)  # sell
print(order.cryptocurrency)  # litecoin
print(order.total_coin_amount)  # Total coin amount
print(order.price_type)  # Price type

P2P Trading

P2P Trading lets you trade cryptocurrencies with other users. If you are not familiar with p2p trading on the Buycoins platform, read about it here

Types

class OrderType(NamedTuple):
    id: str
    cryptocurrency: str
    status: str
    side: str
    created_at: int
    total_coin_amount: str
    static_price: Decimal
    price_type: str
    dynamic_exchange_rate: str
    coin_amount: Decimal

Place limit orders

When placing limit orders, if price_type is static, static_price must also be specified, and if price_type is dynamic, dynamic_exchange_rate must be provided.

import buycoins as bc


order = bc.p2p.place_limit_order(
    side='buy', # either 'buy' or 'sell'
    coin_amount=0.00043,
    cryptocurrency='ethereum',
    price_type='static',
    static_price=0.004,
    dynamic_exchange_rate=None  # float   
)  # OrderType

print(order.id)  # Order ID
print(order.status)  # status, either active or inactive
print(order.cryptocurrency)  # bitcoin, litecoin, etc
print(order.coin_amount)  # coin amount

Place market orders

import buycoins as bc


# Place market order
# `order` has all the properties as shown above
order = bc.p2p.place_market_order(
    side='buy',  # either buy or sell
    coin_amount=0.00023,
    cryptocurrency='litecoin'
)  # order is an OrderType

print(order.id)  # Order ID
print(order.status)  # status, either active or inactive
print(order.cryptocurrency)  # bitcoin, litecoin, etc
print(order.coin_amount)  # coin amount

Get list of orders

import buycoins as bc


orders, dynamic_price_expiry = bc.p2p.get_orders('active')  # (OrderType[], timestamp)

print(dynamic_price_expiry)  # timestamp of when dynamic price expires
print(orders[0].id)  # ID of first order
print(orders[1].status)  # status of the first order

Get Market book

import buycoins as bc


market_book, dynamic_price_expiry = bc.p2p.get_market_book()  # (OrderType[], timestamp)

print(dynamic_price_expiry)  # timestamp of when dynamic price expires
print(market_book[0].id)  # ID of first order
print(market_book[1].status)  # status of the first order

Transactions

Transactions enable you to send and receive cryptocurrencies.

Types

CoinBalanceType:
    id: str
    cryptocurrency: str
    confirmed_balance: Decimal

NetworkFeeType:
    estimated_fee: Decimal
    total: Decimal

TransactionType:
    hash: str
    id: str

SendReturnValueType:
    id: str
    address: str
    cryptocurrency: str
    amount: Decimal
    fee: Decimal
    status: str
    transaction: TransactionType

AddressType:
    cryptocurrency: str
    address: str

Get balances

import buycoins as bc

balances = bc.transactions.get_balances()  # CoinBalanceType[]

print(balances[0].cryptocurrency)  # bitcoin, litecoin, etc
print(balances[0].confirmed_balance)  # the confirmed balance

Get single balance

import buycoins as bc


balance = bc.transactions.get_balance('bitcoin')  # CoinBalanceType

print(balance.cryptocurrency)  # bitcoin
print(balance.confirmed_balance)  # the confirmed balance

Estimate network fee

import buycoins as bc


fee = bc.transactions.estimate_network_fee(
    'bitcoin',  # cryptocurrency
    0.32,  # txn amount
)  # NetworkFeeType

print(fee.estimated_fee)  # estimated fee for txn
print(fee.total)   # total

Send cryptocurrency to an address

import buycoins as bc


sent = bc.transactions.send(
    cryptocurrency='ethereum',
    amount=0.0023,
    address=''
)  # SendReturnValueType

print(sent.fee)  # fee charged for the 'send' txn
print(sent.status) # status of the txn
print(sent.transaction.id)  # ID of the txn
print(sent.transaction.hash)  # txn hash

Create wallet address

import buycoins as bc


addr = bc.transactions.create_address('bitcoin')  # AddressType

print(addr.address)  # Address string
print(addr.cryptocurrency)  # cryptocurrency

Webhooks

Webhooks provides a way for Buycoins to inform you of events that take place on your account. See the Buycoins documentation for an introduction and the available events.

Verify event payload

Ensure that the webhook event originated from Buycoins

import buycoins as bc


is_valid = bc.webhook.verify_payload(
    body='',
    webhook_token='',
    header_signature='X-Webhook-Signature header'
)

print(is_valid)  # True if the event is from Buycoins, False otherwise.

Testing

To run tests:

poetry run pytest

Contributing

See CONTRIBUTING.md

License

MIT License

Owner
Musa Rasheed
Software Engineer at @textkernel
Musa Rasheed
数字货币BTC量化交易系统-实盘行情服务器,虚拟币自动炒币-火币API-币安交易所-量化交易-网格策略。趋势跟踪策略,最简源码,可在线回测,一键部署,可定制的比特币量化交易框架,3年实盘检验!

huobi_intf 提供火币网的实时行情服务器(支持火币网所有交易对的实时行情),自带API缓存,可用于实盘交易和模拟回测。 行情数据,是一切量化交易的基础,可以获取1min、60min、4hour、1day等数据。数据能进行缓存,可以在多个币种,多个时间段查询的时候,查询速度依然很快。 服务框架

dev 258 Sep 20, 2021
Unofficial WebApp for WhatsApp Web created in PyQt6

Unofficial WebApp for WhatsApp Web created in PyQt6 using PyQt6-WebEngine

Rafael Tosta Santos 126 Dec 20, 2022
Python wrapper for CoWin API's

Cowin Tracker Python API wrapper for CoWin, India's digital platform launched by the government to help citizens register themselves for the vaccinati

Saiprasad Balasubramanian 43 Jun 11, 2022
ShadowMusic - A Telegram Music Bot with proper functions written in Python with Pyrogram and Py-Tgcalls.

⭐️ Shadow Music ⭐️ A Telegram Music Bot written in Python using Pyrogram and Py-Tgcalls Ready to use method A Support Group, Updates Channel and ready

TeamShadow 8 Aug 17, 2022
Python client for the Echo Nest API

Pyechonest Tap into The Echo Nest's Musical Brain for the best music search, information, recommendations and remix tools on the web. Pyechonest is an

The Echo Nest 655 Dec 29, 2022
Discord Mass Edit is a unique, purging related Discord tool that differs from the regular mass delete.

Discord Mass Edit is a unique, purging related Discord tool that differs from the regular mass delete. This tool will automatically edit every message in a chosen channel and change it to a random st

c0mpt0 1 Jul 27, 2022
自动每天给女友发邮件

github acitons 发邮件 python 脚本 每天 7点半左右给女朋友发送邮件 天气来自: http://www.tianqiapi.com/ 文字图片来源:http://wufazhuce.com/ 风景图:https://qqlykm.cn/api/fengjing 土味情话:htt

gogobody 7 May 12, 2022
An opensource chat service that cares about your privacy.

An opensource chat service that cares about your privacy. Instructions to set up a local testing environment: 1) Clone this repository and navigate to

Aiman Al Masoud 2 Dec 03, 2022
Scrape the Twitter Frontend API without authentication.

Twitter Scraper 🇰🇷 Read Korean Version Twitter's API is annoying to work with, and has lots of limitations — luckily their frontend (JavaScript) has

Buğra İşgüzar 3.4k Jan 08, 2023
Token Manager written in Python

Discord-API-Token-Entrance Description This is a Token Manager that allows your token to enter your discord server, written in python. Packages Requir

Tootle 1 Apr 15, 2022
A Recommendation System For Diabetes Detection And Treatment

Diabetes-detection-tg-bot A Recommendation System For Diabetes Detection And Treatment Данная система помогает определить наличие или отсутствие сахар

Alexander Kanonirov 1 Nov 22, 2021
Free and Open Source Machine Translation API. 100% self-hosted, no limits, no ties to proprietary services. Built on top of Argos Translate.

LibreTranslate Try it online! | API Docs Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on pro

UAV4GEO 3.5k Jan 03, 2023
A Python API to retrieve and read MLB GameDay data

mlbgame mlbgame is a Python API to retrieve and read MLB GameDay data. mlbgame works with real time data, getting information as games are being playe

Zach Panzarino 493 Dec 13, 2022
A Python library for miHoYo bbs and HoYoLAB Community

A Python library for miHoYo bbs and HoYoLAB Community. genshin 原神签到小助手

384 Jan 05, 2023
Github-Checker - Simple Tool To Check If Github User Available Or Not

Github Checker Simple Tool To Check If Github User Available Or Not Socials: Lan

ميخائيل 7 Jan 30, 2022
Discord bot ( discord.py ), uses pandas library from python for data-management.

Discord_bot A Best and the most easy-to-use Discord bot !! Some simple basic auto moderations, Chat functions. It includes a game similar to Casino, g

Jaitej 4 Aug 30, 2022
Quickly edit your slack posts.

Lightning Edit Quickly edit your Slack posts. Heavily inspired by @KhushrajRathod's LightningDelete. Usage: Note: Before anything, be sure to head ove

Cole Wilson 14 Nov 19, 2021
🐍 Mnemonic code for generating deterministic keys, BIP39

python-mnemonic 🐍 Mnemonic code for generating deterministic keys, BIP39 Installation To install this library and its dependencies use: pip install m

9 Dec 22, 2022
Async client API for the Telegram Group Calls

PyTgCalls This project allow to make Telegram group call with MTProto Api using Pyrogram and WebRTC, this is possible thanks to the power of NodeJS's

185 Jan 03, 2023
Role Based Access Control for Slack-Bolt Applications

Role Based Access Control for Slack-Bolt Apps Role Based Access Control (RBAC) is a term applied to limiting the authorization for a specific operatio

Jeremy Schulman 7 Jan 06, 2022