Payment Method: GoPay/ShopeePay/Dana

📘

GoPay Media Kit

To have a consistent and standardized GoPay branding across platform, we highly recommend merchants to refer to our media kit. Please refer to this page https://gopay.co.id/media-kit to access our brand guideline and image bank.

This section will explain how merchants can initiate GoPay deeplink transactions using SNAP-based CoreAPI specification.

1. Access Token B2B

Path/{version}/access-token/b2b
SNAP service code73
HTTP MethodPOST
Versionv1.0

Request Header

Field NameField TypeMandatoryField Description

Content-type

String

M

Media type of the resource, i.e. application/json

X-TIMESTAMP

String

M

Client’s current local time in ISO-8601 format

X-SIGNATURE

String

M

Created using asymmetric signature SHA256withRSA algorithm

X-CLIENT-KEY

String

M

Client’s client_id (PJP Name) (given at completion registration process).

Content-type: application/json
X-TIMESTAMP: 2024-03-19T14:30:00+07:00
X-SIGNATURE: da1fa417c72d6b91c257e01e54fac824
X-CLIENT-KEY:962489e9-de5d-4eb7-92a4-b07d44d64bf4 

Request Body

Field NameField TypeMandatoryField Description

grantType

String(64)

M

client_credentials: The client can request an access token using only its client credentials (or other supported means of authentication) when the client is requesting access to the protected resources under its control (OAuth 2.0: RFC 6749 & 6750)

{
   "grantType":"client_credentials"
}

Response Header

Field NameField TypeMandatoryField Description

Content-type

String

M

Media type of the resource, i.e. application/json

X-TIMESTAMP

String

M

Client’s current local time in ISO-8601 format

Content-type:application/json
X-TIMESTAMP:2024-03-19T14:30:00+07:00

Response Body

Field NameField TypeMandatoryField Description

responseCode

String(7)

M

Error code to specify the error returned

responseMessage

String(150)

M

Debug message to provide more information.

accessToken

String(2048)

C

A string representing an authorization issued to the client that used to access protected resources

tokenType

String

O

The access token type provides the client with the information required to successfully utilize the access token to make a protected resource request

expiresIn

String

O

Time duration when the accessToken will be expired. (default in second).

{
   "responseCode":"2007400",
   "responseMessage":"Successful",
  "accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyMTFlZThiMi1hN2FlLTRhZGUtYmJlYS1mNzI3MDk3ZmQ0NmEiLCJjbGllbnRJZCI6IjZhZTk1N2M0LTI4NjMtNDcxMy1hY2NlLWJhMTJkZTYzNmNmYyIsIm5iZiI6MTYxMTQ2ODk3OCwiZXhwIjoxNjExNDY5ODc4LCJpYXQiOjE2MTE0Njg5Nzh9.KM7yz9GvuUaDR1bXwei4iO0h4e3g4o1Hct5Ie9VoBdo",
   "tokenType":"Bearer",
   "expiresIn":"900"
}

Response Body Error Case

Field NameField TypeMandatoryField Description

responseCode

String(7)

M

Error code to specify the error returned

responseMessage

String(150)

M

Debug message to provide more information.

referenceNo

String

C

Debug id to provide more information.

{
   "responseCode":"5007300",
   "responseMessage":"Timeout",
   "referenceNo":"19352694-0ef6-4439-8ad1-b1dfb8bbb85f"
}

List of Response code

Response CodeHTTP Status CodeResponse Message

2007300

200

Success

4017300

401

Unauthorized. Signature

5007300

500

Internal Server Error


2. Creating GoPay/ShopeePay/Dana deeplink transaction


GoPay/ShopeePay/Dana deeplink - Direct Debit API

Path/{version}/debit/payment-host-to-host
HTTP MethodPOST
Versionv1.0
SNAP service code54

Request Header

Field NameField TypeMandatoryField Description

Content-type

String

M

Media type of the resource, i.e. application/json

X-TIMESTAMP

String

M

Client’s current local time in ISO-8601 format

X-SIGNATURE

String

M

Created using symmetric signature HMAC_SHA512 algorithm

Authorization

String

M

Represents access_token of a request; string starts with keyword “Bearer ” followed by access_token. Can get this from Access Token B2B API response.

X-PARTNER-ID

String

M

Unique identifier for partner

X-EXTERNAL-ID

String

M

Alphanumeric string. Preferably UUID.

CHANNEL-ID

String

M

Mandatory field from Bank Indonesia that can take any value with correct format 5 digits numeric string

Content-type: application/json
X-TIMESTAMP: 2024-03-19T14:30:00+07:00
X-SIGNATURE: da1fa417c72d6b91c257e01e54fac824
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CupvIJbU1Mmu4a11MNDZ7Sg5u9a
X-PARTNER-ID: BMRI
X-EXTERNAL-ID: 12345678901234567890
CHANNEL-ID: 12345

Request Body

Field NameField TypeMandatoryField Description

partnerReferenceNo

String(64)

M

Merchant order id

Only used for debugging purpose in server side

chargeToken

String(40)

M

Authorization token. Same as the Authorization header.

merchantId

String(64)

O

Merchant identifier that is unique per each merchant

validUpTo

String(25)

O

The time when the payment will be automatically expired. The format is defined by ISO 8601.

(Minimum value : 20 second, default value : 15 min)

Maximum value for gopay: 180 days from trx time,
Maximum value for shopeepay: 5 days from trx time

Maximum value for dana: 1 days from trx time

urlParams

Array of Object

O

Merchant redirect URL. After completing payment, user will be redirected back to this URL.

if it's not provided, the system will fallback to using the callback url from the dashboard configuration. In case the Midtrans dashboard configuration value is also unavailable, the system will return an error.

urlParams.url

String(512)

M

URL value

urlParams.type

String(32)

M

URL type
Possible value : PAY_RETURN

urlParams.isDeeplink

String(1)

M

This parameter defines the type of URL to use. Set it to "Y" for a deeplink, or choose "N" if you prefer a standard URL (HTTP/HTTPS)

Possible Value: Y, N

payOptionDetails

Array of Object

M

Payment option that will be used for this payment.

payOptionDetails.payMethod

String(64)

M

Payment method for the transaction.

Possible value : GOPAY, SHOPEEPAY, DANA

payOptionDetails.payOption

String(64)

M

Payment option which shows the provider of this payment

Possible value : GOPAY, SHOPEEPAY, DANA

payOptionDetails.transAmount

Object

M

Payment Transaction Amount

payOptionDetails.transAmount.value

String(ISO 4217)

M

Transaction amount that will be paid using this payment method. If it's IDR then value includes 2 decimal digits.

e.g. IDR 10.000 will be placed as 10000.00

Minimum value: 1.00

Maximum value : 99999999999.00

payOptionDetails.transAmount.currency

String(3)

M

Transaction currency that will be paid using this payment method.

Possible Value: IDR

additionalInfo

Object

O

Additional information field which merchants need to pass to support current API contracts.

additionalInfo.customerDetails

Object

O

Customer Detail Information

additionalInfo.customerDetails.phone

String(15)

O

Customer Phone number

additionalInfo.customerDetails.email

String(255)

O

Customer email

additionalInfo.customerDetails.firstName

String(255)

O

Customer First Name

additionalInfo.customerDetails.lastName

String(255)

O

Customer Last Name

additionalInfo.customerDetails.billingAddress

Object

O

Customer billing address

additionalInfo.customerDetails.billingAddress.firstName

String(255)

O

Billing address first name

additionalInfo.customerDetails.billingAddress.lastName

String(255)

O

Billing address last name

additionalInfo.customerDetails.billingAddress.phone

String(15)

O

Billing address phone

additionalInfo.customerDetails.billingAddress.address

String(255)

O

Billing address detail

additionalInfo.customerDetails.billingAddress.city

String(255)

O

Billing address city

additionalInfo.customerDetails.billingAddress.postalCode

String(255)

O

Billing address postal code

additionalInfo.customerDetails.billingAddress.countryCode

String(15)

O

Billing address country code

additionalInfo.customerDetails.shippingAddress

Object

O

Customer shipping address

additionalInfo.customerDetails.shippingAddress.firstName

String(255)

O

Shipping address first name

additionalInfo.customerDetails.shippingAddress.lastName

String(255)

O

Shipping address last name

additionalInfo.customerDetails.shippingAddress.phone

String(15)

O

Shipping address phone

additionalInfo.customerDetails.shippingAddress.address

String(255)

O

Shipping address detail

additionalInfo.customerDetails.shippingAddress.city

String(255)

O

Shipping address city

additionalInfo.customerDetails.shippingAddress.postalCode

String(255)

O

Shipping address postal code

additionalInfo.customerDetails.shippingAddress.countryCode

String(15)

O

Shipping address country code

additionalInfo.items

Array Of Object

O

Item Details

additionalInfo.items.id

String(32)

O

Item ID

additionalInfo.items.price

Object

M

Price of the item in IDR.

additionalInfo.items.price.value

String (ISO4217)

M

Item Price value

additionalInfo.items.price.currency

String(3)

M

Item Price currency

additionalInfo.items.quantity

String

M

Quantity of the item purchased by the customer.

additionalInfo.items.name

String(64)

O

Name of the item.

additionalInfo.items.merchantName

String(64)

O

Name of the merchant selling the item.

additionalInfo.items.brand

String(64)

O

Brand name of the item.

additionalInfo.items.category

String(64)

O

Category of the item.

additionalInfo.items.url

String(64)

O

HTTP URL of the item in the merchant site

additionalInfo.metadata

Object

O

Transaction metadata

{
 "partnerReferenceNo": "merchant-order-id",
 "chargeToken": "accessToken",
 "merchantId": "G169749203",
 "urlParams": [{
   "url": "merchantapp://payments/callback/12345",
   "type": "PAY_RETURN",
   "isDeeplink": "Y"
 }],
 "validUpTo": "2023-09-24T20:34:15.452305Z",
 "payOptionDetails": [
   {
     "payMethod": "GOPAY" or "DANA" or "SHOPEEPAY",
     "payOption": "GOPAY" or "DANA" or "SHOPEEPAY",
     "transAmount": {
       "value": "12345678.00",
       "currency": "IDR"
     }
   }
 ],
 "additionalInfo": {
   "customerDetails": {
     "phone": "080123456789",
     "firstName": "john",
     "lastName": "doe",
     "email": "[email protected]",
     "billingAddress": {
       "firstName": "john",
       "lastName": "doe",
       "phone": "080123456789",
       "address": "jalan maju mundur",
       "city": "jakarta",
       "postalCode": "12345",
       "countryCode": "IDN"
     },
     "shippingAddress": {
       "firstName": "john",
       "lastName": "doe",
       "phone": "080123456789",
       "address": "jalan maju mundur",
       "city": "jakarta",
       "postalCode": "12345",
       "countryCode": "IDN"
     }
   },
   "items": [
     {
       "id": "ID012345",
       "price":  {
         "value": "12345678.00",
         "currency": "IDR"
       },
       "quantity":"1",
       "name": "someItemName",
       "brand": "someBrand",
       "category": "someCategory",
       "merchantName": "someMerchant",
       "url": "someItemUrl"
     }
   ],
   "metadata": {}
 }
}

Response Header

Field NameField TypeMandatoryField Description

Content-type

String

M

Media type of the resource, i.e. application/json

X-TIMESTAMP

String

M

Client’s current local time in ISO-8601 format

Content-type:application/json
X-TIMESTAMP:2024-03-19T14:30:00+07:00

Response Body

Field NameField TypeMandatoryField Description

responseCode

String(7)

M

Status code of transaction charge result.

responseMessage

String(150)

M

Description of transaction charge result.

referenceNo

String(256)

C

Transaction identifier on service provider system. The field is filled upon successful transaction

partnerReferenceNo

String(64)

O

Transaction identifier on service consumer system

appRedirectUrl

String(2048)

O

Reserved for future purposes.

webRedirectUrl

String(2048)

M

Returns a universal link to the PJP AIS payment page. This link is recommended when the Client is unable to implement a check for whether the PJP AIS app is installed on the user's device before redirection.

additionalInfo

Object

O

Additional information

additionalInfo.gross_amount

Object

O

Transaction amount that will be paid using this payment method. The format defined by ISO 4217.

additionalInfo.gross_amount.value

String (ISO4217)

M

Gross amount value

additionalInfo.gross_amount.currency

String(3)

M

Gross amount currency

additionalInfo.paymentType

String(64)

O

Transaction payment method

additionalInfo.transactionTime

String(ISO 8601)

O

Timestamp of transaction in ISO 8601 format using GMT+7.

additionalInfo.validUpTo

String(ISO 8601)

O

The time when the payment will be automatically expired. Using ISO 8601 format

{
 "responseCode":"2005400",
 "responseMessage":"Successful",
 "referenceNo":"GOPAY012345678",
 "partnerReferenceNo":"merchant-order-id",
 "webRedirectUrl":"https://some-url.for/redirect-to-gopay-app",
 "appRedirectUrl":""
 "additionalInfo":{
   "paymentType": "GOPAY",
   "grossAmount":{
     "value": "12345678.00",
     "currency": "IDR"
   },
   "transactionTime":"2023-09-25T02:59:19.517854Z",
   "validUpTo":"2023-09-26T02:59:19Z"
 }

List of Response code

Response CodeHTTP Status CodeResponse Message

4005402

400

Invalid Mandatory Field chargeToken , partnerReferenceNo

4015400

401

Unauthorized. Auth token required

4015401

401

Invalid Token (B2B)

4015402

401

Invalid Customer Token

4035403

403

Suspected Fraud

4035414

403

Insufficient Funds

4035415

403

Transaction Not Permitted. Url not whitelisted.

5005401

500

Internal Server Error

5045400

504

Timeout


Additional APIs

  1. Refund API
  2. Cancel API
  3. Get Transaction Status API
  4. Payment Notification API