CORS не имеет ничего общего с API. Т.к. это - браузерная технология и используется для скриптов внутри браузеров.
Простой принцип разделения:
1. Для всех - список параметров без ключа.
2. Для себя - список параметров с неким ДИНАМИЧЕСКИМ ключом (токен подписи) и формулой его генерации, которая известна только Вам.
Теперь, защита от перехвата (лучше делать, даже если есть SSL):
1. На сервере храним формулу генерации подписи запроса на основе входных параметров запроса к API и временной метки.
2. При обращении к функциям "закрытого" API (для личных целей) Вы формируете подпись запроса, предварительно СИНХРОНИЗИРУЯ время с серверным, и затем, согласно формуле, отсылаете на сервер.
3. Сервер, зная формулу делает тоже самое и сверяет значения присланной и полученной (по той же формуле на стороне сервера) подписи: если они не совпадают ИЛИ просрочена ИЛИ это дубликат - сервер запрос к API отклоняет, иначе - запрос исполняется.
4. Сервер кэширует запрос на время погрешности синхронизации, чтобы предотвратить повторное использование идентичного запроса посредством MiTM-перехвата.