add request model

- with tests