Migration Guides

From Checkout v2 to Online Payments v3.1

The why and how to migrate from v2 to v3.1

Introduction to v3.1

With v3.1, we have made it much easier for merchants to accept payments online.

This version gives you a single, unified way to handle all payment types, so you don’t need to worry about different integrations for different products or features. The setup is simpler, and you get all the latest improvements, like support for new payment methods and a more consistent experience for both you and your costumers.

Key Benefits

Easier integration: You only need to connect to one API, no matter which payment methods you want to offer.

Consistent experience: All payment responses look the same, making it easier to manage payments and handle updates.

Future-proof: New features and payment options are added to v3.1, so you’re always up to date.

Flexible: You can enable or disable features just by changing parameters, without major changes to your integration. This means less time spent on technical details and more focus on your business.

v2.0 vs v3.1

Feature/Area v2.0 (Legacy) v3.1 (Current)
Response model Instrument-specific, varies by payment type Unified PaymentOrder for all operations
Callback Handling Callback at instrument level Callbacks only at PaymentOrder level
Version management Implicit, less predictable Explicit version headers, more control
Supported instruments Cards, Swish, Vipps, Buy Now Pay Later All from v2.0 + Apple Pay, Click to Pay and Google Pay
HATEOAS support Partial or none Full HATEOAS: all available actions in response

Migration Checklist

Use this checklist when planning and validating a migration from v2.0 to v3.1.

Update API usage and contracts

  • Update all Payment Orders calls to use v3.1 endpoints and contract expectations.
  • Replace any reliance on ?$expand=currentpayment and ?$expand=payments.
  • If needed for UI flows, switch to ?$expand=ongoingpaymentattempt (Payment UI token scope).

Remove instrument-specific response parsing

  • Remove parsing of instrument-specific JObject responses from post-purchase flows.
  • Parse PaymentOrderResponse for POST /{id}/cancellations and POST /{id}/reversals.
  • Ensure your domain model stores PaymentOrder-level identifiers and status transitions.

Verify callback and status handling

  • Validate callback handling against PaymentOrder-level resources and identifiers.
  • Ensure your completion logic uses top-level paymentOrder.status only.
  • Confirm terminal-state handling for Paid, Failed, Aborted, Cancelled.

Add v3.1-only capabilities where relevant

  • If you support wallets, implement POST /authorizations for Apple Pay and Google Pay.
  • If you support one-click, add paymentToken support in PaymentAttemptStarted.
  • Re-test HATEOAS-driven operation handling via the operations array.

Regression and rollout validation

  • Run end-to-end tests for purchase, callback, capture, cancel, and reversal.
  • Validate error handling for 400, 403, 404, and 409 responses.
  • Run a staged rollout with monitoring before full production cutover.

Request Headers v3.1

New Request Headers

1
2
3
4
POST /psp/paymentorders HTTP/1.1
Host: api.payex.com
Authorization: Bearer 
Content-Type: application/json;version=3.1

Order Items

Sending orderItems is no longer mandatory for your requests. If you prefer not to include this information in your transactions, feel free to omit them from your requests.

However, if your selection of offering includes an invoice, it is highly recommended to provide orderItems. These fields are utilized to specify details about the purchased products.

In the absence of this information, we will create the necessary order line using the details provided in the description parameter along with the value in the amount parameter.

Response Fields Changes

In Online Payments v3.1, response fields have been restructured.

Fields removed since v2 include: currentPayment,instrument, payments and state.

Response Fields Changes

1
2
3
4
5
6
7
8
9
10
11
12
13
14

    "paymentorder": {
        "currentPayment": //Removed in Checkout v3.1
        "instrument":  //Removed in Checkout v3.1
        "payments": //Removed in Checkout v3.1
        "settings": //Removed in Checkout v3.1
        "state": //Removed in Checkout v3.1
        "nonPaymentToken": //Moved to `paid` resource in Checkout v3.1
        "recurrenceToken": //Moved to `paid` resource in Checkout v3.1
        "unscheduledToken": //Moved to `paid` resource in Checkout v3.1
        "paymentToken": //Moved to `paid` resource in Checkout v3.1
        "externalNonPaymentToken": //Moved to `paid` resource in Checkout v3.1
        "transactionsOnFileToken": //Moved to `paid` resource in Checkout v3.1
 

Instead, new fields including history, failed, aborted, paid, and others, have been introduced. An example of the complete array of selections is provided below.

New Response Fields

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{
    "urls": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/urls"
    },
    "payeeInfo": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/payeeinfo"
    },
    "payer": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/payers"
    },
    "history": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/history"
    },
    "failed": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/failed"
    },
    "aborted": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/aborted"
    },
    "paid": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/paid"
    },
    "cancelled": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/cancelled"
    },
    "financialTransactions": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/financialtransactions"
    },
    "failedAttempts": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/failedattempts"
    },
    "postPurchaseFailedAttempts": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/failedattempts"
    },
    "metadata": {
        "id": "/psp/paymentorders/09ccd29a-7c4f-4752-9396-12100cbfecce/metadata"
    }
 } 

Endpoints

Name Description
Urls This will provide a report indicating the URLs you have supplied for this paymentOrder.
PayeeInfo This will provide a report detailing the account and Merchant references that were utilized.
Payers If you have provided us with Payer data, it will be attached and stored here.
History Here, you can track every aspect of the transaction lifecycle. This includes all actions initiated by the Payer within our UI and your management of the transaction (Capture, Cancel, Reversal, etc.), from its initiation to completion.
Failed MIT transactions, denoting “Merchant Initiated Transactions,” are exclusively presented here if they result in a Failed status, along with the corresponding failure reason.
Aborted If the transaction is aborted on your end, you can find the details submitted with the request in this section.
Paid In the event of a successful transaction, details about the utilized method, its associated references, and related information will be available here. As a point of reference, this serves as the replacement for currentPayment.
Cancelled Information will be available under this node exclusively when a PaymentOrder has been completely canceled and has received the status Canceled.
FinancialTransactions All post-purchase actions and their references, such as captures and reversals, can be accessed here. This section also serves as the replacement for currentPayment.
FailedAttempts All instances of PaymentOrders marked as Failed will be in this section. Currently, this pertains specifically to transactions utilizing S2S (server-to-server) functionality, with subscriptions (Recur & Unscheduled Purchase) serving as an example.
PostPurchaseFailedAttempts All failed attempts made by the Payer at a third-party will be documented in this section. For instance, if the Payer is denied due to reasons like “Insufficient funds,” such instances will be recorded here.
Metadata If you provide us with information in this object, the details will be reported back to you in this section.

Status Parameter

In v3.1, we have updated the parameter formerly named state from v2 to status, also expanding the range of values that are given to reflect more accurately what stage the transaction is in.

Initialized

This status is returned upon the initial creation of the paymentOrder and remains applicable throughout the active period when the paymentOrder is open for conversion into a payment by the payer.

Paid

The Paid status is granted in response only when an actual amount has been charged and processed. This information becomes visible in the subsequent GET call on the paymentOrder after receipt of either the CompleteUrl or our Callback, providing you with the opportunity to verify the transaction details. Additionally, Paid will be directly returned in the response when conducting post-purchase actions and if there is an associated amount that has been paid.

Aborted

This value becomes accessible only following the execution of an abort operation by either you, the merchant, or if the payer opts for “Cancel payment” within our domain. The latter scenario is applicable solely if you have implemented a redirect integration.

Failed

Currently, the value in this field will be returned exclusively for MIT (Merchant Initiated Transactions) transactions and other server-to-server requests. Please note that this condition may evolve in the future.

Reversed

When a paymentOrder has been entirely refunded, the corresponding value will be Reversed. In the case of partial refunds, the returned value will persist as Paid.

Cancelled

If you initiate a cancellation for the entire authorized amount (reserved funds), the returned value will be Cancelled. However, if you have conducted any captures on the authorized funds before releasing the remaining amount, the returned value will be Paid.

Cosmetic Response Changes

You will find the following fields present in your new response. They have been introduced to enhance our tracking and obtain more precise data regarding the integration types or implementation styles adopted by our customers. They do not directly affect your responsibilities as an integrator and can be disregarded.

Response Fields Excerpt

1
2
3
4
5
6
{
"implementation": "PaymentsOnly",
"integration": "",
"instrumentMode": false,
"guestMode": false,
}
Field Description & Value
“implementation” PaymentsOnly will be the default returned value.
“integration” The value will be either Redirect or HostedView and will be revealed after the initial attempt.
“instrumentMode” The value displayed here will be either true or false, depending on whether the feature was utilized. It is important to note that this is a distinct feature from the regular menu, and in most cases, it will be returned as false.
“guestMode” By default, this value will be set to true. However, if you have implemented our “Payer Aware Menu” feature, the value will be returned as false for returning customers who have stored payment details with you.

Events available in v3.1

Further reading available in the Events section.

Event Description
onCheckoutLoaded This event will trigger the first time the Checkout is loaded. Subscribe to this event if you need total control over the height of Swedbank Pay’s payment frame. This is the initial height of the frame when loaded.
onCheckoutResized This event will trigger every time a UI element changes size.Subscribe to this event if you need total control over the height of Swedbank Pay’s payment frame. The payment methods require individual heights when rendering their content.
onError This event will be triggered during terminal errors or if the configuration fails validation. Subscribe to this event if you want some action to occur on your site when an error happens during the payment.
onOutOfViewRedirect Triggered when a user is redirected to a separate web page, like 3-D Secure or BankID signing. Subscribe to this event if it is not possible to redirect the payer directly from within Swedbank Pay’s payment frame.
onAborted This will be triggered when the payer clicks the “Abort” button. This is only present in the Redirect-implementation and if you have integrated Seamless View (menu embedded), you will need to supply this button/action. When the payer presses your cancel button, we recommend sending an API request aborting the payment so it can’t be completed at a later time. When we receive the request, an abort event will be raised the next time the UI fetches information from the server. Because of that, you should also refresh the script after aborting, as this will trigger the event.
onPaymentAttemptAborted This event will trigger when an attempt has been aborted from an external party. One of these examples is from a card-issuers ACS service (3D-Secure verification). This does not mean the transaction in its entirety has failed. It is just the singular attempt that was aborted. More attempts are available to the payer.
onPaymentAttemptStarted Triggered when the payer has selected a payment method and actively attempts to perform a payment.
onPaid This event triggers when the payer successfully completes their interaction with us. Subscribe to this event if actions are needed on you side other than the default handling of redirecting the payer to your completeUrl. Call GET on the paymentOrder to receive the actual payment status and take appropriate actions according to the information displayed here.
onPaymentAttemptFailed Triggered when a payment has failed, disabling further attempts to perform a payment.
onInstrumentSelected Triggered when a user actively changes payment method in the Payment Menu.
onTermsOfServiceRequested Triggered when the user clicks on the “Display terms and conditions” link. Subscribe to this event if you do not want the default handling of the termsOfServiceUrl. Swedbank Pay will open the termsOfServiceUrl in a new tab within the same browser by default.
onEventNotification Triggered whenever any other public event is called. It does not prevent their handling. Subscribe to this event in order to log actions that are happening in the payment flow at Swedbank Pay.

Events no longer needed and/or supported

  • onBillingDetailsAvailable (Starter/Business)
  • onShippingDetailsAvailable (Starter/Business)
  • Payer identification (Checkin)

Checkin is no longer supported in its previous form. Payer identification now falls under the merchant’s responsibility and is executed through the Payer Aware Payment Menu feature. While this feature retains the functionality of storing payment details for various payment methods, the primary responsibility for the identification process lies with you as the merchant.

This identification is accomplished by assigning a value within the payerReference parameter, serving as a pseudo-“profile” unique to your account. It is crucial to ensure that each reference is distinct for every consumer. Failure to correctly identify and provide the appropriate reference for a consumer may lead to the display of another customer’s details or trigger the creation of a new profile, activating guestMode.

For more detailed information, see the payer aware payment menu section.

Post-Purchase Changes

Captures, Reversals, and Cancellations will now be returned with the intended response template provided by us. The information structure remains identical to the initial PaymentOrder request you already receive when creating the Purchase request. This means you are already familiar with the structure, but the difference now is that it also applies to the response for post-purchase actions.

The new response will not naturally include the same method data as it did with v2. However, you can extend the information by adding ?$expand=financialtransactions to the request path (URL). If you require even more data in your responses, you can continue extending the output by adding a , followed by the node you desire to be included. As an example, ?$expand=financialtransactions,paid would give you both the node for the initial Purchase and the node for the Capture/Reversal operation.

Response example from existing versions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
    "payment": "/psp/creditcard/payments/b2409f06-4944-4b2b-78d8-08dbf7d4b7e9",
    "capture": {
        "id": "/psp/creditcard/payments/b2409f06-4944-4b2b-78d8-08dbf7d4b7e9/captures/b15c1f9c-ad6b-4193-dabe-08dbf7d4b80a",
        "transaction": {
            "id": "/psp/creditcard/payments/b2409f06-4944-4b2b-78d8-08dbf7d4b7e9/transactions/b15c1f9c-ad6b-4193-dabe-08dbf7d4b80a",
            "created": "2023-12-08T11:53:08.8102555Z",
            "updated": "2023-12-08T11:53:08.8810258Z",
            "type": "Capture",
            "state": "Completed",
            "number": 40128369639,
            "amount": 100,
            "vatAmount": 0,
            "description": "Capturing the authorized payment",
            "payeeReference": "1702036388",
            "isOperational": false,
            "operations": []
        }
    }
}

Response Example from v3.1 (Capture with no expansions)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{
    "paymentOrder": {
        "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c",
        "created": "2023-12-08T13:42:08.1297502Z",
        "updated": "2023-12-08T13:43:10.8951496Z",
        "operation": "Purchase",
        "status": "Paid",
        "currency": "SEK",
        "amount": 100,
        "vatAmount": 0,
        "remainingReversalAmount": 100,
        "description": "Test Purchase",
        "initiatingSystemUserAgent": "PostmanRuntime/7.35.0",
        "language": "sv-SE",
        "availableInstruments": [
            "CreditCard",
            "Invoice-PayExFinancingSe",
            "Swish",
            "CreditAccount-CreditAccountSe",
            "Trustly",
            "MobilePay",
            "GooglePay",
            "ClickToPay"
        ],
        "implementation": "PaymentsOnly",
        "integration": "Redirect",
        "instrumentMode": false,
        "guestMode": false,
        "orderItems": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/orderitems"
        },
        "urls": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/urls"
        },
        "payeeInfo": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/payeeinfo"
        },
        "payer": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/payers"
        },
        "history": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/history"
        },
        "failed": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/failed"
        },
        "aborted": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/aborted"
        },
        "paid": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/paid"
        },
        "cancelled": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/cancelled"
        },
        "reversed": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/reversed"
        },
        "financialTransactions": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/financialtransactions"
        },
        "failedAttempts": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/failedattempts"
        },
        "postPurchaseFailedAttempts": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/postpurchasefailedattempts"
        },
        "metadata": {
            "id": "/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/metadata"
        }
    },
    "operations": [
        {
            "method": "POST",
            "href": "https://api.externalintegration.payex.com/psp/paymentorders/a8d963ee-4749-4b3c-9f31-08dbf62d5f1c/reversals",
            "rel": "reversal",
            "contentType": "application/json"
        },
        {
            "method": "GET",
            "href": "https://ecom.externalintegration.payex.com/checkout/16e2b575fb662a7864d5fac28f9e9dd7e264fb8d934850c6dc38ea2be18cc973?_tc_tid=9401c5a368e04ffe9361a604eca15652",
            "rel": "redirect-checkout",
            "contentType": "text/html"
        },
        {
            "method": "GET",
            "href": "https://ecom.externalintegration.payex.com/checkout/client/16e2b575fb662a7864d5fac28f9e9dd7e264fb8d934850c6dc38ea2be18cc973?culture=sv-SE&_tc_tid=9401c5a368e04ffe9361a604eca15652",
            "rel": "view-checkout",
            "contentType": "application/javascript"
        }
    ]
}

Response Example from v3.1 (Capture with Paid and FinancialTransactions expanded)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
{
    "paymentOrder": {
        "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407",
        "created": "2023-12-08T14:06:29.0250114Z",
        "updated": "2023-12-08T14:07:48.9872240Z",
        "operation": "Purchase",
        "status": "Paid",
        "currency": "SEK",
        "amount": 100,
        "vatAmount": 0,
        "remainingReversalAmount": 100,
        "description": "Test Purchase",
        "initiatingSystemUserAgent": "PostmanRuntime/7.35.0",
        "language": "sv-SE",
        "availableInstruments": [
            "CreditCard",
            "Invoice-PayExFinancingSe",
            "Swish",
            "CreditAccount-CreditAccountSe",
            "Trustly",
            "MobilePay",
            "GooglePay",
            "ClickToPay"
        ],
        "implementation": "PaymentsOnly",
        "integration": "Redirect",
        "instrumentMode": false,
        "guestMode": false,
        "orderItems": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/orderitems"
        },
        "urls": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/urls"
        },
        "payeeInfo": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/payeeinfo"
        },
        "payer": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/payers"
        },
        "history": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/history"
        },
        "failed": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/failed"
        },
        "aborted": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/aborted"
        },
        "paid": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/paid",
            "number": 40128372054,
            "instrument": "CreditCard",
            "payeeReference": "1702044389",
            "transactionType": "Authorization",
            "amount": 100,
            "submittedAmount": 100,
            "feeAmount": 0,
            "discountAmount": 0,
            "details": {
                "nonPaymentToken": "6e7f3a0b-3d4d-46a7-8d13-6b15180896a2",
                "externalNonPaymentToken": "91dd1ea0eeafc2ac397d24e80abdc",
                "cardBrand": "MasterCard",
                "cardType": "Credit",
                "maskedPan": "522661******3406",
                "expiryDate": "12/2033",
                "issuerAuthorizationApprovalCode": "L25647",
                "acquirerTransactionType": "3DSECURE",
                "acquirerStan": "25647",
                "acquirerTerminalId": "40128372054",
                "acquirerTransactionTime": "2023-12-08T14:06:46.536Z",
                "transactionInitiator": "CARDHOLDER",
                "bin": "522661"
            }
        },
        "cancelled": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/cancelled"
        },
        "reversed": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/reversed"
        },
        "financialTransactions": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/financialtransactions",
            "financialTransactionsList": [
                {
                    "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/financialtransactions/3477dfdc-097f-4a1f-de15-08dbf7d5c914",
                    "created": "2023-12-08T14:07:48.889224Z",
                    "updated": "2023-12-08T14:07:48.971819Z",
                    "type": "Capture",
                    "number": 40128372069,
                    "amount": 100,
                    "vatAmount": 0,
                    "description": "Capturing the authorized payment",
                    "payeeReference": "1702044467",
                    "orderItems": {
                        "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/financialtransactions/3477dfdc-097f-4a1f-de15-08dbf7d5c914/orderitems"
                    }
                }
            ]
        },
        "failedAttempts": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/failedattempts"
        },
        "postPurchaseFailedAttempts": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/postpurchasefailedattempts"
        },
        "metadata": {
            "id": "/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/metadata"
        }
    },
    "operations": [
        {
            "method": "POST",
            "href": "https://api.externalintegration.payex.com/psp/paymentorders/d4c5684f-c2dc-4c18-680d-08dbf62de407/reversals",
            "rel": "reversal",
            "contentType": "application/json"
        },
        {
            "method": "GET",
            "href": "https://ecom.externalintegration.payex.com/checkout/8a18154cd0eb695537d871ab9936bd16f2a05cdaf42b84b4d027bdd843de4d09?_tc_tid=05f06eeeb05e4d188dc9a8a22bad1a3d",
            "rel": "redirect-checkout",
            "contentType": "text/html"
        },
        {
            "method": "GET",
            "href": "https://ecom.externalintegration.payex.com/checkout/client/8a18154cd0eb695537d871ab9936bd16f2a05cdaf42b84b4d027bdd843de4d09?culture=sv-SE&_tc_tid=05f06eeeb05e4d188dc9a8a22bad1a3d",
            "rel": "view-checkout",
            "contentType": "application/javascript"
        }
    ]
}

Callback Information

Starting from v3.1 and in future API versions, we will no longer expose the underlying URLs for individual API methods. Consequently, you will rely solely on the paymentOrderId provided. If information has been included in the orderReference field in the initial purchase request, this value will still be reported, allowing you to easily identify the transaction associated with a Callback. Note that the payment and transaction fields have been removed.

Callback Example v3.1

1
2
3
4
5
6
7
8
{
   "orderReference":"PO-638423890947905216",
   "paymentOrder":{
      "id":"/psp/paymentorders/a9bd5ea2-d2b0-48d1-59c8-08dc230b04ba",
      "instrument":"CreditCard",
      "number":40129161258
   }
}

Callback Example Previous Versions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
    "orderReference":"ABC123",
    "paymentOrder": {
        "id": "/psp/paymentorders/c3ac1392-35b0-43a6-8f27-08dbce43b47c",
        "instrument": "paymentorders"
    },
    "payment": {
        "id": "/psp/swish/payments/7e6cdfc3-1276-44e9-9992-7cf4419750e1",
        "number": 222222222
    },
    "transaction": {
        "id": "/psp/swish/payments/7e6cdfc3-1276-44e9-9992-7cf4419750e1/sale/ec2a9b09-601a-42ae-8e33-a5737e1cf177",
        "number": 333333333
    }
}

Sources

For a more in-depth understanding of each specific instance, we have compiled relevant documentation below.

Standard v3.1 documentation

Post-purchase documentation

Callback (asynchronous update)

Payer identification (Payer Aware Menu)

Seamless view events (Embedded menu)