A payment moves through several states from creation to a final outcome. Adyen tells you about these states in two ways: a synchronous result code returned right after you submit, and asynchronous webhook events that report the authoritative outcome. This page explains both and walks through the lifecycle.
Synchronous result codes
When you submit a payment, you get a resultCode that indicates the current status. In the Sessions flow you get it from Drop-in or the Component; in the Advanced flow you get it in the /payments or /payments/details response. The status can change after you receive the result code, so do not use the result code to update your order management system.
Common result codes:
Received: the request was received and will be processed. This is the initial state for all payments.
Pending: the order was received but the final status is not available yet, common for asynchronous payment methods.
RedirectShopper: the shopper must complete authentication on an external page or app.
Authorised: the payment was successfully authorized.
Refused: the payment was refused. You receive a
refusalReason.Error: there was an error while processing the payment.
Cancelled: the payment was cancelled before processing completed.
Asynchronous webhook events
Every webhook message contains an eventCode that tells your server what happened. Use the event code to drive your business logic. Common transaction and dispute event types:
AUTHORISATION: the
successfield reports the outcome of the payment request.CAPTURE: the outcome of a capture request. By default this is not sent for automatic captures.
CANCELLATION: the outcome of a request to cancel a payment.
REFUND: the outcome of a request to refund a payment.
CHARGEBACK: a payment was charged back and the funds were deducted from your account.
The success field reports whether the event succeeded, and originalReference links the event to the pspReference of the original payment.
The lifecycle
Created / received. The payment request is received (
Received).Authorised. Funds are reserved. You get an
Authorisedresult code and anAUTHORISATIONwebhook.Captured. Funds move to your account. With manual or delayed capture you get a
CAPTUREwebhook. See Authorization and Capture.Refunded or cancelled. A captured payment can be refunded (
REFUND); an uncaptured authorization can be cancelled (CANCELLATION).Disputed / chargeback. The shopper or issuer can dispute the payment, which can lead to a
CHARGEBACK.Refused or error. If authorization does not succeed, the payment ends in
RefusedorError.
Rely on the webhook
The webhook carries the final, authoritative outcome. The synchronous result code can still change afterward, so update your order management system from the webhook, not from the result code alone. This also keeps your integration correct for both synchronous payment methods such as cards and asynchronous methods.
on POST /webhooks:
respond with HTTP 200 // acknowledge quickly
read eventCode and success
update the order based on the event
