{"info":{"_postman_id":"b99de588-12df-48b7-8296-3ed2c7551bc7","name":"CoinZoom Public API","description":"<html><head></head><body><h1 id=\"overview\">Overview</h1>\n<h2 id=\"all-apis-have-a-common-prefix-to-their-url\">All APIs have a common prefix to their URL.</h2>\n<p><strong>For testing use:</strong>\n<a href=\"https://api.stage.coinzoom.com/api/v1/public\">https://api.stage.coinzoom.com/api/v1/public</a></p>\n<p><strong>For production use:</strong>\n<a href=\"https://api.coinzoom.com/api/v1/public\">https://api.coinzoom.com/api/v1/public</a></p>\n<p>Each API must include the HTTP header 'Coinzoom-Api-Key' with the value of your API key. These keys can be created within the the CoinZoom exchange from the 'API Trading' menu.  To create your key you will need to complete registration for a CoinZoom Account:</p>\n<p><strong>For testing register here:</strong>\n<a href=\"https://stage.coinzoom.com\">https://stage.coinzoom.com</a> </p>\n<p><strong>For production register here:</strong>\n<a href=\"https://trade.coinzoom.com\">https://trade.coinzoom.com</a></p>\n<p>Requests to the API with a missing <strong>User-Agent</strong> header <strong>will be rejected</strong>. We are requiring that the User-Agent contains your <em>ZoomMe:</em> username.  </p>\n<p>Example:</p>\n<p><code>User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 ZoomMe: your_handle</code></p>\n<p>Total requests to the API endpoints are limited to 120 RPM. Requests to <a href=\"https://stage.coinzoom.com\">https://stage.coinzoom.com</a> and <a href=\"https://trade.coinzoom.com\">https://trade.coinzoom.com</a> may have a lower RPM value. Repeatedly violating CoinZoom's API rate limits and/or failing to back off after receiving 429's can result in an automated IP ban. Repeated violations can result in account ban.</p>\n<h2 id=\"api-endpoint-requests-per-minute\">API Endpoint Requests Per Minute</h2>\n<p><strong>Rest-API Total RPM:</strong> 120 RPM</p>\n<p><strong>Get currencies:</strong> 12 RPS</p>\n<p><strong>Get pairs:</strong> 12 RPM</p>\n<p><strong>Query ledger balances:</strong> 60 RPM</p>\n<p><strong>Place limit order:</strong> 60 RPM</p>\n<p><strong>Place market order:</strong> 60 RPM</p>\n<p><strong>Place stop limit order:</strong> 60 RPM</p>\n<p><strong>Cancel order:</strong> 60 RPM</p>\n<p><strong>Query open orders:</strong> 30 RPM</p>\n<p><strong>Query historic orders:</strong> 60 RPM</p>\n<p><strong>Streaming Websocket API:</strong> 30 RPM</p>\n<h1 id=\"streaming-websocket\">Streaming (websocket)</h1>\n<p>The streaming websocket is available at these following endpoints:</p>\n<p><strong>For testing use:</strong>\nwss://api.stage.coinzoom.com/api/v1/public/market/data/stream</p>\n<p><strong>For production use:</strong>\nwss://api.coinzoom.com/api/v1/public/market/data/stream</p>\n<p>The data items that can be received on this socket are described in the following subsections. You can subscribe to any combination of data items as you want on the socket. </p>\n<p><strong>Note:</strong> when using the websocket, open a connection and send the relevant subscriptions. After that keep the socket open. It is recommended to that you only close and reopen the socket if it is disconnected unexpectedly. Our firewalls may block repeated opening and closing of socket connections and may result in an automatic IP ban.</p>\n<h2 id=\"market-ticker\">Market Ticker</h2>\n<p>To receive updates on the market for a given symbol send this JSON packet with the appropriate symbol name. This is unsecured request so the API and secret keys are not needed.</p>\n<p><code>{\"MarketSummaryRequest\":{\"action\":\"subscribe\",\"symbol\":\"BTC/USD\"}}</code></p>\n<p>To stop receiving this data send the message:</p>\n<p><code>{\"MarketSummaryRequest\":{\"action\":\"unsubscribe\",\"symbol\":\"BTC/USD\"}}</code></p>\n<p>Responses are in the format below. The values in the array are the symbol, opening price, high price, low price, current mid price, volume traded, current best bid price, current best ask price respectively. These values are for a moving 24 hour window ending at the current time:</p>\n<p><code>{\"ms\":[\"BTC/USD\",6898.3,7254.76,6600.36,7207.06,0.0,7195.53,7218.58]}</code></p>\n<h2 id=\"order-book-ticker\">Order Book Ticker</h2>\n<p>To receive the order book for a given symbol send this JSON packet with the appropriate symbol name. This is unsecured request so the API and secret keys are not needed.</p>\n<p><code>{\"OrderBookRequest\":{\"requestId\":\"BTC/USD\",\"action\":\"subscribe\",\"symbol\":\"BTC/USD\",\"aggregate\":false,\"depth\":0}}</code></p>\n<p>To stop receiving this data send the message:</p>\n<p><code>{\"OrderBookRequest\":{\"requestId\":\"BTC/USD\",\"action\":\"unsubscribe\",\"symbol\":\"BTC/USD\"}}</code></p>\n<p>The responses come in two forms. A full order book, and incremental updates to this. You should receive a full order book message first. </p>\n<p>An example of a full message is below. The <code>b</code> and <code>s</code> arrays contain the buy and sell sides of the order book. Each individual buy and sell is an array of three values - id, price, amount. The id is used for the incremental updates:</p>\n<p><code>{\"ob\":\"BTC/USD\",\"b\":[[\"3\",0.01,0.0100001],[\"5\",7193.07,6.95113491],[\"9\",7195.95,0.69483529]],\"s\":[[\"1\",7221.88,6.92340499],[\"2\",7219.0,0.69261671]]}</code></p>\n<p>An example of an incremental message is below. If a buy or sell only contains the id it is an instruction to delete that record from the order book. Otherwise it is an instruction to add it to the book or update it if it is already there.</p>\n<p><code>{\"oi\":\"BTC/USD\",\"b\":[[\"9\"],[\"5\"],[\"7\",7193.27,6.95094164],[\"8\",7196.15,0.69481598]],\"s\":[[\"2\"],[\"1\"],[\"4\",7222.08,6.92321326],[\"6\",7219.2,0.69259752]]}</code></p>\n<h2 id=\"candle-ticker\">Candle Ticker</h2>\n<p>To receive candles for a given symbol send this JSON packet with the appropriate symbol name. This is unsecured request so the API and secret keys are not needed. The supported intervals are M1 (one minute), M5 (Five minutes), M15 (Fifteen minutes), M30 (Thirty minutes), H1 (One hour), H2 (Two hour), H4 (Four hour), D1 (One day), W1 (One week), L1 (One month).</p>\n<p><code>{\"CandleRequest\":{\"action\":\"subscribe\",\"symbol\":\"BTC/USD\",\"interval\":\"M1\"}}</code></p>\n<p>To stop receiving this data send the message:</p>\n<p><code>{\"CandleRequest\":{\"action\":\"unsubscribe\",\"symbol\":\"BTC/USD\",\"interval\":\"M1\"}}</code></p>\n<p>An example of the response message is below. The values in the <code>c</code> array are timestamp, opening price, low price, high price, closing price, volume.</p>\n<p><code>{\"cu\":\"BTC/USD\",\"i\":\"M1\",\"c\":[[\"2019-11-26T00:51:00Z\",7140.68,7149.15,7140.51,7145.5,0.0]]}</code></p>\n<h2 id=\"trade-history\">Trade History</h2>\n<p>To receive the trade history for a given symbol send this JSON packet with the appropriate symbol name. This is unsecured request so the API and secret keys are not needed.</p>\n<p><code>{\"TradeSummaryRequest\": {\"action\": \"subscribe\", \"symbol\": \"BTC/USD\"}}</code></p>\n<p>To stop receiving this data send the message:</p>\n<p><code>{\"TradeSummaryRequest\": {\"action\": \"unsubscribe\", \"symbol\": \"BTC/USD\"}}</code></p>\n<p>An example of the response message is below. The values in the array are the symbol, price, quantity and timestamp. The data represents a summary of all trades over a time period of approximately half a second. The quantity is the cumulative quantity of all trades in that period. The price is the weighted average price (weighted by trade quantity). If there have been no trades a message will not be sent on the socket.</p>\n<p><code>{\"ts\": [\"BTC/USD\", 8772.05, 0.01, \"2020-01-16T21:02:23Z\"]}</code></p>\n<h2 id=\"order-updates\">Order Updates</h2>\n<p>To receive updates on your orders send this JSON packet </p>\n<p><code>{\"OrderUpdateRequest\":{\"action\":\"subscribe\",\"apiKey\":\"your key\",\"secretKey\":\"your secret\"}}</code></p>\n<p>Sample responses for a successfully filled market order are:</p>\n<p><code>{\"OrderResponse\":{\"orderId\":\"300e0bb8-3c6b-417e-b3fb-b6197ff3a907\",\"clientOrderId\":\"my-id-3\",\"symbol\":\"ETH/USD\",\"orderType\":\"MARKET\",\"orderSide\":\"BUY\",\"quantity\":3.14,\"executionType\":\"NEW\",\"orderStatus\":\"NEW\",\"lastQuantity\":0,\"leavesQuantity\":3.14,\"cumulativeQuantity\":0,\"transactTime\":\"2019-11-14T21:15:55.860601Z\"}}</code></p>\n<p><code>{\"OrderResponse\":{\"id\":\"26dbbb12-fd7a-4e0f-9f1a-7ffd1582e5c5\",\"orderId\":\"300e0bb8-3c6b-417e-b3fb-b6197ff3a907\",\"clientOrderId\":\"my-id-3\",\"symbol\":\"ETH/USD\",\"orderType\":\"MARKET\",\"orderSide\":\"BUY\",\"quantity\":3.14,\"executionType\":\"FILL\",\"orderStatus\":\"FILLED\",\"lastPrice\":184.96,\"averagePrice\":184.96,\"lastQuantity\":3.14,\"leavesQuantity\":0,\"cumulativeQuantity\":3.14,\"transactTime\":\"2019-11-14T21:15:56.280367Z\"}}</code></p>\n<p>Sample responses for a successfully cancelled order are:</p>\n<p><code>{\"OrderCancelResponse\":{\"orderId\":\"7a8514a8-a977-400c-a628-f70c4c182186\",\"response\":\"Cancel Pending\",\"symbol\":\"ETH/USD\"}}</code></p>\n<p><code>{\"OrderResponse\":{\"id\":\"52e367f7-a81a-4ae8-bff8-3e3fdf95b9d9\",\"orderId\":\"7a8514a8-a977-400c-a628-f70c4c182186\",\"symbol\":\"ETH/USD\",\"orderType\":\"LIMIT\",\"orderSide\":\"BUY\",\"price\":120,\"quantity\":10,\"executionType\":\"CANCEL\",\"orderStatus\":\"CANCELLED\",\"lastQuantity\":0,\"leavesQuantity\":0,\"cumulativeQuantity\":0,\"transactTime\":\"2019-11-14T21:13:21.954453Z\"}}</code></p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Overview","slug":"overview"},{"content":"Streaming (websocket)","slug":"streaming-websocket"}],"owner":"8443211","collectionId":"b99de588-12df-48b7-8296-3ed2c7551bc7","publishedId":"SW7XbVjM","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"60BB46"},"publishDate":"2019-12-09T17:55:34.000Z"},"item":[{"name":"Get currencies","id":"7a50c684-4c5d-41c5-861b-c9205692599e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Coinzoom-Api-Key","value":"{{coinzoomApiKey}}","type":"text"},{"key":"Coinzoom-Api-Secret","value":"{{coinzoomSecretKey}}","type":"text"}],"url":"{{coinzoomHost}}/api/v1/public/currencies","urlObject":{"path":["api","v1","public","currencies"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7a50c684-4c5d-41c5-861b-c9205692599e"},{"name":"Get pairs","id":"d48c7063-0abb-4e3b-94ea-79c7c2d5768d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{coinzoomHost}}/api/v1/public/instruments","urlObject":{"path":["api","v1","public","instruments"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"d48c7063-0abb-4e3b-94ea-79c7c2d5768d"},{"name":"Query ledger balances","id":"fa4928c1-490f-4a28-87b4-274eb7d7fd11","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Coinzoom-Api-Key","type":"text","value":"{{coinzoomApiKey}}"},{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Coinzoom-Api-Secret","type":"text","value":"{{coinzoomSecretKey}}"}],"body":{"mode":"raw","raw":""},"url":"{{coinzoomHost}}/api/v1/public/ledger/list","urlObject":{"path":["api","v1","public","ledger","list"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"fa4928c1-490f-4a28-87b4-274eb7d7fd11"},{"name":"Place limit order","id":"5f70b80e-bec2-4b1b-b305-bc4f4c8fa83a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Coinzoom-Api-Key","type":"text","value":"{{coinzoomApiKey}}"},{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Coinzoom-Api-Secret","type":"text","value":"{{coinzoomSecretKey}}"}],"body":{"mode":"raw","raw":"{\n\t\"symbol\": \"ZOOM/USD\",\n\t\"orderType\": \"LIMIT\",\n\t\"orderSide\": \"BUY\",\n\t\"quantity\": 20,\n\t\"price\": 0.03,\n\t\"payFeesWithZoomToken\": true,\n    \"note\": \"Sample note.\"\n}"},"url":"{{coinzoomHost}}/api/v1/public/orders/new","description":"<p>The note is optional and can contain up to 30 characters.</p>\n","urlObject":{"path":["api","v1","public","orders","new"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5f70b80e-bec2-4b1b-b305-bc4f4c8fa83a"},{"name":"Place market order","id":"233c9d9f-7009-4539-99cb-926535385c82","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Coinzoom-Api-Key","value":"{{coinzoomApiKey}}","type":"text"},{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"},{"key":"Coinzoom-Api-Secret","value":"{{coinzoomSecretKey}}","type":"text"}],"body":{"mode":"raw","raw":"{\n\t\"symbol\": \"ZOOM/USD\",\n\t\"orderType\": \"MARKET\",\n\t\"orderSide\": \"BUY\",\n\t\"quantity\": 20,\n\t\"payFeesWithZoomToken\": true,\n    \"note\": \"Sample note.\"\n}","options":{"raw":{"language":"json"}}},"url":"{{coinzoomHost}}/api/v1/public/orders/new","description":"<p>The note is optional and can contain up to 30 characters.</p>\n","urlObject":{"path":["api","v1","public","orders","new"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"233c9d9f-7009-4539-99cb-926535385c82"},{"name":"Place stop limit order","id":"91890bbf-88d6-496e-8bb6-da27ea82832a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Coinzoom-Api-Key","type":"text","value":"{{coinzoomApiKey}}"},{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Coinzoom-Api-Secret","type":"text","value":"{{coinzoomSecretKey}}"}],"body":{"mode":"raw","raw":"{\n\t\"symbol\": \"BTC/USD\",\n\t\"orderType\": \"STOP_LIMIT\",\n\t\"orderSide\": \"BUY\",\n\t\"quantity\": 7.46,\n\t\"price\": 3,\n\t\"stopPrice\": 2,\n\t\"payFeesWithZoomToken\": true,\n    \"note\": \"Sample note.\"\n}"},"url":"{{coinzoomHost}}/api/v1/public/orders/new","description":"<p>The note is optional and can contain up to 30 characters.</p>\n","urlObject":{"path":["api","v1","public","orders","new"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"91890bbf-88d6-496e-8bb6-da27ea82832a"},{"name":"Place OCO order","id":"7d9899be-b71d-4679-83bf-d203ed95e14a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Coinzoom-Api-Key","type":"text","value":"{{coinzoomApiKey}}"},{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Coinzoom-Api-Secret","type":"text","value":"{{coinzoomSecretKey}}"}],"body":{"mode":"raw","raw":"{\n\t\"symbol\": \"BTC/USD\",\n\t\"orderSide\": \"SELL\",\n\t\"quantity\": 0.1,\n\t\"limitPrice\": 60000,\n\t\"stopPrice\": 20000,\n\t\"payFeesWithZoomToken\": true,\n    \"note\": \"Sample note.\"\n}"},"url":"{{coinzoomHost}}/api/v1/public/orders/oco/new","description":"<p>The note is optional and can contain up to 30 characters.</p>\n","urlObject":{"path":["api","v1","public","orders","oco","new"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7d9899be-b71d-4679-83bf-d203ed95e14a"},{"name":"Cancel order","id":"f4cf74ab-7667-4248-978c-d8f0f12bf24c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Coinzoom-Api-Key","type":"text","value":"{{coinzoomApiKey}}"},{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Coinzoom-Api-Secret","type":"text","value":"{{coinzoomSecretKey}}"}],"body":{"mode":"raw","raw":"{\n\t\"orderId\": \"c13b0253-0994-490f-b5e6-56980d409b91\",\n\t\"symbol\": \"BTC/USD\"\n}"},"url":"{{coinzoomHost}}/api/v1/public/orders/cancel","urlObject":{"path":["api","v1","public","orders","cancel"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f4cf74ab-7667-4248-978c-d8f0f12bf24c"},{"name":"Query open orders","id":"f2cd7428-482a-4dbe-8c87-3b8c86a6a336","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Coinzoom-Api-Key","type":"text","value":"{{coinzoomApiKey}}"},{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Coinzoom-Api-Secret","type":"text","value":"{{coinzoomSecretKey}}"}],"body":{"mode":"raw","raw":"{\n\t\"symbol\": null,\n\t\"orderSide\": null,\n\t\"orderStatuses\": [\"NEW\", \"PARTIALLY_FILLED\"],\n\t\"size\": 100,\n\t\"bookmarkOrderId\": null\n}"},"url":"{{coinzoomHost}}/api/v1/public/orders/list","description":"<p>This request returns a list of your open orders. The values in the orderStatus array can be adjusted to get orders in other statuses. The supported values are NEW, PARTIALLY_FILLED, FILLED, CANCELLED, REJECTED.</p>\n<p>The orderSide be one of BUY or SELL. If it is not specified orders from both sides will be returned. </p>\n<p>The data is returned in pages. For the initial request pass <code>null</code> in the bookmarkOrderId fields. To get the next page of data pass the orderId of the last entry in the previous call as the bookmarkOrderId. </p>\n","urlObject":{"path":["api","v1","public","orders","list"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f2cd7428-482a-4dbe-8c87-3b8c86a6a336"},{"name":"Query historic orders","id":"f716cf09-4919-4355-a427-f8705de87bbd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Coinzoom-Api-Key","type":"text","value":"{{coinzoomApiKey}}"},{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Coinzoom-Api-Secret","type":"text","value":"{{coinzoomSecretKey}}"}],"body":{"mode":"raw","raw":"{\n\t\"symbol\": null,\n\t\"orderSide\": null,\n\t\"orderStatuses\": [\"FILLED\", \"CANCELLED\", \"REJECTED\"],\n\t\"size\": 100,\n\t\"bookmarkOrderId\": null\n}"},"url":"{{coinzoomHost}}/api/v1/public/orders/list","description":"<p>This request returns a list of your historic orders. The values in the orderStatus array can be adjusted to get orders in other statuses. The supported values are NEW, PARTIALLY_FILLED, FILLED, CANCELLED, REJECTED.</p>\n<p>The orderSide be one of BUY or SELL. If it is not specified orders from both sides will be returned. </p>\n<p>The data is returned in pages. For the initial request pass <code>null</code> in the bookmarkOrderId fields. To get the next page of data pass the orderId of the last entry in the previous call as the bookmarkOrderId. </p>\n","urlObject":{"path":["api","v1","public","orders","list"],"host":["{{coinzoomHost}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f716cf09-4919-4355-a427-f8705de87bbd"}],"event":[{"listen":"prerequest","script":{"id":"739703b3-a57c-41af-93d8-8fe259e44491","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"debedb2b-6497-4d19-994c-cace2f1553ae","type":"text/javascript","exec":[""]}}]}