MtGox/API
The MtGox API provides various methods to access different informations from the market, place orders, and more.
Two APIs are available at this point: the HTTP api (available by posting to mtgox.com/code/*) and the websocket API.
Legacy API
This API is available in https://mtgox.com/code/*, and provides various informations. It also supports making an order, a withdraw, a deposit, etc.
Authentication
Authentication is performed by posting a username and a password in variables "name" and "pass". Some methods do not require authentication.
Methods
data/getTrades.php
This allows retrieving all trades which happened in the last 24 hours. The returned data is cached and may not reflect latest activity.
Parameters:
- since: Passing a tid in "since" allows retrieving all trades since that trade. The passed id is may not exist. Ie. to get all trades from the very beginning one would just call https://mtgox.com/code/data/getTrades.php?since=0 . since returns only 100 trades, and you can call the method again by passing the latest trade you have imported in since.
Websocket API
See: http://forum.bitcoin.org/index.php?topic=5855.0 (will be ported here soon)
Connecting
You can connect via: ws://websocket.mtgox.com/mtgox
Channels
The websocket will subscribe you to some channels automatically:
Channel ID | Description |
---|---|
dbf1dee9-4f2e-4a08-8cb7-748919a71b21 | trades (each time a trade happens, you get something here) |
d5f06780-30a8-4a48-a2f8-7ed181b4a13f | the mtgox ticker (lots of updates, with often the same data) |
24e67e0d-1cad-4cc0-9e7a-f8523ef460fe | depth information in realtime (price + amount + type... type=1=Ask, type=2=Bid) |
Additionally each user has a "own" channel which streams informations about orders (new order, deleted order, etc) and trades only the user's trades).
Each message is a JSON-encoded object, with at least "op" element. The "op" element contains the operation to be done (for outgoing messages), or the type of message (for incoming messages).
Possible outgoing commands
unsubscribe Stop receiving messages from a channel (parameter "channel")
Incoming Data
Ticker
{
"channel":"d5f06780-30a8-4a48-a2f8-ed181b4a13f",
"op":"private",
"origin":"broadcast",
"private":"ticker",
"ticker":{
"buy":0.9515,
"high":1,
"low":0.91,
"sell":0.9697,
"vol":34349
}
}
- The ticker field contains the following:
Name Value buy lowest bid as float sell highest ask as float high maximum rate since last close as float low minimum rate since last close as float vol traded volume since last close
Trade
{
"channel":"dbf1dee9-4f2e-4a08-8cb7-748919a71b21",
"op":"private",
"origin":"broadcast",
"private":"trade",
"trade":{
"amount":2.71,
"amount_int":"271000000",
"date":1310279340,
"item":"BTC",
"price":14.43,
"price_currency":"USD",
"price_int":"1443000",
"tid":"1310279340877902",
"trade_type":"bid",
"type":"trade"
}
}
Name Value amount the traded amount in item (BTC), float, deprecated amount_int the traded amount * 100000 date unix timestamp of trade item What was this trade about price price per unit, float, deprecated price_int price in smallest unit as integer (5 decimals of USD, 3 in case of JPY) price_currency currency in which trade was completed tid Trade id (big integer, which is in fact trade timestamp in microseconds) trade_type Did this trade result from the execution of a bid or a ask?
Depth
Changes to the market depth data are broadcast so an up-to-date market depth can be kept by clients.
{
"channel":"24e67e0d-1cad-4cc0-9e7a-f8523ef460fe",
"depth":{
"currency":"USD",
"item":"BTC",
"price":"14.43",
"price_int":"1443000",
"type":1,
"type_str":"ask",
"volume":"-2.71",
"volume_int":"-271000000"
},
"op":"private",
"origin":"broadcast",
"private":"depth"
}
Name Value currency the currency affected item the item (BTC) price price as a float, deprecated price_int the price at which volume change happened * 100000 type 1=ask, 2=bid. deprecated, use type_str type_str type of order at this depth, either "ask" or "bid" volume the volume change as float, deprecated volume_int volume change * 100000
Order update (private)
<source lang="javascript"> {
"channel":"(partial key)", "op":"private", "order_upd":{ "amount":1000, "darkStatus":0, "date":1302836027, "oid":"(oid)", "price":0.9899,"status":1 }, "origin":"broadcast", "private":"order_upd"
}
- order_upd cointains the following:
Name Value amount change in volume of the order darkStatus oid ID of the affected order price status