openapi: 3.2.0 info: title: JobBOSS² Public Routings API description: Provides a common API surface for accessing ECI ERP JobBOSS². version: v1 servers: - url: https://api-jb2.integrations.ecimanufacturing.com:443 description: API Host security: - Bearer: [] tags: - name: Routings paths: /api/v1/estimates/{partNumber}/routings/{stepNumber}: get: tags: - Routings summary: Gets a Routing by estimate's part number and routing's step number description: 'By default a Routing response will include only the fields: partNumber, stepNumber, workOrVendor, workCenter, vendorCode, operatorCode, description, setupTime, timeUnit, cycleTime, cycleUnit, machineRun, teamSize, scrapPercent, laborAccount, setupRate, cycleRate, burdenRate, laborRate, isUnattendedOperation, leadTime, markupPercent, isCertificationRequired, GLAccount, cost1, unit1, setup1, setupPrice, cyclePrice, total, estimQuantity, actualPiecesGood, actualPiecesScrapped, ignoreVendorMinimum, numberMachineForJob, uniqueID, lastModDate. You may specify the exact fields to return using the fields parameter.' parameters: - name: partNumber in: path required: true schema: type: string - name: stepNumber in: path required: true schema: type: string - name: fields in: query description: A comma separated list of fields to include in the result. schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/RoutingSuccessResponse' example: Data: actualPiecesGood: 0 actualPiecesScrapped: 0 burdenRate: 0 cost1: 0 cost2: 0 cost3: 0 cost4: 0 cost5: 0 cost6: 0 cost7: 0 cost8: 0 cyclePrice: 0 cycleRate: 0 cycleTime: 0 cycleUnit: string description: string enteredDate: '2026-09-06T17:13:12.0000000+00:00' estimQuantity: 0 GLAccount: string ignoreVendorMinimum: false isCertificationRequired: false isUnattendedOperation: false laborAccount: string laborRate: 0 lastModDate: '2026-09-06T17:13:12.0000000+00:00' lastModUser: string leadTime: 0 machineRun: 0 markupPercent: 0 numberMachineForJob: 0 operatorCode: string partNumber: string percentEfficient: 0 revisedDate: '2026-09-06T17:13:12.0000000+00:00' scrapPercent: 0 setup1: 0 setup2: 0 setup3: 0 setup4: 0 setup5: 0 setup6: 0 setup7: 0 setup8: 0 setupPrice: 0 setupRate: 0 setupTime: 0 stepNumber: 0 teamSize: 0 timeUnit: string total: 0 uniqueID: 0 unit1: string unit2: string unit3: string unit4: string unit5: string unit6: string unit7: string unit8: string vendorCode: string workCenter: string workOrVendor: string operationId: getApiV1EstimatesByPartNumberRoutingsByStepNumber x-operation-id-source: derived /api/v1/routings: get: tags: - Routings summary: Gets a list of Routings description: 'By default a routing response will include only the fields: partNumber, stepNumber, workOrVendor, workCenter, vendorCode, operatorCode, description, setupTime, timeUnit, cycleTime, cycleUnit, machineRun, teamSize, scrapPercent, laborAccount, setupRate, cycleRate, burdenRate, laborRate, isUnattendedOperation, leadTime, markupPercent, isCertificationRequired, GLAccount, cost1, unit1, setup1, setupPrice, cyclePrice, total, estimQuantity, actualPiecesGood, actualPiecesScrapped, ignoreVendorMinimum, numberMachineForJob, uniqueID, lastModDate. You may specify the exact fields to return using the fields parameter.' 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 field to sort by. See the Sort Expressions section for more information. schema: type: string - name: filters in: query description: Filters must be provided as query string parameters as defined in the Filter Expressions section. schema: type: object additionalProperties: type: string examples: No filters: {} Filter by Part Number: value: partNumber: R-9002-007 - name: skip in: query description: The number of records at the start of the result set to skip over. schema: type: string - name: take in: query description: The number of records to retrieve. schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/RoutingListSuccessResponse' example: Data: - actualPiecesGood: 0 actualPiecesScrapped: 0 burdenRate: 0 cost1: 0 cost2: 0 cost3: 0 cost4: 0 cost5: 0 cost6: 0 cost7: 0 cost8: 0 cyclePrice: 0 cycleRate: 0 cycleTime: 0 cycleUnit: string description: string enteredDate: '2026-09-06T17:13:12.0000000+00:00' estimQuantity: 0 GLAccount: string ignoreVendorMinimum: false isCertificationRequired: false isUnattendedOperation: false laborAccount: string laborRate: 0 lastModDate: '2026-09-06T17:13:12.0000000+00:00' lastModUser: string leadTime: 0 machineRun: 0 markupPercent: 0 numberMachineForJob: 0 operatorCode: string partNumber: string percentEfficient: 0 revisedDate: '2026-09-06T17:13:12.0000000+00:00' scrapPercent: 0 setup1: 0 setup2: 0 setup3: 0 setup4: 0 setup5: 0 setup6: 0 setup7: 0 setup8: 0 setupPrice: 0 setupRate: 0 setupTime: 0 stepNumber: 0 teamSize: 0 timeUnit: string total: 0 uniqueID: 0 unit1: string unit2: string unit3: string unit4: string unit5: string unit6: string unit7: string unit8: string vendorCode: string workCenter: string workOrVendor: string operationId: getApiV1Routings x-operation-id-source: derived components: schemas: Routing: type: object properties: actualPiecesGood: type: - integer - 'null' format: int32 readOnly: true actualPiecesScrapped: type: - integer - 'null' format: int32 readOnly: true burdenRate: type: - number - 'null' format: double readOnly: true cost1: type: - number - 'null' format: double readOnly: true cost2: type: - number - 'null' format: double readOnly: true cost3: type: - number - 'null' format: double readOnly: true cost4: type: - number - 'null' format: double readOnly: true cost5: type: - number - 'null' format: double readOnly: true cost6: type: - number - 'null' format: double readOnly: true cost7: type: - number - 'null' format: double readOnly: true cost8: type: - number - 'null' format: double readOnly: true cyclePrice: type: - number - 'null' format: double readOnly: true cycleRate: type: - number - 'null' format: double readOnly: true cycleTime: type: - number - 'null' format: double readOnly: true cycleUnit: type: - string - 'null' readOnly: true description: type: - string - 'null' readOnly: true enteredDate: type: - string - 'null' format: date-time readOnly: true estimQuantity: type: - integer - 'null' format: int32 readOnly: true GLAccount: type: - string - 'null' readOnly: true ignoreVendorMinimum: type: boolean readOnly: true isCertificationRequired: type: boolean readOnly: true isUnattendedOperation: type: boolean readOnly: true laborAccount: type: - string - 'null' readOnly: true laborRate: type: - number - 'null' format: double readOnly: true lastModDate: type: - string - 'null' format: date-time readOnly: true lastModUser: type: - string - 'null' readOnly: true leadTime: type: - integer - 'null' format: int32 readOnly: true machineRun: type: - integer - 'null' format: int32 readOnly: true markupPercent: type: - number - 'null' format: double readOnly: true numberMachineForJob: type: - number - 'null' format: double readOnly: true operatorCode: type: - string - 'null' readOnly: true partNumber: type: - string - 'null' readOnly: true percentEfficient: type: - number - 'null' format: double readOnly: true revisedDate: type: - string - 'null' format: date-time readOnly: true scrapPercent: type: - number - 'null' format: double readOnly: true setup1: type: - number - 'null' format: double readOnly: true setup2: type: - number - 'null' format: double readOnly: true setup3: type: - number - 'null' format: double readOnly: true setup4: type: - number - 'null' format: double readOnly: true setup5: type: - number - 'null' format: double readOnly: true setup6: type: - number - 'null' format: double readOnly: true setup7: type: - number - 'null' format: double readOnly: true setup8: type: - number - 'null' format: double readOnly: true setupPrice: type: - number - 'null' format: double readOnly: true setupRate: type: - number - 'null' format: double readOnly: true setupTime: type: - number - 'null' format: double readOnly: true stepNumber: type: - integer - 'null' format: int32 readOnly: true teamSize: type: - integer - 'null' format: int32 readOnly: true timeUnit: type: - string - 'null' readOnly: true total: type: - number - 'null' format: double readOnly: true uniqueID: type: integer format: int32 readOnly: true unit1: type: - string - 'null' readOnly: true unit2: type: - string - 'null' readOnly: true unit3: type: - string - 'null' readOnly: true unit4: type: - string - 'null' readOnly: true unit5: type: - string - 'null' readOnly: true unit6: type: - string - 'null' readOnly: true unit7: type: - string - 'null' readOnly: true unit8: type: - string - 'null' readOnly: true vendorCode: type: - string - 'null' readOnly: true workCenter: type: - string - 'null' readOnly: true workOrVendor: type: - string - 'null' readOnly: true additionalProperties: false RoutingListSuccessResponse: type: object properties: Data: type: - array - 'null' items: $ref: '#/components/schemas/Routing' additionalProperties: false RoutingSuccessResponse: type: object properties: Data: $ref: '#/components/schemas/Routing' 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