1. Overview

BNC sends the payment request to the merchant backend when VA is successfully paid, merchants need to reply to the BNC as result format.

2. API Specification

HTTP Method

POST

Endpoint

N/A

SNAP Service Code

25

3. Request

3.1. Request Header

Name

Type

M/O

Length

Description

X-TIMESTAMP

String

M

25

The request timestamp. Formatted with "yyyy-MM-ddTHH:mm:ssZ". E.g. 2022-09-06T13:00:00+07:00

X-SIGNATURE

String

M

2048

The Merchant or Client generated signature. Using Asymmetric-Signature mechanism to get the token, encrypted with SHA256withRSA. 

 

e.g. 

stringToSign = <HTTP Method> + ":" + <Service Endpoint> + ":" + toLowercase(hexEncode(SHA256(minify(<Request Body>)))) + ":" + <X-TIMESTAMP>

X-SIGNATURE = SHA256withRSA(PrivateKey, stringToSign)

X-ORIGIN

String

M

256

Client’s host origin.

X-PARTNER-ID

String

M

32

The Merchant or Client Id. Provided by BNC.

X-EXTERNAL-ID

String

M

36

The Merchant External ID of request. 

 

e.g. 77778042022091500001

CHANNEL-ID

String

M

5

PJP Channel ID. 95221

3.1.1 Sample Request Header

Content-type: application/json 
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a" 
X-TIMESTAMP: 2020-12-21T14:56:11+07:00
X-SIGNATURE: 85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5
X-ORIGIN: www.hostname.com
X-PARTNER-ID: 82150823919040624621823174737537 
X-EXTERNAL-ID: 41807553358950093184162180797837 
CHANNEL-ID: 95221 

3.2 Request Body

Name

Type

M/O

Length

Description

partnerServiceId

String

M

8

Derivative of X- PARTNER-ID , similar to company code,8 digit left padding space. partnerServiceId + customerNo or virtualAccountNo

customerNo

String

M

20

Unique number (up to 20 digits) . partnerServiceId + customerNo or virtualAccountNo

virtualAccountNo

String

M

28

partnerServiceId (8 digit left padding 0) + customerNo (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo

virtualAccountName

String

O

255

Customer name

virtualAccountEmail

String

O

255

Customer email

virtualAccountPhone

String

O

30

Customer’s phone number Format:62xxxxxxxxxxxxx

trxId

String

C

64

Unique identifier generated by Partner

Mandatory if Payment comes from the Create

paymentRequestId

String

M

128

Unique identifier generated by PJP. If Payment comes from the Inquiry process, this value must be the same with inquiry Request Id.

channelCode

Number

O

4

Channel Code based on ISO18245

hashedSourceAccountNo

String

M

32

Source account number in hash

sourceBankCode

String

O

3

Source account bank code based on

paidAmount

Object

M

N/A

-> value

String(ISO4217)

M

16.2

Paid Amount with 2 decimal

-> currency

String

M

3

Currency

cumulativePaymentAmount

Object

O

N/A

-> value

String(ISO4217)

M

16.2

Transaction Amount

-> currency

String

M

3

Currency

paidBills

String

O

6

Hexadecimal format of binary offlag of paid bills

totalAmount

Object

O

N/A

-> value

String(ISO4217)

M

16.2

Transaction Amount. Total amount from Inquiry with 2 decimal

-> currency

String

M

3

Currency

trxDateTime

Date

O

25

PJP internal system datetime with timezone, which follows the ISO-8601 standard

referenceNo

String

O

64

Payment auth code generated by PJP

journalNum

String

O

6

Sequence journal number in PJP Core System

paymentType

String

O

1

Type of payment

flagAdvise

String

O

1

Status is this a retry notification

subCompany

String

O

5

SubCompany code generated by Partner

billDetails

Array of Objects

O

N/A

Array with maximum 24 Objects

-> billCode

String

O

2

From Inquiry Response

-> billNo

String

O

18

From Inquiry Response

-> billName

String

O

20

From Inquiry Response

-> billShortName

String

O

10

From Inquiry Response

-> billDescription

Object

O

N/A

From Inquiry Response

->-> english

String

O

18

From Inquiry Response

->-> indonesia

String

O

18

From Inquiry Response

-> billSubCompany

String

O

5

From Inquiry Response

-> billAmount

Array of Objects

O

N/A

->-> value

String

M

16.2

Transaction Amount. From Inquiry Response (ISO4217)

->-> currency

String

M

3

Currency (ISO4217)

-> additionalInfo

Object

O

N/A

From Inquiry Response

-> billReferenceNo

Number

O

15

Bill auth code generated by PJP

freeTexts

Array of Objects

O

N/A

Array withmaximum25Objects

-> english

String

O

32

Will be shown in Channel

-> indonesia

String

O

32

Will be shown in Channel

additionalInfo

Object

O

N/A

3.2.1 Sample Request Body

{
   "partnerServiceId":" 088899",
   "customerNo":"12345678901234567890",
   "virtualAccountNo":" 08889912345678901234567890",
   "virtualAccountName":"Jokul Doe",
   "virtualAccountEmail":"jokul@email.com",
   "virtualAccountPhone":"6281828384858",
   "trxId":"abcdefgh1234",
   "paymentRequestId":"abcdef-123456-abcdef",
   "channelCode":6011,
   "hashedSourceAccountNo":"abcdefghijklmnopqrstuvwxyz123456",
   "sourceBankCode":"008",
   "paidAmount":{
      "value":"12345678.00",
      "currency":"IDR"
   },
   "cumulativePaymentAmount":{
      "value":"12345678.00",
      "currency":"IDR"
   },
   "paidBills":"95000",
   "totalAmount":{
      "value":"12345678.00",
      "currency":"IDR"
   },
   "trxDateTime":"20201231T235959Z",
   "referenceNo":"123456789012345",
   "journalNum":"123456",
   "paymentType":1,
   "flagAdvise":"Y",
   "subCompany":"12345",
   "billDetails":[
      {
         "billCode":"01",
         "billNo":"123456789012345678",
         "billName":"Bill A for Jan",
         "billShortName":"Bill A",
         "billDescription":{
            "english":"Maintenance",
            "indonesia":"Pemeliharaan"
         },
         "billSubCompany":"00001",
         "billAmount":{
            "value":"12345678.00",
            "currency":"IDR"
         },
         "additionalInfo":{
            
         },
         "billReferenceNo":"123456789012345"
      }
   ],
   "freeTexts":[
      {
         "english":"Free text",
         "indonesia":"Tulisan bebas"
      }
   ],
   "additionalInfo":{
      
   }
}

4. Response

4.1 Response Body

Name

Type

M/O

Length

Description

responseCode

String

M

7

The BI Snap standard of response code.

responseMessage

String

M

150

The message corresponding to the response code.

-> virtualAccountData

Object

M

N/A

-> paymentFlagReason

Object

O

N/A

Reason for Payment Status multi language

->-> indonesia

String

O

200

Reason for Payment Status in English

->-> english

String

O

200

Reason for inquiry Status in Bahasa

-> partnerServiceId

String

M

8

Derivative of X- PARTNER-ID , similar to company code,8 digit left padding space. partnerServiceId + customerNo or virtualAccountNo

-> customerNo

String

M

20

Unique number (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo

-> virtualAccountNo

String

M

28

partnerServiceId (8 digit left padding 0) + customerNo (up to 20 digits). partnerServi ceId + customerNo or virtualAccountNo

-> virtualAccountName

String

M

255

Customer name

-> virtualAccountEmail

String

O

255

Customer email

-> virtualAccountPhone

String

O

30

Customer’s phone number Format:62xxxxxxxxxxxxx

-> trxId

String

O

64

From Payment Request

-> paidAmount

Array of object

O

N/A

->-> value

String

M

16.2

Transaction Amount.

From Payment Request (ISO4217)

->-> currency

String

M

3

Currency (ISO4217)

-> paidBills

String

O

6

From Payment Request

-> totalAmount

Array of objects

O

->-> value

String(ISO4217)

M

16.2

Transaction Amount.

From Payment Request

->-> currency

String

M

3

Currency

-> trxDateTime

Date

O

25

From Payment Request

-> referenceNo

String

O

15

From Payment Request

-> journalNum

String

O

6

From Payment Request

-> paymentType

String

O

1

From Payment Request

-> flagAdvise

String

O

1

From Payment Request

-> paymentFlagStatus

String

O

2

Status for Payment Flag from Partner

-> billDetails

Array of objects

O

N/A

Array with maximum24 Objects

->-> billerReferenceId

O

64

From Inquiry Response

->-> billCode

String

O

2

From Inquiry Response

->-> billNo

String

O

18

From Inquiry Response

->-> billName

String

O

20

From Inquiry Response

->-> billShortName

String

O

10

From Inquiry Response

->-> billDescription

Object

O

N/A

From Inquiry Response

->->-> english

String

O

18

From Inquiry Response

->->-> indonesia

String

O

18

From Inquiry Response

->-> billSubCompany

String

O

5

From Inquiry Response

->-> billAmount

Array of objects

O

N/A

->->-> value

String(ISO4217)

M

16.2

Transaction Amount.

From Inquiry Response

->->-> currency

String

M

3

Currency

->-> additionalInfo

Object

O

N/A

From Inquiry Response

->-> status

String

O

2

Payment status for specific Bill

->-> reason

Object

O

N/A

Reason for Payment Status for specific Bill multi language

->->-> english

String

O

64

Reason for Payment status for specific Bill in English

->->-> indonesia

String

O

64

Reason for Payment Status for specific Bill in Bahasa

-> freeTexts

Array of objects

O

N/A

Array with maximum 25 Objects

->-> english

String

O

32

Will be shown in Channel

->-> indonesia

String

O

32

Will be shown in Channel

-> additionalInfo

Object

O

N/A

4.1.1 Sample Response Body

Success:

{
   "responseCode":"2002500",
   "responseMessage":"Success",
   "virtualAccountData":{
      "paymentFlagReason":{
         "english":"Success",
         "indonesia":"Sukses"
      },
      "partnerServiceId":" 088899",
      "customerNo":"12345678901234567890",
      "virtualAccountNo":" 08889912345678901234567890",
      "virtualAccountName":"Jokul Doe",
      "virtualAccountEmail":"jokul@email.com",
      "virtualAccountPhone":"6281828384858",
      "trxId":"abcdefgh1234",
      "paymentRequestId":"abcdef-123456-abcdef",
      "paidAmount":{
         "value":"12345678.00",
         "currency":"IDR"
      },
      "paidBills":"95000",
      "totalAmount":{
         "value":"12345678.00",
         "currency":"IDR"
      },
      "trxDateTime":"20201231T235959Z",
      "referenceNo":"123456789012345",
      "journalNum":"123456",
      "paymentType":1,
      "flagAdvise":"Y",
      "paymentFlagStatus":"02",
      "billDetails":[
         {
            "billerReferenceId":"123456789012345678",
            "billCode":"01",
            "billNo":"123456789012345678",
            "billName":"Bill A for Jan",
            "billShortName":"Bill A",
            "billDescription":{
               "english":"Maintenance",
               "indonesia":"Pemeliharaan"
            },
            "billSubCompany":"00001",
            "billAmount":{
               "value":"12345678.00",
               "currency":"IDR"
            },
            "additionalInfo":{
               
            },
            "status":"00",
            "reason":{
               "english":"Success",
               "indonesia":"Sukses"
            }
         }
      ],
      "freeTexts":[
         {
            "english":"Free text",
            "indonesia":"Tulisan bebas"
         }
      ]
   },
   "additionalInfo":{
      
   }
}

Fail:

 

Response Code

HTTP Code

Service Code

Case Code

Response Message

Description

1

2002500

200

any

00

Successful

Successful

2

4002500

400

any

00

Bad Request

General request failed error, including message parsing failed.

3

4002501

400

any

01

Invalid Field Format {field name}

Invalid format

4

4012500

401

any

00

Unauthorized. [reason]

General unauthorized error (No Interface Def, API is Invalid, Oauth Failed, Verify Client Secret Fail, Client Forbidden Access API, Unknown Client, Key not Found)

5

4012501

401

any

01

Invalid Token (B2B)

Token found in request is invalid (Access Token Not Exist, Access Token Expiry)

6

4012503

401

any

03

Token Not Found (B2B)

Token not found in the system. This occurs on any API that requires token as input parameter

7

4042508

404

any

08

InvalidMerchant

Merchant does not exist or status abnormal

8

4042511

404

any

11

Invalid Card/Accoun t/Customer [info]/Virtual Account

Card information may be invalid, or the card account may be blacklisted, or Virtual Account number maybe invalid.

9

4042512

404

any

12

Invalid Bill/Virtual Account [Reason]

The bill is blocked/suspended/not found.Virtual account is suspend/not found.

10

4042513

404

any

13

InvalidAmount

The amount doesn't match with what supposed to

11

4092501

409

any

01

Duplicate partnerReferenceNo

Transaction has previously been processed indicates the same partnerReferenceNo already success

12

5002502

500

Any

02

External Server Error

Backend system failure, etc

6. Reference

Field Code

Field Name

Description

1

M

Mandatory

Mandatory

2

ME

Mandatory Equal

Mandatory Equal – value in the request and the response must be the same.

3

C

Conditional

Conditional

4

CE

Conditional Equal

Conditional Equal – value in the request and the response must be the same.

5

O

Optional

Optional

Bank Neo Commerce terdaftar dan diawasi oleh OJK
Bank Neo Commerce merupakan peserta penjamin LPS
All Rights Reserved. PT Bank Neo Commerce 2025