It's hard to maintain, but in my experience, it is the best option. This type of tests serves two very important purposes:
The second one to me is crucial. Requiring someone to change the code and then the test when changing the input or output of an API test is a good way to ensure that everyone thinks this through, and doesn't end up breaking services that depend on your API.