Probably my biggest frustration with the Matrix API design is that instead of specifying a couple of generalized communication primitives, it always reinvents stuff like pagination and transactions 3 times in different incompatible ways for different endpoints, and now every endpoint needs a subtly different implementation with its own bugs instead of one implementation for all of it