Думайте об этом как о письме. Иногда вы получаете письмо, например, с просьбой заполнить форму, а затем возвращаете ее в предварительно адресованном конверте, который находится в исходном конверте, в котором была форма.
Закончив заполнение формы, вы кладете ее в предоставленный конверт для возврата и отправляете обратно.
CallbackUrl похож на конверт возврата. Вы фактически говорите, что я отправляю вам эти данные. Как только вы закончите с этим, я нахожусь на этом callbackUrl и жду вашего ответа. Таким образом, API обработает отправленные вами данные, а затем посмотрит на обратный вызов, чтобы отправить вам ответ.
Это полезно, потому что иногда обработка некоторых данных может занять много времени, и нет смысла заставлять вызывающего абонента ждать ответа. Например, предположим, что ваш API позволяет пользователям отправлять в него документы и сканировать их на вирусы. Затем вы отправляете отчет после. Сканирование может занять около 3 минут. Пользователь не может ждать 3 минуты. Таким образом, вы подтверждаете, что получили документ, и позволяете вызывающему абоненту заниматься другими делами, пока вы выполняете сканирование, а затем по завершении используйте callbackUrl, чтобы сообщить им результат сканирования.