Klassiker. Leute finden immer einen Weg, Systeme zu umgehen. IP-basiertes Limit und API-Keys sind schon mal ein Anfang, aber nicht kugelsicher. Die Typen nutzen wahrscheinlich Proxys oder rotierende IP-Adressen, um's zu umgehen.
Du könntest versuchen, Muster im Nutzerverhalten zu identifizieren. Wenn jemand immer exakt alle paar Sekunden eine Anfrage schickt, könnte das ein Bot sein. Rate-Limits nicht nur per IP, sondern auch per User-Agent oder Device-Fingerprint einführen.
Ein weiterer Ansatz ist, Captchas für bestimmte Anfragen einzusetzen. Klar, nervt die User, aber besser als der Missbrauch.
Ein anderes, aber aufwändigeres Ding: Machine Learning, um verdächtiges Verhalten zu erkennen. Ist aber eher was für Fortgeschrittene.
Am Ende des Tages: Perfekte Lösung gibt's nicht. Einfach mal ein paar Sachen testen und schauen, was wirkt.