Just realized those are corporation contracts and you’re absolutely right there, once populated by one character they will remain in the server-side cache until they’re invalidated (1 hour). It’s still in the responsibility of the client to cache them locally, of course, but I’d definitely say the cache time of this particular endpoint could be extended quite a bit.
@Pete_Butcher are you currently using Etags for caching? Still will only be isolated per client since this isn’t a web app, but could help with the issue. I’m admittedly not sure if you’d still hit monolith rate limiting when using if-none-match, but it’s worth a shot.