Represents an order received from a remote provider (eg Uber Eats, Glovo, etc)
Overview
The majority of properties for RemoteOrder are optional and can be omitted entirely (see the example at the bottom of the page for a relatively minimal RemoteOrder)
Service Mode
For more information about sourcing values for serviceModeId and serviceModeEntityId please see the MenuSync documentation on ServiceModes
Tax
For jurisdictions with inclusive taxes (taxes that are already included in the price of an item like UK/EU VAT or Australian GST) there is no requirement to populate tax fields as the POS will be able to calculate the tax internally. Providers would only need to send the tax amounts if they were planning on either withholding tax/displaying tax receipts.
For jurisdictions with exclusive tax (sometimes called addon taxes - i.e. taxes that are in addition to the list price) the tax fields are mandatory.
Adjustments
Adjustments (discounts/surcharges) can be added to a RemoteOrder in two different ways, either applying to the entire order or to individual products within that order. The primary difference between the two methods will be how the onsite sales reporting will account for the adjustment effects.
Order level adjustments are set at RemoteOrder.orderAdjustments. Adjustments here will apply their adjustment amounts across all products in the order prorata. When sending order adjustments leave all RemoteOrderProduct price/amount unchanged. Only adjust the RemoteOrder.totalAmount (and RemoteOrderPayment.amountPaid)
Product level adjustments are set at RemoteOrderProduct.productAdjustment and will affect the RemoteOrderProduct.totalAmount but leave RemoteOrderProduct.price alone. The changed RemoteOrderProduct.totalAmount should also be reflected in the balance at the parent RemoteOrder.totalAmount
If taxes are being sent with the adjustments - leave the tax amounts unadjusted. The POS will calculate the adjustment effects (if any) on tax.
Constant
System.TimeSpan DefaultExpiryLength = 03:00:00
If DateTimeExpiresAtUTC is null / empty. This length will be added to the current time to make a default value
Required
remoteOrderID :
string (GUID)
The primary key for this remote order generated by ROS.
A third party provider should omit this property entirely OR leave this as Guid.Empty. ROS will overwrite it and return the new value at order submission
Required
outletID :
string (GUID)
ID of the outlet this will be transmitted to
Required
providerID :
number (int)
Unique ID for identifying the third party provider transmitting the remote order (from the Registered Integration Provider's list).
This must be set by third party providers (to the provider ID supplied during onboarding) when submitting RemoteOrders to PowerEPOS
Required
MaxLength(64)
providerName :
string
Name for identifying the third party provider transmitting the remote order (from the Registered Integration Provider's list)
This will be assigned automatically by ROS upon receipt of an order and is for PowerEPOS internal use only. Third party providers should set this to an empty string (it will be overwritten).
Required
MaxLength(64)
providerOrderID :
string
Unique ID for this order as supplied by third party provider
Required
dateTimeReceivedUTC :
string (ISO 8601 DateTime)
UTC date/time the order was received by ROS.
Third party providers should ignore this property when submitting orders, it's set internally by ROS.
Required
remoteOrderType :
RemoteOrderType
The type of the remote order
Required
decimal(18, 2)
totalAmount :
number (decimal)
Total amount of the order inclusive of delivery fees, inclusive taxes and adjustments. Any exclusive taxes will need to be added to this value to calculate the amount owing
Any values in RemoteOrderPayment.AmountOutletTip / RemoteOrderPayment.AmountOutletServiceCharge will NOT be reflected in this total.
Required
MaxLength(8)
currencyCode :
string
ISO 4217 currency code for all amounts in this order
Required
providerSupportsCancel :
bool
Can this order be potentially cancelled by consumer/provider? Certain APIs may not support cancellations.
Required
providerSupportsRejection :
bool
Can this order be rejected by a POS? Certain APIs may not support POS side rejections
Required
providerExpectsProcessedNotification :
bool
If true - ROS will be awaiting a confirmation to be sent from POSCore when this order is confirmed/rejected. This info will be forwarded to the Provider.
This will have no bearing on how the Outlet processes this RemoteOrder, it's a directive for POSCore / ROS.
Required
providerExpectsOrderPreparedNotification :
bool
If true - the POS will be informed that this order is expecting an "order prepared" notification and the operator of that POS will be prompted to send one,
There is no guarantee that the POS operator will trigger this notification so Providers should not build their workflow to expect it 100% of the time.
Nullable
MaxLength(64)
providerDisplayName :
string
In the case where Provider is aggregating orders from multiple external channels/sources/marketplaces, this property can be used to assign a
name that will used in place of ProviderName on all customer/staff facing UI/physical media.
It should be used to identify the actual downstream order provider fulfilling the order.
If null/empty the ROS assigned ProviderName will be utilised.
Nullable
MaxLength(16)
providerPickupCode :
string
Semi unique human readable ID supplied by third party provider identifying this order for the person performing pickup (eg - a 4 digit number). These are expected to repeat over a long period of time
Can be null
Nullable
MaxLength(128)
Truncates
consumerKitchenComment :
string
Optional kitchen comment provided by consumer
Nullable
dateTimeCreatedUTC :
string (ISO 8601 DateTime)
UTC date/time the order was created by the provider
Nullable
dateTimePrepareForUTC :
string (ISO 8601 DateTime)
UTC date/time the order is to be prepared for. This is a guide for the outlet to not prepare an order immediately but to instead attempt to make it for the specified time.
null indicates prepare the order as soon as possible
Nullable
dateTimeExpiresAtUTC :
string (ISO 8601 DateTime)
UTC date/time when this order is determined to be beyond worth making. Useful safety in case a site goes offline for an extended period of time.
Expired orders will be automatically rejected as per normal workflow.
If null - it will be set using DefaultExpiryLength
testOrder : bool
If set - the POS will treat this as a normal order (so a third party should expect the normal order processing) however it will be marked
as a "training" transaction internally and no aspect of this order will be used for stock levels, sales reporting etc. The order will not be prepared
by the kitchen and any included payments/taxes will not be expected to be actually collected.
This flag should ONLY be used for testing purposes only.
Nullable
MaxLength(8)
serviceModeEntityID :
string
The service mode entity id for this order if applicable (eg a table number, takeaway number). Null/blank means no specific location/entity within the service mode.
Setting this should be combined with setting ServiceModeID.
Only really applicable for RemoteOrderType.EatIn
Nullable
serviceModeID :
string (GUID)
This will be the ID of the ServiceMode (from Menu.ServiceMode.ServiceModeID) for RemoteOrderType.EatIn flows where outlet staff will physically deliver the order to the consumer while they are seated in the outlet.
This should be used in conjunction with ServiceModeEntityID
Nullable
collectionPointID :
string (GUID)
For RemoteOrderType.EatIn flows where a consumer has selected a preference for a collection point to pickup their order, this is where the EatInCollectionPoint.CollectionPointServiceModeID
should be recorded. Set this to null to indicate that the consumer has not selected any preference
Please be aware that this is only a preference for a collection point. The outlet will have final say about where the order is actually served from.
Nullable
decimal(18, 2)
deliveryAmount :
number (decimal)
Surcharge being paid by consumer for delivery (if applicable)
Nullable
totalTaxCollected :
RemoteOrderTaxCollectedAmount
[]
The optional tax totals across all products ordered. Not required if the provider is NOT taking payments.
Missing entries for a RemoteOrderTaxID will indicate that no tax was collected for that particular RemoteOrderTax.
The TaxID's must match the RemoteOrderTax labels sent with the RemoteOrder Menu.
consumerRequestsCutlery : bool
If true - the end consumer has requested (likely disposable) cutlery to be included with their order. The POS will display a message to include cutlery.
If false the POS will not display any prompt about including cutlery.
Nullable
products :
RemoteOrderProduct
[]
Products associated with this order
Nullable
payments :
RemoteOrderPayment
[]
Payments associated with this order
Nullable
orderAdjustments :
RemoteOrderAdjustment
[]
Adjustments associated with this order (i.e. applying to everything on the order)
Nullable
MaxLength(64)
consumerProviderContactID :
string
ID of consumer
consumer contact details - can be null - as defined by third party provider
Nullable
MaxLength(128)
Truncates
consumerEmail :
string
Email of consumer
consumer contact details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
consumerPreferredName :
string
Preferred name of consumer
consumer contact details - can be null - as defined by third party provider
Nullable
MaxLength(64)
Truncates
consumerFullName :
string
Full name of consumer
consumer contact details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
consumerPhone :
string
Phone number of consumer
consumer contact details - can be null - as defined by third party provider
Nullable
MaxLength(32)
courierProviderContactID :
string
ID of courier
courier contact details - can be null - as defined by third party provider
Nullable
MaxLength(64)
Truncates
courierEmail :
string
Email of courier
courier contact details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
courierPreferredName :
string
Preferred name of courier
courier contact details - can be null - as defined by third party provider
Nullable
MaxLength(64)
Truncates
courierFullName :
string
Full name of courier
courier contact details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
courierPhone :
string
Phone number of courier
courier contact details - can be null - as defined by third party provider
Nullable
MaxLength(64)
providerDeliveryID :
string
Unique ID of this delivery details as defined by third party provider
delivery details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
deliveryCompanyName :
string
The name of the company performing delivery
delivery details - can be null - as defined by third party provider
Nullable
dateTimeEstimatedDeliveryUTC :
string (ISO 8601 DateTime)
UTC date/time for when this is estimated to be delivered
delivery details - can be null - as defined by third party provider
Nullable
deliveryLinearDistanceMetres :
number (int)
Distance between pickup and delivery point in meters (in a straight line)
delivery details - can be null - as defined by third party provider
Nullable
deliveryRealDistanceMetres :
number (int)
Distance between pickup and delivery point in meters (as travelled by road)
delivery details - can be null - as defined by third party provider
Nullable
MaxLength(128)
Truncates
pickupStreetAddress :
string
Street address for pickup
delivery pickup details - can be null - as defined by third party provider
Nullable
MaxLength(64)
Truncates
pickupAddressDetails :
string
Additional details for street address pickup
delivery pickup details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
pickupCity :
string
Name of city for pickup address
delivery pickup details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
pickupProvince :
string
Name of province/state for pickup address
delivery pickup details - can be null - as defined by third party provider
Nullable
MaxLength(16)
Truncates
pickupPostCode :
string
Post Code for pickup address
delivery pickup details - can be null - as defined by third party provider
Nullable
MaxLength(128)
Truncates
pickupNotes :
string
General free text notes about pickup location
delivery pickup details - can be null - as defined by third party provider
Nullable
MaxLength(128)
Truncates
pickupGooglePlaceID :
string
Google place ID for pickup address
delivery pickup details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
pickupPlaceName :
string
Geopgraphical place name for pickup address
delivery pickup details - can be null - as defined by third party provider
Nullable
pickupLatitude :
number (decimal)
WGS:84 Latitude
delivery pickup details - can be null - as defined by third party provider
Nullable
pickupLongitude :
number (decimal)
WGS:84 Longitude
delivery pickup details - can be null - as defined by third party provider
Nullable
MaxLength(128)
Truncates
deliveryStreetAddress :
string
Street address for delivery
delivery delivery details - can be null - as defined by third party provider
Nullable
MaxLength(64)
Truncates
deliveryAddressDetails :
string
Additional details for street address delivery
delivery delivery details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
deliveryCity :
string
Name of city for delivery address
delivery delivery details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
deliveryProvince :
string
Name of province/state for delivery address
delivery delivery details - can be null - as defined by third party provider
Nullable
MaxLength(16)
Truncates
deliveryPostCode :
string
Post Code for delivery address
delivery delivery details - can be null - as defined by third party provider
Nullable
MaxLength(128)
Truncates
deliveryNotes :
string
General free text notes about delivery location
delivery delivery details - can be null - as defined by third party provider
Nullable
MaxLength(128)
Truncates
deliveryGooglePlaceID :
string
Google place ID for delivery address
delivery delivery details - can be null - as defined by third party provider
Nullable
MaxLength(32)
Truncates
deliveryPlaceName :
string
Geopgraphical place name for delivery address
delivery delivery details - can be null - as defined by third party provider
Nullable
deliveryLatitude :
number (decimal)
WGS:84 Latitude
delivery delivery details - can be null - as defined by third party provider
Nullable
deliveryLongitude :
number (decimal)
WGS:84 Longitude
delivery delivery details - can be null - as defined by third party provider
Example
{
"OutletID": "36637eaa-6aed-4868-93f9-cc1ed3145db1",
"ProviderID": 9999,
"ProviderName": "",
"ProviderOrderID": "abc123",
"CurrencyCode": "AUD",
"RemoteOrderType": 1,
"TotalAmount": 15,
"Payments": [
{
"AmountPaid": 15,
"AmountOutletTip": 2.5
}
],
"Products": [
{
"Name": "Hamburger",
"ProductID": "plu123",
"Quantity": 2,
"Price": 5,
"TotalAmount": 10,
"Attributes": [
{
"Name": "Fries",
"ProductAttributeID": "plu456",
"ProductAttributeModifierID": "396123a7-df39-45b7-991c-1506c582cbbc",
"Quantity": 2,
"Price": 2.5,
"TotalAmount": 5,
"TaxCollected": [
{
"RemoteOrderTaxID": 1,
"TotalTaxableSales": 5,
"TotalInclusiveAmount": 0.9876543
}
]
}
],
"TaxCollected": [
{
"RemoteOrderTaxID": 1,
"TotalTaxableSales": 10,
"TotalInclusiveAmount": 1.4562411
}
]
}
],
"TotalTaxCollected": [
{
"RemoteOrderTaxID": 1,
"TotalTaxableSales": 15,
"TotalInclusiveAmount": 2.4438954
}
]
}