code: func (e *Event) Fire(params *UserEvent, q *WriteOptions) (string, *WriteMeta, error) {
  	r := e.c.newRequest("PUT", "/v1/event/fire/"+params.Name)
  	r.setWriteOptions(q)
  	if params.NodeFilter != "" {
  		r.params.Set("node", params.NodeFilter)
  	}
  	if params.ServiceFilter != "" {
  		r.params.Set("service", params.ServiceFilter)
  	}
  	if params.TagFilter != "" {
  		r.params.Set("tag", params.TagFilter)
  	}
  	if params.Payload != nil {
  		r.body = bytes.NewReader(params.Payload)
  	}
  
  	rtt, resp, err := requireOK(e.c.doRequest(r))
  	if err != nil {
  		return "", nil, err
  	}
  	defer resp.Body.Close()
  
  	wm := &WriteMeta{RequestTime: rtt}
  	var out UserEvent
  	if err := decodeBody(resp, &out); err != nil {
  		return "", nil, err
  	}
  	return out.ID, wm, nil
  }
docs: // Fire is used to fire a new user event. Only the Name, Payload and Filters
  // are respected. This returns the ID or an associated error. Cross DC requests
  // are supported.