Всё очень просто. Если страница в браузере загрузилась с одного источника (пусть это будет основное приложение), а обращается к другому (пусть это будет API), то включается защита CORS, встроенная в браузер. Разными считаются источники у которых что-то отличается: протокол (http / https), доменное имя и/или порт.
Для обхода защиты API должен возвращать ответ с набором CORS-заголовков, разрешающих, как минимум, конкретный тип запроса (GET, POST, OPTIONS и т.п.) и источник основного приложения.
Если API принадлежит не вам и вы не в состоянии установить нужные заголовки ответа прямо на нём, то единственный вариант - проксировать запрос через свой бэкенд с добавлением заголовков. То есть, ваша страница делает запрос к вашему бэкенду, ваш бэкенд запрашивает стороннее API, получает от него ответ и возвращает его вашей странице.