diff --git a/doc/api/errors.md b/doc/api/errors.md
index 0df38e69f71815..81e7cc6d73492e 100644
--- a/doc/api/errors.md
+++ b/doc/api/errors.md
@@ -835,6 +835,11 @@ communication channel to a child process. See [`subprocess.send()`] and
Used generically to identify when an invalid or unexpected value has been
passed in an options object.
+
+### ERR_INVALID_PROTOCOL
+
+Used when an invalid `options.protocol` is passed.
+
### ERR_INVALID_SYNC_FORK_INPUT
diff --git a/lib/internal/errors.js b/lib/internal/errors.js
index 3afbc68d963841..3029f504ba6839 100644
--- a/lib/internal/errors.js
+++ b/lib/internal/errors.js
@@ -196,6 +196,8 @@ E('ERR_INVALID_OPT_VALUE',
return `The value "${String(value)}" is invalid for option "${name}"`;
});
E('ERR_INVALID_PERFORMANCE_MARK', 'The "%s" performance mark has not been set');
+E('ERR_INVALID_PROTOCOL', (protocol, expectedProtocol) =>
+ `Protocol "${protocol}" not supported. Expected "${expectedProtocol}"`);
E('ERR_INVALID_SYNC_FORK_INPUT',
(value) => {
return 'Asynchronous forks do not support Buffer, Uint8Array or string' +