Initiate Host to Host Payment

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-typeStringMMedia type of the resource, i.e. application/json
X-TIMESTAMPStringMClient’s current local time in ISO-8601 format
X-SIGNATUREStringMCreated using asymmetric signature SHA256withRSA algorithm
X-CLIENT-KEYStringMClient’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
grantTypeString(64)Mclient_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-typeStringMMedia type of the resource, i.e. application/json
X-TIMESTAMPStringMClient’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
responseCodeString(7)MError code to specify the error returned
responseMessageString(150)MDebug message to provide more information.
accessTokenString(2048)CA string representing an authorization issued to the client that used to access protected resources
tokenTypeStringOThe access token type provides the client with the information required to successfully utilize the access token to make a protected resource request
expiresInStringOTime 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
responseCodeString(7)MError code to specify the error returned
responseMessageString(150)MDebug message to provide more information.
referenceNoStringCDebug id to provide more information.
{
   "responseCode":"5007300",
   "responseMessage":"Timeout",
   "referenceNo":"19352694-0ef6-4439-8ad1-b1dfb8bbb85f"
}

List of Response code

Response CodeHTTP Status CodeResponse Message
2007300200Success
4017300401Unauthorized. Signature
5007300500Internal Server Error

2. Creating GoPay deeplink transaction


GoPay 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-typeStringMMedia type of the resource, i.e. application/json
X-TIMESTAMPStringMClient’s current local time in ISO-8601 format
X-SIGNATUREStringMCreated using symmetric signature HMAC_SHA512 algorithm
AuthorizationStringMRepresents 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-IDStringMUnique identifier for partner
X-EXTERNAL-IDStringMAlphanumeric string. Preferably UUID. Reference number that should be unique in the same day or 1 day idempotency key
CHANNEL-IDStringMMandatory 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

References on X-Signature docs

Request Body

Field NameField TypeMandatoryField Description
partnerReferenceNoString(64)MMerchant order id
chargeTokenString(40)MAuthorization token. Same as the Authorization header.
merchantIdString(64)OMerchant identifier that is unique per each merchant
validUpToString(25)OThe time when the payment will be automatically expired. The format is defined by ISO 8601.
urlParam Array of Object O Merchant redirect URL. After completing payment, user will be redirected back to this URL.
urlParam.url String(512) M URL value
urlParam.type String(32) M URL type
urlParam.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)
payOptionDetails Array of Object M Payment option that will be used for this payment.
payOptionDetails.payMethod String(64) M Payment method for the transaction.
payOptionDetails.payOption String(64) M Payment option which shows the provider of this payment
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.
payOptionDetails.transAmount.currency String(3) M Transaction currency that will be paid using this payment method.
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
additionalInfo.pointOfPurchaseId String M PoP (Point of purchase) ID. The value will be provided by GoPay team during onboarding.

If merchant has a GoPay mini app integration, merchant will need to pass the PoP for both the mini app integration as well as the standard GoPay integration.

For example:
Merchant has both mini app and standard integration.
- Merchant should pass mini app PoP ID when creating mini app transaction.
- Merchant should pass standard PoP ID when creating standard transaction.
{
 "partnerReferenceNo": "merchant-order-id",
 "chargeToken": "accessToken",
 "merchantId": "G169749203",
 "urlParam": [{
   "url": "merchantapp://payments/callback/12345",
   "type": "PAY_RETURN",
   "isDeeplink": "Y"
 }],
 "validUpTo": "2023-09-24T20:34:15.452305Z",
 "payOptionDetails": [
   {
     "payMethod": "gopay",
     "payOption": "gopay",
     "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": {},
   "pointOfPurchaseId":"22cc3371-4bba-4ec6-8e0d-62163e130cdc"
 }
}

Response Header

Field NameField TypeMandatoryField Description
Content-typeStringMMedia type of the resource, i.e. application/json
X-TIMESTAMPStringMClient’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
responseCodeString(7)MStatus code of transaction charge result.
responseMessageString(150)MDescription of transaction charge result.
referenceNoString(256)CTransaction identifier on service provider system. The field is filled upon successful transaction
partnerReferenceNoString(64)OTransaction identifier on service consumer system
appRedirectUrlString(2048)OReserved for future purposes.
webRedirectUrlString(2048)MReturns 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.
additionalInfoObject OAdditional information
additionalInfo.gross_amountObject OTransaction amount that will be paid using this payment method. The format defined by ISO 4217.
additionalInfo.gross_amount.value String (ISO4217) MGross amount value
additionalInfo.gross_amount.currency String(3)MGross amount currency
additionalInfo.paymentTypeString(64)OTransaction payment method
additionalInfo.transactionTimeString(ISO 8601)OTimestamp of transaction in ISO 8601 format using GMT+7.
additionalInfo.validUpToString(ISO 8601)OThe 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
4005402400Invalid Mandatory Field chargeToken , partnerReferenceNo
4015400401Unauthorized. Auth token required
4015401401Invalid Token (B2B)
4035403403Suspected Fraud
4035414403Insufficient Funds
4035415403Transaction Not Permitted. Url not whitelisted.
5005401500Internal Server Error
5045400504Timeout

Additional APIs

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