async JSON instead of websockets