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

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

StringO

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

expiresIn

StringO

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

StringC

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 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-SIGNATUREStringM

Created using symmetric signature HMAC_SHA512 algorithm

Authorization

StringM

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

StringM

Unique identifier for partner

X-EXTERNAL-ID

StringM

Alphanumeric string. Preferably UUID. Reference number that should be unique in the same day or 1 day idempotency key

CHANNEL-ID

StringM

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

References on X-Signature docs

Request Body



Field NameField TypeMandatoryField Description
partnerReferenceNoString(64)MMerchant order id

Only used for debugging purpose in server side

chargeTokenString(40)MAuthorization token. Same as the Authorization header.
merchantIdString(64)OMerchant identifier that is unique per each merchant
validUpToString(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,

urlParam

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.

urlParam.url

String(512)

M

URL value

urlParam.type

String(32)

M

URL type
Possible value : PAY_RETURN

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)

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

payOptionDetails.payOption

String(64)

M

Payment option which shows the provider of this payment

Reserved for future use case.

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

additionalInfo.pointOfPurchaseId

String

C

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

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)

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