Notes
The __call__ method of Endpoint objects knows the response type, but
it is not accessible at runtime. Better solutions exist for Python 3.8+, but
the current implementation simply stores a reference to the response type in
each Endpoint subclass.
* https://stackoverflow.com/questions/72149212/how-to-get-generic-types-of-subclass-in-python
* https://stackoverflow.com/questions/69994838/get-generic-substituted-type