code: private void updateRequestMetadata() {
          // Take event level metadata, merge with top level metadata
          // event level metadata takes precedence
          try {
              JSONObject metadata = new JSONObject();
              Iterator<String> i = prefHelper_.getRequestMetadata().keys();
              while (i.hasNext()) {
                  String k = i.next();
                  metadata.put(k, prefHelper_.getRequestMetadata().get(k));
              }
              JSONObject originalMetadata = params_.optJSONObject(Defines.Jsonkey.Metadata.getKey());
              if (originalMetadata != null) {
                  Iterator<String> postIter = originalMetadata.keys();
                  while (postIter.hasNext()) {
                      String key = postIter.next();
                      // override keys from above
                      metadata.put(key, originalMetadata.get(key));
                  }
              }
              // Install metadata need to be send only with Install request
              if ((this instanceof ServerRequestRegisterInstall) && prefHelper_.getInstallMetadata().length() > 0) {
                  params_.putOpt(Defines.Jsonkey.InstallMetadata.getKey(), prefHelper_.getInstallMetadata());
              }
              params_.put(Defines.Jsonkey.Metadata.getKey(), metadata);
          } catch (JSONException e) {
             PrefHelper.Debug("Could not merge metadata, ignoring user metadata.");
          }
      }
docs: Update the additional metadata provided using {@link Branch#setRequestMetadata(String, String)} to the requests.