Adyen HTTP errors -> the unified taxonomy, in this order:
429, or errorCode 705 whatever the status, is rate_limited (retryable);
transient-error: true is Adyen saying the same request may be retried
with the same key: processing_error below 500, psp_unavailable from 500,
both retryable;
errorCode 704 (a duplicate racing the in-flight original) is a retryable
processing_error, any other 409 a non-retryable one;
408 (Adyen: "You can retry the request") is a retryable psp_unavailable,
501 (functionality not supported) a non-retryable invalid_request;
a 5xx typed validation, configuration or security faults the request
itself: non-retryable invalid_request. Other 5xx are psp_unavailable and
other 4xx (401/403 bad key, 422 validation) invalid_request.
The processing_errors of the transient, 704 and 409 branches carry
outcomeUnknown: Adyen answers a request sent while another under the same
key is in flight with 704 or a transient error, and a 409 means "the request
was already processed or is in progress", so the key's request may still go
through.
Those other 5xx stay retryable without the transient header, and under
transient-error: false, deliberately, although Adyen's idempotency guide
advises against retrying then: its HTTP status codes page says Adyen neither
accepts nor stores a request an internal error stopped, and a retry carries
the same key, so Adyen answers it from its store if the first attempt did
get through.
Adyen HTTP errors -> the unified taxonomy, in this order:
errorCode705 whatever the status, is rate_limited (retryable);transient-error: trueis Adyen saying the same request may be retried with the same key: processing_error below 500, psp_unavailable from 500, both retryable;errorCode704 (a duplicate racing the in-flight original) is a retryable processing_error, any other 409 a non-retryable one;validation,configurationorsecurityfaults the request itself: non-retryable invalid_request. Other 5xx are psp_unavailable and other 4xx (401/403 bad key, 422 validation) invalid_request.The processing_errors of the transient, 704 and 409 branches carry outcomeUnknown: Adyen answers a request sent while another under the same key is in flight with 704 or a transient error, and a 409 means "the request was already processed or is in progress", so the key's request may still go through.
Those other 5xx stay retryable without the transient header, and under
transient-error: false, deliberately, although Adyen's idempotency guide advises against retrying then: its HTTP status codes page says Adyen neither accepts nor stores a request an internal error stopped, and a retry carries the same key, so Adyen answers it from its store if the first attempt did get through.