I would send the key they pressed and have the server determine what action this relates to and take the appropriate actions.
For example, the player pushed the 'w' key. The server gets sent "Hey, this guy pushed the w key". The server would look and see what the W key should do for the player. It finds that this means the player should move forward. The server then moves the player forward in the world.
At the same time, the client is predicting what is going to happen based on the assumption that what it is being told to do is valid. Then, every so often, the client receives data from the server and everything is set to what the server says.
This is actually what causes the rubber band effect you can see sometimes in network games. The client is predicting where things will be at but gets it wrong. Then when it receives new data from the server, it snaps everything to where it should be (IE what the server says).
You should, ideally, never send any significant data from the client to the server because of cheating.
For example, if you sent velocity the player could be altering the data to be something it shouldn't. Even worse would be sending the position to the server. Even if you send just a bool value saying, hey I want to move this way, this could be done automatically by a hack of some sort. Even sending what keys were pressed is still vulnerable, but you can't get anymore unrelated from data than that.