Restaurant365 OData Connector

The Restaurant365 OData connector exposes R365 data to OData-compatible reporting and BI tools through read-only views for companies, locations, GL accounts, items, job titles, employees, POS employees, labor detail, payroll summary, transactions, transaction detail, sales, and deleted entities. Most views support $filter, $orderby, $select, $skip, and $top. Sales views are limited to a 31-day date range per request and do not support $select or $count.

Documentation

Specifications

Examples

Schemas & Data

Other Resources

OpenAPI Specification

restaurant365-odata-connector-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Restaurant365 OData Connector
  description: >-
    The Restaurant365 OData connector exposes R365 data to OData-compatible
    reporting and business-intelligence tools through read-only views for
    companies, locations, GL accounts, items, employees, labor, transactions,
    and sales. Authentication uses Domain\Username (the company subdomain and
    R365 username) with the R365 password. Most views support the standard
    OData query options $filter, $orderby, $select, $skip, and $top. Sales views
    (SalesEmployee, SalesDetail, SalesPayment) do not support $select or $count
    and are limited to a 31-day date range per request.
  version: v2
  contact:
    name: Kin Lane
    email: [email protected]
  license:
    name: Proprietary
servers:
  - url: https://odata.restaurant365.net/api/v2/views
    description: Restaurant365 OData v2 views endpoint
tags:
  - name: Metadata
    description: OData service metadata
  - name: Reference Data
    description: Companies, locations, GL accounts, items, and job titles
  - name: Labor
    description: Employees, labor detail, payroll, and POS employees
  - name: Transactions
    description: Financial transactions and transaction detail
  - name: Sales
    description: Sales ticket headers, detail, and payments
  - name: Audit
    description: Deleted entity tracking
components:
  parameters:
    filter:
      name: $filter
      in: query
      required: false
      description: Boolean expression used to filter results
      schema:
        type: string
    orderby:
      name: $orderby
      in: query
      required: false
      description: Property to sort by; append desc for descending order
      schema:
        type: string
    select:
      name: $select
      in: query
      required: false
      description: Comma-separated list of properties to return
      schema:
        type: string
    skip:
      name: $skip
      in: query
      required: false
      description: Number of results to skip
      schema:
        type: integer
    top:
      name: $top
      in: query
      required: false
      description: Maximum number of results to return
      schema:
        type: integer
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: Domain\Username with R365 password
  schemas:
    Company:
      type: object
      properties:
        companyId: { type: string, format: uuid }
        name: { type: string }
        companyNumber: { type: string }
        comment: { type: string }
        createdBy: { type: string }
        createdOn: { type: string, format: date-time }
        modifiedBy: { type: string }
        modifiedOn: { type: string, format: date-time }
    Location:
      type: object
      properties:
        locationId: { type: string, format: uuid }
        name: { type: string }
        locationNumber: { type: string }
        legalEntityId: { type: string, format: uuid }
        legalEntityNumber: { type: string }
        legalEntityName: { type: string }
        attribute1Id: { type: string, format: uuid }
        attribute1Number: { type: string }
        attribute1Name: { type: string }
        attribute2Id: { type: string, format: uuid }
        attribute2Number: { type: string }
        attribute2Name: { type: string }
        createdBy: { type: string }
        createdOn: { type: string, format: date-time }
        modifiedBy: { type: string }
        modifiedOn: { type: string, format: date-time }
    GLAccount:
      type: object
      properties:
        glAccountId: { type: string, format: uuid }
        glAccountAutoId: { type: integer, format: int64 }
        locationNumber: { type: string }
        locationName: { type: string }
        locationId: { type: string, format: uuid }
        legalEntityNumber: { type: string }
        legalEntityName: { type: string }
        legalEntityId: { type: string, format: uuid }
        attribute1Number: { type: string }
        attribute1Name: { type: string }
        attribute1Id: { type: string, format: uuid }
        attribute2Number: { type: string }
        attribute2Name: { type: string }
        attribute2Id: { type: string, format: uuid }
        name: { type: string }
        glAccountNumber: { type: string }
        glTypeClass: { type: integer }
        glType: { type: string }
        operationalCategory: { type: string }
        createdBy: { type: string }
        createdOn: { type: string, format: date-time }
        modifiedBy: { type: string }
        modifiedOn: { type: string, format: date-time }
    Item:
      type: object
      properties:
        itemId: { type: string, format: uuid }
        name: { type: string }
        itemNumber: { type: string }
        category1: { type: string }
        category2: { type: string }
        category3: { type: string }
        createdBy: { type: string }
        createdOn: { type: string, format: date-time }
        modifiedBy: { type: string }
        modifiedOn: { type: string, format: date-time }
    JobTitle:
      type: object
      properties:
        jobTitleId: { type: string, format: uuid }
        name: { type: string }
        description: { type: string }
        jobCode: { type: string }
        payRate: { type: number }
        payRate_Base: { type: number }
        posid: { type: string }
        glAccount_Id: { type: string, format: uuid }
        location_Id: { type: string, format: uuid }
        rating: { type: integer }
        excludeFromSchedule: { type: boolean }
        excludeFromPOSImport: { type: boolean }
        createdBy: { type: string }
        createdOn: { type: string, format: date-time }
        modifiedBy: { type: string }
        modifiedOn: { type: string, format: date-time }
    Employee:
      type: object
      properties:
        employeeId: { type: string, format: uuid }
        fullName: { type: string }
        firstName: { type: string }
        middleName: { type: string }
        lastName: { type: string }
        address1: { type: string }
        address2: { type: string }
        city: { type: string }
        state: { type: string }
        zipCode: { type: string }
        email: { type: string, format: email }
        phoneNumber: { type: string }
        mobilePhone: { type: string }
        allowTextMessaging: { type: boolean }
        birthday: { type: string, format: date-time }
        birthdayDay: { type: integer }
        birthdayMonth: { type: integer }
        hireDate: { type: string, format: date-time }
        multipleLocations: { type: integer }
        payrollID: { type: string }
        posid: { type: string }
        employeeLink: { type: string, format: uuid }
        primaryLocation_id: { type: string, format: uuid }
        inactive: { type: boolean }
        createdBy: { type: string }
        createdOn: { type: string, format: date-time }
        modifiedBy: { type: string }
        modifiedOn: { type: string, format: date-time }
    POSEmployee:
      type: object
      properties:
        posEmployeeId: { type: string, format: uuid }
        fullName: { type: string }
        posid: { type: string }
        location_id: { type: string, format: uuid }
        employee_id: { type: string, format: uuid }
        createdBy: { type: string }
        createdOn: { type: string, format: date-time }
        modifiedBy: { type: string }
        modifiedOn: { type: string, format: date-time }
    LaborDetail:
      type: object
      properties:
        laborId: { type: string, format: uuid }
        labor: { type: string }
        dateWorked: { type: string, format: date-time }
        startTime: { type: string, format: date-time }
        endTime: { type: string, format: date-time }
        hours: { type: number }
        payRate: { type: number }
        payrate_Base: { type: number }
        payrollStatus: { type: integer }
        total: { type: number }
        total_Base: { type: number }
        employee_ID: { type: string, format: uuid }
        r365Employee_ID: { type: string, format: uuid }
        employeeJobTitle_ID: { type: string, format: uuid }
        jobTitle_ID: { type: string, format: uuid }
        location_ID: { type: string, format: uuid }
        cateringEvent: { type: string, format: uuid }
        tipDeclaredAmount: { type: number }
        employee: { type: string }
        payrollID: { type: string }
        jobTitle: { type: string }
        location: { type: string }
        dailySalesSummaryId: { type: string, format: uuid }
        createdBy: { type: string }
        createdOn: { type: string, format: date-time }
        modifiedBy: { type: string }
        modifiedOn: { type: string, format: date-time }
    PayrollSummary:
      type: object
      properties:
        employeeID: { type: string, format: uuid }
        payrollID: { type: string }
        location: { type: string }
        locationNumber: { type: string }
        jobCode: { type: string }
        payRate: { type: number }
        regularHours: { type: number }
        overtimeHours: { type: number }
        doubleOvertime: { type: number }
        breakPenalty: { type: number }
        grossReceipts: { type: number }
        splitShiftPenalty: { type: number }
        chargeTips: { type: number }
        declaredTips: { type: number }
        percentageOfSales: { type: number }
        percent: { type: number }
        payrollStart: { type: string, format: date-time }
        payrollEnd: { type: string, format: date-time }
    Transaction:
      type: object
      properties:
        transactionId: { type: string, format: uuid }
        locationId: { type: string, format: uuid }
        locationName: { type: string }
        date: { type: string, format: date-time }
        transactionNumber: { type: string }
        name: { type: string }
        type: { type: string }
        companyId: { type: string, format: uuid }
        rowVersion: { type: integer, format: int64 }
        isApproved: { type: boolean }
        isTemplate: { type: boolean }
        createdOn: { type: string, format: date-time }
        modifiedOn: { type: string, format: date-time }
        createdBy: { type: string }
        modifiedBy: { type: string }
    TransactionDetail:
      type: object
      properties:
        transactionDetailId: { type: string, format: uuid }
        transactionDetailAutoId: { type: integer, format: int64 }
        transactionId: { type: string, format: uuid }
        locationId: { type: string, format: uuid }
        glAccountId: { type: string, format: uuid }
        itemId: { type: string, format: uuid }
        credit: { type: number }
        debit: { type: number }
        amount: { type: number }
        quantity: { type: number }
        previousCountTotal: { type: number }
        adjustment: { type: number }
        unitOfMeasureName: { type: string }
        bankReconciliation: { type: string }
        bankDeposit: { type: string }
        comment: { type: string }
        rowType: { type: string }
        rowVersion: { type: integer, format: int64 }
        createdOn: { type: string, format: date-time }
        modifiedOn: { type: string, format: date-time }
        createdBy: { type: string }
        modifiedBy: { type: string }
    SalesEmployee:
      type: object
      properties:
        salesId: { type: string, format: uuid }
        receiptNumber: { type: string }
        checkNumber: { type: string }
        comment: { type: string }
        date: { type: string, format: date-time }
        dayOfWeek: { type: string }
        dayPart: { type: string }
        netSales: { type: number }
        grossSales: { type: number }
        numberofGuests: { type: integer }
        orderHour: { type: integer }
        salesAmount: { type: number }
        taxAmount: { type: number }
        tipAmount: { type: number }
        totalAmount: { type: number }
        totalPayment: { type: number }
        void: { type: boolean }
        server: { type: string }
        location: { type: string, format: uuid }
        serviceType: { type: string }
        dailySalesSummaryId: { type: string, format: uuid }
        createdOn: { type: string, format: date-time }
        modifiedOn: { type: string, format: date-time }
        createdBy: { type: string }
        modifiedBy: { type: string }
    SalesDetail:
      type: object
      properties:
        salesdetailID: { type: string, format: uuid }
        menuitem: { type: string }
        amount: { type: number }
        customerPOSText: { type: string }
        date: { type: string, format: date-time }
        quantity: { type: number }
        void: { type: boolean }
        company: { type: string, format: uuid }
        location: { type: string, format: uuid }
        salesID: { type: string, format: uuid }
        salesAccount: { type: string }
        category: { type: string }
        houseAccountTransaction: { type: string, format: uuid }
        transactionDetailID: { type: string, format: uuid }
        cateringEvent: { type: string, format: uuid }
        menuItemId: { type: integer, format: int64 }
        dailySalesSummaryId: { type: string, format: uuid }
        createdOn: { type: string, format: date-time }
        modifiedOn: { type: string, format: date-time }
        createdBy: { type: string }
        modifiedBy: { type: string }
    SalesPayment:
      type: object
      properties:
        salespaymentId: { type: string, format: uuid }
        name: { type: string }
        amount: { type: number }
        comment: { type: string }
        customerPOSText: { type: string }
        date: { type: string, format: date-time }
        isException: { type: boolean }
        missingreceipt: { type: boolean }
        company: { type: string, format: uuid }
        location: { type: string, format: uuid }
        paymenttype: { type: string }
        paymentGroup: { type: string }
        salesID: { type: string, format: uuid }
        houseAccountTransaction: { type: string, format: uuid }
        transactionDetailID: { type: string, format: uuid }
        cateringEvent: { type: string, format: uuid }
        exclude: { type: boolean }
        dailySalesSummaryId: { type: string, format: uuid }
        createdOn: { type: string, format: date-time }
        modifiedOn: { type: string, format: date-time }
        createdBy: { type: string }
        modifiedBy: { type: string }
    EntityDeleted:
      type: object
      properties:
        entityDeletedId: { type: integer }
        entityId: { type: string, format: uuid }
        entityName: { type: string }
        deletedOn: { type: string, format: date-time }
        rowVersion: { type: integer, format: int64 }
paths:
  /$metadata:
    get:
      operationId: getMetadata
      summary: Get OData Service Metadata
      description: Retrieve the OData EDMX metadata document describing all views and their properties.
      tags:
        - Metadata
      security:
        - basicAuth: []
      responses:
        '200':
          description: OData metadata document (EDMX/XML)
          content:
            application/xml:
              schema:
                type: string
  /Company:
    get:
      operationId: listCompanies
      summary: List Companies
      description: List all companies (vendors) in the customer database.
      tags:
        - Reference Data
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of companies
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/Company'
  /Location:
    get:
      operationId: listLocations
      summary: List Locations
      description: List all locations in the customer database.
      tags:
        - Reference Data
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of locations
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/Location'
  /GLAccount:
    get:
      operationId: listGlAccounts
      summary: List GL Accounts
      description: List all general ledger accounts with details.
      tags:
        - Reference Data
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of GL accounts
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/GLAccount'
  /Item:
    get:
      operationId: listItems
      summary: List Items
      description: List all items with categorization.
      tags:
        - Reference Data
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of items
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/Item'
  /JobTitle:
    get:
      operationId: listJobTitles
      summary: List Job Titles
      description: List all job titles with details.
      tags:
        - Reference Data
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of job titles
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/JobTitle'
  /Employee:
    get:
      operationId: listEmployees
      summary: List Employees
      description: List all employees with basic information.
      tags:
        - Labor
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of employees
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/Employee'
  /POSEmployee:
    get:
      operationId: listPosEmployees
      summary: List POS Employees
      description: Retrieve the data mapping between R365 and POS employee records.
      tags:
        - Labor
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of POS employee mappings
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/POSEmployee'
  /LaborDetail:
    get:
      operationId: listLaborDetail
      summary: List Labor Detail
      description: Retrieve employee punch time details, including clock in and clock out.
      tags:
        - Labor
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of labor detail records
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/LaborDetail'
  /PayrollSummary:
    get:
      operationId: listPayrollSummary
      summary: List Payroll Summary
      description: Retrieve a list of labor records summarized for payroll.
      tags:
        - Labor
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of payroll summary records
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/PayrollSummary'
  /Transaction:
    get:
      operationId: listTransactions
      summary: List Transactions
      description: Retrieve a list of financial transactions.
      tags:
        - Transactions
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of transactions
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/Transaction'
  /TransactionDetail:
    get:
      operationId: listTransactionDetail
      summary: List Transaction Detail
      description: Retrieve financial transaction details at the item level.
      tags:
        - Transactions
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of transaction detail records
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/TransactionDetail'
  /SalesEmployee:
    get:
      operationId: listSalesEmployee
      summary: List Sales Employee Tickets
      description: >-
        Retrieve sales ticket header data. This view does not support $select or
        $count and is limited to a 31-day date range per request.
      tags:
        - Sales
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of sales ticket headers
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/SalesEmployee'
  /SalesDetail:
    get:
      operationId: listSalesDetail
      summary: List Sales Detail
      description: >-
        Retrieve sales ticket line items. This view does not support $select or
        $count and is limited to a 31-day date range per request.
      tags:
        - Sales
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of sales line items
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/SalesDetail'
  /SalesPayment:
    get:
      operationId: listSalesPayment
      summary: List Sales Payments
      description: >-
        Retrieve sales payment data. This view does not support $select or
        $count and is limited to a 31-day date range per request.
      tags:
        - Sales
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of sales payments
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/SalesPayment'
  /EntityDeleted:
    get:
      operationId: listEntityDeleted
      summary: List Deleted Entities
      description: Retrieve a list of records deleted from the system.
      tags:
        - Audit
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/orderby'
        - $ref: '#/components/parameters/select'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/top'
      responses:
        '200':
          description: A collection of deleted entity records
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/EntityDeleted'