diff --git a/doc/api/errors.md b/doc/api/errors.md
index c2a1a4f2145f94..d7b5de448ff876 100644
--- a/doc/api/errors.md
+++ b/doc/api/errors.md
@@ -908,6 +908,16 @@ limit.
A message payload was specified for an HTTP response code for which a payload is
forbidden.
+
+### ERR_HTTP2_PING_CANCEL
+
+An HTTP/2 ping was cancelled.
+
+
+### ERR_HTTP2_PING_LENGTH
+
+HTTP/2 ping payloads must be exactly 8 bytes in length.
+
### ERR_HTTP2_PSEUDOHEADER_NOT_ALLOWED
diff --git a/doc/api/http2.md b/doc/api/http2.md
index c1000661a92d66..3500c563a2782a 100644
--- a/doc/api/http2.md
+++ b/doc/api/http2.md
@@ -344,6 +344,44 @@ acknowledgement for a sent SETTINGS frame. Will be `true` after calling the
`http2session.settings()` method. Will be `false` once all sent SETTINGS
frames have been acknowledged.
+#### http2session.ping([payload, ]callback)
+
+
+* `payload` {Buffer|TypedArray|DataView} Optional ping payload.
+* `callback` {Function}
+* Returns: {boolean}
+
+Sends a `PING` frame to the connected HTTP/2 peer. A `callback` function must
+be provided. The method will return `true` if the `PING` was sent, `false`
+otherwise.
+
+The maximum number of outstanding (unacknowledged) pings is determined by the
+`maxOutstandingPings` configuration option. The default maximum is 10.
+
+If provided, the `payload` must be a `Buffer`, `TypedArray`, or `DataView`
+containing 8 bytes of data that will be transmitted with the `PING` and
+returned with the ping acknowledgement.
+
+The callback will be invoked with three arguments: an error argument that will
+be `null` if the `PING` was successfully acknowledged, a `duration` argument
+that reports the number of milliseconds elapsed since the ping was sent and the
+acknowledgement was received, and a `Buffer` containing the 8-byte `PING`
+payload.
+
+```js
+session.ping(Buffer.from('abcdefgh'), (err, duration, payload) => {
+ if (!err) {
+ console.log(`Ping acknowledged in ${duration} milliseconds`);
+ console.log(`With payload '${payload.toString()}`);
+ }
+});
+```
+
+If the `payload` argument is not specified, the default payload will be the
+64-bit timestamp (little endian) marking the start of the `PING` duration.
+
#### http2session.remoteSettings
-
-* stream {Http2Stream}
-* code {number} Unsigned 32-bit integer identifying the error code. **Default:**
- `http2.constant.NGHTTP2_NO_ERROR` (`0x00`)
-* Returns: {undefined}
-
-Sends an `RST_STREAM` frame to the connected HTTP/2 peer, causing the given
-`Http2Stream` to be closed on both sides using [error code][] `code`.
-
#### http2session.setTimeout(msecs, callback)
-
-* `stream` {Http2Stream}
-* `options` {Object}
- * `exclusive` {boolean} When `true` and `parent` identifies a parent Stream,
- the given stream is made the sole direct dependency of the parent, with
- all other existing dependents made a dependent of the given stream. **Default:**
- `false`
- * `parent` {number} Specifies the numeric identifier of a stream the given
- stream is dependent on.
- * `weight` {number} Specifies the relative dependency of a stream in relation
- to other streams with the same `parent`. The value is a number between `1`
- and `256` (inclusive).
- * `silent` {boolean} When `true`, changes the priority locally without
- sending a `PRIORITY` frame to the connected peer.
-* Returns: {undefined}
-
-Updates the priority for the given `Http2Stream` instance.
-
#### http2session.settings(settings)