--- title: "Afterpay Component" description: "Add Afterpay to your existing Components integration." url: "https://docs.adyen.com/payment-methods/afterpaytouch/web-component" source_url: "https://docs.adyen.com/payment-methods/afterpaytouch/web-component.md" canonical: "https://docs.adyen.com/payment-methods/afterpaytouch/web-component" last_modified: "2026-05-24T12:54:31+02:00" language: "en" --- # Afterpay Component Add Afterpay to your existing Components integration. [View source](/payment-methods/afterpaytouch/web-component.md) This page explains how to add Afterpay to your existing Web Components integration. ## Requirements Select the [server-side flow](/online-payments/build-your-integration) that your integration uses: ### Tab: Sessions flow | Requirement | Description | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | Make sure that you have built a Sessions flow [Web Components integration](/online-payments/build-your-integration/sessions-flow?platform=Web\&integration=Components). | | **Setup steps** | Before you begin, [add Afterpay in your Customer Area](/payment-methods/add-payment-methods). | ### Tab: Advanced flow | Requirement | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Integration type** | Make sure that you have built an Advanced flow [Web Components integration](/online-payments/build-your-integration/advanced-flow?platform=Web\&integration=Components). | | **Setup steps** | Before you begin, [add Afterpay in your Customer Area](/payment-methods/add-payment-methods). | When making an Afterpay payment, you also need to: 1. Collect shopper details, and specify these in your payment request. Afterpay uses these for risk checks. 2. Provide information about the purchased items. 3. Make sure that you use a supported combination of [country/region and currency](/payment-methods/afterpaytouch). ## API reference Select which endpoint you are using: ### Tab: `/sessions` This is the default with [Components v5.0.0](/online-payments/build-your-integration/sessions-flow?platform=Web\&integration=Components) or later. | Parameter name | Required | Description | | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | | [shopperName](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-shopperName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's full name. | | [shopperEmail](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-shopperEmail) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's email address. | | [shopperReference](https://docs.adyen.com/api-explorer/#/CheckoutService/latest/post/sessions__reqParam_shopperReference) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | A unique reference to identify the shopper. Minimum length: three characters. | | [countryCode](https://docs.adyen.com/api-explorer/#/CheckoutService/latest/post/sessions__reqParam_countryCode) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's country/region. | | [billingAddress](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-billingAddress) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The postal address to be included on the invoice. | | [deliveryAddress](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-deliveryAddress) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The postal address where the goods will be shipped. | | [lineItems](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-lineItems) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Price and product information about the purchased items.   | | [telephoneNumber](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-telephoneNumber) | | The shopper's telephone number, if provided. | #### curl ```bash curl https://checkout-test.adyen.com/v69/sessions \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "amount":{ "value":1000, "currency":"AUD" }, "shopperName":{ "firstName":"Simon", "lastName":"Hopper" }, "shopperEmail":"s.hopper@example.com", "shopperReference":"YOUR_UNIQUE_SHOPPER_ID", "reference":"YOUR_ORDER_REFERENCE", "merchantAccount":"YOUR_MERCHANT_ACCOUNT", "returnUrl":"https://your-company.example.com/checkout?shopperOrder=12xy..", "countryCode":"AU", "telephoneNumber":"+61 2 8520 3890", "billingAddress":{ "city":"Sydney", "country":"AU", "houseNumberOrName":"123", "postalCode":"2000", "stateOrProvince":"NSW", "street":"Happy Street" }, "deliveryAddress":{ "city":"Sydney", "country":"AU", "houseNumberOrName":"123", "postalCode":"2000", "stateOrProvince":"NSW", "street":"Happy Street" }, "lineItems":[ { "description":"Shoes", "quantity":"1", "amountIncludingTax":"400", "amountExcludingTax": "331", "taxAmount": "69", "id":"Item #1" }, { "description":"Socks", "quantity":"2", "amountIncludingTax":"300", "amountExcludingTax": "248", "taxAmount": "52", "id":"Item #2" } ] }' ``` #### Java ```java // Adyen Java API Library v39.3.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.checkout.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.checkout.*; // For the LIVE environment, also include your liveEndpointUrlPrefix. Client client = new Client("ADYEN_API_KEY", Environment.TEST); // Create the request object(s) LineItem lineItem1 = new LineItem() .quantity(1L) .amountExcludingTax(331L) .description("Shoes") .id("Item #1") .amountIncludingTax(400L) .taxAmount(69L); LineItem lineItem2 = new LineItem() .quantity(2L) .amountExcludingTax(248L) .description("Socks") .id("Item #2") .amountIncludingTax(300L) .taxAmount(52L); Amount amount = new Amount() .currency("AUD") .value(1000L); Name name = new Name() .firstName("Simon") .lastName("Hopper"); DeliveryAddress deliveryAddress = new DeliveryAddress() .country("AU") .stateOrProvince("NSW") .city("Sydney") .houseNumberOrName("123") .street("Happy Street") .postalCode("2000"); BillingAddress billingAddress = new BillingAddress() .country("AU") .stateOrProvince("NSW") .city("Sydney") .houseNumberOrName("123") .street("Happy Street") .postalCode("2000"); CreateCheckoutSessionRequest createCheckoutSessionRequest = new CreateCheckoutSessionRequest() .reference("YOUR_ORDER_REFERENCE") .lineItems(Arrays.asList(lineItem1, lineItem2)) .amount(amount) .shopperName(name) .telephoneNumber("+61 2 8520 3890") .merchantAccount("YOUR_MERCHANT_ACCOUNT") .deliveryAddress(deliveryAddress) .countryCode("AU") .shopperEmail("s.hopper@example.com") .billingAddress(billingAddress) .returnUrl("https://your-company.example.com/checkout?shopperOrder=12xy..") .shopperReference("YOUR_UNIQUE_SHOPPER_ID"); // Send the request PaymentsApi service = new PaymentsApi(client); CreateCheckoutSessionResponse response = service.sessions(createCheckoutSessionRequest, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php setXApiKey("ADYEN_API_KEY"); // For the LIVE environment, also include your liveEndpointUrlPrefix. $client->setEnvironment(Environment::TEST); // Create the request object(s) $lineItem1 = new LineItem(); $lineItem1 ->setQuantity(1) ->setAmountExcludingTax(331) ->setDescription("Shoes") ->setId("Item #1") ->setAmountIncludingTax(400) ->setTaxAmount(69); $lineItem2 = new LineItem(); $lineItem2 ->setQuantity(2) ->setAmountExcludingTax(248) ->setDescription("Socks") ->setId("Item #2") ->setAmountIncludingTax(300) ->setTaxAmount(52); $amount = new Amount(); $amount ->setCurrency("AUD") ->setValue(1000); $name = new Name(); $name ->setFirstName("Simon") ->setLastName("Hopper"); $deliveryAddress = new DeliveryAddress(); $deliveryAddress ->setCountry("AU") ->setStateOrProvince("NSW") ->setCity("Sydney") ->setHouseNumberOrName("123") ->setStreet("Happy Street") ->setPostalCode("2000"); $billingAddress = new BillingAddress(); $billingAddress ->setCountry("AU") ->setStateOrProvince("NSW") ->setCity("Sydney") ->setHouseNumberOrName("123") ->setStreet("Happy Street") ->setPostalCode("2000"); $createCheckoutSessionRequest = new CreateCheckoutSessionRequest(); $createCheckoutSessionRequest ->setReference("YOUR_ORDER_REFERENCE") ->setLineItems(array($lineItem1, $lineItem2)) ->setAmount($amount) ->setShopperName($name) ->setTelephoneNumber("+61 2 8520 3890") ->setMerchantAccount("YOUR_MERCHANT_ACCOUNT") ->setDeliveryAddress($deliveryAddress) ->setCountryCode("AU") ->setShopperEmail("s.hopper@example.com") ->setBillingAddress($billingAddress) ->setReturnUrl("https://your-company.example.com/checkout?shopperOrder=12xy..") ->setShopperReference("YOUR_UNIQUE_SHOPPER_ID"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new PaymentsApi($client); $response = $service->sessions($createCheckoutSessionRequest, $requestOptions); ``` #### C\# ```cs // Adyen .net API Library v32.1.1 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Checkout; using Adyen.Service.Checkout; // For the LIVE environment, also include your liveEndpointUrlPrefix. var config = new Config() { XApiKey = "ADYEN_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) LineItem lineItem1 = new LineItem { Quantity = 1, AmountExcludingTax = 331, Description = "Shoes", Id = "Item #1", AmountIncludingTax = 400, TaxAmount = 69 }; LineItem lineItem2 = new LineItem { Quantity = 2, AmountExcludingTax = 248, Description = "Socks", Id = "Item #2", AmountIncludingTax = 300, TaxAmount = 52 }; Amount amount = new Amount { Currency = "AUD", Value = 1000 }; Name name = new Name { FirstName = "Simon", LastName = "Hopper" }; DeliveryAddress deliveryAddress = new DeliveryAddress { Country = "AU", StateOrProvince = "NSW", City = "Sydney", HouseNumberOrName = "123", Street = "Happy Street", PostalCode = "2000" }; BillingAddress billingAddress = new BillingAddress { Country = "AU", StateOrProvince = "NSW", City = "Sydney", HouseNumberOrName = "123", Street = "Happy Street", PostalCode = "2000" }; CreateCheckoutSessionRequest createCheckoutSessionRequest = new CreateCheckoutSessionRequest { Reference = "YOUR_ORDER_REFERENCE", LineItems = new List{ lineItem1, lineItem2 }, Amount = amount, ShopperName = name, TelephoneNumber = "+61 2 8520 3890", MerchantAccount = "YOUR_MERCHANT_ACCOUNT", DeliveryAddress = deliveryAddress, CountryCode = "AU", ShopperEmail = "s.hopper@example.com", BillingAddress = billingAddress, ReturnUrl = "https://your-company.example.com/checkout?shopperOrder=12xy..", ShopperReference = "YOUR_UNIQUE_SHOPPER_ID" }; // Send the request var service = new PaymentsService(client); var response = service.Sessions(createCheckoutSessionRequest, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v29.0.0 const { Client, CheckoutAPI } = require('@adyen/api-library'); // For the LIVE environment, also include your liveEndpointUrlPrefix. const config = new Config({ apiKey: "ADYEN_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const createCheckoutSessionRequest = { amount: { value: 1000, currency: "AUD" }, shopperName: { firstName: "Simon", lastName: "Hopper" }, shopperEmail: "s.hopper@example.com", shopperReference: "YOUR_UNIQUE_SHOPPER_ID", reference: "YOUR_ORDER_REFERENCE", merchantAccount: "YOUR_MERCHANT_ACCOUNT", returnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy..", countryCode: "AU", telephoneNumber: "+61 2 8520 3890", billingAddress: { city: "Sydney", country: "AU", houseNumberOrName: "123", postalCode: "2000", stateOrProvince: "NSW", street: "Happy Street" }, deliveryAddress: { city: "Sydney", country: "AU", houseNumberOrName: "123", postalCode: "2000", stateOrProvince: "NSW", street: "Happy Street" }, lineItems: [ { description: "Shoes", quantity: "1", amountIncludingTax: "400", amountExcludingTax: "331", taxAmount: "69", id: "Item #1" }, { description: "Socks", quantity: "2", amountIncludingTax: "300", amountExcludingTax: "248", taxAmount: "52", id: "Item #2" } ] } // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.sessions(createCheckoutSessionRequest, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.0.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/checkout" ) // For the LIVE environment, also include your liveEndpointUrlPrefix. client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) lineItem1 := checkout.LineItem{ Quantity: common.PtrInt64(1), AmountExcludingTax: common.PtrInt64(331), Description: common.PtrString("Shoes"), Id: common.PtrString("Item #1"), AmountIncludingTax: common.PtrInt64(400), TaxAmount: common.PtrInt64(69), } lineItem2 := checkout.LineItem{ Quantity: common.PtrInt64(2), AmountExcludingTax: common.PtrInt64(248), Description: common.PtrString("Socks"), Id: common.PtrString("Item #2"), AmountIncludingTax: common.PtrInt64(300), TaxAmount: common.PtrInt64(52), } amount := checkout.Amount{ Currency: "AUD", Value: 1000, } name := checkout.Name{ FirstName: "Simon", LastName: "Hopper", } deliveryAddress := checkout.DeliveryAddress{ Country: "AU", StateOrProvince: common.PtrString("NSW"), City: "Sydney", HouseNumberOrName: "123", Street: "Happy Street", PostalCode: "2000", } billingAddress := checkout.BillingAddress{ Country: "AU", StateOrProvince: common.PtrString("NSW"), City: "Sydney", HouseNumberOrName: "123", Street: "Happy Street", PostalCode: "2000", } createCheckoutSessionRequest := checkout.CreateCheckoutSessionRequest{ Reference: "YOUR_ORDER_REFERENCE", LineItems: []checkout.LineItem{ lineItem1, lineItem2, }, Amount: amount, ShopperName: &name, TelephoneNumber: common.PtrString("+61 2 8520 3890"), MerchantAccount: "YOUR_MERCHANT_ACCOUNT", DeliveryAddress: &deliveryAddress, CountryCode: common.PtrString("AU"), ShopperEmail: common.PtrString("s.hopper@example.com"), BillingAddress: &billingAddress, ReturnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy..", ShopperReference: common.PtrString("YOUR_UNIQUE_SHOPPER_ID"), } // Send the request service := client.Checkout() req := service.PaymentsApi.SessionsInput().IdempotencyKey("UUID").CreateCheckoutSessionRequest(createCheckoutSessionRequest) res, httpRes, err := service.PaymentsApi.Sessions(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v13.6.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_API_KEY" # For the LIVE environment, also include your liveEndpointUrlPrefix. adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "amount": { "value": 1000, "currency": "AUD" }, "shopperName": { "firstName": "Simon", "lastName": "Hopper" }, "shopperEmail": "s.hopper@example.com", "shopperReference": "YOUR_UNIQUE_SHOPPER_ID", "reference": "YOUR_ORDER_REFERENCE", "merchantAccount": "YOUR_MERCHANT_ACCOUNT", "returnUrl": "https://your-company.example.com/checkout?shopperOrder=12xy..", "countryCode": "AU", "telephoneNumber": "+61 2 8520 3890", "billingAddress": { "city": "Sydney", "country": "AU", "houseNumberOrName": "123", "postalCode": "2000", "stateOrProvince": "NSW", "street": "Happy Street" }, "deliveryAddress": { "city": "Sydney", "country": "AU", "houseNumberOrName": "123", "postalCode": "2000", "stateOrProvince": "NSW", "street": "Happy Street" }, "lineItems": [ { "description": "Shoes", "quantity": "1", "amountIncludingTax": "400", "amountExcludingTax": "331", "taxAmount": "69", "id": "Item #1" }, { "description": "Socks", "quantity": "2", "amountIncludingTax": "300", "amountExcludingTax": "248", "taxAmount": "52", "id": "Item #2" } ] } # Send the request result = adyen.checkout.payments_api.sessions(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v10.4.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_API_KEY' # For the LIVE environment, also include your liveEndpointUrlPrefix. adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :amount => { :value => 1000, :currency => 'AUD' }, :shopperName => { :firstName => 'Simon', :lastName => 'Hopper' }, :shopperEmail => 's.hopper@example.com', :shopperReference => 'YOUR_UNIQUE_SHOPPER_ID', :reference => 'YOUR_ORDER_REFERENCE', :merchantAccount => 'YOUR_MERCHANT_ACCOUNT', :returnUrl => 'https://your-company.example.com/checkout?shopperOrder=12xy..', :countryCode => 'AU', :telephoneNumber => '+61 2 8520 3890', :billingAddress => { :city => 'Sydney', :country => 'AU', :houseNumberOrName => '123', :postalCode => '2000', :stateOrProvince => 'NSW', :street => 'Happy Street' }, :deliveryAddress => { :city => 'Sydney', :country => 'AU', :houseNumberOrName => '123', :postalCode => '2000', :stateOrProvince => 'NSW', :street => 'Happy Street' }, :lineItems => [ { :description => 'Shoes', :quantity => '1', :amountIncludingTax => '400', :amountExcludingTax => '331', :taxAmount => '69', :id => 'Item #1' }, { :description => 'Socks', :quantity => '2', :amountIncludingTax => '300', :amountExcludingTax => '248', :taxAmount => '52', :id => 'Item #2' } ] } # Send the request result = adyen.checkout.payments_api.sessions(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v29.0.0 import { Client, CheckoutAPI, Types } from "@adyen/api-library"; // For the LIVE environment, also include your liveEndpointUrlPrefix. const config = new Config({ apiKey: "ADYEN_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const lineItem1: Types.checkout.LineItem = { quantity: 1, amountExcludingTax: 331, description: "Shoes", id: "Item #1", amountIncludingTax: 400, taxAmount: 69 }; const lineItem2: Types.checkout.LineItem = { quantity: 2, amountExcludingTax: 248, description: "Socks", id: "Item #2", amountIncludingTax: 300, taxAmount: 52 }; const amount: Types.checkout.Amount = { currency: "AUD", value: 1000 }; const name: Types.checkout.Name = { firstName: "Simon", lastName: "Hopper" }; const deliveryAddress: Types.checkout.DeliveryAddress = { country: "AU", stateOrProvince: "NSW", city: "Sydney", houseNumberOrName: "123", street: "Happy Street", postalCode: "2000" }; const billingAddress: Types.checkout.BillingAddress = { country: "AU", stateOrProvince: "NSW", city: "Sydney", houseNumberOrName: "123", street: "Happy Street", postalCode: "2000" }; const createCheckoutSessionRequest: Types.checkout.CreateCheckoutSessionRequest = { reference: "YOUR_ORDER_REFERENCE", lineItems: [lineItem1, lineItem2], amount: amount, shopperName: name, telephoneNumber: "+61 2 8520 3890", merchantAccount: "YOUR_MERCHANT_ACCOUNT", deliveryAddress: deliveryAddress, countryCode: "AU", shopperEmail: "s.hopper@example.com", billingAddress: billingAddress, returnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy..", shopperReference: "YOUR_UNIQUE_SHOPPER_ID" }; // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.sessions(createCheckoutSessionRequest, { idempotencyKey: "UUID" }); ``` ### Tab: `/payments` If you implemented an [additional use case](/online-payments/build-your-integration). | Parameter name | Required | Description | | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | | [shopperName](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-shopperName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's full name. | | [shopperEmail](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-shopperEmail) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's email address. | | [shopperReference](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-shopperReference) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | A unique reference to identify the shopper. Minimum length: three characters. | | [countryCode](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-countryCode) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's country/region. | | [billingAddress](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-billingAddress) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The postal address to be included on the invoice. | | [deliveryAddress](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-deliveryAddress) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The postal address where the goods will be shipped. | | [lineItems](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-lineItems) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Price and product information about the purchased items.  | | [telephoneNumber](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-telephoneNumber) | | The shopper's telephone number, if provided. | #### curl ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "paymentMethod":{ "type":"afterpaytouch" }, "amount":{ "value":1000, "currency":"AUD" }, "shopperName":{ "firstName":"Simon", "lastName":"Hopper" }, "shopperEmail":"s.hopper@example.com", "shopperReference":"YOUR_UNIQUE_SHOPPER_ID", "reference":"YOUR_ORDER_REFERENCE", "merchantAccount":"YOUR_MERCHANT_ACCOUNT", "returnUrl":"https://your-company.example.com/checkout?shopperOrder=12xy..", "countryCode":"AU", "telephoneNumber":"+61 2 8520 3890", "billingAddress":{ "city":"Sydney", "country":"AU", "houseNumberOrName":"123", "postalCode":"2000", "stateOrProvince":"NSW", "street":"Happy Street" }, "deliveryAddress":{ "city":"Sydney", "country":"AU", "houseNumberOrName":"123", "postalCode":"2000", "stateOrProvince":"NSW", "street":"Happy Street" }, "lineItems":[ { "description":"Shoes", "quantity":"1", "amountIncludingTax":"400", "amountExcludingTax": "331", "taxAmount": "69", "id":"Item #1" }, { "description":"Socks", "quantity":"2", "amountIncludingTax":"300", "amountExcludingTax": "248", "taxAmount": "52", "id":"Item #2" } ] }' ``` #### Java ```java // Set ADYEN_API_KEY with the API key from the Customer Area. // Change to Environment.LIVE and add the Live URL prefix when you are ready to accept live payments. Client client = new Client("ADYEN_API_KEY", Environment.TEST); Checkout checkout = new Checkout(client); PaymentsRequest paymentsRequest = new PaymentsRequest(); String merchantAccount = "YOUR_MERCHANT_ACCOUNT"; paymentsRequest.setMerchantAccount(merchantAccount); Amount amount = new Amount(); amount.setCurrency("AUD"); amount.setValue(1000L); paymentsRequest.setAmount(amount); DefaultPaymentMethodDetails paymentMethodDetails = new DefaultPaymentMethodDetails(); paymentMethodDetails.setType("afterpaytouch"); paymentsRequest.setPaymentMethod(paymentMethodDetails); paymentsRequest.setReference("YOUR_ORDER_NUMBER"); paymentsRequest.setReturnUrl("https://your-company.example.com/checkout?shopperOrder=12xy.."); Name shopperDetails = new Name(); shopperDetails.setFirstName("Simon"); shopperDetails.setLastName("Hopper"); paymentsRequest.setShopperName(shopperDetails); paymentsRequest.setShopperReference("YOUR_UNIQUE_SHOPPER_ID"); paymentsRequest.setCountryCode("AU"); paymentsRequest.setTelephoneNumber("+61 2 8520 3890"); paymentsRequest.setShopperEmail("s.hopper@example.com"); BillingAddress billingAddress = new BillingAddress(); billingAddress.setCountry("AU"); billingAddress.setCity("Sydney"); billingAddress.setHouseNumberOrName("123"); billingAddress.setStreet("Happy Street"); billingAddress.setPostalCode("2000"); billingAddress.setStateOrProvince("NSW"); paymentsRequest.setBillingAddress(billingAddress); DeliveryAddress deliveryAddress = new DeliveryAddress(); deliveryAddress.setCountry("AU"); deliveryAddress.setCity("Sydney"); deliveryAddress.setHouseNumberOrName("123"); deliveryAddress.setStreet("Happy Street"); deliveryAddress.setPostalCode("2000"); deliveryAddress.setStateOrProvince("NSW"); paymentsRequest.setDeliveryAddress(deliveryAddress); List lineItems = new ArrayList<>(); lineItems.add( new LineItem() .quantity(1L) .description("Shoes") .id("Item #1") .amountIncludingTax(400L) .amountExcludingTax(331L) .taxAmount(69L) ); lineItems.add( new LineItem() .quantity(2L) .description("Socks") .id("Item #2") .amountIncludingTax(300L) .amountExcludingTax(248L) .taxAmount(52L) ); paymentsRequest.setLineItems(lineItems); PaymentsResponse paymentsResponse = checkout.payments(paymentsRequest); ``` #### PHP ```php // Set your X-API-KEY with the API key from the Customer Area. $client = new \Adyen\Client(); $client->setXApiKey("ADYEN_API_KEY"); $service = new \Adyen\Service\Checkout($client); $params = [ "merchantAccount" => "YOUR_MERCHANT_ACCOUNT", "reference" => "YOUR_ORDER_NUMBER", "amount" => [ "currency" => "AUD", "value" => 1000 ], "paymentMethod" => [ "type" => "afterpaytouch" ], "returnUrl" => "https://your-company.example.com/checkout?shopperOrder=12xy..", "countryCode" => "AU", "shopperName" => [ "firstName" => "Simon", "lastName" => "Hopper" ], "shopperEmail" => "s.hopper@example.com", "shopperReference" => "YOUR_UNIQUE_SHOPPER_ID", "telephoneNumber" => "+61 2 8520 3890", "billingAddress" => [ "city" => "Sydney", "country" => "AU", "houseNumberOrName" => "123", "postalCode" => "2000", "stateOrProvince" => "NSW", "street" => "Happy Street" ], "deliveryAddress" => [ "city" => "Sydney", "country" => "AU", "houseNumberOrName" => "123", "postalCode" => "2000", "stateOrProvince" => "NSW", "street" => "Happy Street" ], "lineItems" => [ [ "description" => "Shoes", "quantity" => "1", "amountIncludingTax" => "400", "amountExcludingTax" => "331", "taxAmount" => "69", "id" => "Item #1" ], [ "description" => "Socks", "quantity" => "2", "amountIncludingTax" => "300", "amountExcludingTax" => "248", "taxAmount" => "52", "id" => "Item #2" ] ] ]; $result = $service->payments($params); ``` #### C\# ```cs // Set your X-API-KEY with the API key from the Customer Area. var client = new Client ("ADYEN_API_KEY", Environment.Test); var checkout = new Checkout(client); var paymentsRequest = new Adyen.Model.Checkout.PaymentRequest { MerchantAccount = "YOUR_MERCHANT_ACCOUNT", Reference = "YOUR_ORDER_REFERENCE", PaymentMethod = new DefaultPaymentMethodDetails { Type = "afterpaytouch" }, Amount = new Adyen.Model.Checkout.Amount(currency: "AUD", value: 1000), CountryCode = "AU", TelephoneNumber = "+61 2 8520 3890", ShopperEmail = "s.hopper@example.com", ShopperName = new Adyen.Model.Checkout.Name { FirstName = "Simon", LastName = "Hopper" }, ShopperReference = "YOUR_UNIQUE_SHOPPER_ID", BillingAddress = new Adyen.Model.Checkout.Address { City = "Sydney", Country = "AU", HouseNumberOrName = "123", PostalCode = "2000", StateOrProvince = "NSW", Street = "Happy Street" }, DeliveryAddress = new Adyen.Model.Checkout.Address { City = "Sydney", Country = "AU", HouseNumberOrName = "123", PostalCode = "2000", StateOrProvince = "NSW", Street = "Happy Street" }, ReturnUrl = "https://your-company.example.com/checkout?shopperOrder=12xy..", LineItems = new List { new LineItem(quantity:1, description: "Shoes", id: "Item #1", amountIncludingTax: 400, amountExcludingTax: 331, taxAmount: 69), new LineItem(quantity:2, description: "Socks", id: "Item #2", amountIncludingTax: 300, amountExcludingTax: 248, taxAmount: 52) } }; ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v16.1.0 // Require the parts of the module you want to use const { Client, CheckoutAPI } = require('@adyen/api-library'); // Initialize the client object const client = new Client({apiKey: "YOUR_X_API_KEY", environment: "TEST"}); // Create the request object const paymentRequest = { paymentMethod: { type: "afterpaytouch" }, amount: { value: 1000, currency: "AUD" }, shopperName: { firstName: "Simon", lastName: "Hopper" }, shopperEmail: "s.hopper@example.com", shopperReference: "YOUR_UNIQUE_SHOPPER_ID", reference: "YOUR_ORDER_REFERENCE", merchantAccount: "YOUR_MERCHANT_ACCOUNT", returnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy..", countryCode: "AU", telephoneNumber: "+61 2 8520 3890", billingAddress: { city: "Sydney", country: "AU", houseNumberOrName: "123", postalCode: "2000", stateOrProvince: "NSW", street: "Happy Street" }, deliveryAddress: { city: "Sydney", country: "AU", houseNumberOrName: "123", postalCode: "2000", stateOrProvince: "NSW", street: "Happy Street" }, lineItems: [ { description: "Shoes", quantity: "1", amountIncludingTax: "400", amountExcludingTax: "331", taxAmount: "69", id: "Item #1" }, { description: "Socks", quantity: "2", amountIncludingTax: "300", amountExcludingTax: "248", taxAmount: "52", id: "Item #2" } ] } // Make the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" }); ``` #### Python ```py # Adyen Python API Library v12.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "YOUR_X_API_KEY" adyen.client.platform = "test" # The environment to use library in. json_request = { "paymentMethod": { "type": "afterpaytouch" }, "amount": { "value": 1000, "currency": "AUD" }, "shopperName": { "firstName": "Simon", "lastName": "Hopper" }, "shopperEmail": "s.hopper@example.com", "shopperReference": "YOUR_UNIQUE_SHOPPER_ID", "reference": "YOUR_ORDER_REFERENCE", "merchantAccount": "YOUR_MERCHANT_ACCOUNT", "returnUrl": "https://your-company.example.com/checkout?shopperOrder=12xy..", "countryCode": "AU", "telephoneNumber": "+61 2 8520 3890", "billingAddress": { "city": "Sydney", "country": "AU", "houseNumberOrName": "123", "postalCode": "2000", "stateOrProvince": "NSW", "street": "Happy Street" }, "deliveryAddress": { "city": "Sydney", "country": "AU", "houseNumberOrName": "123", "postalCode": "2000", "stateOrProvince": "NSW", "street": "Happy Street" }, "lineItems": [ { "description": "Shoes", "quantity": "1", "amountIncludingTax": "400", "amountExcludingTax": "331", "taxAmount": "69", "id": "Item #1" }, { "description": "Socks", "quantity": "2", "amountIncludingTax": "300", "amountExcludingTax": "248", "taxAmount": "52", "id": "Item #2" } ] } result = adyen.checkout.payments_api.payments(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v9.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'YOUR_X_API_KEY' adyen.env = :test # Set to "live" for live environment request_body = { :paymentMethod => { :type => 'afterpaytouch' }, :amount => { :value => 1000, :currency => 'AUD' }, :shopperName => { :firstName => 'Simon', :lastName => 'Hopper' }, :shopperEmail => 's.hopper@example.com', :shopperReference => 'YOUR_UNIQUE_SHOPPER_ID', :reference => 'YOUR_ORDER_REFERENCE', :merchantAccount => 'YOUR_MERCHANT_ACCOUNT', :returnUrl => 'https://your-company.example.com/checkout?shopperOrder=12xy..', :countryCode => 'AU', :telephoneNumber => '+61 2 8520 3890', :billingAddress => { :city => 'Sydney', :country => 'AU', :houseNumberOrName => '123', :postalCode => '2000', :stateOrProvince => 'NSW', :street => 'Happy Street' }, :deliveryAddress => { :city => 'Sydney', :country => 'AU', :houseNumberOrName => '123', :postalCode => '2000', :stateOrProvince => 'NSW', :street => 'Happy Street' }, :lineItems => [ { :description => 'Shoes', :quantity => '1', :amountIncludingTax => '400', :amountExcludingTax => '331', :taxAmount => '69', :id => 'Item #1' }, { :description => 'Socks', :quantity => '2', :amountIncludingTax => '300', :amountExcludingTax => '248', :taxAmount => '52', :id => 'Item #2' } ] } result = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` ### Pre-filled shopper data You can add configuration with the shopper's company and personal information to pre-fill the payment form. The `data` property includes the following information that you can pre-fill: | Property | Description | Data type | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | --------- | | `companyDetails.name` | The registered name of the company. | String | | `companyDetails.registrationNumber` | The official business registration number. | String | | `personalDetails.firstName` | The shopper's first name. | String | | `personalDetails.lastName` | The shopper's last name. | String | | `personalDetails.shopperEmail` | The shoppers' email address. | String | | `billingAddress.street` | The street name for the billing address. | String | | `billingAddress.houseNumberOrName` | The house number or name for the billing address. | String | | `billingAddress.postalCode` | The postal code for the billing address. | String | | `billingAddress.city` | The city for the billing address. | String | | `billingAddress.country` | The two-character [ISO 3166-1 alpha-2 country code](https://www.iso.org/iso-3166-country-codes.html) for the billing address. | String | | `deliveryAddress.street` | The street name for the delivery address. | String | | `deliveryAddress.postalCode` | The postal code for the delivery address. | String | | `deliveryAddress.city` | The city for the delivery address. | String | | `deliveryAddress.country` | The two-character [ISO 3166-1 alpha-2 country code](https://www.iso.org/iso-3166-country-codes.html) for the delivery address. | String | **Example of pre-filled data for Afterpay** ```ts const preFilledData = { companyDetails: { name: "Adyen B.V.", registrationNumber: "34259528", }, personalDetails: { firstName: "John", lastName: "Doe", shopperEmail: "john.doe@adyen.com", }, billingAddress: { street: "Simon Carmiggeltstraat", houseNumberOrName: "6", postalCode: "1011 DJ", city: "Amsterdam", country: "NL", }, deliveryAddress: { street: "Simon Carmiggeltstraat", houseNumberOrName: "6", postalCode: "1011 DJ", city: "Amsterdam", country: "NL", } } ``` If you do not have pre-filled data, you can instead get the information from the shopper in the payment form. ### Payment form fields configuration In the payment form, you can configure if groups of fields are visible or can be edited by the shopper. Use the `visibility` property to configure groups of fields with the possible values: * **hidden**: The fields do not show up in the payment form. * **readOnly**: The fields show up in the payment form with the pre-filled values. The shopper cannot change the values. If you set any group of fields with this value, you must provide the corresponding information in the pre-filled object. * **editable**: The fields show up in the payment form with the pre-filled values. The shopper can change the values. | Fields | Default value | | ----------------- | ------------- | | `companyDetails` | **editable** | | `personalDetails` | **editable** | | `billingAddress` | **editable** | | `deliveryAddress` | **editable** | **Example of Afterpay configuration object with default visibility values** ```ts afterpay: { data: preFilledData, visibility: { companyDetails: "editable", personalDetails: "editable", billingAddress: "editable", deliveryAddress: "editable" } }; ``` ## Import Afterpay ### v6.0.0 or later When you import Adyen Web, include `Redirect`. **Import** ```javascript import { AdyenCheckout, Redirect } from '@adyen/adyen-web'; ``` ### v5.x.x or earlier When you import Adyen Web, include `Redirect`. **Import** ```javascript import { AdyenCheckout, Redirect } from '@adyen/adyen-web'; ``` ## Initialize the Component for Afterpay ### v6.0.0 or later To initialize Afterpay, use the `Redirect` class. **Initialize the Component** ```javascript const redirectComponent = new Redirect(checkout, { type: "afterpaytouch" }).mount('#redirect-container') ``` ### v5.x.x or earlier To initialize Afterpay, use the `Redirect` class. **Initialize the Component** ```javascript const redirectComponent = checkout.create('afterpaytouch', // The configuration object for Afterpay that you created. redirectConfiguration // Mount the Component to a container. ).mount('#redirect-container') ``` ## Capture the payment Depending on your merchant account configuration, Afterpay payments are captured automatically after authorisation, or manually captured. If you prefer to capture the payment after the goods have been sent, you need to set up a [capture delay](/online-payments/capture#delayed-automatic-capture) or use [manual capture](/online-payments/capture#capture-a-payment). To partially capture a payment, you also need to use manual capture. Afterpay payments have to be captured within 13 days after authorisation. During authorisation, the shopper is charged for the first installment. If the payment is not captured within 13 days, before the second installment, Afterpay cancels the payment and refunds the first installment to the shopper. For testing purposes, Afterpay authorisations expire in one day. When you use manual capture, you need to capture test Afterpay payments within one day after authorisation. ### Full or partial manual captures When you use manual capture, in your [/payments/{paymentPspReference}/captures](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/\(paymentPspReference\)/captures) request specify: * [amount.value](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/\(paymentPspReference\)/captures#request-amount-value): the full or partial amount that the shopper should pay. * [lineItems](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/\(paymentPspReference\)/captures#request-lineItems): (optional) price and product information for the items that the shopper should pay for. Any unclaimed amount that is left over after partially capturing a payment is automatically cancelled. When your account is enabled for *multiple* partial captures, the unclaimed amount after an initial capture is not automatically cancelled. To set up multiple partial captures, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other). Multiple partial captures will create a new invoice for each capture. ## Refunds and cancellations If a payment has not yet been captured, you can [cancel](/online-payments/cancel) it. If a payment has already been captured and you want to return the funds to the shopper, you need to [refund](/online-payments/refund) the payment. ### Full or partial refunds To fully or partially refund a payment, in your [/payments/{paymentPspReference}/refunds](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/\(paymentPspReference\)/refunds) request specify: * [amount.value](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/\(paymentPspReference\)/refunds#request-amount-value): the full or partial amount to be refunded to the shopper. * [lineItems](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/\(paymentPspReference\)/refunds#request-lineItems): (optional) price and product information about the refunded items. ## Discounts To offer discounts, your payment request must include the negative amount to be added to the original price. The following example shows how to specify a discount of 1 AUD on Item #2: ```json { "amount":{ "value":800, "currency":"AUD" }, ... "lineItems":[ { "description":"Test Afterpay 1", "quantity":"1", "amountIncludingTax":"400", "id":"Item #1" }, { "description":"Test Afterpay 2", "quantity":"2", "amountIncludingTax":"300", "id":"Item #2" } { "description":"Discount", "quantity":"2", "amountIncludingTax":"-100", "id":"Item #2 Discount" } ] } ``` ## Test and go live To test Afterpay payments, you need a test shopper account in the Afterpay sandbox environment. If you are testing in multiple countries or regions, create a different test account for each. To create a test account: 1. Go to . 2. Enter a real email address and select **Continue**. You'll get confirmations of payments and refunds like any other shopper on this email address. 3. From the drop-down menu, select the country/region for which you want to create a test shopper account. Select **Australia**, **New Zealand**, **US**, or **Canada**. 4. Enter a unique mobile number in the correct format and select **Continue**. Ensure the number is not associated with an existing account to avoid being redirected to a login page. 5. When you are prompted to enter your SMS verification code, enter **111111**. 6. Follow the instructions on your screen to complete your profile, accept the terms and conditions, and select **Continue**. To test payments, add a test card to your Afterpay test shopper account. You can use the card details provided in the [Afterpay developer documentation](https://developers.afterpay.com/afterpay-online-developer/home), or use one of the Adyen [test cards](/development-resources/test-cards-and-credentials/test-card-numbers). Use CVV 000 to simulate authorised payments, or CVV 051 to simulate refused payments. You can check the status of test payments in your [Customer Area](https://ca-test.adyen.com/) > **Transactions** > **Payments**. Before you can accept live Afterpay payments, you need to [submit a request for Afterpay](/payment-methods/add-payment-methods) in your [live Customer Area](https://ca-live.adyen.com/). ## See also * [Web Components integration guide](/online-payments/components-web) * [Webhooks](/development-resources/webhooks) * [API Explorer](https://docs.adyen.com/api-explorer/#/CheckoutService/latest/overview)