You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
IPC callback raised exception: 404 Client Error: Not Found for url: https://www.netflix.com/api/shakti/... #1781
NFAuthentication Key for Linux/MacOS (Version 1.1.8)
Disclaimer:
This script and source code available on GitHub are provided "as is" without warranty of any kind, either express or implied. Use at your own risk. The use of the software is done at your own discretion and risk with the agreement that you will be solely responsible for any damage resulting from such activities and you are solely responsible for adequate data protection.
Press "ENTER" key to accept the disclaimer and start, or "CTRL+C" to cancel
Browser startup... (/usr/bin/google-chrome) please wait
Establish connection with the browser... please wait
Opening login webpage... please wait
Please login in to website now ...waiting for you to finish...
Verification of data in progress... please wait
File creation in progress... please wait
/home/bjoern/Downloads/NFAuthenticationKey.py:127: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
'timestamp': int(((datetime.utcnow() + timedelta(days=5)) - datetime(year=1970, month=1, day=1)).total_seconds()),
Operations completed!
The "NFAuthentication.key" file has been saved in current folder.
Your PIN protection is: XXXX
Everything is working fine, but we're locked into the Kids profile which has no PIN configured.
When we try to change profile we get the same 404 Error.
I'll try to generate a new NFAuthentication.key and see what gives.
Miután létrehoztam egy új NFAuthentication.key-t, már nem tudok Steamet nézni.
Mindig ezt a hibát adja: MSL hiba licensedManifest/playapi-445: A lejátszás nem engedélyezett a tartalomhasználati szabályzat által.
Még miután új ESN-t generáltunk a Widewine-hez...
Van valami ötleted? Először azt hittem, hogy a rossz bemeneti adatfolyam adaptív felbontási beállításai miatt lehet, de a 480p-re váltás sem oldotta meg a problémát.
The same issue when changing profiles occurs to me with 1.23.5 on Kodi. But with followind steps, I was able to use the plugin with the main profile:
deactivated PIN for all profiles using the Browser on the PC
logged out of netflix in the plugin
deleted the plugin, reinstalled
logged in with a newly generated NFAuth-Key, PIN and the password
after theses steps, the default (main) profile was selected in the plugin and I am able to use this profile including management of "my list" in this profile.
However, changing to another profile does not work.
I got this IPC callback raised exception now for a couple of months on kod 1.23.5. After reading this thread I created a new key (by instructions of patricksrentsch, thanks) and got the "MSL error Playback not permitted by Content Usage Policies" error. I did the procedure two times, with the same MSL error.
I got this IPC callback raised exception now for a couple of months on kod 1.23.5. After reading this thread I created a new key (by instructions of patricksrentsch, thanks) and got the "MSL error Playback not permitted by Content Usage Policies" error. I did the procedure two times, with the same MSL error.
Meanwhile, I switched to the adapted version in the pull-request #1783
There, the API used has changed. So far,
i can use the complete functionality of NF, slthough I have not re-activated the PIN for the different accounts. Perhaps you can try this.
Important for me is to keep the existing NFAuthentication Key, as recreating it will cause the MSL playback issue I mentioned above. However, this is an additional, but unrelated problem.
Luckily I had kept a backup of the addon data before replacing it with a newly generated one.
Restoring the backup and applying the changes of the linked PR has finally brought back Netflix on Kodi for me.
Thanks for the quick repsonse and help.. Unfortunately I don't have the old NFAuth key. I replaced the files from the 1783 version over the currently installed netflix addon and still got the MSL playback issue. I checked I have the most recent input adaptive widivine version.
2026-04-18 19:01:19.052 T:83 warning : [script.module.inputstreamhelper] Widevine update check was made on 2026-03-24 21:18
2026-04-18 19:01:19.101 T:7 info : VideoPlayer::OpenFile: plugin://plugin.video.netflix/play/movie/60020810/?profile_guid=TKLRAKSICNBKTLCZ2SYMNONNME
2026-04-18 19:01:19.101 T:127 warning : CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
2026-04-18 19:01:19.101 T:127 info : Creating InputStream
2026-04-18 19:01:19.134 T:127 warning : AddOnLog: inputstream.adaptive: Warning "inputstream.adaptive.manifest_type" property is deprecated and will be removed next Kodi version, the manifest type is now automatically detected.
If you are using a proxy remember to add the appropriate "content-type" header to the HTTP manifest response
See Wiki page "How to provide custom manifest/license" to learn more about it.
2026-04-18 19:01:19.135 T:127 info : AddOnLog: inputstream.adaptive: [Repr. chooser] Resolution set: 3840x2160, max allowed: 3840x2160, Adjust refresh rate: 1
2026-04-18 19:01:19.461 T:130 error : [plugin.video.netflix (0)] Full MSL error information:
2026-04-18 19:01:19.461 T:130 error : [plugin.video.netflix (0)] {"id": 177653167930565440, "version": 2, "serverTime": 1776531679402, "error": {"code": "FAIL", "detail": "licensedManifest/playapi-445: Playback not permitted by Content Usage Policies (E3-Bgilt-vcAxKdAgWT6z7xrTpzS6VnRq8jGGE7uqEZYNbAFtWx23CqiGiNz5OTd5WsBqoL0q_UrXZlViPtu-Wa0vDY30en8t4_3Qt-9ahn-1D2Z_GUv6Qr8Gy5taZK7nHIK7bbl8nkT5vSz_ECxusvNWqy6KSHR-V_i0Kmvr4kdTP3RGbz-k2hk79vqK5T5EAxGCg6T3adudsG4uxx_r2y5BmNrubtQS901egHca8e6co8sY4AOkezUaU12ceCzsS5QITvNY5LscwYfwrrHAbfl_sQcyGFs9epCbdsl5Xja4OwOdahGWGXKnBLOecw-cqHGcuqcgekz2pk1Jk-UGT4t2uhTr4iHqSSF9I2p5Tc9QpOdKUBvvffiyu-y2Xe3rt3olF_NmOKsxgGIg4KDIlN1IHKuRk04kRN0Q==) [viewableId=60020810]", "displayCode": "E100", "reportingCode": "PBCS-445", "display": "Deze titel is niet beschikbaar voor direct kijken. Probeer een andere titel.", "alertTag": "", "errorActionId": 3, "errorExternalCode": 0, "errorNccpCode": 0, "errorReasonCode": 0, "errorSubCode": 0, "errorDisplayMessage": "Deze titel is niet beschikbaar voor direct kijken. Probeer een andere titel.", "nccpError": {}, "bladeRunnerMessage": "licensedManifest/playapi-445: Playback not permitted by Content Usage Policies (E3-Bgilt-vcAxKdAgWT6z7xrTpzS6VnRq8jGGE7uqEZYNbAFtWx23CqiGiNz5OTd5WsBqoL0q_UrXZlViPtu-Wa0vDY30en8t4_3Qt-9ahn-1D2Z_GUv6Qr8Gy5taZK7nHIK7bbl8nkT5vSz_ECxusvNWqy6KSHR-V_i0Kmvr4kdTP3RGbz-k2hk79vqK5T5EAxGCg6T3adudsG4uxx_r2y5BmNrubtQS901egHca8e6co8sY4AOkezUaU12ceCzsS5QITvNY5LscwYfwrrHAbfl_sQcyGFs9epCbdsl5Xja4OwOdahGWGXKnBLOecw-cqHGcuqcgekz2pk1Jk-UGT4t2uhTr4iHqSSF9I2p5Tc9QpOdKUBvvffiyu-y2Xe3rt3olF_NmOKsxgGIg4KDIlN1IHKuRk04kRN0Q==) [viewableId=60020810]", "bladeRunnerCode": "445", "playbackContextId": "E3-Bgilt-vcAxKdAgWT6z7xrTpzS6VnRq8jGGE7uqEZYNbAFtWx23CqiGiNz5OTd5WsBqoL0q_UrXZlViPtu-Wa0vDY30en8t4_3Qt-9ahn-1D2Z_GUv6Qr8Gy5taZK7nHIK7bbl8nkT5vSz_ECxusvNWqy6KSHR-V_i0Kmvr4kdTP3RGbz-k2hk79vqK5T5EAxGCg6T3adudsG4uxx_r2y5BmNrubtQS901egHca8e6co8sY4AOkezUaU12ceCzsS5QITvNY5LscwYfwrrHAbfl_sQcyGFs9epCbdsl5Xja4OwOdahGWGXKnBLOecw-cqHGcuqcgekz2pk1Jk-UGT4t2uhTr4iHqSSF9I2p5Tc9QpOdKUBvvffiyu-y2Xe3rt3olF_NmOKsxgGIg4KDIlN1IHKuRk04kRN0Q==", "pboc": true}, "common": {"cadToken": "C1-Bgjtt-vcAxJcI4OW4R2DaDwwZRmltm2tEjdgWiA4FmPG7dUA7hTf1cJwTuQPNc7ZUoTqYCvrV-WrvTK0-OxFAO30W2xlmYU1RbA2PI7V1lam5JqJ08bIAGSaQhjVejpyWWlm5HAYBiIOCgxq_vx991VQxFIUWoo="}, "from": "playapi"}
2026-04-18 19:01:19.474 T:7 info : Loading skin file: DialogConfirm.xml, load type: KEEP_IN_MEMORY
@Lamarqe : If the previous NFauthentication key is required then that is going to be an issue in two instances. 1) First time installers, who don't have an older setup. 2) When the authentication key eventually expires as it is designed to do!
Root cause: Netflix removed artwork nodes from the Falcor schema
The pathEvaluator 404 is caused by the add-on requesting artwork paths that no longer exist server-side. Any request containing one of these paths returns 404 for the entire batch, which is why all browsing breaks.
Reproduction
Captured a working pathEvaluator request from Chrome DevTools (Copy as cURL), then replayed it with individual paths substituted. Same cookies, same session, same endpoint:
path=["loco","componentSummary"] -> 200
path=["loco",{"from":0,"to":50},"componentSummary"] -> 200
path=["loco",{"from":0,"to":50},0,"reference",["title","summary"]] -> 200
path=["loco",{"from":0,"to":50},{"from":0,"to":0},"reference",[...]] -> 200
path=["loco",{"from":0,"to":50},0,"reference","boxarts",[...],"jpg","value"] -> 404
path=["loco",{"from":0,"to":50},0,"reference","interestingMoment",[...],"jpg","value"] -> 404
path=["loco",{"from":0,"to":50},0,"reference","artWorkByType",...,"png","value"] -> 404
path=["loco",{"from":0,"to":50},0,"reference","storyArt","_665x375","jpg","value"] -> 404
Artwork is not addressable under videos either:
path=["videos",81605886,"boxarts",["_665x375"],"jpg","value"] -> 404
path=["videos",81605886,"storyArt","_665x375","jpg","value"] -> 404
path=["videos",81605886,"artWorkByType",...,"png","value"] -> 404
path=["videos",81605886,"summary"] -> 200
path=["videos",81605886,"itemSummary"] -> 200
What replaced it
Artwork now arrives embedded in the itemSummary atom rather than as separate Falcor nodes. Current web client responses contain, inside itemSummary.value:
assets — keyed by role (logo, background), each with url, artWorkType, imageKey, width/height, tone
videoAssets — e.g. horizontalBackground with motionUrl, motionId, autoPlay
URLs are .webp, and the current client sends webp=true as a query param
The web client no longer requests artwork paths at all.
Things ruled out (all tested, all returned 200 when artwork paths were absent):
Session/cookie validity — add-on's own NetflixId/SecureNetflixId from COOKIES work fine
authURL — add-on's token accepted
User-Agent (tested Chrome 108 and 140)
x-netflix.* headers — not required
Body encoding (raw vs percent-encoded)
HTTP/1.1 vs HTTP/2
Kodi's bundled requests 2.31.0 / urllib3 2.2.3 / OpenSSL 3.5.4 — reproduces 200 outside Kodi with a non-artwork path set
Endpoint URL and query params — identical to the current web client
Unrelated bug found along the way
In http_requests.py, _prepare_request_properties():
pythonauth_data = f'authURL={self.auth_url}'
The authURL is inserted raw into an application/x-www-form-urlencoded body. Tokens containing /, +, or = are misparsed (+ becomes a space). Should be:
pythonauth_data = 'authURL=' + quote(self.auth_url, safe='')
Not the cause of the 404, but a real bug.
Environment: add-on 1.23.5+matrix.1, LibreELEC, Kodi 21.
Adjacent work to the root cause @richardgoodin identified above (artwork nodes
removed from the Falcor schema): #1807 implements the replacement via Netflix'
GraphQL endpoint, and keeps a halving/blacklist layer for retired paths instead
of removing the artwork paths (the #1796 route).
Two additions to that analysis:
GraphQL serves non-browser clients — verified with User-Agent: Kodi/20.0 and
session cookies only (no browser fingerprint headers); complete artwork at the
same dimensions as the captures. Reproducible via docs/graphql-probe.sh.
The surviving itemSummary card is used only as the poster fallback; the
GraphQL Image nodes are the primary source.
Activity
will-code-for-pizza commentedon Mar 2, 2026
If I try to get
https://www.netflix.com/api/shakti/mre/profileLock
this results in:
{"timestamp":"2026-03-02T13:52:08.422+00:00","status":404,"error":"Not Found","message":"No message available","path":"/shakti/mre/profileLock"}
will-code-for-pizza commentedon Mar 2, 2026
$ python3 NFAuthenticationKey.py
NFAuthentication Key for Linux/MacOS (Version 1.1.8)
Disclaimer:
This script and source code available on GitHub are provided "as is" without warranty of any kind, either express or implied. Use at your own risk. The use of the software is done at your own discretion and risk with the agreement that you will be solely responsible for any damage resulting from such activities and you are solely responsible for adequate data protection.
Press "ENTER" key to accept the disclaimer and start, or "CTRL+C" to cancel
Browser startup... (/usr/bin/google-chrome) please wait
Establish connection with the browser... please wait
Opening login webpage... please wait
Please login in to website now ...waiting for you to finish...
Verification of data in progress... please wait
File creation in progress... please wait
/home/bjoern/Downloads/NFAuthenticationKey.py:127: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
'timestamp': int(((datetime.utcnow() + timedelta(days=5)) - datetime(year=1970, month=1, day=1)).total_seconds()),
Operations completed!
The "NFAuthentication.key" file has been saved in current folder.
Your PIN protection is: XXXX
will-code-for-pizza commentedon Mar 2, 2026
And for the "KID" profile without PIN:
https://paste.kodi.tv/ayikitequg.kodi
Publish3r commentedon Mar 2, 2026
I think they changed the api. 404 Error for changing profile, too.
#1780
will-code-for-pizza commentedon Mar 2, 2026
After disabling profile PIN protection, I was able to navigate in movie library...
(This is just a workaround, not a solved problem !!)
But if I choose a movie, another error occurs:
https://paste.kodi.tv/otufeyawaf.kodi
EDIT:
THIS LAST ISSUE IS SOLVED. I had to reset my ESN in "expert settings"
Mannshoch commentedon Mar 2, 2026
What doea this esn. and what happens if i reset it?
screenagerbe commentedon Mar 4, 2026
Got the same error, but a different scenario.
Everything is working fine, but we're locked into the Kids profile which has no PIN configured.
When we try to change profile we get the same 404 Error.
I'll try to generate a new NFAuthentication.key and see what gives.
Lamarqe commentedon Mar 6, 2026
After generating a new NFAuthentication.key, I can not watch any steam anymore.
It always gives me: MSL error
licensedManifest/playapi-445: Playback not permitted by Content Usage Policies
Even after generating new ESN for Widewine...
Any ideas? I initially thought it might be about wrong inputstream adaptive resolution settings, but also changing to 480p did not resolve the issue.
pont01 commentedon Mar 13, 2026
Sajnos nálam is ez a hiba! :(
corsac-s commentedon Mar 22, 2026
I have the same error when trying to change profile. This is on 1.23.5 on OSMC.
The URL is
https://www.netflix.com/api/shakti/mre/profiles/switch?switchProfileGuid=patricksrentsch commentedon Mar 29, 2026
The same issue when changing profiles occurs to me with 1.23.5 on Kodi. But with followind steps, I was able to use the plugin with the main profile:
after theses steps, the default (main) profile was selected in the plugin and I am able to use this profile including management of "my list" in this profile.
However, changing to another profile does not work.
aristotelesweb commentedon Apr 18, 2026
I got this IPC callback raised exception now for a couple of months on kod 1.23.5. After reading this thread I created a new key (by instructions of patricksrentsch, thanks) and got the "MSL error Playback not permitted by Content Usage Policies" error. I did the procedure two times, with the same MSL error.
patricksrentsch commentedon Apr 18, 2026
Meanwhile, I switched to the adapted version in the pull-request
#1783
There, the API used has changed. So far,
i can use the complete functionality of NF, slthough I have not re-activated the PIN for the different accounts. Perhaps you can try this.
Lamarqe commentedon Apr 18, 2026
Yes, I can confirm. #1783 solves the issue.
Important for me is to keep the existing NFAuthentication Key, as recreating it will cause the MSL playback issue I mentioned above. However, this is an additional, but unrelated problem.
Luckily I had kept a backup of the addon data before replacing it with a newly generated one.
Restoring the backup and applying the changes of the linked PR has finally brought back Netflix on Kodi for me.
aristotelesweb commentedon Apr 18, 2026
Thanks for the quick repsonse and help.. Unfortunately I don't have the old NFAuth key. I replaced the files from the 1783 version over the currently installed netflix addon and still got the MSL playback issue. I checked I have the most recent input adaptive widivine version.
2026-04-18 19:01:19.052 T:83 warning : [script.module.inputstreamhelper] Widevine update check was made on 2026-03-24 21:18
2026-04-18 19:01:19.101 T:7 info : VideoPlayer::OpenFile: plugin://plugin.video.netflix/play/movie/60020810/?profile_guid=TKLRAKSICNBKTLCZ2SYMNONNME
2026-04-18 19:01:19.101 T:127 warning : CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
2026-04-18 19:01:19.101 T:127 info : Creating InputStream
2026-04-18 19:01:19.134 T:127 warning : AddOnLog: inputstream.adaptive: Warning "inputstream.adaptive.manifest_type" property is deprecated and will be removed next Kodi version, the manifest type is now automatically detected.
If you are using a proxy remember to add the appropriate "content-type" header to the HTTP manifest response
See Wiki page "How to provide custom manifest/license" to learn more about it.
2026-04-18 19:01:19.135 T:127 info : AddOnLog: inputstream.adaptive: [Repr. chooser] Resolution set: 3840x2160, max allowed: 3840x2160, Adjust refresh rate: 1
2026-04-18 19:01:19.461 T:130 error : [plugin.video.netflix (0)] Full MSL error information:
2026-04-18 19:01:19.461 T:130 error : [plugin.video.netflix (0)] {"id": 177653167930565440, "version": 2, "serverTime": 1776531679402, "error": {"code": "FAIL", "detail": "licensedManifest/playapi-445: Playback not permitted by Content Usage Policies (E3-Bgilt-vcAxKdAgWT6z7xrTpzS6VnRq8jGGE7uqEZYNbAFtWx23CqiGiNz5OTd5WsBqoL0q_UrXZlViPtu-Wa0vDY30en8t4_3Qt-9ahn-1D2Z_GUv6Qr8Gy5taZK7nHIK7bbl8nkT5vSz_ECxusvNWqy6KSHR-V_i0Kmvr4kdTP3RGbz-k2hk79vqK5T5EAxGCg6T3adudsG4uxx_r2y5BmNrubtQS901egHca8e6co8sY4AOkezUaU12ceCzsS5QITvNY5LscwYfwrrHAbfl_sQcyGFs9epCbdsl5Xja4OwOdahGWGXKnBLOecw-cqHGcuqcgekz2pk1Jk-UGT4t2uhTr4iHqSSF9I2p5Tc9QpOdKUBvvffiyu-y2Xe3rt3olF_NmOKsxgGIg4KDIlN1IHKuRk04kRN0Q==) [viewableId=60020810]", "displayCode": "E100", "reportingCode": "PBCS-445", "display": "Deze titel is niet beschikbaar voor direct kijken. Probeer een andere titel.", "alertTag": "", "errorActionId": 3, "errorExternalCode": 0, "errorNccpCode": 0, "errorReasonCode": 0, "errorSubCode": 0, "errorDisplayMessage": "Deze titel is niet beschikbaar voor direct kijken. Probeer een andere titel.", "nccpError": {}, "bladeRunnerMessage": "licensedManifest/playapi-445: Playback not permitted by Content Usage Policies (E3-Bgilt-vcAxKdAgWT6z7xrTpzS6VnRq8jGGE7uqEZYNbAFtWx23CqiGiNz5OTd5WsBqoL0q_UrXZlViPtu-Wa0vDY30en8t4_3Qt-9ahn-1D2Z_GUv6Qr8Gy5taZK7nHIK7bbl8nkT5vSz_ECxusvNWqy6KSHR-V_i0Kmvr4kdTP3RGbz-k2hk79vqK5T5EAxGCg6T3adudsG4uxx_r2y5BmNrubtQS901egHca8e6co8sY4AOkezUaU12ceCzsS5QITvNY5LscwYfwrrHAbfl_sQcyGFs9epCbdsl5Xja4OwOdahGWGXKnBLOecw-cqHGcuqcgekz2pk1Jk-UGT4t2uhTr4iHqSSF9I2p5Tc9QpOdKUBvvffiyu-y2Xe3rt3olF_NmOKsxgGIg4KDIlN1IHKuRk04kRN0Q==) [viewableId=60020810]", "bladeRunnerCode": "445", "playbackContextId": "E3-Bgilt-vcAxKdAgWT6z7xrTpzS6VnRq8jGGE7uqEZYNbAFtWx23CqiGiNz5OTd5WsBqoL0q_UrXZlViPtu-Wa0vDY30en8t4_3Qt-9ahn-1D2Z_GUv6Qr8Gy5taZK7nHIK7bbl8nkT5vSz_ECxusvNWqy6KSHR-V_i0Kmvr4kdTP3RGbz-k2hk79vqK5T5EAxGCg6T3adudsG4uxx_r2y5BmNrubtQS901egHca8e6co8sY4AOkezUaU12ceCzsS5QITvNY5LscwYfwrrHAbfl_sQcyGFs9epCbdsl5Xja4OwOdahGWGXKnBLOecw-cqHGcuqcgekz2pk1Jk-UGT4t2uhTr4iHqSSF9I2p5Tc9QpOdKUBvvffiyu-y2Xe3rt3olF_NmOKsxgGIg4KDIlN1IHKuRk04kRN0Q==", "pboc": true}, "common": {"cadToken": "C1-Bgjtt-vcAxJcI4OW4R2DaDwwZRmltm2tEjdgWiA4FmPG7dUA7hTf1cJwTuQPNc7ZUoTqYCvrV-WrvTK0-OxFAO30W2xlmYU1RbA2PI7V1lam5JqJ08bIAGSaQhjVejpyWWlm5HAYBiIOCgxq_vx991VQxFIUWoo="}, "from": "playapi"}
2026-04-18 19:01:19.474 T:7 info : Loading skin file: DialogConfirm.xml, load type: KEEP_IN_MEMORY
WallyZambotti commentedon Apr 20, 2026
@Lamarqe : If the previous NFauthentication key is required then that is going to be an issue in two instances. 1) First time installers, who don't have an older setup. 2) When the authentication key eventually expires as it is designed to do!
richardgoodin commentedon Jul 9, 2026
Root cause: Netflix removed artwork nodes from the Falcor schema
The pathEvaluator 404 is caused by the add-on requesting artwork paths that no longer exist server-side. Any request containing one of these paths returns 404 for the entire batch, which is why all browsing breaks.
Reproduction
Captured a working pathEvaluator request from Chrome DevTools (Copy as cURL), then replayed it with individual paths substituted. Same cookies, same session, same endpoint:
path=["loco","componentSummary"] -> 200
path=["loco",{"from":0,"to":50},"componentSummary"] -> 200
path=["loco",{"from":0,"to":50},0,"reference",["title","summary"]] -> 200
path=["loco",{"from":0,"to":50},{"from":0,"to":0},"reference",[...]] -> 200
path=["loco",{"from":0,"to":50},0,"reference","boxarts",[...],"jpg","value"] -> 404
path=["loco",{"from":0,"to":50},0,"reference","interestingMoment",[...],"jpg","value"] -> 404
path=["loco",{"from":0,"to":50},0,"reference","artWorkByType",...,"png","value"] -> 404
path=["loco",{"from":0,"to":50},0,"reference","storyArt","_665x375","jpg","value"] -> 404
Artwork is not addressable under videos either:
path=["videos",81605886,"boxarts",["_665x375"],"jpg","value"] -> 404
path=["videos",81605886,"storyArt","_665x375","jpg","value"] -> 404
path=["videos",81605886,"artWorkByType",...,"png","value"] -> 404
path=["videos",81605886,"summary"] -> 200
path=["videos",81605886,"itemSummary"] -> 200
What replaced it
Artwork now arrives embedded in the itemSummary atom rather than as separate Falcor nodes. Current web client responses contain, inside itemSummary.value:
assets — keyed by role (logo, background), each with url, artWorkType, imageKey, width/height, tone
videoAssets — e.g. horizontalBackground with motionUrl, motionId, autoPlay
URLs are .webp, and the current client sends webp=true as a query param
The web client no longer requests artwork paths at all.
Things ruled out (all tested, all returned 200 when artwork paths were absent):
Session/cookie validity — add-on's own NetflixId/SecureNetflixId from COOKIES work fine
authURL — add-on's token accepted
User-Agent (tested Chrome 108 and 140)
x-netflix.* headers — not required
Body encoding (raw vs percent-encoded)
HTTP/1.1 vs HTTP/2
Kodi's bundled requests 2.31.0 / urllib3 2.2.3 / OpenSSL 3.5.4 — reproduces 200 outside Kodi with a non-artwork path set
Endpoint URL and query params — identical to the current web client
Unrelated bug found along the way
In http_requests.py, _prepare_request_properties():
pythonauth_data = f'authURL={self.auth_url}'
The authURL is inserted raw into an application/x-www-form-urlencoded body. Tokens containing /, +, or = are misparsed (+ becomes a space). Should be:
pythonauth_data = 'authURL=' + quote(self.auth_url, safe='')
Not the cause of the 404, but a real bug.
Environment: add-on 1.23.5+matrix.1, LibreELEC, Kodi 21.
shithead commentedon Oct 8, 2026
Adjacent work to the root cause @richardgoodin identified above (artwork nodes
removed from the Falcor schema): #1807 implements the replacement via Netflix'
GraphQL endpoint, and keeps a halving/blacklist layer for retired paths instead
of removing the artwork paths (the #1796 route).
Two additions to that analysis:
User-Agent: Kodi/20.0andsession cookies only (no browser fingerprint headers); complete artwork at the
same dimensions as the captures. Reproducible via
docs/graphql-probe.sh.itemSummarycard is used only as the poster fallback; theGraphQL
Imagenodes are the primary source.Branch + tests: #1807.