{ "swagger": "2.0", "info": { "description": "", "version": "v1", "title": "Cake Online Order API", "termsOfService": "https://www.trycake.com/legal/developer-api-terms/" }, "host": "stag-sandbox.cake.net", "basePath": "/olo/v1", "tags": [ { "name": "Account API", "description": "Third Party Account Controller" }, { "name": "Tax API", "description": "Third Party Tax Controller" }, { "name": "Menu API", "description": "Third Party Menu Controller" }, { "name": "Order API", "description": "Third Party Order Controller" } ], "paths": { "/accounts/{accountId}": { "get": { "tags": [ "Account API" ], "summary": "Account Profile by Account Id", "description": "Retrieves operator details using the given account id. Returned object contains all the information related to the operator.\n", "operationId": "getOperatorProfileByAccountIdUsingGET", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "accountId", "in": "path", "description": "accountId", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/Account" } }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "200002 - Account not found" }, "500": { "description": "200000 - Unknown Error" } }, "security": [ { "oauthschema": [ "global" ] } ] } }, "/accounts/{accountId}/catalog": { "get": { "tags": [ "Menu API" ], "summary": "Get menu catalog by account id", "description": "Get active menu catalog for the given account id", "operationId": "getMenuCatalogByAccountIdUsingGET_1", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "accountId", "in": "path", "description": "accountId", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/Menu catalog" } }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "200002 - Account not found
" }, "500": { "description": "200100 - Menu error
200000 - Unknown Error
" } }, "security": [ { "oauthschema": [ "global" ] } ] } }, "/accounts/{accountId}/orders": { "post": { "tags": [ "Order API" ], "summary": "Place Order", "description": "This endpoint allows to place an order via the Cake platform for a given operator.", "operationId": "createOrderUsingPOST", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "body", "name": "thirdPartyOrder", "description": "thirdPartyOrder", "required": true, "schema": { "$ref": "#/definitions/Order" } }, { "name": "accountId", "in": "path", "description": "accountId", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/Order" } }, "201": { "description": "Created", "schema": { "$ref": "#/definitions/Order" } }, "400": { "description": "200300 - Invalid order object
200301 - Empty provider detail
200302 - Empty aggregator detail
200203 - Invalid modifier option
200305 - Invalid order type
200307 - Invalid customer object
200308 - Invalid customer contact
200309 - Invalid subtotal value
200310 - Invalid tax value
200311 - Invalid discount value
200312 - Invalid delivery fee
200313 - Invalid tip value
200314 - Invalid order total value
200315 - Invalid payment details
200316 - Invalid payment method
200317 - Invalid payment mode
200318 - Invalid order prep time
200004 - Restaurant is offline
200200 - Invalid tax object
200201 - Invalid item
200202 - Invalid modifier group
200203 - Invalid modifier option
200204 - Incompatible line items
" }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "200002 - Account not found
" }, "409": { "description": "200303 - Duplicate provider reference
200304 - Duplicate aggregator reference
" }, "500": { "description": "200100 - Menu error
200000 - Unknown Error
" }, "501": { "description": "200319 - Unsupported payment method
200320 - Unsupported payment mode
" } }, "security": [ { "oauthschema": [ "global" ] } ] } }, "/accounts/{accountId}/orders/{orderId}": { "get": { "tags": [ "Order API" ], "summary": "Get Order", "description": "This endpoint allows to get an order details via the Cake platform for a given operator.", "operationId": "getOrderUsingGET", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "accountId", "in": "path", "description": "accountId", "required": true, "type": "string" }, { "name": "orderId", "in": "path", "description": "orderId", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/Order" } }, "400": { "description": "200322 - Invalid order id
" }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "200002 - Account not found
" }, "500": { "description": "200000 - Unknown Error
" } }, "security": [ { "oauthschema": [ "global" ] } ] } }, "/accounts/{accountId}/sessions": { "get": { "tags": [ "Menu API" ], "summary": "Menu Sessions by Account ID", "description": "Retrieve the active menu session list for a given Account ID", "operationId": "getMenuSessionsByAccountIdUsingGET", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "accountId", "in": "path", "description": "accountId", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/Menu Sessions" } }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "200002 - Account not found
200101 - Session not found
" }, "500": { "description": "200100 - Menu error
200000 - Unknown Error
" } }, "security": [ { "oauthschema": [ "global" ] } ] } }, "/accounts/{accountId}/sessions/{sessionId}/catalog": { "get": { "tags": [ "Menu API" ], "summary": "Menu catalog using the Account ID and the Session ID", "description": "Retrieve the active menu catalog for a given Account ID and the Session ID", "operationId": "getMenuCatalogByAccountIdAndSessionIdUsingGET", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "accountId", "in": "path", "description": "accountId", "required": true, "type": "string" }, { "name": "sessionId", "in": "path", "description": "sessionId", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/Menu Sessions" } }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "200002 - Account not found
" }, "500": { "description": "200100 - Menu error
200000 - Unknown Error
" } }, "security": [ { "oauthschema": [ "global" ] } ] } }, "/accounts/{accountId}/status": { "get": { "tags": [ "Account API" ], "summary": "Account Status", "description": "Retrieves the Online/Offline status of the account", "operationId": "getPosStatusByAccountIdUsingGET_1", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "accountId", "in": "path", "description": "accountId", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/AccountOnlineStatus" } }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "200002 - Account not found" }, "500": { "description": "200000 - Unknown Error
" } }, "security": [ { "oauthschema": [ "global" ] } ] } }, "/accounts/{accountId}/tax": { "post": { "tags": [ "Tax API" ], "summary": "Calculate Tax", "description": "This endpoint is used to calculate the total tax for given line items with values.", "operationId": "calculateTaxUsingPOST", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "accountId", "in": "path", "description": "accountId", "required": true, "type": "string" }, { "in": "body", "name": "orderTax", "description": "orderTax", "required": true, "schema": { "$ref": "#/definitions/Tax" } } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/Tax" } }, "400": { "description": "200200 - Invalid tax object
200201 - Invalid item
200202 - Invalid modifier group
200203 - Invalid modifier option
200204 - Incompatible line items
" }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "200002 - Account not found
" }, "500": { "description": "200100 - Menu error
200000 - Unknown Error
" } }, "security": [ { "oauthschema": [ "global" ] } ] } } }, "securityDefinitions": { "oauthschema": { "type": "oauth2", "tokenUrl": "https://stag-sandbox.cake.net/oauth/token", "flow": "application", "scopes": { "global": "global" } } }, "definitions": { "Customer": { "type": "object", "required": [ "contact", "email", "firstName", "lastName" ], "properties": { "contact": { "type": "array", "description": "Customer contact list", "items": { "$ref": "#/definitions/Contact" } }, "email": { "type": "string", "example": "sample@test.com", "description": "Customer email address" }, "firstName": { "type": "string", "example": "Jone", "description": "First name" }, "lastName": { "type": "string", "example": "Doie", "description": "Last name" } }, "description": "Customer resource representation" }, "Phone": { "type": "object", "required": [ "areaCode", "exchangeCode", "subscriberNumber" ], "properties": { "areaCode": { "type": "string", "example": "233", "description": "Area code" }, "exchangeCode": { "type": "string", "example": "233", "description": "Exchange code" }, "extension": { "type": "string", "example": "233", "description": "Extension code" }, "subscriberNumber": { "type": "string", "example": "233", "description": "Subscriber code" } }, "description": "Phone resource representation" }, "Location info": { "type": "object", "required": [ "lan", "lat" ], "properties": { "lan": { "type": "string", "example": "-122.421889500000000000000000000", "description": "longitude of the restaurant" }, "lat": { "type": "string", "example": "37.795939400000000000000000000", "description": "Latitude of the restaurant" } }, "description": "Location information of the account" }, "Contact": { "type": "object", "required": [ "address", "contactType", "phone" ], "properties": { "address": { "description": "Address of the customer. This is required for Delivery orders.", "$ref": "#/definitions/Address" }, "contactType": { "type": "string", "example": "HOME", "description": "Contact type of the contact", "enum": [ "HOME", "OFFICE", "OTHER" ] }, "phone": { "description": "Phone number", "$ref": "#/definitions/Phone" } }, "description": "Contact resource representation" }, "Menu catalog": { "type": "object", "required": [ "account", "categories", "menus", "salesCategories", "variations" ], "properties": { "account": { "description": "Account related menu details", "$ref": "#/definitions/MenuAccount" }, "categories": { "type": "array", "description": "Item category details", "items": { "$ref": "#/definitions/Category" } }, "items": { "type": "array", "items": { "$ref": "#/definitions/Item" } }, "menus": { "type": "array", "description": "Menu details", "items": { "$ref": "#/definitions/Menu" } }, "modifierGroups": { "type": "array", "items": { "$ref": "#/definitions/ModifierGroup" } }, "modifierOptions": { "type": "array", "items": { "$ref": "#/definitions/ModifierOption" } }, "salesCategories": { "type": "array", "description": "Sales category details", "items": { "$ref": "#/definitions/SalesCategory" } }, "taxes": { "type": "array", "items": { "$ref": "#/definitions/CatalogTax" } }, "variations": { "type": "array", "description": "Variation details", "items": { "$ref": "#/definitions/Variation" } } }, "description": "Menu catalog resource representation" }, "Order": { "type": "object", "required": [ "aggregatorId", "aggregatorOrderReference", "customer", "deliveryFee", "discount", "lineItems", "orderReadyTime", "orderStatus", "orderType", "paymentDetails", "providerId", "providerOrderReference", "subTotal", "tax", "tip", "total" ], "properties": { "aggregatorId": { "type": "string", "example": "Checkmate", "description": "OLO aggregator name" }, "aggregatorOrderReference": { "type": "string", "example": "12345678", "description": "The reference number of the OLO aggregator." }, "customer": { "description": "Order customer details", "$ref": "#/definitions/Customer" }, "deliveryFee": { "type": "number", "example": 2, "description": "Order delivery fee value" }, "discount": { "type": "number", "example": 4, "description": "Order discount value" }, "lineItems": { "type": "array", "description": "Order line item details", "items": { "$ref": "#/definitions/Item" } }, "orderReadyTime": { "type": "integer", "format": "int64", "example": 1577769799000, "description": "Order ready time. This should be a unix timestamp" }, "orderStatus": { "type": "string", "example": "APPROVED", "description": "Order status of the given order number", "enum": [ "PENDING", "FETCHED", "APPROVED", "CANCELLED" ] }, "orderType": { "type": "string", "example": "DINE_IN", "description": "Order type", "enum": [ "TAKEOUT", "DINE_IN and DELIVERY" ] }, "paymentDetails": { "description": "Order payment details", "$ref": "#/definitions/Payment Details" }, "providerId": { "type": "string", "example": "GrubHub", "description": "OLO service provider name" }, "providerOrderReference": { "type": "string", "example": "12345678", "description": "The reference number of the OLO service provider." }, "subTotal": { "type": "number", "example": 60, "description": "Order sub total value" }, "tax": { "type": "number", "example": 12, "description": "Order tax value" }, "tip": { "type": "number", "example": 5, "description": "Order tip value" }, "total": { "type": "number", "example": 75, "description": "Order total value" } }, "description": "Order resource representation" }, "Account": { "type": "object", "required": [ "accountId", "name" ], "properties": { "accountId": { "type": "string", "example": "10132224", "description": "Account's account id" }, "accountStatus": { "type": "string", "example": "ACTIVE", "description": "Account status", "enum": [ "ACTIVE", "INACTIVE" ] }, "address": { "description": "Account's Address", "$ref": "#/definitions/Address" }, "countryCode": { "type": "string", "example": "US", "description": "Account's country code" }, "deliveryFee": { "type": "number", "example": 10, "description": "Account's delivery fee for delivery orders" }, "deliveryTime": { "type": "integer", "format": "int64", "example": 30, "description": "Minimum expected time in minutes for the delivery order" }, "description": { "type": "string", "example": "sample-merchant-description", "description": "Account's description" }, "diningOptions": { "type": "array", "example": "TAKEOUT, DELIVERY, DINING", "description": "Account supported dining options", "items": { "type": "string", "enum": [ "TAKEOUT", "DELIVERY", "DINING" ] } }, "emailAddress": { "type": "string", "example": "test@sysco.com", "description": "Account's email address" }, "isAccountOnline": { "type": "boolean", "example": true, "description": "This value will be true if the PoS is online. If the PoS is switched off, CAKE assumes that the account is offline" }, "languageCode": { "type": "string", "example": "en", "description": "Account's language code" }, "location": { "description": "Account's location information", "$ref": "#/definitions/Location info" }, "minDeliveryOrderAmount": { "type": "number", "example": 15, "description": "Minimum amount for the delivery order" }, "minOrderAmount": { "type": "number", "example": 20, "description": "Minimum amount for the order" }, "name": { "type": "string", "example": "Test Merchant", "description": "Account's name" }, "orderPrepTime": { "type": "integer", "format": "int64", "example": 20, "description": "Minimum time expected to prepare the order" }, "phone": { "description": "Account's phone number", "$ref": "#/definitions/Phone" }, "timezone": { "type": "string", "example": "America/Los_Angeles", "description": "Account's name" } }, "description": "Account resource representation" }, "Tax": { "type": "object", "required": [ "lineItems" ], "properties": { "lineItems": { "type": "array", "description": "Order line item details", "items": { "$ref": "#/definitions/Item" } } }, "description": "Tax resource representation" }, "AccountOnlineStatus": { "type": "object", "required": [ "isAccountOnline" ], "properties": { "isAccountOnline": { "type": "boolean", "example": true, "description": "This value will be true if the POS device at the location is online." } }, "description": "Operator PoS online status representation" }, "Modifier Group": { "type": "object", "required": [ "modifierGroupId", "modifierOptions" ], "properties": { "modifierGroupId": { "type": "string", "example": "15b40371-e06a-4ddc-e8f5-2658d9c83168", "description": "Modifier group id" }, "modifierOptions": { "type": "array", "description": "Modifier options list", "items": { "$ref": "#/definitions/Modifier Option" } } }, "description": "A group of Add ons are assigned under a modifier group" }, "Menu": { "type": "object", "properties": { "active": { "type": "boolean" }, "id": { "type": "string" }, "name": { "type": "string" }, "sessionIds": { "type": "array", "items": { "type": "string" } } } }, "ModifierOption": { "type": "object", "properties": { "globalModifier": { "type": "boolean" }, "id": { "type": "string" }, "isActive": { "type": "boolean" }, "lineNumber": { "type": "integer", "format": "int32" }, "name": { "type": "string" }, "price": { "type": "number" } } }, "Category": { "type": "object", "properties": { "active": { "type": "boolean" }, "childrenIds": { "type": "array", "items": { "type": "string" } }, "description": { "type": "string" }, "id": { "type": "string" }, "itemIds": { "type": "array", "items": { "type": "string" } }, "menuIds": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" }, "parentIds": { "type": "array", "items": { "type": "string" } }, "printerIds": { "type": "array", "items": { "type": "string" } }, "salesCategoryId": { "type": "string" }, "sessionIds": { "type": "array", "items": { "type": "string" } }, "taxId": { "type": "string" }, "toGoTaxId": { "type": "string" } } }, "Payment Details": { "type": "object", "required": [ "paymentMethod", "paymentMode", "paymentReferenceId" ], "properties": { "paymentMethod": { "type": "string", "example": "THIRD_PARTY", "description": "Payment method" }, "paymentMode": { "type": "string", "example": "CARD", "description": "Payment mode" }, "paymentReferenceId": { "type": "string", "example": "12345678", "description": "Payment reference Id" } }, "description": "Payment Details representation" }, "Modifier Option": { "type": "object", "required": [ "modifierOptionId" ], "properties": { "modifierOptionId": { "type": "string", "example": "83317be5-d47b-4eab-e23f-248754561d10", "description": "Modifier option id" }, "modifierOptionName": { "type": "string", "example": "Sample Modifier", "description": "Modifier option name" }, "value": { "type": "number", "example": 2, "description": "Modifier option value" } }, "description": "Add ons that can be attached to an item for further customizations" }, "Item": { "type": "object", "required": [ "id", "price", "quantity", "variationId" ], "properties": { "id": { "type": "string", "example": "a653fede-f4a6-47d7-d823-c5bed2ac6d0d", "description": "The Id of the CAKE item" }, "itemName": { "type": "string", "example": "Sample Item", "description": "Name of the item" }, "modifierGroups": { "type": "array", "description": "Modifier groups assigned to the item", "items": { "$ref": "#/definitions/Modifier Group" } }, "price": { "type": "number", "example": 10, "description": "Price of the item" }, "quantity": { "type": "integer", "format": "int32", "example": 1, "description": "Quantity" }, "specialInstruction": { "type": "string", "example": "Less spicy", "description": "Special instructions for line item" }, "tax": { "type": "number", "description": "Item total tax value" }, "variationId": { "type": "string", "example": "2a16ba67-8fb8-4b27-b669-ec9450a39c14", "description": "Variation id of the CAKE item" } }, "description": "Item resource representation" }, "SalesCategory": { "type": "object", "properties": { "active": { "type": "boolean" }, "categoryIds": { "type": "array", "items": { "type": "string" } }, "childrenIds": { "type": "array", "items": { "type": "string" } }, "code": { "type": "string" }, "id": { "type": "string" }, "itemIds": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" }, "parentIds": { "type": "array", "items": { "type": "string" } } } }, "Session": { "type": "object", "properties": { "active": { "type": "boolean" }, "categoryIds": { "type": "array", "items": { "type": "string" } }, "id": { "type": "string" }, "name": { "type": "string" }, "slotIds": { "type": "array", "items": { "type": "string" } }, "slots": { "type": "array", "items": { "$ref": "#/definitions/SessionSlots" } } } }, "MenuAccount": { "type": "object", "properties": { "accountId": { "type": "string" }, "defaultTaxId": { "type": "string" }, "serviceChargeTaxEnabled": { "type": "boolean" }, "serviceChargeTaxId": { "type": "string" }, "toGoTaxEnabled": { "type": "boolean" } } }, "Address": { "type": "object", "required": [ "address1", "address2", "city", "countryCode", "state", "zipCode" ], "properties": { "address1": { "type": "string", "example": "10000", "description": "Address line one" }, "address2": { "type": "string", "example": "Van Dyke Ave", "description": "Address line two" }, "city": { "type": "string", "example": "Sterling Heights", "description": "City" }, "countryCode": { "type": "string", "example": "US", "description": "Country code" }, "state": { "type": "string", "example": "MI", "description": "State" }, "zipCode": { "type": "string", "example": "48312", "description": "Zip code" } }, "description": "Address resource representation" }, "SessionSlots": { "type": "object", "properties": { "active": { "type": "boolean" }, "dayOfWeek": { "type": "integer", "format": "int32" }, "endTime": { "type": "string" }, "id": { "type": "string" }, "startTime": { "type": "string" } } }, "Variation": { "type": "object", "properties": { "active": { "type": "boolean" }, "default": { "type": "boolean" }, "id": { "type": "string" }, "name": { "type": "string" } } }, "ModifierGroup": { "type": "object", "properties": { "id": { "type": "string" }, "isActive": { "type": "boolean" }, "isRequired": { "type": "boolean" }, "lineNumber": { "type": "integer", "format": "int32" }, "max": { "type": "integer", "format": "int32" }, "min": { "type": "integer", "format": "int32" }, "modifierOptions": { "type": "array", "items": { "$ref": "#/definitions/ModifierOption" } }, "name": { "type": "string" } } }, "CatalogTax": { "type": "object", "properties": { "childrenIds": { "type": "array", "items": { "type": "string" } }, "id": { "type": "string" }, "isActive": { "type": "boolean" }, "name": { "type": "string" }, "parentIds": { "type": "array", "items": { "type": "string" } }, "rate": { "type": "number" }, "type": { "type": "string" } } }, "Menu Sessions": { "type": "object", "required": [ "sessions", "totalSessions" ], "properties": { "sessions": { "type": "array", "description": "Session details", "items": { "$ref": "#/definitions/Session" } }, "totalSessions": { "type": "integer", "format": "int32", "description": "Total number of sessions available" } }, "description": "Sessions resource representation" } } }