Код Ошибки по стандарту, надо отдавать в заголовке ответа сервера например - ошибка авторизации Status: 401. А json'ом дополнительно отдаете пояснение ошибки либо дебаг информацию. Кстати говоря у Laravel 5.3 есть готовые роуты для api, - ничего не надо изобретать. Просто бросаете Exception в любой части приложения а Laravel их отлавливает и отдает json.
При успешной авторизации отдаете токен в json. Клиент должен сохранить это у себя, фронтендщики используют local_storage для этого.
Фронт при каждом запросе добавляет в заголовки токен из хранилища, а сервер его валидирует. По стандарту токен должен храниться только у клиента (в отличии от сессии). Также он должен иметь короткий срок жизни. И чуть более длинный срок для рефреша. Т.е. если токен не валидный, то его бросаете на специальный роут, который на его основании выдаст валидный токен.
P.S.
реализация JWT для laravel