A python wrapper for the Bitso API.
Project description
# bitso-py #
A Python 2 and Python 3 wrapper for the [Bitso API](https://bitso.com/api_info/)
[![Build Status](https://travis-ci.org/mariorz/python-bitso.svg?branch=master)](https://travis-ci.org/mariorz/python-bitso) [![Requirements Status](https://requires.io/github/mariorz/python-bitso/requirements.svg?branch=master)](https://requires.io/github/mariorz/python-bitso/requirements/?branch=master)
# Public API Usage #
```python
>>> import bitso
>>> api = bitso.Api()
```
# Private API Usage #
```python
>>> import bitso
## Production account
>>> api = bitso.Api(API_KEY, API_SECRET)
## Developer account
>>> api = bitso.Api(API_KEY, API_SECRET,"dev")
```
# Public calls #
### Available Books ###
```python
## Order books available on Bitso
>>> books = api.available_books()
>>> books
AvilableBooks(books=btc_mxn,eth_mxn)
>>> books.btc_mxn
Book(symbol=btc_mxn)
>>> books.btc_mxn.minimum_amount
Decimal('0.00500000')
```
### Ticker ###
```python
## Ticker information
## Parameters
## [book] - Specifies which book to use
## - string
>>> tick = api.ticker('btc_mxn')
>>> tick
Ticker(ask=7866.27, bid=7795.00, high=7866.27, last=7866.27, low=7707.43, datetime=2016-04-22 16:46:25, vwaplow=7795.00)
>>> tick.last
Decimal('7866.27')
>>> tick.created_at
datetime.datetime(2016, 4, 22, 16, 46, 53)
```
### Order Book ###
```python
## Public order book
## Parameters
## [book] - Specifies which book to use
## - string
## [aggregate = True] - Group orders with the same price
## - boolean
>>> ob = api.order_book('btc_mxn')
>>> ob.updated_at
atetime.datetime(2016, 12, 13, 22, 54, 2, tzinfo=tzutc())
>>> ob.bids
[PublicOrder(book=btc_mxn,price=3160.00, amount=0.63966069),
PublicOrder(book=btc_mxn,price=2959.00, amount=0.72143122),
PublicOrder(book=btc_mxn,price=2850.00, amount=3.00000000),
PublicOrder(book=btc_mxn,price=2750.00, amount=1.00000000),
PublicOrder(book=btc_mxn,price=2500.12, amount=45.00000000),
...
]
>>> ob.asks
[PublicOrder(book=btc_mxn,price=8000.00, amount=48.37402966),
PublicOrder(book=btc_mxn,price=8160.00, amount=0.12340000),
PublicOrder(book=btc_mxn,price=9000.00, amount=40.00000000),
PublicOrder(book=btc_mxn,price=9160.00, amount=0.76500000)
...
]
```
### Trades ###
```python
## Public trades
## Parameters
## [book = 'btc_mxn'] - Specifies which book to use
## - str
## [marker = None] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - str
## [sort = 'desc'] - Specifies ordering direction of returned objects (asc, desc)
## - str
## [limit = '25'] - Specifies number of objects to return. (Max is 100)
## - str
>>> trades = api.trades('btc_mxn')
>>> trades
[Trade(tid=1602, price=3160.00, amount=0.00797922, maker_side=buy, created_at=2016-12-13 21:32:05+00:00),
Trade(tid=1601, price=3160.00, amount=0.01000000, maker_side=buy, created_at=2016-12-13 21:32:05+00:00),
Trade(tid=1600, price=8000.00, amount=0.00312500, maker_side=sell, created_at=2016-12-13 21:32:04+00:00),
Trade(tid=1599, price=8000.00, amount=0.01008572, maker_side=sell, created_at=2016-12-13 21:32:04+00:00),
...
]
>>> trades[0].price
Decimal('3160.00')
>>> trades[0].amount
Decimal('0.00797922')
>>> trades[0].created_at
datetime.datetime(2016, 12, 13, 21, 32, 5, tzinfo=tzutc())
```
# Private calls #
Private endpoints are used to manage your account and your orders. These requests must be signed
with your [Bitso credentials](https://bitso.com/api_info#generating-api-keys)
```python
>>> import bitso
>>> api = bitso.Api(API_KEY, API_SECRET)
```
### Account Status ###
```python
## Your account status
>>> status = api.account_status()
>>> status.daily_limit
Decimal('5300')
>>> status.daily_remaining
Decimal('5300.00')
```
### Account Balances ###
```python
## Your account balances
>>> balances = api.balances()
>>> balances
Balances(currencies=btc,etc,eth,mxn)
>>> balances.currencies
[u'btc', u'etc', u'eth', u'mxn']
>>> balances.btc.name
u'btc'
>>> balances.btc.available
Decimal('3.46888741')
```
### Fees ###
```python
## Your trade fees
>>> fees = api.fees()
>>> fees
Fees(books=btc_mxn,eth_mxn)
>>> fees.books
[u'btc_mxn', u'eth_mxn']
>>> fees.btc_mxn
Fee(book=btc_mxn, fee_percent=0.0000)
>>> fees.btc_mxn.fee_percent
Decimal('0.8500')
>>> fees.withdrawal_fees
WithdawalFees(curencies=eth,btc)
>>> fees.withdrawal_fees.btc
Decimal('0.001')
```
### Ledger ###
```python
## A ledger of your historic operations.
## Parameters
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> ledger = api.ledger()
>>> ledger
[<bitso.models.LedgerEntry at 0x10d4fdc50>,
<bitso.models.LedgerEntry at 0x10d4fd550>,
<bitso.models.LedgerEntry at 0x10d5c4d90>,
<bitso.models.LedgerEntry at 0x10d5c4bd0>,
<bitso.models.LedgerEntry at 0x10d5c4550>,
...
]
>>> ledger[0].operation
u'fee'
>>> ledger[1].operation
u'trade'
>>> ledger[1].balance_updates
[BalanceUpdate(currency=mxn, amount=25.21433520,
BalanceUpdate(currency=btc, amount=-0.00797922]
>>> ledger[1].balance_updates[0].amount
Decimal('25.21433520')
```
### Withdrawals ###
```python
## Detailed info on your fund withdrawals.
## Parameters
## [wids] - Specifies which withdrawal objects to return by IDs
## - list
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> withdrawals = api.withdrawals()
>>> withdrawals
[Withdrawal(wid=019e8f42da7eb0e44bf5ce0013475058, amount=0.001, currency=btc),
Withdrawal(wid=efa28b88e326619d91ba809a82e1282b, amount=0.001, currency=btc),
Withdrawal(wid=9bbde562c7de3e0c5315993a944d3873, amount=0.001, currency=btc),
Withdrawal(wid=e19b33a5ec2606e8a25963ceea9d2254, amount=0.001, currency=btc),
Withdrawal(wid=b76af418eb94c61b72c6bb20d316e115, amount=0.001, currency=btc),
...
]
>>> withdrawals[0].status
u'pending'
>>> withdrawals[0].method
u'Bitcoin'
>>> withdrawals[0].amount
Decimal('0.001')
```
### Fundings ###
```python
## Detailed info on your fundings.
## Parameters
## [fids] - Specifies which funding objects to return by IDs
## - list
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> fundings = api.fundings()
>>> fundings
[Funding(fid=4e28aa988a74d8b9868f400a18d00910, amount=49596.65217865, currency=mxn),
Funding(fid=3799c39ea8f1ccf6e6bbcaea1a0cbed1, amount=8.12500000, currency=btc)]
>>> fundings[0].status
u'complete'
>>> fundings[0].amount
Decimal('49596.65217865')
```
### User Trades ###
```python
## Your trades
## Parameters
## [book = all]- Specifies which book to use
## - string
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> utx = api.user_trades()
>>> utx
[UserTrade(tid=1610, book=btc_mxn, price=3160.00, major=-0.00797922, minor=25.21433520),
UserTrade(tid=1609, book=btc_mxn, price=3160.00, major=-0.01000000, minor=31.60000000),
UserTrade(tid=1608, book=btc_mxn, price=8000.00, major=0.00312500, minor=-25.00000000),
UserTrade(tid=1607, book=btc_mxn, price=8000.00, major=0.01008572, minor=-80.68576000),
...,
]
>>> utx[0].type
'trade'
>>> utx[0].btc
Decimal('0.00981097')
>>> txs[0].btc_mxn
Decimal('7780.00')
>>> txs[0].rate
Decimal('7780.00')
```
### Open Orders ###
```python
## Returns a list of the user’s open orders
## Parameters
## [book] - Specifies which book to use
## - str
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> oo = api.open_orders('btc_mxn')
>>> oo
[Order(oid=s5ntlud6oupippk8iigw5dazjdxwq5vibjcwdp32ksk9i4h0nyxsc8svlpscuov5, side=buy, price=7000.00, original_amount=0.01000000, created_datetime=2016-04-22 14:31:10)]
>>> oo[0].price
Decimal('7000.00')
>>> oo[0].oid
s5ntlud6oupippk8iigw5dazjdxwq5vibjcwdp32ksl9i4h0nyxsc8svlpscuov5
```
### Lookup Order ###
```python
## Returns a list of details for 1 or more orders
## Parameters
## order_ids - A list of Bitso Order IDs.
## - string
>>> orders = api.lookup_order([ORDER_ID1, ORDER_ID2])
>>> orders
[Order(oid=s0ntlud6oupippk8iigw5dazjdxwq5vibjcwdp12ksk9i4h0nyxsc8svlpscuov5, side=buy, price=7000.00, original_amount=0.01000000, created_datetime=2016-04-22 14:31:10),
Order(oid=whtyptv0f348fajdydoswcf6cj20d0kahd77657l7ctnnd1lrpdn2suebwfpxz0f, side=buy, price=7200.00, original_amount=0.01200000, created_datetime=2016-04-22 14:32:10)]
```
### Cancel Order ###
```python
## Cancels an open order
## Parameters
## order_id - A Bitso Order ID.
## - string
>>> api.cancel_order(ORDER_ID)
u'true' #on success
```
### Place Order ###
```python
## Places a buy limit order.
## [book] - Specifies which book to use (btc_mxn, eth_mxn)
## - str
## [side] - the order side (buy, sell)
## - str
## [order_type] - the order type (limit, market)
## - str
## amount - Amount of major currency to buy.
## - string
## major - The amount of major currency for this order. An order must be specified in terms of major or minor, never both.
## - string. Major denotes the cryptocurrency, in our case Bitcoin (BTC) or Ether (ETH).
## minor - The amount of minor currency for this order. Minor denotes fiat currencies, in our case Mexican Peso (MXN)
## - string
## price - Price per unit of major. For use only with limit orders
## - string
>>> order = api.place_order(book='btc_mxn', side='buy', order_type='limit', major='.01', price='7000.00')
>>> order
{"oid":"jli47Q3gQqXflk1n"}
```
### Funding Destination Address ###
```python
## Gets a Funding destination address to fund your account
## fund_currency - Specifies the currency you want to fund your account with (btc, eth, mxn)
## - str
>>> fd = api.funding_destination('btc')
>>> fd
FundingDestination(account_identifier_name=Bitcoin address)
## Returns a FundingDestination object
>>> fd.account_identifier
u'3CEWgs1goBbafUoThjWff4oX4wQKfxqpeV'
## account_identifier attribute is the address you can use to fund your account
```
### Bitcoin Withdrawal ###
```python
## Triggers a bitcoin withdrawal from your account
## amount - The amount of BTC to withdraw from your account
## - string
## address - The Bitcoin address to send the amount to
## - string
>>> api.btc_withdrawal('0.000000001', '1TVXn5ajmMQEbkiYNobgHVutVtMWcNZGV')
ok # Returns 'ok' on success
```
### Ether Withdrawal ###
```python
## Triggers an ether withdrawal from your account
## amount - The amount of ETH to withdraw from your account
## - string
## address - The Ethereum address to send the amount to
## - string
>>> api.eth_withdrawal('0.000000001', '0x55f03a62acc946dedcf8a0c47f16ec3892b29e6d')
ok # Returns 'ok' on success
```
### Ripple Withdrawal ###
```python
## Triggers a ripple withdrawal from your account
## currency - The currency to withdraw
## - string
## amount - The amount of currency to withdraw from your account
## - string
## address - The ripple address to send the amount to
## - string
>>> api.ripple_withdrawal('xrp', '1.10', 'rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn')
ok # Returns 'ok' on success
```
### Bank Withdrawal (SPEI) ###
```python
## Triggers a SPEI withdrawal from your account. These withdrawals are
## immediate during banking hours (M-F 9:00AM - 5:00PM Mexico City Time).
##
## amount - The amount of MXN to withdraw from your account
## - string
## recipient_given_names - The recipient’s first and middle name(s)
## - string
## recipient_family_names - The recipient’s last name)
## - string
## clabe - The CLABE number where the funds will be sent to
## - string
## notes_ref - The alpha-numeric reference number for this SPEI
## - string
## numeric_ref - The numeric reference for this SPEI
## - string
>>> api.spei_withdrawal(amount='3500.0', first_names='Satoshi', last_names='Nakamoto', clabe=CLABE, notes_ref=NOTES_REF, numeric_ref=NUMERIC_REF)
ok # Returns 'ok' on success
```
# Transfer API #
**Access to this API is available on request, and not enabled by default. Users won’t be able to use this API unless Bitso has enabled it on their account. [API Docs](https://bitso.com/api_info/?shell#transfer-api5)**
Bitso’s powerful Transfer API allows for simple integration for routing Bitcoin payments directly through to a choice of Mexican Peso end-points.
The workflow is as follows:
```python
## Request quote
>>> quote = api.transfer_quote(amount='25.0', currency='MXN')
## Create transfer using quote
>>> transfer = api.transfer_create(amount='25.0', currency='MXN', rate=quote.rate, payment_outlet='vo', email_address='mario@ret.io', recipient_given_name='mario romero')
## Send bitcoins to address given
>>> print(transfer.wallet_address)
## Check Transfer status, after 1 confirmation, pesos are delivered
>>> print(api.transfer_status(transfer.id).status)
u'confirming'
```
### Get Transfer Quote ###
```python
## Get a quote for a transfer for various Bitso Outlets.
##
## btc_amount - Mutually exclusive with amount. Either this, or amount should
## be present in the request. The total amount in Bitcoins, as
## provided by the user. NOTE: The amount is in BTC format
## (900mbtc = .9 BTC).
## - string
## amount - Mutually exclusive with btc_amount. Either this, or btc_amount
## should be present in the request. The total amount in Fiat currency.
## Use this if you prefer specifying amounts in fiat instead of BTC.
## - string
## currency - An ISO 4217 fiat currency symbol (ie, "MXN"). If btc_amount is
## provided instead of amount, this is the currency to which the BTC
## price will be converted into. Otherwise, if amount is specified
## instead of btc_amount, this is the currency of the specified amount.
## - string
>>> quote = api.transfer_quote(amount='25.0', currency='MXN')
>>> print(quote)
TransactionQuote(btc_amount=0.00328834, currency=MXN, rate=7602.60, created_at=2016-05-03 00:33:06, expires_at=2016-05-03 00:34:06, gross=25.00)
>>> quote.btc_amount
Decimal('0.00328834')
>>> quote.outlets.keys()
[u'sp', u'rp', u'vo', u'bw', u'pm']
>>> quote.outlets['vo']
{u'available': True,
u'daily_limit': Decimal('0.00'),
u'fee': Decimal('0.00'),
u'id': u'vo',
u'maximum_transaction': Decimal('9999.00'),
u'minimum_transaction': Decimal('25.00'),
u'name': u'Voucher',
u'net': Decimal('25.00'),
u'optional_fields': [],
u'required_fields': {u'email_address': {u'id': u'email_address',
u'name': u'Email Address'},
u'recipient_given_name': {u'id': u'recipient_given_name', u'name': u''}},
u'verification_level_requirement': u'0'}
```
### Create Transfer ###
```python
## Get a quote for a transfer for various Bitso Outlets.
##
## btc_amount - Mutually exclusive with amount. Either this, or amount should
## be present in the request. The total amount in Bitcoins, as
## provided by the user. NOTE: The amount is in BTC format
## (900mbtc = .9 BTC).
## - string
## amount - Mutually exclusive with btc_amount. Either this, or btc_amount
## should be present in the request. The total amount in Fiat currency.
## Use this if you prefer specifying amounts in fiat instead of BTC.
## - string
## currency - An ISO 4217 fiat currency symbol (ie, "MXN"). If btc_amount is
## provided instead of amount, this is the currency to which the BTC
## price will be converted into. Otherwise, if amount is specified
## instead of btc_amount, this is the currency of the specified amount.
## - string
## rate - This is the rate (e.g. BTC/MXN), as acquired from the
## transfer_quote method. You must request a quote in this way before
## creating a transfer.
## - string
## payment_outlet - The outlet_id as provided by quote method.
## - string
## required fields parameters - Each of the other 'required_fields',
## as stipulated in the TransferQuote for the chosen payment_outlet.
## - string
>>> transfer = api.transfer_create(amount='25.0', currency='MXN', rate=quote.rate, payment_outlet='vo', email_address='satoshin@gmx.com', recipient_given_name='satoshi nakamoto')
>>> print(transfer)
TransactionQuote(btc_amount=0.00328834, currency=MXN, rate=7602.60, created_at=2016-05-03 00:33:06, expires_at=2016-05-03 00:34:06, gross=25.00)
>>> transfer.btc_amount
Decimal('0.00328834')
>>> quote.wallet_address
u'3LiLpKyfXJmeDcD5ABGtmHGjkxnZTHnBxv'}
```
### Get Transfer Status ###
```python
## Request status for a transfer order
##
## transfer_id - Bitso Transfer Order ID (As returned by transfer_create
## method.
## - string
>>> print(api.transfer_status(transfer.id).status)
u'confirming'
```
# Websocket API #
WebSocket is a protocol providing full-duplex communication channels over a single TCP connection. [Bitso's Websocket API](https://bitso.com/api_info/?shell#websocket-api) allows a continuous connection that will receive updates according to the client's subscribed channels.
#### Available Channels: ####
+ **'trades':** will send updates on each new registered trade.
+ **'diff-orders':** will send across any modifications to the order book. Specifically, any state changes in existing orders (including orders not in the top 20), and any new orders.
+ **'orders':** maintains an up-to-date list of the top 20 asks and the top 20 bids, new updates are sent across the channel whenever there is a change in either top 20.
#### Basic Example ####
Prints every trade.
```python
from bitso import websocket
class BasicBitsoListener(websocket.Listener):
def on_connect(self):
print("Connected")
def on_update(self, data):
for obj in data.updates:
print(obj)
if __name__ == '__main__':
listener = BasicBitsoListener()
client = websocket.Client(listener)
channels = ['trades']
book = 'btc_mxn'
client.connect(channels, book)
```
```shell
> python examples/ws_trades.py
Connected
TradeUpdate(tid=96093, amount=0.00296048, rate=8444.56,value=25)
TradeUpdate(tid=96094, amount=0.0568058, rate=8444.56,value=479.7)
TradeUpdate(tid=96095, amount=0.45721742, rate=8444.56,value=3861)
TradeUpdate(tid=96096, amount=1.25176796, rate=8335.88,value=10434.58)
TradeUpdate(tid=96097, amount=0.75948406, rate=8335.83,value=6330.93)
TradeUpdate(tid=96098, amount=0.38027314, rate=8334.31,value=3169.31)
TradeUpdate(tid=96099, amount=0.54340182, rate=8329.95,value=4526.5)
TradeUpdate(tid=96100, amount=0.44632784, rate=8323.59,value=3715.04)
TradeUpdate(tid=96101, amount=0.03216174, rate=8322.31,value=267.65)
TradeUpdate(tid=96102, amount=2.92387591, rate=8318.13,value=24321.17)
TradeUpdate(tid=96103, amount=0.27482146, rate=8313.96,value=2284.85)
TradeUpdate(tid=96104, amount=1.33065393, rate=8312,value=11060.39)
TradeUpdate(tid=96105, amount=0.70166614, rate=8310.66,value=5831.3)
TradeUpdate(tid=96106, amount=0.11416146, rate=8434.37,value=962.88)
```
#### Advanced Example ####
Gets a copy of the order book via the rest API once, and keeps it up to date using the **'diff-orders'** channel. Logs every order, spread update, or trade.
See [examples/livebookexample.py](https://github.com/bitsoex/bitso-py/blob/master/examples/livebookexample.py)
```shell
> python examples/livebookexample.py
2016-05-09 20:17:32,232 - INFO - Starting new HTTPS connection (1): bitso.com
2016-05-09 20:17:33,118 - INFO - Order Book Fetched. Best ask: 8434.3700, Best bid: 8351.3000, Spread: 83.0700
2016-05-09 20:17:33,589 - INFO - Websocket Connection Established
2016-05-09 20:17:33,711 - INFO - Best ask: 8434.3700, Best bid: 8351.3000, Spread: 83.0700
2016-05-09 20:22:30,301 - INFO - New Order. ask: 0.0000 @ 8434.3700 = 0.0000
2016-05-09 20:22:30,306 - INFO - Removed price level at: 8434.3700
2016-05-09 20:22:30,306 - INFO - Best ask: 8440.0000, Best bid: 8351.3000, Spread: 88.7000
2016-05-09 20:22:31,021 - INFO - New Order. ask: 0.1000 @ 8492.9700 = 849.2900
2016-05-09 20:22:31,022 - INFO - Best ask: 8440.0000, Best bid: 8351.3000, Spread: 88.7000
```
# Models #
The wrapper uses models to represent data structures returned by the Bitso API.
### bitso.Book
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
symbol | String | Order book symbol | Major_Minor
minimum_amount | Decimal | Minimum amount of major when placing orders | Major
maximum_amount | Decimal | Maximum amount of major when placing orders | Major
minimum_price | Decimal | Minimum price when placing orders | Minor
maximum_price | Decimal | Maximum price when placing orders | Minor
minimum_value | Decimal | Minimum value amount (amount*price) when placing orders | Minor
maximum_value | Decimal | Maximum value amount (amount*price) when placing orders | Minor
### bitso.AvailableBooks
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
books | list | symbols for each book available | -
btc_mxn | bitso.Book | btc_mxn bitso.Book Object| -
eth_mxn | bitso.Book | eth_mxn bitso.Book Object| -
### bitso.AccountRequiredField
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
name | String | Field name that will be user for “account_creation” endpoint |
description | String | Describes each field |
### bitso.Ticker
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
book | String | Order book symbol | Major_Minor
ask | Decimal | Lowest sell order | Minor/Major
bid | Decimal | Highest buy order | Minor/Major
last | Decimal | Last traded price | Minor/Major
high | Decimal | Last 24 hours price high | Minor/Major
low | Decimal | Last 24 hours price low | Minor/Major
vwap | Decimal | Last 24 hours price high | Minor/Major
volume | Decimal | Last 24 hours volume | Major
created_at | Datetime | Ticker current datetime |
### bitso.PublicOrder
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
book | String | Order book symbol | Major_Minor
price | Decimal | Price per unit of major | Minor
amount | Decimal | Major amount in order | Major
created_at | Datetime | The datetime at which the order was created |
updated_at | Datetime | The datetime at which the order was updated (Can be None) |
### bitso.OrderBook
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
asks | List | List of open asks | Minor/Major
bids | List | List of open bids | Minor/Major
created_at | Datetime | OrderBook current datetime |
### bitso.Balance
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
name | String | Currency name |
total | Decimal | Total balance for currency | Currency
locked | Decimal | Currency balance locked in open orders | Currency
available | Decimal | Currency balance available for use | Currency
### bitso.Balances
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
currencies | list | name for each currency | -
mxn | bitso.Balance | mxn bitso.Balance Object | -
btc | bitso.Balance | btc bitso.Balance Object | -
eth | bitso.Balance | eth bitso.Balance Object | -
### bitso.Fee
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
book | String | Order book symbol | Major_Minor
fee_decimal | Decimal | Customer trading fee as a decimal |
fee_percent | Decimal | Customer trading fee as a percentage |
### bitso.Fees
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
books | list | name for each book | -
btc_mxn | bitso.Fee | btc_mxn bitso.Fee Object | -
eth_mxn | bitso.Fee | eth_mxn bitso.Fee Object | -
### bitso.Trade
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
tid | Long | Trade ID |
book | String | Order book symbol | Major_Minor
amount | Decimal | Major amount transacted | Major
price | Decimal | Price per unit of major | Minor
side | String | Indicates the maker order side (maker order is the order that was open on the order book) |
created_at | Datetime | Datetime at which the trade was executed |
### bitso.Withdrawal
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
wid | String | Withdrawal ID |
currency | String | Currency withdrawn symbol |
method | String | Method for this withdrawal (MXN, BTC, ETH) |
amount | Decimal | The withdrawn amount | currency
status | String | The status for this withdrawal (pending, complete, cancelled) |
created_at | Datetime | Datetime at which the withdrawal as created |
details | Dict | Specific withdrawal details) |
### bitso.Funding
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
fid | String | Funding ID |
currency | String | Currency funding symbol |
method | String | Method for this funding (MXN, BTC, ETH) |
amount | Decimal | The funding amount | currency
status | String | The status for this funding (pending, complete, cancelled) |
created_at | Datetime | Datetime at which the funding as recieved |
details | Dict | Specific funding details |
### bitso.UserTrade
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
tid | Long | Trade ID |
oid | String | Users’ Order ID |
book | String | Order book symbol | Major_Minor
side | String | Indicates the user’s side for this trade (buy, sell) |
created_at | Datetime | Datetime at which the trade was executed |
major | Decimal | Major amount traded | Major
minor | Decimal | Minor amount traded | Minor
price | Decimal | Price per unit of major | Minor
fees_currency | String | Indicates the currency in which the trade fee was charged |
fees_amount | Decimal | Indicates the amount charged as trade fee | Major
### bitso.LedgerEntry
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
eid | String | Entry ID |
operation | String | Indicates type of operation (funding, withdrawal, trade, fee) |
created_at | Datetime | Timestamp at which the operation was recorded |
balance_updates | List | Updates to user balances for this operation |
details | Dict | Specific operation details |
### bitso.BalanceUpdate
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
currency | String | Currency for this balance update |
balance | Decimal | Amount added or subtracted to user balance | Currency
### bitso.Order
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
oid | String | The Order ID |
book | String | Order book symbol | Major_Minor
type | String | The order type (market, limit) |
side | String | The order side (buy, sell) |
status | String | The order’s status (open, partial-fill, closed)) |
created_at | Datetime | The date the order was created |
updated_at | Datetime | Timestamp at which the order was updated (can be None) |
price | Decimal | The order’s price | Minor
amount | Decimal | The order’s major currency amount | Major
### bitso.FundingDestination
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
account_identifier_name | String | Account identifier name to fund with the specified currency. |
account_identifier | String | Identifier to where the funds can be sent to |
### bitso.TransactionQuote
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
btc_amount | Decimal | The total amount in Bitcoins | Major
currency | String | An ISO 4217 fiat currency symbol (ie, “MXN”). |
gross | Decimal | |
rate | Decimal | This major/manor rate (e.g. BTC/MXN) |
outlets | Dictionary | Dictionary of Bitso Outlet options |
created_at | Datetime | The date the quote was created |
expires_at | Datetime | The date the quote will expire |
### bitso.TransactionOrder
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
btc_amount | Decimal | The total amount in BTC | BTC
btc_pending | Decimal | Unconfirmed BTC, seen by Bitso servers | BTC
btc_received | Decimal | Confirmed BTC seen by Bitso servers | BTC
confirmation_code | String | |
currency | String | An ISO 4217 fiat currency symbol (ie, “MXN”). |
currency_amount | Decimal | |
currency_settled | Decimal | |
currency_fees | Decimal | |
fields | Dictionary | Required fields for Pyament Outlet |
created_at | Datetime | The date the transfer was created |
expires_at | Datetime | The date the transfer order will expire |
id | String | Transfer Order ID |
payment_outlet_id | String | Payment Outlet ID |
qr_img_uri | String | Bitcoin payment QR Code URI |
user_uri | String | Transfer Order URI |
wallet_address | String | Bitcoin address you will send BTC to
### bitso.models.OrderUpdate
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
datetime | Datetime | Order Date/Time |
side | String | 'bid','ask' | Market side
rate | Decimal | Order price | Minor
amount | Decimal | Major currency amount | Major
value | Decimal | Total Order Value (amount*rate) | Minor
### bitso.models.TradeUpdate
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
tid | Int | Trade ID |
rate | Decimal | Order price | Minor
amount | Decimal | Major currency amount | Major
value | Decimal | Total Order Value (amount*rate) | Minor
### bitso.models.StreamUpdate
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
channel | String | ('diff-orders', 'trades', 'orders') |
updates | List | List of (TradeUpdate or OrderUpdate) objects |
# Notations #
**Major** denotes the cryptocurrency, in our case Bitcoin (BTC).
**Minor** denotes fiat currencies such as Mexican Peso (MXN), etc
An order book is always referred to in the API as "Major_Minor". For example: "**btc_mxn**"
# Licence #
The MIT License (MIT)
A Python 2 and Python 3 wrapper for the [Bitso API](https://bitso.com/api_info/)
[![Build Status](https://travis-ci.org/mariorz/python-bitso.svg?branch=master)](https://travis-ci.org/mariorz/python-bitso) [![Requirements Status](https://requires.io/github/mariorz/python-bitso/requirements.svg?branch=master)](https://requires.io/github/mariorz/python-bitso/requirements/?branch=master)
# Public API Usage #
```python
>>> import bitso
>>> api = bitso.Api()
```
# Private API Usage #
```python
>>> import bitso
## Production account
>>> api = bitso.Api(API_KEY, API_SECRET)
## Developer account
>>> api = bitso.Api(API_KEY, API_SECRET,"dev")
```
# Public calls #
### Available Books ###
```python
## Order books available on Bitso
>>> books = api.available_books()
>>> books
AvilableBooks(books=btc_mxn,eth_mxn)
>>> books.btc_mxn
Book(symbol=btc_mxn)
>>> books.btc_mxn.minimum_amount
Decimal('0.00500000')
```
### Ticker ###
```python
## Ticker information
## Parameters
## [book] - Specifies which book to use
## - string
>>> tick = api.ticker('btc_mxn')
>>> tick
Ticker(ask=7866.27, bid=7795.00, high=7866.27, last=7866.27, low=7707.43, datetime=2016-04-22 16:46:25, vwaplow=7795.00)
>>> tick.last
Decimal('7866.27')
>>> tick.created_at
datetime.datetime(2016, 4, 22, 16, 46, 53)
```
### Order Book ###
```python
## Public order book
## Parameters
## [book] - Specifies which book to use
## - string
## [aggregate = True] - Group orders with the same price
## - boolean
>>> ob = api.order_book('btc_mxn')
>>> ob.updated_at
atetime.datetime(2016, 12, 13, 22, 54, 2, tzinfo=tzutc())
>>> ob.bids
[PublicOrder(book=btc_mxn,price=3160.00, amount=0.63966069),
PublicOrder(book=btc_mxn,price=2959.00, amount=0.72143122),
PublicOrder(book=btc_mxn,price=2850.00, amount=3.00000000),
PublicOrder(book=btc_mxn,price=2750.00, amount=1.00000000),
PublicOrder(book=btc_mxn,price=2500.12, amount=45.00000000),
...
]
>>> ob.asks
[PublicOrder(book=btc_mxn,price=8000.00, amount=48.37402966),
PublicOrder(book=btc_mxn,price=8160.00, amount=0.12340000),
PublicOrder(book=btc_mxn,price=9000.00, amount=40.00000000),
PublicOrder(book=btc_mxn,price=9160.00, amount=0.76500000)
...
]
```
### Trades ###
```python
## Public trades
## Parameters
## [book = 'btc_mxn'] - Specifies which book to use
## - str
## [marker = None] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - str
## [sort = 'desc'] - Specifies ordering direction of returned objects (asc, desc)
## - str
## [limit = '25'] - Specifies number of objects to return. (Max is 100)
## - str
>>> trades = api.trades('btc_mxn')
>>> trades
[Trade(tid=1602, price=3160.00, amount=0.00797922, maker_side=buy, created_at=2016-12-13 21:32:05+00:00),
Trade(tid=1601, price=3160.00, amount=0.01000000, maker_side=buy, created_at=2016-12-13 21:32:05+00:00),
Trade(tid=1600, price=8000.00, amount=0.00312500, maker_side=sell, created_at=2016-12-13 21:32:04+00:00),
Trade(tid=1599, price=8000.00, amount=0.01008572, maker_side=sell, created_at=2016-12-13 21:32:04+00:00),
...
]
>>> trades[0].price
Decimal('3160.00')
>>> trades[0].amount
Decimal('0.00797922')
>>> trades[0].created_at
datetime.datetime(2016, 12, 13, 21, 32, 5, tzinfo=tzutc())
```
# Private calls #
Private endpoints are used to manage your account and your orders. These requests must be signed
with your [Bitso credentials](https://bitso.com/api_info#generating-api-keys)
```python
>>> import bitso
>>> api = bitso.Api(API_KEY, API_SECRET)
```
### Account Status ###
```python
## Your account status
>>> status = api.account_status()
>>> status.daily_limit
Decimal('5300')
>>> status.daily_remaining
Decimal('5300.00')
```
### Account Balances ###
```python
## Your account balances
>>> balances = api.balances()
>>> balances
Balances(currencies=btc,etc,eth,mxn)
>>> balances.currencies
[u'btc', u'etc', u'eth', u'mxn']
>>> balances.btc.name
u'btc'
>>> balances.btc.available
Decimal('3.46888741')
```
### Fees ###
```python
## Your trade fees
>>> fees = api.fees()
>>> fees
Fees(books=btc_mxn,eth_mxn)
>>> fees.books
[u'btc_mxn', u'eth_mxn']
>>> fees.btc_mxn
Fee(book=btc_mxn, fee_percent=0.0000)
>>> fees.btc_mxn.fee_percent
Decimal('0.8500')
>>> fees.withdrawal_fees
WithdawalFees(curencies=eth,btc)
>>> fees.withdrawal_fees.btc
Decimal('0.001')
```
### Ledger ###
```python
## A ledger of your historic operations.
## Parameters
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> ledger = api.ledger()
>>> ledger
[<bitso.models.LedgerEntry at 0x10d4fdc50>,
<bitso.models.LedgerEntry at 0x10d4fd550>,
<bitso.models.LedgerEntry at 0x10d5c4d90>,
<bitso.models.LedgerEntry at 0x10d5c4bd0>,
<bitso.models.LedgerEntry at 0x10d5c4550>,
...
]
>>> ledger[0].operation
u'fee'
>>> ledger[1].operation
u'trade'
>>> ledger[1].balance_updates
[BalanceUpdate(currency=mxn, amount=25.21433520,
BalanceUpdate(currency=btc, amount=-0.00797922]
>>> ledger[1].balance_updates[0].amount
Decimal('25.21433520')
```
### Withdrawals ###
```python
## Detailed info on your fund withdrawals.
## Parameters
## [wids] - Specifies which withdrawal objects to return by IDs
## - list
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> withdrawals = api.withdrawals()
>>> withdrawals
[Withdrawal(wid=019e8f42da7eb0e44bf5ce0013475058, amount=0.001, currency=btc),
Withdrawal(wid=efa28b88e326619d91ba809a82e1282b, amount=0.001, currency=btc),
Withdrawal(wid=9bbde562c7de3e0c5315993a944d3873, amount=0.001, currency=btc),
Withdrawal(wid=e19b33a5ec2606e8a25963ceea9d2254, amount=0.001, currency=btc),
Withdrawal(wid=b76af418eb94c61b72c6bb20d316e115, amount=0.001, currency=btc),
...
]
>>> withdrawals[0].status
u'pending'
>>> withdrawals[0].method
u'Bitcoin'
>>> withdrawals[0].amount
Decimal('0.001')
```
### Fundings ###
```python
## Detailed info on your fundings.
## Parameters
## [fids] - Specifies which funding objects to return by IDs
## - list
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> fundings = api.fundings()
>>> fundings
[Funding(fid=4e28aa988a74d8b9868f400a18d00910, amount=49596.65217865, currency=mxn),
Funding(fid=3799c39ea8f1ccf6e6bbcaea1a0cbed1, amount=8.12500000, currency=btc)]
>>> fundings[0].status
u'complete'
>>> fundings[0].amount
Decimal('49596.65217865')
```
### User Trades ###
```python
## Your trades
## Parameters
## [book = all]- Specifies which book to use
## - string
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> utx = api.user_trades()
>>> utx
[UserTrade(tid=1610, book=btc_mxn, price=3160.00, major=-0.00797922, minor=25.21433520),
UserTrade(tid=1609, book=btc_mxn, price=3160.00, major=-0.01000000, minor=31.60000000),
UserTrade(tid=1608, book=btc_mxn, price=8000.00, major=0.00312500, minor=-25.00000000),
UserTrade(tid=1607, book=btc_mxn, price=8000.00, major=0.01008572, minor=-80.68576000),
...,
]
>>> utx[0].type
'trade'
>>> utx[0].btc
Decimal('0.00981097')
>>> txs[0].btc_mxn
Decimal('7780.00')
>>> txs[0].rate
Decimal('7780.00')
```
### Open Orders ###
```python
## Returns a list of the user’s open orders
## Parameters
## [book] - Specifies which book to use
## - str
## [marker] - Returns objects that are older or newer (depending on 'sort’) than the object with this ID
## - string
## [limit = 25] - Limit result to that many transactions
## - int
## [sort = 'desc'] - Sorting by datetime
## - string - 'asc' or
## - 'desc'
>>> oo = api.open_orders('btc_mxn')
>>> oo
[Order(oid=s5ntlud6oupippk8iigw5dazjdxwq5vibjcwdp32ksk9i4h0nyxsc8svlpscuov5, side=buy, price=7000.00, original_amount=0.01000000, created_datetime=2016-04-22 14:31:10)]
>>> oo[0].price
Decimal('7000.00')
>>> oo[0].oid
s5ntlud6oupippk8iigw5dazjdxwq5vibjcwdp32ksl9i4h0nyxsc8svlpscuov5
```
### Lookup Order ###
```python
## Returns a list of details for 1 or more orders
## Parameters
## order_ids - A list of Bitso Order IDs.
## - string
>>> orders = api.lookup_order([ORDER_ID1, ORDER_ID2])
>>> orders
[Order(oid=s0ntlud6oupippk8iigw5dazjdxwq5vibjcwdp12ksk9i4h0nyxsc8svlpscuov5, side=buy, price=7000.00, original_amount=0.01000000, created_datetime=2016-04-22 14:31:10),
Order(oid=whtyptv0f348fajdydoswcf6cj20d0kahd77657l7ctnnd1lrpdn2suebwfpxz0f, side=buy, price=7200.00, original_amount=0.01200000, created_datetime=2016-04-22 14:32:10)]
```
### Cancel Order ###
```python
## Cancels an open order
## Parameters
## order_id - A Bitso Order ID.
## - string
>>> api.cancel_order(ORDER_ID)
u'true' #on success
```
### Place Order ###
```python
## Places a buy limit order.
## [book] - Specifies which book to use (btc_mxn, eth_mxn)
## - str
## [side] - the order side (buy, sell)
## - str
## [order_type] - the order type (limit, market)
## - str
## amount - Amount of major currency to buy.
## - string
## major - The amount of major currency for this order. An order must be specified in terms of major or minor, never both.
## - string. Major denotes the cryptocurrency, in our case Bitcoin (BTC) or Ether (ETH).
## minor - The amount of minor currency for this order. Minor denotes fiat currencies, in our case Mexican Peso (MXN)
## - string
## price - Price per unit of major. For use only with limit orders
## - string
>>> order = api.place_order(book='btc_mxn', side='buy', order_type='limit', major='.01', price='7000.00')
>>> order
{"oid":"jli47Q3gQqXflk1n"}
```
### Funding Destination Address ###
```python
## Gets a Funding destination address to fund your account
## fund_currency - Specifies the currency you want to fund your account with (btc, eth, mxn)
## - str
>>> fd = api.funding_destination('btc')
>>> fd
FundingDestination(account_identifier_name=Bitcoin address)
## Returns a FundingDestination object
>>> fd.account_identifier
u'3CEWgs1goBbafUoThjWff4oX4wQKfxqpeV'
## account_identifier attribute is the address you can use to fund your account
```
### Bitcoin Withdrawal ###
```python
## Triggers a bitcoin withdrawal from your account
## amount - The amount of BTC to withdraw from your account
## - string
## address - The Bitcoin address to send the amount to
## - string
>>> api.btc_withdrawal('0.000000001', '1TVXn5ajmMQEbkiYNobgHVutVtMWcNZGV')
ok # Returns 'ok' on success
```
### Ether Withdrawal ###
```python
## Triggers an ether withdrawal from your account
## amount - The amount of ETH to withdraw from your account
## - string
## address - The Ethereum address to send the amount to
## - string
>>> api.eth_withdrawal('0.000000001', '0x55f03a62acc946dedcf8a0c47f16ec3892b29e6d')
ok # Returns 'ok' on success
```
### Ripple Withdrawal ###
```python
## Triggers a ripple withdrawal from your account
## currency - The currency to withdraw
## - string
## amount - The amount of currency to withdraw from your account
## - string
## address - The ripple address to send the amount to
## - string
>>> api.ripple_withdrawal('xrp', '1.10', 'rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn')
ok # Returns 'ok' on success
```
### Bank Withdrawal (SPEI) ###
```python
## Triggers a SPEI withdrawal from your account. These withdrawals are
## immediate during banking hours (M-F 9:00AM - 5:00PM Mexico City Time).
##
## amount - The amount of MXN to withdraw from your account
## - string
## recipient_given_names - The recipient’s first and middle name(s)
## - string
## recipient_family_names - The recipient’s last name)
## - string
## clabe - The CLABE number where the funds will be sent to
## - string
## notes_ref - The alpha-numeric reference number for this SPEI
## - string
## numeric_ref - The numeric reference for this SPEI
## - string
>>> api.spei_withdrawal(amount='3500.0', first_names='Satoshi', last_names='Nakamoto', clabe=CLABE, notes_ref=NOTES_REF, numeric_ref=NUMERIC_REF)
ok # Returns 'ok' on success
```
# Transfer API #
**Access to this API is available on request, and not enabled by default. Users won’t be able to use this API unless Bitso has enabled it on their account. [API Docs](https://bitso.com/api_info/?shell#transfer-api5)**
Bitso’s powerful Transfer API allows for simple integration for routing Bitcoin payments directly through to a choice of Mexican Peso end-points.
The workflow is as follows:
```python
## Request quote
>>> quote = api.transfer_quote(amount='25.0', currency='MXN')
## Create transfer using quote
>>> transfer = api.transfer_create(amount='25.0', currency='MXN', rate=quote.rate, payment_outlet='vo', email_address='mario@ret.io', recipient_given_name='mario romero')
## Send bitcoins to address given
>>> print(transfer.wallet_address)
## Check Transfer status, after 1 confirmation, pesos are delivered
>>> print(api.transfer_status(transfer.id).status)
u'confirming'
```
### Get Transfer Quote ###
```python
## Get a quote for a transfer for various Bitso Outlets.
##
## btc_amount - Mutually exclusive with amount. Either this, or amount should
## be present in the request. The total amount in Bitcoins, as
## provided by the user. NOTE: The amount is in BTC format
## (900mbtc = .9 BTC).
## - string
## amount - Mutually exclusive with btc_amount. Either this, or btc_amount
## should be present in the request. The total amount in Fiat currency.
## Use this if you prefer specifying amounts in fiat instead of BTC.
## - string
## currency - An ISO 4217 fiat currency symbol (ie, "MXN"). If btc_amount is
## provided instead of amount, this is the currency to which the BTC
## price will be converted into. Otherwise, if amount is specified
## instead of btc_amount, this is the currency of the specified amount.
## - string
>>> quote = api.transfer_quote(amount='25.0', currency='MXN')
>>> print(quote)
TransactionQuote(btc_amount=0.00328834, currency=MXN, rate=7602.60, created_at=2016-05-03 00:33:06, expires_at=2016-05-03 00:34:06, gross=25.00)
>>> quote.btc_amount
Decimal('0.00328834')
>>> quote.outlets.keys()
[u'sp', u'rp', u'vo', u'bw', u'pm']
>>> quote.outlets['vo']
{u'available': True,
u'daily_limit': Decimal('0.00'),
u'fee': Decimal('0.00'),
u'id': u'vo',
u'maximum_transaction': Decimal('9999.00'),
u'minimum_transaction': Decimal('25.00'),
u'name': u'Voucher',
u'net': Decimal('25.00'),
u'optional_fields': [],
u'required_fields': {u'email_address': {u'id': u'email_address',
u'name': u'Email Address'},
u'recipient_given_name': {u'id': u'recipient_given_name', u'name': u''}},
u'verification_level_requirement': u'0'}
```
### Create Transfer ###
```python
## Get a quote for a transfer for various Bitso Outlets.
##
## btc_amount - Mutually exclusive with amount. Either this, or amount should
## be present in the request. The total amount in Bitcoins, as
## provided by the user. NOTE: The amount is in BTC format
## (900mbtc = .9 BTC).
## - string
## amount - Mutually exclusive with btc_amount. Either this, or btc_amount
## should be present in the request. The total amount in Fiat currency.
## Use this if you prefer specifying amounts in fiat instead of BTC.
## - string
## currency - An ISO 4217 fiat currency symbol (ie, "MXN"). If btc_amount is
## provided instead of amount, this is the currency to which the BTC
## price will be converted into. Otherwise, if amount is specified
## instead of btc_amount, this is the currency of the specified amount.
## - string
## rate - This is the rate (e.g. BTC/MXN), as acquired from the
## transfer_quote method. You must request a quote in this way before
## creating a transfer.
## - string
## payment_outlet - The outlet_id as provided by quote method.
## - string
## required fields parameters - Each of the other 'required_fields',
## as stipulated in the TransferQuote for the chosen payment_outlet.
## - string
>>> transfer = api.transfer_create(amount='25.0', currency='MXN', rate=quote.rate, payment_outlet='vo', email_address='satoshin@gmx.com', recipient_given_name='satoshi nakamoto')
>>> print(transfer)
TransactionQuote(btc_amount=0.00328834, currency=MXN, rate=7602.60, created_at=2016-05-03 00:33:06, expires_at=2016-05-03 00:34:06, gross=25.00)
>>> transfer.btc_amount
Decimal('0.00328834')
>>> quote.wallet_address
u'3LiLpKyfXJmeDcD5ABGtmHGjkxnZTHnBxv'}
```
### Get Transfer Status ###
```python
## Request status for a transfer order
##
## transfer_id - Bitso Transfer Order ID (As returned by transfer_create
## method.
## - string
>>> print(api.transfer_status(transfer.id).status)
u'confirming'
```
# Websocket API #
WebSocket is a protocol providing full-duplex communication channels over a single TCP connection. [Bitso's Websocket API](https://bitso.com/api_info/?shell#websocket-api) allows a continuous connection that will receive updates according to the client's subscribed channels.
#### Available Channels: ####
+ **'trades':** will send updates on each new registered trade.
+ **'diff-orders':** will send across any modifications to the order book. Specifically, any state changes in existing orders (including orders not in the top 20), and any new orders.
+ **'orders':** maintains an up-to-date list of the top 20 asks and the top 20 bids, new updates are sent across the channel whenever there is a change in either top 20.
#### Basic Example ####
Prints every trade.
```python
from bitso import websocket
class BasicBitsoListener(websocket.Listener):
def on_connect(self):
print("Connected")
def on_update(self, data):
for obj in data.updates:
print(obj)
if __name__ == '__main__':
listener = BasicBitsoListener()
client = websocket.Client(listener)
channels = ['trades']
book = 'btc_mxn'
client.connect(channels, book)
```
```shell
> python examples/ws_trades.py
Connected
TradeUpdate(tid=96093, amount=0.00296048, rate=8444.56,value=25)
TradeUpdate(tid=96094, amount=0.0568058, rate=8444.56,value=479.7)
TradeUpdate(tid=96095, amount=0.45721742, rate=8444.56,value=3861)
TradeUpdate(tid=96096, amount=1.25176796, rate=8335.88,value=10434.58)
TradeUpdate(tid=96097, amount=0.75948406, rate=8335.83,value=6330.93)
TradeUpdate(tid=96098, amount=0.38027314, rate=8334.31,value=3169.31)
TradeUpdate(tid=96099, amount=0.54340182, rate=8329.95,value=4526.5)
TradeUpdate(tid=96100, amount=0.44632784, rate=8323.59,value=3715.04)
TradeUpdate(tid=96101, amount=0.03216174, rate=8322.31,value=267.65)
TradeUpdate(tid=96102, amount=2.92387591, rate=8318.13,value=24321.17)
TradeUpdate(tid=96103, amount=0.27482146, rate=8313.96,value=2284.85)
TradeUpdate(tid=96104, amount=1.33065393, rate=8312,value=11060.39)
TradeUpdate(tid=96105, amount=0.70166614, rate=8310.66,value=5831.3)
TradeUpdate(tid=96106, amount=0.11416146, rate=8434.37,value=962.88)
```
#### Advanced Example ####
Gets a copy of the order book via the rest API once, and keeps it up to date using the **'diff-orders'** channel. Logs every order, spread update, or trade.
See [examples/livebookexample.py](https://github.com/bitsoex/bitso-py/blob/master/examples/livebookexample.py)
```shell
> python examples/livebookexample.py
2016-05-09 20:17:32,232 - INFO - Starting new HTTPS connection (1): bitso.com
2016-05-09 20:17:33,118 - INFO - Order Book Fetched. Best ask: 8434.3700, Best bid: 8351.3000, Spread: 83.0700
2016-05-09 20:17:33,589 - INFO - Websocket Connection Established
2016-05-09 20:17:33,711 - INFO - Best ask: 8434.3700, Best bid: 8351.3000, Spread: 83.0700
2016-05-09 20:22:30,301 - INFO - New Order. ask: 0.0000 @ 8434.3700 = 0.0000
2016-05-09 20:22:30,306 - INFO - Removed price level at: 8434.3700
2016-05-09 20:22:30,306 - INFO - Best ask: 8440.0000, Best bid: 8351.3000, Spread: 88.7000
2016-05-09 20:22:31,021 - INFO - New Order. ask: 0.1000 @ 8492.9700 = 849.2900
2016-05-09 20:22:31,022 - INFO - Best ask: 8440.0000, Best bid: 8351.3000, Spread: 88.7000
```
# Models #
The wrapper uses models to represent data structures returned by the Bitso API.
### bitso.Book
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
symbol | String | Order book symbol | Major_Minor
minimum_amount | Decimal | Minimum amount of major when placing orders | Major
maximum_amount | Decimal | Maximum amount of major when placing orders | Major
minimum_price | Decimal | Minimum price when placing orders | Minor
maximum_price | Decimal | Maximum price when placing orders | Minor
minimum_value | Decimal | Minimum value amount (amount*price) when placing orders | Minor
maximum_value | Decimal | Maximum value amount (amount*price) when placing orders | Minor
### bitso.AvailableBooks
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
books | list | symbols for each book available | -
btc_mxn | bitso.Book | btc_mxn bitso.Book Object| -
eth_mxn | bitso.Book | eth_mxn bitso.Book Object| -
### bitso.AccountRequiredField
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
name | String | Field name that will be user for “account_creation” endpoint |
description | String | Describes each field |
### bitso.Ticker
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
book | String | Order book symbol | Major_Minor
ask | Decimal | Lowest sell order | Minor/Major
bid | Decimal | Highest buy order | Minor/Major
last | Decimal | Last traded price | Minor/Major
high | Decimal | Last 24 hours price high | Minor/Major
low | Decimal | Last 24 hours price low | Minor/Major
vwap | Decimal | Last 24 hours price high | Minor/Major
volume | Decimal | Last 24 hours volume | Major
created_at | Datetime | Ticker current datetime |
### bitso.PublicOrder
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
book | String | Order book symbol | Major_Minor
price | Decimal | Price per unit of major | Minor
amount | Decimal | Major amount in order | Major
created_at | Datetime | The datetime at which the order was created |
updated_at | Datetime | The datetime at which the order was updated (Can be None) |
### bitso.OrderBook
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
asks | List | List of open asks | Minor/Major
bids | List | List of open bids | Minor/Major
created_at | Datetime | OrderBook current datetime |
### bitso.Balance
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
name | String | Currency name |
total | Decimal | Total balance for currency | Currency
locked | Decimal | Currency balance locked in open orders | Currency
available | Decimal | Currency balance available for use | Currency
### bitso.Balances
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
currencies | list | name for each currency | -
mxn | bitso.Balance | mxn bitso.Balance Object | -
btc | bitso.Balance | btc bitso.Balance Object | -
eth | bitso.Balance | eth bitso.Balance Object | -
### bitso.Fee
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
book | String | Order book symbol | Major_Minor
fee_decimal | Decimal | Customer trading fee as a decimal |
fee_percent | Decimal | Customer trading fee as a percentage |
### bitso.Fees
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
books | list | name for each book | -
btc_mxn | bitso.Fee | btc_mxn bitso.Fee Object | -
eth_mxn | bitso.Fee | eth_mxn bitso.Fee Object | -
### bitso.Trade
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
tid | Long | Trade ID |
book | String | Order book symbol | Major_Minor
amount | Decimal | Major amount transacted | Major
price | Decimal | Price per unit of major | Minor
side | String | Indicates the maker order side (maker order is the order that was open on the order book) |
created_at | Datetime | Datetime at which the trade was executed |
### bitso.Withdrawal
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
wid | String | Withdrawal ID |
currency | String | Currency withdrawn symbol |
method | String | Method for this withdrawal (MXN, BTC, ETH) |
amount | Decimal | The withdrawn amount | currency
status | String | The status for this withdrawal (pending, complete, cancelled) |
created_at | Datetime | Datetime at which the withdrawal as created |
details | Dict | Specific withdrawal details) |
### bitso.Funding
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
fid | String | Funding ID |
currency | String | Currency funding symbol |
method | String | Method for this funding (MXN, BTC, ETH) |
amount | Decimal | The funding amount | currency
status | String | The status for this funding (pending, complete, cancelled) |
created_at | Datetime | Datetime at which the funding as recieved |
details | Dict | Specific funding details |
### bitso.UserTrade
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
tid | Long | Trade ID |
oid | String | Users’ Order ID |
book | String | Order book symbol | Major_Minor
side | String | Indicates the user’s side for this trade (buy, sell) |
created_at | Datetime | Datetime at which the trade was executed |
major | Decimal | Major amount traded | Major
minor | Decimal | Minor amount traded | Minor
price | Decimal | Price per unit of major | Minor
fees_currency | String | Indicates the currency in which the trade fee was charged |
fees_amount | Decimal | Indicates the amount charged as trade fee | Major
### bitso.LedgerEntry
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
eid | String | Entry ID |
operation | String | Indicates type of operation (funding, withdrawal, trade, fee) |
created_at | Datetime | Timestamp at which the operation was recorded |
balance_updates | List | Updates to user balances for this operation |
details | Dict | Specific operation details |
### bitso.BalanceUpdate
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
currency | String | Currency for this balance update |
balance | Decimal | Amount added or subtracted to user balance | Currency
### bitso.Order
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
oid | String | The Order ID |
book | String | Order book symbol | Major_Minor
type | String | The order type (market, limit) |
side | String | The order side (buy, sell) |
status | String | The order’s status (open, partial-fill, closed)) |
created_at | Datetime | The date the order was created |
updated_at | Datetime | Timestamp at which the order was updated (can be None) |
price | Decimal | The order’s price | Minor
amount | Decimal | The order’s major currency amount | Major
### bitso.FundingDestination
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
account_identifier_name | String | Account identifier name to fund with the specified currency. |
account_identifier | String | Identifier to where the funds can be sent to |
### bitso.TransactionQuote
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
btc_amount | Decimal | The total amount in Bitcoins | Major
currency | String | An ISO 4217 fiat currency symbol (ie, “MXN”). |
gross | Decimal | |
rate | Decimal | This major/manor rate (e.g. BTC/MXN) |
outlets | Dictionary | Dictionary of Bitso Outlet options |
created_at | Datetime | The date the quote was created |
expires_at | Datetime | The date the quote will expire |
### bitso.TransactionOrder
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
btc_amount | Decimal | The total amount in BTC | BTC
btc_pending | Decimal | Unconfirmed BTC, seen by Bitso servers | BTC
btc_received | Decimal | Confirmed BTC seen by Bitso servers | BTC
confirmation_code | String | |
currency | String | An ISO 4217 fiat currency symbol (ie, “MXN”). |
currency_amount | Decimal | |
currency_settled | Decimal | |
currency_fees | Decimal | |
fields | Dictionary | Required fields for Pyament Outlet |
created_at | Datetime | The date the transfer was created |
expires_at | Datetime | The date the transfer order will expire |
id | String | Transfer Order ID |
payment_outlet_id | String | Payment Outlet ID |
qr_img_uri | String | Bitcoin payment QR Code URI |
user_uri | String | Transfer Order URI |
wallet_address | String | Bitcoin address you will send BTC to
### bitso.models.OrderUpdate
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
datetime | Datetime | Order Date/Time |
side | String | 'bid','ask' | Market side
rate | Decimal | Order price | Minor
amount | Decimal | Major currency amount | Major
value | Decimal | Total Order Value (amount*rate) | Minor
### bitso.models.TradeUpdate
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
tid | Int | Trade ID |
rate | Decimal | Order price | Minor
amount | Decimal | Major currency amount | Major
value | Decimal | Total Order Value (amount*rate) | Minor
### bitso.models.StreamUpdate
Atribute | Type | Description | Units
------------ | ------------- | ------------- | -------------
channel | String | ('diff-orders', 'trades', 'orders') |
updates | List | List of (TradeUpdate or OrderUpdate) objects |
# Notations #
**Major** denotes the cryptocurrency, in our case Bitcoin (BTC).
**Minor** denotes fiat currencies such as Mexican Peso (MXN), etc
An order book is always referred to in the API as "Major_Minor". For example: "**btc_mxn**"
# Licence #
The MIT License (MIT)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
bitso-py-3.0.1.tar.gz
(42.4 kB
view hashes)
Built Distributions
bitso_py-3.0.1-py3-none-any.whl
(39.1 kB
view hashes)
bitso_py-3.0.1-py2-none-any.whl
(30.1 kB
view hashes)