diff --git a/README.md b/README.md
index 76bbbeb..c3814f6 100644
--- a/README.md
+++ b/README.md
@@ -48,13 +48,14 @@
 [Booking test utility](https://maps-booking.googlesource.com/maps-booking-v3/).
 To install it, follow the provided installation instructions in its README page.
 
-For the tests, you need to create a text file to store your credentials.
-Put your username and password there in one line, e.g. cred.txt file:
+For the tests, you need to create a text file to store your credentials. Put
+your username and password there in one line, e.g. cred.txt file:
 
-username:password
+      username:password
 
 You also need an availability feed for your test merchants. In our sample
-commands below, we saved it as avail.json filename.
+commands below, we saved it with the filename avail.json. For Order-based test
+client, you also need a services feed.
 
 Now, you can test your Booking Server with these commands:
 
@@ -70,6 +71,11 @@
 
         bin/bookingClient -server_addr="localhost:8080" -booking_test=true -availability_feed="./avail.json" -credentials_file="./cred.txt"
 
-As you are working on implementing your own Booking Server, you may need to
-run additional tests against it (e.g. list_bookings_test, rescheduling_test,
-etc) with the goal of eventually passing all tests (-all_tests=true).
+*   Test calls to CheckOrderFulfillability and CreateOrder methods for
+    Order-based Booking Server:
+
+        bin/orderClient -server_addr="localhost:8080" -check_order_test=true -create_order_test=true -output_dir="/tmp" -availability_feed="./availability.json" -service_feed="./services.json" -credentials_file="./cred.txt"
+
+As you are working on implementing your own Booking Server, you may need to run
+additional tests against it (e.g. list_bookings_test, rescheduling_test, etc)
+with the goal of eventually passing all tests (-all_tests=true).
diff --git a/apiv3methods.js b/apiv3methods.js
index 9c96027..f135f4d 100644
--- a/apiv3methods.js
+++ b/apiv3methods.js
@@ -152,14 +152,93 @@
   // TO-DO: add code to fetch all bookings for the user_id
   // ...
   // ListBookingsResponse
-  var resp = {bookings: {}};
+  var resp = {bookings: [{}]};
   const responseBody = JSON.stringify(resp);
   return responseBody;
 }
 
+
+/**
+ * CheckOrderFulfillability method (Order-based Booking Server only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/checkorderfulfillability-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function CheckOrderFulfillability(requestBody) {
+  // CheckOrderFulfillabilityRequest
+  const req = JSON.parse(requestBody);
+  // TO-DO: validate req, e.g. (req.merchant_id !== null)
+  // TO-DO: add code to validate individual items and calculate the total price
+  // ...
+  // CheckOrderFulfillabilityResponse
+  var resp = {
+    fulfillability: {
+      result: 'CAN_FULFILL',
+      item_fulfillability: [{}]  // individual item fullfilability
+    },
+    fees_and_taxes: {
+      price_micros: 1000000,  // total price in micros, e.g. 1USD = 1000000
+      currency_code: 'USD'
+    }
+  };
+  const responseBody = JSON.stringify(resp);
+  return responseBody;
+}
+
+/**
+ * CreateOrder method (Order-based Booking Server only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/createorder-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function CreateOrder(requestBody) {
+  // CreateOrderRequest
+  const req = JSON.parse(requestBody);
+  // TO-DO: validate req, e.g. (req.user_information !== null)
+  // TO-DO: check for req.idempotency_token uniqueness
+  // TO-DO: create and process the order
+  // ...
+  // CreateOrderResponse
+  var resp = {
+    order: {
+      order_id: '123',  // new order id
+      merchant_id: req.order.mercant_id,
+      item: [{}]  // populate individual LineItems, etc.
+    }
+  };
+  const responseBody = JSON.stringify(resp);
+  return responseBody;
+}
+
+/**
+ * ListOrders method (Order-based Booking Server only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/listorders-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function ListOrders(requestBody) {
+  // ListOrdersRequest
+  const req = JSON.parse(requestBody);
+  // TO-DO: validate req, e.g. if ("user_id" in req || "order_ids" in req)
+  // TO-DO: fetch orders for req.user_id or a list of req.order_ids
+  // ...
+  // ListOrdersResponse
+  var resp = {
+    order: [{}]  // populate all orders for the user_id or order_ids
+  };
+  const responseBody = JSON.stringify(resp);
+  return responseBody;
+}
+
+
 module.exports.HealthCheck = HealthCheck;
+// Booking-flow Booking Server methods
 module.exports.CheckAvailability = CheckAvailability;
 module.exports.CreateBooking = CreateBooking;
 module.exports.UpdateBooking = UpdateBooking;
 module.exports.GetBookingStatus = GetBookingStatus;
 module.exports.ListBookings = ListBookings;
+// Order-based Booking Server methods
+module.exports.CheckOrderFulfillability = CheckOrderFulfillability;
+module.exports.CreateOrder = CreateOrder;
+module.exports.ListOrders = ListOrders;
diff --git a/bookingserver.js b/bookingserver.js
index 849a6de..51d2f42 100644
--- a/bookingserver.js
+++ b/bookingserver.js
@@ -166,6 +166,39 @@
                 console.log(`Error: ${e}`);
               }
               break;
+            // POST /v3/CheckOrderFulfillability/
+            // (this method is only for Order-based Booking Server)
+            case '/v3/checkorderfulfillability':
+              try {
+                responseBody = apiv3.CheckOrderFulfillability(requestBody);
+              } catch (e) {
+                // TO-DO: add a specific error handling if necessary
+                httpCode = 500;  // Internal Server Error
+                console.log(`Error: ${e}`);
+              }
+              break;
+            // POST /v3/CreateOrder/
+            // (this method is only for Order-based Booking Server)
+            case '/v3/createorder':
+              try {
+                responseBody = apiv3.CreateOrder(requestBody);
+              } catch (e) {
+                // TO-DO: add a specific error handling if necessary
+                httpCode = 500;  // Internal Server Error
+                console.log(`Error: ${e}`);
+              }
+              break;
+            // POST /v3/ListOrders/
+            // (this method is only for Order-based Booking Server)
+            case '/v3/listorders':
+              try {
+                responseBody = apiv3.ListOrders(requestBody);
+              } catch (e) {
+                // TO-DO: add a specific error handling if necessary
+                httpCode = 500;  // Internal Server Error
+                console.log(`Error: ${e}`);
+              }
+              break;
             // some unknown request
             default:
               httpCode = 400;  // Bad Request
