Вы отправляете данные на сервер с типом application/json. Поэтому, автоматически они не парсятся и это нужно делать руками:
json_decode(file_get_contents('php://input'), true);
php://input является потоком только для чтения, который позволяет вам читать необработанные данные из тела запроса. php://input недоступен с типом содержимого enctype="multipart/form-data".
https://www.php.net/manual/ru/wrappers.php.php
Ну или отправлять данные на сервер как form-data, тогда всё будет работать как вы ожидаете.