Omnichannel icon

Reserve online, try in store

Click and collect: Reserve online and try in a store before buying.

In this click-and-collect use case, shoppers reserve items online without paying upfront. They try the items in a store before deciding what to buy. This "try before you buy" model reduces returns and increases customer satisfaction.

Requirements

Before you begin, take into account the following information.

Requirement Description
Integration type You must have both an ecommerce integration and a point-of-sale integration with Adyen.
Your systems You need a consolidated order/inventory management or ERP system. Alternatively, you must have an orchestration layer that communicates with your various sub-systems and can consume webhook messages. This is because your POS system must be able to update the online inventory in case of a pickup, sale, or return.
Preparation We recommend familiarizing yourself with specific concepts so that you can make informed decisions about integration choices. See Considerations for details.

Shopper journey

From the shopper's perspective, this click-and-collect use case is as follows.

On the ecommerce site, the shopper logs in to their profile (if they have one), selects items to reserve, and chooses a pickup location. The shopper indicates how they want to identify themselves at pickup: using the same card used for the reservation, or using their customer profile. If necessary, the shopper enters the details to create a profile.

At the store, the shopper identifies themselves using the chosen method, either:

  • At the terminal, the shopper presents (taps) the same card used for the online reservation.
  • The shopper provides profile details such as name and telephone number.

Store staff retrieves the reserved items. The shopper tries the items and decides what to buy:

  • Purchase all items: The full reservation amount is booked from the shopper's account.
  • Purchase fewer items: Only part of the reservation amount is booked from the shopper's account.
  • Purchase more items: The additional items are paid with a separate payment at the terminal, or a higher amount than the reservation is booked from the shopper's account.

The following diagram illustrates this shopper journey.

CmdyYXBoIExSCiAgICBBKChSZXNlcnZlPGJyPm9ubGluZSkpOjo6c3RlcFN0eWxlIC0tPiBCe0Nob29zZTxicj5waWNrdXA8YnI+b3B0aW9ufTo6OnN0ZXBTdHlsZQogICAgQiAtLSBDYXJkIC0tPiBDMVtBdCBwaWNrdXA6IElkZW50aWZ5IDxicj50aHJvdWdoIHBheW1lbnQgY2FyZF06OjpzdGVwU3R5bGUKICAgIEIgLS0gUHJvZmlsZSAtLT4gQzJbQXQgcGlja3VwOiBJZGVudGlmeSA8YnI+dGhyb3VnaCBwcm9maWxlXTo6OnN0ZXBTdHlsZQogICAgQzEgLS0+IERbVHJ5IGl0ZW1zPGJyPmluIHN0b3JlXTo6OnN0ZXBTdHlsZQogICAgQzIgLS0+IEQKICAgIEQgLS0+IEV7UHVyY2hhc2U8YnI+ZGVjaXNpb259Ojo6c3RlcFN0eWxlCiAgICBFIC0tIEFsbCBpdGVtcyAtLT4gRigoUmVjZWl2ZSBpdGVtczxicj5pbiBzdG9yZSkpOjo6ZmluYWxTdHlsZQogICAgRSAtLSBGZXdlciBpdGVtcyAtLT4gRgogICAgRSAtLSBNb3JlIGl0ZW1zIC0tPiBGCgolJSBTdHlsZXMKICAgIGNsYXNzRGVmIHRvcFN0eWxlIGZpbGw6IzAwMCxzdHJva2U6IzAwMCxjb2xvcjojZmZmCiAgICBjbGFzc0RlZiBjYXRlZ29yeVN0eWxlIGZpbGw6IzQ0NCxzdHJva2U6IzMzMyxjb2xvcjojZmZmCiAgICBjbGFzc0RlZiBzdGVwU3R5bGUgZmlsbDojZmZmLHN0cm9rZTojMGFiZjUzLHN0cm9rZS13aWR0aDoycHgsY29sb3I6IzAwMAogICAgY2xhc3NEZWYgZmluYWxTdHlsZSBmaWxsOiMwYWJmNTMsc3Ryb2tlOiMwNzhkM2UsY29sb3I6IzAwMAo=

Considerations

Before you set up a flow for this use case, there are a couple of points that you must be aware of or make a decision on.

Capture settings

This use case requires manual capture. The payment is not captured at the time of reservation — capture only happens when the shopper decides which items to buy in-store.

You can use either:

  • Pre-authorization with manual capture: Recommended if you want the option to increase the authorized amount later (when the shopper buys additional items). Pre-authorization signals to the issuer that the amount may change.
  • Regular authorization with manual capture: Sufficient if you expect the amount to stay the same or decrease (partial capture for fewer items).

Not all card schemes support pre-authorization. Before you rely on pre-authorization, check which payment methods and card schemes support authorization adjustment.

Reference:
Authorization adjustment, Capture

Shopper attribution

You need to decide beforehand how you want to attribute shoppers: if an item is reserved online and purchased in-store, which department can this sale be attributed to? Consider how you want to track and report on cross-channel transactions for accurate revenue attribution.

Shopper identification

To identify the shopper at pickup, you must consider data privacy. Always ask for explicit permission when you save the shopper's details.

Reference:
Customer data and privacy

In this use case, you can identify shoppers using card recognition or customer profile details. Implement both methods because card recognition only works if a card or NFC wallet was used for the online reservation. Card recognition is not possible with QR code wallets (such as PayPal), Buy Now Pay Later payment methods (such as Klarna), or other alternative payment methods (such as iDEAL/Wero).

We strongly recommend storing the card alias and the Payment Account Reference (PAR) in the shopper's profile. This lets you offer both recognition methods for the same shopper.

Reference:
Card recognition

To use card recognition, you must enable receiving shopper identifying data in API responses and webhook messages.

Reference:
Receive identifiers in webhooks and Receive identifiers in Terminal API responses.

Card acquisition

Card recognition is based on a "card acquisition" request: the shopper presents their card or other payment instrument to the payment terminal, and the response returns details that you can use to look up the shopper in your system.

Reference:
Card acquisition

Mixed basket and account structure

If the shopper buys more items in-store than they reserved online, the purchase becomes a mixed basket of online and in-store items. We recommend discussing your Adyen account structure with your Adyen implementation engineer or account manager, since this affects how you reconcile and attribute the sale.

You have the following options for handling the additional items:

  • Option 1: One transaction: increase the online authorization, then capture the total as a single payment. This works only if you used pre-authorization for the online reservation.
  • Option 2: Two transactions: capture the original reservation, then charge the extra items as a separate in-person payment. This works with any authorization type.

Reference:
Account structures for mixed baskets

API flow

There are several Adyen API requests involved in the described shopper journey, as shown in the following diagram.

CnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgU2hvcHBlcgogICAgcGFydGljaXBhbnQgRWNvbQogICAgcGFydGljaXBhbnQgRVJQCiAgICBwYXJ0aWNpcGFudCBQT1MKICAgIHBhcnRpY2lwYW50IEFkeWVuCgogICAgU2hvcHBlci0+PkVjb206IFJlc2VydmUgaXRlbXMgb25saW5lCiAgICBFY29tLT4+QWR5ZW46IENoZWNrb3V0IEFQSSBwYXltZW50IHJlcXVlc3QsIG1hbnVhbCBjYXB0dXJlCiAgICBBZHllbi0+PkVjb206IFBheW1lbnQgcmVzcG9uc2UKICAgIFNob3BwZXItPj5FY29tOiBDaG9vc2UgcGlja3VwIG9wdGlvbjogY2FyZCBvciBwcm9maWxlCiAgICBFY29tLT4+RVJQOiBTYXZlIHNob3BwZXIgZGF0YSBmcm9tIGNhcmQgb3IgcHJvZmlsZQogICAgU2hvcHBlci0+PlBPUzogSWRlbnRpZnkgYXQgcGlja3VwCiAgICBvcHQgSWRlbnRpZnkgdXNpbmcgY2FyZCByZWNvZ25pdGlvbgogICAgICAgIFBPUy0+PkFkeWVuOiBUZXJtaW5hbCBBUEkgY2FyZCBhY3F1aXNpdGlvbiByZXF1ZXN0CiAgICAgICAgQWR5ZW4tPj5QT1M6IENhcmQgYWNxdWlzaXRpb24gcmVzcG9uc2UKICAgIGVuZAogICAgUE9TLT4+RVJQOiBGaW5kIHNob3BwZXIncyByZXNlcnZhdGlvbgogICAgTm90ZSBvdmVyIFNob3BwZXIsIFBPUzogU2hvcHBlciB0cmllcyBpdGVtcwogICAgYWx0IFB1cmNoYXNlIGFsbCBpdGVtcwogICAgICAgIFBPUy0+PkVjb206IFJlcXVlc3QgZnVsbCBjYXB0dXJlCiAgICAgICAgRWNvbS0+PkFkeWVuOiBDaGVja291dCBBUEkgZnVsbCBjYXB0dXJlCiAgICBlbHNlIFB1cmNoYXNlIGZld2VyIGl0ZW1zCiAgICAgICAgUE9TLT4+RWNvbTogUmVxdWVzdCBwYXJ0aWFsIGNhcHR1cmUKICAgICAgICBFY29tLT4+QWR5ZW46IENoZWNrb3V0IEFQSSBwYXJ0aWFsIGNhcHR1cmUKICAgIGVsc2UgUHVyY2hhc2UgbW9yZSwgT3B0aW9uIDE6IG9uZSB0cmFuc2FjdGlvbgogICAgICAgIFBPUy0+PkVjb206IFJlcXVlc3QgYWRqdXN0bWVudCBhbmQgY2FwdHVyZQogICAgICAgIEVjb20tPj5BZHllbjogQ2hlY2tvdXQgQVBJIGF1dGhvcml6YXRpb24gYWRqdXN0bWVudAogICAgICAgIEVjb20tPj5BZHllbjogQ2hlY2tvdXQgQVBJIGNhcHR1cmUgKGFkanVzdGVkIGFtb3VudCkKICAgIGVsc2UgUHVyY2hhc2UgbW9yZSwgT3B0aW9uIDI6IHR3byB0cmFuc2FjdGlvbnMKICAgICAgICBQT1MtPj5FY29tOiBSZXF1ZXN0IGNhcHR1cmUgb2Ygb3JpZ2luYWwgYW1vdW50CiAgICAgICAgRWNvbS0+PkFkeWVuOiBDaGVja291dCBBUEkgY2FwdHVyZSAob3JpZ2luYWwgYW1vdW50KQogICAgICAgIFBPUy0+PkFkeWVuOiBUZXJtaW5hbCBBUEkgcGF5bWVudCAoYWRkaXRpb25hbCBpdGVtcykKICAgIGVuZAo=

The next section, "Instructions", provides more details about the API flow.

Instructions

This section provides high-level instructions focusing on how to use the Adyen APIs and webhooks in the described shopper journey.

The code samples show the minimally required parameters. You can add more parameters.

Online reservation

If the shopper selected items to reserve for in-store pickup:

  1. Make a Checkout API payment request with manual capture enabled. Use pre-authorization if you want the option to increase the amount later (for additional items).

    Reference:
    Adjust an authorization, Online payments > Build your integration.

  2. If the resultCode from the API response shows the payment is authorized, present an option on your checkout to let the shopper choose an identification method at the pickup location: through the card they used for the reservation, or through personal details.

  3. If the shopper selected personal details as identification method, present a form to let the shopper enter identifying details such as name, phone number, and address. Securely save the entered details in your system.

  4. If the shopper selected card as identification method, securely save the following details when you get the outcome of the payment in the AUTHORISATION webhook message:

    • additionalData.alias: The card alias uniquely represents the shopper's card number (PAN). This enables you to recognize the card that a shopper is using. You cannot use the card alias for making payments. For NFC wallet transactions, the card alias is not available.
    • additionalData.PaymentAccountReference: The payment account reference (PAR) represents the payment account that the card and/or NFC wallet is linked to. It solves the issue with the PAN and alias not being available for NFC wallet transactions. Using the PAR, you can recognize the shopper.
  5. Regardless of identification method, from the AUTHORISATION webhook message also save the following details. You will need these details to find the reservation in your system and to capture the payment later.

    • pspReference: The Adyen-generated unique reference for the transaction.
    • amount: The currency and value of the transaction.

In-store pickup and try-on

When the shopper comes to the pickup location:

  1. If you need to identify the shopper based on the card that was used for the online reservation:

    1. Make a Terminal API CardAcquisitionRequest with an empty CardAcquisitionTransaction object.

      Reference:
      Card acquisition

    2. When you receive the CardAcquisitionResponse, get the following information from the response.AdditionalResponse:

      • PaymentAccountReference: the PAR, if present.
      • alias: the card alias
    3. Finish the card acquisition by making an EnableServiceRequest to stop the flow.

      Reference:
      Finish with a cancellation

  2. If you need to identify the shopper based on profile data, collect certain details such as name and phone number. You can do this in various ways, for example:

    • Store staff asks the shopper for the details.
    • You collect the shopper's details on a secondary screen, for instance a tablet.
    • You use input requests to collect the shopper's details on the payment terminal.
  3. Ensure your store staff can look up the shopper's reserved items in your system using either the PAR or card alias from the card acquisition response, or the profile data that the shopper provided. Store staff then hands over the items to the shopper to try.

Capture based on purchase decision

After the shopper has tried the items and decided what to buy:

See also