diff --git a/html/semantics/scripting-1/the-script-element/json-module/load-error-events.html b/html/semantics/scripting-1/the-script-element/json-module/load-error-events.html
new file mode 100644
index 00000000000000..a9dfc1e6917830
--- /dev/null
+++ b/html/semantics/scripting-1/the-script-element/json-module/load-error-events.html
@@ -0,0 +1,67 @@
+
+
+
+load/error events for JSON modules
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/html/semantics/scripting-1/the-script-element/json-module/load-error-events.py b/html/semantics/scripting-1/the-script-element/json-module/load-error-events.py
new file mode 100644
index 00000000000000..4018adcdf7cd8d
--- /dev/null
+++ b/html/semantics/scripting-1/the-script-element/json-module/load-error-events.py
@@ -0,0 +1,14 @@
+import re
+
+def main(request, response):
+ headers = [(b"Content-Type", b"text/javascript")]
+ test = request.GET.first(b'test')
+ assert(re.match(b'^[a-zA-Z0-9_]+$', test))
+
+ status = 200
+ if test.find(b'_load') >= 0:
+ content = b'import "./module.json" assert { type: "json"}; %s.executed = true;' % test
+ else:
+ content = b'import "./not_found.json" assert { type: "json"}; %s.test.step(function() { assert_unreached("404 script should not be executed"); });' % test
+
+ return status, headers, content