SmartPOS solutions

⚠️

Note:

We currently offer this product in the following countries:

  • Netherlands
  • Belgium

As a partner, you can further connect accounts registered in the following countries:

  • 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:

  1. Enter Amount due and select Pay.
  2. The customer can either tap or insert their card to make the payment.
  3. 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.

cloud-POS

⚠️ Note: Before you start initiating payments, you must ensure cloud mode is enabled - see SmartPOS features.

To receive payments updates subscribe to Event notifications.



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.

web-app-POS

Initiate payments

  1. 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"
  }
}
'
  1. Initiate a payment using the URL below:
msp://?amount={$amount}&order_id={$order_id}&callback={$callback_url}&printing=true&tipping=true&notification_url={$notification_url}
  • amount: the amount specified in EUR cents.
  • order_id: your unique identifier for order ID.
  • 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.

native-app-POS

Initiate payments

  1. Before initiating native 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"
  }
}
'
  1. To initiate payments - see MultiSafepay Android POS integration .

# API features

In addition to the features mentioned in our API reference, there are POS-specific details you can retrieve via our API, including the Terminal ID that processed a transaction.

Example GET order

{
  "success": true,
  "data": {
    "amount": 1,
    "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",
    "transaction_id": 123412342341234,
    "var1": null,
    "var2": null,
    "var3": null
  }
}

Handle notifications

The table below sets out options available for receiving updates on the payments.

POS SolutionsRequiredOptional
Cloud POS paymentSubscribe to the event notifications.Configure a webhook.
Web applicationsSet callback_url in the link.Set notification_url in the link to configure a webhook.
Native applicationsSet package_name in your intent call. Configure a webhook.

User guide

Cancellation

You can use two different request methods to cancel an order: POST or PATCH. Both methods require the use of an order_id and a group API key, which you can find at your MultiSafepay dashboard under Manage groups.

PATCH request

To cancel an order with a PATCH request, follow these instructions:

  • The status parameter (string) must be set to cancelled.
  • Set exclude_order (boolean) to true. This sets the outcome of the cancellation.

Example Request


curl --location --request PATCH \
     --url 'https://api.multisafepay.com/v1/json/orders/{order_id}/?api_key={your-api-key}' \
     --header 'Accept: application/json' \
     --header 'Content-Type: application/json'
     --data ' 
{
  "status": "cancelled",
  "exclude_order": true
}
'

Example Response


{
  "success":true,
	"data": {}
}
POST request

To cancel an order with a POST request, no additional parameters are required. Introduce the order_id and the API key in the URL.

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

How to process refunds

Via the API

See API reference – Refund order.

In your dashboard

  1. Sign in to your MultiSafepay dashboard .
  2. Go to Transactions > Transaction overview, and click the relevant transaction.
  3. On the Transaction details page, click Refund order.
  4. In the Reason / Description field, enter the reason for the refund or a description of what happened with the order, and then click Complete.
  5. In the Comment field, enter any additional information.
  6. In the Amount fields, enter the amount to refund.
  7. Click Continue.
  8. Review Refund confirmation, and then click Confirm.

Updates

Make a Get order request to get updates on a specific order.

Testing

You cannot test terminals in your MultiSafepay test account.



Top of page