diff --git a/doc/api/errors.md b/doc/api/errors.md
index 7cd23e05a21701..962e011bea5bd5 100644
--- a/doc/api/errors.md
+++ b/doc/api/errors.md
@@ -826,6 +826,36 @@ when an error occurs (and is caught) during the creation of the
context, for example, when the allocation fails or the maximum call stack
size is reached when the context is created.
+
+
+### `ERR_CPU_PROFILE_ALREADY_STARTED`
+
+
+
+The CPU profile with the given name is already started.
+
+
+
+### `ERR_CPU_PROFILE_NOT_STARTED`
+
+
+
+The CPU profile with the given name is not started.
+
+
+
+### `ERR_CPU_PROFILE_TOO_MANY`
+
+
+
+There are too many CPU profiles being collected.
+
### `ERR_CRYPTO_ARGON2_NOT_SUPPORTED`
diff --git a/doc/api/worker_threads.md b/doc/api/worker_threads.md
index d287bef25f21f8..f937a2004b7cb8 100644
--- a/doc/api/worker_threads.md
+++ b/doc/api/worker_threads.md
@@ -1957,6 +1957,36 @@ this matches its values.
If the worker has stopped, the return value is an empty object.
+### `worker.startCpuProfile(name)`
+
+
+
+* name: {string}
+* Returns: {Promise}
+
+Starting a CPU profile with the given `name`, then return a Promise that fulfills
+with an error or an object which has a `stop` method. Calling the `stop` method will
+stop collecting the profile, then return a Promise that fulfills with an error or the
+profile data.
+
+```cjs
+const { Worker } = require('node:worker_threads');
+
+const worker = new Worker(`
+ const { parentPort } = require('worker_threads');
+ parentPort.on('message', () => {});
+ `, { eval: true });
+
+worker.on('online', async () => {
+ const handle = await worker.startCpuProfile('demo');
+ const profile = await handle.stop();
+ console.log(profile);
+ worker.terminate();
+});
+```
+
### `worker.stderr`