add request model

good to review

- with tests