generic Ruby API client