overlay: 1.0.0 info: title: ECI Manufacturing ERP API v2.1 — API Evangelist Overlay version: 1.0.0 extends: openapi/eci-solutions-erp-v2-1-openapi.json x-generated: '2026-09-06' x-method: generated x-source: derived from openapi/eci-solutions-erp-v2-1-openapi.json; captures API Evangelist enhancements only. The original contract is NEVER mutated. x-note: The published contract declares 42 tags but attaches no top-level tags[] array with descriptions, and 85 of its 146 operations carry no operationId. x-operations-missing-operationid: 85 actions: - target: $.info description: Add the API-specific support address published in the ECI Manufacturing Integration Engine security.txt; the contract names a team and a web page but no address. update: contact: name: ECI Manufacturing Integration Team url: https://www.ecisolutions.com/support/ email: mfg-integration-support@ecisolutions.com - target: $ description: Declare the servers block. The contract as served names https://api-erp.integrations.ecimanufacturing.com:443; this restates it without the explicit port for clients that reject it. update: servers: - url: https://api-erp.integrations.ecimanufacturing.com description: Production, us-east-1 and us-gov-west-1 (per the portal manifest at integrations.ecimanufacturing.com/shared.js) - target: $.paths['/api/v2.1/user-info'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_user_info - target: $.paths['/api/v2.1/contacts'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_contacts - target: $.paths['/api/v2.1/contacts'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_contacts - target: $.paths['/api/v2.1/contacts/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_contacts_id - target: $.paths['/api/v2.1/departments'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_departments - target: $.paths['/api/v2.1/departments/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_departments_id - target: $.paths['/api/v2.1/employees'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_employees - target: $.paths['/api/v2.1/employees/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_employees_id - target: $.paths['/api/v2.1/gl-codes'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_gl_codes - target: $.paths['/api/v2.1/jobs'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_jobs - target: $.paths['/api/v2.1/jobs/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_jobs_id - target: $.paths['/api/v2.1/jobs/{id}'].patch description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: patch_api_v2_1_jobs_id - target: $.paths['/api/v2.1/jobs/{uniqueID}/part-production'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_jobs_uniqueID_part_production - target: $.paths['/api/v2.1/job-assemblies'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_job_assemblies - target: $.paths['/api/v2.1/job-assemblies/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_job_assemblies_id - target: $.paths['/api/v2.1/job-materials'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_job_materials - target: $.paths['/api/v2.1/job-materials/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_job_materials_id - target: $.paths['/api/v2.1/job-operations'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_job_operations - target: $.paths['/api/v2.1/job-operations/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_job_operations_id - target: $.paths['/api/v2.1/job-operations/{id}'].patch description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: patch_api_v2_1_job_operations_id - target: $.paths['/api/v2.1/locations'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_locations - target: $.paths['/api/v2.1/locations'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_locations - target: $.paths['/api/v2.1/locations/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_locations_id - target: $.paths['/api/v2.1/organizations'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_organizations - target: $.paths['/api/v2.1/organizations'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_organizations - target: $.paths['/api/v2.1/organizations/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_organizations_id - target: $.paths['/api/v2.1/organization-parts'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_organization_parts - target: $.paths['/api/v2.1/organization-parts/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_organization_parts_id - target: $.paths['/api/v2.1/parts'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_parts - target: $.paths['/api/v2.1/parts'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_parts - target: $.paths['/api/v2.1/parts/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_parts_id - target: $.paths['/api/v2.1/part-bins'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_bins - target: $.paths['/api/v2.1/part-costs'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_costs - target: $.paths['/api/v2.1/part-cost-breaks'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_cost_breaks - target: $.paths['/api/v2.1/part-groups'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_groups - target: $.paths['/api/v2.1/part-materials'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_materials - target: $.paths['/api/v2.1/part-materials/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_materials_id - target: $.paths['/api/v2.1/part-operations'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_operations - target: $.paths['/api/v2.1/part-operations/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_operations_id - target: $.paths['/api/v2.1/part-prices'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_prices - target: $.paths['/api/v2.1/part-price-breaks'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_price_breaks - target: $.paths['/api/v2.1/part-revisions'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_part_revisions - target: $.paths['/api/v2.1/part-revisions'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_revisions - target: $.paths['/api/v2.1/part-revisions/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_part_revisions_id - target: $.paths['/api/v2.1/payment-terms'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_payment_terms - target: $.paths['/api/v2.1/purchase-orders'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_purchase_orders - target: $.paths['/api/v2.1/purchase-orders/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_purchase_orders_id - target: $.paths['/api/v2.1/purchase-order-lines'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_purchase_order_lines - target: $.paths['/api/v2.1/purchase-order-lines/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_purchase_order_lines_id - target: $.paths['/api/v2.1/quotes'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_quotes - target: $.paths['/api/v2.1/quotes/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_quotes_id - target: $.paths['/api/v2.1/quote-lines'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_quote_lines - target: $.paths['/api/v2.1/quote-lines/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_quote_lines_id - target: $.paths['/api/v2.1/quote-quantities'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_quote_quantities - target: $.paths['/api/v2.1/reasons'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_reasons - target: $.paths['/api/v2.1/reasons/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_reasons_id - target: $.paths['/api/v2.1/sales-accounts'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_sales_accounts - target: $.paths['/api/v2.1/sales-orders'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_sales_orders - target: $.paths['/api/v2.1/sales-orders'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_sales_orders - target: $.paths['/api/v2.1/sales-orders/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_sales_orders_id - target: $.paths['/api/v2.1/sales-order-jobs'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_sales_order_jobs - target: $.paths['/api/v2.1/sales-order-jobs/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_sales_order_jobs_id - target: $.paths['/api/v2.1/sales-order-lines'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_sales_order_lines - target: $.paths['/api/v2.1/sales-order-lines'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_sales_order_lines - target: $.paths['/api/v2.1/sales-order-lines/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_sales_order_lines_id - target: $.paths['/api/v2.1/shifts'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_shifts - target: $.paths['/api/v2.1/shifts/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_shifts_id - target: $.paths['/api/v2.1/tax-codes'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_tax_codes - target: $.paths['/api/v2.1/timecards'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_timecards - target: $.paths['/api/v2.1/timecards'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_timecards - target: $.paths['/api/v2.1/timecards/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_timecards_id - target: $.paths['/api/v2.1/timecards/clock-in'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_timecards_clock_in - target: $.paths['/api/v2.1/timecards/clock-out'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_timecards_clock_out - target: $.paths['/api/v2.1/timecard-lines'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_timecard_lines - target: $.paths['/api/v2.1/timecard-lines'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_timecard_lines - target: $.paths['/api/v2.1/timecard-lines/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_timecard_lines_id - target: $.paths['/api/v2.1/timecard-lines/{id}'].patch description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: patch_api_v2_1_timecard_lines_id - target: $.paths['/api/v2.1/timezones'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_timezones - target: $.paths['/api/v2.1/valid-values/organization-types'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_valid_values_organization_types - target: $.paths['/api/v2.1/valid-values/location-types'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_valid_values_location_types - target: $.paths['/api/v2.1/valid-values/operation-types'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_valid_values_operation_types - target: $.paths['/api/v2.1/work-centers'].post description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: post_api_v2_1_work_centers - target: $.paths['/api/v2.1/work-centers'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_work_centers - target: $.paths['/api/v2.1/work-centers/{id}'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_work_centers_id - target: $.paths['/api/v2.1/work-center-rate-breaks'].get description: Add a stable operationId; the published contract omits one, so tools and agents cannot address this operation by name. update: operationId: get_api_v2_1_work_center_rate_breaks