--- title: "Alipay+ for API only" description: "Add Alipay+ to your API only integration." url: "https://docs.adyen.com/payment-methods/alipay-plus/api-only" source_url: "https://docs.adyen.com/payment-methods/alipay-plus/api-only.md" canonical: "https://docs.adyen.com/payment-methods/alipay-plus/api-only" last_modified: "2026-07-21T12:57:24+02:00" language: "en" --- # Alipay+ for API only Add Alipay+ to your API only integration. [View source](/payment-methods/alipay-plus/api-only.md) You can add Alipay+ to your existing integration. The following instructions show only what you must add to your integration specifically for Alipay+. If an instruction on this page corresponds with a step in the main integration guide, it includes a link to corresponding step of the main integration guide. ## Requirements | Requirement | Description | | | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | | **Integration type** | Make sure that you have an existing [API-only integration](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%20only). | | | **Redirect handling** | Make sure that your existing integration is set up to [handle the redirect](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%20only#handle-the-redirect). `action.type`: **redirect**. | | | **Setup steps** | Before you begin, [add Alipay+ in your Customer Area](/payment-methods/add-payment-methods). | | ## How it works 1. The shopper selects Alipay+ as payment method. 2. The shopper then selects their preferred wallet that is included with Alipay+. 3. The shopper enters their details in the [payment form that you build](#build-your-payment-form), if applicable. 4. When you make the payment request, you [include additional information about the items that the shopper intends to purchase](#additional-parameters-payments), if applicable. 5. Your existing integration setup will [handle the redirect](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%20only#handle-the-redirect). ## Build your payment form Include Alipay+ in the list of [available payment methods](#methods). You do not need to collect any additional information from the shopper in your payment form. You can [download the logo for Alipay+](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%2Bonly\&version=71#downloading-logos) to use in your form. ## Get Alipay+ as an available payment method When you make the [/paymentMethods](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods) to [get available payment methods](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%20only#get-available-payment-methods), specify the following so that Alipay+ is included in the response. | Parameter | Values | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [countryCode](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods#request-countryCode) | **AT**, **AU**, **BE**, **CA**, **CH**, **CN**, **CY**, **CZ**, **DE**, **DK**, **EE**, **ES**, **FI**, **FR**, **GB**, **GR**, **HK**, **HU**, **IE**, **IS**, **IT**, **JP**, **LI**, **LT**, **LU**, **LV**, **MT**, **MY**, **NL**, **NO**, **NZ**, **PL**, **PT**, **RO**, **SE**, **SG**, **SI**, **SK**, **US** | | [amount.currency](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods#request-amount-currency) | **AED**, **AUD**, **CAD**, **CHF**, **CNY**, **CZK**, **DKK**, **EUR**, **GBP**, **HKD**, **JPY**, **MYR**, **NOK**, **NZD**, **SEK**, **SGD**, **USD** | **Example request for available payment methods** #### curl ```bash curl https://checkout-test.adyen.com/v72/paymentMethods \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'idempotency-key: YOUR_IDEMPOTENCY_KEY' \ -H 'content-type: application/json' \ -X POST -d '{ "merchantAccount": "ADYEN_MERCHANT_ACCOUNT", "countryCode": "SG", "amount": { "currency": "SGD", "value": 1000 } }' ``` #### Java ```java // Adyen Java API Library v41.1.1 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) // Send the request PaymentsApi service = new PaymentsApi(client); PaymentMethodsResponse response = service.paymentMethods(paymentMethodsRequest, 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) $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new PaymentsApi($client); $response = $service->paymentMethods($paymentMethodsRequest, $requestOptions); ``` #### C\# ```cs // Adyen .NET API Library v34.0.2 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) // Send the request var service = new PaymentsService(client); var response = service.PaymentMethods(paymentMethodsRequest, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.1.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 paymentMethodsRequest = { merchantAccount: "ADYEN_MERCHANT_ACCOUNT", countryCode: "SG", amount: { currency: "SGD", value: 1000 } } // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.paymentMethods(paymentMethodsRequest, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.2.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) // Send the request service := client.Checkout() req := service.PaymentsApi.PaymentMethodsInput().IdempotencyKey("UUID").PaymentMethodsRequest(paymentMethodsRequest) res, httpRes, err := service.PaymentsApi.PaymentMethods(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v15.0.1 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 = { "merchantAccount": "ADYEN_MERCHANT_ACCOUNT", "countryCode": "SG", "amount": { "currency": "SGD", "value": 1000 } } # Send the request result = adyen.checkout.payments_api.payment_methods(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v11.2.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 = { :merchantAccount => 'ADYEN_MERCHANT_ACCOUNT', :countryCode => 'SG', :amount => { :currency => 'SGD', :value => 1000 } } # Send the request result = adyen.checkout.payments_api.payment_methods(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.1.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) // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.paymentMethods(paymentMethodsRequest, { idempotencyKey: "UUID" }); ``` **Example response with Alipay+ available** ```json { "paymentMethods": [ { "name": "Alipay+", "type": "alipay_plus" } ] } ``` ## Add additional parameters to your /payments request When you [make a payment](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%20only#make-a-payment), add the following additional parameters: | Parameter | Required | Description | | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | | [channel](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-channel) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to the applicable channel: **Web**, **iOS**, or **Android** | | [browserInfo](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-browserInfo) | | Information about the shopper's browser. Required when `channel` is **Web**. | **Example payment request for Alipay+** ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-API-key: ADYEN_API_KEY' \ -H 'idempotency-key: YOUR_IDEMPOTENCY_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "amount": { "currency": "SGD", "value": 1000 }, "paymentMethod": { "type": "alipay_plus" }, "channel": "web", "countryCode": "SG", "shopperLocale": "en-SG", "shopperEmail": "shopper@example.com", "merchantAccount": "ADYEN_MERCHANT_ACCOUNT", "shopperReference": "YOUR_SHOPPER_REFERENCE", "reference": "ORDER-12345", "returnUrl": "https://your-company.example.com/?shopperOrder=12xy..", "browserInfo": { "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1", "acceptHeader": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "language": "en-SG", "colorDepth": 32, "screenHeight": 844, "screenWidth": 390, "timeZoneOffset": -480, "javaEnabled": false, "javaScriptEnabled": true } }' ``` The response includes the `action.type`: **redirect**. **Example response with an additional action** ```json { "pspReference": "LXVKGQ9CWQ9FDR65", "resultCode": "RedirectShopper", "amount": { "currency": "SGD", "value": 1000 }, "merchantReference": "ORDER-12345", "paymentMethod": { "type": "alipay_plus" }, "action": { "method": "GET", "paymentMethodType": "alipay_plus", "type": "redirect", "url": "https://global.alipay.com/payment/initiate?token=eyJhbGciOiJSUzI1Ni..." } } ``` The shopper is redirected to the checkout page of Alipay+ where they select their wallet (for example GCash, KakaoPay, TrueMoney, DANA, AlipayHK, or one of the other available wallets). ## Handle the redirect After the shopper authenticates in their wallet they are redirected back to `returnUrl`. Adyen collects the redirect result value from `returnUrl`, for example: **Example returnUrl that contains the redirectResult value** ```json { "returnUrl": "https://your-website.com/checkout/return?redirectResult=eyJhbGciOiJSUzI1NiIsInR5cCI6Ik..." } ``` Adyen then sends the value of `redirectResult` in the [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) request: **Example /payments/details request** ```json { "details": { "redirectResult": "eyJhbGciOiJSUzI1NiIsInR5cCI6Ik..." }, "paymentData": "Ab02b4c0!BQABAgA..." } ``` * `paymentData` - contains the value from the original [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) response. (When using Drop-in or the sessions flow it is handled automatically.) **Example /payments/details response** ```json { "pspReference": "LXVKGQ9CWQ9FDR65", "resultCode": "Authorised", "amount": { "currency": "SGD", "value": 1000 }, "merchantReference": "ORDER-12345", "paymentMethod": { "type": "alipay_plus_gcash" }, "additionalData": { "paymentMethodVariant": "alipay_plus_gcash" } } ``` It is important to note that the value for `paymentMethod.type` is now **alipay\_plus\_gcash**, which reflects the specific wallet the shopper used (in this example, GCash). The original payment request used **alipay\_plus** (the generic aggregator type). The resolved `paymentMethod.type` is only known after the shopper authenticates in their selected wallet app. ## Webhook notification Adyen sends an AUTHORISATION notification after the payment is processed. The `paymentMethod` field in the notification reflects the actual wallet used, not the generic **alipay\_plus**. **Webhook notification** ```json { "live": "false", "notificationItems": [ { "NotificationRequestItem": { "eventCode": "AUTHORISATION", "success": "true", "pspReference": "LXVKGQ9CWQ9FDR65", "merchantReference": "ORDER-12345", "merchantAccountCode": "YOUR_MERCHANT_ACCOUNT", "paymentMethod": "alipay_plus_alipay_cn", "amount": { "currency": "SGD", "value": 1000 }, "eventDate": "2026-06-09T10:23:41+00:00", "reason": "", "additionalData": { "paymentMethodVariant": "alipay_plus_alipay_cn", "authCode": "093512", "avsResult": "0 Unknown" } } } ] } ``` ### The paymentMethod value for each wallet Alipay+ is a super-app aggregator that supports multiple wallets. For that reason, the `paymentMethod` value in the notification (and in the [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) response) is based on the shopper's wallet selection. | Wallet selected by shopper | Market | `paymentMethod` value | | -------------------------- | ----------- | ------------------------------- | | Alipay | China | **alipay\_plus\_alipay\_cn** | | AlipayHK | Hong Kong | **alipay\_plus\_alipay\_hk** | | DANA | Indonesia | **alipay\_plus\_dana** | | GCash | Philippines | **alipay\_plus\_gcash** | | Kakao Pay | South Korea | **alipay\_plus\_kakaopay** | | KPlus | Thailand | **alipay\_plus\_kplus** | | Naver Pay | South Korea | **alipay\_plus\_naverpay** | | Rabbit LINE Pay | Thailand | **alipay\_plus\_rabbitlinepay** | | Touch 'n Go eWallet | Malaysia | **alipay\_plus\_touchngo** | | Toss | South Korea | **alipay\_plus\_tosspay** | | TrueMoney | Thailand | **alipay\_plus\_truemoney** | Initial [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) requests always use **alipay\_plus** (the generic type). The resolved wallet-specific type only appears in the notification and in the [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) response, after the shopper completed authentication in their selected wallet app. ## Key implementation notes Make sure that your implementation adheres to the following: * Initiate a payment with **alipay\_plus**. Always send `paymentMethod.type`: **alipay\_plus** in [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments). Do not attempt to pre-select a specific wallet via the `paymentMethod.type` parameter. * Monitor notifications by wallet type. Use `paymentMethod` in the webhook to identify revenue per wallet. This is useful for reporting and reconciliation. * Alipay+ uses the redirect flow. Your frontend must call [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) and include the `redirectResult` after the shopper returns. * Tokenization (`storePaymentMethod`: **true**) is not currently supported for Alipay+. Requests with this parameter set to **true** will fail validation. * Always send `browserInfo` when `channel` is set to **Web**. ### How to use channel and browserInfo Adyen uses `channel` and `browserInfo.userAgent` to determine the shopper's platform context, which controls which wallet entry points are available during the redirect. The shopper contexts are: | Context | Typical scenario | | ---------------- | -------------------------------------------- | | Desktop browser | `channel`: **Web** with a desktop user agent | | Mobile browser | `channel`: **Web** with a mobile user agent | | In-app (webview) | `channel`: **iOS** or `channel`: **Android** | Alipay+ uses the redirect flow. When `channel` is set to **iOS** or **Android**, Adyen redirects the shopper to a mobile-optimized hosted page that attempts to deep-link or auto-switch into the wallet app, if supported. There is no native SDK integration. If you send the incorrect channel value - for example, you send **Web** for an in-app webview - it can result in the shopper being offered an incompatible redirect experience. For `browserInfo`, use values collected from the shopper's browser at the time of checkout. For native iOS and Android apps: * `channel` - set to **iOS** or **Android**, not **Web** * `browserInfo` - not required ## Test and go live There is no test environment for Alipay+. We recommend doing live penny tests: 1. Get an Alipay+ wallet app, set it up with a credit or debit card, and do live penny tests (payments for a minimal amount). 2. View the details of your Alipay+ test payments in your [live Customer Area](https://ca-live.adyen.com/) > **Payments** > **Payment list**. Before you can accept live Alipay+ payments, you need to submit a request for Alipay in your [live Customer Area](https://ca-live.adyen.com/). ## See also * [API-only integration guide](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%20only)