{"id":33902609,"url":"https://github.com/massive-com/client-python","last_synced_at":"2026-04-04T12:58:29.048Z","repository":{"id":37956830,"uuid":"216660192","full_name":"massive-com/client-python","owner":"massive-com","description":"The official Python client library for the Massive.com REST and WebSocket API.","archived":false,"fork":false,"pushed_at":"2025-12-22T16:02:36.000Z","size":2574,"stargazers_count":1266,"open_issues_count":21,"forks_count":336,"subscribers_count":40,"default_branch":"master","last_synced_at":"2025-12-25T22:42:05.147Z","etag":null,"topics":["api","client-python","polygon","python","realtime-stocks","stock-data","stock-prices","stocks-api","trading","websocket"],"latest_commit_sha":null,"homepage":"https://massive.com/","language":"Python","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":"2019-10-21T20:33:17.000Z","updated_at":"2025-12-25T18:40:57.000Z","dependencies_parsed_at":"2023-10-23T17:36:38.417Z","dependency_job_id":"abcce544-579f-46e8-bf5d-e3d3242c9239","html_url":"https://github.com/massive-com/client-python","commit_stats":{"total_commits":279,"total_committers":28,"mean_commits":9.964285714285714,"dds":0.7849462365591398,"last_synced_commit":"5d8560ccf1db68cb895b8cf9e54970e71a823361"},"previous_names":["massive-com/client-python","polygon-io/client-python"],"tags_count":101,"template":false,"template_full_name":null,"purl":"pkg:github/massive-com/client-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/massive-com","download_url":"https://codeload.github.com/massive-com/client-python/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/massive-com%2Fclient-python/sbom","scorecard":{"id":740474,"data":{"date":"2025-08-11","repo":{"name":"github.com/polygon-io/client-python","commit":"6ca3fc30726c2db139e874438933f3533257c615"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.7,"checks":[{"name":"Maintained","score":5,"reason":"7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"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":"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":"Token-Permissions","score":9,"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","Info: topLevel 'contents' permission set to 'read': .github/workflows/release.yml:7","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":"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":"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":"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":"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":"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":"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-python/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-python/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-python/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-python/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-python/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/polygon-io/client-python/test.yml/master?enable=pin","Warn: containerImage not pinned by hash: examples/tools/docker/Dockerfile:2: pin your Docker image by updating python:3.8-slim to python:3.8-slim@sha256:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613f","Warn: pipCommand not pinned by hash: examples/tools/docker/Dockerfile:11","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 pipCommand 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":"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":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2023-117","Warn: Project is vulnerable to: GHSA-48p4-8xcf-vxj5","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (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"}}]},"last_synced_at":"2025-08-22T17:16:54.793Z","repository_id":37956830,"created_at":"2025-08-22T17:16:54.793Z","updated_at":"2025-08-22T17:16:54.793Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28114820,"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","status":"online","status_checked_at":"2025-12-29T02:00:07.021Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["api","client-python","polygon","python","realtime-stocks","stock-data","stock-prices","stocks-api","trading","websocket"],"created_at":"2025-12-12T00:46:55.882Z","updated_at":"2026-01-26T11:03:23.860Z","avatar_url":"https://github.com/massive-com.png","language":"Python","readme":"# Massive (formerly Polygon.io) Python Client - WebSocket \u0026 RESTful APIs\n\nWelcome to the official Python client library for the [Massive](https://massive.com/) REST and WebSocket API. To get started, please see the [Getting Started](https://massive.com/docs/stocks/getting-started) section in our documentation, view the [examples](./examples/) directory for code snippets.\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## Prerequisites\n\nBefore installing the Massive Python client, ensure your environment has Python 3.9 or higher.\n\n## Install\n\nPlease use pip to install or update to the latest stable version.\n```\npip install -U massive\n```\n\n## Getting started\n\nTo get started, please see the [Getting Started](https://massive.com/docs/stocks/getting-started) section in our docs, view the [examples](./examples) directory for code snippets.\n\nThe free tier of our API comes with usage limitations, potentially leading to rate limit errors if these are exceeded. For uninterrupted access and to support larger data requirements, we recommend reviewing our [subscription plans](https://massive.com/pricing), which are tailored for a wide range of needs from development to high-demand applications. Refer to our pricing page for detailed information on limits and features to ensure a seamless experience, especially for real-time data processing.\n\n## REST API Client\nImport the RESTClient.\n```python\nfrom massive import RESTClient\n```\nCreate a new client with your [API key](https://massive.com/dashboard/api-keys)\n```python\nclient = RESTClient(api_key=\"\u003cAPI_KEY\u003e\")\n```\n### Using the Client\nRequest data using client methods.\n```python\nticker = \"AAPL\"\n\n# List Aggregates (Bars)\naggs = []\nfor a in client.list_aggs(ticker=ticker, multiplier=1, timespan=\"minute\", from_=\"2023-01-01\", to=\"2023-06-13\", limit=50000):\n    aggs.append(a)\n\nprint(aggs)\n\n# Get Last Trade\ntrade = client.get_last_trade(ticker=ticker)\nprint(trade)\n\n# List Trades\ntrades = client.list_trades(ticker=ticker, timestamp=\"2022-01-04\")\nfor trade in trades:\n    print(trade)\n\n# Get Last Quote\nquote = client.get_last_quote(ticker=ticker)\nprint(quote)\n\n# List Quotes\nquotes = client.list_quotes(ticker=ticker, timestamp=\"2022-01-04\")\nfor quote in quotes:\n    print(quote)\n```\n\n### Pagination Behavior\n\nBy default, the client paginates results for endpoints like `list_trades` and `list_quotes` behind the scenes for you. Understanding how pagination interacts with the `limit` parameter is key.\n\n#### Default (Pagination Enabled)\n\nPagination is enabled by default (`pagination=True`):\n\n* `limit` controls the page size, not the total number of results.\n* The client automatically fetches all pages, yielding results until none remain.\n\nHere's an example:\n\n```python\nclient = RESTClient(api_key=\"\u003cAPI_KEY\u003e\")\ntrades = [t for t in client.list_trades(ticker=\"TSLA\", limit=100)]\n```\n\nThis fetches all TSLA trades, 100 per page.\n\n#### Disabling Pagination\n\nTo return a fixed number of results and stop, disable pagination:\n\n```python\nclient = RESTClient(api_key=\"\u003cAPI_KEY\u003e\", pagination=False)\ntrades = [t for t in client.list_trades(ticker=\"TSLA\", limit=100)]\n```\n\nThis returns at most 100 total trades, no additional pages.\n\n### Performance Tip\n\nIf you're fetching large datasets, always use the maximum supported limit for the API endpoint. This reduces the number of API calls and improves overall performance.\n\n### Additional Filter Parameters\n\nMany of the APIs in this client library support the use of additional filter parameters to refine your queries. Please refer to the specific API documentation for details on which filter parameters are supported for each endpoint. These filters can be applied using the following operators:\n\n- `.gt`: greater than\n- `.gte`: greater than or equal to\n- `.lt`: less than\n- `.lte`: less than or equal to\n\nHere's a sample code snippet that demonstrates how to use these filter parameters when requesting an Options Chain using the `list_snapshot_options_chain` method. In this example, the filter parameters ensure that the returned options chain data will only include options with an expiration date that is greater than or equal to \"2024-03-16\" and a strike price that falls between 29 and 30 (inclusive).\n\n```python\noptions_chain = []\nfor o in client.list_snapshot_options_chain(\n    \"HCP\",\n    params={\n        \"expiration_date.gte\": \"2024-03-16\",\n        \"strike_price.gte\": 29,\n        \"strike_price.lte\": 30,\n    },\n):\n    options_chain.append(o)\n\nprint(options_chain)\nprint(len(options_chain))\n```\n\nAlso, please refer to the API documentation to get a full understanding of how the API works and the supported arguments. All required arguments are annotated with red asterisks \" * \" and argument examples are set.\n\n## Debugging with RESTClient\n\nSometimes you may find it useful to see the actual request and response details while working with the API. The `RESTClient` allows for this through its `trace=True` option.\n\n### How to Enable Debug Mode\n\nYou can activate the debug mode as follows:\n\n```python\nclient = RESTClient(trace=True, verbose=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. You need to enable `verbose=True` too so that you log the trace or already have your own logger configured. 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: https://api.massive.com/v2/aggs/ticker/TSLA/range/1/minute/2023-08-01/2023-08-01?limit=50000\nRequest Headers: {'Authorization': 'Bearer REDACTED', 'Accept-Encoding': 'gzip', 'User-Agent': 'Massive.com PythonClient/1.12.4'}\nResponse Headers: {'Server': 'nginx/1.19.2', 'Date': 'Tue, 05 Sep 2023 23:07:02 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding', 'X-Request-Id': '727c82feed3790b44084c3f4cae1d7d4', 'Strict-Transport-Security': 'max-age=15724800; includeSubDomains'}\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\nImport classes\n```python\nfrom massive import WebSocketClient\nfrom massive.websocket.models import WebSocketMessage\nfrom typing import List\n```\n### Using the client\nCreate a new client with your [API key](https://massive.com/dashboard/api-keys) and subscription options.\n```python\n# Note: Multiple subscriptions can be added to the array \n# For example, if you want to subscribe to AAPL and META,\n# you can do so by adding \"T.META\" to the subscriptions array. [\"T.AAPL\", \"T.META\"]\n# If you want to subscribe to all tickers, place an asterisk in place of the symbol. [\"T.*\"]\nws = WebSocketClient(api_key=\u003cAPI_KEY\u003e, subscriptions=[\"T.AAPL\"])\n```\nCreate a handler function and run the WebSocket.\n```python\ndef handle_msg(msg: List[WebSocketMessage]):\n    for m in msg:\n        print(m)\n\nws.run(handle_msg=handle_msg)\n```\nCheck out more detailed examples [here](https://github.com/massive-com/client-python/tree/master/examples/websocket).\n\n## Contributing\n\nIf you found a bug or have an idea for a new feature, please first discuss it with us by\n[submitting a new issue](https://github.com/massive-com/client-python/issues/new/choose).\nWe will respond to issues within at most 3 weeks.\nWe're also open to volunteers if you want to submit a PR for any open issues but\nplease discuss it with us beforehand. PRs that aren't linked to an existing issue or\ndiscussed with us ahead of time will generally be declined.\n\n### Development\n\nIf you plan to contribute by developing new features then you will need to install certain dependencies.\n\n#### Poetry\n\nPoetry is a packaging and dependency manager for Python.\nInstallation instructions can be found [on their website](https://python-poetry.org/docs/#installation).\nOnce installed run `poetry install` to install the required dependencies. This step should be run after incorporating new upstream changes.\n\n#### Makefile\n\nOur Makefile has the common operations needed when developing on this repo. Running tests and linting can both be\nrun through our Makefile. Just run `make help` to see the list of available commands.\n\nIf you're using `pyenv` to manage active Python versions then you might need to launch a Poetry shell before running\nMake commands in order to actually use your chosen Python version. This is because Poetry uses the system Python version\nby default.\n\n```shell\npoetry shell # start shell\npoetry install # install deps\n\nmake test # run your make commands\n```\n\n## Release planning\nThis client will attempt to follow the release cadence of our API.\nWhen endpoints are deprecated and newer versions are added, the client will\nmaintain two methods in a backwards compatible way\n(e.g. `list_trades` and `list_trades_v4(...)`).\nWhen deprecated endpoints are removed from the API, we'll rename the versioned\nmethod (e.g. `list_trades_v4(...)` -\u003e `list_trades(...)`), remove the old method,\nand release a new major version of the client.\n\nThe goal is to give users ample time to upgrade to newer versions of our API\n_before_ we bump the major version of the client, and in general, we'll try to\nbundle breaking changes like this to avoid frequent major version bumps.\n\nExceptions to this are:\n\n- Methods under `client.vx`. These are expiremental.\n- Methods that start with `_*`. We use these internally.\n- Type annotations. We may modify these based on our JSON responses.\n- We may add model fields.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmassive-com%2Fclient-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmassive-com%2Fclient-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmassive-com%2Fclient-python/lists"}