code: func (s *HTTPServer) IntentionSpecificGet(id string, resp http.ResponseWriter, req *http.Request) (interface{}, error) {
  	// Method is tested in IntentionEndpoint
  
  	args := structs.IntentionQueryRequest{
  		IntentionID: id,
  	}
  	if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done {
  		return nil, nil
  	}
  
  	var reply structs.IndexedIntentions
  	if err := s.agent.RPC("Intention.Get", &args, &reply); err != nil {
  		// We have to check the string since the RPC sheds the error type
  		if err.Error() == consul.ErrIntentionNotFound.Error() {
  			resp.WriteHeader(http.StatusNotFound)
  			fmt.Fprint(resp, err.Error())
  			return nil, nil
  		}
  
  		// Not ideal, but there are a number of error scenarios that are not
  		// user error (400). We look for a specific case of invalid UUID
  		// to detect a parameter error and return a 400 response. The error
  		// is not a constant type or message, so we have to use strings.Contains
  		if strings.Contains(err.Error(), "UUID") {
  			return nil, BadRequestError{Reason: err.Error()}
  		}
  
  		return nil, err
  	}
  
  	// This shouldn't happen since the called API documents it shouldn't,
  	// but we check since the alternative if it happens is a panic.
  	if len(reply.Intentions) == 0 {
  		resp.WriteHeader(http.StatusNotFound)
  		return nil, nil
  	}
  
  	return reply.Intentions[0], nil
  }
docs: // GET /v1/connect/intentions/:id