{"id":13600281,"url":"https://github.com/adshao/go-binance","last_synced_at":"2025-02-25T18:14:43.025Z","repository":{"id":37412974,"uuid":"108264534","full_name":"adshao/go-binance","owner":"adshao","description":"A Go SDK for Binance API","archived":false,"fork":false,"pushed_at":"2025-02-14T19:14:51.000Z","size":1291,"stargazers_count":1620,"open_issues_count":11,"forks_count":696,"subscribers_count":38,"default_branch":"master","last_synced_at":"2025-02-18T17:15:15.232Z","etag":null,"topics":["api","binance","bitcoin","btc","eth","exchange","go","golang","sdk"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adshao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-10-25T12:06:57.000Z","updated_at":"2025-02-18T08:34:52.000Z","dependencies_parsed_at":"2024-05-11T14:45:25.450Z","dependency_job_id":"c932abc6-9bb4-4e5a-b4d9-bd7cee31a725","html_url":"https://github.com/adshao/go-binance","commit_stats":{"total_commits":342,"total_committers":150,"mean_commits":2.28,"dds":0.847953216374269,"last_synced_commit":"4b74da2aea7db04251d655b3ac5c46f8d6ef5f68"},"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adshao%2Fgo-binance","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adshao%2Fgo-binance/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adshao%2Fgo-binance/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adshao%2Fgo-binance/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adshao","download_url":"https://codeload.github.com/adshao/go-binance/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240719004,"owners_count":19846486,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","binance","bitcoin","btc","eth","exchange","go","golang","sdk"],"created_at":"2024-08-01T18:00:34.480Z","updated_at":"2025-02-25T18:14:42.974Z","avatar_url":"https://github.com/adshao.png","language":"Go","funding_links":[],"categories":["Repositories","Go"],"sub_categories":[],"readme":"### go-binance\n\nA Golang SDK for [binance](https://www.binance.com) API.\n\n[![Build Status](https://travis-ci.org/adshao/go-binance.svg?branch=master)](https://travis-ci.org/adshao/go-binance)\n[![GoDoc](https://godoc.org/github.com/adshao/go-binance?status.svg)](https://godoc.org/github.com/adshao/go-binance)\n[![Go Report Card](https://goreportcard.com/badge/github.com/adshao/go-binance)](https://goreportcard.com/report/github.com/adshao/go-binance)\n[![codecov](https://codecov.io/gh/adshao/go-binance/branch/master/graph/badge.svg)](https://codecov.io/gh/adshao/go-binance)\n\nAll the REST APIs listed in [binance API document](https://github.com/binance-exchange/binance-official-api-docs) are implemented, as well as the websocket APIs.\n\nFor best compatibility, please use Go \u003e= 1.8.\n\nMake sure you have read binance API document before continuing.\n\n### API List\n\nName | Description | Status\n------------ | ------------ | ------------\n[rest-api.md](https://github.com/binance/binance-spot-api-docs/blob/master/rest-api.md) | Details on the Rest API (/api) | \u003cinput type=\"checkbox\" checked\u003e Implemented\n[web-socket-streams.md](https://github.com/binance/binance-spot-api-docs/blob/master/web-socket-streams.md) | Details on available streams and payloads | \u003cinput type=\"checkbox\" checked\u003e  Implemented\n[user-data-stream.md](https://github.com/binance/binance-spot-api-docs/blob/master/user-data-stream.md) | Details on the dedicated account stream | \u003cinput type=\"checkbox\" checked\u003e  Implemented\n[margin-api.md](https://binance-docs.github.io/apidocs/spot/en) | Details on the Margin API (/sapi) | \u003cinput type=\"checkbox\" checked\u003e  Implemented\n[futures-api.md](https://binance-docs.github.io/apidocs/futures/en/#general-info) | Details on the Futures API (/fapi) | \u003cinput type=\"checkbox\" checked\u003e  Implemented\n[delivery-api.md](https://binance-docs.github.io/apidocs/delivery/en/#general-info) | Details on the Coin-M Futures API (/dapi) | \u003cinput type=\"checkbox\" checked\u003e  Implemented\n[options-api.md](https://binance-docs.github.io/apidocs/voptions/en/#general-info) | Details on the Options API(/eapi) | \u003cinput type=\"checkbox\" checked\u003e  Implemented  \n\n  \nIf you find an unimplemented interface, please submit an issue. It's great if you can open a PR to fix it.\n\n### Installation\n\n```shell\ngo get github.com/adshao/go-binance/v2\n```\n\nFor v1 API, it has been moved to `v1` branch, please use:\n\n```shell\ngo get github.com/adshao/go-binance/v1\n```\n\n### Importing\n\n```golang\nimport (\n    // for spot and other interfaces contained in https://binance-docs.github.io/apidocs/spot/en/#change-log\n    \"github.com/adshao/go-binance/v2\"\n    \n    \"github.com/adshao/go-binance/v2/futures\" // optional package\n    \"github.com/adshao/go-binance/v2/delivery\" // optional package\n    \"github.com/adshao/go-binance/v2/options\" // optional package\n)\n```\n\n### Documentation\n\n[![GoDoc](https://godoc.org/github.com/adshao/go-binance?status.svg)](https://godoc.org/github.com/adshao/go-binance)\n\n### REST API\n\n#### Setup\n\nInit client for API services. Get APIKey/SecretKey from your binance account.\n\n```golang\nvar (\n    apiKey = \"your api key\"\n    secretKey = \"your secret key\"\n)\nclient := binance.NewClient(apiKey, secretKey)\nfuturesClient := binance.NewFuturesClient(apiKey, secretKey)    // USDT-M Futures\ndeliveryClient := binance.NewDeliveryClient(apiKey, secretKey)  // Coin-M Futures\n```\n\nA service instance stands for a REST API endpoint and is initialized by client.NewXXXService function.\n\nSimply call API in chain style. Call Do() in the end to send HTTP request.\n\nFollowing are some simple examples, please refer to [godoc](https://godoc.org/github.com/adshao/go-binance) for full references.\n\nIf you have any questions, please refer to the specific version of the code for specific reference definitions or usage methods\n\n##### Proxy Client\n  \n```\nproxyUrl := \"http://127.0.0.1:7890\" // Please replace it with your exact proxy URL.\nclient := binance.NewProxiedClient(apiKey, apiSecret, proxyUrl)\n```\n  \n\n#### Create Order\n\n```golang\norder, err := client.NewCreateOrderService().Symbol(\"BNBETH\").\n        Side(binance.SideTypeBuy).Type(binance.OrderTypeLimit).\n        TimeInForce(binance.TimeInForceTypeGTC).Quantity(\"5\").\n        Price(\"0.0030000\").Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfmt.Println(order)\n\n// Use Test() instead of Do() for testing.\n```\n\n#### Get Order\n\n```golang\norder, err := client.NewGetOrderService().Symbol(\"BNBETH\").\n    OrderID(4432844).Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfmt.Println(order)\n```\n\n#### Cancel Order\n\n```golang\n_, err := client.NewCancelOrderService().Symbol(\"BNBETH\").\n    OrderID(4432844).Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\n```\n\n#### List Open Orders\n\n```golang\nopenOrders, err := client.NewListOpenOrdersService().Symbol(\"BNBETH\").\n    Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfor _, o := range openOrders {\n    fmt.Println(o)\n}\n```\n\n#### List Orders\n\n```golang\norders, err := client.NewListOrdersService().Symbol(\"BNBETH\").\n    Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfor _, o := range orders {\n    fmt.Println(o)\n}\n```\n\n#### List Ticker Prices\n\n```golang\nprices, err := client.NewListPricesService().Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfor _, p := range prices {\n    fmt.Println(p)\n}\n```\n\n#### Show Depth\n\n```golang\nres, err := client.NewDepthService().Symbol(\"LTCBTC\").\n    Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfmt.Println(res)\n```\n\n#### List Klines\n\n```golang\nklines, err := client.NewKlinesService().Symbol(\"LTCBTC\").\n    Interval(\"15m\").Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfor _, k := range klines {\n    fmt.Println(k)\n}\n```\n\n#### List Aggregate Trades\n\n```golang\ntrades, err := client.NewAggTradesService().\n    Symbol(\"LTCBTC\").StartTime(1508673256594).EndTime(1508673256595).\n    Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfor _, t := range trades {\n    fmt.Println(t)\n}\n```\n\n#### Get Account\n\n```golang\nres, err := client.NewGetAccountService().Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfmt.Println(res)\n```\n\n#### Start User Stream\n\n```golang\nres, err := client.NewStartUserStreamService().Do(context.Background())\nif err != nil {\n    fmt.Println(err)\n    return\n}\nfmt.Println(res)\n```\n\n### Websocket\n\nYou don't need Client in websocket API. Just call binance.WsXxxServe(args, handler, errHandler).\n\n\u003e For delivery API you can use `delivery.WsXxxServe(args, handler, errHandler)`.\n\nIf you want to use a proxy, you can set `HTTPS_PROXY` or `HTTP_PROXY` in the environment variable, or you can call `SetWsProxyUrl` in the target packages within your code. Then you can call other websocket functions. For example:\n```golang\nbinance.SetWsProxyUrl(\"http://127.0.0.1:7890\")\nbinance.WsDepthServe(\"LTCBTC\", wsDepthHandler, errHandler)\n```\n  \n#### Depth\n\n```golang\nwsDepthHandler := func(event *binance.WsDepthEvent) {\n    fmt.Println(event)\n}\nerrHandler := func(err error) {\n    fmt.Println(err)\n}\ndoneC, stopC, err := binance.WsDepthServe(\"LTCBTC\", wsDepthHandler, errHandler)\nif err != nil {\n    fmt.Println(err)\n    return\n}\n// use stopC to exit\ngo func() {\n    time.Sleep(5 * time.Second)\n    stopC \u003c- struct{}{}\n}()\n// remove this if you do not want to be blocked here\n\u003c-doneC\n```\n\n#### Kline\n\n```golang\nwsKlineHandler := func(event *binance.WsKlineEvent) {\n    fmt.Println(event)\n}\nerrHandler := func(err error) {\n    fmt.Println(err)\n}\ndoneC, _, err := binance.WsKlineServe(\"LTCBTC\", \"1m\", wsKlineHandler, errHandler)\nif err != nil {\n    fmt.Println(err)\n    return\n}\n\u003c-doneC\n```\n\n#### Aggregate\n\n```golang\nwsAggTradeHandler := func(event *binance.WsAggTradeEvent) {\n    fmt.Println(event)\n}\nerrHandler := func(err error) {\n    fmt.Println(err)\n}\ndoneC, _, err := binance.WsAggTradeServe(\"LTCBTC\", wsAggTradeHandler, errHandler)\nif err != nil {\n    fmt.Println(err)\n    return\n}\n\u003c-doneC\n```\n\n#### User Data\n\n```golang\nwsHandler := func(message []byte) {\n    fmt.Println(string(message))\n}\nerrHandler := func(err error) {\n    fmt.Println(err)\n}\ndoneC, _, err := binance.WsUserDataServe(listenKey, wsHandler, errHandler)\nif err != nil {\n    fmt.Println(err)\n    return\n}\n\u003c-doneC\n```\n\n#### Setting Server Time\n\nYour system time may be incorrect and you may use following function to set the time offset based off Binance Server Time:\n\n```golang\n// use the client future for Futures\nclient.NewSetServerTimeService().Do(context.Background())\n```\n\nOr you can also overwrite the `TimeOffset` yourself:\n\n```golang\nclient.TimeOffset = 123\n```\n\n### Testnet\n\nYou can use the testnet by enabling the corresponding flag.\n\n\u003e Note that you can't use your regular API and Secret keys for the testnet. You have to create an account on\n\u003e the testnet websites : [https://testnet.binancefuture.com/](https://testnet.binancefuture.com/) for futures and delivery\n\u003e or [https://testnet.binance.vision/](https://testnet.binance.vision/) for the Spot Test Network.\n\n#### Spot\n\nUse the `binance.UseTestnet` flag before calling the client creation and the websockets methods.\n\n```go\nimport (\n    \"github.com/adshao/go-binance/v2\"\n)\n\nbinance.UseTestnet = true\nclient := binance.NewClient(apiKey, secretKey)\n```\n\n#### Futures (usd(s)-m futures)\n\nUse the `futures.UseTestnet` flag before calling the client creation and the websockets methods\n\n```go\nimport (\n    \"github.com/adshao/go-binance/v2/futures\"\n)\n\nfutures.UseTestnet = true\nBinanceClient = futures.NewClient(ApiKey, SecretKey)\n```\n\n#### Delivery (coin-m futures)\n\nUse the `delivery.UseTestnet` flag before calling the client creation and the websockets methods\n\n```go\nimport (\n    \"github.com/adshao/go-binance/v2/delivery\"\n)\n\ndelivery.UseTestnet = true\nBinanceClient = delivery.NewClient(ApiKey, SecretKey)\n```\n\n#### Websocket client\n##### Order place\n##### Async write/read\n```go\nfunc main() {\n    orderPlaceService, _ := futures.NewOrderPlaceWsService(apiKey, secretKey)\n    \n    ctx, cancel := context.WithCancel(context.Background())\n    \n    c := make(chan os.Signal, 1)\n    signal.Notify(c, os.Interrupt)\n    go func() {\n        select {\n            case \u003c-c:\n            cancel()\n        }\n    }()\n\n    request := futures.NewOrderPlaceWsRequest()\n    request.\n        Symbol(\"BTCUSDT\").\n        Side(futures.SideTypeSell).\n        Type(futures.OrderTypeLimit).\n        Price(\"68198.00\").\n        Quantity(\"0.002\").\n        TimeInForce(futures.TimeInForceTypeGTC)\n\n    // sender\n    go func() {\n        for {\n            select {\n            case \u003c-ctx.Done():\n                return\n            default:\n                err := orderPlaceService.Do(\"id\", request)\n                if err != nil {\n                    return\n                }\n            }\n        }\n    }()\n\n    wg := \u0026sync.WaitGroup{}\n    wg.Add(1)\n    go listenOrderPlaceResponse(ctx, wg, orderPlaceService)\n    wg.Wait()\n\n    log.Println(\"exit\")\n}\n\nfunc listenOrderPlaceResponse(ctx context.Context, wg *sync.WaitGroup, orderPlaceService *futures.OrderPlaceWsService) {\n    defer wg.Done()\n    \n    go func() {\n        for msg := range orderPlaceService.GetReadChannel() {\n            log.Println(\"order place response\", string(msg))\n        }\n    }()\n    \n    go func() {\n        for err := range orderPlaceService.GetReadErrorChannel() {\n            log.Println(\"order place error\", err)\n        }\n    }()\n\n    select {\n    case \u003c-ctx.Done():\n        orderPlaceService.ReceiveAllDataBeforeStop(10 * time.Second)\n    }\n}\n```\n##### Sync write/read\n```go\nfunc main() {\n    orderPlaceService, _ := futures.NewOrderPlaceWsService(apiKey, secretKey)\n    \n    id := \"some-id\"\n    request := futures.NewOrderPlaceWsRequest()\n    request.\n        Symbol(\"BTCUSDT\").\n        Side(futures.SideTypeSell).\n        Type(futures.OrderTypeLimit).\n        Price(\"68198.00\").\n        Quantity(\"0.002\").\n        TimeInForce(futures.TimeInForceTypeGTC)\n\n    response, err := orderPlaceService.SyncDo(id, request)\n    if err != nil {\n        log.Fatal(err)\n    }\n    \n    // handle response\n}\n```\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadshao%2Fgo-binance","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadshao%2Fgo-binance","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadshao%2Fgo-binance/lists"}