[GH-ISSUE #871] Support votes in get_playlist #529

Open
opened 2026-02-27 23:01:17 +03:00 by kerem · 1 comment
Owner

Originally created by @sigma67 on GitHub (Feb 5, 2026).
Original GitHub issue: https://github.com/sigma67/ytmusicapi/issues/871

Is your feature request related to a problem? Please describe.

For new playlists, users can enable a voting feature.

Describe the solution you'd like
get_playlist should retrieve and parse these votes.

Describe alternatives you've considered

Additional context

Screenshot of test votes on a newly created playlist with voting enabled.

Image
Originally created by @sigma67 on GitHub (Feb 5, 2026). Original GitHub issue: https://github.com/sigma67/ytmusicapi/issues/871 **Is your feature request related to a problem? Please describe.** For new playlists, users can enable a voting feature. **Describe the solution you'd like** `get_playlist` should retrieve and parse these votes. **Describe alternatives you've considered** - **Additional context** Screenshot of test votes on a newly created playlist with voting enabled. <img width="676" height="250" alt="Image" src="https://github.com/user-attachments/assets/256c017f-2e64-4ea4-bd41-8a5d25c052e6" />
Author
Owner

@sigma67 commented on GitHub (Feb 5, 2026):

Response structure looks as follows:

{
    "engagementBar":
    {
        "engagementBarViewModel":
        {
            "actions":
            [
                {
                    "votingViewModel":
                    {
                        "upvoteButton":
                        {
                            "toggleButtonViewModel":
                            {
                                "defaultButtonViewModel":
                                {
                                    "buttonViewModel":
                                    {
                                        "iconName": "OUTLINE_ARROW_SOLID_UP",
                                        "onTap":
                                        {
                                            "innertubeCommand":
                                            {
                                                "clickTrackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd_KAQStgBIB",
                                                "feedbackEndpoint":
                                                {
                                                    "feedbackToken": "AB9zfpKJLSUg04pxRr5TZ4TmS4D_PSkoRdIyL56ABTX53cRi1z8MBxkcGEDVvERJ-2yVklXs2c-fKzur0aLxfndMv-V3SW9qHmz4Z87t48CzcEVZw3q6z6jaLb0qh2ddYSkWHHUCOjeqATXYjlQ_h4CGuYd3pr7aBw"
                                                }
                                            }
                                        },
                                        "accessibilityText": "Upvote",
                                        "style": "BUTTON_VIEW_MODEL_STYLE_MONO",
                                        "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=",
                                        "isFullWidth": false,
                                        "type": "BUTTON_VIEW_MODEL_TYPE_TEXT",
                                        "buttonSize": "BUTTON_VIEW_MODEL_SIZE_XSMALL",
                                        "enableIconButton": true
                                    }
                                },
                                "toggledButtonViewModel":
                                {
                                    "buttonViewModel":
                                    {
                                        "iconName": "ARROW_SOLID_UP",
                                        "onTap":
                                        {
                                            "innertubeCommand":
                                            {
                                                "clickTrackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd_KAQStgBIB",
                                                "feedbackEndpoint":
                                                {
                                                    "feedbackToken": "AB9zfpLumnB8m5Y-iUAZ4jXgRF9rKt0J-Kyvl8GokZ8XL25K1fGdaV7J6cfY5P4ZO8eq1k5R4tbpUEMn2Lp9oNs-bhCEk7fQK4R1NVOaCdpZc_weuHfGDziPWSVbgoadJJ4hPnOsFMYMK5Vb3TflAi_I2BvCdKqpzQ"
                                                }
                                            }
                                        },
                                        "accessibilityText": "Upvote pressed",
                                        "style": "BUTTON_VIEW_MODEL_STYLE_MONO",
                                        "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=",
                                        "isFullWidth": false,
                                        "type": "BUTTON_VIEW_MODEL_TYPE_TEXT",
                                        "buttonSize": "BUTTON_VIEW_MODEL_SIZE_XSMALL",
                                        "enableIconButton": true
                                    }
                                },
                                "isToggled": true,
                                "identifier": "",
                                "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8="
                            }
                        },
                        "downvoteButton":
                        {
                            "toggleButtonViewModel":
                            {
                                "defaultButtonViewModel":
                                {
                                    "buttonViewModel":
                                    {
                                        "iconName": "OUTLINE_ARROW_SOLID_DOWN",
                                        "onTap":
                                        {
                                            "innertubeCommand":
                                            {
                                                "clickTrackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd_KAQStgBIB",
                                                "feedbackEndpoint":
                                                {
                                                    "feedbackToken": "AB9zfpLtGRWaxp7s1OjVvCHoGcdvMHahLCyW2irI6JqTaXE3Yf7JzpkusxR5_c1yuNpGPc2MlS5FaJYpKvIQhBmp89hKpMHg1jCf4PjsRQR8ihIN7OnWH7zRQ2EGKdcOXyjsLnaV265hqu2NwwvvaxHIB7423gpebg"
                                                }
                                            }
                                        },
                                        "accessibilityText": "Downvote",
                                        "style": "BUTTON_VIEW_MODEL_STYLE_MONO",
                                        "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=",
                                        "isFullWidth": false,
                                        "type": "BUTTON_VIEW_MODEL_TYPE_TEXT",
                                        "buttonSize": "BUTTON_VIEW_MODEL_SIZE_XSMALL",
                                        "enableIconButton": true
                                    }
                                },
                                "toggledButtonViewModel":
                                {
                                    "buttonViewModel":
                                    {
                                        "iconName": "ARROW_SOLID_DOWN",
                                        "onTap":
                                        {
                                            "innertubeCommand":
                                            {
                                                "clickTrackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd_KAQStgBIB",
                                                "feedbackEndpoint":
                                                {
                                                    "feedbackToken": "AB9zfpJGn-u4gbLv7DD-9miEPI0bRcuxiOVn3ti9Ii3PIUMVxz5xzhdDo_c6eE_xtkDqEhiU18VLu51iU-bMpuo_wmhRjG0oHFHagz-ybt4U03HVuTd7ruo9F-0acEmVdYc8gZz3jHV-Ufg6n5zLQ_mRAtqmODTrvA"
                                                }
                                            }
                                        },
                                        "accessibilityText": "Downvote pressed",
                                        "style": "BUTTON_VIEW_MODEL_STYLE_MONO",
                                        "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=",
                                        "isFullWidth": false,
                                        "type": "BUTTON_VIEW_MODEL_TYPE_TEXT",
                                        "buttonSize": "BUTTON_VIEW_MODEL_SIZE_XSMALL",
                                        "enableIconButton": true
                                    }
                                },
                                "isToggled": false,
                                "identifier": "",
                                "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8="
                            }
                        },
                        "initialState":
                        {
                            "votes": 1,
                            "status": "VOTE_STATUS_UPVOTED",
                            "compactVotes": "0",
                            "compactVotesUpvoted": "1",
                            "compactVotesDownvoted": "-1",
                            "compactVotesA11yText": "0",
                            "compactVotesUpvotedA11yText": "1",
                            "compactVotesDownvotedA11yText": "-1"
                        },
                        "itemId": "56B44F6D10557CC6",
                        "enableOptimisticReordering": true
                    }
                }
            ]
        }
    }
}
<!-- gh-comment-id:3855032320 --> @sigma67 commented on GitHub (Feb 5, 2026): Response structure looks as follows: <details> ```json { "engagementBar": { "engagementBarViewModel": { "actions": [ { "votingViewModel": { "upvoteButton": { "toggleButtonViewModel": { "defaultButtonViewModel": { "buttonViewModel": { "iconName": "OUTLINE_ARROW_SOLID_UP", "onTap": { "innertubeCommand": { "clickTrackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd_KAQStgBIB", "feedbackEndpoint": { "feedbackToken": "AB9zfpKJLSUg04pxRr5TZ4TmS4D_PSkoRdIyL56ABTX53cRi1z8MBxkcGEDVvERJ-2yVklXs2c-fKzur0aLxfndMv-V3SW9qHmz4Z87t48CzcEVZw3q6z6jaLb0qh2ddYSkWHHUCOjeqATXYjlQ_h4CGuYd3pr7aBw" } } }, "accessibilityText": "Upvote", "style": "BUTTON_VIEW_MODEL_STYLE_MONO", "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=", "isFullWidth": false, "type": "BUTTON_VIEW_MODEL_TYPE_TEXT", "buttonSize": "BUTTON_VIEW_MODEL_SIZE_XSMALL", "enableIconButton": true } }, "toggledButtonViewModel": { "buttonViewModel": { "iconName": "ARROW_SOLID_UP", "onTap": { "innertubeCommand": { "clickTrackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd_KAQStgBIB", "feedbackEndpoint": { "feedbackToken": "AB9zfpLumnB8m5Y-iUAZ4jXgRF9rKt0J-Kyvl8GokZ8XL25K1fGdaV7J6cfY5P4ZO8eq1k5R4tbpUEMn2Lp9oNs-bhCEk7fQK4R1NVOaCdpZc_weuHfGDziPWSVbgoadJJ4hPnOsFMYMK5Vb3TflAi_I2BvCdKqpzQ" } } }, "accessibilityText": "Upvote pressed", "style": "BUTTON_VIEW_MODEL_STYLE_MONO", "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=", "isFullWidth": false, "type": "BUTTON_VIEW_MODEL_TYPE_TEXT", "buttonSize": "BUTTON_VIEW_MODEL_SIZE_XSMALL", "enableIconButton": true } }, "isToggled": true, "identifier": "", "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=" } }, "downvoteButton": { "toggleButtonViewModel": { "defaultButtonViewModel": { "buttonViewModel": { "iconName": "OUTLINE_ARROW_SOLID_DOWN", "onTap": { "innertubeCommand": { "clickTrackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd_KAQStgBIB", "feedbackEndpoint": { "feedbackToken": "AB9zfpLtGRWaxp7s1OjVvCHoGcdvMHahLCyW2irI6JqTaXE3Yf7JzpkusxR5_c1yuNpGPc2MlS5FaJYpKvIQhBmp89hKpMHg1jCf4PjsRQR8ihIN7OnWH7zRQ2EGKdcOXyjsLnaV265hqu2NwwvvaxHIB7423gpebg" } } }, "accessibilityText": "Downvote", "style": "BUTTON_VIEW_MODEL_STYLE_MONO", "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=", "isFullWidth": false, "type": "BUTTON_VIEW_MODEL_TYPE_TEXT", "buttonSize": "BUTTON_VIEW_MODEL_SIZE_XSMALL", "enableIconButton": true } }, "toggledButtonViewModel": { "buttonViewModel": { "iconName": "ARROW_SOLID_DOWN", "onTap": { "innertubeCommand": { "clickTrackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd_KAQStgBIB", "feedbackEndpoint": { "feedbackToken": "AB9zfpJGn-u4gbLv7DD-9miEPI0bRcuxiOVn3ti9Ii3PIUMVxz5xzhdDo_c6eE_xtkDqEhiU18VLu51iU-bMpuo_wmhRjG0oHFHagz-ybt4U03HVuTd7ruo9F-0acEmVdYc8gZz3jHV-Ufg6n5zLQ_mRAtqmODTrvA" } } }, "accessibilityText": "Downvote pressed", "style": "BUTTON_VIEW_MODEL_STYLE_MONO", "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=", "isFullWidth": false, "type": "BUTTON_VIEW_MODEL_TYPE_TEXT", "buttonSize": "BUTTON_VIEW_MODEL_SIZE_XSMALL", "enableIconButton": true } }, "isToggled": false, "identifier": "", "trackingParams": "CDUQyfQCGAAiEwjPqI6i7MKSAxWT6E8IHeHYMd8=" } }, "initialState": { "votes": 1, "status": "VOTE_STATUS_UPVOTED", "compactVotes": "0", "compactVotesUpvoted": "1", "compactVotesDownvoted": "-1", "compactVotesA11yText": "0", "compactVotesUpvotedA11yText": "1", "compactVotesDownvotedA11yText": "-1" }, "itemId": "56B44F6D10557CC6", "enableOptimisticReordering": true } } ] } } } ``` </details>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/ytmusicapi#529
No description provided.