{"id":37110346,"url":"https://github.com/massive-com/client-go","last_synced_at":"2026-01-14T13:06:14.581Z","repository":{"id":37076689,"uuid":"236782270","full_name":"massive-com/client-go","owner":"massive-com","description":"The official Go client library for the Massive REST and WebSocket API.","archived":false,"fork":false,"pushed_at":"2025-12-08T21:02:16.000Z","size":1234,"stargazers_count":186,"open_issues_count":19,"forks_count":56,"subscribers_count":14,"default_branch":"master","last_synced_at":"2026-01-12T05:36:07.402Z","etag":null,"topics":["crypto-trading","forex-trading","go","golang","options-trading","realtime-stocks","rest-api","stock-data","stock-market","stocks-api","trading"],"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/massive-com.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-01-28T16:32:24.000Z","updated_at":"2026-01-09T06:14:58.000Z","dependencies_parsed_at":"2023-11-27T22:25:23.368Z","dependency_job_id":"a0ca3569-7a04-4faf-b815-f94e011f0048","html_url":"https://github.com/massive-com/client-go","commit_stats":null,"previous_names":["polygon-io/client-golang","polygon-io/client-go"],"tags_count":58,"template":false,"template_full_name":null,"purl":"pkg:github/massive-com/client-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/massive-com","download_url":"https://codeload.github.com/massive-com/client-go/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-go/sbom","scorecard":{"id":740473,"data":{"date":"2025-08-11","repo":{"name":"github.com/polygon-io/client-go","commit":"2cf9e5986d95026a1da51d83de549a77be7e7069"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.3,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":4,"reason":"5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:16","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:17","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/lint.yml:10","Warn: topLevel 'contents' permission set to 'write': .github/workflows/test-coverage.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/test.yml:10","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-coverage.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/test-coverage.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-coverage.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/test-coverage.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-coverage.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/test-coverage.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-coverage.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/test-coverage.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-coverage.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/test-coverage.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-go/test.yml/master?enable=pin","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":8,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 19 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T17:16:53.178Z","repository_id":37076689,"created_at":"2025-08-22T17:16:53.179Z","updated_at":"2025-08-22T17:16:53.179Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28420817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["crypto-trading","forex-trading","go","golang","options-trading","realtime-stocks","rest-api","stock-data","stock-market","stocks-api","trading"],"created_at":"2026-01-14T13:06:14.004Z","updated_at":"2026-01-14T13:06:14.563Z","avatar_url":"https://github.com/massive-com.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Massive (formerly Polygon.io) Go Client - WebSocket \u0026 RESTful APIs\n\nThe official Go client library for the [Massive](https://massive.com/) REST and WebSocket API. This client makes use of Go generics and thus requires Go 1.18. See the [docs](https://massive.com/docs/stocks/getting-started) for more details on our API.\n\n**Note:** Polygon.io has rebranded as [Massive.com](https://massive.com) on Oct 30, 2025. Existing API keys, accounts, and integrations continue to work exactly as before. The only change in this SDK is that it now defaults to the new API base at `api.massive.com`, while `api.polygon.io` remains supported for an extended period.\n\nFor details, see our [rebrand announcement blog post](https://massive.com/blog/polygon-is-now-massive/) or open an issue / contact [support@massive.com](mailto:support@massive.com) if you have questions.\n\n## Getting Started\n\nThis section guides you through setting up a simple project with massive.com/client-go.\n\nFirst, make a new directory for your project and navigate into it:\n```bash\nmkdir myproject \u0026\u0026 cd myproject\n```\n\nNext, initialize a new module for dependency management. This creates a `go.mod` file to track your dependencies:\n```bash\ngo mod init example\n```\n\nThen, create a `main.go` file. For quick start, you can find over 100+ [example code snippets](https://github.com/massive-com/client-go/tree/master/rest/example) that demonstrate connecting to both the REST and WebSocket APIs. Here's an example that fetches the last trade for `AAPL`.\n\n```bash\ncat \u003e main.go \u003c\u003cEOF\n// Stocks - Last Trade\n// https://massive.com/docs/stocks/get_v2_last_trade__stocksticker\n// https://github.com/massive-com/client-go/blob/master/rest/trades.go\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\tmassive \"github.com/massive-com/client-go/v2/rest\"\n\t\"github.com/massive-com/client-go/v2/rest/models\"\n)\n\nfunc main() {\n\n\t// init client\n\tc := massive.New(os.Getenv(\"MASSIVE_API_KEY\"))\n\n\t// set params\n\tparams := \u0026models.GetLastTradeParams{\n\t\tTicker: \"AAPL\",\n\t}\n\n\t// make request\n\tres, err := c.GetLastTrade(context.Background(), params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// do something with the result\n\tlog.Print(res)\n\n}\nEOF\n```\n\nPlease remember to set your Massive API key, which you can find on the massive.com dashboard, in the environment variable `MASSIVE_API_KEY`. Or, as a less secure option, by hardcoding it in your code. But please note that hardcoding the API key can be risky if your code is shared or exposed. You can configure the environment variable by running:\n\n```\nexport MASSIVE_API_KEY=\"\u003cyour_api_key\u003e\"        \u003c- mac/linux\nxset MASSIVE_API_KEY \"\u003cyour_api_key\u003e\"          \u003c- windows\n```\n\nThen, run `go mod tidy` to automatically download and install the necessary dependencies. This command ensures your `go.mod` file reflects all dependencies used in your project:\n```bash\ngo mod tidy\n```\n\nFinally, execute your application:\n```bash\ngo run main.go\n```\n\n## REST API Client\n\n[![rest-docs][rest-doc-img]][rest-doc]\n\nTo get started, you'll need to import two main packages.\n\n```golang\nimport (\n\tmassive \"github.com/massive-com/client-go/v2/rest\"\n\t\"github.com/massive-com/client-go/v2/rest/models\"\n)\n```\n\nNext, create a new client with your [API key](https://massive.com/dashboard/signup).\n\n```golang\nc := massive.New(\"YOUR_API_KEY\")\n```\n\nOr create a client with a custom HTTP client implementation.\n\n```golang\nhc := http.Client{} // some custom HTTP client\nc := massive.NewWithClient(\"YOUR_API_KEY\", hc)\n```\n\n### Using the client\n\nAfter creating the client, making calls to the Massive API is simple.\n\n```golang\nparams := models.GetTickerDetailsParams{\n    Ticker: \"AAPL\",\n}.WithDate(models.Date(time.Date(2021, 7, 22, 0, 0, 0, 0, time.Local)))\n\nres, err := c.GetTickerDetails(context.Background(), params)\nif err != nil {\n    log.Fatal(err)\n}\nlog.Print(res) // do something with the result\n```\n\n### Pagination\n\nOur list methods return iterators that handle pagination for you.\n\n```golang\n// create a new iterator\nparams := models.ListTradesParams{Ticker: \"AAPL\"}.\n    WithTimestamp(models.GTE, models.Nanos(time.Date(2021, 7, 22, 0, 0, 0, 0, time.UTC))).\n    WithOrder(models.Asc)\niter := c.ListTrades(context.Background(), params)\n\n// iter.Next() advances the iterator to the next value in the list\nfor iter.Next() {\n    log.Print(iter.Item()) // do something with the current value\n}\n\n// if the loop breaks, it has either reached the end of the list or an error has occurred\n// you can check if something went wrong with iter.Err()\nif iter.Err() != nil {\n    log.Fatal(iter.Err())\n}\n```\n\nWe also provide a builder method to make it easier to retrieve all trades and quotes for a specific day.\n\n```golang\nparams := models.ListQuotesParams{Ticker: \"AAPL\"}.\n    WithDay(2021, 7, 22). // get all quotes for July 22, 2021\n    WithOrder(models.Asc)\niter := c.ListQuotes(context.Background(), params)\n\nfor iter.Next() {\n    log.Print(iter.Item())\n}\nif iter.Err() != nil {\n    log.Fatal(iter.Err())\n}\n```\n\n### Request options\n\nAdvanced users may want to add additional headers or query params to a given request.\n\n```golang\nparams := \u0026models.GetGroupedDailyAggsParams{\n    Locale:     models.US,\n    MarketType: models.Stocks,\n    Date:       models.Date(time.Date(2021, 7, 22, 0, 0, 0, 0, time.Local)),\n}\n\nres, err := c.GetGroupedDailyAggs(context.Background(), params,\n    models.APIKey(\"YOUR_OTHER_API_KEY\"),\n    models.Header(\"X-CUSTOM-HEADER\", \"VALUE\"),\n    models.QueryParam(\"adjusted\", strconv.FormatBool(true)))\nif err != nil {\n    log.Fatal(err)\n}\nlog.Print(res) // do something with the result\n```\n\n### Debugging\n\nSometimes you may find it useful to see the actual request and response details while working with the API. The client allows for this through its `models.WithTrace(true)` option.\n\n#### How to Enable Debug Mode\n\nYou can activate the debug mode per request as follows by adding `models.WithTrace(true)` after the `params`:\n\n```go\niter := c.ListAggs(context.Background(), params, models.WithTrace(true))\n```\n\n#### What Does Debug Mode Do?\n\nWhen debug mode is enabled, the client will print out useful debugging information for each API request. This includes: the request URL, the headers sent in the request, and the headers received in the response.\n\n#### Example Output\n\nFor instance, if you made a request for `TSLA` data for the date `2023-08-01`, you would see debug output similar to the following:\n\n```\nRequest URL: /v2/aggs/ticker/AAPL/range/1/day/1672531200000/1678320000000?adjusted=true\u0026limit=50000\u0026sort=desc\nRequest Headers: map[Accept-Encoding:[gzip] Authorization:[REDACTED] User-Agent:[Massive.com GoClient/v1.14.1]]\nResponse Headers: map[Content-Encoding:[gzip] Content-Length:[1639] Content-Type:[application/json] Date:[Tue, 05 Sep 2023 23:25:00 GMT] Server:[nginx/1.19.2] Strict-Transport-Security:[max-age=15724800; includeSubDomains] Vary:[Accept-Encoding] X-Request-Id:[ba3d3e9f42622bd16d05dafe01200f72]]\n```\n\nThis can be an invaluable tool for debugging issues or understanding how the client interacts with the API.\n\n## WebSocket Client\n\n[![ws-docs][ws-doc-img]][ws-doc]\n\nImport the WebSocket client and models packages to get started.\n\n```golang\nimport (\n    massivews \"github.com/massive-com/client-go/v2/websocket\"\n    \"github.com/massive-com/client-go/v2/websocket/models\"\n)\n```\n\nNext, create a new client with your API key and a couple other config options.\n\n```golang\n// create a new client\nc, err := massivews.New(massivews.Config{\n    APIKey:    \"YOUR_API_KEY\",\n    Feed:      massivews.RealTime,\n    Market:    massivews.Stocks,\n})\nif err != nil {\n    log.Fatal(err)\n}\ndefer c.Close() // the user of this client must close it\n\n// connect to the server\nif err := c.Connect(); err != nil {\n    log.Error(err)\n    return\n}\n```\n\nThe client automatically reconnects to the server when the connection is dropped. By default, it will attempt to reconnect indefinitely but the number of retries is configurable. When the client successfully reconnects, it automatically resubscribes to any topics that were set before the disconnect.\n\n### Using the client\n\nAfter creating a client, subscribe to one or more topics and start accessing data. Currently, all of the data is pushed to a single output channel.\n\n```golang\n// passing a topic by itself will subscribe to all tickers\nif err := c.Subscribe(massivews.StocksSecAggs); err != nil {\n    log.Fatal(err)\n}\nif err := c.Subscribe(massivews.StocksTrades, \"TSLA\", \"GME\"); err != nil {\n    log.Fatal(err)\n}\n\nfor {\n    select {\n    case err := \u003c-c.Error(): // check for any fatal errors (e.g. auth failed)\n        log.Fatal(err)\n    case out, more := \u003c-c.Output(): // read the next data message\n        if !more {\n            return\n        }\n\n        switch out.(type) {\n        case models.EquityAgg:\n            log.Print(out) // do something with the agg\n        case models.EquityTrade:\n            log.Print(out) // do something with the trade\n        }\n    }\n}\n```\n\nSee the [full example](./websocket/example/main.go) for more details on how to use this client effectively.\n\n## Release planning\n\nThis client will attempt to follow the release cadence of our API. When endpoints are deprecated and newer versions are added, the client will maintain two methods in a backwards compatible way (e.g. `ListTrades` and `ListTradesV4(...)`). When deprecated endpoints are removed from the API, we'll rename the versioned method (e.g. `ListTradesV4(...)` -\u003e `ListTrades(...)`), remove the old method, and release a new major version of the client. The goal is to give users ample time to upgrade to newer versions of our API _before_ we bump the major version of the client, and in general, we'll try to bundle breaking changes like this to avoid frequent major version bumps.\n\nThere are a couple exceptions to this. When we find small breaking issues with this client library (e.g. incorrect response types), we may decide to release them under the same major version. These changes will be clearly outlined in the release notes. Also, methods that fall under the VX client are considered experimental and may be modified or deprecated as needed. We'll call out any breaking changes to VX endpoints in our release notes to make using them easier.\n\n## Contributing\n\nIf you found a bug or have an idea for a new feature, please first discuss it with us by [submitting a new issue](https://github.com/massive-com/client-go/issues/new/choose). We will respond to issues within at most 3 weeks. We're also open to volunteers if you want to submit a PR for any open issues but please discuss it with us beforehand. PRs that aren't linked to an existing issue or discussed with us ahead of time will generally be declined.\n\n-------------------------------------------------------------------------------\n\n[doc-img]: https://pkg.go.dev/badge/github.com/massive-com/client-go/v2\n[doc]: https://pkg.go.dev/github.com/massive-com/client-go/v2\n[rest-doc-img]: https://pkg.go.dev/badge/github.com/massive-com/client-go/v2/rest\n[rest-doc]: https://pkg.go.dev/github.com/massive-com/client-go/v2/rest\n[ws-doc-img]: https://pkg.go.dev/badge/github.com/massive-com/client-go/v2/websocket\n[ws-doc]: https://pkg.go.dev/github.com/massive-com/client-go/v2/websocket\n[build-img]: https://github.com/massive-com/client-go/v2/actions/workflows/test.yml/badge.svg\n[build]: https://github.com/massive-com/client-go/v2/actions\n[report-card-img]: https://goreportcard.com/badge/github.com/massive-com/client-go/v2\n[report-card]: https://goreportcard.com/report/github.com/massive-com/client-go/v2\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmassive-com%2Fclient-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmassive-com%2Fclient-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmassive-com%2Fclient-go/lists"}