add json output and content negociation