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'