Integration work is rarely difficult and frequently nasty. The interface is documented incorrectly, the errors arrive with a success status code, field names are misspelled in the response, and the rate limit uses a status nobody expects.
We deal with that by putting the third-party client in its own layer with no dependency on the surrounding application, then testing it against recorded responses from the real service. Every behaviour we have been bitten by becomes a test, so it can only bite once.
The result is that a courier, a payment provider or a supplier feed can be exercised in milliseconds on a laptop, and an upgrade to the surrounding system cannot quietly break the connection to it.

