---
title: "GrabPay Drop-in integration"
description: "Add GrabPay to your Drop-in integration."
url: "https://docs.adyen.com/payment-methods/grabpay/android-drop-in"
source_url: "https://docs.adyen.com/payment-methods/grabpay/android-drop-in.md"
canonical: "https://docs.adyen.com/payment-methods/grabpay/android-drop-in"
last_modified: "2026-06-01T15:33:15+02:00"
language: "en"
---

# GrabPay Drop-in integration

Add GrabPay to your Drop-in integration.

[View source](/payment-methods/grabpay/android-drop-in.md)

**If you are using Android Drop-in v5.0.0 or later:**

This payment method requires no additional configuration.

Follow the [Drop-in integration guide](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Drop-in).

Our [Android Drop-in](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Drop-in) renders GrabPay in your payment form, and redirects the shopper to GrabPay to complete the payment.

## Requirements

| Requirement          | Description                                                                                                                                                                 |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Integration type** | Make sure that you have built an Advanced flow [Android Drop-in integration](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Drop-in). |
| **Setup steps**      | Before you begin, [add GrabPay in your Customer Area](/payment-methods/add-payment-methods).                                                                                |

## Show GrabPay in your payment form

Drop-in uses the `countryCode` and the `amount.currency` from your [/paymentMethods](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods) request to show the available payment methods to your shopper.

To show GrabPay in your payment form, specify in your [/paymentMethods](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods) request:

| Country/region                  | [countryCode](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods) | [amount.currency](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods#request-amount) |
| ------------------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| Malaysia                        | MY                                                                                     | MYR                                                                                                       |
| Singapore                       | SG                                                                                     | SGD                                                                                                       |
| Philippines[ 1](#not-available) | PH                                                                                     | PHP                                                                                                       |

[]()1 GrabPay PayLater is not available in Philippines.

The response contains the corresponding `paymentMethod.type` **grabpay\_XX** where *XX* is the country code.

### Collect additional information in your payment form

Collecting additional information is only needed for GrabPay PayLater payments. However, we highly recommend collecting this information in your initial integration for GrabPay Wallet because it will help save development resources if you plan to enable GrabPay PayLater afterwards.

Collect the following details from the shopper:

* [deliveryAddress](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-deliveryAddress): The address where the purchased goods should be delivered, including the country, city, street, house number, and postal code.
* [lineItems](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-lineItems): Price and product information about the purchased items, to be included on the invoice sent to the shopper.

Pass the collected data to your server because you will need it when [making a payment](#make-a-payment). This information will be used by GrabPay to perform risk checks.

## Make a payment

When the shopper proceeds to pay, Drop-in returns the `paymentComponentData.paymentMethod`. Depending on the type of GrabPay payment, Wallet or PayLater, you need to provide different parameters in the [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request.

### Tab: Wallet

To make a regular Wallet payment:

1. Pass the `paymentComponentData.paymentMethod` to your server.

2. From your server, make a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request, specifying:

   * [paymentMethod](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-paymentMethod): The `paymentComponentData.paymentMethod` from your client app.
   * [returnUrl](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-returnUrl): URL to where the shopper should be redirected back to after they complete the payment. Get this URL from the Component in the `RedirectComponent.getReturnUrl(context)`.
   * [reference](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-reference): Your unique reference for this payment. Maximum length of 32 characters. Only alphanumeric characters, dashes and underscores are allowed.
   * [amount](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200-amount): The amount that the shopper needs to pay.

   #### curl

   ```bash
   curl https://checkout-test.adyen.com/v68/payments \
   -H 'x-api-key: ADYEN_API_KEY' \
   -H 'content-type: application/json' \
   -d '{
        "amount": {
          "currency": "SGD",
          "value": 1000
        },
        "reference": "YOUR_ORDER_REFERENCE",
        "paymentMethod": {
          "type": "grabpay_SG"
        },
        "returnUrl": "https://your-company.example.com/checkout?shopperOrder=12xy..",
        "merchantAccount": "ADYEN_MERCHANT_ACCOUNT"
   }'
   ```

   #### Java

   ```java
   // Adyen Java API Library v27.0.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, additionally include your liveEndpointUrlPrefix.
   Client client = new Client("ADYEN_API_KEY", Environment.TEST);

   // Create the request object(s)
   Amount amount = new Amount()
     .currency("SGD")
     .value(1000L);

   StoredPaymentMethodDetails storedPaymentMethodDetails = new StoredPaymentMethodDetails()
     .type(StoredPaymentMethodDetails.TypeEnum.GRABPAY_SG);

   PaymentRequest paymentRequest = new PaymentRequest()
     .reference("YOUR_ORDER_REFERENCE")
     .amount(amount)
     .merchantAccount("ADYEN_MERCHANT_ACCOUNT")
     .paymentMethod(new CheckoutPaymentMethod(storedPaymentMethodDetails))
     .returnUrl("https://your-company.example.com/checkout?shopperOrder=12xy..");

   // Send the request
   PaymentsApi service = new PaymentsApi(client);
   PaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey("UUID"));
   ```

   #### PHP

   ```php
   // Adyen PHP API Library v19.0.0
   use Adyen\Client;
   use Adyen\Environment;
   use Adyen\Model\Checkout\Amount;
   use Adyen\Model\Checkout\CheckoutPaymentMethod;
   use Adyen\Model\Checkout\PaymentRequest;
   use Adyen\Service\Checkout\PaymentsApi;

   $client = new Client();
   $client->setXApiKey("ADYEN_API_KEY");
   // For the live environment, additionally include your liveEndpointUrlPrefix.
   $client->setEnvironment(Environment::TEST);


   // Create the request object(s)
   $amount = new Amount();
   $amount
     ->setCurrency("SGD")
     ->setValue(1000);

   $checkoutPaymentMethod = new CheckoutPaymentMethod();
   $checkoutPaymentMethod
     ->setType("grabpay_SG");

   $paymentRequest = new PaymentRequest();
   $paymentRequest
     ->setReference("YOUR_ORDER_REFERENCE")
     ->setAmount($amount)
     ->setMerchantAccount("ADYEN_MERCHANT_ACCOUNT")
     ->setPaymentMethod($checkoutPaymentMethod)
     ->setReturnUrl("https://your-company.example.com/checkout?shopperOrder=12xy..");

   $requestOptions['idempotencyKey'] = 'UUID';

   // Send the request
   $service = new PaymentsApi($client);
   $response = $service->payments($paymentRequest, $requestOptions);
   ```

   #### C\#

   ```cs
   // Adyen .net API Library v17.0.0
   using Adyen;
   using Environment = Adyen.Model.Environment;
   using Adyen.Model;
   using Adyen.Model.Checkout;
   using Adyen.Service.Checkout;

   // For the live environment, additionally include your liveEndpointUrlPrefix.
   var config = new Config()
   {
       XApiKey = "ADYEN_API_KEY",
       Environment = Environment.Test
   };
   var client = new Client(config);

   // Create the request object(s)
   Amount amount = new Amount
   {
     Currency = "SGD",
     Value = 1000
   };

   StoredPaymentMethodDetails storedPaymentMethodDetails = new StoredPaymentMethodDetails
   {
     Type = StoredPaymentMethodDetails.TypeEnum.GrabpaySG
   };

   PaymentRequest paymentRequest = new PaymentRequest
   {
     Reference = "YOUR_ORDER_REFERENCE",
     Amount = amount,
     MerchantAccount = "ADYEN_MERCHANT_ACCOUNT",
     PaymentMethod = new CheckoutPaymentMethod(storedPaymentMethodDetails),
     ReturnUrl = "https://your-company.example.com/checkout?shopperOrder=12xy.."
   };

   // Send the request
   var service = new PaymentsService(client);
   var response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = "UUID"});
   ```

   #### NodeJS (JavaScript)

   ```js
   // Adyen Node API Library v18.0.0
   // Require the parts of the module you want to use
   const { Client, CheckoutAPI } = require('@adyen/api-library');
   // Initialize the client object
   // For the live environment, additionally include your liveEndpointUrlPrefix.
   const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

   // Create the request object(s)
   const paymentRequest = {
     amount: {
       currency: "SGD",
       value: 1000
     },
     reference: "YOUR_ORDER_REFERENCE",
     paymentMethod: {
       type: "grabpay_SG"
     },
     returnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy..",
     merchantAccount: "ADYEN_MERCHANT_ACCOUNT"
   }

   // Send the request
   const checkoutAPI = new CheckoutAPI(client);
   const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" });
   ```

   #### Go

   ```go
   // Adyen Go API Library v10.4.0
   import (
     "context"
     "github.com/adyen/adyen-go-api-library/v9/src/common"
     "github.com/adyen/adyen-go-api-library/v9/src/adyen"
     "github.com/adyen/adyen-go-api-library/v9/src/checkout"
   )
   // For the live environment, additionally include your liveEndpointUrlPrefix.
   client := adyen.NewClient(&common.Config{
     ApiKey:      "ADYEN_API_KEY",
     Environment: common.TestEnv,
   })

   // Create the request object(s)
   amount := checkout.Amount{
     Currency: "SGD",
     Value: 1000,
   }

   storedPaymentMethodDetails := checkout.StoredPaymentMethodDetails{
     Type: common.PtrString("grabpay_SG"),
   }

   paymentRequest := checkout.PaymentRequest{
     Reference: "YOUR_ORDER_REFERENCE",
     Amount: amount,
     MerchantAccount: "ADYEN_MERCHANT_ACCOUNT",
     PaymentMethod: checkout.StoredPaymentMethodDetailsAsCheckoutPaymentMethod(&storedPaymentMethodDetails),
     ReturnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy..",
   }

   // Send the request
   service := client.Checkout()
   req := service.PaymentsApi.PaymentsInput().IdempotencyKey("UUID").PaymentRequest(paymentRequest)
   res, httpRes, err := service.PaymentsApi.Payments(context.Background(), req)
   ```

   #### Python

   ```py
   # Adyen Python API Library v12.5.1
   import Adyen

   adyen = Adyen.Adyen()
   adyen.client.xapikey = "ADYEN_API_KEY"
   # For the live environment, additionally include your liveEndpointUrlPrefix.
   adyen.client.platform = "test" # The environment to use library in.

   # Create the request object(s)
   json_request = {
     "amount": {
       "currency": "SGD",
       "value": 1000
     },
     "reference": "YOUR_ORDER_REFERENCE",
     "paymentMethod": {
       "type": "grabpay_SG"
     },
     "returnUrl": "https://your-company.example.com/checkout?shopperOrder=12xy..",
     "merchantAccount": "ADYEN_MERCHANT_ACCOUNT"
   }

   # Send the request
   result = adyen.checkout.payments_api.payments(request=json_request, idempotency_key="UUID")
   ```

   #### Ruby

   ```rb
   # Adyen Ruby API Library v9.5.1
   require "adyen-ruby-api-library"

   adyen = Adyen::Client.new
   adyen.api_key = 'ADYEN_API_KEY'
   # For the live environment, additionally include your liveEndpointUrlPrefix.
   adyen.env = :test # Set to "live" for live environment

   # Create the request object(s)
   request_body = {
     :amount => {
       :currency => 'SGD',
       :value => 1000
     },
     :reference => 'YOUR_ORDER_REFERENCE',
     :paymentMethod => {
       :type => 'grabpay_SG'
     },
     :returnUrl => 'https://your-company.example.com/checkout?shopperOrder=12xy..',
     :merchantAccount => 'ADYEN_MERCHANT_ACCOUNT'
   }

   # Send the request
   result = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' => 'UUID' })
   ```

   #### NodeJS (TypeScript)

   ```ts
   // Adyen Node API Library v18.0.0
   // Require the parts of the module you want to use
   import { Client, CheckoutAPI, Types } from "@adyen/api-library";
   // Initialize the client object
   // For the live environment, additionally include your liveEndpointUrlPrefix.
   const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

   // Create the request object(s)
   const amount: Types.checkout.Amount = {
     currency: "SGD",
     value: 1000
   };

   const storedPaymentMethodDetails: Types.checkout.StoredPaymentMethodDetails = {
     type: Types.checkout.StoredPaymentMethodDetails.TypeEnum.GrabpaySg
   };

   const paymentRequest: Types.checkout.PaymentRequest = {
     reference: "YOUR_ORDER_REFERENCE",
     amount: amount,
     merchantAccount: "ADYEN_MERCHANT_ACCOUNT",
     paymentMethod: storedPaymentMethodDetails,
     returnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy.."
   };

   // Send the request
   const checkoutAPI = new CheckoutAPI(client);
   const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" });
   ```

   In the [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) response, check the `action` object for the information that you must use to redirect the shopper.

   **/payments response**

   ```json
   {
     "resultCode":"RedirectShopper",
     "action":{
       "paymentMethodType":"grabpay_SG",
       "method":"GET",
       "url":"https://checkoutshopper-test.adyen.com/checkoutshopper/checkoutPaymentRedirect?redirectData=...",
       "type":"redirect"
     }
   }
   ```

If your integration is [set up correctly](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Drop-in#make-a-payment), the `action` object is passed from your server to the client.

### Tab: PayLater

To make a PayLater payment, either postpaid or installment:

1. Pass the `paymentComponentData.paymentMethod` to your server.

2. From your server, make a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request, specifying:

   * [paymentMethod](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-paymentMethod): The `paymentComponentData.paymentMethod` from your client app.
   * [returnUrl](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-returnUrl): URL to where the shopper should be redirected back to after they complete the payment. Get this URL from the Component in the `RedirectComponent.getReturnUrl(context)`.
   * [reference](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-reference): Your unique reference for this payment. Maximum length of 32 characters. Only alphanumeric characters, dashes and underscores are allowed.
   * [amount](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200-amount): The amount that the shopper needs to pay.
   * [deliveryAddress](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-deliveryAddress): The address where the purchased goods should be delivered.
   * [lineItems](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-lineItems): Price and product information about the purchased items, to be included on the invoice sent to the shopper.

   #### curl

   ```bash
   curl https://checkout-test.adyen.com/v68/payments \
   -H 'x-api-key: ADYEN_API_KEY' \
   -H 'content-type: application/json' \
   -d '{
       "amount": {
           "currency": "SGD",
           "value": 1000
       },
       "reference": "YOUR_ORDER_REFERENCE",
       "paymentMethod": {
           "type": "grabpay_SG"
       },
       "returnUrl": "https://your-company.example.com/checkout?shopperOrder=12xy..",
       "merchantAccount": "ADYEN_MERCHANT_ACCOUNT",
       "deliveryAddress": {
           "city": "Singapore",
           "country": "SG",
           "houseNumberOrName": "109",
           "postalCode": "179097",
           "street": "North Bridge Road"
       },
       "lineItems":[
         {
            "quantity":"1",
            "taxPercentage":"2100",
            "description":"Shoes",
            "id":"Item #1",
            "amountIncludingTax":"400",
            "productUrl": "URL_TO_PURCHASED_ITEM",
            "imageUrl": "URL_TO_PICTURE_OF_PURCHASED_ITEM"
         }
      ]
   }'
   ```

   #### Java

   ```java
   // Adyen Java API Library v27.0.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, additionally include your liveEndpointUrlPrefix.
   Client client = new Client("ADYEN_API_KEY", Environment.TEST);

   // Create the request object(s)
   LineItem lineItem1 = new LineItem()
     .quantity(1L)
     .taxPercentage(2100L)
     .imageUrl("URL_TO_PICTURE_OF_PURCHASED_ITEM")
     .description("Shoes")
     .id("Item #1")
     .amountIncludingTax(400L)
     .productUrl("URL_TO_PURCHASED_ITEM");

   Amount amount = new Amount()
     .currency("SGD")
     .value(1000L);

   DeliveryAddress deliveryAddress = new DeliveryAddress()
     .country("SG")
     .city("Singapore")
     .houseNumberOrName("109")
     .street("North Bridge Road")
     .postalCode("179097");

   StoredPaymentMethodDetails storedPaymentMethodDetails = new StoredPaymentMethodDetails()
     .type(StoredPaymentMethodDetails.TypeEnum.GRABPAY_SG);

   PaymentRequest paymentRequest = new PaymentRequest()
     .reference("YOUR_ORDER_REFERENCE")
     .lineItems(Arrays.asList(lineItem1))
     .amount(amount)
     .merchantAccount("ADYEN_MERCHANT_ACCOUNT")
     .deliveryAddress(deliveryAddress)
     .paymentMethod(new CheckoutPaymentMethod(storedPaymentMethodDetails))
     .returnUrl("https://your-company.example.com/checkout?shopperOrder=12xy..");

   // Send the request
   PaymentsApi service = new PaymentsApi(client);
   PaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey("UUID"));
   ```

   #### PHP

   ```php
   // Adyen PHP API Library v19.0.0
   use Adyen\Client;
   use Adyen\Environment;
   use Adyen\Model\Checkout\LineItem;
   use Adyen\Model\Checkout\Amount;
   use Adyen\Model\Checkout\DeliveryAddress;
   use Adyen\Model\Checkout\CheckoutPaymentMethod;
   use Adyen\Model\Checkout\PaymentRequest;
   use Adyen\Service\Checkout\PaymentsApi;

   $client = new Client();
   $client->setXApiKey("ADYEN_API_KEY");
   // For the live environment, additionally include your liveEndpointUrlPrefix.
   $client->setEnvironment(Environment::TEST);


   // Create the request object(s)
   $lineItem1 = new LineItem();
   $lineItem1
     ->setQuantity(1)
     ->setTaxPercentage(2100)
     ->setImageUrl("URL_TO_PICTURE_OF_PURCHASED_ITEM")
     ->setDescription("Shoes")
     ->setId("Item #1")
     ->setAmountIncludingTax(400)
     ->setProductUrl("URL_TO_PURCHASED_ITEM");

   $amount = new Amount();
   $amount
     ->setCurrency("SGD")
     ->setValue(1000);

   $deliveryAddress = new DeliveryAddress();
   $deliveryAddress
     ->setCountry("SG")
     ->setCity("Singapore")
     ->setHouseNumberOrName("109")
     ->setStreet("North Bridge Road")
     ->setPostalCode("179097");

   $checkoutPaymentMethod = new CheckoutPaymentMethod();
   $checkoutPaymentMethod
     ->setType("grabpay_SG");

   $paymentRequest = new PaymentRequest();
   $paymentRequest
     ->setReference("YOUR_ORDER_REFERENCE")
     ->setLineItems(array($lineItem1))
     ->setAmount($amount)
     ->setMerchantAccount("ADYEN_MERCHANT_ACCOUNT")
     ->setDeliveryAddress($deliveryAddress)
     ->setPaymentMethod($checkoutPaymentMethod)
     ->setReturnUrl("https://your-company.example.com/checkout?shopperOrder=12xy..");

   $requestOptions['idempotencyKey'] = 'UUID';

   // Send the request
   $service = new PaymentsApi($client);
   $response = $service->payments($paymentRequest, $requestOptions);
   ```

   #### C\#

   ```cs
   // Adyen .net API Library v17.0.0
   using Adyen;
   using Environment = Adyen.Model.Environment;
   using Adyen.Model;
   using Adyen.Model.Checkout;
   using Adyen.Service.Checkout;

   // For the live environment, additionally 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,
     TaxPercentage = 2100,
     ImageUrl = "URL_TO_PICTURE_OF_PURCHASED_ITEM",
     Description = "Shoes",
     Id = "Item #1",
     AmountIncludingTax = 400,
     ProductUrl = "URL_TO_PURCHASED_ITEM"
   };

   Amount amount = new Amount
   {
     Currency = "SGD",
     Value = 1000
   };

   DeliveryAddress deliveryAddress = new DeliveryAddress
   {
     Country = "SG",
     City = "Singapore",
     HouseNumberOrName = "109",
     Street = "North Bridge Road",
     PostalCode = "179097"
   };

   StoredPaymentMethodDetails storedPaymentMethodDetails = new StoredPaymentMethodDetails
   {
     Type = StoredPaymentMethodDetails.TypeEnum.GrabpaySG
   };

   PaymentRequest paymentRequest = new PaymentRequest
   {
     Reference = "YOUR_ORDER_REFERENCE",
     LineItems = new List<LineItem>{ lineItem1 },
     Amount = amount,
     MerchantAccount = "ADYEN_MERCHANT_ACCOUNT",
     DeliveryAddress = deliveryAddress,
     PaymentMethod = new CheckoutPaymentMethod(storedPaymentMethodDetails),
     ReturnUrl = "https://your-company.example.com/checkout?shopperOrder=12xy.."
   };

   // Send the request
   var service = new PaymentsService(client);
   var response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = "UUID"});
   ```

   #### NodeJS (JavaScript)

   ```js
   // Adyen Node API Library v18.0.0
   // Require the parts of the module you want to use
   const { Client, CheckoutAPI } = require('@adyen/api-library');
   // Initialize the client object
   // For the live environment, additionally include your liveEndpointUrlPrefix.
   const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

   // Create the request object(s)
   const paymentRequest = {
     amount: {
       currency: "SGD",
       value: 1000
     },
     reference: "YOUR_ORDER_REFERENCE",
     paymentMethod: {
       type: "grabpay_SG"
     },
     returnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy..",
     merchantAccount: "ADYEN_MERCHANT_ACCOUNT",
     deliveryAddress: {
       city: "Singapore",
       country: "SG",
       houseNumberOrName: "109",
       postalCode: "179097",
       street: "North Bridge Road"
     },
     lineItems: [ {
       quantity: "1",
       taxPercentage: "2100",
       description: "Shoes",
       id: "Item #1",
       amountIncludingTax: "400",
       productUrl: "URL_TO_PURCHASED_ITEM",
       imageUrl: "URL_TO_PICTURE_OF_PURCHASED_ITEM"
     } ]
   }

   // Send the request
   const checkoutAPI = new CheckoutAPI(client);
   const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" });
   ```

   #### Go

   ```go
   // Adyen Go API Library v10.4.0
   import (
     "context"
     "github.com/adyen/adyen-go-api-library/v9/src/common"
     "github.com/adyen/adyen-go-api-library/v9/src/adyen"
     "github.com/adyen/adyen-go-api-library/v9/src/checkout"
   )
   // For the live environment, additionally 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),
     TaxPercentage: common.PtrInt64(2100),
     ImageUrl: common.PtrString("URL_TO_PICTURE_OF_PURCHASED_ITEM"),
     Description: common.PtrString("Shoes"),
     Id: common.PtrString("Item #1"),
     AmountIncludingTax: common.PtrInt64(400),
     ProductUrl: common.PtrString("URL_TO_PURCHASED_ITEM"),
   }

   amount := checkout.Amount{
     Currency: "SGD",
     Value: 1000,
   }

   deliveryAddress := checkout.DeliveryAddress{
     Country: "SG",
     City: "Singapore",
     HouseNumberOrName: "109",
     Street: "North Bridge Road",
     PostalCode: "179097",
   }

   storedPaymentMethodDetails := checkout.StoredPaymentMethodDetails{
     Type: common.PtrString("grabpay_SG"),
   }

   paymentRequest := checkout.PaymentRequest{
     Reference: "YOUR_ORDER_REFERENCE",
     LineItems: []checkout.LineItem{
         lineItem1,
     },
     Amount: amount,
     MerchantAccount: "ADYEN_MERCHANT_ACCOUNT",
     DeliveryAddress: &deliveryAddress,
     PaymentMethod: checkout.StoredPaymentMethodDetailsAsCheckoutPaymentMethod(&storedPaymentMethodDetails),
     ReturnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy..",
   }

   // Send the request
   service := client.Checkout()
   req := service.PaymentsApi.PaymentsInput().IdempotencyKey("UUID").PaymentRequest(paymentRequest)
   res, httpRes, err := service.PaymentsApi.Payments(context.Background(), req)
   ```

   #### Python

   ```py
   # Adyen Python API Library v12.5.1
   import Adyen

   adyen = Adyen.Adyen()
   adyen.client.xapikey = "ADYEN_API_KEY"
   # For the live environment, additionally include your liveEndpointUrlPrefix.
   adyen.client.platform = "test" # The environment to use library in.

   # Create the request object(s)
   json_request = {
     "amount": {
       "currency": "SGD",
       "value": 1000
     },
     "reference": "YOUR_ORDER_REFERENCE",
     "paymentMethod": {
       "type": "grabpay_SG"
     },
     "returnUrl": "https://your-company.example.com/checkout?shopperOrder=12xy..",
     "merchantAccount": "ADYEN_MERCHANT_ACCOUNT",
     "deliveryAddress": {
       "city": "Singapore",
       "country": "SG",
       "houseNumberOrName": "109",
       "postalCode": "179097",
       "street": "North Bridge Road"
     },
     "lineItems": [ {
       "quantity": "1",
       "taxPercentage": "2100",
       "description": "Shoes",
       "id": "Item #1",
       "amountIncludingTax": "400",
       "productUrl": "URL_TO_PURCHASED_ITEM",
       "imageUrl": "URL_TO_PICTURE_OF_PURCHASED_ITEM"
     } ]
   }

   # Send the request
   result = adyen.checkout.payments_api.payments(request=json_request, idempotency_key="UUID")
   ```

   #### Ruby

   ```rb
   # Adyen Ruby API Library v9.5.1
   require "adyen-ruby-api-library"

   adyen = Adyen::Client.new
   adyen.api_key = 'ADYEN_API_KEY'
   # For the live environment, additionally include your liveEndpointUrlPrefix.
   adyen.env = :test # Set to "live" for live environment

   # Create the request object(s)
   request_body = {
     :amount => {
       :currency => 'SGD',
       :value => 1000
     },
     :reference => 'YOUR_ORDER_REFERENCE',
     :paymentMethod => {
       :type => 'grabpay_SG'
     },
     :returnUrl => 'https://your-company.example.com/checkout?shopperOrder=12xy..',
     :merchantAccount => 'ADYEN_MERCHANT_ACCOUNT',
     :deliveryAddress => {
       :city => 'Singapore',
       :country => 'SG',
       :houseNumberOrName => '109',
       :postalCode => '179097',
       :street => 'North Bridge Road'
     },
     :lineItems => [ {
       :quantity => '1',
       :taxPercentage => '2100',
       :description => 'Shoes',
       :id => 'Item #1',
       :amountIncludingTax => '400',
       :productUrl => 'URL_TO_PURCHASED_ITEM',
       :imageUrl => 'URL_TO_PICTURE_OF_PURCHASED_ITEM'
     } ]
   }

   # Send the request
   result = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' => 'UUID' })
   ```

   #### NodeJS (TypeScript)

   ```ts
   // Adyen Node API Library v18.0.0
   // Require the parts of the module you want to use
   import { Client, CheckoutAPI, Types } from "@adyen/api-library";
   // Initialize the client object
   // For the live environment, additionally include your liveEndpointUrlPrefix.
   const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

   // Create the request object(s)
   const lineItem1: Types.checkout.LineItem = {
     quantity: 1,
     taxPercentage: 2100,
     imageUrl: "URL_TO_PICTURE_OF_PURCHASED_ITEM",
     description: "Shoes",
     id: "Item #1",
     amountIncludingTax: 400,
     productUrl: "URL_TO_PURCHASED_ITEM"
   };

   const amount: Types.checkout.Amount = {
     currency: "SGD",
     value: 1000
   };

   const deliveryAddress: Types.checkout.DeliveryAddress = {
     country: "SG",
     city: "Singapore",
     houseNumberOrName: "109",
     street: "North Bridge Road",
     postalCode: "179097"
   };

   const storedPaymentMethodDetails: Types.checkout.StoredPaymentMethodDetails = {
     type: Types.checkout.StoredPaymentMethodDetails.TypeEnum.GrabpaySg
   };

   const paymentRequest: Types.checkout.PaymentRequest = {
     reference: "YOUR_ORDER_REFERENCE",
     lineItems: [lineItem1],
     amount: amount,
     merchantAccount: "ADYEN_MERCHANT_ACCOUNT",
     deliveryAddress: deliveryAddress,
     paymentMethod: storedPaymentMethodDetails,
     returnUrl: "https://your-company.example.com/checkout?shopperOrder=12xy.."
   };

   // Send the request
   const checkoutAPI = new CheckoutAPI(client);
   const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" });
   ```

   In the [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) response, check the `action` object for the information that you must use to redirect the shopper.

   **/payments response**

   ```json
   {
     "resultCode":"RedirectShopper",
     "action":{
       "paymentMethodType":"grabpay_SG",
       "method":"GET",
       "url":"https://checkoutshopper-test.adyen.com/checkoutshopper/checkoutPaymentRedirect?redirectData=...",
       "type":"redirect"
     }
   }
   ```

If your integration is [set up correctly](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Drop-in#make-a-payment), the `action` object is passed from your server to the client.

## Check the payment result

Drop-in redirects the shopper to complete the payment. When the shopper returns back to your app, Drop-in provides the `actionComponentData` object.

From your server, make a POST [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) request providing:

* `details`: The `actionComponentData.details` object from Drop-in.

**/payments/details request**

```bash
curl https://checkout-test.adyen.com/v72/payments/details \
-H 'x-api-key: ADYEN_API_KEY' \
-H 'content-type: application/json' \
-d '{
     "details": {
       "redirectResult": "eyJ0cmFuc1N0YXR1cyI6IlkifQ=="
   }
}'
```

You receive a response containing:

* `resultCode`: Use this to present the payment result to your shopper.
* `pspReference`: Our unique identifier for the transaction.

**/payments/details response**

```json
{
     "resultCode": "Authorised",
     "pspReference": "PPKFQ89R6QRXGN82"
}
```

For GrabPay PayLater, the response also contains `additionalData.paymentMethodVariant` — the Adyen sub-variant of the payment method used for the payment request. Possible values:

* For GrabPay Wallet: `grabpay_wallet_SG`, `grabpay_sg`, `grabpay_wallet_MY`, `grabpay_my`, `grabpay_wallet_PH`, `grabpay_ph`
* For GrabPay PayLater: `grabpay_postpaid_SG`, `grabpay_instalment4_SG`, `grabpay_postpaid_MY`, `grabpay_instalment4_MY`.

**/payments/details response**

```json
{
    "resultCode": "Authorised",
    "pspReference": "88154795347618C",
    "additionalData": {
        "paymentMethodVariant": "grabpay_postpaid_SG"
    }
}
```

## Present the payment result

Use the  [resultCode](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details#responses-200-resultCode) that you received in the [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) response to present the payment result to your shopper.

The `resultCode` values you can receive for GrabPay are:

| resultCode                  | Description                                                                                                                                                                                                 | Action                                                                                                          |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Authorised**              | The payment was authorised. You will receive the funds in a number of days.                                                                                                                                 | Inform the shopper that the payment was successful.                                                             |
| **Cancelled**               | The shopper cancelled the payment before it was completed, for example while in the GrabPay app.                                                                                                            | Ask the shopper whether they want to continue with the order, or ask them to select a different payment method. |
| **Refused**                 | The payment was refused by the shopper's card issuer.                                                                                                                                                       | Ask the shopper to try the payment again using a different payment method or card.                              |
| **Pending** or **Received** | The shopper has completed the payment but the final result is not yet known. You will receive the final result of the payment in an [AUTHORISATION webhook](/development-resources/webhooks/webhook-types). | Inform the shopper that you have received their order, and are waiting for the payment to be processed.         |

[]()If the shopper closed the browser and failed to return to your website, wait for webhooks to know the outcome of the payment. The webhooks you can receive for GrabPay are:

| eventCode         | success field | Description                                     | Action to take                                                                      |
| ----------------- | ------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------- |
| **AUTHORISATION** | **false**     | The transaction failed.                         | Cancel the order and inform the shopper that the payment failed.                    |
| **AUTHORISATION** | **true**      | The shopper successfully completed the payment. | Inform the shopper that the payment has been successful and proceed with the order. |
| **OFFER\_CLOSED** | **true**      | The shopper did not complete the payment.       | Cancel the order and inform the shopper that the payment timed out.                 |

## Test and go live

To test your GrabPay integration:

1. Contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) for your test wallet credentials.
2. In the simulator, log in to Grab with the phone number you registered, and specify the one-time password you receive on that phone number.

Check the status of the GrabPay test payments in your [Customer Area](https://ca-test.adyen.com/) > **Transactions** > **Payments**.

Before you can accept live GrabPay payments, you need to [submit a request for GrabPay](/payment-methods/add-payment-methods) in your [live Customer Area](https://ca-live.adyen.com/).

## See also

* [Android Drop-in integration guide](/online-payments/build-your-integration/sessions-flow/?platform=Android\&integration=Drop-in)
* [Webhooks](/development-resources/webhooks)
* [Tokenization](/online-payments/tokenization)
* [API Explorer](https://docs.adyen.com/api-explorer/#/CheckoutService/latest/overview)
