Every error is application/problem+json, following RFC 9457 with a few stable DropHub extensions.
Fields
Branch on code, never on title or detail. Those are human-readable, may be localized via Accept-Language, and may be reworded. code is the contract.
Validation failures
A 422 carries a violations array naming each offending field:
Status codes
Rate limiting
A 429 carries Retry-After. Honour it rather than choosing your own delay, and use bounded exponential backoff with jitter for retries beyond the first.
The most common source of 429 on /oauth/token is requesting a token per API call. Cache the token until shortly before expires_in elapses.
Reporting a problem
When something needs investigating, quote the correlationId and requestId along with the timestamp. Those three values locate the exact request in DropHub’s logs.
correlationId spans the whole logical operation, including work that continued after your response was returned. requestId identifies just the one HTTP request. Both are useful; they answer different questions.