SmartPOS solutions
We currently offer this product in the following countries:
Countries | Netherlands, Belgium |
Countries for partners | Netherlands, Belgium, Italy, Spain |
If you are interested in our Point of Sale solutions, email [email protected]
Our SmartPOS solutions let you initiate payments through:
- Manual input
- Cloud POS payment
- On-same device third-party applications
- Web application
- Native application
Manual input
To start processing payments manually:
- Enter Amount due and select Pay.
- The customer can either tap or insert their card to make the payment.
- Once the payment is completed, a notification is displayed.
Cloud POS payment
With cloud POS payment, you can initiate payments from an external application.
This diagram shows a successful cloud-based POS payment flow. Click to magnify.
⚠️ Note: Before you start initiating payments, you must ensure cloud mode is enabled - see SmartPOS features.
- Create an order. See Recipe - Cloud POS payment .
- Cancel an order. See cancellation.
To receive payments updates subscribe to Event notifications.
NoteOur Cloud POS payments solution is not designed for on-same device integrations. We strongly advice against using our Cloud POS payments solution for native applications on your SmartPOS terminal. Use our On-same device third-party applications solution instead.
On-same device third-party applications
Web applications
Web applications let you initiate payments on-same devices from a browser to the payment app.
This diagram shows a successful web application payment flow. Click to magnify.
Initiate payments
- Before initiating web application payments, you need to create an order.
Example
curl -X POST \
"https://api.multisafepay.com/v1/json/orders?api_key={your-api-key}"
-d '{
"type": "redirect",
"order_id": "my_order_id",
"gateway": "",
"currency": "EUR",
"amount": 10,
"description": "Order Description",
"payment_options": {
"notification_url": "https://www.example.com/paymentnotification",
"notification_method": "POST"
}
}
'
- Initiate a payment using the URL below:
msp://?amount={$amount}&order_id={$order_id}&callback={$callback_url}&printing=true&tipping=true¬ification_url={$notification_url}
amount
: the amount specified in EUR cents.order_id
: your unique identifier for order ID. -order_id
: your unique identifier for order ID. Maximum 50 characters. Can only contain a-z, A-Z, 0-9 and the special characters/ - _
.callback_url
: this URL redirects the customer to receive payment status notifications.- Optionally, you can set
notification_url
to receive order payment updates notifications. tipping
: include a tip.printing
: activate printing function.
Payment status received can either be Completed or Cancelled.
Native applications
Native applications let you initiate payments on-same devices from app to payment app.
This diagram shows a successful native application payment flow. Click to magnify.
Initiate payments
To initiate payments from your native app, we offer an Android Integration solution. It uses Android Intents to communicate with the MultiSafepay app. Your app sends a payment request via an Intent, and the MultiSafepay app processes it.
Once the transaction is processed, the user is redirected back to your native app, and a callback is returned containing a status code and message, indicating whether the payment was completed
, canceled
, declined
, or resulted in an exception.
See our integration guide - MultiSafepay Android POS integration .
User guide
Authentication
To create an order, always use the API key of your device's terminal group.
⚠️Note: Using an incorrect API key can cause any subsequent API calls associated with that order to fail.
Cancellation
To cancel an order, make a POST request to our cancellation endpoint. This requires the use of an order_id
and a group API key, which you can find at your MultiSafepay dashboard under Manage groups.
Insert the order_id
and the API key in the URL.
⚠️Note: To cancel a POS order, use a POST method. PATCH methods are not supported. For more information, see Cancelling declined transactions.
Example request
curl -X POST
"https://api.multisafepay.com/v1/json/orders/{order_id}/cancel?api_key={your-api-key}"
Example response
{
"success": true,
"data": {
"costs": [],
"created": "dateTtime",
"custom_info": {
"custom_1": null,
"custom_2": null,
"custom_3": null
},
"fastcheckout": "NO",
"financial_status": null,
"modified": "dateTtime",
"payment_details": {},
"payment_methods": null,
"status": "cancelled"
}
}
Refunds
You can process refunds:
Via the API
See API reference – Refund order.
From your terminal
- Open the MultiSafepay application from your terminal and go to Features.
- Click History and select the relevant transaction.
- Click Refund. Enter the desired amount you want to refund and click OK.
- Click Confirm to finalize the transaction. The refund will be processed.
- Click Close.
In your dashboard
- Sign in to your MultiSafepay dashboard .
- Go to Transactions > Transaction overview, and click the relevant transaction.
- On the Transaction details page, click Refund order.
- In the Reason / Description field, enter the reason for the refund or a description of what happened with the order, and then click Complete.
- In the Comment field, enter any additional information.
- In the Amount fields, enter the amount to refund.
- Click Continue.
- Review Refund confirmation, and then click Confirm.
Updates
The table below sets out options available for receiving updates on the payments:
POS Solutions | Required | Optional |
---|---|---|
Cloud POS payment | Subscribe to the event notifications. | Configure a webhook. |
Web applications | Set callback_url in the link. | Set notification_url in the link to configure a webhook. |
Native applications | Set package_name in your intent call. | Configure a webhook. |
⚠️ Note: Finalized POS transactions will always have a status of completed
or cancelled
. A declined
status might indicate a soft decline, which is not a final state. For more information, see Soft declines.
Make a Get order request to retrieve POS-specific details, such as the terminal_id
or the tip.amount
.
Example response
{
"success": true,
"data": {
"amount": 2,
"amount_refunded": 0,
"completed": "2024-06-04T15:50:18",
"costs": [
{
"amount": 2,
"description": "2 For Visa Transactions",
"transaction_id": 899813954,
"type": "SYSTEM"
},
{
"amount": 0.6,
"description": "2.9 % For Visa CreditCards Transactions (min 60)",
"transaction_id": 899813955,
"type": "SYSTEM"
}
],
"created": "2024-06-04T15:50:17",
"currency": "EUR",
"custom_info": {
"custom_1": null,
"custom_2": null,
"custom_3": null
},
"customer": {
"address1": null,
"address2": null,
"city": null,
"country": null,
"country_name": null,
"email": null,
"first_name": null,
"house_number": null,
"last_name": null,
"locale": "en_US",
"phone1": null,
"phone2": null,
"state": null,
"zip_code": null
},
"description": "12341234",
"fastcheckout": "NO",
"financial_status": "completed",
"items": null,
"modified": "2024-06-04T15:50:18",
"order_id": "TestGetOrder123123",
"payment_details": {
"account_holder_name": "card holder",
"account_id": null,
"application_id": "a0000000031010",
"authorization_code": "705151",
"card_acceptor_id": "1001001",
"card_acceptor_location": "Amsterdam",
"card_acceptor_name": "TestMSP",
"card_additional_response_data": {
"sca_details": {}
},
"card_authentication_result": null,
"card_entry_mode": "ICC_CONTACTLESS",
"card_expiry_date": "3112",
"card_funding": "D",
"card_product": "F",
"card_product_type": 1,
"card_sequence_number": "0000",
"card_verification_result": "2",
"cardholder_verification_method": "FAILED",
"cardholder_verification_result": "UNKNOWN",
"emv": {
"91": "ab1231231234"
},
"external_transaction_id": "12312312312",
"issuer_bin": "123123",
"issuer_country_code": "ES",
"last4": "1234",
"recurring_flow": null,
"recurring_id": "1231213123",
"recurring_model": null,
"response_code": "00",
"scheme_reference_id": "123123123123123",
"terminal_id": "0000004d",
"type": "VISA"
},
"payment_methods": [
{
"account_holder_name": "card holder",
"amount": 1,
"card_expiry_date": "3112",
"currency": "EUR",
"description": "12341234",
"external_transaction_id": "123123412341234",
"payment_description": "Visa",
"status": "completed",
"type": "VISA"
}
],
"reason": "Approved",
"reason_code": "1000",
"related_transactions": null,
"status": "completed",
"tip": {
"amount": 1
},
"transaction_id": 123412342341234,
"var1": null,
"var2": null,
"var3": null
}
}
You can also make a List transactions or a Get transaction request to retrieve transactions processed within a terminal group.
Testing
POS transactions cannot be simulated in our TEST environment. All testing must be conducted in your LIVE MultiSafepay account.
Updated about 11 hours ago