{"note":"OpenAPI conversion -- returning structured metadata","name":"just-eat-co-uk","description":"Just Eat API","version":"1.0.0","base_url":"https://uk.api.just-eat.io","endpoints":98,"raw":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Just Eat API\n@base https://uk.api.just-eat.io\n@version 1.0.0\n@auth ApiKey Authorization in header | Bearer basic | Bearer bearer | openIdConnect | Bearer bearer\n@endpoints 98\n@hint download_for_search\n@toc {tenant}(4), attempted-delivery-query-resolved(1), delivery-failed(1), checkout(3), orders(20), late-order-compensation-query(1), late-order-query(1), consumers(7), delivery-fees(1), delivery(12), acceptance-requested(1), order-accepted(1), order-cancelled(1), order-rejected(1), redelivery-requested(1), driver-assigned-to-delivery(1), driver-at-delivery-address(1), driver-at-restaurant(1), driver-has-delivered-order(1), driver-location(1), driver-on-their-way-to-delivery-address(1), order-is-ready-for-pickup(1), order-requires-delivery-acceptance(1), order-ready-for-preparation-async(1), order-ready-for-preparation-sync(1), send-to-pos-failed(1), restaurants(24), restaurant-offline-status(1), restaurant-online-status(1), order-eligible-for-restaurant-compensation(1), menu-ingestion-complete(1), order-time-updated(1), search(2)\n\n@group {tenant}\n@endpoint POST /{tenant}/orders/{orderId}/queries/attempteddelivery\n@desc Delivery Attempt Failed\n@required {tenant: str # Request tenant e.g. uk., orderId: str # Id for the order., Authorization: str # Containing a partner issued API key e.g. `JE-API-KEY ABCDE123456789`}\n@optional {ReasonCode: str(problem_with_address/no_answer) # The reason the attempted delivery event was created}\n@returns(200) OK\n@errors {400: Bad Request - returned if providing invalid data such as an unacceptable reason code, 401: Unauthorized - consumer has not provided the necessary credentials, 404: Resource not found, 500: Internal server error}\n\n@endpoint POST /{tenant}/orders/{orderId}/queries/attempteddelivery/resolution/redeliverorder\n@desc Request Redelivery of the Order\n@required {tenant: str # Request tenant e.g. uk., orderId: str # Id for the order., Authorization: str # Containing a partner issued API key e.g. `JE-API-KEY ABCDE123456789`}\n@optional {Status: str(driver_at_address/repreparing) # The current status of the order, NewDueDate: str(date-time) # Updated due date for delivery of the order}\n@returns(200) OK\n@errors {400: Bad Request - returned if providing invalid data such as an unacceptable reason code, 401: Unauthorized - consumer has not provided the necessary credentials, 404: Resource not found, 500: Internal server error}\n\n@endgroup\n\n@group attempted-delivery-query-resolved\n@endpoint PUT /attempted-delivery-query-resolved\n@desc Attempted delivery query resolved\n@optional {OrderId: str # The ID of the order for which an attempted delivery query has been resolved, Tenant: str(uk/dk/es/ie/it/no/au/nz) # The tenant of the restaurant the order was placed at, Resolution: map{Type: str, Cancellation: map, Redelivery: map} # Details of the resolution to the query}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group delivery-failed\n@endpoint PUT /delivery-failed\n@desc Delivery Attempt Failed\n@optional {OrderId: str # The id of the order, RestaurantId: num # The id of the restaurant, Reason: str # The reason for creating the attempted delivery, Tenant: str # The tenant associated with the order}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group checkout\n@endpoint GET /checkout/{tenant}/{checkoutId}\n@desc Get Checkout\n@required {tenant: str # A two-character country code.   The following countries are supported:   - United Kingdom (UK)   - Australia (AU)   - New Zealand (NZ), checkoutId: str # A unique identifier for a checkout. This is currently a Basket Id., User-Agent: str # Allows the server to identify the application making the request.}\n@returns(200) {restaurant: map{id: str, availabilityId: str}, serviceType: str, customer: map{firstName: str?, lastName: str?, phoneNumber: str?}, fulfilment: map{time: map?{asap: bool, scheduled: map?{from: str, to: str}}, location: map?{address: map?{lines: [str], locality: str?, administrativeArea: str?, postalCode: str?}, geolocation: map?{latitude: num(decimal), longitude: num(decimal)}}}, isFulfillable: bool, issues: [map]} # OK : Request has succeeded.\n@errors {400: BAD REQUEST : Cannot process the request due to error by client., 401: UNAUTHORIZED : Missing authentication credentials to access target resource., 403: FORBIDDEN : Not authorised to access target resource., 404: NOT FOUND : Target resource could not be found., 409: CONFLICT : Request not completed as it conflicts with target resource., 429: TOO MANY REQUESTS : Request not completed as server has received too many requests in a given amount of time., 500: INTERNAL SERVER ERROR : Error on server preventing request from being fulfilled., 503: SERVICE UNAVAILABLE : Server currently unable to fulfil the request. The request can be retried.}\n\n@endpoint PATCH /checkout/{tenant}/{checkoutId}\n@desc Update Checkout\n@required {tenant: str # A two-character country code.   The following countries are supported:   - United Kingdom (UK)   - Australia (AU)   - New Zealand (NZ), checkoutId: str # A unique identifier for a checkout. This is currently a Basket Id., User-Agent: str # Allows the server to identify the application making the request.}\n@returns(200) {isFulfillable: bool, issues: [map]} # OK : Request has succeeded.\n@errors {400: BAD REQUEST : Cannot process the request due to error by client., 401: UNAUTHORIZED : Missing authentication credentials to access target resource., 403: FORBIDDEN : Not authorised to access target resource., 404: NOT FOUND : Target resource could not be found., 409: CONFLICT : Request not completed as it conflicts with target resource., 429: TOO MANY REQUESTS : Request not completed as server has received too many requests in a given amount of time., 500: INTERNAL SERVER ERROR : Error on server preventing request from being fulfilled., 503: SERVICE UNAVAILABLE : Server currently unable to fulfil the request. The request can be retried.}\n\n@endpoint GET /checkout/{tenant}/{checkoutId}/fulfilment/availabletimes\n@desc Get Available Fulfilment Times\n@required {tenant: str # A two-character country code.   The following countries are supported:   - United Kingdom (UK)   - Australia (AU)   - New Zealand (NZ), checkoutId: str # A unique identifier for a checkout. This is currently a Basket Id., User-Agent: str # Allows the server to identify the application making the request.}\n@returns(200) {times: [map], asapAvailable: bool} # OK : Request has succeeded.\n@errors {400: BAD REQUEST : Cannot process the request due to error by client., 404: NOT FOUND : Target resource could not be found., 409: CONFLICT : Request not completed as it conflicts with target resource., 429: TOO MANY REQUESTS : Request not completed as server has received too many requests in a given amount of time., 500: INTERNAL SERVER ERROR : Error on server preventing request from being fulfilled., 503: SERVICE UNAVAILABLE : Server currently unable to fulfil the request. The request can be retried.}\n\n@endgroup\n\n@group orders\n@endpoint POST /orders/{tenant}/{orderId}/consumerqueries/lateorder/restaurantresponse\n@desc Response to Late Order Update Request\n@required {tenant: str # Request tenant., orderId: str # Id for the order., Authorization: str # Containing a partner issued API key e.g. `JE-API-KEY ABCDE123456789`}\n@optional {lateOrderStatus: str(Preparing/OnItsWay/Delivered) # The updated later order query status, additionalDeliveryTimeToAddMinutes: int # The amount of time to add to the current delivery estimate in minutes}\n@returns(202) Accepted\n@errors {400: Bad Request. Returned if the request is invalid i.e. missing a required parameters, 401: Unauthorized. Consumer is not authorized to modify the resource, 404: Not Found. Order query or Order not found, 409: Conflict. Query not in state to accept response, 500: Internal Server Error}\n@example_request {\"lateOrderStatus\":\"OnItsWay\",\"additionalDeliveryTimeToAddMinutes\":5}\n\n@endpoint POST /orders/{tenant}/{orderId}/consumerqueries/lateordercompensation/restaurantresponse\n@desc Update late order compensation request with Restaurant response\n@required {tenant: str # Request tenant., orderId: str # Id for the order., Authorization: str # Containing a partner issued API key e.g. `JE-API-KEY ABCDE123456789`}\n@optional {orderId: str # The ID of the late order compensation request that this response relates to., isAccepted: bool # Flag to indicate whether a compensation request has been accepted or rejected., acceptedAmount: int # The monetary amount of compensation granted, in cents/pence. Required when `isAccepted = true`., rejectedReasonCode: str(BadTraffic/BadWeather/BusierThanExpected/CompensatedWithItem/NoReason) # - `BadTraffic` : The driver was stuck in heavy traffic, sorry. - `BadWeather` : The bad weather was delaying our deliveries, sorry. - `BusierThanExpected` : Our restaurant was busier than we expected. - `CompensatedWithItem` : We gave you something from the menu free of charge to make up for it. - `NoReason` : We're really sorry your order was late. We hope you enjoyed your food.}\n@returns(202) Accepted\n@errors {400: Bad Request. Returned if the request is invalid - e.g. contains missing or invalid parameters., 401: Unauthorized. Consumer is not authorized to modify the resource, 404: Not Found. Order query or Order not found, 409: Conflict. Query not in state to accept response, 500: Internal Server Error}\n\n@endgroup\n\n@group late-order-compensation-query\n@endpoint POST /late-order-compensation-query\n@desc late order compensation query, restaurant response required\n@optional {restaurantId: str # Just Eat restaurant identifier, orderId: str # Just Eat order identifier, tenant: str # Tenant (Country) of order restaurant., compensationOptions: [map{amount: num(decimal), isRecommended: bool}]}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification\n\n@endgroup\n\n@group late-order-query\n@endpoint POST /late-order-query\n@desc late order query, restaurant response required\n@optional {restaurantId: str # Just Eat restaurant identifier, orderId: str # Just Eat order identifier, tenant: str # Tenant (Country) of order restaurant.}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group consumers\n@endpoint POST /consumers/{tenant}\n@desc Create consumer\n@required {tenant: str # The identifier for the tenant. The only supported tenants are `uk`, `au` and `nz`, emailAddress: str(email) # The consumer's email address, firstName: str # The consumer's first name, lastName: str # The consumer's last name}\n@optional {password: str # The consumer's password, registrationSource: str(Native/Guest)=Native # The registration source of the consumer. Australia and New Zealand only support Guest, marketingPreferences: [map{channelName: str, isSubscribed: bool, dateUpdated: str(date-time)}]}\n@returns(201) {type: str, token: str} # Consumer created.\n@errors {400: Bad request., 403: Forbidden., 404: The specified tenant does not exist., 409: The specified email already exists., 500: Internal Server Error}\n\n@endpoint GET /consumers/{tenant}\n@desc Get consumers details\n@required {tenant: str # The identifier for the tenant., emailAddress: str # Email address of the consumer., accountType: str=registered # The account type of the consumer - currently only 'registered' accounts are supported., count: str # Returns the number of consumers that matches the `emailAddress` and `accountType`. The query value should be empty, e.g. `/consumers/uk/?emailAddress=someone@email.com&accountType=registered&count`.}\n@returns(200) Success\n@errors {400: Bad request., 404: The specified tenant does not exist., 500: Internal Server Error, 501: The operation has not been implemented}\n\n@endpoint GET /consumers/{tenant}/me/communication-preferences\n@desc Get communication preferences\n@required {tenant: str # Request tenant.}\n@returns(200) {marketing: map{isDefault: bool, subscribedChannels: [str]}} # Success\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint GET /consumers/{tenant}/me/communication-preferences/{type}\n@desc Get channel subscriptions for a given consumer's communication preference type\n@required {tenant: str # Request tenant., type: str # The type of communication preferences.}\n@returns(200) {isDefault: bool, subscribedChannels: [str]} # Success\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint PUT /consumers/{tenant}/me/communication-preferences/{type}\n@desc Set only the channel subscriptions for a given consumer's communication preference type\n@required {tenant: str # Request tenant., type: str # The type of communication preferences.}\n@optional {subscribedChannels: [str] # The list of channels that the consumer should only be subscribed to.}\n@returns(204) Success\n@errors {401: Unauthorized, 404: Not Found, 500: Internal Server Error}\n@example_request {\"subscribedChannels\":[\"email\",\"sms\"]}\n\n@endpoint POST /consumers/{tenant}/me/communication-preferences/{type}/subscribedChannels/{channel}\n@desc Subscribe to a specific communication preference channel\n@required {tenant: str # Request tenant., type: str # The type of communication preferences., channel: str # The channel.}\n@returns(204) Success\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint DELETE /consumers/{tenant}/me/communication-preferences/{type}/subscribedChannels/{channel}\n@desc Remove subscription of a specific communication preference channel\n@required {tenant: str # Request tenant., type: str # The type of communication preference., channel: str # The channel.}\n@returns(204) Success\n@errors {401: Unauthorized, 404: Not Found, 500: Internal Server Error}\n\n@endgroup\n\n@group delivery-fees\n@endpoint GET /delivery-fees/{tenant}\n@desc Get restaurant delivery fees\n@required {tenant: str # Tenant containing the restaurants., restaurantIds: [str] # Restaurant IDs which fees are requested for. e.g. `?restaurantIds=1,2,3,4`, deliveryTime: str(date-time) # Delivery date/time when fees are required (ISO8601 format).}\n@optional {zone: str # Postcode or other location name identifying the location to which delivery is required. For use when precise location is not available. This will be removed in future in favour of location., latlong: [num(double)] # Point to which delivery is required (latitude, longitude). Supply this where possible as support for zone-only based lookups will be removed in future.}\n@returns(200) {restaurants: [map]} # Success\n@errors {400: Bad request, 404: Not found}\n\n@endgroup\n\n@group delivery\n@endpoint GET /delivery/pools\n@desc Get your delivery pools\n@returns(200) {delivery-pool-id: map{name: str, restaurants: [num(int32)]}} # OK\n@errors {500: Internal Server Error}\n\n@endpoint POST /delivery/pools\n@desc Create a new delivery pool\n@required {name: str # The name of the pool, used by operations teams, in reports, etc.}\n@optional {restaurants: [num(int32)] # A list of Just Eat restaurant ids served by the delivery pool.}\n@returns(201) Pool has been created.\n@errors {400: There was something invalid in your request - check response body for details, 500: Internal Server Error}\n\n@endpoint GET /delivery/pools/{deliveryPoolId}\n@desc Get an individual delivery pool\n@returns(200) {name: str, restaurants: [num(int32)]} # OK\n@errors {404: The pool could not be found, 500: Internal Server Error}\n\n@endpoint DELETE /delivery/pools/{deliveryPoolId}\n@desc Delete a delivery pool\n@returns(200) Pool deleted\n@errors {404: The pool could not be found, 500: Internal Server Error}\n\n@endpoint PATCH /delivery/pools/{deliveryPoolId}\n@desc Modify a delivery pool\n@optional {name: str # The name of the pool, used by operations teams, in reports, etc., restaurants: [num(int32)] # A list of Just Eat restaurant ids served by the delivery pool.}\n@returns(202) {name: str, restaurants: [num(int32)]} # Pool has been updated\n@errors {400: There was something invalid in your request - check response body for details, 404: The pool could not be found, 409: A restaurant in your request already belongs to another pool, 500: Internal Server Error}\n\n@endpoint PUT /delivery/pools/{deliveryPoolId}\n@desc Replace an existing delivery pool\n@required {name: str # The name of the pool, used by operations teams, in reports, etc.}\n@optional {restaurants: [num(int32)] # A list of Just Eat restaurant ids served by the delivery pool.}\n@returns(202) {name: str, restaurants: [num(int32)]} # Pool has been replaced\n@errors {400: There was something invalid in your request - check response body for details, 404: The pool could not be found, 409: A restaurant in your request already belongs to another pool, 500: Internal Server Error}\n\n@endpoint GET /delivery/pools/{deliveryPoolId}/availability/relative\n@desc Get availability for pickup\n@returns(200) {bestGuess: str} # OK\n@errors {404: The pool could not be found}\n\n@endpoint PUT /delivery/pools/{deliveryPoolId}/availability/relative\n@desc Set availability for pickup\n@optional {bestGuess: str # Your best estimation (hh:mm:ss)}\n@returns(202) Update will take effect shortly\n@errors {404: The pool could not be found}\n\n@endpoint PUT /delivery/pools/{deliveryPoolId}/hours\n@desc Set the delivery pools daily start and end times\n@required {monday: map{closed: bool, poolTimes!: [map]}, tuesday: map{closed: bool, poolTimes!: [map]}, wednesday: map{closed: bool, poolTimes!: [map]}, thursday: map{closed: bool, poolTimes!: [map]}, friday: map{closed: bool, poolTimes!: [map]}, saturday: map{closed: bool, poolTimes!: [map]}, sunday: map{closed: bool, poolTimes!: [map]}}\n@returns(200) Pool hours have been updated\n@errors {404: The pool could not be found}\n\n@endpoint PUT /delivery/pools/{deliveryPoolId}/restaurants\n@desc Add restaurants to an existing delivery pool\n@returns(200) {restaurants: [num(int32)]} # OK\n@errors {400: There was something invalid in your request - check response body for details, 404: The pool could not be found, 409: The restaurants could not be added to the pool. Typically this is because they are already assigned to another pool}\n\n@endpoint DELETE /delivery/pools/{deliveryPoolId}/restaurants\n@desc Remove restaurants from a delivery pool\n@optional {restaurants: [num(int32)] # A list of Just Eat restaurant ids served by the delivery pool.}\n@returns(200) Pool has been updated\n@errors {400: There was something invalid in your request - check response body for details, 404: The pool could not be found}\n\n@endgroup\n\n@group orders\n@endpoint PUT /orders/{orderId}/accept\n@desc Accept order\n@required {orderId: str}\n@optional {TimeAcceptedFor: str(date-time)}\n@returns(200) OK\n@errors {404: Order could not be found, 409: Conflict. This order has either already been accepted, rejected or ignored by restaurant or cancelled by ops}\n\n@endpoint PUT /orders/{orderId}/cancel\n@desc Cancel order\n@required {orderId: str}\n@optional {Message: str # Reason why this order is being cancelled.}\n@returns(200) OK\n@errors {404: Order could not be found, 409: Conflict. This order has already been cancelled}\n\n@endpoint POST /orders/{orderId}/complete\n@desc Complete order\n@required {orderId: str # The ID of the order to mark as complete}\n@returns(204) No content - status updated successfully\n@errors {404: Not found - order could not be found, 409: Conflict - this order has already been marked as cancelled or complete, 500: Internal Server Error}\n\n@endpoint PUT /orders/{orderId}/duedate\n@desc Update order ETA\n@required {orderId: str}\n@optional {DueDate: str(date-time) # The updated ETA for the order}\n@returns(200) OK\n@errors {400: The due date is missing, or out of range (either in the past, or > 7 days in the future)., 404: The order could not be found.}\n\n@endpoint PUT /orders/{orderId}/ignore\n@desc Ignore order\n@required {orderId: str}\n@returns(200) OK\n@errors {404: Order could not be found, 409: Conflict. This order has either already been accepted, rejected or ignored by restaurant or cancelled by ops}\n\n@endpoint POST /orders/{orderId}/readyforcollection\n@desc Mark order as ready for collection\n@required {orderId: str # The ID of the order to mark as ready for collection}\n@returns(204) No content - status updated successfully\n@errors {400: Bad request - order cannot be marked as ready for collection because it is not a collection order, 404: Not found - order could not be found, 409: Conflict - this order is not in the accepted state, 500: Internal Server Error}\n\n@endpoint PUT /orders/{orderId}/reject\n@desc Reject order\n@required {orderId: str}\n@optional {Message: str # Reason why this order is being rejected.}\n@returns(200) OK\n@errors {404: Order could not be found, 409: Conflict. This order has either already been accepted, rejected or ignored by restaurant or cancelled by ops}\n\n@endgroup\n\n@group acceptance-requested\n@endpoint POST /acceptance-requested\n@desc Acceptance requested\n@optional {OrderId: str, FriendlyOrderReference: str, Currency: str, TotalPrice: num(money), Fulfilment: map{Method: str, PhoneNumber: str, PhoneMaskingCode: str, CustomerDueDate: str(date-time), CustomerDueAsap: bool, PreparationTime: str(timespan), Address: map}, Payment: map{Lines: [map]}, Customer: map{Id: num, Name: str, PreviousRestaurantOrderCount: num, PreviousTotalOrderCount: num}, Restrictions: [map{Type: str}] # This is a list of types of restricted items contained in the order., Items: [map{Reference: str, Name: str, Quantity: num, UnitPrice: num(money), TotalPrice: num(money), Items: [map]}], PriceBreakdown: map{Discount: num(money), Tips: num(money), Taxes: num(money), Items: num(money), Fees: map}, PlacedDate: str(date-time), CustomerNotes: map, Restaurant: map{Id: str, Reference: str, Name: str, Address: map, TimeZone: str, PhoneNumber: str}, IsTest: bool}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group order-accepted\n@endpoint POST /order-accepted\n@desc Order accepted\n@optional {OrderId: str, AcceptedFor: str(date-time), Event: str}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group order-cancelled\n@endpoint POST /order-cancelled\n@desc Order cancelled\n@optional {OrderId: str, Event: str, Reason: str(cust_cancelled_changed_mind/cust_cancelled_delivery_too_long/cust_cancelled_made_mistake/cust_cancelled_other/delivery_partner_cancelled/rest_cancelled_customer_absent/rest_cancelled_customer_requested/rest_cancelled_declined/rest_cancelled_drivers_unavailable/rest_cancelled_fake_order/rest_cancelled_other/rest_cancelled_out_of_stock/rest_cancelled_too_busy/system_cancelled_other/system_cancelled_test_order) # The reason the order was cancelled.}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group order-rejected\n@endpoint POST /order-rejected\n@desc Order rejected\n@optional {RejectedAt: str(date-time), RejectedBy: str, RejectedReason: str, Event: str}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group redelivery-requested\n@endpoint PUT /redelivery-requested\n@desc Customer Requested Redelivery\n@optional {OrderId: str, Tenant: str, Update: str, Notes: str}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group delivery\n@endpoint GET /delivery/estimate\n@desc Get delivery estimate\n@required {restaurantReference: str # The reference of the restaurant to estimate the delivery time from.}\n@optional {toLat: str # The latitude of the position to estimate the delivery time to., toLon: str # The longitude of the position to estimate the delivery time to., toPostcode: str # The postcode to estimate the delivery time to.}\n@returns(200) {RestaurantReference: str, DurationInMinutes: str} # OK\n\n@endgroup\n\n@group orders\n@endpoint PUT /orders/{orderId}/deliverystate/atdeliveryaddress\n@desc Update order with driver at delivery address details\n@required {orderId: str # Just Eat order identifier}\n@optional {Location: map{Latitude!: num(double), Longitude!: num(double), Speed: num(double), Heading: num(double), Accuracy: num(double)} # GeoLocation object containing latitude and longitude values., TimeStampWithUtcOffset: str(date-time) # This should represent the delivery detailed updated timestamp.}\n@returns(200) OK\n\n@endpoint PUT /orders/{orderId}/deliverystate/atrestaurant\n@desc Update order with driver at restaurant details\n@required {orderId: str # Just Eat order identifier}\n@optional {EtaAtDeliveryAddress: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the delivery address., Location: map{Latitude!: num(double), Longitude!: num(double), Speed: num(double), Heading: num(double), Accuracy: num(double)} # GeoLocation object containing latitude and longitude values., TimeStampWithUtcOffset: str(date-time) # This should represent the Eta calculated timestamp.}\n@returns(200) OK\n\n@endpoint PUT /orders/{orderId}/deliverystate/atrestauranteta\n@desc Update the driver's estimated time to arrive at the Restaurant\n@required {orderId: str # Just Eat order identifier}\n@optional {estimatedAt: str(date-time) # This is the time at which you are doing the estimation, bestGuess: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the restaurant.}\n@returns(200) OK\n\n@endpoint PUT /orders/{orderId}/deliverystate/delivered\n@desc Update order with delivered details\n@required {orderId: str # Just Eat order identifier}\n@optional {Location: map{Latitude!: num(double), Longitude!: num(double), Speed: num(double), Heading: num(double), Accuracy: num(double)} # GeoLocation object containing latitude and longitude values., TimeStampWithUtcOffset: str(date-time) # This should represent the delivery detailed updated timestamp.}\n@returns(200) OK\n\n@endpoint PUT /orders/{orderId}/deliverystate/driverassigned\n@desc Update order with driver assigned details\n@required {orderId: str # Just Eat order identifier}\n@optional {DriverName: str # This should represent the driver's name., DriverContactNumber: str # This should represent the driver's contact number., VehicleDetails: map{Vehicle: str, VehicleRegistration: str}, EtaAtRestaurant: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the restaurant. In other words, it should not just contain the pick-up time initially requested by Just Eat., EtaAtDeliveryAddress: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the delivery address., Location: map{Latitude!: num(double), Longitude!: num(double), Speed: num(double), Heading: num(double), Accuracy: num(double)} # GeoLocation object containing latitude and longitude values., TimeStampWithUtcOffset: str(date-time) # This should represent the driver assigned timestamp.}\n@returns(200) OK\n\n@endpoint PUT /orders/{orderId}/deliverystate/driverlocation\n@desc Update the driver's current location\n@required {orderId: str # Just Eat order identifier}\n@optional {EtaAtDeliveryAddress: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the delivery address., EtaAtRestaurant: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the restaurant., Location: map{Latitude!: num(double), Longitude!: num(double), Speed: num(double), Heading: num(double), Accuracy: num(double)} # GeoLocation object containing latitude and longitude values., TimeStampWithUtcOffset: str(date-time) # This should represent the location updated timestamp.}\n@returns(200) OK\n\n@endpoint PUT /orders/{orderId}/deliverystate/driverunassigned\n@desc Update order with driver unassigned details\n@required {orderId: str # Just Eat order identifier}\n@optional {Comment: str # This should represent the comment on the unassignment., DriverContactNumber: str # This should represent the driver's contact number., DriverName: str # This should represent the driver's name., EtaAtDeliveryAddress: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the delivery address., EtaAtRestaurant: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the restaurant. In other words, it should not just contain the pick-up time initially requested by Just Eat., Location:: map{Latitude!: num(double), Longitude!: num(double), Speed: num(double), Heading: num(double), Accuracy: num(double)} # GeoLocation object containing latitude and longitude values., Reason: str # This should represent the delivery partner's reason for unassigning themselves from the order., TimeStampWithUtcOffset: str(date-time) # This should represent the driver unassigned timestamp., UnassignedBy: str # This should represent the actor who triggered unassignment.}\n@returns(200) OK\n@errors {400: Bad Request.}\n\n@endpoint PUT /orders/{orderId}/deliverystate/onitsway\n@desc Update order with driver on its way details\n@required {orderId: str}\n@optional {EstimatedArrivalTime: str(date-time) # This should represent the delivery partner's best guess at when the driver will arrive at the customer's address. In other words, it should not just contain the delivery time initially requested by Just Eat., Location: map{Latitude!: num(double), Longitude!: num(double), Speed: num(double), Heading: num(double), Accuracy: num(double)} # GeoLocation object containing latitude and longitude values., TimeStampWithUtcOffset: str(date-time) # This should represent the driver on its ways timestamp.}\n@returns(200) OK\n\n@endpoint PUT /orders/deliverystate/driverlocation\n@desc Update current driver locations (bulk upload)\n@returns(200) OK\n\n@endgroup\n\n@group driver-assigned-to-delivery\n@endpoint PUT /driver-assigned-to-delivery\n@desc Driver Assigned to Delivery\n@optional {TimeStamp: str(date-time), EstimatedPickupTime: str(date-time), EstimatedDeliveryTime: str(date-time), DriverName: str, DriverContactNumber: str, Event: str(DriverAssigned/DriverAtRestaurant/OnItsWay/AtDeliveryAddress/Delivered), OrderId: str}\n@returns(200) OK\n\n@endgroup\n\n@group driver-at-delivery-address\n@endpoint PUT /driver-at-delivery-address\n@desc Driver at delivery address\n@optional {TimeStamp: str(date-time), EstimatedPickupTime: str(date-time), EstimatedDeliveryTime: str(date-time), DriverName: str, DriverContactNumber: str, Event: str(DriverAssigned/DriverAtRestaurant/OnItsWay/AtDeliveryAddress/Delivered), OrderId: str}\n@returns(200) OK\n\n@endgroup\n\n@group driver-at-restaurant\n@endpoint PUT /driver-at-restaurant\n@desc Driver at restaurant\n@optional {TimeStamp: str(date-time), EstimatedPickupTime: str(date-time), EstimatedDeliveryTime: str(date-time), DriverName: str, DriverContactNumber: str, Event: str(DriverAssigned/DriverAtRestaurant/OnItsWay/AtDeliveryAddress/Delivered), OrderId: str}\n@returns(200) OK\n\n@endgroup\n\n@group driver-has-delivered-order\n@endpoint PUT /driver-has-delivered-order\n@desc Driver has delivered order\n@optional {TimeStamp: str(date-time), EstimatedPickupTime: str(date-time), EstimatedDeliveryTime: str(date-time), DriverName: str, DriverContactNumber: str, Event: str(DriverAssigned/DriverAtRestaurant/OnItsWay/AtDeliveryAddress/Delivered), OrderId: str}\n@returns(200) OK\n\n@endgroup\n\n@group driver-location\n@endpoint PUT /driver-location\n@desc Driver Location\n@optional {TimeStamp: str(date-time), OrderId: str, Location: map{Latitude!: num(double), Longitude!: num(double)}}\n@returns(200) OK\n\n@endgroup\n\n@group driver-on-their-way-to-delivery-address\n@endpoint PUT /driver-on-their-way-to-delivery-address\n@desc Driver on their way to delivery address\n@optional {TimeStamp: str(date-time), EstimatedPickupTime: str(date-time), EstimatedDeliveryTime: str(date-time), DriverName: str, DriverContactNumber: str, Event: str(DriverAssigned/DriverAtRestaurant/OnItsWay/AtDeliveryAddress/Delivered), OrderId: str}\n@returns(200) OK\n\n@endgroup\n\n@group order-is-ready-for-pickup\n@endpoint PUT /order-is-ready-for-pickup\n@desc Order ready for pickup\n@optional {Event: str, Timestamp: str(date-time)}\n@returns(200) Upon successful receipt of the event, delivery partners should return a 200 HTTP status code indicating acknowledgement of transmission.\n\n@endgroup\n\n@group order-requires-delivery-acceptance\n@endpoint PUT /order-requires-delivery-acceptance\n@desc Order requires delivery acceptance\n@returns(201) In the event of successful handling of the request, a 201 status code should be returned, indicating acknowledgement of transmission success.\n\n@endgroup\n\n@group orders\n@endpoint POST /orders\n@desc Create order\n@required {OrderReference: str, TotalPrice: num(double), Restaurant: any, Customer: map{Name!: str, Email: str, PhoneNumber!: str, DisplayPhoneNumber: str, Address!: map}, Fulfilment: map{Method!: str, DueDate!: str(date-time), DueAsap: bool}, Payment: map{PaidDate: str(date-time), Tips: [map], Fees: [map], Taxes: [map], Lines!: [map]}, Items: [map{TotalPrice!: num(money), Reference!: str, Name!: str, Quantity!: int, UnitPrice: int(money), Items: [map]}]}\n@optional {x-je-api-version: num=1 # The api version to use. Version 2.0 is the only available version., FriendlyOrderReference: str, CustomerNotes: map{NoteForRestaurant: str, NoteForDelivery: str}, IsTest: bool}\n@returns(201) {OrderId: str} # Created\n@errors {400: Bad Request - Request is for deprecated API version or has failed validation in some way - see response body for details, 409: Conflict - you've already told us about an order with this `OrderReference`}\n\n@endgroup\n\n@group order-ready-for-preparation-async\n@endpoint POST /order-ready-for-preparation-async\n@desc Order ready for preparation (async)\n@optional {OrderId: str, Currency: str, TotalPrice: num(money), Fulfilment: map{Method: str, CustomerDueDate: str(date-time), CustomerDueAsap: bool, PrepareFor: str(date-time), PreparationTime: str(timespan), Address: map, PhoneNumber: str}, Payment: map{Lines: [map]}, Customer: map{Id: str, Name: str}, Items: [map{Reference: str, Name: str, Quantity: int, UnitPrice: int(money), Items: [map]}], PriceBreakdown: map{Discount: num(money), Tips: num(money), Taxes: num(money), Items: num(money), Fees: map}, CustomerNotes: map, PlacedDate: str(date-time), Restaurant: map{Id: str, Reference: str, Name: str, Address: map, PhoneNumber: str}, IsTest: bool}\n@returns(202) Upon successful receipt of this event, a `202` status code should be returned, indicating the request has been accepted. You should then later respond with the result of processing this request, via the [callback URL](#section/Async-Webhooks) endpoint.\n@errors {400: Should the initial validation of the order fail, return a `400` status code. NOTE: In this instance we do not also expect a failure callback via the async callback URL.}\n\n@endgroup\n\n@group order-ready-for-preparation-sync\n@endpoint POST /order-ready-for-preparation-sync\n@desc Order ready for preparation (sync)\n@optional {OrderId: str, Currency: str, TotalPrice: num(money), Fulfilment: map{Method: str, CustomerDueDate: str(date-time), CustomerDueAsap: bool, PrepareFor: str(date-time), PreparationTime: str(timespan), Address: map, PhoneNumber: str}, Payment: map{Lines: [map]}, Customer: map{Id: str, Name: str}, Items: [map{Reference: str, Name: str, Quantity: int, UnitPrice: int(money), Items: [map]}], PriceBreakdown: map{Discount: num(money), Tips: num(money), Taxes: num(money), Items: num(money), Fees: map}, CustomerNotes: map, PlacedDate: str(date-time), Restaurant: map{Id: str, Reference: str, Name: str, Address: map, PhoneNumber: str}, IsTest: bool}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group send-to-pos-failed\n@endpoint POST /send-to-pos-failed\n@desc Send to POS failed\n@optional {OrderId: str}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group restaurants\n@endpoint GET /restaurants/{tenant}/{restaurantId}/customerclaims\n@desc Get claims\n@required {tenant: str # Two letter code indicating the tenant, restaurantId: str # Just Eat restaurant identifier}\n@optional {fromDate: str(date-time) # Start date limiter, toDate: str(date-time) # End date limiter, limit: int(int32)=20 # Pagination limit, offset: int(int32) # Pagination offset, Accept: str # Indicates what type of response client understands and is also used for content type negotiation (if version is specified), otherwise tells the server to return the latest version}\n@returns(200) {claims: [map]} # Request succeeded\n@errors {400: Bad Request. Returned if the request is invalid e.g. has incorrect date limiter format, 401: Unauthorized. The client did not provide an authentication token or the token was invalid, 403: Forbidden. The client is not allowed to perform this action, 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/customerclaims/{id}\n@desc Get order claim\n@required {tenant: str # Two letter code indicating the tenant, restaurantId: str # Just Eat restaurant identifier, id: str # Claim identifier}\n@optional {Accept: str # Indicates what type of response client understands and is also used for content type negotiation (if version is specified), otherwise tells the server to return the latest version}\n@returns(200) {id: str, orderId: str, friendlyOrderReference: str, issueType: str, submittedDate: str(date-time), expirationDate: str(date-time), currency: str, totalClaimed: num, state: str, resolution: map?{decision: str, totalClaimedAccepted: num, resolvedDate: str(date-time), resolvedChannel: str}, restaurantResponse: map?{decision: str, items: [map]?, justification: map?{reason: str, comments: str?}}, affectedItems: [map]?} # Request succeeded\n@errors {401: Unauthorized. The client did not provide an authentication token or the token was invalid, 403: Forbidden. The client is not allowed to perform this action, 404: Not Found. Claim could not be found, 500: Internal Server Error}\n\n@endpoint POST /restaurants/{tenant}/{restaurantId}/customerclaims/{id}/restaurantresponse\n@desc Submit a restaurant response for the claim\n@required {tenant: str # Two letter code indicating the tenant, restaurantId: str # Just Eat restaurant identifier, id: str # Claim identifier, Content-Type: str # Indicates the representation of the request body the client is sending (including version)}\n@optional {decision: str(Accepted/Rejected/PartiallyAccepted) # Decision on the claim, items: [map{id: str, decision: str}] # Decisions on the items of a claim, justification: map{reason: str, comments: str} # The reason of the claim rejection and optional comments from the restaurant}\n@returns(201) Request succeeded. Your response to the claim has been submitted\n@errors {400: Bad Request. Returned if the request is invalid e.g. decision value is incorrect, 401: Unauthorized. The client did not provide an authentication token or the token was invalid, 403: Forbidden. The client is not allowed to perform this action, 404: Not Found. Claim could not be found, 409: Conflict. The claim you are attempting to resolve is has been resolved, 422: Unprocessable. The claim you are attempting to update does not contain the items from the request, 500: Internal Server Error}\n\n@endpoint PUT /restaurants/{tenant}/{restaurantId}/customerclaims/{id}/restaurantresponse/justification\n@desc Add reason and comments to the response\n@required {tenant: str # Two letter code indicating the tenant, restaurantId: str # Just Eat restaurant identifier, id: str # Claim identifier, Content-Type: str # Indicates the representation of the request body the client is sending (including version)}\n@optional {reason: str(AlreadyRefunded/ItemReplaced/PartialRefundRequired/WasNotMissing/WillRedeliver/OrderWasHot/OrderWasOnTime/OrderWasPacked/FoodWasIntact/AddExtraItem/Other) # One of the predefined reasons, comments: str # Comment from the restaurant owner in case they rejected at least one of the items and want to type their own rejection reason}\n@returns(204) Request succeeded. Justification was successfully submitted\n@errors {400: Bad Request. Returned if the request is invalid e.g. reason doesn't match any of the predefined values, 401: Unauthorized. The client did not provide an authentication token or the token was invalid, 403: Forbidden. The client is not allowed to perform this action, 404: Not Found. Claim could not be found, 409: Conflict. The claim you are attempting to update is older than the current claim. Fetch the last copy of the entity and try the request again., 500: Internal Server Error}\n\n@endgroup\n\n@group {tenant}\n@endpoint DELETE /v1/{tenant}/restaurants/{id}/event/offline\n@desc Delete Offline Event\n@required {tenant: str # The identifier for the tenant, id: str # The identifier for the restaurant, X-JE-Requester: str # Name of the user or system creating the event. Used for auditing purposes, X-JE-User-Role: str # The role the user or system creating the event has assumed.}\n@returns(200) No Events to Delete\n@returns(202) Request Succeeded\n@errors {400: Bad Request, 500: Server Error}\n\n@endpoint POST /v1/{tenant}/restaurants/event/offline\n@desc Create Offline Event\n@required {tenant: str # The identifier for the tenant, X-JE-Requester: str # Name of the user or system creating the event. Used for auditing purposes, X-JE-User-Role: str, restaurantIds: str # A comma separated list of the IDs of the restaurants to include in the offline event. No limit to the number accepted by the endpoint, but unexpected behaviour mat occur at more than 500 IDs., name: str # Name of the offline event to be created., reason: str # The reason for creating the offline event., startDate: str(date-time) # ISO 8601 format of the start datetime of the offline event., allowRestaurantOverride: bool # Whether a restaurant should be allowed to delete this event, regardless of who raised it.}\n@optional {endDate: str(date-time) # ISO 8601 format of the end datetime of the offline event., duration: str # Either a timespan in the HH:mm format or `untilTomorrow` (this will be the next day at 4:30 am +/- 10 minutes local time). Note if both duration and `endDate` are specified duration takes precedence., legacyTempOfflineType: str(Unset/None/TempOffline/ClosedToday/ClosedDueToEvent/FailedJctConnection/NoTrOverride/IgnoredOrders)=ClosedDueToEvent # - `Unset` : Legacy value meaning online. - `None` : Legacy value meaning online. - `TempOffline` : The restaurant will go temporarily offline, typically for an undetermined amount of time (no end date). - `ClosedToday` : The restaurant will closed for the day and the event will end the next morning. - `ClosedDueToEvent` : The restaurant will go offline for an event (e.g. a holiday), these events will typically have an end time. - `FailedJctConnection` : The restaurant will go offline due to the POS device losing connection. - `NoTrOverride` : The restaurant will go offline for another reason that the restaurant cannot override. - `IgnoredOrders` : The restaurant will go offline due to ignoring orders., category: str # A free text category used to group multiple events. This field is not intended to be used by clients.}\n@returns(201) {restaurantEventId: str, restaurantIds: str} # Created\n@errors {400: Bad Request, 500: Server Error}\n\n@endgroup\n\n@group restaurant-offline-status\n@endpoint PUT /restaurant-offline-status\n@desc Restaurant Offline Status\n@optional {Tenant: str(enum)(au/dk/es/ie/it/no/uk/nz) # The two letter country code for the market in which the restaurant operates., RestaurantId: str # The unique identifier of the restaurant that has their offline status changed., IsOffline: bool # Represents the current offline status of the restaurant., AllowRestaurantOverride: bool # Whether a restaurant should be allowed to reverse this offline status change through calls to the Restaurant Events endpoints.}\n@returns(200) OK\n\n@endgroup\n\n@group restaurant-online-status\n@endpoint PUT /restaurant-online-status\n@desc Restaurant Online Status\n@optional {Tenant: str(enum)(au/dk/es/ie/it/no/uk/nz) # The two letter country code for the market in which the restaurant operates., RestaurantId: str # The unique identifier of the restaurant that has their offline status changed., IsOffline: bool # Represents the current offline status of the restaurant., AllowRestaurantOverride: bool # Whether a restaurant should be allowed to reverse this offline status change through calls to the Restaurant Events endpoints.}\n@returns(200) OK\n\n@endgroup\n\n@group orders\n@endpoint POST /orders/{tenant}/{orderId}/restaurantqueries/compensation\n@desc Create Compensation requests\n@required {tenant: str # Request tenant., orderId: str # Id for the order., Authorization: str # Containing a partner issued API key e.g. `JE-API-KEY ABCDE123456789`}\n@optional {ReasonCode: str(NotSet/BeingPrepared/OnItsWay/Delivered/Unknown) # The reason why compensation is due, Comments: str # Any other comments to add to the request}\n@returns(201) Created\n@errors {400: Bad Request - returned if providing invalid data such as an unacceptable reason code, 401: Unauthorized - consumer has not provided the necessary credentials, 403: Forbidden - credentials provided by consumer do not allow access to this resource, 404: Resource not found, 409: Conflict - returned if tried to claim compensation for an order that is not eligible, 500: Internal Server Error}\n\n@endgroup\n\n@group order-eligible-for-restaurant-compensation\n@endpoint POST /order-eligible-for-restaurant-compensation\n@desc Order Eligible For Restaurant Compensation\n@optional {IsEligible: bool # Flag that informs if the cancelled order is eligible for compensation, OrderId: str # Id for the order}\n@returns(200) Respond with a 200 status code to indicate that you have received the notification.\n\n@endgroup\n\n@group restaurants\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue\n@desc Get product catalogue\n@required {tenant: str # Request tenant., restaurantId: str # The restaurant Id.}\n@returns(200) {restaurantId: str, name: str, description: str, currency: str} # Request succeeded.\n@errors {404: No product catalogue found for given tenant and restaurantId., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue/availabilities\n@desc Get all availabilities\n@required {tenant: str # Request tenant., restaurantId: str # The restaurant Id., limit: int(int32) # The maximum number of availabilities to fetch.}\n@optional {after: str # Value representing a cursor - position to use when retrieving the next page of data. If provided, the value of this parameter must be URL encoded.}\n@returns(200) Request succeeded.\n@errors {400: Bad request., 404: No availabilities found for given tenant and restaurantId., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue/categories\n@desc Get all categories\n@required {tenant: str # Request tenant., restaurantId: str # The restaurant Id., limit: int(int32) # The maximum number of categories to fetch.}\n@optional {after: str # Value representing a cursor - position to use when retrieving the next page of data. If provided, the value of this parameter must be URL encoded.}\n@returns(200) Request succeeded.\n@errors {400: Bad request., 404: No availabilities found for given tenant and restaurantId., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue/categories/{categoryId}/items\n@desc Get all category item IDs\n@required {tenant: str # Request tenant., restaurantId: str # The restaurant ID., categoryId: str # The category ID., limit: int(int32) # The maximum number of item IDs to fetch.}\n@optional {after: str # Value representing a cursor - position to use when retrieving the next page of data. If provided, the value of this parameter must be URL encoded.}\n@returns(200) Request succeeded.\n@errors {400: Bad request., 404: No availabilities found for given tenant and restaurantId., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue/items\n@desc Get all menu items\n@required {tenant: str # Request tenant., restaurantId: str # The restaurant Id., limit: int(int32) # The maximum number of menu items to fetch.}\n@optional {after: str # Value representing a cursor - position to use when retrieving the next page of data. If provided, the value of this parameter must be URL encoded.}\n@returns(200) Request succeeded.\n@errors {400: Bad request., 404: No menu items found for given tenant and restaurantId., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue/items/{itemId}/dealgroups\n@desc Get all menu item deal groups\n@required {tenant: str # Request tenant, restaurantId: str # The restaurant ID, itemId: str # The menu item ID, limit: int(int32) # The maximum number of menu items to fetch.}\n@optional {after: str # Value representing a cursor - position to use when retrieving the next page of data. If provided, the value of this parameter must be URL encoded.}\n@returns(200) Request succeeded.\n@errors {400: Bad request., 404: No deal groups found for given `tenant`, `restaurantId` and `itemId`., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue/items/{itemId}/dealgroups/{dealGroupId}/dealitemvariations\n@desc Get all deal item variations for a deal group\n@required {tenant: str # Request tenant, restaurantId: str # The restaurant ID, itemId: str # The menu item ID, dealGroupId: str # The menu item ID, limit: int(int32) # The maximum number of menu items to fetch.}\n@optional {after: str # Value representing a cursor - position to use when retrieving the next page of data. If provided, the value of this parameter must be URL encoded.}\n@returns(200) Request succeeded.\n@errors {400: Bad request., 404: No deal item variations found for given `tenant`, `restaurantId`, `itemId` and `dealGroupId`., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue/items/{itemId}/modifiergroups\n@desc Get all menu item modifier groups\n@required {tenant: str # Request tenant, restaurantId: str # The restaurant ID, itemId: str # The menu item ID, limit: int(int32) # The maximum number of menu items to fetch.}\n@optional {after: str # Value representing a cursor - position to use when retrieving the next page of data. If provided, the value of this parameter must be URL encoded.}\n@returns(200) Request succeeded.\n@errors {400: Bad request., 404: No modifier groups found for given `tenant`, `restaurantId` and `itemId`., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/catalogue/items/{itemId}/variations\n@desc Get all menu item variations\n@required {tenant: str # Request tenant, restaurantId: str # The restaurant ID, itemId: str # The menu item ID, limit: int(int32) # The maximum number of menu items to fetch.}\n@optional {after: str # Value representing a cursor - position to use when retrieving the next page of data. If provided, the value of this parameter must be URL encoded.}\n@returns(200) Request succeeded.\n@errors {400: Bad request., 404: No variations found for given `tenant`, `restaurantId` and `itemId`., 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/fees\n@desc Get Restaurant Fees\n@required {tenant: str # A two-character country code for which country the restaurant resides in., restaurantId: str # A unique identifier for a restaurant}\n@optional {User-Agent: str # Request header string that allows the server to identify the application making the request.}\n@returns(200) {bagFee: map{description: str, serviceTypes: map{default: map{amount: num(integer)}, collection: map{amount: num(integer)}, delivery: map{amount: num(integer)}}}} # Success\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint PUT /restaurants/{tenant}/{restaurantId}/fees\n@desc Create or Update Restaurant Fees\n@required {tenant: str # A two-character country code for which country the restaurant resides in., restaurantId: str # A unique identifier for a restaurant}\n@optional {User-Agent: str # Request header string that allows the server to identify the application making the request., bagFee: map{description: str, serviceTypes: map} # The object which encapsulates a Fee}\n@returns(200) {bagFee: map{description: str, serviceTypes: map{default: map{amount: num(integer)}, collection: map{amount: num(integer)}, delivery: map{amount: num(integer)}}}} # Success\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n@example_request {\"bagFee\":{\"description\":\"A charge for bags in delivery\",\"serviceTypes\":{\"default\":{\"amount\":0},\"collection\":{\"amount\":5},\"delivery\":{\"amount\":10}}}}\n\n@endpoint PUT /restaurants/{tenant}/{restaurantId}/menu\n@desc Create or update a menu\n@required {tenant: str # The tenant of the restaurant in which to put a menu, restaurantId: str # The restaurant identifier to associated with the menu, Authorization: str # Containing a partner issued API key e.g. `JE-API-KEY ABCDE123456789`}\n@optional {Content-Type: str # Used to denote the version of the menu payload within the body, will default to latest if not supplied e.g. application/=1.0}\n@returns(202) {correlationId: str} # Accepted\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/menu\n@desc Get the latest version of the restaurant's full menu\n@required {tenant: str # The tenant of the restaurant in which to put a menu, restaurantId: str # The restaurant identifier to associated with the menu, Authorization: str # Containing a partner issued API key e.g. Bearer ABCDE123456789}\n@errors {301: Temporary Redirect. The redirect will contain the signed URL that the client needs to access the resource, 400: Bad Request. We were unable to process the request due to data you sent us, 401: Unauthorized, 403: Forbidden, 500: Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/ordertimes\n@desc Get the restaurant's delivery and collection lead times\n@required {tenant: str # A valid country code, e.g. \"uk\"., restaurantId: str # The restaurant Id., Authorization: str # OAuth2 token issued for logged in restaurant}\n@returns(200) Success\n@errors {401: Unauthorized. The client did not provide an authentication token or the token was invalid, 403: Forbidden - the restaurant still uses deprecated approach of Lunch and Night menus, 500: Internal Server Error}\n\n@endpoint PUT /restaurants/{tenant}/{restaurantId}/ordertimes/{dayOfWeek}/{serviceType}\n@desc Update the restaurant's delivery and collection lead times\n@required {tenant: str # A valid country code, e.g. \"uk\"., restaurantId: str # The restaurant Id., dayOfWeek: str(Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday) # Day of week for order time, serviceType: str(Delivery/Collection) # Service type of the order time, Authorization: str # OAuth2 token issued for logged in restaurant OR API token for third party, in the format `Bearer {api_key}`}\n@optional {lowerBoundMinutes: int(int32) # Order time lower bound value, in minutes., upperBoundMinutes: int(int32) # Order time upper bound value, in minutes.}\n@returns(204) Success\n@errors {400: Bad Request, 401: Unauthorized. The client did not provide an authentication token or the token was invalid, 403: Forbidden. The client is not allowed to perform this action, 500: Internal Server Error}\n\n@endpoint GET /restaurants/{tenant}/{restaurantId}/servicetimes\n@desc Get service times\n@required {tenant: str # Two letter code of restaurant's tenant, restaurantId: str # The restaurant identifier}\n@returns(200) {serviceTimes: map} # The restaurant's service times\n@errors {403: Forbidden, 404: Not found, 500: Internal Server Error}\n\n@endpoint PUT /restaurants/{tenant}/{restaurantId}/servicetimes\n@desc Create or update service times\n@required {tenant: str # Two letter code of restaurant's tenant, restaurantId: str # The restaurant identifier}\n@optional {serviceTimes: map # The desired times at which a restaurant is in service}\n@returns(200) {serviceTimes: map} # The new service times\n@errors {400: Bad request, 403: Forbidden, 500: Internal Server Error}\n\n@endpoint GET /restaurants/bylatlong\n@desc Get restaurants by location\n@required {Authorization: str # OAuth2 token issued for logged in consumer or API key issued to partner, latitude: num # Filter search results to only include restaurants that deliver to the specified location, longitude: num # Filter search results to only include restaurants that deliver to the specified location}\n@optional {Accept-Tenant: str # A valid country code, e.g. \"uk\". Filter search results to only include restaurants for the specified country. Required when using OAuth for authentication., cuisine: str # Filter search results to only include restaurants that offer the specified cuisine, restaurantName: str # Filter search results to only include restaurants that have a name that matches the specified value, brandName: str # Filter search results to only include restaurants of the specified brand}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 500: Server Error}\n\n@endpoint GET /restaurants/bypostcode/{postcode}\n@desc Get restaurants by postcode\n@required {postcode: str # Filter search results to only include restaurants that deliver to the specified postcode}\n@optional {Authorization: str # OAuth2 token issued for logged in consumer or API key issued to partner, Accept-Tenant: str # A valid country code, e.g. \"uk\". Filter search results to only include restaurants for the specified country. Required when using OAuth for authentication., cuisine: str # Filter search results to only include restaurants that offer the specified cuisine, restaurantName: str # Filter search results to only include restaurants that have a name that matches the specified value, brandName: str # Filter search results to only include restaurants of the specified brand}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 500: Server Error}\n\n@endpoint PUT /restaurants/driver/eta\n@desc Set ETA for pickup\n@returns(202) {ignoredRestaurantIds: [str]} # Update will take effect shortly\n@errors {400: There was something invalid in your request - check response body for details}\n\n@endgroup\n\n@group menu-ingestion-complete\n@endpoint POST /menu-ingestion-complete\n@desc Menu ingestion complete\n@optional {tenant: str(enum)(au/dk/es/ie/it/no/uk/nz) # Country code for the market the restaurant is in, restaurantId: str # The Just Eat restaurant ID, timestamp: str(date-time) # The ISO-8601 datetime at which the menu ingestion completed, result: str(enum)(success/fail) # The result of the menu ingestion process, correlationId: str # The ID of the execution which has been completed, fault: map{id: str, errors: [map]} # Details of the fault which caused the menu ingestion to fail. This is only present if menu ingestion did not complete successfully}\n@returns(200) OK\n\n@endgroup\n\n@group order-time-updated\n@endpoint POST /order-time-updated\n@desc Order time updated\n@optional {restaurantId: str # The Just Eat restaurant ID, serviceType: str(enum)(Delivery/Collection) # Service type of the order time., dayOfWeek: str(enum)(Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday) # The day of the week that has been updated., lowerBoundMinutes: int(int32) # Order time lower bound value, in minutes., upperBoundMinutes: int(int32) # Order time upper bound value, in minutes.}\n@returns(200) OK\n\n@endgroup\n\n@group search\n@endpoint GET /search/autocomplete/{tenant}\n@desc Get auto-completed search terms\n@required {tenant: str # A valid country code, e.g. \"uk\"., searchTerm: str # User's search term - at least one character required, latlong: [num(decimal)] # The latitude and longitude coordinates of the location in which to search.\r Specify the coordinates as latitude,longitude.}\n@optional {limit: num(integer) # Limit the number of auto-completed terms returned by the API. Defaults to 7. Valid values 1 - 10}\n@returns(200) {terms: [map]} # Success\n@errors {400: Bad Request, 401: Unauthorized, 500: Internal Server Error, 503: Service Unavailable}\n\n@endpoint GET /search/restaurants/{tenant}\n@desc Search restaurants\n@required {tenant: str # A valid country code, e.g. \"uk\"., searchTerm: str # User's search term., latlong: [num(decimal)] # The latitude and longitude coordinates of the location in which to search.\r Specify the coordinates as latitude,longitude.}\n@optional {limit: num(integer) # Limit the number of restaurants returned by the API.\r Valid values are numbers between 1 and 500.\r If not provided, the limit defaults to 300.}\n@returns(200) {restaurants: [map]} # Success\n@errors {400: Bad Request, 401: Unauthorized, 422: Unprocessable Entity - search term rejected, 500: Internal Server Error, 503: Service Unavailable}\n\n@endgroup\n\n@end\n"}