Можно сделать простую трассировку с помощью xdebug.
В начале работы скрипта добавляем, прям в начале ларавелевского index.php в папке public (сделай копию index.php для душевного спокойствия):
<?php
if (!file_exists(dirname(__DIR__)."/xdebug")) {
mkdir(dirname(__DIR__)."/xdebug");
}
xdebug_start_trace(dirname(__DIR__)."/xdebug/".rand(1,10000));
Передаём случайное число, чтоб при включении стресс-теста при каждом обращении создавался свой файл с трассировкой, костыль, но не суть
Далее получаем файлы в корневой папке ларавеля в папке xdebug, которые имеют вид:
...
0.4393 81359120 -> drupal_alter() /Users/mike/projects/unicorns/includes/menu.inc:508
0.4395 81359264 -> is_array() /Users/mike/projects/unicorns/includes/module.inc:1000
0.4398 81359624 -> module_implements() /Users/mike/projects/unicorns/includes/module.inc:1021
...
Первая колонка - это счётчик времени по выполнению вызванной функции, т.е. например по середине выполнение функции is_array() заняло 0.003 секунды, к примеру.
Анализируем трассировку и выявляем "узкое горлышко".
Возможные варианты:
1) Тормозит API-сервер, необходимо оптимизировать связку nginx + php (маловероятно).
2) Тормозит API CRM, к которому обращается твой API (более вероятно, могут стоять ограничения на подключение и т.п.).