App to App Integration

1. Introduction

Plutus Smart or APOS (Android POS) is an Android-based smart transaction machine with ergonomic design, fast transaction speed and intuitive interface. Integrate it with your existing billing system for faster transaction speed.

Plutus Smart Integration allows you to access the following features:

  • Carry-out sale transactions using multiple payment modes - credit card, debit card, wallet etc.
  • Printing service to carry out bill, coupon, promotion printing using device printer
  • Batch settlement
  • View/get terminal profile info

2. Sample Use Case

  • User selects products and checkout for payment.
  • User selects payment mode and proceeds for payment.
  • Billing App calls DoTransaction API with payment-amount.
  • Plutus Smart processes the payment and prints charge slip.
  • On receiving success response, Billing App calls PrintData API with invoice details.
  • Plutus Smart prints the invoice and returns response.
  • User receives invoice receipt.
App to App Use Case

3. Inter-application Communication

Billing application will communicate with Plutus Smart APIs for transactional and other Plutus-enabled features. For this communication, it will use Messenger over Bound Service.

In this process, the service defines a Handler that responds to different types of Message objects. This Handler is the basis for a Messenger that shares an IBinder with the client, allowing the client to send commands to the service using Message objects. Additionally, the client defines a Messenger of its own to send messages back. This technique allows the apps to perform Inter-Process Communication (IPC).

4. API Integration Process

4.1 API Integration Process for Native Apps

Messenger usage flow:

  1. Plutus Smart will host a service that will implement a Handler for receiving call-back from Billing App.
  2. This handler will create a Messenger object which further creates an IBinder object which Plutus Smart service returns to Billing App.
  3. Billing App will use the IBinder object to create a Messenger object to send Messages.
  4. The service running in Plutus Smart will receive each Message in JSON string format in its Handler and corresponding API action is performed.
  5. After processing the API request, the service will respond back in JSON string format to Billing App using Messenger.

Sample Code for calling Plutus Smart API from Billing App

1. Billing App will bind to the Plutus Smart service Handler

Java

Intent intent = new Intent(); intent.setAction(PLUTUS_SMART_ACTION); intent.setPackage(PLUTUS_SMART_PACKAGE); bindService(intent, connection, BIND_AUTO_CREATE);

2. After successful binding, the Service will respond to the ServiceConnection by returning to onServiceConnected(). A new messenger will be created using returned IBinder.

Java

private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mServerMessenger = new Messenger(service); isBound = true; } @Override public void onServiceDisconnected(ComponentName name) { mServerMessenger = null; isBound = false; } };

3. A message will be created and sent using the above mServerMessenger. This message will contain the API request information.

Java

Message message = Message.obtain(null, MESSAGE_CODE); Bundle data = new Bundle(); String value = "{\"Header\": {" + "\"ApplicationId\": \"abcdefgh\"," + "\"UserId\": \"user1234\"," + "\"MethodId\": \"1004\"," + "\"VersionNo\": \"1.0\"" + "}}"; data.putString(BILLING_REQUEST_TAG, value); message.setData(data); try { message.replyTo = new Messenger(new IncomingHandler()); mServerMessenger.send(message); } catch (RemoteException e) { e.printStackTrace(); }

4. On receiving the response back from Service, Billing App will process the response in IncomingHandler.

Java

private class IncomingHandler extends Handler { @Override public void handleMessage(Message msg) { Bundle bundle = msg.getData(); String value = bundle.getString(BILLING_RESPONSE_TAG); // process the response Json as required. } }

List of Constants:

Name Value
PLUTUS_SMART_PACKAGE com.pinelabs.masterapp
PLUTUS_SMART_ACTION com.pinelabs.masterapp.SERVER
MESSAGE_CODE 1001
BILLING_REQUEST_TAG MASTERAPPREQUEST
BILLING_RESPONSE_TAG MASTERAPPRESPONSE

4.2 API Integration Process for Hybrid Apps

Plutus Smart now supports communication with apps built on hybrid platform. For this communication to happen it will use Intents. The hybrid framework used to build the billing application can provide this functionality natively or can be achieved via help of a third-party plugin.

In this process, the hybrid application defines an intent with action as "com.pinelabs.masterapp.HYBRID_REQUEST" and the request JSON as extra payload. When adding the payload as extra, the client has to use the key as "REQUEST_DATA" and then use startActivityForResult() method to launch the intent. This intent is received by the server which internally binds to the service and process the request send by the client. The result is returned via the same calling intent, the client has to define onActivityResult() to receive the result from the server and use "RESPONSE_DATA" as the key to extract data from the intent.

Example of Intent object for DoTransactionRequest in a Hybrid Application:

Java

String doTransactionPayload = "{\"Detail\":{\"BillingRefNo\":\"TX12345678\",\"PaymentAmount\":9900,\"TransactionType\":4001}," + "\"Header\":{\"ApplicationId\":\"1001\",\"MethodId\":\"1001\",\"UserId\":\"userId\",\"VersionNo\":\"1.0\"}}"; Intent intent = new Intent("com.pinelabs.masterapp.HYBRID_REQUEST"); intent.putExtra("REQUEST_DATA", doTransactionPayload); startActivityForResult(intent, REQUEST_CODE);

Note: The Request and the Response parameters will remain the same as in case of a native request. The only change is instead of using a messenger, we are passing data via extra in an Intent object.

5. Request – Header Information

Below are the parameters of Header which will be common for all API requests.

Parameter Name Description Data Type Is Mandatory
ApplicationId Unique application Id issued by Plutus System String (100) Yes
UserId Billing app user-Id/name String (100) No
MethodId Unique Method Id String (10) Yes
VersionNo API version number. For e.g. "1.0" String (10) Yes

Sample Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" } }

6. Response – Header Information

Below are the parameters of Header data which will be common for all API responses.

Parameter Name Description Data Type
ApplicationId Unique application Id issued by Plutus System String (100)
UserId Billing app user-Id/name String (100)
MethodId Unique Method Id String (10)
VersionNo API version number. For e.g. "1.0" String (10)
ResponseCode Response code String (10)

Below are the parameters of Response data which will be common for the entire APIs response.

Parameter Name Description Data Type
ResponseCode Response code String (10)
ResponseMsg Response message String (255)

Sample Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" } }

7. API Details

7.1 DoTransaction

This API will be called when the Billing App completes the product selection and is ready to accept payment from the customer. Billing App will add all required tender options in its App, and call this API with specific tender such as Sale, Prepaid redeem etc.

This API can also be used for Load, Activation, Void transaction, etc. Refer Transaction Types for complete list of transactions supported.

7.1.1 Request Parameter

S.No. Tag Name Description Data Type Is Mandatory
1 TransactionType The type of payment transaction to be processed by Plutus Smart. Refer Transaction Types for all possible values. Long Yes
2 BillingRefNo Transaction reference number from external application. Plutus will use this value for printing on charge slip. String (10) No
3 PaymentAmount Amount to be charged to card – expressed as a whole number in lowest currency unit (i.e. in paise) Long Yes
4 BankCode The acquirer bank code to which transaction will be routed. Optional in case of sale transaction if Automatic Acquirer Selection is chosen String (2) No
5 CardNumber Track 1 data of the card or Card number if manual entry. If empty, then App will ask for card input. String (76) No
6 ExpiryDate Track 2 data of the card or Expiry date if manual entry. If empty, then Plutus will ask for card input. Expiry date is in YYMM format. In case of Pine 360, if Track 1 consists of mobile or GV number, this field will indicate the card entry mode. String (37) No
7 InvoiceNo If independent transaction, then it is not required. Else in case of dependent transaction, it is the Invoice number of parent transition. String (6) No
8 IsSwipe Specifies if Swipe needs to be disabled on Plutus. By default, it is TRUE. Boolean Yes
9 Field0 Multiple Usage field String No
10 Field1 Multiple Usage field String No
11 Field2 Multiple Usage field String No
12 BatchNo If independent transaction, then it is not required. Else in case of dependent transaction, it is the Batch Id of parent transition. Integer (9001-99999) No
13 Roc If independent transaction, then it is not required. Else in case of dependent transaction, it is the Roc of parent transition. Integer (101-999) No
14 TransactionLogId If independent transaction, then it is not required. Else in case of dependent transaction, it is the Long No
15 RewardAmount Amount to be paid by reward points amount or in cash in paise (or in lowest currency) Long No
16 CustomerMobileNumber Customer mobile number if required to be captured. Can be used for sending SMS for charge slip. If there are more than one value pipe separated format can be used. String (100) No
17 CustomerEmailId Customer email Id if required to be captured. Can be used for sending SMS for charge slip. If there are more than one value pipe separated format can be used. String (500) No
18 MerchantMobileNumber Merchant mobile number if required to be captured. Can be used for Number(s) sending SMS for charge slip. If there are more than one value pipe separated format can be used. String (100) No
19 MerchantEmailId Merchant email Id if required to be captured. Can be used for sending SMS for charge slip. If there are more than one value pipe separated format can be used. String (500) No
20 ConsentCustomerMobile By default, this is FALSE. If this parameter is set as TRUE, it is assumed that the merchant has taken consent from customer for sending charge slip on his/her mobile number(s). Boolean No
21 ConsentCustomerEmailId By default, this is FALSE. If this parameter is set as TRUE, it is assumed that the merchant has taken consent from customer for sending charge slip on his/her email id(s). Boolean No
22 ConsentMerchantMobile By default, this is FALSE. If this parameter is set as TRUE, it is assumed that the merchant gives consent for sending charge slip on his/her mobile number. Boolean No
23 ConsentMerchantEmailId By default, this is FALSE. If this parameter is set as TRUE, it is assumed that the merchant gives consent for sending charge slip on his/her email id(s). Boolean No
24 WalletProgramId This ID will be assigned by Pine labs to each wallet program type. While performing any Wallet transaction this field needs to set to identify wallet host. Long No
25 AdditionalInfo Map of key value pairs to capture additional transactional data. MaxLength allowed is 10 elements. Allowed for sale transaction type (4001) only. HashMap<String, String> No
 
Key
Value

Key Name
Value Text

String (25)
String (25)
26 MobileNumberForEChargeSlip Mobile Number for printing E-chargeslip String (10) No

Sample JSON Request

7.1.1.1 Card Sale

For Sale Transaction of amount of Rs 99990.00 with Additional Info Details

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "4001", "BillingRefNo": "TXN12345678", "PaymentAmount": "9999000", "MobileNumberForEChargeSlip": "9876543210", "AdditionalInfo": { "Split1": "99991", "Split2": "99992", "Split3": "99993" } } }

7.1.1.2 Void

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "4006", "BillingRefNo": "TXN12345678", "PaymentAmount": "9999000", "BankCode": "01", "InvoiceNo": "000012" } }

7.1.1.3 UPI Sale

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "4006", "BillingRefNo": "TXN12345678", "PaymentAmount": "9999000", "BankCode": "01", "InvoiceNo": "000012", } }

7.1.1.4 UPI Get Status

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "5122", "BillingRefNo": "TXN12345678", "PaymentAmount": "9999000" } }

7.1.2 Response Parameter

Tag Name Description Data Type
BillingRefNo Transaction reference number from external application. Plutus will only use this value for printing on charge slip. String (10)
ApprovalCode Credit card authorization code if transaction was approved. Otherwise empty string. Presence of non-zero length approval code string indicates successful authorization of transaction. This logic holds true for Pine 360 transactions as well String (6)
HostResponse Response string if a response for transaction was received from bank switch. Otherwise, if any error occurs before response is received, this is an empty string. String (50)
CardNumber Card number will be present if card was swiped. Otherwise, empty string. String (19)
ExpiryDate Card expiration date, expressed in format YYMM, if valid card was swiped. Otherwise, empty string. Some acquirers mandate Expiry date to be masked, in that case a value of “XXXX” will be returned. String (4)
CardholderName Cardholder’s name from card track 1, if valid card was swiped and card holder name present on Track 1. Otherwise, empty string String (25)
CardType Card association name if valid card was swiped. Otherwise, empty string. E.g. “VISA” String (12)
InvoiceNumber EFT transaction invoice number if transaction authorized. Otherwise, 0/EDC ROC (the same is printed on charge slip) Long
BatchNumber EFT transaction batch number if transaction authorized. Otherwise, 0/EDC Batch ID (in case of Reward transaction) Long
TerminalId EFT TID if transaction authorized. Otherwise, empty string String (8)
LoyaltyPointsAwarded Loyalty point awarded, if any. Long
Remark Description of error if an error occurs. Otherwise, empty string. An empty string in this field DOES NOT imply successful transaction authorization String (100)
AcquirerName Name of acquirer to which transaction was routed. E.g. “ICICI BANK” String (48)
MerchantId EFT ME ID if transaction authorized. Otherwise, empty string String (15)
RetrievalReferenceNumber EFT RRN if transaction authorized. Otherwise, empty string String (12)
CardEntryMode Enumeration of Card Entry modes: 0 – Manual entry 1 – Swipe entry 2 – Chip card entry Any other value – card not validated Integer
PrintCardholderName This is used if external application is to print Plutus chargeslip. 0 – Do not print cardholder’s name 1 – Print cardholder’s name Any other value – card not validated. Integer
MerchantName Merchant name if transaction authorized. Otherwise, empty string String (23)
MerchantAddress Merchant address line if transaction authorized. Otherwise, empty string String (23)
MerchantCity Merchant city line if transaction authorized. Otherwise, empty string String (23)
PlutusVersion Plutus Version String (40)
AcquiringBankCode Code for bank used for processing transaction. Enumeration of possible values: 01 – HDFC BANK 02 – ICICI BANK 03 – AMERICAN EXPRESS 04 – CITIBANK 05 – AXIS BANK 06 – SBI 07 – HSBC 09 – CORP BANK 10 – CUB (City Union Bank) 14 – IDBI Bank 17 – LVB (Lakshmi Vilas Bank) 51- PINE 360 81 – Loyalty Reward 82 – Aimia Integer
RewardRedeemedAmount Redeemed Amount in Paise Long
RewardRedeemedPoints Redeemed Points Double
RewardBalanceAmount Balance Amount String (10)
RewardBalancePoints Balance Points Double
Field0 Multiple Usage Field String
CouponCode Card Processing Fee in Rs. (decimal) Or Coupon Code. Coupon code is the value which will be coming as a response to voucher redemption. This field will be present in case of voucher redemption. String (23)
AmountProcessed Amount will be in paise or lowest currency. String (99)
Field3 Multiple Usage Field String
Field4 Multiple Usage Field String
TransactionDate Date of the Transaction as per acquiring host. Date to be printed on charge slip. In MMDDYYYY Format. String (8)
TransactionTime Time of the Transaction as per acquiring host. Time to be printed on charge slip. HHMMSS where HH in 24-hour format. String (6)
PineLabsClientId Unique ID assigned to Pine Labs EDC. Integer
PineLabsBatchId Batch ID of Pine Labs EDC Integer
PineLabsRoc ROC of Pine Labs EDC Integer
AdditionalInfo Reserved for Future use Array []
Key Key Name String (10)
Value Value Text String (100)

Sample JSON Response

JSON

{ "Header": { "ApplicationId": "1001", "MethodId": "1001", "UserId": "userId", "VersionNo": "1.0" }, "Response": { "AppVersion": "250624", "ParameterJson": "parameter", "ResponseCode": 0, "ResponseMsg": "APPROVED" }, "Detail": { "AcquirerName": "ICICI BANK", "AcquiringBankCode": "02", "ApprovalCode": "0", "AuthAmoutPaise": "9900", "BatchNumber": 60, "BillingRefNo": "TX12345678", "CardEntryMode": "CARD_CHIP", "CardNumber": "************1461", "CardType": "VISA", "CardholderName": "PAVAN KUMAR", "ExpiryDate": "XXXX", "HostResponse": "APPROVED", "InvoiceNumber": 262, "LoyaltyPointsAwarded": 0, "MerchantAddress": "JANAKPURI", "MerchantCity": "NEW DELHI DEL ", "MerchantId": " ", "MerchantName": "LOVE COMMUNICATION", "PlutusTransactionLogID": "4295355970", "PlutusVersion": "7B2243617264496E666F223A7B224163636F756E7454797065223A2243524544495422 2C2243617264436174656D", "PosEntryMode": 2, "PrintCardholderName": 1, "Remark": "PROCESSED", "RetrievalReferenceNumber": "000000000020", "TerminalId": "09082023", "TransactionDate": "06242025", "TransactionTime": "154500", "TransactionType": 4001, "isTransitMode": false } }

UPI Sample JSON Response

JSON

{ "Header": { "ApplicationId": "1001", "MethodId": "1001", "UserId": "userId", "VersionNo": "1.0" }, "Response": { "AppVersion": "250624", "ParameterJson": "parameter", "ResponseCode": 0, "ResponseMsg": "APPROVED" }, "Detail": { "AcquirerName": "HDFC UPI", "AcquiringBankCode": "2", "AmountProcessed": "100", "ApprovalCode": "321600", "AuthAmoutPaise": "100", "BatchNumber": 9053, "BillingRefNo": "1245", "CardType": "UPI", "Cardtypevariant": "9053|113|1245", "HostResponse": "APPROVED", "InvoiceNumber": 113, "LoyaltyPointsAwarded": 0, "MerchantAddress": "ROOPALI HOTEL KALWA CHOWK ROOPALI HOTEL ", "MerchantCity": "JUNAGADH", "MerchantId": "HDFC000027203551", "MerchantName": "Engineer auto center", "PlutusTransactionLogID": "321600", "PlutusVersion": "7b22506c7574757356657273696f6e223a2276312e302e30222c2254786e496e666f22 3a7b2242617463684964223a223930", "PrintCardholderName": 0, "Remark": "APPROVED", "TerminalId": "1000000667", "TransactionDate": "06242025", "TransactionTime": "155617", "TransactionType": 5122, "isTransitMode": false } }

UPI Get Status Sample JSON Response

JSON

{ "Response": { "ResponseCode": 100, "ResponseMsg": "TRANSACTION INITIATED CHECK GET STATUS", "AppVersion": "150", "ParameterJson": "parameter" }, "Header": { "UserId": "***123**123***", "VersionNo": "1.0", "ApplicationId": "932e1a2d-59a5-4ac0-a368-ad011afbda38", "MethodId": "1001" }, "Detail": { "Remark": "TRANSACTION INITIATED CHECK GET STATUS", "PrintCardholderName": 0, "PlutusVersion": "v1.0.0", "AmountProcessed": "100", "BillingRefNo": "OR158720200214-9-1", "AcquirerName": "HDFC UPI", "AcquiringBankCode": "2", "TerminalId": "20000401", "InvoiceNumber": 109, "MerchantId": "HDFC000000649003", "MerchantCity": "NOIDA", "MerchantAddress": "Noida", "TransactionTime": "155118", "HostResponse": "TRANSACTION INITIATED CHECK GET STATUS", "PineLabsBatchId": 100, "TransactionDate": "02142020", "MerchantName": "BFL_Store", "PineLabsRoc": 5120, "CardType": "UPI", "BatchNumber": 9031, "LoyaltyPointsAwarded": 0 }

This API will be called when Billing App wants to print paper-receipt on Plutus Smart Device.

7.2.1 Request Parameter

Tag Name Description Type Is Mandatory
PrintRefNo Unique reference number from Billing App String (10) Yes
SavePrintData Set this parameter to save the Print Data at Plutus Smart Device. Default value is TRUE Boolean Yes
Data Array of print lines Array [] Yes
PrintDataType Data Type will be as following PrintText =0 PrintImageByPath =1 PrintImageDump =2 PrintBarcode=3 PrintQRCode=4 Integer Yes
PrinterWidth Line Width of Printer, Possible values: 24,32,48 Integer Yes
IsCenterAligned It will contain true or false for data to be printed in center-aligned or not Boolean Yes
DataToPrint It contains data to print in form of String. String No
ImagePath It contains image path from Device external storage String No
ImageData It contains image data in form of encoded string String No
PrintDataInfo Reserved for Future use Array [] No
Key Key Name String (10) No
Value Value Text String (100) No
AdditionalInfo Reserved for Future use Array [] No
Key Key Name String (10) No
Value Value Text String (100) No
FontFilePath Location of font file in external storage String No
fontSize > 0, updated as per the value. <= 0, Existing/default functionality is applied. Integer No
textStyle 0 = Normal 1 = Bold 2 = Underline 4 = Italic else normal Integer No
lineSpacing lineSpacing > 0, Line spacing is updated as per the value. <= 0, Default line spacing is applied. Integer No

Note: To support the dynamic font family in charge slip printing, we have added one parameter “FontFilePath” in Print API, to print the charge slip according to font family which is passed in API.

  • If fontFilePath is passed to api, and if file exist at that location then charge slip will be printed according to passed font in API, otherwise default default will be use to print charge slip.
  • For example, if font name is xyz.ttf and it is present in external storage without any folder, then pass FontFilePath as “xyz.ttf” in API.
  • For example if font name is xyz.ttf and it is present

Sample JSON Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1002", "VersionNo": "1.0" }, "Detail": { "PrintRefNo": "123456789", "SavePrintData": true, "Data": [ { "PrintDataType": "0", "PrinterWidth": 24, "IsCenterAligned": true, "DataToPrint": "String Data", "ImagePath": "0", "ImageData": "0", "fontSize": 15, "lineSpacing": 0, "textStyleType": 4 }, { "PrintDataType": "1", "PrinterWidth": 24, "IsCenterAligned": true, "DataToPrint": "", "ImagePath": "Image Path", "ImageData": "0" }, { "PrintDataType": "2", "PrinterWidth": 24, "IsCenterAligned": true, "DataToPrint": "", "ImagePath": "", "ImageData": "Image Data String" }, { "PrintDataType": "3", "PrinterWidth": 24, "IsCenterAligned": true, "DataToPrint": "Bar Code Data in String", "ImagePath": "", "ImageData": "" }, { "PrintDataType": "4", "PrinterWidth": 24, "IsCenterAligned": true, "DataToPrint": "QR Code Data in String", "ImagePath": "", "ImageData": "" } ] } }

7.2.2 Response Parameter

Tag Name Description Type
ResponseCode Response codes for printer response: PRINTER_SUCCESS = 0; PRINTER_FAILED = 1; PRINTER_BUSY = 1001; PRINTER_OUT_OF_PAPER = 1002; PRINTER_LOW_PAPER = 1003; PRINTER_LOW_BATTERY = 1004; PRINTER_HARDWARE_ERROR = 1005; PRINTER_OVERHEAT = 1006; PRINTER_BUFFER_OVERFLOW = 1007; PRINTER_PAPER_ALIGN_POSITION = 1008; PRINTER_PAPER_JAM = 1009; PRINTER_CUT_POSITION_ERROR = 1010; Integer
ResponseMessage Response message for Printer response: SUCCESS FAILED PRINTER IS BUSY PRINTERIS OUT OF PAPER PRINTER HAS LOW PAPER PRINTER_LOW_BATTERY PRINTER HARDWARE ISSUE PRINTER IS OVERHEAT PRINTER BUFFER OVERFLOW PAPER IS NOT ALIGNED PROPERLY PAPER STUCKED PAPER CUT KNIFE IS NOT IN ORIGINAL PLACE String
AppVersion Peripheral App Version String
ParameterJson Additional parameters to be sent String

Sample JSON Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1002", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "AppVersion": "Plutus v1.5" } }

7.3 Settlement

There are two ways to settle the current batch of payment transactions:

  • Settlement API can be used to settle current batch in Plutus Smart App. On calling this API and successful response, charge slip will be printed on the terminal.
  • User can go to Plutus Smart App menu to manually settle the batch.

7.3.1 Request Parameter

Sample JSON Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1003", "VersionNo": "1.0" } }

7.3.2 InResponse Parameter

Tag Name Description Data Type
SettlementSummary Settlement Summary Data in List Format Array []
BatchName Batch name String
AcquirerCode Acquirer Code String
TID Terminal Identifier String
MID Merchant Identifier String
CreditCount Count of Credit transactions in batch Long
CreditAmount Total Credit Amount in smallest unit Long
DebitCount Count of Debit transactions in batch Long
DebitAmount Total Debit Amount in smallest unit Long
SettlementInfo Reserved for future use Array []
Key Key Name String (10)
Value Value Text String (100)
AdditionalInfo Reserved for Future use Array []
Key Key Name String (10)
Value Value Text String (100)
Sample JSON Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1003", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "SettlementSummary": [ { "BatchName": "HDFC", "AcquirerCode": "01", "TID": "01000234", "MID": "123411234", "CreditCount": 10, "CreditAmount": 502100, "DebitCount": 5, "DebitAmount": 324000 }, { "BatchName": "ICICI", "AcquirerCode": "02", "TID": "013000123", "MID": "123411224", "CreditCount": 1, "CreditAmount": 2100, "DebitCount": 0, "DebitAmount": 324000 } ] } }

7.4 Get Terminal Info

This API will be called when the Billing App wants to get terminal details configured on Plutus Smart Device. It is an optional API, can be used to fetch and display store information on Billing App.

7.4.1 Request Parameter

Sample JSON Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1004", "VersionNo": "1.0" } }

7.4.2 Response Parameter

Tag Name Description Type
PlutusStoreId Plutus Store Identifier String (50)
PlutusTerminalId Plutus Terminal ID / Client ID / POS ID String (50)
SerialNumber Terminal Serial number String (100)
MerchantName Merchant Name String (100)
StoreName Store Name String (100)
AdditionalInfo This Array will hold additional information Object []
Key Tag name String (10)
Value Tag Value String (100)
Sample JSON Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1005", "VersionNo": "1.0" }, "Detail": { "BaseSerialNumber": "121234" } }

7.5 Connect Bluetooth

This API will be called when the Billing App wants to connect Bluetooth on Plutus Smart Device.

7.5.1 Request Parameter

Tag Name Description Type Is Mandatory
BaseSerialNumber Base Serial Number is defined at the back side of the base String Yes
Version Version of the API String No

Sample JSON Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1005", "VersionNo": "1.0" }, "Detail": { "BaseSerialNumber": "121234" } }

7.5.2 Response Parameter

Tag Name Description Type
ResponseCode BLUETOOTH_CONNECTION_SUCCESS = 0;
BLUETOOTH_CONNECTION_FAILED = 1;
DEVICE_ALREADY_CONNECTED = 2;
BLUETOOTH_IS_OFF = 3;
INVALID_BASE_SERIAL_NUMBER = 4;
Integer
ResponseMessage Bluetooth Connection Success
Bluetooth Connection Failed
Device Already connected with base over Bluetooth
Bluetooth is disable Please enable Bluetooth
Base serial number is invalid
String
AppVersion Peripheral App Version String
ParameterJson Additional parameters to be sent String
Sample JSON Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1005", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" } }

7.6 Disconnect Bluetooth

This API will be called when the Billing App wants to Disconnect Bluetooth on Plutus Smart Device.

7.6.1 Request Parameter

Sample JSON Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1006", "VersionNo": "1.0" } }

7.6.2 Response Parameter

Tag Name Description Type
ResponseCode BLUETOOTH_CONNECTION_SUCCESS = 0; Integer
ResponseMessage Bluetooth Disconnection Success String
AppVersion Peripheral App Version String
ParameterJson Additional parameters to be sent String
Sample JSON Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1006", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Bluetooth Disconnection Success" } }

7.7 Scan QR Code/Barcode

This API will be called when the Billing App wants to do single or multi scan any QR/Barcode on Plutus Smart Device.

7.7.1 Scan Request Parameter

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1007", "VersionNo": "1.0" } }

7.7.2 Scan Response Parameter

Tag Name Description Type
ResponseCode SUCCESS = 0;
DEVICE_UNCONNECTED = 5;
SCANNER_NOT_FOUND = 6;
SCANNER_DATA_RECEIVE_SUCCESS = 10;
SCANNER_DATA_RECEIVE_FAILED = 11;
APPLICATION_BUSY = 2001;
UNKNOWN_ERROR = 2099;
Integer
ResponseMessage Success
Device is not connected with base or USB device not found
Scanner not found
Data Scanned Success
Data Scanned Failed
Application is busy
Unknown Error
String
AppVersion Peripheral App Version String
ParameterJson Additional parameters to be sent String

Sample JSON Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1007", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "ScannedData": "2345" } }

7.8 Upload Invoice

This API uploads an invoice data coming from the Billing App to the server.

7.8.1 Request Parameter

Tag Name Description Type Is Mandatory
BillingUserNameUsernameString (10)No
CustomerCustomer DataObjectNo
AddressLine1Address Line 1String (50)No
AddressLine2Address Line 2String (50)No
CityCity NameString (50)No
CountryCountry NameString (50)No
DOBDate of Birth in YYYY-MM-DD FormatString (10)No
EmailEmail AddressString (256)No
FirstNameFirst NameString (50)No
GenderGender (MALE/FEMALE)String (10)No
LastNameLast NameString (50)No
PhonePhone NumberString (20)No
PinCodePin CodeIntegerNo
StateStateString (50)No
DiscountTotalValueTotal discount valueLongNo
GrossBillGross Bill AmountLongNo
InvoiceNumberInvoice NumberLongNo
NetBillNet Bill AmountLongNo
OrderCreationTimeLocalOrder creation time in YYYY-MM-DD formatString (10)No
OrderIdOrder IdString (20)No
PaymentStatusPayment Status (PAID/PENDING)String (10)No
PaymentsList of PaymentsArray []No
AmountAmountLongNo
CardTypeCard Type (Credit/Debit)String (10)No
PaymentIdPayment IdString (20)No
PaymentTypePayment Type (Cash/Card)String (10)No
ProductsList of ProductsArray []No
AdditionalChargeValueAdditional Charge ValueLongNo
BarCodeBar CodeLongNo
DiscountTotalValueDiscount Total ValueLongNo
ProductBasePriceProduct Base PriceLongNo
ProductIdProduct IdString (20)No
ProductNameProduct NameString (50)No
ProductValueProduct ValueLongNo
QuantityQuantityLongNo
SkuIdSKU IDLongNo
TaxTotalValueTax Total ValueLongNo
VoidAmountVoid AmountLongNo
VoidQuantityVoid QuantityLongNo
StatusStatus (Delivered/Pending)String (10)No
TaxesTaxesLongNo

Sample JSON Request

JSON

{ "Detail": { "BillingUserName": "nikhil", "Customer": { "AddressLine1": "E-block, Sector-62", "AddressLine2": "", "City": "Noida", "Country": "India", "DOB": "1992-06-13", "Email": "himanshu@gmail.com", "FirstName": "Himanshu", "Gender": "MALE", "LastName": "Jain", "Phone": 8506062503, "PinCode": 201309, "State": "Uttar Pradesh" }, "DiscountTotalValue": 50, "GrossBill": 5500, "InvoiceNumber": 1, "NetBill": 5000, "OrderCreationTimeLocal": "2019-04-01", "OrderId": "OR-123-1", "PaymentStatus": "PAID", "Payments": [ { "Amount": 2000, "CardType": "", "PaymentId": "123", "PaymentType": "PAYMENT_CASH" }, { "Amount": 3500, "CardType": "CARD_VISA", "PaymentId": "456", "PaymentType": "PAYMENT_CARD" } ], "Products": [ { "AdditionalChargeValue": 0, "BarCode": 0, "DiscountTotalValue": 50, "ProductBasePrice": 1000, "ProductId": "PROD2001", "ProductName": "Food Packet", "ProductValue": 5500, "Quantity": 5, "SkuId": 0, "TaxTotalValue": 100, "VoidAmount": 0, "VoidQuantity": 0 } ], "Status": "DELIVERED", "Taxes": 100 }, "Header": { "ApplicationId": "1001", "MethodId": "1008", "UserId": "1234", "VersionNo": "1.0" } }

7.8.2 Response Parameter

Tag Name Description Type
TerminalLogIdIdentifier that identifies the log in that terminalInteger
TerminalIdIdentifier to identify a terminalString (8)
ResponseCode SUCCESS = 0;
UPLOAD_INVOICE_NETWORK_ERROR = 23;
UPLOAD_INVOICE_ERROR = 24;
Integer
ResponseMsg Success
Saved locally, Upload to server failed
Unable to save invoice data. Please Retry
String

Sample JSON Response

JSON

{ "ApplicationId": "1001", "UserId": "userId", "MethodId": "1008", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "TerminalLogId": 2, "TerminalId": "30000001" }

7.9 Single/Multi Scan QR/Barcode Code from Camera

This API will be called when the Billing App wants to do single/multi scan any QR/Barcode through Camera on Plutus Smart Device.

7.9.1 Request Parameter

Single Scan Sample JSON Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1009", "VersionNo": "1.0" } }
Multi Scan Sample JSON Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1010", "VersionNo": "1.0" } }

7.9.2 Response Parameter

Tag Name Description Data Type
ResponseCode SUCCESS = 0;
APPLICATION_BUSY = 2001;
UNKNOWN_ERROR = 2099;
Integer
ResponseMessage Success
Application is busy
Unknown Error
String
ScannedData Barcode code value String
Single Scan Sample JSON Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1009", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "ScannedData": "2345" } }
Multi Scan Sample JSON Response

JSON

{ "Detail": { "ScannedDataList": [ { "itemCount": 10, "itemValue": "\\000026https://www.samsung.com/au/support/" }, { "itemCount": 12, "itemValue": "http://en.m.wikipedia.org" }, { "itemCount": 17, "itemValue": "http://bit.ly/GiraDischi" } ] }, "Header": { "ApplicationId": "1001", "MethodId": "1010", "UserId": "userId", "VersionNo": "1.0" }, "Response": { "AppVersion": "161", "ParameterJson": "parameter", "ResponseCode": 0, "ResponseMsg": "Data Scanned Success" } }

7.10 Transit Mode (NCMC) Transactions Support

This section describes the API support for Transit Mode (NCMC) transactions.

Transaction Type Integration Mode HAT
Offline Purchase4001
Service Creation4122
Load Money4119
Balance Update4120
Balance Inquiry4121

Request Parameters details

Tag Name Description Type Is Mandatory
TransactionTypeThe type of payment transaction to be processed by Plutus Smart. Refer Transaction Types for all possible values.LongYes
serviceIDService ID (TAG DF16)StringYes
serviceMIService Management Info (Tag DF15) is used for multiple purposes during Service creation as well as Service update.StringYes
isTransitModeTrue – If transit NCMC transaction
False – Retail or Non NCMC transaction
BooleanYes
paymentModeLoad Money via Cash – CASH
Load Money via Account – ACCOUNT
Mandatory for Load money
StringNo
serviceDataService Data (TAG – DF45) (max 96 bytes)StringYes
PaymentAmountAmount to be charged to card – expressed as a whole number in lowest currency unit (i.e. in paise)StringYes
BillingRefNoTransaction reference number from external application. Plutus will only use this value for printing on charge slip.StringYes

Response Parameters Details

Tag Name Description Type Is Mandatory
TransactionTypeThe type of payment transaction to be processed by Plutus Smart. Refer Transaction Types for all possible values.LongYes
serviceIDService ID (TAG DF16)StringYes
paymentModeLoad Money via Cash – CASH
Load Money via Account – ACCOUNT
Mandatory for Load money
StringNo
cardBalanceTotal balance available on CardStringYes
BillingRefNoTransaction reference number from external application. Plutus will only use this value for printing on charge slip.StringYes
AuthAmountPaiseAmount will be in paise or lowest currency.StringYes
CardNumberMasked Card NumberStringNo
CardholderNameCardholder’s name from card track 1, if valid card was swiped and card holder name present on Track 1. Otherwise, empty stringStringNo
ExpiryDateCard expiration date, expressed in format YYMM, if valid card was swiped. Otherwise, empty string. Some acquirers mandate Expiry date to be masked, in that case a value of “XXXX” will be returned.StringNo
CardTypeCard association name if valid card was swiped/Dip/Tap. Otherwise, empty string. E.g. “RUPAY”StringNo
PlutusTransactionLogIDPlutus Transaction Reference NumberStringYes
TransactionDateDate of the Transaction as per acquiring host. Date to be printed on charge slip. In MMDDYYYY Format.StringYes
TransactionTimeTime of the Transaction as per acquiring host. Time to be printed on charge slip. HHMMSS where HH in 24-hour format.StringYes
PineLabsClientIdUnique ID assigned to Pine Labs EDC.LongYes
PineLabsBatchIdBatch ID of Pine Labs EDCIntegerYes
PineLabsRocROC of Pine Labs EDCIntegerYes

7.10.1 Offline Purchase

For Sale Transaction of amount of Rs 115.00

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "4001", "serviceID": "1010", "serviceMI": "9100", "isTransitMode": true, "serviceData": "Service Data (max 96 bytes)", "BillingRefNo": "TXN12345678", "PaymentAmount": "11500" } }

Response Sample

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "BillingRefNo": "105", "TransactionType": 4001, "AuthAmountPaise": "100", "CardNumber": "438624*******2802", "ExpiryDate": "0406", "CardholderName": "AMITMOHAN", "CardType": "RUPAY", "InvoiceNumber": 11, "PlutusTransactionLogID": "4296309778", "TransactionDate": "02012011", "TransactionTime": "210403", "PineLabsClientId": 12345, "PineLabsBatchId": 9002, "PineLabsRoc": 105, "serviceID": "1010", "cardBalance": 7690 } }

7.10.2 Service Creation

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "4122", "serviceID": "1010", "serviceMI": "9100", "isTransitMode": true, "serviceData": "Service Data (max 96 bytes)", "BillingRefNo": "TXN12345678" } }

Response Sample

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "BillingRefNo": "105", "TransactionType": 4122, "CardNumber": "438624*******2802", "ExpiryDate": "0406", "CardholderName": "AMITMOHAN", "CardType": "RUPAY", "InvoiceNumber": 11, "PlutusTransactionLogID": "4296309778", "TransactionDate": "02012011", "TransactionTime": "210403", "PineLabsClientId": 12345, "PineLabsBatchId": 9002, "PineLabsRoc": 105, "serviceID": "1010" } }

7.10.3 Load Money

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "4119", "serviceID": "1010", "serviceMI": "9100", "isTransitMode": true, "serviceData": "Service Data (max 96 bytes)", "paymentMode": "CASH/ACCOUNT", "BillingRefNo": "TXN12345678", "PaymentAmount": "11500" } }

Response Sample

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "BillingRefNo": "105", "TransactionType": 4119, "AuthAmountPaise": "100", "CardNumber": "438624*******2802", "ExpiryDate": "0406", "CardholderName": "AMITMOHAN", "CardType": "RUPAY", "InvoiceNumber": 11, "PlutusTransactionLogID": "4296309778", "TransactionDate": "02012011", "TransactionTime": "210403", "PineLabsClientId": 12345, "PineLabsBatchId": 9002, "PineLabsRoc": 105, "paymentMode": "CASH/ACCOUNT", "serviceID": "1010", "cardBalance": 7690 } }

7.10.4 Balance Update

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "4120", "serviceID": "1010", "serviceMI": "9100", "isTransitMode": true, "serviceData": "Service Data (max 96 bytes)", "BillingRefNo": "TXN12345678" } }

Response Sample

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "BillingRefNo": "105", "TransactionType": 4120, "CardNumber": "438624*******2802", "ExpiryDate": "0406", "CardholderName": "AMITMOHAN", "CardType": "RUPAY", "InvoiceNumber": 11, "PlutusTransactionLogID": "4296309778", "TransactionDate": "02012011", "TransactionTime": "210403", "PineLabsClientId": 12345, "PineLabsBatchId": 9002, "PineLabsRoc": 105, "serviceID": "1010", "cardBalance": 7690 } }

7.10.5 Balance Enquiry

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Detail": { "TransactionType": "4121", "serviceID": "1010", "serviceMI": "9100", "isTransitMode": true, "serviceData": "Service Data (max 96 bytes)", "BillingRefNo": "TXN12345678" } }

Response Sample

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1001", "VersionNo": "1.0" }, "Response": { "ResponseCode": "0", "ResponseMsg": "Success" }, "Detail": { "BillingRefNo": "105", "TransactionType": 4121, "CardNumber": "438624*******2802", "ExpiryDate": "0406", "CardholderName": "AMITMOHAN", "CardType": "RUPAY", "InvoiceNumber": 11, "PlutusTransactionLogID": "4296309778", "TransactionDate": "02012011", "TransactionTime": "210403", "PineLabsClientId": 12345, "PineLabsBatchId": 9002, "PineLabsRoc": 105, "serviceID": "1010", "effDate": "yyMMdd", "serviceData": "Service Data (max 96 bytes)" } }

7.11 Additional Settings Request

We are introducing an additionalSettings object in the API request to allow flexible feature control. Initially, this object will support the key:

  • kiosk_mode: true or false
    When set to true, the device will enter kiosk mode. When set to false, kiosk mode will be disabled.

This structure is designed to be extensible, so additional keys can be added in the future without breaking existing integrations. Any new actions or controls will follow the same pattern under the additionalSettings object.

7.11.1 Request Parameter

Tag Name Description Type
additionalSettingsWrapper for all additional settingsObject
kiosk_modeSet Kiosk_mode = true/false to enable/disable KIOSK MODE in plutus smart deviceBoolean

Sample JSON Request

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1018", "VersionNo": "1.0" }, "Detail": { "additionalSettings": { "kiosk_mode": true } } }

7.11.2 Response Parameter

Sample JSON Response

JSON

{ "Header": { "ApplicationId": "abcdefgh", "UserId": "user1234", "MethodId": "1018", "VersionNo": "1.0" }, "Response": { "AppVersion": "010125", "ResponseCode": "0", "ResponseMsg": "Success" } }

8. Printing Via Browser

This Api will be used to print charge slip via browser

Sample Request URL

JSON

masterapp://pinelabs?reqPath=download/data.json&resPath=http://192.168.1.0:5500/html3

Request Parameters details

Tag Name Description Type Is Mandatory
masterapp Scheme String Yes
pinelabs host String Yes
reqPath Path for json file for print request (Refer 8.2 (Print data) section to create JSON file) (This request will be saved in storage) String Yes
resPath Website URL to send response to web after successful chargeslip printing. The path where the terminal will send back the response (success or failure) String No

Sample Response

JSON

http:192.168.1.0:5500/merchant.html?resCode=0&resMsg=Print%20Successful

Response Parameters details

Tag Name Description Type Is Mandatory
resCode Response Code (Refer 8.2.2) String Yes
resMsg Response Message (Refer 8.2.2) String Yes
resPath Passed same app receive in request from web URI Yes

Request Handling (Merchant Web):

The merchant’s web application constructs a deeplink URL to request the terminal to print a charge slip.

JSON

//filename – file path //userInputTest – Response Url setTimeout(function() { const path = masterapp://pinelabs?reqPath=download/${fileName}&resPath=${userInputText}; window.open(path); }, 500);

Response Handling (Merchant Web):

When the terminal finishes processing the charge slip, it will return a resCode and resMsg to the resPath. The merchant’s web page can capture this response.

JSON

<script type="text/javascript"> function getQueryParam(name) { var urlParams = new URLSearchParams(window.location.search); return urlParams.get(name); } // Extract data from the URL when the page loads window.onload = function() { var data = getQueryParam('resMsg'); if (data) { alert("Received data from the app: " + data); // Handle the data from the app setTimeout(function() { window.close(); // Close the page after 5 seconds }, 2000); // 5000 milliseconds (5 seconds) window.onbeforeunload = function() { window.close(); // Close the window when the user clicks OK }; } }; </script>

9. Security Requirement

Following minimum requirements should be ensured for all existing or new Third party service providers:

  1. Due diligence should be performed on vendor financial stability before an agreement is entered with Third party service provider. Pine Labs and Third party may enter in escrow agreement in case of any issues.
  2. Non-disclosure agreement (NDA) to be executed between Pine Labs and Third-party service provider:
    • Pine Labs defined NDA shall be executed with Third party service provider but not limited to liabilities, security and confidentiality requirements.
  3. Application Security Assessment document:
    1. Application Secure Code Review Report: Application secure code review report shall be obtained from vendor which would have been tested against OWASP and SANS and the same shall be shared with Information Security group before testing.
    2. Application Pentest Report: Application penetration testing report and assessment report should be obtained from Third party service provider which is tested against OWASP & SANS requirement. The same shall be shared with Information Security group before testing.
  4. Business should review change management process in place with Third party service provider.
  5. Business should review processes in place by Third party service provider to periodically share patches for applications to minimize risks to Pine Labs.
  6. Following technical controls should be evaluated by Business such as:
    • Application interface authentication
    • Data masking techniques
    • RESTful API's
  7. Security Assessment Ownership and Requisite: Security assessment on Third party application will be under ownership of Pine Labs information security team. QA team shall provide following details for Security Assessment:
    Sr. No. Question Response
    1 Company Name 3rd Party Name
    2 Application Details Complete use case of Application
    3 Request and Response Parameter
    4 Application Login Account username and password
  8. Security Assessment by Pine Labs: Post Compliance to above mentioned requirements from A to F, Information security group at Pine Labs will conduct an assessment on the application to identify security-related weaknesses in the application as per OWASP & SANS guidelines.
  9. Internal Approval: Pine Labs Security team also requires approval from Integration Team Head before initiating any signing or security Assessment of application.

10. Glossary

10.1 Response Code

For all API successful responses, Response Code will be set to zero.

Code Message
1App not activated
2Already activated
3Invalid Method Id
4Invalid User/Pin
5User blocked for max attempt
6Permission denied for this user
7Invalid data-format
100TRANSACTION INITIATED CHECK GET STATUS (Note- Get status need to call If response code 100 received.)

10.2 Method ID's

These Method ID's need to use in request parameter to perform different actions.

Code Message
1001Do Transaction
1002Print Data
1003Settlement
1004Get Terminal Info
1005Connect Bluetooth
1006Disconnect Bluetooth
1007Scan Code
1008Upload Invoice
1009Single Scan QR/Barcode from Camera
1010Multi-Scan QR/Barcode from Camera

10.3 Transaction Types

These transaction type values can be use in DoTransaction Method ID to perform different transactions.

Sr. No. Transaction Description Transaction Type Value
1Sale Transaction4001
2Refund Transaction4002
3Tip Adjust Transaction4015
4Adjust Transaction4005
5Void Transaction4006
6Pre Auth Transaction4007
7Sale Complete Transaction4008
8Loyalty Mine redemption4201
9mWallet redemption4214
10Pine 360 Loyalty Award4208
11Pine 360 Loyalty Redeem4209
12Pine 360 Loyalty Bal. Enquiry4210
13Pine 360 PPC/GV Load4202
14Pine 360 PPC/GV Redeem4203
15Pine 360 PPC/GV Bal. Enquiry4204
16Pine 360 Voucher Redeem4215
17Pine 360 GC Load4211
18Pine 360 GC Redeem4212
19Pine 360 GC Bal Enquiry4213
20Fetch Loyalty Number4301
21Reward Redemption4101
22Reward Void4102
23Payback Earn4401
24Payback Redemption4402
25Payback Void4403
26Sale with rebate4501
27Sale with cash4502
28Cash Only4503
29Reprint4504
30COD Sale / Cash4507
31COD Void / Cash Void4508
32Wallet Pay5102
33Wallet Load5103
34Wallet Void5104
35Sodexo Sale5106
36Sodexo Void5107
37UPI Sale5120
38Void5121
39Get Status5122
40Bharat QR Sale5123
41Bank EMI5101
42Brand EMI5002

11. References