diff --git a/doc/design-multi-reloc.rst b/doc/design-multi-reloc.rst
index da029cb256e0c06d416117c1017719b55edbe62a..fca80fa7b482f56cf9bd809448c0319e1c8c5571 100644
--- a/doc/design-multi-reloc.rst
+++ b/doc/design-multi-reloc.rst
@@ -28,6 +28,8 @@ that will be able to compute inter-group instance moves, taking into
 account mobility domains as appropriate. The interface proposed below
 should be enough to cover the use cases mentioned above.
 
+.. _multi-reloc-detailed-design:
+
 Detailed design
 ===============
 
diff --git a/doc/iallocator.rst b/doc/iallocator.rst
index caceca859bde3368ed1790dc62e2f5b919ee57f7..cef14ac2533fbdb4b3c2d244dbd25397ed638dd6 100644
--- a/doc/iallocator.rst
+++ b/doc/iallocator.rst
@@ -189,13 +189,15 @@ follows.
 In all cases, it includes:
 
   type
-    the request type; this can be either ``allocate``, ``relocate`` or
-    ``multi-evacuate``; the ``allocate`` request is used when a new
-    instance needs to be placed on the cluster, while the ``relocate``
-    request is used when an existing instance needs to be moved within
-    the cluster; the ``multi-evacuate`` protocol requests that the
-    script computes the optimal relocate solution for all secondary
-    instances of the given nodes
+    the request type; this can be either ``allocate``, ``relocate``,
+    ``multi-relocate`` or ``multi-evacuate``. The ``allocate`` request
+    is used when a new instance needs to be placed on the cluster. The
+    ``relocate`` request is used when an existing instance needs to be
+    moved within its node group, while the ``multi-relocate`` one is
+    able to relocate multiple instances across multiple node groups. The
+    ``multi-evacuate`` protocol requests that the script computes the
+    optimal relocate solution for all secondary instances of the given
+    nodes.
 
 For both allocate and relocate mode, the following extra keys are needed
 in the ``request`` dictionary:
@@ -268,8 +270,26 @@ Relocation:
      Ganeti 2.0, this list will always contain a single node, the
      current secondary of the instance)
 
-In the case of multi-evacuate, there's one single request argument (in
-addition to ``type``):
+As for ``multi-relocate``, it needs the three following request
+arguments:
+
+  instances
+    a list of instance names to relocate
+
+  reloc_mode
+    a string indicating the relocation mode; there are three possible
+    values for this string: *keep_group*, *change_group*, and
+    *any_group*, the semantics or which are explained in :ref:`the
+    design doc <multi-reloc-detailed-design>`
+
+  target_groups
+    this argument is only accepted when ``reloc_mode``, as explained
+    above, is *change_group*; if present, it must either be the empty
+    list, or contain a list of group UUIDs that should be considered for
+    relocating instances to
+
+Finally, in the case of multi-evacuate, there's one single request
+argument (in addition to ``type``):
 
   evac_nodes
     the names of the nodes to be evacuated
@@ -296,6 +316,10 @@ result
   entry in the input message, otherwise Ganeti will consider the result
   as failed
 
+  for multi-relocate mode, this is a list of 2-tuples in which the first
+  element of the tuple will be an instance name, and the second element
+  a list of operations to perform in order to relocate the instance
+
   for multi-evacuation mode, this is a list of lists; each element of
   the list is a list of instance name and the new secondary node