+* The `command` must be `diagnostic_request.`
+* The `action` must be included, and must be one of:
+ * `add` - create a new one-off or recurring diagnostic request.
+ * `cancel` - cancel an existing request.
+* The details of the request must be included in the `request` field, using
+ the sub-fields defined below.
+
+A diagnostic request's `bus`, `id`, `mode` and `pid` (or lack of a `pid`)
+combine to create a unique key to identify a request. These four fields will be
+referred to as the key of the diagnostic request. For example, to create a
+simple one-time diagnostic request:
+
+ { "command": "diagnostic_request",
+ "action": "add",
+ "request": {
+ "bus": 1,
+ "id": 1234,
+ "mode": 1,
+ "pid": 5
+ }
+ }
+ }
+
+Requests are completed after any responses are received (unless
+`multiple_responses` is set), or the request has timed out after a certain
+number of seconds. After a request is completed, you can re-`create` the same
+key to make another request.
+
+Requests with a `frequency` are added as *recurring* requests, e.g. to add the
+previous example as a recurring request at 1Hz:
+
+ { "command": "diagnostic_request",
+ "action": "add",
+ "request": {
+ "bus": 1,
+ "id": 1234,
+ "mode": 1,
+ "pid": 5,
+ "frequency": 1
+ }
+ }
+ }
+
+To cancel a recurring request, send a `cancel` action with the same key, e.g.:
+
+ { "command": "diagnostic_request",
+ "action": "cancel",
+ "request": {
+ "bus": 1,
+ "id": 1234,
+ "mode": 1,
+ "pid": 5
+ }
+ }
+ }
+
+Simultaneous recurring requests for the same key at different rates (e.g. 1Hz
+*and* 2Hz) is not supported. However, non-recurring ("one-off") requests may
+exist in parallel with a recurring request for the same key.
+