Same Device (Inject)
Integrate our PAY.POS application on your own device.
We suggest that you start within the app the merchant is using. This generates a simple transaction that can be send to your backend and to PAY.POS. You can also first start a payment in your backend and send the reference via the merchant application to the PAY.POS.

If PAY.POS is opened by an inject and PAY.POS is activated it reads the card data and encrypts the data. If a PINcode is needed, it will ask for the PIN and encrypt that as well. It sends the data to the Transaction Gateway Unit where the transaction is routed via the different schemes to the Issuing bank where the payment is completed. If the Payment fails, we return to the original application or URL (via the returnUrl) where the next action can be performed.
After the payment we asynchronously send a data request to the Exchange URL. And transfer the Payment to the Global Management System where the reporting engine collects the necessary data to report, clear and settle the funds to your account.
Inject an order
The fastest way to start a payment is via the direct inject. You can start a transaction by sending it to Pay.POS.
Keep it simple at the start
transaction = {
"description": "Field 6.2 for EUR 30,02",
"reference": "FIELD6.2",
"returnUrl": "https:\/\/cpoc.buddy.nl", // Or YOURAPP://UUID
"amount": {
"value": 123,
"currency": "EUR"
}
}
But you are allowed to use the full order object
transaction = {
"serviceId": "SL-1234-1234",
"description": "Field 6.2 for EUR 30,02",
"reference": "FIELD6.2",
"returnUrl": "https:\/\/cpoc.buddy.nl", // Or YOURAPP://UUID
"exchangeUrl": "https:\/\/demo.pay.nl\/exchange.php",
"amount": {
"value": 4321,
"currency": "EUR"
},
"integration": {
"testMode": true
},
"customer": {
"firstName": "John",
"lastName": "Doe",
"phone": "0031612345678",
"birthDate": "1999-02-15",
"gender": "m",
"email": "[email protected]",
"ipAddress": "213.126.82.230",
"trust": 5,
"reference": "NL87654321",
"company": {
"countryCode": "nl",
"coc": "12345678",
"vat": "NL0123456789",
"name": "CompanyName"
}
},
"order": {
"countryCode": "NL",
"deliveryDate": "2022-12-30",
"invoiceDate": "2022-12-30",
"deliveryAddress": {
"firstName": "John",
"lastName": "Doe",
"streetName": "Deliverylane",
"streetNumber": "70",
"streetNumberExtension": "A",
"zipCode": "5678CD",
"city": "Amsterdam",
"countryCode": "NL"
},
"invoiceAddress": {
"firstName": "Samanta",
"lastName": "Doe - Jones",
"streetName": "Invoicestreet",
"streetNumber": "2",
"streetNumberExtension": "B",
"zipCode": "SW36LQ",
"city": "London",
"countryCode": "GB"
},
"products": [{
"id": "TEST_01",
"description": "Caramels sweet roll",
"type": "article",
"price": {
"value": 1,
"currency": "EUR"
},
"quantity": 2,
"vatCode": "H"
}, {
"id": "TEST_02",
"description": "Cookie tart sugar",
"type": "article",
"price": {
"value": 3,
"currency": "EUR"
},
"quantity": 1,
"vatCode": "H"
}, {
"id": "TEST_03",
"description": "Lollipop chocolate bar",
"type": "article",
"price": {
"value": 1,
"currency": "EUR"
},
"quantity": 5,
"vatCode": "H"
}]
},
"notification": {
"type": "email",
"recipient": "[email protected]"
},
"stats": {
"object": "POS System",
"info": "Campagne 99",
"tool": "Google",
"extra1": "Customer 6985615",
"extra2": "Invoice 21.3695",
"extra3": "Shop Amsterdam"
}
}
Brand the PAY.POS
To change the icon
and the colour you can send an image (JPG or PNG format) in base64. To change the colours of the loading icons and the buttons youcan also send in buttonTextColor
<a href='paycpoc://?data=ab9c9a73-d986-ce76-1937-508381ac626e&layout={
"icon": "data:image/png;base64,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",
"buttonTextColor": "F75513"
}'>Link to the APP
</a>
TIP through an inject
It is also possible to provide the user with an option to leave a tip. To do this you have to slightly alter your inject request:
{
"description": "Field 6.2 for EUR 30,02",
"reference": "FIELD6.2",
"returnUrl": "https:\/\/cpoc.buddy.nl", // Or YOURAPP://UUID
"amount": {
"value": 123,
"currency": "EUR"
},
"integration": {
"tipMode":{
"enabled":true,
"amountSettings": [2.33, 15.6, 20.2]
},
}
}
We added the integration
-> tipMode
section. If you set the enabled property to true the user will be asked if they want to leave a tip.
tipMode
fields:
Field | Type | Description |
---|---|---|
enabled | boolean | Indicates if the tip mode should be offered to the end user. |
amountSettings | Array[number] | An array containing slots for tip options. (Limited at 3 slots for now). The value is a percentage and limited to a value between 0 and 100 |
For now we offer three slots (as a maximum) for you to provide the user with custom tip options. See integration
-> tipMode
-> amountSettings
each of these values is a percentage with a maximum value of 100 and minimum of 0.
Example
If tipMode
is enabled, we will append a new object in the returnURL called amountInfo
. The value will look something like:
amountInfo=eyJwYXltZW50Ijp7ImFtb3VudCI6MjQwMCwiY3VycmVuY3kiOiJFVVIifSwidGlwIjp7ImFtb3VudCI6NDg1LCJjdXJyZW5jeSI6IkVVUiJ9fQ==
This value is coded in base64, if you decode this, you will get this JSON format
{
"payment":{
"amount":2400,
"currency":"EUR"
},
"tip":{
"amount":485,
"currency":"EUR"
}
}
Using another Service/sales location
You can provide the PAY.POS with an alternative service/sales location than the one that the PAY.POS is currently activated on.
To set this up you require two elements:
Field | Example value | Description |
---|---|---|
serviceId | SL-1234-1234 | The sales location ID you want to start the payment for. |
secret | 6ba7ef49e89c4178a1eabff5a7ab82d9 | The secret you retrieve from the sales location |
Use these values in the deeplink, e.g.
paycpoc://?transaction=<PARTIAL_TRANSACTION_OBJECT>
&service={"serviceId": "SL-1234-1234", "secret": "6ba7ef49e89c4178a1eabff5a7ab82d9"}
Sending logs through deeplink
You can send logs through a deeplink from your own app.
paycpoc://?transaction={"returnUrl":"https://google.com"}&command=sendLogs
After the payment
We will load the returnURL. This can be a website or another app installed on the device. We will append the returnURL with additional parameters.
Status actions
Status | Meaning |
---|---|
PAID | Payment was successful. |
CANCELLED | Cancel button has been hit or payment has been DECLINED. if DECLINED, you will get the statusCode & orderId |
ERROR | An error occurred during payment. |
NFC_READ | NFC_READ is triggered when a Mifare card is scanned. It allows merchants to offer their own (prepaid) cards using the nfcCardID parameter. While the merchant still initiates a transaction, the standard payment flow is skipped, and we immediately redirect back to the merchant’s app. The merchant is responsible for handling acceptance or rejection of the transaction. Note: This status is not triggered when a regular bank card is used. |
OFFLINE | Card has been read ofline, transaction will be performed at a later date. (Expires after 28 days). |
EXPIRED | Transaction reached it's expiration limit. (45 sec by default). |
Ticket example
Below you will find the source base64 of the ticket and the ASCII variant that showcases the result when the base64 is decoded.
ICAgICAgICAgICAgIENsYXNzaWMgRmxvd2VyIFN0b3JlIEIuVi4gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIEVuc2NoZWRlICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkF1dG9tYWF0OiAgICAyMjE5MDA5MSAgICAgVmVya29wZXI6ICAgICAxMDczNTMxMwpCZXRhbGluZzogICAgICAgICAgICAgICAgIE1WLTExMTEtMTExMS0xMTExLTExMTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIE1BRVNUUk8gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIChBMDAwMDAwMDAwMDAwMSkgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAwMDAxNjY2KioqKioqKioqMDAxMjMgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKS2FhcnQgdm9sZ25yOiAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkdlbGRpZyB0b3Q6IDI3MDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKRGF0dW06IDIyLTEyLTIwMjQgMDk6MzAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApBdXRoLiBjb2RlOiAxMTBYMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVG90YWFsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsMDEgRVVSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAozRjAwMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA=
Classic Flower Store B.V.
Enschede
------------------------------------------------
Automaat: 22190091 Verkoper: 10735313
Betaling: MV-1111-1111-1111-1111
MAESTRO
(A0000000000001)
0001666*********00123
Kaart volgnr: 00
Geldig tot: 2706
Datum: 22-12-2024 09:30
Auth. code: 110X24
Totaal: 0,01 EUR
3F0002
------------------------------------------------
Activation by Inject
If you open the APP, that is not activated yet via an inject, we will provide the activationCode
APP-DEEPLINK://?statusAction=ACTIVATE&reference={order.reference}&activationCode=####-####-####
you can use the Terminal:Create API to activate the terminal. After Activation you restart the Payment.
Refunds
In order to do refunds you need to check the following:
-
Refunds are enabled on your TH-code: Contact PayNL support to do this
-
Refunds are enabled on your Sales Location: If you do not see this option, contact PayNL support
Once this is done, you can inject a Refund using the following:
paycpoc://?transaction={"type":"REFUND","amount":{"value":1,"currency":"EUR"}}
Frequently asked questions
Can I integrate SoftPOS using a browser-to-app (Browser2App) approach? While it is technically possible to integrate SoftPOS via a browser-to-app (Browser2App) implementation, you may face some potential limitations and user experience issues.
For optimal performance and a seamless user journey, we recommend using app-to-app (App2App) integration If Browser2App is currently your only viable option, you may encounter issues such as multiple browser tabs opening after each transaction. To help mitigate this, we suggest exploring Progressive Web Apps (PWAs) using resources like web.dev's PWA. If you want to convert the website to an app, consider using tools like Capacitor to convert your web application into a native mobile app. In summary, for the best SoftPOS experience, App2App integration would be the preferred and most effective method.
Updated 8 days ago