A generic API Client