diff --git a/doc/source/firehose.rst b/doc/source/firehose.rst
index 1a3a656e4d..a4cf91830b 100644
--- a/doc/source/firehose.rst
+++ b/doc/source/firehose.rst
@@ -87,6 +87,7 @@ As of right now the following services publish messages to the firehose:
 .. _lpmqtt: http://git.openstack.org/cgit/openstack-infra/lpmqtt/
 .. _logstash-output-mqtt: https://github.com/kompa3/logstash-output-mqtt
 
+For a full schema description see :ref:`firehose_schema`
 
 Client Usage
 ============
diff --git a/doc/source/firehose_schema.rst b/doc/source/firehose_schema.rst
new file mode 100644
index 0000000000..65f4686669
--- /dev/null
+++ b/doc/source/firehose_schema.rst
@@ -0,0 +1,59 @@
+:title: Firehose Schema
+
+.. _firehose_schema:
+
+Firehose Schema
+###############
+
+This attempts to document the topic and payload schema for all the services
+reporting to the firehose. However since much of what is reported to firehose
+is dynamically generated it is possible this document misses a case.
+
+Gerrit
+======
+
+Messages on firehose for gerrit are generated using the `germqtt`_ project. For
+the most part these are basically identical to what gerrit returns on it's
+native event stream except over MQTT.
+
+.. _germqtt: http://git.openstack.org/cgit/openstack-infra/germqtt/
+
+Topics
+------
+
+The topics for gerrit are generated dynamically. However, they follow a fairly
+straightforward pattern. The basic formula for this is::
+
+  gerrit/<git namespace>/<repo name>/<gerrit event>
+
+So for example a typical topic would be::
+
+  gerrit/openstack/nova/comment-added
+
+The ``git namespace`` and ``repo name`` are pretty self explanatory and are just
+from the git repository the change in gerrit is for. The event is defined in the gerrit event stream. You can see the full reference for topics in the Gerrit
+docs for `Gerrit events`_. However, for simplicity the possible values are:
+
+ * change-abandoned
+ * change-merged
+ * change-restored
+ * comment-added
+ * draft-published
+ * hashtags-changed
+ * merge-failed
+ * patchset-created
+ * ref-updated
+ * reviewer-added
+ * topic-changed
+
+Payload
+-------
+The payload for gerrit messages are basically the same JSON that gets returned
+by gerrit's event stream command. Instead of repeating the entire gerrit schema
+doc here just refer to gerrit's docs on the `JSON payload`_ which documents the
+contents of each JSON object and refer to the doc on `Gerrit events`_ for which
+JSON objects are included with which event type.
+
+.. _JSON payload: https://review.openstack.org/Documentation/json.html
+.. _Gerrit events: https://review.openstack.org/Documentation/cmd-stream-events.html#events
+
diff --git a/doc/source/systems.rst b/doc/source/systems.rst
index fc5156fad0..87b7167efb 100644
--- a/doc/source/systems.rst
+++ b/doc/source/systems.rst
@@ -40,6 +40,7 @@ Major Systems
    codesearch
    signing
    firehose
+   firehose_schema
    pholio
 
 .. NOTE(dhellmann): These projects were not listed above, or in any