openapi: 3.1.0
info:
  title: Bite API
  version: v2
  description: >
    # Introduction


    **Overview**


    Bite exposes online ordering functionality through a REST API which third
    party developers can use to create applications on top of the Bite platform.


    # Bite Nomenclature


    ## Customers


    A Bite "Customer" represents a full end-user account created on Bite's
    platform. Customers can be created with a Bite password or can be
    authenticated against a Single Sign-On provider such as Paytronix or Punchh.
    Bite Customers have the following features:


    - A single set of credentials could be used to create completely different
    accounts under different brands that Bite works with.

    - Storing credit cards on file so that they could be used for future
    purchases.

    - Access to the customer's favorite ordered items and recent order history.

    - Storing delivery addresses on file for future purchases.


    After creating or authenticating a Bite Customer through the API, a unique
    **authentication token** will be returned which can be used to refer to that
    user from that moment on without the need to store their password in your
    application.


    # Usage Basics


    ## Environments


    A dedicated sandbox environment will be provisioned for each new third-party
    developer. All development and testing must be carried out through that
    environment. It will include both an API sandbox as well as Admin Portal
    sandbox so that test locations could be modified by the developers for the
    purposes of testing their integration with Bite.

    The Sandbox environment runs the same code as production.

    https://YOUR_SANDBOX_SUB_DOMAIN.getbite.com/api


    The production environment endpoint is:

    [REDACTED]


    All communication must be encrypted over TLS 1.2


    ## Request/Response Basics


    ### Headers and Status Codes


    **https://\<environment_domain\>/\<API_version\>/\<resource\>?[params]**


    - Bite API expects both the request and the response bodies to encoded with
    JSON, so both the HTTP **Accept** and **Content-Type** headers should be set
    to **application/json**.

    - HTTP Status Codes will be returned as follows:
      - **200 OK** - The requested operation completed successfully!
      - **400 Bad Request** - An error occurred on the Bite side or on the POS side. Please reference the response body's "code" value in the Bite [Error Codes](#section/Usage-Basics/Bite-Error-Codes) documentation.
      - **403 Forbidden** - Invalid API credentials or insufficient access to a resource or operation.
      - **500 Server Error** - An unexpected error occurred. Please verify that your request is correctly formatted.
    - Every API call must include the following headers:
      | <div style="width:125px">Header</div> | Description | Example |
      |---|---|---|
      | x-md-api-version | Must be set to **4** | x-md-api-version: 4 |
      | x-bite-org-id | Must be set to the brand id that you are working with. This value will be provided along with the sandbox environment. | x-bite-org-id: 5fa31dc97acd2f0031e023eb |
      | x-customer-app-scope | Must be set to the brand's account scope. This value will be provided along with the sandbox environment. | x-customer-app-scope: my-brand-scope |
      | Authorization | Must be set to _Bearer: API_TOKEN_. The _API_TOKEN_ will be provided along with the sandbox environment. | Authorization: Bearer 2979c798-c901-4ceb-8478-3b26c24a998d |
      | User-Agent | Unique user agent value that identifies the app. Please send this formatted as _application_name/version_. | User-Agent: SomeApp/v1.2.3 |
      | X-Device-Id | Unique hardware identifier for the device. | X-Device-Id: 993e0082-5bfd-4bbc-98ec-d13b50bbd54a |

    ### Response Structure


    **A success response structure will look as follows:**


    ```

    {
      success: true;
      data?: {...};
    }

    ```


    **An error response structure will look as follows:**


    ```

    {
      success: false;
      code: number;
      message?: string;
      data?: {...};
    }

    ```


    ## Bite Error Codes


    Any error response will contain an error code:


    | Code |
    Meaning                                                                                                    
    | Suggested
    Action                                                                            
    |

    | ---- |
    -----------------------------------------------------------------------------------------------------------
    |
    --------------------------------------------------------------------------------------------
    |

    | 60   | _Customer Password Already Used:_ The customer is trying to use a
    password they have previously used.       |

    | 61   | _Customer Token Invalid:_ The token has been malformed or has
    expired.                                      | Maybe the customer needs to
    log out and log in again because they've changed their password. |

    | 62   | _Customer Account Not Verified:_ The customer resource being
    accessed requires a verified customer account. |

    | 63   | _Customer Account Disabled:_ The specified customer account has
    been disabled by one of the brand admins.   |

    | 64   | _Customer Account Deleted:_ The specified customer account has been
    deleted by one of the brand admins.     |


    ## Versioning and Compatibility


    Please treat all IDs in the API as strings.


    We will not remove properties from the current API version, but we do add
    new properties to return objects from time to time.


    There is no guaranteed ordering of properties. We request that properties
    are accessed by name and not by index.


    Please do not rely on error messages for logic. Error text may change
    periodically. Rather rely on error codes, which are guaranteed to not
    change.


    ## Rate Limiting


    Some API endpoints are protected through the use of rate limiting.

    The base rate limit can be found in the description of the API endpoint.


    Information about the current usage can be found in the headers of the
    response:


    - Ratelimit-Limit: The amount of requests permitted

    - Ratelimit-Remaining: How many requests can be made in the interval

    - Ratelimit-Reset: How long, in seconds, until the rate-limit interval ends
    and the remaining amount of requests resets


    The rate limit maximum is adjusted by the number of locations associated
    with the token.

    For example, if an API has a base rate limit of 50 requests per minute, then
    an organization with 10 locations may use the API endpoint 500 times per
    minute.


    # Changelog


    **2026-02-24**


    - Updated definitions of openingHoursByFulfillmentMethod


    **2025-07-23**


    - Updated security for Bite API Token based requests


    **2024-08-29**


    - Added `consentedToMarketing` field to order


    **2024-01-22**


    - Added section to ordered item schema


    **2024-01-03**


    - More details regarding rate limiting


    **2023-11-07**


    - Deprecated: `POST /api/v2/reporting/orders/day`

    - New Endpoint: `GET /api/v2/reporting/orders/day/:date`


    **2022-12-19**


    - Updated rate limits of API calls

    - Reversed order of change log


    **2022-10-25**


    - New endpoints:
      - POST /api/v2/reporting/orders/day
      - GET /api/v2/locations
    - Rate Limiting


    **2021-10-19**


    - First Draft
servers:
  - url: https://{sandboxApiSubDomain}.getbite.com/api
    description: Sandbox
    variables:
      sandboxApiSubDomain:
        default: YOUR_SANDBOX_SUB_DOMAIN
        description: The sandbox subdomain that is provided for each integration partner.
tags:
  - name: customerAccountManagement
    x-displayName: Account Management
    description: Customer account signup/login and other CRUD operations.
  - name: customerDeliveryAddresses
    x-displayName: Delivery Addresses
    description: Management of saved delivery addresses on the customer account.
  - name: customerFavorites
    x-displayName: Favorites
    description: Management of favorite items on the customer account.
  - name: customerOrderHistory
    x-displayName: Order History
    description: Past orders associated with the customer account.
  - name: customerPaymentMethods
    x-displayName: Payment Methods
    description: Management of saved payment methods on the customer account.
  - name: customerPushTokens
    x-displayName: Push Tokens
    description: Save mobile app push notification tokens on the customer account.
  - name: locationsPick
    x-displayName: Pick a Location
    description: Endpoints for picking a location from which to order.
  - name: mobileAppConfig
    x-displayName: Mobile App Config
    description: Endpoints for getting the config bundle of a mobile app
  - name: menu
    x-displayName: Menu
    description: Endpoints for getting the menu
  - name: orders
    x-displayName: Orders
    description: Endpoints for ordering actions
  - name: reporting
    x-displayName: Reporting
    description: Endpoints for generating reports
  - name: webhooks
    x-displayName: Webhooks
    description: >
      Webhooks can be used to notify non-Bite systems of events happening at
      Bite.

      They can be configured by Bite employees at the organization level.

      They use pre-defined location groups to determine which locations the
      webhooks are active at.


      # Webhook Request Body


      The webhook request body is composed of these top-level properties:


      - event: A key indicating which event triggered this webhook to be sent.

      - data: The payload of the webhook. This field may not exist if the
      webhook has no payload.


      # Bite Signatures


      Bite Webhooks are sent with a signature in the `x-bite-signature` header
      that allow you to verify

      that the request was sent by Bite.


      The `x-bite-signature` header is composed of two parts, the timestamp and
      the signature.

      The timestamp (prefixed by `t=`) is the epoch time when the webhook was
      sent from the Bite server.

      The signature (prefixed by `v=`) is the hex encoded HMAC SHA256 hash of
      the webhook.


      Here is an example of a `x-bite-signature` header:


      ```

      t=1650064620000,v=cbb9af052e4e9bfe061e3fa76aadf047b022e6d189a73f047181ea7d0c40f51b

      ```


      The timestamp value can be used to determine when the request was sent and
      ignore any old requests

      which may be part of a replay attack.


      ## Verify Signature


      To verify the signature, you will need the private key associated with the
      webhook.

      This will be provided by a Bite employee after the webhook is configured.


      1. Extract the timestamp and signature values from the header. Do not
      include the prefix.

      2. Construct the payload to sign following this schematic:
         `{{timestamp}}.{{request_body}}`

         ex:
         Consider a webhook with a `x-bite-signature` header of `t=1650064620000,v=...` and the following
         request body:

         ```
         { event: 'order-sent', data: { someKey: 'Some Value' } }
         ```

         The resulting payload will be:

         ```
         1650064620000.{ event: 'order-sent', data: { someKey: 'Some Value' } }
         ```

      3. Calculate the HMAC of the payload with the SHA256 hash function using
      the private key of the
         webhook.
      4. Compare the HMAC you calculated with the signature extracted from the
      `x-bite-signature` header.
         Ensure that the values are identical to verify that the request was generated by a Bite server.
  - name: embedding
    x-displayName: Embedding Bite in a 3rd Party Mobile App
    description: >
      # Overview


      It's possible for customers to embed the Bite ordering experience in their
      own proprietary mobile app. The intended use-case is to offer a seamless
      food ordering experience as part of a bigger application that does not
      require the user to leave the mobile app to go to a browser on their
      phone.


      One critical integration that makes this feature attractive is the ability
      to preload a Bite website with the user information that is already
      available to the mobile app. This can be some information about the user
      such as their name or loyalty card number. Alternatively, this could be a
      set of methods of payment. Bite will make use of that information and the
      ordering experience will appear as if the guest has logged in on Bite.


      # Session Info Schema


      `version` must be always set to `2`


      `loyaltyAuthValues` are used to authenticate the guest into the loyalty
      program


      `cards` are used to pass in any possible saved payment methods


      `validAt` is a unix timestamp (in ms) that represents the time at which
      the token was generated by the mobile app


      ```

      {
        version: 2,
        loyaltyAuthValues: {
          method: 'auth-token' | 'card-number';
          value: string;
        }[];
        cards: {
          cardNumber: string;
          cardName: string;
        }[];
        validAt: number
      }

      ```


      # Session Token Generation


      The session token is an encrypted representation of the session info that
      can be safely passed in a query string parameter of a Bite web ordering
      url.

      Generation steps:


      1. Construct the SessionInfo object as described above.

      2. Set `validAt` to be the current time (as a unix timestamp in
      milliseconds). For security purposes, the `sessionToken` must include the
      timestamp at which it was generated so Bite could verify that it was
      generated within 15 seconds of receiving the request. The purpose of this
      measure is to avoid replay attacks.

      3. Stringify it.

      4. Encrypt the resulting string with the secret key using the
      `AES-256-ECB` algorithm.

      5. Encode the resulting string with base64.


      # Method of Use


      1. The customer and Bite will exchange a secret key that will be used to
      encrypt the session info object.

      2. When a user of the mobile app clicks on a button or link that is meant
      to directly lead to the Bite ordering website in a WebView, the mobile app
      has to build the session info object, generate it (as described above),
      and include it in the `sessionToken` query string parameter when loading
      the Bite ordering website (e.g.
      https://order.yourdomain.com/location123?sessionToken=XXX).

      3. Bite servers will then decrypt the token into the session, verify that
      it is recent, and securely pass the session info to the front end so that
      it could authenticate the guest into the loyalty program or show saved
      payment methods.
x-tagGroups:
  - name: API Reference
    tags: []
  - name: Customer v2
    tags:
      - customerAccountManagement
      - customerDeliveryAddresses
      - customerOrderHistory
      - customerPaymentMethods
      - customerPushTokens
  - name: Locations v2
    tags:
      - locationsPick
  - name: Menu v2
    tags:
      - menu
  - name: Orders v2
    tags:
      - orders
  - name: Mobile App Config v2
    tags:
      - mobileAppConfig
  - name: Reporting v2
    tags:
      - reporting
  - name: Webhooks
    tags:
      - webhooks
  - name: Embedding Bite in a 3rd Party Mobile App
    tags:
      - embedding
paths:
  /v2/customer/signup:
    post:
      tags:
        - customerAccountManagement
      summary: Sign Up for a Customer Account
      description: >
        Creates a new customer account that can be used for storing payment
        methods, delivery addresses and past orders.
      operationId: CustomerSignup
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerSignup'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerSignup'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/login:
    post:
      tags:
        - customerAccountManagement
      summary: Log In to a Customer Account
      description: |
        Logs into an existing customer account.
      operationId: CustomerLogin
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerLogin'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerLogin'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/reset-password:
    post:
      tags:
        - customerAccountManagement
      summary: Reset Password
      description: >
        Reset password for an existing customer account identified by the email
        address. If the customer account is found, an reset password email will
        be sent so that the user can finish the password reset process. The
        response from the API is the same regardless of whether the account was
        found.
      operationId: CustomerResetPassword
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerResetPassword'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerResetPassword'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/change-password:
    post:
      tags:
        - customerAccountManagement
      summary: Change Password
      description: >
        Change the password for the specified customer account using one of two
        ways. Either the `resetToken` is provided from a password reset email,
        or the logged in customer provides their current password.
      operationId: CustomerChangePassword
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerChangePassword'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerChangePassword'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/verify-account:
    post:
      tags:
        - customerAccountManagement
      summary: Verify Customer Account
      description: |
        Verify the email associated with the specified customer account.
      operationId: CustomerVerifyAccount
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerVerifyAccount'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerVerifyAccount'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer:
    get:
      tags:
        - customerAccountManagement
      summary: Get Customer Account
      description: |
        Returns the latest copy of the customer account.
      operationId: CustomerGetAccount
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerGetAccount'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
    put:
      tags:
        - customerAccountManagement
      summary: Update Customer Account
      description: >
        Update some simple fields on the customer account such as name and phone
        number.
      operationId: CustomerUpdateAccount
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerUpdateAccount'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerUpdateAccount'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
    delete:
      tags:
        - customerAccountManagement
      summary: Delete Customer Account
      description: >
        Deletes the customer account and all associated payment methods,
        delivery addresses, push tokens, etc.
      operationId: CustomerDeleteAccount
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      responses:
        '200':
          description: Success!
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/orders:
    get:
      tags:
        - customerOrderHistory
      summary: Get Recent Orders for a Customer
      description: >
        Returns the most recent 20 orders that the customer has placed through
        the bite platform.
      operationId: CustomerGetOrders
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerGetOrders'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/delivery-addresses:
    get:
      tags:
        - customerDeliveryAddresses
      summary: Get Delivery Addresses
      description: >
        Returns the latest copy of all the saved delivery addresses associated
        with the customer's account.
      operationId: CustomerGetDeliveryAddresses
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerGetDeliveryAddresses'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
    post:
      tags:
        - customerDeliveryAddresses
      summary: Create a New Delivery Address
      description: |
        Creates a new delivery address saved to the customer's account.
      operationId: CustomerCreateDeliveryAddress
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerCreateDeliveryAddress'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerCreateDeliveryAddress'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/delivery-addresses/{deliveryAddressId}:
    put:
      tags:
        - customerDeliveryAddresses
      summary: Update a Delivery Address
      description: |
        Update some simple fields on the specified delivery address.
      operationId: CustomerUpdateDeliveryAddress
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
        - $ref: '#/components/parameters/customer-delivery-address-parameters'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerUpdateDeliveryAddress'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerUpdateDeliveryAddress'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
    delete:
      tags:
        - customerDeliveryAddresses
      summary: Delete a Delivery Address
      description: |
        Deletes the specified delivery address from the customer's account.
      operationId: CustomerDeleteDeliveryAddress
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
        - $ref: '#/components/parameters/customer-delivery-address-parameters'
      responses:
        '200':
          description: Success!
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/payment-methods:
    get:
      tags:
        - customerPaymentMethods
      summary: Get Payment Methods
      description: >
        Returns the latest copy of all the saved payment methods associated with
        the customer's account.
      operationId: CustomerGetPaymentMethods
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerGetPaymentMethods'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/payment-methods/{paymentMethodId}:
    put:
      tags:
        - customerPaymentMethods
      summary: Update a Payment Method
      description: |
        Update some simple fields on the specified payment method.
      operationId: CustomerUpdatePaymentMethod
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
        - $ref: '#/components/parameters/customer-payment-method-parameters'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerUpdatePaymentMethod'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerUpdatePaymentMethod'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
    delete:
      tags:
        - customerPaymentMethods
      summary: Delete a Payment Method
      description: |
        Deletes the specified payment method from the customer's account.
      operationId: CustomerDeletePaymentMethod
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
        - $ref: '#/components/parameters/customer-payment-method-parameters'
      responses:
        '200':
          description: Success!
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/favorites:
    get:
      tags:
        - customerFavorites
      summary: Get Favorites
      description: >
        Returns the latest copy of all the favorites items associated with the
        customer's account.
      operationId: CustomerGetFavorites
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
        - in: query
          name: locationId
          schema:
            type: string
          description: >-
            If provided, only favorite items from the specified location will be
            returned.
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerGetFavorites'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
    post:
      tags:
        - customerFavorites
      summary: Save a Favorite
      description: |
        Saves an ordered item as a favorite at a specified location.
        Only 5 items can be saved as favorites for any given location.
      operationId: CustomerSaveFavorite
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerSaveFavorite'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerSaveFavorite'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/favorites/{favoriteId}:
    delete:
      tags:
        - customerFavorites
      summary: Remove a Favorite
      description: |
        Removes the specified item from the list of favorites.
      operationId: CustomerDeleteFavorite
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
        - $ref: '#/components/parameters/customer-favorite-parameters'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerDeleteFavorite'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseCustomerDeleteFavorite'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/customer/push-tokens:
    post:
      tags:
        - customerPushTokens
      summary: Save a New Push Token
      description: >
        Saves a new mobile app push notification token to the customer's
        account.
      operationId: CustomerCreatePushToken
      security:
        - ApiKeySecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestCustomerCreatePushToken'
        required: true
      responses:
        '200':
          description: Success!
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/locations:
    get:
      tags:
        - locationsPick
      summary: Get All Locations
      description: >
        Returns all the locations that are available to the bearer token.

        Requires an API token with the "Locations" or "Reporting" scope.

        The base rate limit of an organization with one location is 75 requests
        per 10 minutes.
      operationId: LocationsGetAll
      security:
        - BearerAuthApiTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/ParameterPage'
        - $ref: '#/components/parameters/ParameterLimit'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseLocationsGetAll'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/locations/search:
    get:
      tags:
        - locationsPick
      summary: Search Locations
      description: >
        Returns all the locations that match the search query. If one of the
        fulfillment methods is delivery, then locations that won't deliver to
        the specified address will be filtered out of the search results.

        You must provide either the address or the lat/long parameters.
      operationId: LocationsSearch
      security:
        - ApiKeySecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/order-channel-header'
        - $ref: '#/components/parameters/ParameterFulfillmentMethods'
        - $ref: '#/components/parameters/ParameterLat'
        - $ref: '#/components/parameters/ParameterLong'
        - $ref: '#/components/parameters/ParameterAddress'
        - $ref: '#/components/parameters/ParameterShowDraftLocations'
        - $ref: '#/components/parameters/ParameterPage'
        - $ref: '#/components/parameters/ParameterLimit'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseLocationsSearch'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/locations/{locationId}/future-order-slots:
    get:
      tags:
        - locationsPick
      summary: Get Future Order Slots
      description: >
        Returns all the future order slots for which a guest could place an
        order at this location.
      operationId: LocationsGetFutureOrderSlots
      security:
        - ApiKeySecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/ParameterLocationId'
        - $ref: '#/components/parameters/ParameterFulfillmentMethod'
        - $ref: '#/components/parameters/ParameterOutpostId'
        - $ref: '#/components/parameters/ParameterOrderedItemsLeadTime'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseLocationsGetFutureOrderSlots'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/locations/{locationId}/validate-delivery-address:
    post:
      tags:
        - locationsPick
      summary: Validate the Delivery Address at a Location
      description: >
        Checks whether the specified address is within the delivery range of the
        location.
      operationId: LocationsValidateDeliveryAddress
      security:
        - ApiKeySecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/ParameterLocationId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestLocationsValidateDeliveryAddress'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseLocationsValidateDeliveryAddress'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/menu:
    get:
      tags:
        - menu
      summary: Get Menu
      description: >
        Returns the latest menu for the specified channel, time, fulfillment
        method, etc.
      operationId: MenuGet
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/location-id-header'
        - $ref: '#/components/parameters/menu-parameters_ParameterFulfillmentMethod'
        - $ref: '#/components/parameters/ParameterTime'
        - $ref: '#/components/parameters/menu-parameters_ParameterOutpostId'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseGetMenu'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/mobile-app-config:
    get:
      tags:
        - mobileAppConfig
      summary: Retrieve Mobile App Config Bundle
      description: >
        Returns all the settings necessary for a mobile app to run.

        Requires an API token with the "Mobile App" scope.

        The base rate limit of an organization with one location is 75 requests
        per 10 minutes.
      operationId: MobileAppConfigGet
      security:
        - ApiKeySecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMobileAppConfigGet'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/orders:
    post:
      tags:
        - orders
      summary: Create Order
      description: >
        Creates a new order on Bite.


        Idempotency can be achieved by providing a `clientId` property. If an
        order with the specified `clientId` already exists at this location on
        Bite, then the existing order will be returned and no new order will be
        created.
      operationId: OrderCreate
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/location-id-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestOrderCreate'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseOrder'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/orders/{orderId}:
    get:
      tags:
        - orders
      summary: Get Order
      description: |
        Returns the latest order data along with its status
      operationId: OrderGet
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/location-id-header'
        - $ref: '#/components/parameters/orders-parameters'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseGetOrder'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
    put:
      tags:
        - orders
      summary: Update Order
      description: >
        Updates the current order.

        If the order is closed then only the `guestSurvey` property can be
        updated.

        Returns the updated order.
      operationId: OrderPut
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/location-id-header'
        - $ref: '#/components/parameters/orders-parameters'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestOrderPut'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseOrder'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/orders/{orderId}/validate:
    put:
      tags:
        - orders
      summary: Validate Order
      description: >
        Validates the order on the POS, checks if any items are 86d, and
        calculates order totals.

        The order must be unclosed, and must not have had any payments applied
        to it.
      operationId: OrderValidate
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/location-id-header'
        - $ref: '#/components/parameters/orders-parameters'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseOrderValidate'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/orders/{orderId}/coupon:
    post:
      tags:
        - orders
      summary: Add Coupon
      description: >
        Add a coupon to the current order.

        The order must be validated, unclosed, and must not have had any
        payments applied to it.

        Returns the updated order with the new totals that reflect the applied
        coupon.
      operationId: OrderAddCoupon
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/location-id-header'
        - $ref: '#/components/parameters/orders-parameters'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestOrderAddCoupon'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseOrder'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
    delete:
      tags:
        - orders
      summary: Remove Coupon
      description: >
        Removes the applied coupon from the current order.

        The order must be validated, unclosed, and must not have had any
        payments applied to it.

        Returns the updated order with the new totals that reflect the removed
        coupon.
      operationId: OrderRemoveCoupon
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/location-id-header'
        - $ref: '#/components/parameters/orders-parameters'
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseOrder'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/orders/{orderId}/tip:
    put:
      tags:
        - orders
      summary: Set Tip Amount
      description: >
        Set a tip amount on the current order.

        If `tipTotal` is zeo, then this call will remove any existing tip from
        the order.

        After the tip is applied or removed, the order might be revalidated
        based on the POS configuration.

        The order must be validated, unclosed, and must not have had any
        payments applied to it.

        Returns the updated order with the new totals that reflect the new tip
        amount.
      operationId: OrderPutTip
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/location-id-header'
        - $ref: '#/components/parameters/orders-parameters'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestOrderPutTip'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseOrder'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/orders/{orderId}/close:
    put:
      tags:
        - orders
      summary: Close Order
      description: >
        Closes a fully paid order so that it can be sent to the kitchen for
        fulfillment.
      operationId: OrderClose
      security:
        - BearerAuthSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/location-id-header'
        - $ref: '#/components/parameters/orders-parameters'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestOrderClose'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseOrderClose'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/orders/{orderId}/receipt:
    post:
      tags:
        - orders
      summary: Send a Receipt for a Customer's Order.
      description: |
        Returns success when it succeeds.
      operationId: OrderSendGuestReceipt
      security:
        - BearerAuthSecurityScheme: []
          CustomerAppScopeSecurityScheme: []
          CustomerTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/org-id-header'
        - $ref: '#/components/parameters/orders-parameters'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestOrderSendGuestReceipt'
        required: true
      responses:
        '200':
          description: Success!
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/reporting/orders/day/{date}:
    get:
      tags:
        - reporting
      summary: Generate an Orders Report
      description: >
        Returns a report with detailed information about the orders of a given
        day at a specified location.

        Requires an API token with the "Reporting" scope.

        The base rate limit of an organization with one location is 75 requests
        per 10 minutes.
      operationId: ReportingOrdersDay
      security:
        - BearerAuthApiTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
        - $ref: '#/components/parameters/location-id-header'
        - in: path
          name: date
          required: true
          description: The date of the orders to retrieve in a YYYY-MM-DD format
          schema:
            type: string
            example: '2023-07-21'
        - in: query
          name: newerThan
          description: >-
            The order ID of the last order returned in the previous page of
            results
          schema:
            type: string
            example: 654b3c2d537fd6b2dab2a2cc
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseReportingOrdersDay'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/reporting/orders/day:
    post:
      tags:
        - reporting
      summary: Generate an Orders Report (Deprecated)
      description: >
        This API endpoint is deprecated and will be removed in a future release.

        Returns a report with detailed information about the orders of a given
        day at a specified location.

        Requires an API token with the "Reporting" scope.

        The base rate limit of an organization with one location is 75 requests
        per 10 minutes.
      operationId: ReportingOrdersDayDeprecated
      security:
        - BearerAuthApiTokenSecurityScheme: []
      parameters:
        - $ref: '#/components/parameters/api-version-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestReportingOrdersDayDeprecated'
        required: true
      responses:
        '200':
          description: Success!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseReportingOrdersDayDeprecated'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      x-codegen-request-body-name: body
  /v2/webhooks/order-sent:
    post:
      summary: Order Sent
      operationId: order-sent
      tags:
        - webhooks
      security: []
      description: >
        Returns details of an order immediately after the order has closed and
        been sent to the POS integrations.

        If the location does not have any POS integrations, the webhooks will
        still send a response after the order is closed.

        At the discretion of the organization, this webhook can be configured to
        include item and transaction data.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - event
                - data
              properties:
                event:
                  type: string
                  enum:
                    - order-sent
                data:
                  $ref: '#/components/schemas/OrderExternal'
      responses:
        '200':
          description: Indicate that the webhook was received successfully.
  /v2/webhooks/order-updated:
    post:
      summary: Order Updated
      operationId: order-updated
      tags:
        - webhooks
      security: []
      description: >
        Returns details of an existing order immediately after they have been
        modified.

        This webhook is not sent on creation of the order.

        At the discretion of the organization, this webhook can be configured to
        include item and transaction data.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - event
                - data
              properties:
                event:
                  type: string
                  enum:
                    - order-updated
                data:
                  $ref: '#/components/schemas/OrderExternal'
      responses:
        '200':
          description: Indicate that the webhook was received successfully.
components:
  securitySchemes:
    ApiKeySecurityScheme:
      type: apiKey
      in: header
      name: x-bite-public-key
      description: This key will be provided to you when your sandbox is provisioned.
    BearerAuthSecurityScheme:
      type: http
      scheme: bearer
      description: This key will be provided to you when your sandbox is provisioned.
    BearerAuthApiTokenSecurityScheme:
      type: http
      scheme: bearer
      description: This token will be provided to you by Bite.
    CustomerAppScopeSecurityScheme:
      type: apiKey
      in: header
      name: x-customer-app-scope
      description: This key will be provided to you when your sandbox is provisioned.
    CustomerTokenSecurityScheme:
      type: apiKey
      in: header
      name: x-customer-token
      description: >-
        This token is returned by the Customer API upon a [successful
        login](#operation/CustomerLogin) or [change of
        password](#operation/CustomerChangePassword).
  parameters:
    api-version-header:
      name: x-md-api-version
      in: header
      required: true
      schema:
        type: string
        enum:
          - '4'
    org-id-header:
      name: x-bite-org-id
      in: header
      description: The org ID you are working with.
      required: true
      schema:
        type: string
    order-channel-header:
      name: x-bite-order-channel
      in: header
      description: The order channel you are working with.
      required: true
      schema:
        $ref: '#/components/schemas/OrderChannel'
    customer-delivery-address-parameters:
      in: path
      name: deliveryAddressId
      required: true
      schema:
        type: string
      description: The ID of the delivery address that's being worked on.
    customer-payment-method-parameters:
      in: path
      name: paymentMethodId
      required: true
      schema:
        type: string
      description: The ID of the payment method that's being worked on.
    customer-favorite-parameters:
      in: path
      name: favoriteId
      required: true
      schema:
        type: string
      description: The ID of the favorite set that's being worked on.
    ParameterPage:
      in: query
      name: page
      schema:
        type: integer
        format: int32
        minimum: 0
    ParameterLimit:
      in: query
      name: limit
      schema:
        type: integer
        format: int32
        minimum: 1
        maximum: 50
    ParameterFulfillmentMethods:
      in: query
      name: fulfillmentMethods
      required: true
      description: >
        The user's chosen fulfillment methods for their order. Only locations
        that support one of these methods will be returned.
          * Web only:
            * `20` - In-Store Pickup
            * `21` - Dine In
            * `22` - Curbside Pickup
            * `23` - Outpost
            * `24` - Delivery
          * Catering only:
            * `30` - In-Store Pickup
            * `31` - Dine In
            * `32` - Curbside Pickup
            * `33` - Outpost
            * `34` - Delivery
      schema:
        type: array
        minItems: 1
        items:
          $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
    ParameterLat:
      in: query
      name: lat
      description: >-
        The user's geo-coordinates (latitude). This will be used to find the
        closest store.
      schema:
        type: number
        format: float
    ParameterLong:
      in: query
      name: long
      description: >-
        The user's geo-coordinates (longitude). This will be used to find the
        closest store.
      schema:
        type: number
        format: float
    ParameterAddress:
      in: query
      name: address
      description: >-
        A Google Maps Places API-formatted address string. This will be used
        either to find the closest pickup store or as the delivery address,
        depending on the specified fulfillment method.
      schema:
        type: string
    ParameterShowDraftLocations:
      in: query
      name: showDraftLocations
      description: >-
        Set to true if you want to see draft locations in an otherwise live org.
        This should be only used for testing new locations in a non-prod
        environment or through a special flag activated on certain users'
        accounts.
      schema:
        type: boolean
    ParameterLocationId:
      in: path
      name: locationId
      description: The location ID from which delivery is being ordered.
      schema:
        type: string
    ParameterFulfillmentMethod:
      in: query
      name: fulfillmentMethod
      required: true
      description: >
        The user's chosen fulfillment methods for their order. Future order
        slots will be returned for this fulfillment method.
          * Web only:
            * `20` - In-Store Pickup
            * `21` - Dine In
            * `22` - Curbside Pickup
            * `23` - Outpost
            * `24` - Delivery
          * Catering only:
            * `30` - In-Store Pickup
            * `31` - Dine In
            * `32` - Curbside Pickup
            * `33` - Outpost
            * `34` - Delivery
      schema:
        $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
    ParameterOutpostId:
      in: query
      name: outpostId
      schema:
        description: The ID of the outpost from which the guest wants to pick up the food.
        type: string
    ParameterOrderedItemsLeadTime:
      in: query
      name: orderedItemsLeadTime
      schema:
        description: >
          The lead time that has been calculated for the guest's order purely
          based on the cart contents. This value is only meant to be provided if
          the API rejects the order at validation time due to the chosen future
          order slot being in the past. In that case, the client needs to
          provide an expected order lead time so slots that are too early won't
          be shown.

          If provided, the API will filter out any time slots by which the order
          would not be ready.
        type: integer
        format: int32
    location-id-header:
      name: x-bite-location-id
      in: header
      description: The location ID you are working with.
      required: true
      schema:
        type: string
    menu-parameters_ParameterFulfillmentMethod:
      in: query
      name: fulfillmentMethod
      description: |
        The user's chosen fulfillment method for their order.
      schema:
        $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
    ParameterTime:
      in: query
      name: time
      schema:
        $ref: '#/components/schemas/PickupAt'
    menu-parameters_ParameterOutpostId:
      in: query
      name: outpostId
      schema:
        $ref: '#/components/schemas/OutpostId'
    orders-parameters:
      in: path
      name: orderId
      required: true
      schema:
        type: string
      description: The ID of the order that's being worked on.
  schemas:
    OrderChannel:
      type: string
      enum:
        - catering
        - flash
        - kiosk
        - linebuster
        - web
      description: |
        Denotes the ordering channel through which orders are placed:
          * `catering` - Catering Website
          * `flash` - Contactless (QR-code)
          * `kiosk` - Kiosk
          * `linebuster` - Linebuster
          * `web` - Online Ordering Website
    PropertyEmail:
      type: string
      format: email
      description: >-
        The email addressed used when the customer signed up for an account.
        Must a valid RFC email address.
    PropertyFirstName:
      type: string
      description: The customer's first name.
    PropertyLastName:
      type: string
      description: The customer's last name.
    PropertyPhoneNumber:
      type: string
      description: >-
        The customer's phone number. Must be a valid phone number under the
        North American Numbering Plan. Must be formatted as a string of 10
        digits.
    RequestCustomerSignup:
      type: object
      required:
        - email
        - password
        - firstName
        - lastName
      properties:
        email:
          $ref: '#/components/schemas/PropertyEmail'
        password:
          type: string
          format: password
          description: Password to be used to log into the customer account.
        firstName:
          $ref: '#/components/schemas/PropertyFirstName'
        lastName:
          $ref: '#/components/schemas/PropertyLastName'
        phoneNumber:
          $ref: '#/components/schemas/PropertyPhoneNumber'
        orderId:
          type: string
          description: >-
            The id of the order that was just placed by an anonymous guest. If
            specified, the new customer account will save this order to its
            order history.
    ResponseCustomerSignup:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: >-
            A message informing the customer about any next steps, such as
            having to check their email in order to verify their account.
    RequestCustomerLogin:
      type: object
      required:
        - email
        - password
      properties:
        email:
          $ref: '#/components/schemas/PropertyFirstName'
        password:
          type: string
          format: password
          description: The password associated with the customer's account.
    Customer:
      type: object
      required:
        - _id
        - state
        - email
        - scope
        - firstName
        - lastName
      properties:
        _id:
          type: string
          description: Customer ID
        state:
          type: integer
          format: int32
          description: |
            The state of the customer account:
             * `0` - Unverified
             * `1` - Enabled
             * `2` - Disabled
             * `3` - Deleted
        email:
          $ref: '#/components/schemas/PropertyEmail'
        scope:
          type: string
          description: The brand's account scope.
          example: my-brand-scope
        firstName:
          $ref: '#/components/schemas/PropertyFirstName'
        lastName:
          $ref: '#/components/schemas/PropertyLastName'
        phoneNumber:
          $ref: '#/components/schemas/PropertyPhoneNumber'
    ResponseCustomerLogin:
      type: object
      required:
        - token
        - customer
      properties:
        token:
          type: string
          description: >-
            The auth token that will be used to authenticate the customer going
            forward as part of the CustomerTokenSecurityScheme.
        customer:
          $ref: '#/components/schemas/Customer'
    RequestCustomerResetPassword:
      type: object
      required:
        - email
      properties:
        email:
          $ref: '#/components/schemas/PropertyEmail'
    ResponseCustomerResetPassword:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: >-
            A message informing the customer about any next steps, such as
            having to check their email in order to finish the password reset
            process.
    RequestCustomerChangePassword:
      type: object
      required:
        - newPassword
        - newPasswordRepeat
      properties:
        resetToken:
          type: string
          description: A token acquired during the password reset process.
        currentPassword:
          type: string
          format: password
          description: The current password used to access the customer account.
        newPassword:
          type: string
          format: password
          description: The new password to be used for the customer account.
        newPasswordRepeat:
          type: string
          format: password
          description: The copy of the new password.
    ResponseCustomerChangePassword:
      required:
        - token
      type: object
      properties:
        token:
          type: string
          description: >-
            The auth token that will be used to authenticate the customer going
            forward. The token issued previously will not be accepted anymore.
    RequestCustomerVerifyAccount:
      type: object
      required:
        - verifyToken
      properties:
        verifyToken:
          type: string
          description: A token acquired during the signup process.
    ResponseCustomerVerifyAccount:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: A message informing the customer about any next steps.
    ResponseCustomerGetAccount:
      type: object
      required:
        - customer
      properties:
        customer:
          $ref: '#/components/schemas/Customer'
    RequestCustomerUpdateAccount:
      type: object
      properties:
        firstName:
          $ref: '#/components/schemas/PropertyFirstName'
        lastName:
          $ref: '#/components/schemas/PropertyLastName'
        phoneNumber:
          $ref: '#/components/schemas/PropertyPhoneNumber'
    ResponseCustomerUpdateAccount:
      type: object
      required:
        - customer
      properties:
        customer:
          $ref: '#/components/schemas/Customer'
    ClientId:
      description: ID of the order (provided by the client). Used to achieve idempotency.
      type: string
    OrgId:
      description: The ID of the org at which the customer placed the order.
      type: string
    LocationId:
      description: >-
        The ID of the location (in the specified org) at which the customer
        placed the order.
      type: string
    StartedAt:
      description: The Unix timestamp for when the order was started on the client.
      type: integer
      format: int64
    SessionDuration:
      description: >
        Length of the guest session duration from the start of their ordering
        experience.

        This should be measured in milliseconds.
      type: integer
      format: in32
    MenuStructureId:
      description: The ID of the menu structure that was presented to the guest.
      type: string
    LanguageCode:
      type: string
      enum:
        - en-us
        - fr-ca
        - es-us
        - zh-cn
        - ja-jp
        - ko-kr
        - pt-br
      description: |
        Denotes languages supported by the Bite platform.
         * `en-us` - English (USA)
         * `fr-ca` - French (Canada)
         * `es-us` - Spanish (USA)
         * `zh-cn` - Chinese (Simplified, PRC)
         * `ja-jp` - Japanese (Japan)
         * `ko-kr` - Korean (South Korea)
         * `pt-br` - Portuguese (Brazil)
         * `ko-kr` - Korean (South Korea)
    CustomerId:
      description: |
        ID of the customer (if they were logged in) who placed the order.
        Only available for non-kiosk orders.
      type: string
    GuestId:
      description: ID of the recognized guest who placed the order.
      type: string
    UserDidRejectConsent:
      description: >-
        True if the guest explicitly opted out of facial recognition on the
        kiosk.
      type: boolean
    FulfillmentMethod:
      type: integer
      format: int32
      description: |
        The fulfillment method for this order.
          * Web only:
            * `20` - In-Store Pickup
            * `21` - Dine In
            * `22` - Curbside Pickup
            * `23` - Outpost
            * `24` - Delivery
          * Catering only:
            * `30` - In-Store Pickup
            * `31` - Dine In
            * `32` - Curbside Pickup
            * `33` - Outpost
            * `34` - Delivery
    PickupAt:
      description: >
        The Unix timestamp for the ready time of a future order. ASAP orders
        will not have this property. If this is a pickup order, then this will
        denote the time by which the order is ready to be picked up from the
        store. If this is a delivery order, then this will denote the time by
        which the order should be delivered.
      type: integer
      format: int64
    DeliveryAddress:
      description: >-
        The delivery address for this order. This value is required if this is a
        delivery address.
      type: object
      required:
        - line1
        - city
        - postalCode
      properties:
        line1:
          type: string
        line2:
          type: string
        city:
          type: string
        state:
          type: string
        postalCode:
          type: string
    DeliveryInstructions:
      description: A short string with delivery instructions.
      type: string
    GuestName:
      type: string
    GuestPhoneNumber:
      type: string
      format: ^\d{10}$
    GuestEmail:
      type: string
      format: email
    GuestConsentedToMarketing:
      type: boolean
    GuestVehicle:
      description: The vehicle to which a curbside order could be delivered to.
      type: object
      required:
        - make
        - model
        - color
      properties:
        make:
          type: string
        model:
          type: string
        color:
          type: string
    TableNumber:
      description: Number of the table or table tent that the order is associated with.
      type: string
    Image:
      type: object
      required:
        - url
        - width
        - height
      properties:
        url:
          description: Image URL
          type: string
        width:
          description: Image width in px
          type: integer
          format: int32
        height:
          description: Image height in px
          type: integer
          format: int32
    IncludeUtensils:
      description: >-
        This field will be present if the location is configured to ask the
        guest whether they want utensils to be included with their order. This
        information will then be conveyed to the POS.
      type: boolean
    OrderPaymentDestination:
      type: integer
      format: int32
      description: |
        Order Payment Destination:
          * Kiosk only:
            * `1` - Paid with card(s) on the kiosk
            * `3` - Paid at the cashier
    OrderedItemId:
      description: ID of the menu item.
      type: string
    OrderedItemName:
      description: Name of the menu item as it appeared on the menu.
      type: string
    OrderedItemVendor:
      type: object
      required:
        - _id
        - name
      properties:
        _id:
          description: ID of the vendor that this menu item is associated with.
          type: string
        name:
          description: Name of the vendor that this menu item is associated with.
          type: string
    OrderedItemScannedBarcode:
      description: >-
        Value of the barcode that was scanned at the kiosk to add this menu item
        to the order.
      type: string
      format: ^[0-9A-Z]+$
    OrderedItemMenuSection:
      description: The menu section section from which this menu item was ordered.
      type: object
      required:
        - _id
        - name
      properties:
        _id:
          type: string
        name:
          type: string
    OrderedItemSpecialRequest:
      description: |
        A special request that the guest added for this menu item.
        The max length of this field depends on the specific POS.
      type: string
    OrderedItemUpsellScreen:
      description: >-
        Name of the screen from which this menu item was added to the order if
        it was a recommendation.
      type: string
    OrderedPriceOptionId:
      description: ID of the ordered price option.
      type: string
    OrderedPriceOptionName:
      description: Name of the price option as it appeared on the menu
      type: string
    OrderedPriceOptionQuantity:
      description: Quantity of the menu item ordered.
      type: integer
      format: int32
      minimum: 1
    OrderedPriceOptionWeight:
      type: number
      format: float
      minimum: 0
    OrderedPriceOptionSaleUnit:
      type: integer
      format: int32
      description: |
        Sale unit:
          * `0` - single unit
          * `2` - pounds
          * `3` - ounces
    OrderedPriceOptionUnitPrice:
      description: >-
        Price of a single unit of the menu item in cents (given the ordered
        price option).
      type: integer
      format: int32
    OrderedPriceOptionPrice:
      description: >-
        Final price of the item (in cents) that accounts for quantity but not
        including any priced modifiers.
      type: integer
      format: int32
    OrderedModGroupName:
      description: Name of the mod group as it appears on the menu.
      type: string
    OrderedModId:
      description: ID of the modifier
      type: string
    OrderedModName:
      description: Name of the modifier as it appears on the menu.
      type: string
    OrderedPriceOption:
      description: The price option of the menu item that was ordered.
      type: object
      required:
        - _id
        - quantity
        - unitPrice
        - price
      properties:
        _id:
          $ref: '#/components/schemas/OrderedPriceOptionId'
        name:
          $ref: '#/components/schemas/OrderedPriceOptionName'
        quantity:
          $ref: '#/components/schemas/OrderedPriceOptionQuantity'
        weight:
          $ref: '#/components/schemas/OrderedPriceOptionWeight'
        saleUnit:
          $ref: '#/components/schemas/OrderedPriceOptionSaleUnit'
        unitPrice:
          $ref: '#/components/schemas/OrderedPriceOptionUnitPrice'
        price:
          $ref: '#/components/schemas/OrderedPriceOptionPrice'
        barcode:
          description: >-
            The comma separated PLUs of the menu item's price option that can be
            converted to a barcode (e.g. UPC-A).
          type: string
        modGroups:
          description: Mod groups that were ordered with the item.
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/OrderedModGroup'
    OrderedMod:
      type: object
      required:
        - _id
        - name
        - priceOption
      properties:
        _id:
          $ref: '#/components/schemas/OrderedModId'
        name:
          $ref: '#/components/schemas/OrderedModName'
        priceOption:
          $ref: '#/components/schemas/OrderedPriceOption'
    OrderedModGroup:
      description: An ordered mod group must have at least one item or deselected item.
      type: object
      required:
        - _id
        - name
      properties:
        _id:
          type: string
        name:
          $ref: '#/components/schemas/OrderedModGroupName'
        parentModGroupId:
          description: >-
            Must be provided if the mod group had this property from the menu
            response.
          type: string
        items:
          description: A list of modifiers that were selected in this mod group.
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/OrderedMod'
        deselectedItems:
          description: >-
            A list of pre-selected modifiers that were deselected in this mod
            group.
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/OrderedMod'
    OrderedItem:
      type: object
      required:
        - _id
        - name
        - section
        - priceOption
      properties:
        _id:
          $ref: '#/components/schemas/OrderedItemId'
        name:
          $ref: '#/components/schemas/OrderedItemName'
        vendor:
          $ref: '#/components/schemas/OrderedItemVendor'
        scannedBarcode:
          $ref: '#/components/schemas/OrderedItemScannedBarcode'
        section:
          $ref: '#/components/schemas/OrderedItemMenuSection'
        specialRequest:
          $ref: '#/components/schemas/OrderedItemSpecialRequest'
        upsellScreen:
          $ref: '#/components/schemas/OrderedItemUpsellScreen'
        priceOption:
          $ref: '#/components/schemas/OrderedPriceOption'
    SubTotal:
      description: The order sub total in cents.
      type: integer
      format: int32
    DiscountTotal:
      description: The amount discounted from the order sub total in cents.
      type: integer
      format: int32
    TaxTotal:
      description: The amount of tax collected on the order in cents.
      type: integer
      format: int32
    ServiceChargeTotal:
      description: The sum of all the service charges added to the order in cents.
      type: integer
      format: int32
    ServiceCharges:
      description: >
        A list of all the service charges added to the order.

        If this property is available, then `serviceChargeTotal` is definitely
        available on the order.

        However, this property may not be available even if there is a
        `serviceChargeTotal` because not every POS will provide a breakdown of
        the service charges.
      type: array
      minItems: 1
      items:
        type: object
        required:
          - name
          - amount
        properties:
          name:
            description: A name of the service charge as it should appear on the receipt.
            type: string
          amount:
            description: The amount of the service charge in cents.
            type: integer
            format: int32
    TipTotal:
      description: The tip amount on the order in cents.
      type: integer
      format: int32
      minimum: 0
    Total:
      description: >-
        The total amount that the guest paid in cents. This number includes the
        tip.
      type: integer
      format: int32
    Order:
      type: object
      required:
        - _id
        - clientId
        - orgId
        - locationId
        - startedAt
        - sessionDuration
        - menuStructureId
        - channel
        - fulfillmentMethod
        - orderedItems
        - subTotal
        - discountTotal
        - taxTotal
        - total
      properties:
        _id:
          description: ID of the order (created on Bite)
          type: string
        clientId:
          $ref: '#/components/schemas/ClientId'
        orgId:
          $ref: '#/components/schemas/OrgId'
        locationId:
          $ref: '#/components/schemas/LocationId'
        startedAt:
          $ref: '#/components/schemas/StartedAt'
        sessionDuration:
          $ref: '#/components/schemas/SessionDuration'
        menuStructureId:
          $ref: '#/components/schemas/MenuStructureId'
        selectedLanguage:
          $ref: '#/components/schemas/LanguageCode'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        guestId:
          $ref: '#/components/schemas/GuestId'
        userDidRejectConsent:
          $ref: '#/components/schemas/UserDidRejectConsent'
        channel:
          $ref: '#/components/schemas/OrderChannel'
        fulfillmentMethod:
          $ref: '#/components/schemas/FulfillmentMethod'
        pickupAt:
          $ref: '#/components/schemas/PickupAt'
        deliveryAddress:
          $ref: '#/components/schemas/DeliveryAddress'
        deliveryInstructions:
          $ref: '#/components/schemas/DeliveryInstructions'
        guestName:
          $ref: '#/components/schemas/GuestName'
        guestPhoneNumber:
          $ref: '#/components/schemas/GuestPhoneNumber'
        guestEmail:
          $ref: '#/components/schemas/GuestEmail'
        guestConsentedToMarketing:
          $ref: '#/components/schemas/GuestConsentedToMarketing'
        guestVehicle:
          $ref: '#/components/schemas/GuestVehicle'
        tableNumber:
          $ref: '#/components/schemas/TableNumber'
        outpost:
          description: >
            The description of the outpost that this order was delivered to for
            the guest to pick up.

            This field will be present if `fulfillmentMethod` is an outpost one.
          type: object
          required:
            - _id
            - name
            - pickupInstructions
          properties:
            _id:
              description: ID of the outpost.
              type: string
            name:
              description: The name of the outpost.
              type: string
            pickupInstructions:
              description: >-
                A short blurb with instructions for either finding or accessing
                the outpost.
              type: string
            instructionalImageUrl:
              description: >-
                An image providing some visual instructions for either finding
                or accessing the outpost.
              type: array
              minLength: 1
              items:
                $ref: '#/components/schemas/Image'
        includeUtensils:
          $ref: '#/components/schemas/IncludeUtensils'
        paymentDestination:
          $ref: '#/components/schemas/OrderPaymentDestination'
        orderedItems:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/OrderedItem'
        subTotal:
          $ref: '#/components/schemas/SubTotal'
        discountTotal:
          $ref: '#/components/schemas/DiscountTotal'
        taxTotal:
          $ref: '#/components/schemas/TaxTotal'
        serviceChargeTotal:
          $ref: '#/components/schemas/ServiceChargeTotal'
        serviceCharges:
          $ref: '#/components/schemas/ServiceCharges'
        tipTotal:
          $ref: '#/components/schemas/TipTotal'
        total:
          $ref: '#/components/schemas/Total'
    PropertyId:
      type: string
      description: The Bite ID of the location.
      example: 0123456789abcdef01234567
    PropertyName:
      type: string
      description: Name of the location.
    PropertyShortCode:
      description: The location's unique 4-letter short code.
      type: string
      minLength: 4
      maxLength: 4
    PropertyUrlSlug:
      description: >-
        The location's unique slug that's used in the location's web ordering
        url.
      type: string
      minLength: 4
      maxLength: 32
    PropertyThirdPartyId:
      description: |
        The location's unique ID in a third-party system.
        Only available if the value is set in Bite Admin.
      type: string
    location_PropertyPhoneNumber:
      description: The location's phone number, formatted as a 10-digit string.
      type: string
      minLength: 10
      maxLength: 10
    PropertyCoordinates:
      description: The location's geo-coordinates (long, lat).
      type: array
      minItems: 2
      maxItems: 2
      items:
        type: number
        format: float
    PropertyFullAddress:
      description: The location's full physical address.
      type: object
      required:
        - line1
        - city
        - state
        - postalCode
      properties:
        line1:
          type: string
        line2:
          type: string
        crossStreet:
          type: string
        city:
          type: string
        state:
          type: string
          description: Two-letter abbreviation for the state or province.
        postalCode:
          type: string
        country:
          type: string
    fulfillment-method_FulfillmentMethod:
      type: integer
      format: int32
      description: |
        Fulfillment Method:
          * Web only:
            * `20` - In-Store Pickup
            * `21` - Dine In
            * `22` - Curbside Pickup
            * `23` - Outpost
            * `24` - Delivery
          * Catering only:
            * `30` - In-Store Pickup
            * `31` - Dine In
            * `32` - Curbside Pickup
            * `33` - Outpost
            * `34` - Delivery
    ScheduleBoundary:
      type: object
      required:
        - hours
        - minutes
      properties:
        hours:
          type: integer
          format: int32
          minimum: 0
          maximum: 23
        minutes:
          type: integer
          format: int32
          minimum: 0
          maximum: 59
    LocationOpenHoursSchedule:
      type: object
      required:
        - from
        - to
        - openingHoursString
      properties:
        from:
          $ref: '#/components/schemas/ScheduleBoundary'
        to:
          $ref: '#/components/schemas/ScheduleBoundary'
        openingHoursString:
          description: >-
            Human-readable representation of the open hours interval (e.g. "11am
            to 2:30pm")
          type: string
    AvailableDiningOptionsProperty:
      description: >-
        A list of enabled dining options with associated opening hours for each
        one.
      type: array
      minItems: 1
      items:
        type: object
        required:
          - fulfillmentMethod
          - asapOrdersEnabled
          - futureOrdersEnabled
          - openingHours
        properties:
          fulfillmentMethod:
            $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
          asapOrdersEnabled:
            description: >-
              True if ASAP orders can be placed at this location with this
              fulfillment method; false otherwise. If this is false, then
              `futureOrdersEnabled` has to be true.
            type: boolean
          futureOrdersEnabled:
            description: >-
              True if future orders can be placed at this location with this
              fulfillment method; false otherwise. If this is false, then
              `asapOrdersEnabled` has to be true.
            type: boolean
          openingHours:
            description: >-
              Opening hours for this dining option, broken down by day of the
              week.
            type: object
            properties:
              mon:
                $ref: '#/components/schemas/LocationOpenHoursSchedule'
              tue:
                $ref: '#/components/schemas/LocationOpenHoursSchedule'
              wed:
                $ref: '#/components/schemas/LocationOpenHoursSchedule'
              thu:
                $ref: '#/components/schemas/LocationOpenHoursSchedule'
              fri:
                $ref: '#/components/schemas/LocationOpenHoursSchedule'
              sat:
                $ref: '#/components/schemas/LocationOpenHoursSchedule'
              sun:
                $ref: '#/components/schemas/LocationOpenHoursSchedule'
    StoreInfo:
      type: object
      required:
        - _id
        - name
        - shortCode
        - urlSlug
        - phoneNumber
        - coordinates
        - fullAddress
        - url
        - availableDiningOptions
      properties:
        _id:
          $ref: '#/components/schemas/PropertyId'
        name:
          $ref: '#/components/schemas/PropertyName'
        shortCode:
          $ref: '#/components/schemas/PropertyShortCode'
        urlSlug:
          $ref: '#/components/schemas/PropertyUrlSlug'
        thirdPartyId:
          $ref: '#/components/schemas/PropertyThirdPartyId'
        phoneNumber:
          $ref: '#/components/schemas/location_PropertyPhoneNumber'
        coordinates:
          $ref: '#/components/schemas/PropertyCoordinates'
        fullAddress:
          $ref: '#/components/schemas/PropertyFullAddress'
        url:
          description: The url for this location's ordering page.
          type: string
        availableDiningOptions:
          $ref: '#/components/schemas/AvailableDiningOptionsProperty'
    ResponseCustomerGetOrders:
      type: object
      required:
        - orders
      properties:
        orders:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Order'
              - type: object
                required:
                  - location
                properties:
                  location:
                    $ref: '#/components/schemas/StoreInfo'
    PropertyLine1:
      type: string
    PropertyLine2:
      type: string
    PropertyCity:
      type: string
    PropertyState:
      type: string
    PropertyPostalCode:
      type: string
    customer-delivery-address_PropertyPhoneNumber:
      type: string
    PropertyDeliveryInstructions:
      type: string
    PropertyNickname:
      description: The nickname for the saved delivery address
      type: string
    PropertyIsDefault:
      description: >-
        If this value is true, then no other delivery address associated with
        this customer account will be marked as `isDefault=true`.
      type: boolean
    CustomerDeliveryAddress:
      type: object
      required:
        - line1
        - city
        - postalCode
        - phoneNumber
      properties:
        line1:
          $ref: '#/components/schemas/PropertyLine1'
        line2:
          $ref: '#/components/schemas/PropertyLine2'
        city:
          $ref: '#/components/schemas/PropertyCity'
        state:
          $ref: '#/components/schemas/PropertyState'
        postalCode:
          $ref: '#/components/schemas/PropertyPostalCode'
        phoneNumber:
          $ref: '#/components/schemas/customer-delivery-address_PropertyPhoneNumber'
        deliveryInstructions:
          $ref: '#/components/schemas/PropertyDeliveryInstructions'
        nickname:
          $ref: '#/components/schemas/PropertyNickname'
        isDefault:
          $ref: '#/components/schemas/PropertyIsDefault'
    ResponseCustomerGetDeliveryAddresses:
      type: object
      required:
        - deliveryAddresses
      properties:
        deliveryAddresses:
          type: array
          items:
            $ref: '#/components/schemas/CustomerDeliveryAddress'
    RequestCustomerCreateDeliveryAddress:
      type: object
      required:
        - line1
        - city
        - postalCode
        - phoneNumber
      properties:
        line1:
          $ref: '#/components/schemas/PropertyLine1'
        line2:
          $ref: '#/components/schemas/PropertyLine2'
        city:
          $ref: '#/components/schemas/PropertyCity'
        state:
          $ref: '#/components/schemas/PropertyState'
        postalCode:
          $ref: '#/components/schemas/PropertyPostalCode'
        phoneNumber:
          $ref: '#/components/schemas/customer-delivery-address_PropertyPhoneNumber'
        deliveryInstructions:
          $ref: '#/components/schemas/PropertyDeliveryInstructions'
        nickname:
          $ref: '#/components/schemas/PropertyNickname'
        isDefault:
          description: >-
            If this value is set to true, then the previously default delivery
            address on this customer's account will no longer be default.
          type: boolean
    ResponseCustomerCreateDeliveryAddress:
      type: object
      required:
        - deliveryAddress
      properties:
        deliveryAddress:
          $ref: '#/components/schemas/CustomerDeliveryAddress'
    RequestCustomerUpdateDeliveryAddress:
      type: object
      properties:
        line1:
          $ref: '#/components/schemas/PropertyLine1'
        line2:
          $ref: '#/components/schemas/PropertyLine2'
        city:
          $ref: '#/components/schemas/PropertyCity'
        state:
          $ref: '#/components/schemas/PropertyState'
        postalCode:
          $ref: '#/components/schemas/PropertyPostalCode'
        phoneNumber:
          $ref: '#/components/schemas/customer-delivery-address_PropertyPhoneNumber'
        deliveryInstructions:
          $ref: '#/components/schemas/PropertyDeliveryInstructions'
        nickname:
          $ref: '#/components/schemas/PropertyNickname'
        isDefault:
          description: >-
            If this value is set to true, then the previously default delivery
            address on this customer's account will no longer be default.
          type: boolean
    ResponseCustomerUpdateDeliveryAddress:
      type: object
      required:
        - deliveryAddress
      properties:
        deliveryAddress:
          $ref: '#/components/schemas/CustomerDeliveryAddress'
    CardSchemeId:
      type: integer
      format: int32
      description: |
        Card brand:
          * `0` - Other
          * `1` - Visa
          * `2` - MasterCard
          * `3` - Maestro
          * `4` - AmEx
          * `5` - JCB
          * `6` - Diners
          * `7` - Discover
          * `12` - ChinaUnionPay
          * `1240` - Debit
          * `1241` - Interac
          * `10001` - SquareGiftCard
          * `10002` - SquareEftPos
          * `67101` - TCC
          * `67102` - LevelUpDiscount
          * `67103` - LevelUpGiftCard
          * `67104` - LevelUpCreditCard
          * `67105` - Givex
          * `67106` - Atrium
          * `67107` - Archer
          * `67108` - PinataStoredValue
          * `67109` - Valutec
          * `67110` - PaytronixGiftCard
          * `67111` - OLOGiftCard
          * `67112` - WorldpayGiftCard
          * `67113` - FreedomPayGiftCard
          * `67114` - EigenGiftCard
          * `67115` - ChoptDiscount
          * `67116` - ChoptGiftCard
          * `67117` - ChoptCreditCard
    customer-payment-method_PropertyNickname:
      type: string
      description: The nickname for the saved payment method
    CustomerPaymentMethod:
      type: object
      required:
        - _id
        - last4
        - expirationMonth
        - expirationYear
        - cardSchemeId
      properties:
        _id:
          type: string
          description: ID of the object
        last4:
          type: string
          description: Last 4 digits of the card on file
        expirationMonth:
          type: integer
          minimum: 0
          maximum: 12
        expirationYear:
          type: integer
          minimum: 20
          maximum: 50
        postalCode:
          type: string
          description: The postal code of the card's billing address.
        cardSchemeId:
          $ref: '#/components/schemas/CardSchemeId'
        nickname:
          $ref: '#/components/schemas/customer-payment-method_PropertyNickname'
        isDefault:
          $ref: '#/components/schemas/PropertyIsDefault'
    ResponseCustomerGetPaymentMethods:
      type: object
      required:
        - paymentMethods
      properties:
        paymentMethods:
          type: array
          items:
            $ref: '#/components/schemas/CustomerPaymentMethod'
    RequestCustomerUpdatePaymentMethod:
      type: object
      properties:
        nickname:
          $ref: '#/components/schemas/customer-payment-method_PropertyNickname'
        isDefault:
          description: >-
            If this value is set to true, then the previously default payment
            method on this customer's account will no longer be default.
          type: boolean
    ResponseCustomerUpdatePaymentMethod:
      type: object
      required:
        - paymentMethod
      properties:
        paymentMethod:
          $ref: '#/components/schemas/CustomerPaymentMethod'
    CustomerFavorites:
      type: object
      required:
        - _id
        - customerId
        - orgId
        - locationId
        - orderedItems
      properties:
        _id:
          type: string
          description: ID of the object
        customerId:
          type: string
          description: The ID of the customer that owns these favorite items.
        orgId:
          type: string
          description: The org ID at which these items were ordered.
        locationId:
          type: string
          description: The location ID at which these items were ordered.
        orderedItems:
          type: array
          items:
            $ref: '#/components/schemas/OrderedItem'
          description: >-
            Up to 5 items that the customer has designated as their favorites
            for a specific location.
    CustomerFavoritesWithLocation:
      allOf:
        - $ref: '#/components/schemas/CustomerFavorites'
        - type: object
          required:
            - location
          properties:
            location:
              $ref: '#/components/schemas/StoreInfo'
    ResponseCustomerGetFavorites:
      type: object
      required:
        - favorites
      properties:
        favorites:
          type: array
          items:
            $ref: '#/components/schemas/CustomerFavoritesWithLocation'
    RequestCustomerSaveFavorite:
      type: object
      required:
        - locationId
        - orderedItem
      properties:
        locationId:
          type: string
          description: The location ID at this item was ordered.
        orderedItem:
          description: The ordered item to save as a favorite.
          $ref: '#/components/schemas/OrderedItem'
    ResponseCustomerSaveFavorite:
      type: object
      required:
        - favorite
      properties:
        favorite:
          $ref: '#/components/schemas/CustomerFavoritesWithLocation'
    RequestCustomerDeleteFavorite:
      type: object
      required:
        - orderedItemId
      properties:
        orderedItemId:
          type: string
          description: >-
            ID of the ordered item to remove from the favorite list at the
            specified location.
    ResponseCustomerDeleteFavorite:
      type: object
      required:
        - favorite
      properties:
        favorite:
          $ref: '#/components/schemas/CustomerFavoritesWithLocation'
    RequestCustomerCreatePushToken:
      type: object
      required:
        - token
        - notificationService
        - urlScheme
      properties:
        token:
          description: >
            A unique token that can be used to send a push notification to the
            customer's mobile app.

            This token has to valid for given notification service that it's
            meant to be used with.

            iOS tokens must be only contain 64 hexadecimal characters.

            Android tokens can only contain alpha-numeric characters along with
            the following special characters: `-_:`.
          type: string
        notificationService:
          description: >-
            The service that has to be used to send a push notification to the
            customer's mobile app.
          type: string
          enum:
            - Android
            - iOS
        urlScheme:
          description: >-
            The custom url scheme that the customer's mobile app registered with
            the OS.
          type: string
    PropertySiteId:
      type: string
      description: Site ID that the location belongs to.
    PropertyOrgId:
      type: string
      description: Org ID that the location belongs to.
    PropertyOrgName:
      type: string
      description: Name of the org that the location belongs to.
    location_PropertyState:
      type: integer
      minimum: 0
      maximum: 1
      description: |
        The State of the location in Bite Admin:
          * `0` Draft - Location should be closed to customers. Allows for configuring the location.
          * `1` Live - Location should be open to customers. Does not allow drastic configuration changes.
    PropertyTimezone:
      type: string
      description: |
        The timezone of the location.
        ex: America/New_York
    ResponseLocationsGetAll:
      type: object
      properties:
        success:
          type: boolean
        data:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/StoreInfo'
              - type: object
                required:
                  - siteId
                  - orgId
                  - orgName
                  - orderChannel
                  - state
                  - timezone
                properties:
                  siteId:
                    $ref: '#/components/schemas/PropertySiteId'
                  orgId:
                    $ref: '#/components/schemas/PropertyOrgId'
                  orgName:
                    $ref: '#/components/schemas/PropertyOrgName'
                  orderChannel:
                    $ref: '#/components/schemas/OrderChannel'
                  state:
                    $ref: '#/components/schemas/location_PropertyState'
                  timezone:
                    $ref: '#/components/schemas/PropertyTimezone'
    ResponseLocationsSearch:
      type: object
      required:
        - locations
      properties:
        locations:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/StoreInfo'
              - type: object
                required:
                  - distanceFromGuest
                properties:
                  distanceFromGuest:
                    description: >-
                      Distance from the address or coordinates provided by the
                      guest (measured in miles).
                    type: integer
                    format: int32
    ResponseLocationsGetFutureOrderSlots:
      type: object
      required:
        - futureOrderSlots
      properties:
        futureOrderSlots:
          description: >-
            A list of both available and unavailable future order slots grouped
            by day.
          type: array
          items:
            type: object
            required:
              - calendarDay
              - slots
            properties:
              calendarDay:
                description: The specific calendar day represented as 'YYYY-MM-DD'.
                type: string
              slots:
                description: >-
                  A list of both available and unavailable future order slots
                  for the specific calendar day.
                type: array
                minItems: 1
                items:
                  type: object
                  required:
                    - timestamp
                    - available
                  properties:
                    timestamp:
                      description: >-
                        ISO date string (with timezone offset) for the future
                        order time slot.
                      type: string
                    available:
                      description: >-
                        True if the future order time slot is available for
                        ordering; false otherwise.
                      type: boolean
    delivery-address_DeliveryAddress:
      type: object
      required:
        - line1
        - city
        - postalCode
      properties:
        line1:
          $ref: '#/components/schemas/PropertyLine1'
        line2:
          $ref: '#/components/schemas/PropertyLine2'
        city:
          $ref: '#/components/schemas/PropertyCity'
        state:
          $ref: '#/components/schemas/PropertyState'
        postalCode:
          $ref: '#/components/schemas/PropertyPostalCode'
    RequestLocationsValidateDeliveryAddress:
      type: object
      required:
        - fulfillmentMethod
        - address
      properties:
        fulfillmentMethod:
          $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
        address:
          $ref: '#/components/schemas/delivery-address_DeliveryAddress'
    ResponseLocationsValidateDeliveryAddress:
      type: object
      required:
        - canDeliver
      properties:
        canDeliver:
          description: >-
            True if the specified address is within the delivery range of the
            location; false otherwise.
          type: boolean
    OutpostId:
      description: >
        If this is an outpost pickup order, then `outpostId` is required.

        The ID of the outpost that this order should be delivered to for the
        guest to pick up.
      type: string
    Minimal:
      type: object
      required:
        - _id
        - name
        - orgName
        - siteId
        - orderChannel
      properties:
        _id:
          $ref: '#/components/schemas/PropertyId'
        name:
          $ref: '#/components/schemas/PropertyName'
        orgName:
          $ref: '#/components/schemas/PropertyOrgName'
        siteId:
          $ref: '#/components/schemas/PropertySiteId'
        orderChannel:
          $ref: '#/components/schemas/OrderChannel'
    CurrencyCode:
      type: string
      enum:
        - USD
        - CAD
    OpeningHoursForFulfillmentMethodProperty:
      description: Opening hours for a given fulfillment method.
      type: object
      required:
        - fulfillmentMethod
        - openingHours
      properties:
        fulfillmentMethod:
          $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
        openingHours:
          description: >-
            Opening hours for this dining option, broken down by day of the
            week.
          type: object
          properties:
            mon:
              $ref: '#/components/schemas/LocationOpenHoursSchedule'
            tue:
              $ref: '#/components/schemas/LocationOpenHoursSchedule'
            wed:
              $ref: '#/components/schemas/LocationOpenHoursSchedule'
            thu:
              $ref: '#/components/schemas/LocationOpenHoursSchedule'
            fri:
              $ref: '#/components/schemas/LocationOpenHoursSchedule'
            sat:
              $ref: '#/components/schemas/LocationOpenHoursSchedule'
            sun:
              $ref: '#/components/schemas/LocationOpenHoursSchedule'
    PropertyTipsLevel:
      type: integer
      format: int32
      description: |
        Tips Level:
          * `0` - No tips
          * `1` - Tipping is enabled
          * `2` - Tipping is enabled - always prompt
    PropertyDefaultTip:
      description: A tip descriptor that will be applied by default to any new order.
      type: object
      required:
        - amount
        - type
      properties:
        amount:
          type: integer
          format: int32
          description: >-
            If type is percentage, this is the percentage to tip. If type is
            fixed, this is the amount to tip in cents.
        type:
          type: string
          description: The type of tip.
          enum:
            - percentage
            - fixed
    PropertyPresetTips:
      description: A list of tipping options to be presented to the guest.
      type: array
      minLength: 1
      items:
        type: object
        required:
          - amount
          - type
        properties:
          amount:
            type: integer
            format: int32
            description: >-
              If type is percentage, this is the percentage to tip. If type is
              fixed, this is the amount to tip in cents.
          type:
            type: string
            description: The type of tip.
            enum:
              - percentage
              - fixed
    Location:
      allOf:
        - $ref: '#/components/schemas/Minimal'
        - type: object
          required:
            - orgId
            - state
            - shortCode
            - timezone
            - currencyCode
            - supportedLanguages
            - activeFulfillmentMethods
            - openingHoursByFulfillmentMethod
            - diningOptions
            - tipsLevel
            - presetTips
          properties:
            orgId:
              $ref: '#/components/schemas/PropertyOrgId'
            state:
              $ref: '#/components/schemas/location_PropertyState'
            shortCode:
              $ref: '#/components/schemas/PropertyShortCode'
            phoneNumber:
              $ref: '#/components/schemas/location_PropertyPhoneNumber'
            coordinates:
              $ref: '#/components/schemas/PropertyCoordinates'
            fullAddress:
              $ref: '#/components/schemas/PropertyFullAddress'
            timezone:
              $ref: '#/components/schemas/PropertyTimezone'
            currencyCode:
              $ref: '#/components/schemas/CurrencyCode'
            supportedLanguages:
              type: array
              items:
                $ref: '#/components/schemas/LanguageCode'
            activeFulfillmentMethods:
              type: array
              items:
                $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
            openingHoursByFulfillmentMethod:
              type: array
              items:
                $ref: '#/components/schemas/OpeningHoursForFulfillmentMethodProperty'
            allowPayAtCashier:
              type: boolean
            tipsLevel:
              $ref: '#/components/schemas/PropertyTipsLevel'
            defaultTip?:
              $ref: '#/components/schemas/PropertyDefaultTip'
            presetTips:
              $ref: '#/components/schemas/PropertyPresetTips'
            diningOptions:
              type: array
              minLength: 1
              items:
                type: object
                required:
                  - fulfillmentMethod
                  - asapOrdersEnabled
                  - futureOrdersEnabled
                properties:
                  fulfillmentMethod:
                    $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
                  asapOrdersEnabled:
                    description: >-
                      True if ASAP orders can be placed at this location with
                      this fulfillment method; false otherwise. If this is
                      false, then `futureOrdersEnabled` has to be true.
                    type: boolean
                  futureOrdersEnabled:
                    description: >-
                      True if future orders can be placed at this location with
                      this fulfillment method; false otherwise. If this is
                      false, then `asapOrdersEnabled` has to be true.
                    type: boolean
    Appearance:
      type: object
      required:
        - menuPageBackgroundImage
        - priceStyle
        - showCurrencySymbol
      properties:
        menuPageBackgroundImage:
          type: array
          items:
            $ref: '#/components/schemas/Image'
        titleBarImage:
          type: array
          items:
            $ref: '#/components/schemas/Image'
        rewardsProgramLogo:
          type: array
          items:
            $ref: '#/components/schemas/Image'
        priceStyle:
          type: integer
          format: int32
          description: |
            Menu Price Style:
              * `0` - Default ($7, $7.50, $7.99)
              * `1` - One Digit ($7, $7.5, $7.99)
              * `2` - Two Digits ($7.00, $7.50, $7.99)
        showCurrencySymbol:
          type: boolean
    MenuPage:
      description: Either `pages` or `sectionIds` (but not both) will always be provided.
      type: object
      required:
        - _id
        - name
      properties:
        _id:
          type: string
        name:
          type: string
        pages:
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/MenuPage'
        sectionIds:
          description: >-
            A list of ids that reference menu sections that are returned in the
            `menuSections` property of the response.
          type: array
          minLength: 1
          items:
            type: string
    MenuStructure:
      type: object
      required:
        - _id
        - pages
      properties:
        _id:
          type: string
        pages:
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/MenuPage'
    MenuSection:
      type: object
      required:
        - _id
        - name
        - items
      properties:
        _id:
          type: string
        name:
          type: string
        description:
          type: string
        hideFromMenu:
          description: >-
            This might be set to true if none of the menu items in the section
            should be shown on the menu but they could still be ordered (e.g. by
            being scanned or recommended).
          type: boolean
        items:
          description: >-
            A list of ids that reference menu items that are returned in the
            `menuItems` property of the response.
          type: array
          minLength: 1
          items:
            type: object
            required:
              - _id
            properties:
              _id:
                type: string
    SaleUnit:
      type: integer
      format: int32
      description: |
        Sale unit:
          * `0` - single unit
          * `2` - pounds
          * `3` - ounces
    MenuItem:
      type: object
      required:
        - _id
        - name
        - priceOptions
      properties:
        _id:
          type: string
        name:
          type: string
        description:
          type: string
        priceOptions:
          description: >-
            Price options can represent different sizes or flavors of the same
            menu item.
          type: array
          minLength: 1
          items:
            type: object
            required:
              - _id
              - price
            properties:
              _id:
                type: string
              name:
                type: string
              price:
                description: >-
                  Price of one unit of the menu item (in cents). If `saleUnit`
                  is not provided, then the price is for one item.
                type: integer
                format: int32
              barcode:
                description: Comma separated SKUs/PLUs of the item.
                type: string
              saleUnit:
                $ref: '#/components/schemas/SaleUnit'
              modGroupIds:
                description: >-
                  A list of ids that reference modifier groups that are returned
                  in the `modGroups` property of the response.
                type: array
                minLength: 1
                items:
                  type: string
    ModGroup:
      type: object
      required:
        - _id
        - name
        - items
      properties:
        _id:
          type: string
        name:
          type: string
        description:
          type: string
        minSelectable:
          description: >-
            Minimum number of unique modifiers that must be selected from this
            mod group.
          type: integer
          format: int32
          minimum: 0
        maxSelectable:
          description: >-
            Maximum number of unique modifiers that may be selected from this
            mod group. If this value is 0, then there's no limit.
          type: integer
          format: int32
          minimum: 0
        allowMultipleOfSameMod:
          description: >-
            Whether or not this mod group supports modifiers with quantities
            greater than 1. Please note that this field determines the relevancy
            of the other quantity fields listed below.
          type: boolean
        minAggregateQuantity:
          description: >-
            Minimum aggregate quantity of all selected modifiers from this mod
            group.
          type: integer
          format: int32
          minimum: 0
        maxAggregateQuantity:
          description: >-
            Maximum aggregate quantity of all selected modifiers from this mod
            group. If this value is 0, then there's no limit.
          type: integer
          format: int32
          minimum: 0
        minChoiceQuantity:
          description: Minimum quantity for modifiers within this mod group.
          type: integer
          format: int32
          minimum: 0
        maxChoiceQuantity:
          description: Maximum quantity for modifiers within this mod group.
          type: integer
          format: int32
          minimum: 0
        choiceQuantityIncrement:
          description: >-
            Quantity increment for modifiers in this mod group. For example, if
            a mod group has a `choiceQuantityIncrement` of 2, mod quantities can
            only be selected in multiples of 2 (2, 4, 6, etc).
          type: integer
          format: int32
          minimum: 0
        parentModGroupId:
          type: string
        items:
          description: >-
            A list of objects that reference modifiers that are returned in the
            `modifiers` property of the response.
          type: array
          minLength: 1
          items:
            type: object
            required:
              - _id
            properties:
              _id:
                description: Id of the mod
                type: string
              name:
                description: >-
                  If provided, then the mod should have this name when presented
                  as part of this mod group.
                type: string
              selectedByDefaultQuantity:
                description: >-
                  If it exists and is greater than 0, then this mod is
                  automatically preselected with the set quantity in this mod
                  group without any action from the user. This is a purely
                  UI-flag and the Bite platform will not assume this modifier
                  was selected if it wasn't specified as part of the order
                  payload.
                type: boolean
              maxChoiceQuantity:
                description: >-
                  If it exists, then this is the maximum quantity of this mod
                  that can be ordered as part of this mod group.
                type: boolean
              price:
                description: >-
                  If provided, then this mod should have this price when
                  presented as part of this mod group.
                type: boolean
              initialSelectionQuantity:
                description: >-
                  If it exists and is greater than 0, then when this mod is
                  selected by a guest, it will be set to the set quantity. This
                  is a purely UI-flag and the Bite platform will not assume this
                  modifier was selected if it wasn't specified as part of the
                  order payload.
                type: boolean
    Mod:
      type: object
      required:
        - _id
        - name
        - priceOptions
      properties:
        _id:
          type: string
        name:
          type: string
        description:
          type: string
        priceOptions:
          description: >-
            Price options can represent different sizes or flavors of the same
            menu item.
          type: array
          minLength: 1
          items:
            type: object
            required:
              - _id
              - price
            properties:
              _id:
                type: string
              name:
                type: string
              price:
                description: >-
                  Price of one unit of the modifier (in cents). If `saleUnit` is
                  not provided, then the price is for one item.
                type: integer
                format: int32
              barcode:
                description: Comma separated SKUs/PLUs of the item.
                type: string
              saleUnit:
                $ref: '#/components/schemas/SaleUnit'
              modGroupIds:
                description: >-
                  A list of ids that reference modifier groups that are returned
                  in the `modGroups` property of the response.
                type: array
                minLength: 1
                items:
                  type: string
    ResponseGetMenu:
      type: object
      required:
        - location
        - appearance
        - menuStructure
        - menuSections
        - menuItems
        - modGroups
      properties:
        location:
          $ref: '#/components/schemas/Location'
        appearance:
          $ref: '#/components/schemas/Appearance'
        menuStructure:
          $ref: '#/components/schemas/MenuStructure'
        menuSections:
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/MenuSection'
        menuItems:
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/MenuItem'
        modGroups:
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/ModGroup'
        mods:
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/Mod'
    DateRange:
      type: object
      required:
        - from
        - to
      properties:
        from:
          description: Unix timestamp for the start of the date range.
          type: integer
          format: int64
        to:
          description: Unix timestamp for the end of the date range.
          type: integer
          format: int64
    Weekday:
      type: string
      enum:
        - mon
        - tue
        - wed
        - thu
        - fri
        - sat
        - sun
      description: Denotes the day of the week.
    Schedule:
      type: object
      required:
        - from
        - to
      properties:
        from:
          $ref: '#/components/schemas/ScheduleBoundary'
        to:
          $ref: '#/components/schemas/ScheduleBoundary'
    DaySchedule:
      type: object
      required:
        - weekday
        - schedules
      properties:
        weekday:
          $ref: '#/components/schemas/Weekday'
        schedules:
          description: A list of time ranges for this day in hours and minutes
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/Schedule'
    HomeScreenImage:
      type: object
      required:
        - image
      properties:
        image:
          description: Home screen image
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/Image'
        availability:
          description: Details about when this image should be displayed
          type: object
          properties:
            dateRanges:
              description: >-
                If specified, then this image can only be shown during one of
                the listed date ranges. If no date ranges are listed, then the
                image can be shown at all dates.
              type: array
              items:
                $ref: '#/components/schemas/DateRange'
            daySchedules:
              description: >-
                If specified, then this image can only be shown during one of
                the listed day schedules (on a specific day, between specific
                hours).
              type: array
              items:
                $ref: '#/components/schemas/DaySchedule'
    Link:
      type: object
      required:
        - title
        - url
      properties:
        title:
          description: Link title
          type: string
        url:
          description: Link URL
          type: string
        target:
          description: |
            Describes how the url should be opened:
              * `external-browser` - In the user's default browser on their phone (e.g. open a 3rd party catering website)
              * `internal-browser` - In an in-app webview  (e.g. for terms of service or nutritional info)
              * `share-dialog` - In a share dialog
          type: string
          enum:
            - external-browser
            - internal-browser
            - share-dialog
    ResponseMobileAppConfigGet:
      type: object
      required:
        - orgId
        - orderChannels
        - fulfillmentMethods
      properties:
        orgId:
          type: string
          description: Org ID that this mobile app will use.
        orderChannels:
          description: >-
            The order channels that the mobile app could place orders for.
            Currently limited to `web`.
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/OrderChannel'
        fulfillmentMethods:
          description: >-
            The fulfillment methods that the mobile app should offer to the
            user.
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/fulfillment-method_FulfillmentMethod'
        homeScreenImages:
          description: A list of images to be shown on the home screen of the mobile app.
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/HomeScreenImage'
        contactUsInfo:
          description: >-
            Contact information that can be used to contact the brand about any
            issues with the ordering experience.
          type: object
          required:
            - email
            - phoneNumber
          properties:
            email:
              type: string
            phoneNumber:
              description: >-
                Must be a valid phone number under the North American Numbering
                Plan. Must be formatted as a string of 10 digits.
              type: string
        sidebarLinks:
          description: >-
            A list of links to display in the sidebar of the app (e.g. Privacy
            Policy, Terms of Service).
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/Link'
        policyLinks:
          description: >-
            A list of policy links to display within the app (e.g. Privacy
            Policy, Terms of Service).
          type: array
          minLength: 1
          items:
            $ref: '#/components/schemas/Link'
        socialMediaLinks:
          description: >-
            A list of links to the brand's social media accounts to display
            within the app (e.g. Twitter, IG).
          type: array
          minLength: 1
          items:
            type: object
            required:
              - title
              - icon
              - url
            properties:
              title:
                description: Link title
                type: string
              icon:
                description: Link icon
                type: array
                minLength: 1
                items:
                  $ref: '#/components/schemas/Image'
              url:
                description: Link URL
                type: string
    RequestOrderedPriceOption:
      description: The price option of the menu item that was ordered.
      type: object
      required:
        - _id
        - quantity
      properties:
        _id:
          $ref: '#/components/schemas/OrderedPriceOptionId'
        name:
          $ref: '#/components/schemas/OrderedPriceOptionName'
        quantity:
          $ref: '#/components/schemas/OrderedPriceOptionQuantity'
        weight:
          $ref: '#/components/schemas/OrderedPriceOptionWeight'
        modGroups:
          description: Mod groups that were ordered with the item.
          type: array
          minLength: 1
          items:
            description: >-
              An ordered mod group must have at least one item or deselected
              item.
            type: object
            required:
              - _id
              - name
            properties:
              _id:
                type: string
              name:
                type: string
              parentModGroupId:
                description: >-
                  Must be provided if the mod group had this property from the
                  menu response.
                type: string
              items:
                description: A list of modifiers that were selected in this mod group.
                type: array
                minLength: 1
                items:
                  $ref: '#/components/schemas/RequestOrderedMod'
              deselectedItems:
                description: >-
                  A list of pre-selected modifiers that were deselected in this
                  mod group.
                type: array
                minLength: 1
                items:
                  $ref: '#/components/schemas/RequestOrderedMod'
    RequestOrderedMod:
      type: object
      required:
        - _id
        - name
        - priceOption
      properties:
        _id:
          type: string
        name:
          type: string
        priceOption:
          $ref: '#/components/schemas/RequestOrderedPriceOption'
    LoyaltyAuthEntryMethod:
      type: string
      description: >
        How the information connecting a guest to their loyalty account was
        collected.
      enum:
        - barcode-scanned
        - card-number-manually-entered
        - email-manually-entered
        - email-and-password-manually-entered
        - email-and-phone-number-manually-entered
        - email-and-phone-number-provided-externally
        - phone-number-manually-entered
        - phone-number-provided-externally
        - redemption-code-manually-entered
        - unknown-manually-entered
        - username-and-password-manually-entered
    LoyaltyAuthData:
      description: >
        Each of the properties below is required by different loyalty
        integrations that Bite has.

        The exact value of this object will be provided in the response from the
        /v2/orders/loyalty/auth endpoint.
      type: object
      properties:
        authToken:
          type: string
        authEntryMethod:
          $ref: '#/components/schemas/LoyaltyAuthEntryMethod'
        tokenData:
          type: string
        tokenDataEntryMethod:
          $ref: '#/components/schemas/LoyaltyAuthEntryMethod'
        redemptionCode:
          type: string
        redemptionCodeEntryMethod:
          $ref: '#/components/schemas/LoyaltyAuthEntryMethod'
        customerId:
          type: string
        firstName:
          type: string
        lastName:
          type: string
    RequestOrderCreate:
      type: object
      required:
        - order
      properties:
        order:
          type: object
          required:
            - clientId
            - startedAt
            - sessionDuration
            - fulfillmentMethod
            - menuStructureId
            - subTotal
            - orderedItems
          properties:
            clientId:
              $ref: '#/components/schemas/ClientId'
            startedAt:
              $ref: '#/components/schemas/StartedAt'
            sessionDuration:
              $ref: '#/components/schemas/SessionDuration'
            menuStructureId:
              $ref: '#/components/schemas/MenuStructureId'
            selectedLanguage:
              $ref: '#/components/schemas/LanguageCode'
            customerId:
              $ref: '#/components/schemas/CustomerId'
            guestId:
              $ref: '#/components/schemas/GuestId'
            userDidRejectConsent:
              $ref: '#/components/schemas/UserDidRejectConsent'
            subTotal:
              $ref: '#/components/schemas/SubTotal'
            fulfillmentMethod:
              $ref: '#/components/schemas/FulfillmentMethod'
            pickupAt:
              $ref: '#/components/schemas/PickupAt'
            deliveryAddress:
              $ref: '#/components/schemas/DeliveryAddress'
            deliveryInstructions:
              $ref: '#/components/schemas/DeliveryInstructions'
            guestName:
              $ref: '#/components/schemas/GuestName'
            guestPhoneNumber:
              $ref: '#/components/schemas/GuestPhoneNumber'
            guestEmail:
              $ref: '#/components/schemas/GuestEmail'
            guestConsentedToMarketing:
              $ref: '#/components/schemas/GuestConsentedToMarketing'
            guestVehicle:
              $ref: '#/components/schemas/GuestVehicle'
            tableNumber:
              $ref: '#/components/schemas/TableNumber'
            outpostId:
              $ref: '#/components/schemas/OutpostId'
            includeUtensils:
              $ref: '#/components/schemas/IncludeUtensils'
            paymentDestination:
              $ref: '#/components/schemas/OrderPaymentDestination'
            orderedItems:
              type: array
              minLength: 1
              items:
                type: object
                required:
                  - _id
                  - name
                  - section
                  - priceOption
                properties:
                  _id:
                    $ref: '#/components/schemas/OrderedItemId'
                  name:
                    $ref: '#/components/schemas/OrderedItemName'
                  vendor:
                    $ref: '#/components/schemas/OrderedItemVendor'
                  scannedBarcode:
                    $ref: '#/components/schemas/OrderedItemScannedBarcode'
                  section:
                    $ref: '#/components/schemas/OrderedItemMenuSection'
                  specialRequest:
                    $ref: '#/components/schemas/OrderedItemSpecialRequest'
                  upsellScreen:
                    $ref: '#/components/schemas/OrderedItemUpsellScreen'
                  priceOption:
                    $ref: '#/components/schemas/RequestOrderedPriceOption'
        loyaltyAuthData:
          $ref: '#/components/schemas/LoyaltyAuthData'
    ResponseOrder:
      type: object
      required:
        - order
      properties:
        order:
          $ref: '#/components/schemas/Order'
    Transaction:
      type: object
      required:
        - _id
        - clientId
        - orgId
        - locationId
        - createdAt
        - orderId
        - clientOrderId
        - amount
      properties:
        _id:
          description: ID of the transaction (created on Bite)
          type: string
        clientId:
          description: ID of the transaction (provided by the client)
          type: string
        orgId:
          $ref: '#/components/schemas/OrgId'
        locationId:
          $ref: '#/components/schemas/LocationId'
        createdAt:
          description: The Unix timestamp for when the transaction was placed.
          type: integer
          format: int64
        orderId:
          description: The ID of the order that this transaction covers.
          type: string
        clientOrderId:
          description: The `clientId` property of the order that this transaction covers.
          type: string
        amount:
          type: integer
          format: int32
          minimum: 0
    ResponseGetOrder:
      type: object
      required:
        - order
        - orderState
        - possibleSuccessfulOrderStates
        - location
        - transactions
        - successfulTransactions
      properties:
        order:
          $ref: '#/components/schemas/Order'
        orderState:
          description: Current state of this order
          type: string
          enum:
            - unsent
            - sending-to-pos
            - sent-to-pos
            - in-progress
            - completed
            - cancelled
            - delivery-in-progress
            - delivered
        possibleSuccessfulOrderStates:
          description: >
            All the possible successful states this order could have. For
            example, each order needs to be sent to the POS, but only delivery
            orders need to end up at the delivered state.
          type: array
          minItems: 1
          items:
            type: string
            enum:
              - sending-to-pos
              - sent-to-pos
              - in-progress
              - completed
              - delivery-in-progress
              - delivered
        location:
          $ref: '#/components/schemas/StoreInfo'
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/Transaction'
        successfulTransactions:
          type: array
          items:
            $ref: '#/components/schemas/Transaction'
    RequestOrderPut:
      type: object
      required:
        - order
      properties:
        order:
          description: >-
            A list of fields that can be updated on the order after it's been
            created.
          type: object
          properties:
            guestName:
              $ref: '#/components/schemas/GuestName'
            guestPhoneNumber:
              $ref: '#/components/schemas/GuestPhoneNumber'
            guestEmail:
              $ref: '#/components/schemas/GuestEmail'
            guestConsentedToMarketing:
              $ref: '#/components/schemas/GuestConsentedToMarketing'
            deliveryInstructions:
              $ref: '#/components/schemas/DeliveryInstructions'
            guestVehicle:
              $ref: '#/components/schemas/GuestVehicle'
    ResponseOrderValidate:
      type: object
      required:
        - queuePath
      properties:
        queuePath:
          description: >
            This is the endpoint that needs to be polled to check on the status
            of the order after validation has been requested.
          type: string
    RequestOrderAddCoupon:
      type: object
      required:
        - couponCode
      properties:
        couponCode:
          type: string
    RequestOrderPutTip:
      type: object
      required:
        - order
      properties:
        order:
          type: object
          required:
            - tipTotal
          properties:
            tipTotal:
              $ref: '#/components/schemas/TipTotal'
    RequestOrderClose:
      type: object
      properties:
        loyaltyAuthData:
          $ref: '#/components/schemas/LoyaltyAuthData'
    ResponseOrderClose:
      type: object
      required:
        - order
        - successfulTransactions
      properties:
        order:
          $ref: '#/components/schemas/Order'
        successfulTransactions:
          type: array
          items:
            $ref: '#/components/schemas/Transaction'
        queuePath:
          description: >
            If provided, this is the endpoint that needs to be polled to check
            on the status of the order after it has been closed.

            The `queuePath` will be provided if this order is ready to be sent
            to the POS at close time (e.g. ASAP orders as opposed to future
            orders).
          type: string
    RequestOrderSendGuestReceipt:
      type: object
      required:
        - email
      properties:
        email:
          $ref: '#/components/schemas/PropertyEmail'
    OrderExternalSection:
      type: object
      description: |
        The section of the menu from which the item originated.
      required:
        - name
      properties:
        name:
          type: string
          description: |
            The name of the section.
        posId:
          type: string
          description: |
            ID of the section on the POS.
            Absent if section does not come from a POS.
    OrderExternalModGroup:
      type: object
      required:
        - name
        - mods
      properties:
        posId:
          type: string
          description: |
            ID of the mod group on the POS.
            Absent if mod group does not come from a POS.
        name:
          $ref: '#/components/schemas/OrderedModGroupName'
        mods:
          type: array
          description: Ordered mods of the mod group.
          items:
            $ref: '#/components/schemas/OrderExternalMod'
    OrderExternalMod:
      type: object
      required:
        - name
        - quantity
        - unitPrice
        - price
        - modGroups
      properties:
        posId:
          type: string
          description: |
            ID of the mod on the POS.
            Absent if mod does not come from a POS.
        name:
          $ref: '#/components/schemas/OrderedModName'
        price:
          $ref: '#/components/schemas/OrderedPriceOptionPrice'
        quantity:
          $ref: '#/components/schemas/OrderedPriceOptionQuantity'
        unitPrice:
          $ref: '#/components/schemas/OrderedPriceOptionUnitPrice'
        saleUnit:
          $ref: '#/components/schemas/OrderedPriceOptionSaleUnit'
        weight:
          $ref: '#/components/schemas/OrderedPriceOptionWeight'
        addToCartSource:
          type: string
          description: |
            A short description of how the mod was added to the cart.
            Only available if mod was selected through recommendations.
        modGroups:
          type: array
          description: Mod groups of the mod.
          items:
            $ref: '#/components/schemas/OrderExternalModGroup'
    OrderExternal:
      type: object
      required:
        - createTime
        - orgName
        - orgId
        - siteName
        - siteId
        - locationId
        - orderChannel
        - diningOption
        - source
        - orderId
        - checkIds
        - loyaltyCheckIds
        - isCancelled
        - orderNumber
        - subTotal
        - taxTotal
        - tipTotal
        - discountNames
        - discountTotal
        - total
        - refundedAmount
        - orderUrl
        - isTaxExempt
        - serviceChargeTotal
        - serviceCharges
        - guest
        - loyaltyIds
      properties:
        createTime:
          type: string
          description: The ISO time of order creation with timezone offset.
        orgName:
          type: string
          description: The name of the org at which the customer placed the order.
        orgId:
          $ref: '#/components/schemas/OrgId'
        siteName:
          type: string
          description: The name of the site at which the customer placed the order.
        siteId:
          type: string
          description: The ID of the site at which the customer placed the order.
        locationId:
          $ref: '#/components/schemas/LocationId'
        orderChannel:
          $ref: '#/components/schemas/OrderChannel'
        diningOption:
          type: string
          description: >-
            The name of the dining option with which the customer placed the
            order.
        source:
          type: string
          description: Whether the order was made from a kiosk, mobile, or desktop browser.
        orderId:
          type: string
          description: The Bite ID of the order.
        checkIds:
          type: array
          description: The IDs of the check from POS integrations.
          items:
            type: object
            required:
              - value
              - name
              - vendorName
            properties:
              value:
                type: string
                description: The check ID value.
              name:
                type: string
                description: |
                  The name of the check ID.
                  ex: posCheckId
              vendorName:
                type: string
                description: >
                  The name of the vendor from which the check ID originated.

                  If location is single-vendor or does not have a POS, defaults
                  to "Default Vendor".
        loyaltyCheckIds:
          type: string
          description: >
            The IDs of the loyalty check from loyalty integrations (if any).

            Absent if loyalty doesn't exist or order was not checked into
            loyalty.
        isCancelled:
          type: boolean
          description: Indicates if the order was cancelled after it was closed.
        orderNumber:
          type: string
          description: Sequential client ID that loops around.
        items:
          type: array
          description: Items of the order.
          minLength: 1
          items:
            type: object
            required:
              - vendorName
              - name
              - price
              - modGroups
              - quantity
              - unitPrice
              - addToCartSource
              - section
            properties:
              specialRequest:
                $ref: '#/components/schemas/OrderedItemSpecialRequest'
              vendorName:
                type: string
                description: >
                  The name of the vendor from which the item originated.

                  If location is single-vendor or does not have a POS, defaults
                  to "Default Vendor".
              scannedBarcode:
                $ref: '#/components/schemas/OrderedItemScannedBarcode'
              posId:
                type: string
                description: |
                  ID of the item on the POS.
                  Absent if item does not come from a POS.
              name:
                $ref: '#/components/schemas/OrderedItemName'
              price:
                $ref: '#/components/schemas/OrderedPriceOptionPrice'
              quantity:
                $ref: '#/components/schemas/OrderedPriceOptionQuantity'
              unitPrice:
                $ref: '#/components/schemas/OrderedPriceOptionUnitPrice'
              saleUnit:
                $ref: '#/components/schemas/OrderedPriceOptionSaleUnit'
              addToCartSource:
                type: string
                description: |
                  A short description of how the item was added to the cart.
              weight:
                $ref: '#/components/schemas/OrderedPriceOptionWeight'
              section:
                $ref: '#/components/schemas/OrderExternalSection'
              modGroups:
                type: array
                description: Mod groups of the item.
                items:
                  $ref: '#/components/schemas/OrderExternalModGroup'
        subTotal:
          $ref: '#/components/schemas/SubTotal'
        taxTotal:
          $ref: '#/components/schemas/TaxTotal'
        tipTotal:
          $ref: '#/components/schemas/TipTotal'
        discountNames:
          type: array
          description: Names of the discounts applied to the order.
          items:
            type: string
        discountTotal:
          $ref: '#/components/schemas/DiscountTotal'
        total:
          $ref: '#/components/schemas/Total'
        refundedAmount:
          type: integer
          format: int32
          description: Amount refunded from order in cents.
        transactions:
          type: array
          description: Transactions of the order.
          items:
            type: object
            required:
              - cardType
              - transactionType
              - amount
              - gateway
              - cardEntryMethod
            properties:
              cardType:
                type: string
                description: |
                  The type of the card used by the transaction.
                  ex: Visa, Gift Card
              transactionType:
                type: string
                description: The type of the transaction.
                enum:
                  - sale
                  - refund
              amount:
                type: integer
                format: int32
                description: The amount of the transaction in cents.
              lastFour:
                type: string
                description: |
                  Last four digits of card used in transaction.
                  Absent if a card was not used, such as by paying in cash.
              gateway:
                type: string
                description: |
                  The gateway used to process the transaction.
                  ex: Stripe, Worldpay
              cardEntryMethod:
                type: string
                description: |
                  The method used to used the card during the transaction.
                  ex: Swipe, Google Pay
        orderUrl:
          type: string
          description: A URL pointing to the Bite Admin entry of the order.
        futureOrderTime:
          type: string
          description: >
            The time the customer is expected to pickup an order, in ISO with
            timezone offset.

            Only available if the order is a future-order.
        outpostDeliveryLocation:
          type: string
          description: |
            The name of the outpost.
            Only available if the dining option is an Outpost dining option.
        deliveryAddress:
          $ref: '#/components/schemas/DeliveryAddress'
        tableNumber:
          $ref: '#/components/schemas/TableNumber'
        isTaxExempt:
          type: boolean
          description: Whether or not the order is tax exempt
        serviceChargeTotal:
          $ref: '#/components/schemas/ServiceChargeTotal'
        serviceCharges:
          $ref: '#/components/schemas/ServiceCharges'
        redeemedLoyaltyReward:
          type: boolean
          description: Whether or not the guest redeemed a loyalty reward for the order.
        guest:
          type: object
          description: Info about the guest who placed the order.
          required:
            - guestId
          properties:
            guestId:
              type: string
              description: Bite ID of the guest.
            name:
              type: string
              description: |
                Name of the guest.
                Only available if the Guest Name identifier was used.
            email:
              type: string
              format: email
              description: >
                Email of the guest.

                Only available if the guest requested the receipt to be emailed
                after placing their order or if it was provided during payment.
            phoneNumber:
              type: string
              description: |
                Phone Number of the guest.
                Only available if the Guest Vehicle identifier was used.
            vehicle:
              type: object
              description: |
                Info about the guest's vehicle.
                Only available if the Guest Vehicle identifier was used.
              required:
                - make
                - model
                - color
              properties:
                make:
                  type: string
                  description: Make of the guest's vehicle.
                model:
                  type: string
                  description: Model of the guest's vehicle.
                color:
                  type: string
                  description: Color of the guest's vehicle.
            satisfactionScore:
              type: integer
              format: int32
              description: |
                How satisfied the guest was with their experience.
                Only available if the guest completed the survey.
              minimum: 1
            satisfactionMaximum:
              type: integer
              format: int32
              description: |
                The maximum possible satisfaction score for the survey.
                Only available if the guest completed the survey.
              minimum: 1
            ageRange:
              type: string
              description: |
                An approximate age range of the guest.
                Only available if the guest used facial recognition.
                ex: 22 - 28
            gender:
              type: string
              enum:
                - M
                - F
              description: |
                A calculated guess as to the gender of the guest.
                Only available if the guest used facial recognition.
            consentedToMarketing:
              type: boolean
              description: >
                Whether the guest consented to marketing.

                Only present if the location os configured to ask the guest for
                consent.

                The guest may be asked while submitting their email address or
                phone number.
        selectedLanguage:
          type: string
          description: |
            The language the guest selected for their order.
            Only available if the guest selected a language.
        loyaltyIds:
          type: array
          description: >
            The IDs of the guest's loyalty account.

            If the array is empty, then the guest did not connect a loyalty
            account.

            There may be multiple entries if the guest used multiple methods of
            connecting to their account.
          items:
            type: object
            required:
              - value
              - entryMethod
            properties:
              value:
                type: string
                description: The loyalty ID value.
              entryMethod:
                $ref: '#/components/schemas/LoyaltyAuthEntryMethod'
    OrderExternalFirstParty:
      allOf:
        - $ref: '#/components/schemas/OrderExternal'
        - type: object
          required:
            - items
            - transactions
    ResponseReportingOrdersDay:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
        data:
          type: object
          required:
            - orders
          properties:
            orders:
              type: array
              items:
                $ref: '#/components/schemas/OrderExternalFirstParty'
            next:
              type: string
              description: |
                The path to the next page of results.
                Only present if there are more results to retrieve
              example: >-
                /api/v2/reporting/orders/day/2023-07-21?newerThan=654b3c2d537fd6b2dab2a2cc
    RequestReportingOrdersDayDeprecated:
      type: object
      required:
        - locationId
        - date
      properties:
        locationId:
          $ref: '#/components/schemas/PropertyId'
        date:
          type: string
          description: The date of the orders to retrieve in a YYYY-MM-DD format
          example: '2023-07-21'
        page:
          type: integer
          format: int32
          minimum: 0
          example: 1
        limit:
          type: integer
          format: int32
          minimum: 1
          maximum: 50
          example: 25
    ResponseReportingOrdersDayDeprecated:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
        data:
          type: array
          items:
            $ref: '#/components/schemas/OrderExternalFirstParty'
  responses:
    '400':
      description: >-
        A Bite error occurred. Please reference the response body's "code" value
        in the Bite Error Codes documentation.
    '401':
      description: Invalid API credentials.
    '403':
      description: API credentials don't have sufficient access to operation.
    '429':
      description: >-
        Too many requests within too short of a time frame. Refer to response
        headers.
    '500':
      description: >-
        An unexpected error occurred. Please verify that your request is
        correctly formatted.
