openapi: 3.2.0 info: title: ERP API v2.1 Timecard API description: Provides a common API surface for accessing ECI ERP products. contact: name: ECI Manufacturing Division Integration Team url: https://www.ecisolutions.com/support/ version: 3.5.585+b1e45fd230 servers: - url: https://api-erp.integrations.ecimanufacturing.com:443 description: Production security: - Bearer: [] tags: - name: Time Card paths: /api/v2.1/timecards: post: tags: - Time Card summary: Create a new Timecard in the ERP system description: '## Supported ERPs - JobBOSS² - M1 - Deacom' requestBody: description: '' content: application/json: schema: $ref: '#/components/schemas/TimecardCreateModel' text/json: schema: $ref: '#/components/schemas/TimecardCreateModel' application/*+json: schema: $ref: '#/components/schemas/TimecardCreateModel' responses: '201': description: Created operationId: postApiV21Timecards x-operation-id-source: derived get: tags: - Time Card summary: Get a list of Timecards from the ERP system that match the given filters description: 'Gets a list of Timecard. ## Supported ERPs - M1 - JobBOSS² - Macola - Deacom ## Resource Features Feature |Supported |Notes ------------|------------|------------ Filter Expressions|**Yes**| Sort Expressions|**Yes** Field Selection|**Yes** Pagination|**Yes** UniqueID|uniqueID| ## Features by Field Field |Filterable |Sortable |Supported ERPs ------------|------------|------------|------------ timecardID|Yes|Yes|M1, JobBOSS², Macola, Deacom employeeID|Yes|Yes|M1, JobBOSS², Macola, Deacom shiftID|Yes|Yes|M1, JobBOSS², Macola, Deacom timecardDate|Yes|Yes|M1, JobBOSS², Macola, Deacom uniqueID|Yes|Yes|M1, JobBOSS², Macola, Deacom rowVersion|Yes|Yes|M1, JobBOSS², Macola, Deacom' parameters: - name: fields in: query description: A comma-separated list of fields to include in the result. schema: type: string - name: sort in: query description: A comma-separated list of sort expressions. schema: type: string - name: take in: query description: Limit the number of results being returned schema: minimum: 0 type: integer - name: skip in: query description: The number of results to skip. Combine with 'take' to fetch records in pages schema: minimum: 0 type: integer - name: count in: query description: 'Data and count response behavior ' schema: maximum: 2 minimum: 0 type: integer - name: filters in: query description: See Filter Expressions for query string syntax. The Test UI and any generated code tool may expose filter parameters as a dictionary of name/value pairs, but if creating a raw HTTP request, they must be provided on the querystring as defined in the Filter Expression section. style: form schema: type: object additionalProperties: type: string examples: Empty: description: No filters applied 'Example #1': description: A dictionary of name/value pairs that will be serialized as querystring parameters in the format ```name[operator]=value``` value: timecardID[eq]: abc123 employeeID[eq]: abc123 shiftID[eq]: abc123 timecardDate[gte]: '2020-09-25T04:03:00.0000000' uniqueID[eq]: cc90686b-399e-4094-b431-fa462f84b0a8 rowVersion[gte]: 123 - name: expand in: query description: '### Supported Expansions An expansion expression containing a comma separater list of relationships to expand. Name |Value |Description ------------|------------|----------- timecardlines|Timecardlines[]| employees|Employees[]| ' schema: type: string - name: convertToUTC in: query description: Convert suppported date/time values to UTC before returning the data. schema: type: boolean responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/TimecardListResponse' application/json: schema: $ref: '#/components/schemas/TimecardListResponse' text/json: schema: $ref: '#/components/schemas/TimecardListResponse' operationId: getApiV21Timecards x-operation-id-source: derived /api/v2.1/timecards/{id}: get: tags: - Time Card summary: Get a Timecard from the ERP system that match the given unique ID description: 'Gets a Timecard by unique ID. ## Supported ERPs - M1 - JobBOSS² - Macola - Deacom ## Features by Field Field |Supported ERPs ------------|------------ timecardID||M1, JobBOSS², Macola, Deacom employeeID||M1, JobBOSS², Macola, Deacom shiftID||M1, JobBOSS², Macola, Deacom timecardDate||M1, JobBOSS², Macola, Deacom uniqueID||M1, JobBOSS², Macola, Deacom rowVersion||M1, JobBOSS², Macola, Deacom' parameters: - name: id in: path description: The ID of the Timecard required: true schema: type: string responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/Timecard' application/json: schema: $ref: '#/components/schemas/Timecard' text/json: schema: $ref: '#/components/schemas/Timecard' operationId: getApiV21TimecardsById x-operation-id-source: derived /api/v2.1/timecards/clock-in: post: tags: - Time Card summary: Clock an employee into their shift. description: '## Supported ERPs - JobBOSS² - Deacom' requestBody: description: '' content: application/json: schema: $ref: '#/components/schemas/ClockInModel' text/json: schema: $ref: '#/components/schemas/ClockInModel' application/*+json: schema: $ref: '#/components/schemas/ClockInModel' responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/ClockSession' application/json: schema: $ref: '#/components/schemas/ClockSession' text/json: schema: $ref: '#/components/schemas/ClockSession' operationId: postApiV21TimecardsClockIn x-operation-id-source: derived /api/v2.1/timecards/clock-out: post: tags: - Time Card summary: Clock an employee out of their shift. description: '## Supported ERPs - JobBOSS² - Deacom' requestBody: description: '' content: application/json: schema: $ref: '#/components/schemas/ClockOutModel' text/json: schema: $ref: '#/components/schemas/ClockOutModel' application/*+json: schema: $ref: '#/components/schemas/ClockOutModel' responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/ClockSession' application/json: schema: $ref: '#/components/schemas/ClockSession' text/json: schema: $ref: '#/components/schemas/ClockSession' operationId: postApiV21TimecardsClockOut x-operation-id-source: derived components: schemas: Job: title: Job type: object properties: jobID: type: string customerID: type: string partID: type: string partRevisionID: type: string orderQty: type: number format: double prodQty: type: number format: double schedStartDate: type: string format: date-time schedEndDate: type: string format: date-time estLeadTime: type: number format: double actStartDate: type: string format: date-time actEndDate: type: string format: date-time dueDate: type: string format: date-time status: type: string uniqueID: type: string rowVersion: type: integer format: int64 jobCost: type: number format: double jobCostForeign: type: number format: double plantID: type: string jobDate: type: string format: date-time partWarehouseID: type: string partBinID: type: string partShortDesc: type: string inventoryQty: type: number format: double isPlanningComplete: type: boolean isScheduleComplete: type: boolean isReleasedToFloor: type: boolean isOnHold: type: boolean completedDate: type: string format: date-time quantityCompleted: type: number format: double quantityShipped: type: number format: double quantityRcvdToInventory: type: number format: double projectID: type: string projectAreaID: type: string isClosed: type: boolean closedDate: type: string format: date-time jobPriorityID: type: string unitOfMeasure: type: string plannerEmployeeID: type: string parentJobID: type: string shortDesc: type: string childJobID: type: string jobType: type: string jobOperations: type: array items: $ref: '#/components/schemas/JobOperation' JobOperation: title: JobOperation type: object properties: jobID: type: string jobAssembly: type: string jobOperationSeq: type: integer format: int32 status: type: string workCenterID: type: string processID: type: string shortDesc: type: string longDescText: type: string longDescFormatted: type: string outsideOperation: type: string partID: type: string partRevisionID: type: string schedStartDate: type: string format: date-time schedEndDate: type: string format: date-time actStartDate: type: string format: date-time actEndDate: type: string format: date-time estSetupHours: type: number format: double estProdHours: type: number format: double estQueueHours: type: number format: double estMoveHours: type: number format: double estQAHours: type: number format: double actSetupHours: type: number format: double actualProdHours: type: number format: double actQAHours: type: number format: double vendorID: type: string estSetupTimeValue: type: number format: double estSetupTimeUnit: type: string estProdTimeValue: type: number format: double estProdTimeUnit: type: string uniqueID: type: string rowVersion: type: integer format: int64 operationQty: type: number format: double quantityComplete: type: number format: double isSetupComplete: type: boolean plantID: type: string purchaseOrderID: type: string supplierOrganizationID: type: string purchaseLocationID: type: string RFQID: type: string defaultEmployeeID: type: string defaultEmployeeID2: type: string defaultEmployeeID3: type: string isUnattended: type: boolean jobType: type: string supplierLeadTime: type: integer format: int32 jobIsClosed: type: boolean jobClosedDate: type: string format: date-time WorkCenter: title: WorkCenter type: object properties: workCenterID: type: string shortDesc: type: string deptID: type: string overHeadRate: type: string quoteRate: type: string processID: type: string parentWorkCenterID: type: string shiftID: type: string uniqueID: type: string rowVersion: type: integer format: int64 laborRate: type: string departments: type: array items: $ref: '#/components/schemas/Department' shifts: type: array items: $ref: '#/components/schemas/Shift' ClockInModel: required: - clockInTime - employeeID type: object properties: employeeID: minLength: 1 type: string clockInTime: type: string format: date-time shiftID: type: - string - 'null' additionalProperties: false TimecardLineCreateModel: required: - jobID type: object properties: jobID: minLength: 1 type: string jobOperationSeq: type: - integer - 'null' format: int32 elapsedTime: type: - number - 'null' format: double setupTime: type: - number - 'null' format: double machineHours: type: - number - 'null' description: Not used for JobBOSS² format: double laborHours: type: - number - 'null' description: Not used for JobBOSS² format: double processID: type: - string - 'null' workCenterID: type: - string - 'null' goodQty: type: - number - 'null' format: double scrapQty: type: - number - 'null' format: double comments: type: - string - 'null' startTime: type: - string - 'null' format: date-time endTime: type: - string - 'null' format: date-time jobOperationID: type: - string - 'null' additionalProperties: false Employee: title: Employee type: object properties: employeeID: type: string firstName: type: string lastName: type: string title: type: string supervisorEmployeeID: type: string payRate: type: number format: double deptID: type: string shiftID: type: string isActive: type: boolean uniqueID: type: string rowVersion: type: integer format: int64 Department: title: Department type: object properties: deptID: type: string shortDesc: type: string uniqueID: type: string rowVersion: type: integer format: int64 Shift: title: Shift type: object properties: shiftID: type: number format: float shortDesc: type: string inactiveDate: type: string format: date-time uniqueID: type: string rowVersion: type: integer format: int64 shiftDays: type: array items: $ref: '#/components/schemas/ShiftDay' SalesOrderDelivery: title: SalesOrderDelivery type: object properties: salesOrderID: type: string orderLine: type: integer orderLineDelivery: type: string promisedDate: type: string format: date-time promisedQty: type: number format: double shippedDate: type: string format: date-time shippedQty: type: number format: double uniqueID: type: string rowVersion: type: integer format: int64 deliveryTypeCode: type: string salesOrderType: type: string salesOrderJobs: type: array items: $ref: '#/components/schemas/SalesOrderJob' ClockOutModel: required: - clockOutTime - clockSessionID type: object properties: clockSessionID: minLength: 1 type: string clockOutTime: type: string format: date-time additionalProperties: false TimecardLine: title: TimecardLine type: object properties: timecardID: type: string timecardLine: type: string jobID: type: string jobAssembly: type: string jobOperation: type: integer format: int32 workCenterID: type: string processID: type: string status: type: string timecardType: type: string goodQty: type: number format: double scrapQty: type: number format: double reworkQty: type: number format: double rejectQty: type: number format: double startTime: type: string format: date-time endTime: type: string format: date-time machineHours: type: number format: double laborHours: type: number format: double employeeID: type: integer format: int32 timecardDate: type: string format: date-time uniqueID: type: string rowVersion: type: integer format: int64 workCenters: type: array items: $ref: '#/components/schemas/WorkCenter' workCenter: $ref: '#/components/schemas/WorkCenter' timecards: type: array items: $ref: '#/components/schemas/Timecard' timecard: $ref: '#/components/schemas/Timecard' jobs: $ref: '#/components/schemas/Job' job: $ref: '#/components/schemas/Job' processes: $ref: '#/components/schemas/Process' process: $ref: '#/components/schemas/Process' jobOperations: $ref: '#/components/schemas/JobOperation' jobOperationx: $ref: '#/components/schemas/JobOperation' salesOrderDeliveries: type: array items: $ref: '#/components/schemas/SalesOrderDelivery' salesOrderJobs: $ref: '#/components/schemas/SalesOrderJob' salesOrderJob: $ref: '#/components/schemas/SalesOrderJob' SalesOrderJob: title: SalesOrderJob type: object properties: salesOrderID: type: string orderLine: type: integer orderLineDelivery: type: string jobID: type: string orderJobSeq: type: integer format: int32 uniqueID: type: string rowVersion: type: integer format: int64 ShiftDay: title: ShiftDay type: object properties: shiftID: type: number format: float shiftDay: type: number format: float startTime: type: string endTime: type: string uniqueID: type: string rowVersion: type: integer format: int64 TimecardCreateModel: required: - employeeID - timecardDate type: object properties: employeeID: minLength: 1 type: string timecardDate: type: string format: date shiftID: type: - string - 'null' timecardLines: type: - array - 'null' items: $ref: '#/components/schemas/TimecardLineCreateModel' additionalProperties: false Timecard: title: Timecard type: object properties: timecardID: type: string employeeID: type: string shiftID: type: number format: float timecardDate: type: string format: date-time uniqueID: type: string rowVersion: type: integer format: int64 timecardlines: type: array items: $ref: '#/components/schemas/TimecardLine' employees: type: array items: $ref: '#/components/schemas/Employee' Process: title: Process type: object properties: processID: type: string shortDesc: type: string setupRate: type: string productionRate: type: string uniqueID: type: string rowVersion: type: integer format: int64 TimecardListResponse: type: object properties: data: type: - array - 'null' items: $ref: '#/components/schemas/Timecard' readOnly: true resultCount: type: integer format: int32 additionalProperties: false ClockSession: type: object properties: clockSessionID: type: - string - 'null' employeeID: type: - string - 'null' clockInTime: type: - string - 'null' format: date-time clockOutTime: type: - string - 'null' format: date-time shiftID: type: - string - 'null' uniqueID: type: - string - 'null' additionalProperties: false securitySchemes: Bearer: type: oauth2 description: OAuth 2.0 Client Credentials Flow with API Users issued from Integration Engine Management Console flows: clientCredentials: tokenUrl: https://api-user.integrations.ecimanufacturing.com/oauth2/api-user/token scopes: openid: openid