Mergeport Ordering is a channel manager for online ordering and delivery services. With a single interface we can forward all incoming orders from multiple service providers in a standardized format.
If not already done, contact us for a developer account. You will receive a unique siteId and apiKey.
Typically, once you register with a service provider, they will provide you with some access details for their services, e.g. restaurantId or apiKey and apiSecret.
You will need to forward each of those access details to Mergeport and we are ready to go.
Integrate Mergeport with a minimal setup:
GET /pos/orders?filter=activePATCH /pos/orders/{id} with body:{
"state": "acceptedByPOS"
}
Minimum requirement:
acceptedByPOS The connected online ordering services will synchronize orders with our platform.
You can download all "active" orders [ status=receivedByProvider or status=canceledByProvider ] by calling /pos/orders?filter=active.
If you are using polling, we recommend an interval of 1-2 minutes.
Should anything go wrong during the download of the orders (aborted or missing connectivity), simply repeat the request until you have stored them, and then mark them as downloaded/read by calling /pos/orders/{id} and setting [ status=fetchedByPOS ] to avoid duplicates.
From that moment on, the order won't be active anymore.
To accept the order, you need to update the status to confirm the processing [ status=acceptedByPOS ]. Upon confirmation, we will forward the information to the provider (if supported) and set the status to acceptedByPOS. This action confirms the processing. You can also accept the order right away and skip the fetchedByPOS state.
Each order contains:
"possibleStateChanges": [...]
Only these states can be sent.
Required:
acceptedByPOSRule:
Only send states listed in possibleStateChanges
If the provider cancels an already processed order, it is being added again to the active orders with the state canceledByProvider. This requests the POS to process the cancelation internally and set the order to canceledByPOS.
Please be aware that our interface can only forward and support as much information/features as the corresponding service provider provides. We do the best to standardize the information, but some data may be missing in the different cases.
In the following, we use different terms to explain the workflow/functionality of the API. Let us give you a quick briefing on how we use the mentioned terms:
All prices are expressed as a structured object, with the currency code, e.g. "EUR" and the value in the atomic part of that currency, typically "cent". 3€ will be represented as 300.
Deposit:
We forward the deposit fees we receive from providers to the POS systems. These fees are usually transmitted on an item-specific basis in the deposit field and are already included in the item price. However, not all providers send information about deposits (e.g., Just Eat Takeaway), and some providers (e.g., foodora) only send the total deposit for the entire order. In such cases, this total is included in the order.deposit field.
We use a flat list of order items items within the order object which, paired with the parentId, offers the flexibility to represent any hierarchical order data structure. Please note: the order item quantity is absolute, we also provide the relativeQuantity. If the customer has ordered three pizzas, all of them with 2 x cheese as modifier, this will result in two order items:
id quantity relativeQuantity description singlePrice rowTotal parentId
9a1 3 3 pizza 700 2100 null
3fc 6 2 cheese 200 1200 9a1
total 3300The absolut quantity makes sum checks easier, without having to reconstruct the whole order first. This is very helpful when analyzing data and logs for support cases.
Items can either be synced from the POS to the ordering platform (if supported) or managed directly on the platform side.
If items are managed on the platform, the POS item ID can be configured there. In this case, orders will include a posItemId, which serves as the primary identifier for items. As a fallback, orderItemId can be used as a secondary identifier.
A POS must be able to handle items without a posItemId.
In these cases, recommended approaches include:
Important: Do not reject the order.
additionalCosts is a free-text field.
Examples:
Important:
Date-time fields and parameters must be formatted as UTC ISO 8601 strings, e.g. '2000-01-01T10:10:10.123Z'.
All requests will be validated. The following cases will lead to a validation error:
Typically, our responses are being returned with the HTTP status codes 200 OK, 400 Bad Request, 401 Unauthorized, 403 Forbidden. We have three response types, you can easily check the response for the following fields:
[data] - for read operations. The response contains an object or array of the requested datasuccess - for generic operations. The success property contains a message describing the operation result.error - for minor errors. The error property contains a code and a messageapiKey as "Authorization" header for all API calls. The apiKey is provided by Mergeport in the registration process. Every API call requires a valid apiKey in the "Authorization" header.
Mergeport supports three integration patterns:
Use webhooks if your POS is cloud-based.
GET /pos/orders/{id})PATCH /pos/orders/{id}Recommendation:
Use for all cloud systems.
Simple and universal fallback.
GET /pos/orders?filter=active
Recommendation:
Use for simple setups or as fallback.
Use WebSocket for systems with a persistent connection (for example local servers, terminals, or always-on tablets).
wss://socket.ordering.mergeport.com/v4apiKey via Sec-WebSocket-Protocol or accesstokenGotNewOrder events in real-timePATCH /pos/orders/{id}Recommendation:
Use for distributed or local systems without a public webhook endpoint.
WebSocket-URL: wss://socket.ordering.mergeport.com/v4
This API can give you push notifications of arriving orders or deliver the entire order upon arrival. All REST API functions can be used directly.
Use WebSocket for persistent or local systems, or as an alternative to webhooks when no public webhook endpoint is available.
To establish a connection with the WebSocket, you need to set a valid apiKey in the Sec-WebSocket-Protocol header. For example "'Sec-WebSocket-Protocol': '1f3a2007-8674-4496-9ccb-f1e9a8bebae5'".
// WebSocket Client endpoint to open the connection
let exampleSocket = new WebSocket(url, apiKey);
//Sample connect: let exampleSocket = new WebSocket("wss://socket.ordering.mergeport.com/v4", "1f3a2007-8674-4496-9ccb-f1e9a8bebae5");
// you need to replace the sample key "1f3a2007-8674-4496-9ccb-f1e9a8bebae5" with your own provided **apiKey**
// Event handler for the WebSocket connection opening
exampleSocket.onopen = function (event) {
exampleSocket.send("Here's some text that the server is urgently awaiting!");
};
// Event handler for receiving text messages
exampleSocket.onmessage = function (event) {
console.log(event.data);
}
// Event handler for errors in the WebSocket object
exampleSocket.onerror = function (event) {
console.log("Error ",event.data);
}
// Event handler for the close connection event
exampleSocket.onclose = function(event) {
console.log("WebSocket is closed now.");
};
// Function for sending commands to the server
function sendAction(action, data = null) {
// Construct a msg object containing the data the server needs to process the message from the client.
var msg = {
action: action,
data: data,
date: Date.now()
};
// Send the msg object as a JSON-formatted string.
exampleSocket.send(JSON.stringify(msg));
}
// Send a test command for example get the version
sendAction("version");
// Finally close the connection
exampleSocket.close();apiKey as an url parameter accesstokenlet exampleSocket = new WebSocket("wss://socket.ordering.mergeport.com/v4?accesstoken=1f3a2007-8674-4496-9ccb-f1e9a8bebae5"); gotNewOrder Upon arrival of new orders, the Websocket sends an GotNewOrder-Action with the order
{
"action": "GotNewOrder",
"data": {
"orderId": "123456789",
"providerId": "c933b71f-8efc-48ce-bd8c-630eb153ce10",
"order": { **have_a_look_at_the_order_schema** }
}
} GetTable Upon arrival of provider request for table data, the Websocket sends an GetTable-Action with the table request
{
"action": "GetTable",
"data": {
"siteId": "c933b71f-8efc-48ce-bd8c-630eb153ce10",
"tableId": "15",
"providerId": "e5ec3c9a-325a-897e-a6b3-23a1953a6eee"
}
}The WebSocket supports the whole set of functionalities. Hence why you will find a "WebSocket" action in the description of every REST-endpoint. Just pass the WebSocket action as the "action" parameter in the WebSocket request (for example "GetOrders"):
{
"action": "GetOrders"
}If you has to pas an url parameter {id} in the REST call you can pass them in the Socket-call as id:
{
"action": "GetOrder",
"id": "8702f7e0-b2a7-452f-95db-ee69fd0aa3b6"
}To serialize a requestBodyData inside the WebSocket-request, just add a data parameter:
{
"action": "SetOrderState",
"id": "8702f7e0-b2a7-452f-95db-ee69fd0aa3b6",
"data": {
"state": "receivedByProvider"
}
} PutTable Upon arrival of GetTable-Action, you should respond with an PutTable-Action with the table data
{
"action": "PutTable",
"data": {
"siteId": "c933b71f-8efc-48ce-bd8c-630eb153ce10",
"tableId": "15",
"providerId": "e5ec3c9a-325a-897e-a6b3-23a1953a6eee",
"table": { **have_a_look_at_the_table_schema** }
}
}In order to keep the WebSocket connection alive, the client is supposed to ping periodically. We recommend a period of 60s.
{
"action": "ka",
"data": "ping"
}The maximum connection duration of the WebSocket API is 2h and cannot be increased. Hence why the client needs to implement a reconnect upon the closing signal.
Ordering operations allow the POS to synchronize orders and articles with ordering platforms. Ordering platforms include delivery services, Dine-In/Dine-Out apps & websites, table ordering services and discovery pages as well as websites. The Ordering API enables connected services to query the articles and menu items of the connected POS system and inject orders into the POS. As a feedback, the platforms receive status updates and preparation time changes.
Typically, the workflow is as following:
WebSocket action: GetOrders
This endpoint returns all orders for the requesting site with the possibility to filter by state, date and pagination-block. As part of the POS integration, this endpoint should only be included with the active filter to gather new orders.
Reminder:
Websocket: data: {filter: 'active'}
REST: ?filter=active
Without a filter, the response will be paginated with the "startKey" if the return value is too large. To fetch the complete data, please iterate this request with the updated startKey until it is null again.
| filter | string Value: "active" filter to provide a subset of the orders ( example: active) |
| dateFrom | string <date-time> date to start with the subset of the orders |
| dateTo | string <date-time> date to end with the subset of the orders |
| startKey | string <uuid> id to continue with the subset of the orders |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "orders": [
- {
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "providerName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "orderId": "string",
- "orderReference": "string",
- "creationDate": "2019-08-24T14:15:22Z",
- "lastModifyDate": "2019-08-24T14:15:22Z",
- "expiryDate": "2019-08-24T14:15:22Z",
- "status": "receivedByProvider",
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "paymentInfo": [
- {
- "referenceId": "string",
- "amount": {
- "amount": 0,
- "currency": "string"
}, - "multipleOrderPayment": true,
- "brand": "string",
- "paymentType": "CASH",
- "payOnDelivery": true
}
], - "receiptInfo": [
- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "pickupNumber": "1-2345",
- "creationDate": "2019-08-24T14:15:22Z",
- "data": {
- "cashRegisterId": "POS12345",
- "signatureValue": "_R1-AT1_POS12345_R1234567_2022-01-06T14:56:00_3,30_8,80_0,00_0,00_0,00_ZMBRGX0=_2CBFF973_sE/BuW3BYUk=_03AVHF9FDN884X63kGWNEkbNm9raufVc7DMZr3JmaOEnHEC7z7lj2dkJDGy6jKkhKwgN6JTCldBRxAPZ3aUENQ==",
- "vatId": "ATU12345678",
- "number": "R1234567",
- "type": "Rechnung",
- "header": [
- "YX Gastro Gmbh",
- "1010 Wien, Am Hof 3",
- "Phone 1233456789"
]
}, - "items": [
- {
- "quantity": "2",
- "name": "Minestrone",
- "singlePrice": {
- "amount": "1210",
- "currency": "EUR"
}, - "rowTotal": {
- "amount": "1210",
- "currency": "EUR"
}, - "taxId": "B",
- "sortIndex": "1"
}
], - "taxes": [
- {
- "id": "B",
- "name": "20 % Ust.",
- "rate": "20",
- "netAmount": {
- "amount": "275",
- "currency": "EUR"
}, - "taxAmount": {
- "amount": "55",
- "currency": "EUR"
}, - "grossAmount": {
- "amount": "330",
- "currency": "EUR"
}
}
], - "totalAmount": {
- "amount": "1210",
- "currency": "EUR"
}
}
], - "requireReceipt": true,
- "deliveryInfo": {
- "deliveryTime": "2019-08-24T14:15:22Z",
- "formatted": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "title": "string",
- "salutation": "string",
- "street": "string",
- "number": "string",
- "apt": "string",
- "floor": "string",
- "entrance": "string",
- "comment": "string",
- "city": "string",
- "zip": "string",
- "country": "string",
- "company": "string",
- "destinationLongitude": "string",
- "destinationLatitude": "string",
- "driverLongitude": "string",
- "driverLatitude": "string",
- "selfDelivery": true
}, - "pickupInfo": {
- "pickupTime": "2019-08-24T14:15:22Z",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "comment": "string"
}, - "inHouseOrderingInfo": {
- "inHouseOrderingTime": "2019-08-24T14:15:22Z",
- "tableId": "string",
- "tableDescription": "string",
- "serviceAreaId": "string",
- "serviceAreaDescription": "string",
- "roomId": "string",
- "roomDescription": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string"
}, - "notes": "string",
- "discounts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string"
}
], - "amountToPay": {
- "amount": 0,
- "currency": "string"
}, - "additionalCosts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string",
- "tip": true,
- "taxRate": 0
}
], - "items": [
- {
- "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5",
- "internalId": "6868d0ce-34a2-4e78-b137-31229ba3e81a",
- "orderItemId": "string",
- "orderItemName": "string",
- "menuId": "string",
- "parentId": "70850378-7d3c-4f45-91b7-942d4dfbbd43",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "quantity": 0,
- "relativeQuantity": 0,
- "singlePrice": {
- "amount": 0,
- "currency": "string"
}, - "rowTotal": {
- "amount": 0,
- "currency": "string"
}, - "sortIndex": 0,
- "relativeRowTotal": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabels": "string",
- "providerItemId": "string",
- "isNote": true,
- "course": 0,
- "deposit": 0,
- "taxRate": 0
}
], - "possibleActions": [
- "ready",
- "pickedUp",
- "inDelivery",
- "delivered"
], - "possibleStateChanges": [
- {
- "state": "ready",
- "timeChange": true
}, - {
- "state": "pickedUp",
- "timeChange": false
}, - {
- "state": "inDelivery",
- "timeChange": false
}, - {
- "state": "delivered",
- "timeChange": false
}
], - "preOrder": true,
- "platformUpdates": [
- {
- "status": "string",
- "updatedAt": "string",
- "data": {
- "driverName": "string",
- "driverTripId": "string",
- "deliveryTime": "string",
- "pickupTime": "string",
- "driverStatus": "string"
}
}
], - "deposit": 0,
- "additionalInfo": {
- "containsSingleUseItems": true,
- "containsAlcoholicItems": true,
- "containsTobacco": true
}
}
], - "startKey": "f2c499b1-ac1a-481d-98e2-77b3a197a97a"
}WebSocket action: GetOrdersOld
Caution: As default the Websocket action will get all orders to get only the recently changed and new ones specify an active filter:
data: {filter: 'active'}
| filter | string Value: "active" filter to provide a subset of the orders ( example: active) |
| dateFrom | string <date-time> date to start with the subset of the orders |
| dateTo | string <date-time> date to end with the subset of the orders |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
[- {
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "providerName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "orderId": "string",
- "orderReference": "string",
- "creationDate": "2019-08-24T14:15:22Z",
- "lastModifyDate": "2019-08-24T14:15:22Z",
- "expiryDate": "2019-08-24T14:15:22Z",
- "status": "receivedByProvider",
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "paymentInfo": [
- {
- "referenceId": "string",
- "amount": {
- "amount": 0,
- "currency": "string"
}, - "multipleOrderPayment": true,
- "brand": "string",
- "paymentType": "CASH",
- "payOnDelivery": true
}
], - "receiptInfo": [
- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "pickupNumber": "1-2345",
- "creationDate": "2019-08-24T14:15:22Z",
- "data": {
- "cashRegisterId": "POS12345",
- "signatureValue": "_R1-AT1_POS12345_R1234567_2022-01-06T14:56:00_3,30_8,80_0,00_0,00_0,00_ZMBRGX0=_2CBFF973_sE/BuW3BYUk=_03AVHF9FDN884X63kGWNEkbNm9raufVc7DMZr3JmaOEnHEC7z7lj2dkJDGy6jKkhKwgN6JTCldBRxAPZ3aUENQ==",
- "vatId": "ATU12345678",
- "number": "R1234567",
- "type": "Rechnung",
- "header": [
- "YX Gastro Gmbh",
- "1010 Wien, Am Hof 3",
- "Phone 1233456789"
]
}, - "items": [
- {
- "quantity": "2",
- "name": "Minestrone",
- "singlePrice": {
- "amount": "1210",
- "currency": "EUR"
}, - "rowTotal": {
- "amount": "1210",
- "currency": "EUR"
}, - "taxId": "B",
- "sortIndex": "1"
}
], - "taxes": [
- {
- "id": "B",
- "name": "20 % Ust.",
- "rate": "20",
- "netAmount": {
- "amount": "275",
- "currency": "EUR"
}, - "taxAmount": {
- "amount": "55",
- "currency": "EUR"
}, - "grossAmount": {
- "amount": "330",
- "currency": "EUR"
}
}
], - "totalAmount": {
- "amount": "1210",
- "currency": "EUR"
}
}
], - "requireReceipt": true,
- "deliveryInfo": {
- "deliveryTime": "2019-08-24T14:15:22Z",
- "formatted": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "title": "string",
- "salutation": "string",
- "street": "string",
- "number": "string",
- "apt": "string",
- "floor": "string",
- "entrance": "string",
- "comment": "string",
- "city": "string",
- "zip": "string",
- "country": "string",
- "company": "string",
- "destinationLongitude": "string",
- "destinationLatitude": "string",
- "driverLongitude": "string",
- "driverLatitude": "string",
- "selfDelivery": true
}, - "pickupInfo": {
- "pickupTime": "2019-08-24T14:15:22Z",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "comment": "string"
}, - "inHouseOrderingInfo": {
- "inHouseOrderingTime": "2019-08-24T14:15:22Z",
- "tableId": "string",
- "tableDescription": "string",
- "serviceAreaId": "string",
- "serviceAreaDescription": "string",
- "roomId": "string",
- "roomDescription": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string"
}, - "notes": "string",
- "discounts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string"
}
], - "amountToPay": {
- "amount": 0,
- "currency": "string"
}, - "additionalCosts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string",
- "tip": true,
- "taxRate": 0
}
], - "items": [
- {
- "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5",
- "internalId": "6868d0ce-34a2-4e78-b137-31229ba3e81a",
- "orderItemId": "string",
- "orderItemName": "string",
- "menuId": "string",
- "parentId": "70850378-7d3c-4f45-91b7-942d4dfbbd43",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "quantity": 0,
- "relativeQuantity": 0,
- "singlePrice": {
- "amount": 0,
- "currency": "string"
}, - "rowTotal": {
- "amount": 0,
- "currency": "string"
}, - "sortIndex": 0,
- "relativeRowTotal": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabels": "string",
- "providerItemId": "string",
- "isNote": true,
- "course": 0,
- "deposit": 0,
- "taxRate": 0
}
], - "possibleActions": [
- "ready",
- "pickedUp",
- "inDelivery",
- "delivered"
], - "possibleStateChanges": [
- {
- "state": "ready",
- "timeChange": true
}, - {
- "state": "pickedUp",
- "timeChange": false
}, - {
- "state": "inDelivery",
- "timeChange": false
}, - {
- "state": "delivered",
- "timeChange": false
}
], - "preOrder": true,
- "platformUpdates": [
- {
- "status": "string",
- "updatedAt": "string",
- "data": {
- "driverName": "string",
- "driverTripId": "string",
- "deliveryTime": "string",
- "pickupTime": "string",
- "driverStatus": "string"
}
}
], - "deposit": 0,
- "additionalInfo": {
- "containsSingleUseItems": true,
- "containsAlcoholicItems": true,
- "containsTobacco": true
}
}
]WebSocket action: GetOrders
Caution: As default the Websocket action will get all orders to get only the recently changed and new ones specify an active filter:
data: {filter: 'active'}
| Authorization required | string <uuid> static apiKey provided by Mergeport |
[- {
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "providerName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "orderId": "string",
- "orderReference": "string",
- "creationDate": "2019-08-24T14:15:22Z",
- "lastModifyDate": "2019-08-24T14:15:22Z",
- "expiryDate": "2019-08-24T14:15:22Z",
- "status": "receivedByProvider",
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "paymentInfo": [
- {
- "referenceId": "string",
- "amount": {
- "amount": 0,
- "currency": "string"
}, - "multipleOrderPayment": true,
- "brand": "string",
- "paymentType": "CASH",
- "payOnDelivery": true
}
], - "receiptInfo": [
- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "pickupNumber": "1-2345",
- "creationDate": "2019-08-24T14:15:22Z",
- "data": {
- "cashRegisterId": "POS12345",
- "signatureValue": "_R1-AT1_POS12345_R1234567_2022-01-06T14:56:00_3,30_8,80_0,00_0,00_0,00_ZMBRGX0=_2CBFF973_sE/BuW3BYUk=_03AVHF9FDN884X63kGWNEkbNm9raufVc7DMZr3JmaOEnHEC7z7lj2dkJDGy6jKkhKwgN6JTCldBRxAPZ3aUENQ==",
- "vatId": "ATU12345678",
- "number": "R1234567",
- "type": "Rechnung",
- "header": [
- "YX Gastro Gmbh",
- "1010 Wien, Am Hof 3",
- "Phone 1233456789"
]
}, - "items": [
- {
- "quantity": "2",
- "name": "Minestrone",
- "singlePrice": {
- "amount": "1210",
- "currency": "EUR"
}, - "rowTotal": {
- "amount": "1210",
- "currency": "EUR"
}, - "taxId": "B",
- "sortIndex": "1"
}
], - "taxes": [
- {
- "id": "B",
- "name": "20 % Ust.",
- "rate": "20",
- "netAmount": {
- "amount": "275",
- "currency": "EUR"
}, - "taxAmount": {
- "amount": "55",
- "currency": "EUR"
}, - "grossAmount": {
- "amount": "330",
- "currency": "EUR"
}
}
], - "totalAmount": {
- "amount": "1210",
- "currency": "EUR"
}
}
], - "requireReceipt": true,
- "deliveryInfo": {
- "deliveryTime": "2019-08-24T14:15:22Z",
- "formatted": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "title": "string",
- "salutation": "string",
- "street": "string",
- "number": "string",
- "apt": "string",
- "floor": "string",
- "entrance": "string",
- "comment": "string",
- "city": "string",
- "zip": "string",
- "country": "string",
- "company": "string",
- "destinationLongitude": "string",
- "destinationLatitude": "string",
- "driverLongitude": "string",
- "driverLatitude": "string",
- "selfDelivery": true
}, - "pickupInfo": {
- "pickupTime": "2019-08-24T14:15:22Z",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "comment": "string"
}, - "inHouseOrderingInfo": {
- "inHouseOrderingTime": "2019-08-24T14:15:22Z",
- "tableId": "string",
- "tableDescription": "string",
- "serviceAreaId": "string",
- "serviceAreaDescription": "string",
- "roomId": "string",
- "roomDescription": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string"
}, - "notes": "string",
- "discounts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string"
}
], - "amountToPay": {
- "amount": 0,
- "currency": "string"
}, - "additionalCosts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string",
- "tip": true,
- "taxRate": 0
}
], - "items": [
- {
- "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5",
- "internalId": "6868d0ce-34a2-4e78-b137-31229ba3e81a",
- "orderItemId": "string",
- "orderItemName": "string",
- "menuId": "string",
- "parentId": "70850378-7d3c-4f45-91b7-942d4dfbbd43",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "quantity": 0,
- "relativeQuantity": 0,
- "singlePrice": {
- "amount": 0,
- "currency": "string"
}, - "rowTotal": {
- "amount": 0,
- "currency": "string"
}, - "sortIndex": 0,
- "relativeRowTotal": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabels": "string",
- "providerItemId": "string",
- "isNote": true,
- "course": 0,
- "deposit": 0,
- "taxRate": 0
}
], - "possibleActions": [
- "ready",
- "pickedUp",
- "inDelivery",
- "delivered"
], - "possibleStateChanges": [
- {
- "state": "ready",
- "timeChange": true
}, - {
- "state": "pickedUp",
- "timeChange": false
}, - {
- "state": "inDelivery",
- "timeChange": false
}, - {
- "state": "delivered",
- "timeChange": false
}
], - "preOrder": true,
- "platformUpdates": [
- {
- "status": "string",
- "updatedAt": "string",
- "data": {
- "driverName": "string",
- "driverTripId": "string",
- "deliveryTime": "string",
- "pickupTime": "string",
- "driverStatus": "string"
}
}
], - "deposit": 0,
- "additionalInfo": {
- "containsSingleUseItems": true,
- "containsAlcoholicItems": true,
- "containsTobacco": true
}
}
]WebSocket action: GetOrder
| id required | string <uuid> internal ID of the order |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "providerName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "orderId": "string",
- "orderReference": "string",
- "creationDate": "2019-08-24T14:15:22Z",
- "lastModifyDate": "2019-08-24T14:15:22Z",
- "expiryDate": "2019-08-24T14:15:22Z",
- "status": "receivedByProvider",
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "paymentInfo": [
- {
- "referenceId": "string",
- "amount": {
- "amount": 0,
- "currency": "string"
}, - "multipleOrderPayment": true,
- "brand": "string",
- "paymentType": "CASH",
- "payOnDelivery": true
}
], - "receiptInfo": [
- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "pickupNumber": "1-2345",
- "creationDate": "2019-08-24T14:15:22Z",
- "data": {
- "cashRegisterId": "POS12345",
- "signatureValue": "_R1-AT1_POS12345_R1234567_2022-01-06T14:56:00_3,30_8,80_0,00_0,00_0,00_ZMBRGX0=_2CBFF973_sE/BuW3BYUk=_03AVHF9FDN884X63kGWNEkbNm9raufVc7DMZr3JmaOEnHEC7z7lj2dkJDGy6jKkhKwgN6JTCldBRxAPZ3aUENQ==",
- "vatId": "ATU12345678",
- "number": "R1234567",
- "type": "Rechnung",
- "header": [
- "YX Gastro Gmbh",
- "1010 Wien, Am Hof 3",
- "Phone 1233456789"
]
}, - "items": [
- {
- "quantity": "2",
- "name": "Minestrone",
- "singlePrice": {
- "amount": "1210",
- "currency": "EUR"
}, - "rowTotal": {
- "amount": "1210",
- "currency": "EUR"
}, - "taxId": "B",
- "sortIndex": "1"
}
], - "taxes": [
- {
- "id": "B",
- "name": "20 % Ust.",
- "rate": "20",
- "netAmount": {
- "amount": "275",
- "currency": "EUR"
}, - "taxAmount": {
- "amount": "55",
- "currency": "EUR"
}, - "grossAmount": {
- "amount": "330",
- "currency": "EUR"
}
}
], - "totalAmount": {
- "amount": "1210",
- "currency": "EUR"
}
}
], - "requireReceipt": true,
- "deliveryInfo": {
- "deliveryTime": "2019-08-24T14:15:22Z",
- "formatted": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "title": "string",
- "salutation": "string",
- "street": "string",
- "number": "string",
- "apt": "string",
- "floor": "string",
- "entrance": "string",
- "comment": "string",
- "city": "string",
- "zip": "string",
- "country": "string",
- "company": "string",
- "destinationLongitude": "string",
- "destinationLatitude": "string",
- "driverLongitude": "string",
- "driverLatitude": "string",
- "selfDelivery": true
}, - "pickupInfo": {
- "pickupTime": "2019-08-24T14:15:22Z",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "comment": "string"
}, - "inHouseOrderingInfo": {
- "inHouseOrderingTime": "2019-08-24T14:15:22Z",
- "tableId": "string",
- "tableDescription": "string",
- "serviceAreaId": "string",
- "serviceAreaDescription": "string",
- "roomId": "string",
- "roomDescription": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string"
}, - "notes": "string",
- "discounts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string"
}
], - "amountToPay": {
- "amount": 0,
- "currency": "string"
}, - "additionalCosts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string",
- "tip": true,
- "taxRate": 0
}
], - "items": [
- {
- "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5",
- "internalId": "6868d0ce-34a2-4e78-b137-31229ba3e81a",
- "orderItemId": "string",
- "orderItemName": "string",
- "menuId": "string",
- "parentId": "70850378-7d3c-4f45-91b7-942d4dfbbd43",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "quantity": 0,
- "relativeQuantity": 0,
- "singlePrice": {
- "amount": 0,
- "currency": "string"
}, - "rowTotal": {
- "amount": 0,
- "currency": "string"
}, - "sortIndex": 0,
- "relativeRowTotal": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabels": "string",
- "providerItemId": "string",
- "isNote": true,
- "course": 0,
- "deposit": 0,
- "taxRate": 0
}
], - "possibleActions": [
- "ready",
- "pickedUp",
- "inDelivery",
- "delivered"
], - "possibleStateChanges": [
- {
- "state": "ready",
- "timeChange": true
}, - {
- "state": "pickedUp",
- "timeChange": false
}, - {
- "state": "inDelivery",
- "timeChange": false
}, - {
- "state": "delivered",
- "timeChange": false
}
], - "preOrder": true,
- "platformUpdates": [
- {
- "status": "string",
- "updatedAt": "string",
- "data": {
- "driverName": "string",
- "driverTripId": "string",
- "deliveryTime": "string",
- "pickupTime": "string",
- "driverStatus": "string"
}
}
], - "deposit": 0,
- "additionalInfo": {
- "containsSingleUseItems": true,
- "containsAlcoholicItems": true,
- "containsTobacco": true
}
}WebSocket action: SetOrderState
| id required | string <uuid> internal ID of the order |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
| state required | string Enum: "receivedByProvider" "fetchedByPOS" "canceledByProvider" "canceledByPOS" "rejectedByPOS" "acceptedByPOS" "preparing" "ready" "pickedUp" "inDelivery" "delivered" Desired "status" of the order. |
| timeChange | string Nullable Eventual new date-time if there is a change in delivery or pickup time (ISO 8601). In case the platform has not set a pickup or delivery time, also consider sending a timeChange in the "acceptedByPOS" status update to inform the service provider about the expected delivery/pickup time. |
Array of objects Nullable Contains information about the created invoice (by POS) such as signature, item and taxes. Used for service providers to print the receipt for example. Also supports multiple receipts for one order (e.g. split payment) |
{- "state": "receivedByProvider",
- "timeChange": "string",
- "receipts": [
- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "pickupNumber": "1-2345",
- "creationDate": "2019-08-24T14:15:22Z",
- "data": {
- "cashRegisterId": "POS12345",
- "signatureValue": "_R1-AT1_POS12345_R1234567_2022-01-06T14:56:00_3,30_8,80_0,00_0,00_0,00_ZMBRGX0=_2CBFF973_sE/BuW3BYUk=_03AVHF9FDN884X63kGWNEkbNm9raufVc7DMZr3JmaOEnHEC7z7lj2dkJDGy6jKkhKwgN6JTCldBRxAPZ3aUENQ==",
- "vatId": "ATU12345678",
- "number": "R1234567",
- "type": "Rechnung",
- "header": [
- "YX Gastro Gmbh",
- "1010 Wien, Am Hof 3",
- "Phone 1233456789"
]
}, - "items": [
- {
- "quantity": "2",
- "name": "Minestrone",
- "singlePrice": {
- "amount": "1210",
- "currency": "EUR"
}, - "rowTotal": {
- "amount": "1210",
- "currency": "EUR"
}, - "taxId": "B",
- "sortIndex": "1"
}
], - "taxes": [
- {
- "id": "B",
- "name": "20 % Ust.",
- "rate": "20",
- "netAmount": {
- "amount": "275",
- "currency": "EUR"
}, - "taxAmount": {
- "amount": "55",
- "currency": "EUR"
}, - "grossAmount": {
- "amount": "330",
- "currency": "EUR"
}
}
], - "totalAmount": {
- "amount": "1210",
- "currency": "EUR"
}
}
]
}{- "success": "order set status with succes",
- "order": {
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "providerName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "orderId": "string",
- "orderReference": "string",
- "creationDate": "2019-08-24T14:15:22Z",
- "lastModifyDate": "2019-08-24T14:15:22Z",
- "expiryDate": "2019-08-24T14:15:22Z",
- "status": "receivedByProvider",
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "paymentInfo": [
- {
- "referenceId": "string",
- "amount": {
- "amount": 0,
- "currency": "string"
}, - "multipleOrderPayment": true,
- "brand": "string",
- "paymentType": "CASH",
- "payOnDelivery": true
}
], - "receiptInfo": [
- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "pickupNumber": "1-2345",
- "creationDate": "2019-08-24T14:15:22Z",
- "data": {
- "cashRegisterId": "POS12345",
- "signatureValue": "_R1-AT1_POS12345_R1234567_2022-01-06T14:56:00_3,30_8,80_0,00_0,00_0,00_ZMBRGX0=_2CBFF973_sE/BuW3BYUk=_03AVHF9FDN884X63kGWNEkbNm9raufVc7DMZr3JmaOEnHEC7z7lj2dkJDGy6jKkhKwgN6JTCldBRxAPZ3aUENQ==",
- "vatId": "ATU12345678",
- "number": "R1234567",
- "type": "Rechnung",
- "header": [
- "YX Gastro Gmbh",
- "1010 Wien, Am Hof 3",
- "Phone 1233456789"
]
}, - "items": [
- {
- "quantity": "2",
- "name": "Minestrone",
- "singlePrice": {
- "amount": "1210",
- "currency": "EUR"
}, - "rowTotal": {
- "amount": "1210",
- "currency": "EUR"
}, - "taxId": "B",
- "sortIndex": "1"
}
], - "taxes": [
- {
- "id": "B",
- "name": "20 % Ust.",
- "rate": "20",
- "netAmount": {
- "amount": "275",
- "currency": "EUR"
}, - "taxAmount": {
- "amount": "55",
- "currency": "EUR"
}, - "grossAmount": {
- "amount": "330",
- "currency": "EUR"
}
}
], - "totalAmount": {
- "amount": "1210",
- "currency": "EUR"
}
}
], - "requireReceipt": true,
- "deliveryInfo": {
- "deliveryTime": "2019-08-24T14:15:22Z",
- "formatted": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "title": "string",
- "salutation": "string",
- "street": "string",
- "number": "string",
- "apt": "string",
- "floor": "string",
- "entrance": "string",
- "comment": "string",
- "city": "string",
- "zip": "string",
- "country": "string",
- "company": "string",
- "destinationLongitude": "string",
- "destinationLatitude": "string",
- "driverLongitude": "string",
- "driverLatitude": "string",
- "selfDelivery": true
}, - "pickupInfo": {
- "pickupTime": "2019-08-24T14:15:22Z",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string",
- "comment": "string"
}, - "inHouseOrderingInfo": {
- "inHouseOrderingTime": "2019-08-24T14:15:22Z",
- "tableId": "string",
- "tableDescription": "string",
- "serviceAreaId": "string",
- "serviceAreaDescription": "string",
- "roomId": "string",
- "roomDescription": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "phone": "string",
- "email": "string"
}, - "notes": "string",
- "discounts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string"
}
], - "amountToPay": {
- "amount": 0,
- "currency": "string"
}, - "additionalCosts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string",
- "tip": true,
- "taxRate": 0
}
], - "items": [
- {
- "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5",
- "internalId": "6868d0ce-34a2-4e78-b137-31229ba3e81a",
- "orderItemId": "string",
- "orderItemName": "string",
- "menuId": "string",
- "parentId": "70850378-7d3c-4f45-91b7-942d4dfbbd43",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "quantity": 0,
- "relativeQuantity": 0,
- "singlePrice": {
- "amount": 0,
- "currency": "string"
}, - "rowTotal": {
- "amount": 0,
- "currency": "string"
}, - "sortIndex": 0,
- "relativeRowTotal": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabels": "string",
- "providerItemId": "string",
- "isNote": true,
- "course": 0,
- "deposit": 0,
- "taxRate": 0
}
], - "possibleActions": [
- "ready",
- "pickedUp",
- "inDelivery",
- "delivered"
], - "possibleStateChanges": [
- {
- "state": "ready",
- "timeChange": true
}, - {
- "state": "pickedUp",
- "timeChange": false
}, - {
- "state": "inDelivery",
- "timeChange": false
}, - {
- "state": "delivered",
- "timeChange": false
}
], - "preOrder": true,
- "platformUpdates": [
- {
- "status": "string",
- "updatedAt": "string",
- "data": {
- "driverName": "string",
- "driverTripId": "string",
- "deliveryTime": "string",
- "pickupTime": "string",
- "driverStatus": "string"
}
}
], - "deposit": 0,
- "additionalInfo": {
- "containsSingleUseItems": true,
- "containsAlcoholicItems": true,
- "containsTobacco": true
}
}
}WebSocket action: GetPosItems
| Authorization required | string <uuid> static apiKey provided by Mergeport |
[- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "category": {
- "en": "Category",
- "de": "Kategorie",
- "it": "Categoria"
}, - "subCategory": {
- "en": "Subcategory",
- "de": "Unterkategorie",
- "it": "categoria suplementare"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "allergens": "AELO",
- "additives": "E102,E250,CAFFEINE_HIGH_CAFFEINE",
- "foodWarnings": "coloursHyperactivity,sweetenersPhenylalanine",
- "reference": "string",
- "parentId": "string",
- "parentIds": [
- "string"
], - "imgUrl": "string",
- "enabled": true,
- "stock": 0,
- "categoryIds": [
- "string"
], - "menuIds": [
- "string"
], - "labels": [
- "vegan"
], - "ean": "8501110082969",
- "type": "product",
- "sort": 0,
- "options": {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}, - "optionsList": [
- {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}
], - "lastUpdated": "2019-08-24T14:15:22Z",
- "deposit": 0
}
]WebSocket action: SetPosItems
This action performs an upload of the items in the payload of the request. The items will be stored and saved on our end and can be curated in the MERGEPORT controller as well as queried by the services providers. Already existing items will be updated.
If the options "availableChoices" are set, they are the preferred source for service providers and ordering platforms to build their menu upon. "availableChoices" provide more flexibility and possibilities for a dynamic configuration. If empty, the ordering platforms usually fall back to the parentIds structure.
Please note that you need to use "set specifications of the specified POS item" endpoint to upload an image.
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Array of Pos Items
| id required | string item id in the pos system |
object Nullable price of a single order item in cents | |
object Nullable associative array of different names for ISO-639-1-Codes | |
object Nullable Deprecated associative array of different categories for ISO-639-1-Codes | |
object Nullable Deprecated associative array of different subCategories for ISO-639-1-Codes | |
object Nullable associative array of different descriptions for ISO-639-1-Codes | |
| allergens | string Nullable here you can specify the allergens Codes:
|
| additives | string Nullable ^(?:(?:E[-_]?[0-9]{3,4}[A-Za-z]?|UNSPECIFIED|... Comma-, semicolon- or space-separated additive codes. Supports E-numbers (for example E102 or E250) and canonical declarations such as CAFFEINE_HIGH_CAFFEINE. Channel adapters translate these values into the provider-specific format. |
| foodWarnings | string Nullable ^(?:(?:coloursHyperactivity|sweetenersPhenyla... Comma-separated canonical food warning codes used for legally or contextually required notices. Supported codes are coloursHyperactivity, sweetenersPhenylalanine, sweetenersLaxativeEffects, caffeineHighContentBeverage, caffeineNonBeverage, liquoriceHypertension, packagingGasesProtectiveAtmosphere and plantSterolsStanols. |
| reference | string Nullable extra unique reference of the item (PLU) |
| parentId | string Nullable Deprecated item id of the parent item in the pos system |
| parentIds | Array of strings Nullable list of item ids of the parent items in the pos system |
| imgUrl | string Nullable url to the image of the product |
| enabled | boolean Nullable on/off switch for the product |
| stock | number Nullable items currently in stock |
| categoryIds | Array of strings Nullable list of category ids of the parent categories in the pos system |
| menuIds | Array of strings Nullable list of menu ids of the parent menus in the pos system |
| labels | Array of strings Nullable list of extra labels for the product |
| ean | string Nullable extra unique reference of the item (European Article Number) |
| type | string Nullable Enum: "product" "topping" extra type definition of the product |
| sort | number Nullable number to sort items |
object Nullable additional options for case-dependent representation of the products | |
Array of objects List of options (stepped) | |
| lastUpdated | string <date-time> Nullable time item was changed (filled automatically) |
| deposit | number Nullable Price of deposit in cents |
[- {
- "id": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "category": {
- "en": "Category",
- "de": "Kategorie",
- "it": "Categoria"
}, - "subCategory": {
- "en": "Subcategory",
- "de": "Unterkategorie",
- "it": "categoria suplementare"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "allergens": "AELO",
- "additives": "E102,E250,CAFFEINE_HIGH_CAFFEINE",
- "foodWarnings": "coloursHyperactivity,sweetenersPhenylalanine",
- "reference": "string",
- "parentId": "string",
- "parentIds": [
- "string"
], - "imgUrl": "string",
- "enabled": true,
- "stock": 0,
- "categoryIds": [
- "string"
], - "menuIds": [
- "string"
], - "labels": [
- "milk-free"
], - "ean": "8501110082969",
- "type": "product",
- "sort": 0,
- "options": {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}, - "optionsList": [
- {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}
], - "lastUpdated": "2019-08-24T14:15:22Z",
- "deposit": 0
}
][- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "category": {
- "en": "Category",
- "de": "Kategorie",
- "it": "Categoria"
}, - "subCategory": {
- "en": "Subcategory",
- "de": "Unterkategorie",
- "it": "categoria suplementare"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "allergens": "AELO",
- "additives": "E102,E250,CAFFEINE_HIGH_CAFFEINE",
- "foodWarnings": "coloursHyperactivity,sweetenersPhenylalanine",
- "reference": "string",
- "parentId": "string",
- "parentIds": [
- "string"
], - "imgUrl": "string",
- "enabled": true,
- "stock": 0,
- "categoryIds": [
- "string"
], - "menuIds": [
- "string"
], - "labels": [
- "vegan"
], - "ean": "8501110082969",
- "type": "product",
- "sort": 0,
- "options": {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}, - "optionsList": [
- {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}
], - "lastUpdated": "2019-08-24T14:15:22Z",
- "deposit": 0
}
]WebSocket action: GetItem
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "category": {
- "en": "Category",
- "de": "Kategorie",
- "it": "Categoria"
}, - "subCategory": {
- "en": "Subcategory",
- "de": "Unterkategorie",
- "it": "categoria suplementare"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "allergens": "AELO",
- "additives": "E102,E250,CAFFEINE_HIGH_CAFFEINE",
- "foodWarnings": "coloursHyperactivity,sweetenersPhenylalanine",
- "reference": "string",
- "parentId": "string",
- "parentIds": [
- "string"
], - "imgUrl": "string",
- "enabled": true,
- "stock": 0,
- "categoryIds": [
- "string"
], - "menuIds": [
- "string"
], - "labels": [
- "vegan"
], - "ean": "8501110082969",
- "type": "product",
- "sort": 0,
- "options": {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}, - "optionsList": [
- {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}
], - "lastUpdated": "2019-08-24T14:15:22Z",
- "deposit": 0
}WebSocket action: SetPosItemSpecs
This action allows to update/set specifications for an already existing POS item. Mainly used for the image at the moment.
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Specs Object for Pos Items
| img required | string <byte> the base64 encoded image for the item |
{- "img": "string"
}{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "category": {
- "en": "Category",
- "de": "Kategorie",
- "it": "Categoria"
}, - "subCategory": {
- "en": "Subcategory",
- "de": "Unterkategorie",
- "it": "categoria suplementare"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "allergens": "AELO",
- "additives": "E102,E250,CAFFEINE_HIGH_CAFFEINE",
- "foodWarnings": "coloursHyperactivity,sweetenersPhenylalanine",
- "reference": "string",
- "parentId": "string",
- "parentIds": [
- "string"
], - "imgUrl": "string",
- "enabled": true,
- "stock": 0,
- "categoryIds": [
- "string"
], - "menuIds": [
- "string"
], - "labels": [
- "vegan"
], - "ean": "8501110082969",
- "type": "product",
- "sort": 0,
- "options": {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}, - "optionsList": [
- {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}
], - "lastUpdated": "2019-08-24T14:15:22Z",
- "deposit": 0
}WebSocket action: DeletePosItem
This action allows to delete a POS item.
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "category": {
- "en": "Category",
- "de": "Kategorie",
- "it": "Categoria"
}, - "subCategory": {
- "en": "Subcategory",
- "de": "Unterkategorie",
- "it": "categoria suplementare"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "allergens": "AELO",
- "additives": "E102,E250,CAFFEINE_HIGH_CAFFEINE",
- "foodWarnings": "coloursHyperactivity,sweetenersPhenylalanine",
- "reference": "string",
- "parentId": "string",
- "parentIds": [
- "string"
], - "imgUrl": "string",
- "enabled": true,
- "stock": 0,
- "categoryIds": [
- "string"
], - "menuIds": [
- "string"
], - "labels": [
- "vegan"
], - "ean": "8501110082969",
- "type": "product",
- "sort": 0,
- "options": {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}, - "optionsList": [
- {
- "groupName": {
- "en": "Cooking level",
- "de": "Garstufe",
- "it": "Livello di cottura"
}, - "defaultChoices": [
- "1000123"
], - "minChoices": 0,
- "maxChoices": 3,
- "availableChoices": [
- {
- "id": "1000123",
- "price": 300,
- "addPrice": -100,
- "multiselect": false,
- "canBeUnselected": true
}
]
}
], - "lastUpdated": "2019-08-24T14:15:22Z",
- "deposit": 0
}WebSocket action: GetPosCategories
| Authorization required | string <uuid> static apiKey provided by Mergeport |
[- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "parentIds": [
- "string"
], - "availabilityIds": [
- "string"
], - "enabled": true
}
]WebSocket action: SetPosCategories
This action performs an upload of the categories in the payload of the request. The categories will be stored and saved on our end and can be curated in the MERGEPORT controller as well as queried by the services providers. Already existing categories will be updated.
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Array of Pos Categories
| id required | string category id in the pos system |
object Nullable associative array of different names for ISO-639-1-Codes | |
object Nullable associative array of different descriptions for ISO-639-1-Codes | |
| imgUrl | string Nullable url to the image of the menu |
| parentIds | Array of strings Nullable list of category ids of the parent categories in the pos system |
| availabilityIds | Array of strings Nullable IDs of reusable PosAvailability schedules. Multiple IDs are combined as a union. Explicit category references take precedence over parent-category and menu schedules; missing or empty IDs inherit the next applicable schedule. |
| enabled | boolean Nullable on/off switch for the menu |
[- {
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "parentIds": [
- "string"
], - "availabilityIds": [
- "string"
], - "enabled": true
}
][- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "parentIds": [
- "string"
], - "availabilityIds": [
- "string"
], - "enabled": true
}
]WebSocket action: GetCategory
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "parentIds": [
- "string"
], - "availabilityIds": [
- "string"
], - "enabled": true
}WebSocket action: SetPosCategorySpecs
This action allows to update/set specifications for an already existing POS category. Mainly used for the image at the moment.
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Specs Object for Pos Categories
| img required | string <byte> the base64 encoded image for the item |
{- "img": "string"
}{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "parentIds": [
- "string"
], - "availabilityIds": [
- "string"
], - "enabled": true
}WebSocket action: DeletePosCategory
This action allows to delete a POS category.
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "parentIds": [
- "string"
], - "availabilityIds": [
- "string"
], - "enabled": true
}WebSocket action: GetPosMenus
| Authorization required | string <uuid> static apiKey provided by Mergeport |
[- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "menuType": [
- "pickup"
], - "availabilityIds": [
- "string"
], - "enabled": true
}
]WebSocket action: SetPosMenus
This action performs an upload of the menus in the payload of the request. The menus will be stored and saved on our end and can be curated in the MERGEPORT controller as well as queried by the services providers. Already existing menus will be updated.
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Array of Pos Menus
| id required | string menu id in the pos system |
object Nullable associative array of different names for ISO-639-1-Codes | |
object Nullable associative array of different descriptions for ISO-639-1-Codes | |
| imgUrl | string Nullable url to the image of the menu |
| menuType | Array of strings Nullable Items Enum: "pickup" "delivery" "inHouse" list of expeditionTypes the product should be available for |
| availabilityIds | Array of strings Nullable IDs of reusable PosAvailability schedules. Multiple IDs are combined as a union. Categories without their own or inherited parent-category schedule inherit this menu schedule; missing or empty IDs mean unrestricted availability. |
| enabled | boolean Nullable on/off switch for the menu |
[- {
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "menuType": [
- "pickup"
], - "availabilityIds": [
- "string"
], - "enabled": true
}
][- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "menuType": [
- "pickup"
], - "availabilityIds": [
- "string"
], - "enabled": true
}
]WebSocket action: GetMenu
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "menuType": [
- "pickup"
], - "availabilityIds": [
- "string"
], - "enabled": true
}WebSocket action: SetPosMenuSpecs
This action allows to update/set specifications for an already existing POS menu. Mainly used for the image upload at the moment.
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Specs Object for Pos Menus
| img required | string <byte> the base64 encoded image for the item |
{- "img": "string"
}{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "menuType": [
- "pickup"
], - "availabilityIds": [
- "string"
], - "enabled": true
}WebSocket action: DeletePosMenu
This action allows to delete a POS menu item.
| id required | string id of the item |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "imgUrl": "string",
- "menuType": [
- "pickup"
], - "availabilityIds": [
- "string"
], - "enabled": true
}Returns the backward-compatible MappingItem list for the requesting site. The persisted key is siteId plus providerItemId; providerId records catalog ownership and prevents another provider from replacing the same key. MappingItems are created when item mapping is enabled and items are imported explicitly or received in incoming orders. This legacy response intentionally excludes raw, relationships and lifecycle additions. Use GET /pos/mappings/catalog to opt in to those fields and pagination.
WebSocket action: GetMappingItems
| Authorization required | string <uuid> static apiKey provided by Mergeport |
[- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "providerItemId": "string",
- "providerId": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabelsIdConcat": "string",
- "itemName": "string",
- "itemCategory": "string",
- "itemSubCategory": "string",
- "itemDescription": "string",
- "itemReference": "string"
}
]Assigns POS item IDs to imported ordering-platform items. After a mapping item is populated with a posItemId, future orders for that item include the assigned POS item ID. The operation updates POS-owned mapping fields and may initialize legacy identity/display fields only when they do not exist yet. Omitted or submitted provider-owned fields, lifecycle metadata, relationships and raw never delete or overwrite stored provider catalog data.
WebSocket action: SetMappingItems
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Array of Mapping Items
| providerItemId required | string item id for the shop |
| providerId | string Nullable provider id for the shop if extra |
object Nullable price of a single order item in cents | |
| posItemId | string Nullable id of the item in the pos system |
| posItemLabelsIdConcat | string Nullable itemLabelsAndIdConcat from the mapped pos item, or null |
| itemName | string Nullable the name for the item |
| itemCategory | string Nullable the category for the item |
| itemSubCategory | string Nullable the subCategory for the item |
| itemDescription | string Nullable the description for an item |
| itemReference | string Nullable extra unique reference of the item (PLU) |
[- {
- "providerItemId": "string",
- "providerId": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabelsIdConcat": "string",
- "itemName": "string",
- "itemCategory": "string",
- "itemSubCategory": "string",
- "itemDescription": "string",
- "itemReference": "string"
}
][- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "providerItemId": "string",
- "providerId": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabelsIdConcat": "string",
- "itemName": "string",
- "itemCategory": "string",
- "itemSubCategory": "string",
- "itemDescription": "string",
- "itemReference": "string"
}
]Returns the additive MappingItem catalog model for initial synchronization and local caching. Unlike the legacy GET /pos/mappings, this opt-in endpoint includes relationships, lifecycle metadata and item-level raw provider data.
raw is provider-specific and may change without notice. It contains only the item-relevant provider entity, never provider credentials or the complete unrelated menu response.
Disabled records are included by default so clients can update local caches. Use activeOnly=true to return records whose disabledAt is absent or null. The derived enabled property follows the same rule. Because limit bounds evaluated DynamoDB records before filters are applied, filtered pages may contain fewer items than the requested limit; continue while nextCursor is present. Every page includes itemCount, the total number of MappingItems matching the current filters across all cursor pages.
WebSocket action: GetMappingItemCatalog
| limit | integer [ 1 .. 100 ] Default: 50 Maximum number of evaluated MappingItems. Values are clamped to 1 through 100. |
| cursor | string Opaque nextCursor from the previous response. |
| providerId | string <uuid> Optional provider filter. |
| activeOnly | boolean Default: false When true, exclude MappingItems whose disabledAt contains a timestamp. Missing and null disabledAt values are active. |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "items": [
- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "providerItemId": "string",
- "providerId": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabelsIdConcat": "string",
- "itemName": "string",
- "itemCategory": "string",
- "itemSubCategory": "string",
- "itemDescription": "string",
- "itemReference": "string",
- "categoryId": "string",
- "available": true,
- "type": "product",
- "sku": "string",
- "plu": "string",
- "allergens": [
- "string"
], - "labels": [
- "string"
], - "sortIndex": 0,
- "relationships": [
- {
- "relationType": "category",
- "relatedItemId": "string",
- "relatedItemName": "string",
- "providerRelationId": "string",
- "minSelections": 0,
- "maxSelections": 0,
- "defaultSelected": true,
- "quantity": 0,
- "priceDelta": {
- "amount": 0,
- "currency": "string"
}, - "sortIndex": 0
}
], - "raw": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "providerCreatedAt": "2019-08-24T14:15:22Z",
- "providerUpdatedAt": "2019-08-24T14:15:22Z",
- "lastImportedAt": "2019-08-24T14:15:22Z",
- "lastSeenAt": "2019-08-24T14:15:22Z",
- "disabledAt": "2019-08-24T14:15:22Z",
- "enabled": true
}
], - "itemCount": 0,
- "nextCursor": "string"
}A complete successful synchronization updates lastSeenAt, disables missing records and reactivates returned records. Failed, interrupted, pending, timed-out or otherwise incomplete imports never disable records.
WebSocket action: ImportMappingItems
| providerId required | string <uuid> internal ID of the provider |
| Authorization required | string <uuid> static apiKey provided by Mergeport |
[- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "providerItemId": "string",
- "providerId": "string",
- "price": {
- "amount": 0,
- "currency": "string"
}, - "posItemId": "string",
- "posItemLabelsIdConcat": "string",
- "itemName": "string",
- "itemCategory": "string",
- "itemSubCategory": "string",
- "itemDescription": "string",
- "itemReference": "string"
}
]Returns the configured preparation time and ordering activation state for the authenticated POS restaurant.
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "defaultPreparationTime": {
- "preparationTime": 0,
- "drivingTime": 0,
- "deliverTime": 0
}, - "orderingActivated": true,
- "orderingDeactivatedUntil": "2019-08-24T14:15:22Z"
}WebSocket action: SetSiteSpecs
This action allows to update/set specifications for a POS restaurant.
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Object for Pos SiteSpecs
object Nullable keeps track of the default preparation times of the restaurant | |
| orderingActivated | boolean Nullable Default: true enables ordering for this restaurant |
| orderingDeactivatedUntil | string <date-time> Nullable timestamp until which ordering is paused; omitting the field while setting orderingActivated to false defaults to 24 hours, an explicit null pauses indefinitely, and existing records without the field are treated as active for backward compatibility |
{- "defaultPreparationTime": {
- "preparationTime": 0,
- "drivingTime": 0,
- "deliverTime": 0
}, - "orderingActivated": true,
- "orderingDeactivatedUntil": "2019-08-24T14:15:22Z"
}{- "success": {
- "message": "string"
}
}Returns the editable channel configuration for supported ordering providers configured on the authenticated site, keyed by provider ID. availableMethods describes the provider API functions and their selectable POS fields, currentSetup contains the persisted field mappings, currentOverrides contains optional per-record data overrides, overrideModes describes supported global transformations, and syncSpecs contains both configured triggers and operational status. Persisted ProviderChannel records are combined with the provider's current API setup so newly introduced optional fields can appear without discarding existing selections.
A channel maps canonical POS data such as PosItem, PosCategory and PosMenu fields to a provider request payload. Site-derived fields such as the standard language are applied automatically and are not presented as configurable mappings. Independent channel features are announced in availableMethods.<apiFunction>.features. Availability supports inherit, custom and disabled modes through syncSpecs.<apiFunction>.availabilitySet. Wolt receives effective category availability, while Uber Eats and JET Connect receive deterministic menu groups for categories with identical effective schedules.
Reading this endpoint does not perform a provider synchronization.
WebSocket action: GetProviderChannel
| Authorization required | string <uuid> static apiKey provided by Mergeport |
{- "d7ac9e8e-1176-4844-aa28-4f856c8b325b": {
- "availableMethods": {
- "createOrReplaceMenu": {
- "title": "Create or replace menu",
- "tableNames": [
- "PosCategory",
- "PosMenu",
- "PosItem"
], - "features": {
- "availabilitySet": {
- "resource": "PosAvailability",
- "targets": [
- "menus",
- "categories"
], - "modes": [
- "inherit",
- "custom",
- "disabled"
], - "defaultMode": "inherit"
}
}
}
}, - "currentSetup": {
- "createOrReplaceMenu": {
- "PosItem": [
- {
- "fieldPath": "id",
- "apiPath": "categories.items.external_data"
}
]
}
}, - "overrideModes": {
- "replace": {
- "default": true,
- "type": "any",
- "description": "replace any value with the same type"
}
}, - "syncSpecs": {
- "createOrReplaceMenu": {
- "syncMode": "manually",
- "syncTimes": [ ],
- "availabilitySet": {
- "mode": "custom",
- "menus": [
- {
- "id": "main",
- "availabilityIds": [
- "delivery-hours"
]
}
], - "categories": [
- {
- "id": "lunch",
- "availabilityIds": [
- "weekday-lunch"
]
}
]
}
}
}
}
}Creates or updates channel configurations for supported ordering providers on the authenticated site. The request is keyed by provider ID. For each selected provider API function, currentSetup chooses canonical POS source fields, while currentOverrides supplies optional per-record values and field mappings may contain a supported globalOverride. Site-derived fields such as the standard language are applied automatically. Mergeport persists one ProviderChannel record per provider API function.
syncSpecs controls manual, scheduled and on-change synchronization. Its optional availabilitySet supports inherit, custom and disabled modes for that channel function only; it neither creates schedules nor changes canonical POS records. In custom mode, unlisted records retain their canonical availabilityIds, and unknown menu, category or availability IDs stop synchronization before the provider is contacted. There is no shop-specific dimension in this version.
Required provider fields use their documented defaults when available. Existing stored per-record overrides are preserved unless the submitted configuration replaces them. Providers not configured on the site and providers without channel support are ignored. Channel support is currently limited to Wolt, JET Connect and Uber Eats.
This operation stores mapping and synchronization configuration only; it does not upload menu data or contact the provider. Provider validation failures during an automatic synchronization can suspend that channel while preserving its previous scheduling settings. Operational fields returned in syncSpecs, such as lastError and syncStatus, should be treated as server-managed state.
POS option groups in optionsList.availableChoices are preferred when present. Legacy embedded options and parent-linked option items remain supported for backward compatibility. Images continue to come from the POS item's imgUrl; this endpoint does not upload image binaries.
WebSocket action: SetProviderChannel
| Authorization required | string <uuid> static apiKey provided by Mergeport |
Provider channel mappings, sync settings and optional channel-specific availability assignments.
object |
{- "d7ac9e8e-1176-4844-aa28-4f856c8b325b": {
- "currentSetup": {
- "createOrReplaceMenu": {
- "PosMenu": [
- {
- "fieldPath": "id",
- "apiPath": "id"
}
], - "PosItem": [
- {
- "fieldPath": "id",
- "apiPath": "categories.items.external_data"
}
]
}, - "updateMenuItems": {
- "PosItem": [
- {
- "fieldPath": "id",
- "apiPath": "data.gtin"
}, - {
- "fieldPath": "price.amount",
- "globalOverride": {
- "mode": "addPercent",
- "value": 5
}
}
]
}
}, - "syncSpecs": {
- "createOrReplaceMenu": {
- "syncMode": "manually",
- "availabilitySet": {
- "mode": "custom",
- "menus": [
- {
- "id": "main",
- "availabilityIds": [
- "delivery-hours"
]
}
], - "categories": [
- {
- "id": "lunch",
- "availabilityIds": [
- "weekday-lunch"
]
}
]
}
}, - "updateMenuItems": {
- "syncMode": "onChange"
}
}
}
}"OK"Returns all reusable weekly availability schedules stored for the authenticated site. Schedules are referenced through availabilityIds on POS menus and categories; item-level references are not supported in this version. Multiple referenced schedules are combined as a union. An absent or empty availabilityIds property means unrestricted availability.
Effective category availability follows this precedence: the category's own references, then references inherited from its parent category, then references on the containing menu.
WebSocket action: GetPosAvailabilities
| Authorization required | string <uuid> |
[- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "timezone": "string",
- "weeklyAvailability": [
- {
- "day": "monday",
- "periods": [
- {
- "start": "string",
- "end": "string"
}
]
}
]
}
]Creates or updates reusable weekly availability schedules for the authenticated site. The site ID is taken from the authorization context and must not be supplied by the client. Existing schedules with the same id are replaced; schedules omitted from the request are not deleted.
Each schedule requires a valid IANA timezone and at least one day with at least one period. Days must be unique within a schedule. Times use HH:mm; 24:00 is accepted only as an end time. Periods must have start < end, must not overlap and must be split across two days when they cross midnight. Adjacent periods and unions of multiple referenced schedules are normalized deterministically.
Saving a schedule does not start a provider-channel synchronization.
WebSocket action: SetPosAvailabilities
| Authorization required | string <uuid> |
Array of reusable POS availability schedules
| id required | string Stable POS-defined schedule ID referenced by PosMenu.availabilityIds and PosCategory.availabilityIds. |
object Nullable Optional localized display name used when Mergeport derives provider menu names for grouped schedules, represented as an associative array of names for ISO-639-1 language codes. | |
| timezone required | string Required IANA timezone used to interpret the local weekly periods, for example Europe/Vienna. |
required | Array of objects non-empty Available local-time periods grouped by weekday. A day may occur only once; omitted days are unavailable. |
[- {
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "timezone": "string",
- "weeklyAvailability": [
- {
- "day": "monday",
- "periods": [
- {
- "start": "string",
- "end": "string"
}
]
}
]
}
][- {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "timezone": "string",
- "weeklyAvailability": [
- {
- "day": "monday",
- "periods": [
- {
- "start": "string",
- "end": "string"
}
]
}
]
}
]Returns one reusable availability schedule belonging to the authenticated site. The id is the POS-defined stable reference used in PosMenu.availabilityIds and PosCategory.availabilityIds.
WebSocket action: GetAvailability
| id required | string |
| Authorization required | string <uuid> |
{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "timezone": "string",
- "weeklyAvailability": [
- {
- "day": "monday",
- "periods": [
- {
- "start": "string",
- "end": "string"
}
]
}
]
}Deletes one reusable availability schedule belonging to the authenticated site. This operation does not remove its ID from existing menus or categories. Any remaining reference becomes invalid and a later channel synchronization fails validation before contacting the provider until the reference is removed or the schedule is recreated.
WebSocket action: DeletePosAvailability
| id required | string |
| Authorization required | string <uuid> |
{- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "timezone": "string",
- "weeklyAvailability": [
- {
- "day": "monday",
- "periods": [
- {
- "start": "string",
- "end": "string"
}
]
}
]
}Payment operations enable the functionality “Self Payment”, which means that ordering platforms can pay for items on tables in restaurants, even if they have not been ordered by the same platform beforehand. The Payments API enables connected ordering platforms to query tables, view ordered items on tables and send payments to clear the whole/a fraction of the table. To support the optional Self Payment functionality, the POS system needs to send open positions on tables upon the request of an ordering platform, process payments of open positions (including split payments) and reply with receipt data. Typically, the workflow is as following:
In order to prevent consistency issues and high data traffic, the Self Payment functionality is only available via WebSocket and thus not documented in the HTTP REST statements underneath. The actions are only available for the ordering platforms if the POS has an active WebSocket connection.
The connected ordering platforms can query a specific table. The POS receives a “Get Table” action in the WebSocket.
| action | string action command to execute |
object data to send with the command |
{- "action": "GetTable",
- "data": {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "restaurantId": "1234567",
- "tableId": "12"
}
}Upon arrival of the GetTable-Action, the POS should answer with PutTable, containing information about the table as well as the open (= not paid yet) items.
| action required | string action command to execute |
required | object data to send with the command |
| requestId required | string unique request id generated by POS (Each reply message contains a correlation id, a unique identifier that indicates which request message this reply is for) |
{- "action": "PutTable",
- "data": {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "restaurantId": "1234567",
- "table": {
- "id": "string",
- "name": {
- "en": "name",
- "de": "Name",
- "it": "nome"
}, - "description": {
- "en": "description",
- "de": "beschreibung",
- "it": "descrizione"
}, - "isTemporary": true,
- "lastInteractionAt": "2019-08-24T14:15:22Z",
- "areaId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "items": [
- {
- "id": "string",
- "quantity": 0,
- "singlePrice": {
- "amount": 1210,
- "currency": "EUR"
}, - "rowTotal": {
- "amount": 1210,
- "currency": "EUR"
}, - "toppings": [
- {
- "id": "string",
- "quantity": 0,
- "singlePrice": {
- "amount": 1210,
- "currency": "EUR"
}, - "rowTotal": {
- "amount": 1210,
- "currency": "EUR"
}
}
]
}
]
}
}, - "requestId": "string"
}| action | string the executed command |
| status | string status of the executed command ok ok failed error |
| statusCode | integer status code of the executed command |
| correlationId | string Each reply message contains a correlation id, a unique identifier that indicates which request message this reply is for (unique request id generated by POS) |
{- "action": "PutTable",
- "status": "ok",
- "statusCode": 200,
- "correlationId": "string"
}The ordering platform creates a “payment” once the enduser has paid for the selected items.
| action | string action command to execute |
object data to send with the command |
{- "action": "GotPaymentRequest",
- "data": {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "restaurantId": "1234567",
- "payment": {
- "id": "string",
- "tableId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "amountPaid": {
- "amount": 0,
- "currency": "string"
}, - "items": [
- {
- "id": "string",
- "quantity": 0,
- "singlePrice": {
- "amount": "1210",
- "currency": "EUR"
}, - "rowTotal": {
- "amount": "1210",
- "currency": "EUR"
}
}
], - "discounts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string"
}
], - "additionalCosts": [
- {
- "value": {
- "amount": 0,
- "currency": "string"
}, - "name": "string",
- "tip": true,
- "taxRate": 0
}
]
}
}
}To confirm the processing of the payment, the POS is supposed to send the receipt. If this confirmation is missing, the ordering platform will cancel the payment.
| action required | string action command to execute |
required | object data to send with the command |
| requestId required | string unique request id generated by POS (Each reply message contains a correlation id, a unique identifier that indicates which request message this reply is for) |
{- "action": "PutReceipt",
- "data": {
- "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
- "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",
- "restaurantId": "1234567",
- "receiptInfo": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "active",
- "pickupNumber": "1-2345",
- "creationDate": "2019-08-24T14:15:22Z",
- "data": {
- "cashRegisterId": "POS12345",
- "signatureValue": "_R1-AT1_POS12345_R1234567_2022-01-06T14:56:00_3,30_8,80_0,00_0,00_0,00_ZMBRGX0=_2CBFF973_sE/BuW3BYUk=_03AVHF9FDN884X63kGWNEkbNm9raufVc7DMZr3JmaOEnHEC7z7lj2dkJDGy6jKkhKwgN6JTCldBRxAPZ3aUENQ==",
- "vatId": "ATU12345678",
- "number": "R1234567",
- "type": "Rechnung",
- "header": [
- "YX Gastro Gmbh",
- "1010 Wien, Am Hof 3",
- "Phone 1233456789"
]
}, - "items": [
- {
- "quantity": "2",
- "name": "Minestrone",
- "singlePrice": {
- "amount": "1210",
- "currency": "EUR"
}, - "rowTotal": {
- "amount": "1210",
- "currency": "EUR"
}, - "taxId": "B",
- "sortIndex": "1"
}
], - "taxes": [
- {
- "id": "B",
- "name": "20 % Ust.",
- "rate": "20",
- "netAmount": {
- "amount": "275",
- "currency": "EUR"
}, - "taxAmount": {
- "amount": "55",
- "currency": "EUR"
}, - "grossAmount": {
- "amount": "330",
- "currency": "EUR"
}
}
], - "totalAmount": {
- "amount": "1210",
- "currency": "EUR"
}, - "paymentId": "string",
- "tableId": "string"
}
}, - "requestId": "string"
}| action | string the executed command |
| status | string status of the executed command ok ok failed error |
| statusCode | integer status code of the executed command |
| correlationId | string Each reply message contains a correlation id, a unique identifier that indicates which request message this reply is for (unique request id generated by POS) |
{- "action": "PutReceipt",
- "status": "ok",
- "statusCode": 200,
- "correlationId": "string"
}