ECI Manufacturing ERP API
A product-agnostic REST API for reading and writing data in ECI ERP products, currently supporting Deacom, M1, Macola and JobBOSS². The API user account determines which ERP product, customer and database instance is reached. Supports field selection, filter expressions, sort expressions, take/skip paging, relationship expansion and a rowVersion change cursor. Three concurrent versions are published (v1, v2, v2.1); OAuth 2.0 client-credentials tokens are issued by the Integration Engine Management API. Access must be activated by ECI before use.
GET
/api/v2.1/user-info
Gets information about the current user accessing the API.
POST
/api/v2.1/contacts
Create a new Contact in the ERP system.
GET
/api/v2.1/contacts
Get a list of Contacts from the ERP system that match the given filters.
GET
/api/v2.1/contacts/{id}
Get an Contact from the ERP system that matches the given unique ID.
GET
/api/v2.1/departments
Get a list of Employees from the ERP system that match the given filters.
GET
/api/v2.1/departments/{id}
Get a Department from the ERP system that matches the given unique ID.
GET
/api/v2.1/employees
Get a list of Employees from the ERP system that match the given filters.
GET
/api/v2.1/employees/{id}
Get an Employee from the ERP system that matches the given unique ID.
GET
/api/v2.1/gl-codes
Get a list of GLCodes from the ERP system that match the given filters.
GET
/api/v2.1/jobs
Get a list of Jobs from the ERP system that match the given filters.
GET
/api/v2.1/jobs/{id}
Get a Job from the ERP system that matches the given unique ID.
PATCH
/api/v2.1/jobs/{id}
Update a job and its job operations in the ERP system.
POST
/api/v2.1/jobs/{uniqueID}/part-production
Register parts produced for a job.
GET
/api/v2.1/job-assemblies
Get a list of Job Assemblies from the ERP system that match the given filters.
GET
/api/v2.1/job-assemblies/{id}
Get a Job Assembly from the ERP system that matches the given unique ID.
GET
/api/v2.1/job-materials
Get a list of Job Materials from the ERP system that match the given filters.
GET
/api/v2.1/job-materials/{id}
Get a Job Material from the ERP system that matches the given unique ID.
GET
/api/v2.1/job-operations
Get a list of Job Operations from the ERP system that match the given filters.
GET
/api/v2.1/job-operations/{id}
Get a Job Operation from the ERP system that matches the given unique ID.
PATCH
/api/v2.1/job-operations/{id}
Update a job operation in the ERP system.
POST
/api/v2.1/locations
Create a new Location in the ERP system.
GET
/api/v2.1/locations
Get a list of Locations from the ERP system that match the given filters.
GET
/api/v2.1/locations/{id}
Get a Location from the ERP system that matches the given unique ID.
POST
/api/v2.1/organizations
Create a new Organization in the ERP system.
GET
/api/v2.1/organizations
Get a list of Organizations from the ERP system that match the given filters.
GET
/api/v2.1/organizations/{id}
Get an Organization from the ERP system that matches the given unique ID.
GET
/api/v2.1/organization-parts
Get a list of OrganizationParts from the ERP system that match the given filters.
GET
/api/v2.1/organization-parts/{id}
Get an Organization Part from the ERP system that matches the given unique ID.
POST
/api/v2.1/parts
Create a new Part in the ERP system.
GET
/api/v2.1/parts
Get a list of Parts from the ERP system that match the given filters.
GET
/api/v2.1/parts/{id}
Get a Part from the ERP system that match the given filters.
GET
/api/v2.1/part-bins
Get a list of Part-Bins from the ERP system that match the given filters.
GET
/api/v2.1/part-costs
Get a list of PartCosts from the ERP system that match the given filters.
GET
/api/v2.1/part-cost-breaks
Get a list of PartCostBreaks from the ERP system that match the given filters.
GET
/api/v2.1/part-groups
Get a list of PartGroups from the ERP system that match the given filters.
GET
/api/v2.1/part-materials
Get a list of PartMaterials from the ERP system that match the given filters.
GET
/api/v2.1/part-materials/{id}
Get a PartMaterial from the ERP system that match the given filters.
GET
/api/v2.1/part-operations
Get a list of PartOperations from the ERP system that match the given filters.
GET
/api/v2.1/part-operations/{id}
Get a PartOperation from the ERP system that match the given filters.
GET
/api/v2.1/part-prices
Get a list of PartPrices from the ERP system that match the given filters.
GET
/api/v2.1/part-price-breaks
Get a list of PartPriceBreaks from the ERP system that match the given filters.
POST
/api/v2.1/part-revisions
Create a new PartRevision in the ERP system.
GET
/api/v2.1/part-revisions
Get a list of PartRevisions from the ERP system that match the given filters.
GET
/api/v2.1/part-revisions/{id}
Get a PartRevisions from the ERP system that match the given filters.
GET
/api/v2.1/payment-terms
Get a list of PaymentTerm from the ERP system that match the given filters.
GET
/api/v2.1/purchase-orders
Get a list of PurchaseOrders from the ERP system that match the given filters.
GET
/api/v2.1/purchase-orders/{id}
Get an Purchaseorders from the ERP system that matches the given unique ID.
GET
/api/v2.1/purchase-order-lines
Get a list of PurchaseOrderLines from the ERP system that match the given filters.
GET
/api/v2.1/purchase-order-lines/{id}
Get a PurchaseOrderLine from the ERP system that matches the given unique ID.
GET
/api/v2.1/quotes
Get a list of Quotes from the ERP system that match the given filters.
GET
/api/v2.1/quotes/{id}
Get a Quote from the ERP system that matches the given unique ID.
GET
/api/v2.1/quote-lines
Get a list of QuoteLines from the ERP system that match the given filters.
GET
/api/v2.1/quote-lines/{id}
Get a QuoteLine from the ERP system that matches the given unique ID.
GET
/api/v2.1/quote-quantities
Get a list of Quote Quantities from the ERP system that match the given filters.
GET
/api/v2.1/reasons
Get a list of Reasons from the ERP system that match the given filters.
GET
/api/v2.1/reasons/{id}
Get a Reason from the ERP system that matches the given unique ID.
GET
/api/v2.1/sales-accounts
Get a list of SalesAccounts from the ERP system that match the given filters.
POST
/api/v2.1/sales-orders
Create a new SalesOrder in the ERP system.
GET
/api/v2.1/sales-orders
Get a list of SalesOrders from the ERP system that match the given filters.
GET
/api/v2.1/sales-orders/{id}
Get a SalesOrder from the ERP system that match the given filters.
GET
/api/v2.1/sales-order-jobs
Get a list of SalesOrderJobs from the ERP system that match the given filters.
GET
/api/v2.1/sales-order-jobs/{id}
Get a SalesOrderJob from the ERP system that match the given filters.
POST
/api/v2.1/sales-order-lines
Create a new SalesOrderLine in the ERP system.
GET
/api/v2.1/sales-order-lines
Get a list of SalesOrderLines from the ERP system that match the given filters.
GET
/api/v2.1/sales-order-lines/{id}
Get a SalesOrderLine from the ERP system that match the given filters.
GET
/api/v2.1/shifts
Get a list of Shift from the ERP system that match the given filters.
GET
/api/v2.1/shifts/{id}
Get a Shift from the ERP system that match the given filters.
GET
/api/v2.1/tax-codes
Get a list of TaxCodes from the ERP system that match the given filters.
POST
/api/v2.1/timecards
Create a new Timecard in the ERP system.
GET
/api/v2.1/timecards
Get a list of Timecards from the ERP system that match the given filters.
GET
/api/v2.1/timecards/{id}
Get a Timecard from the ERP system that match the given unique ID.
POST
/api/v2.1/timecards/clock-in
Clock an employee into their shift. Creates an open clock session that must be closed via clock-out.
POST
/api/v2.1/timecards/clock-out
Clock an employee out of their shift. Closes the clock session identified by model.ClockSessionID.
POST
/api/v2.1/timecard-lines
Create a new Timecard Line in the ERP system.
GET
/api/v2.1/timecard-lines
Get a list of Timecard Lines from the ERP system that match the given filters.
GET
/api/v2.1/timecard-lines/{id}
Get a TimecardLine from the ERP system that match the given unique ID.
PATCH
/api/v2.1/timecard-lines/{id}
Update an existing Timecard Line in the ERP system.
GET
/api/v2.1/timezones
Get a list of TimeZones from the ERP system that match the given filters.
GET
/api/v2.1/valid-values/organization-types
Gets the list of Organization Type codes.
GET
/api/v2.1/valid-values/location-types
Gets the list of Location Type codes.
GET
/api/v2.1/valid-values/operation-types
Gets the list of Operation Type codes.
POST
/api/v2.1/work-centers
Create a new WorkCenter in the ERP system.
GET
/api/v2.1/work-centers
Get a list of WorkCenters from the ERP system that match the given filters.
GET
/api/v2.1/work-centers/{id}
Get an WorkCenters from the ERP system that matches the given unique ID.
GET
/api/v2.1/work-center-rate-breaks
Get a list of WorkCenterRateBreaks from the ERP system that match the given filters.
GET
/api/v2.1/view/ap-invoice-lines
Gets a list of APInvoiceLine
#
GET
/api/v2.1/view/ap-invoices
Gets a list of APInvoice
#
GET
/api/v2.1/view/ar-invoices
Gets a list of ARInvoice
#
GET
/api/v2.1/view/ar-invoice-sales-people
Gets a list of ARInvoiceSalesPerson
#
GET
/api/v2.1/view/cycle-codes
Gets a list of CycleCode
#
GET
/api/v2.1/view/departments
Gets a list of Department
#
GET
/api/v2.1/view/dmr-claim-lines
Gets a list of DmrClaimLine
#
GET
/api/v2.1/view/dmr-claims
Gets a list of DmrClaim
#
GET
/api/v2.1/view/employees
Gets a list of Employee
#
GET
/api/v2.1/view/gl-codes
Gets a list of GLCode
#
GET
/api/v2.1/view/inspection-lines
Gets a list of InspectionLine
#
GET
/api/v2.1/view/job-assemblies
Gets a list of JobAssembly
#
GET
/api/v2.1/view/job-materials
Gets a list of JobMaterial
#
GET
/api/v2.1/view/job-operations
Gets a list of JobOperation
#
GET
/api/v2.1/view/jobs
Gets a list of Job
#
GET
/api/v2.1/view/locations
Gets a list of Location
#
GET
/api/v2.1/view/organization-parts
Gets a list of OrganizationPart
#
GET
/api/v2.1/view/organizations
Gets a list of Organization
#
GET
/api/v2.1/view/part-bins
Gets a list of PartBin
#
GET
/api/v2.1/view/part-classes
Gets a list of PartClass
#
GET
/api/v2.1/view/part-cost-breaks
Gets a list of PartCostBreak
#
GET
/api/v2.1/view/part-costs
Gets a list of PartRevision
#
GET
/api/v2.1/view/part-groups
Gets a list of PartGroup
#
GET
/api/v2.1/view/part-materials
Gets a list of PartMaterial
#
GET
/api/v2.1/view/part-operations
Gets a list of PartOperation
#
GET
/api/v2.1/view/part-price-breaks
Gets a list of PartPriceBreak
#
GET
/api/v2.1/view/part-prices
Gets a list of PartPrice
#
GET
/api/v2.1/view/part-revisions
Gets a list of PartRevision
#
GET
/api/v2.1/view/parts
Gets a list of Part
#
GET
/api/v2.1/view/part-transactions
Gets a list of PartTransaction
#
GET
/api/v2.1/view/payment-terms
Gets a list of PaymentTerm
#
GET
/api/v2.1/view/plants
Gets a list of Plant
#
GET
/api/v2.1/view/processes
Gets a list of Process
#
GET
/api/v2.1/view/production-calendars
Gets a list of ProductionCalendar
#
GET
/api/v2.1/view/projects
Gets a list of Project
#
GET
/api/v2.1/view/purchase-order-lines
Gets a list of PurchaseOrderLine
#
GET
/api/v2.1/view/purchase-orders
Gets a list of PurchaseOrder
#
GET
/api/v2.1/view/quote-lines
Gets a list of QuoteLine
#
GET
/api/v2.1/view/quote-quantities
Provides a breakdown of pricing for quote line items based on any included quantity discounts.
#
GET
/api/v2.1/view/quotes
Gets a list of Quote
#
GET
/api/v2.1/view/quote-sales-people
Gets a list of QuoteSalesPerson
#
GET
/api/v2.1/view/reasons
Gets a list of Reason
#
GET
/api/v2.1/view/rma-claim-lines
Gets a list of RmaClaimLine
#
GET
/api/v2.1/view/rma-claims
Gets a list of RmaClaim
#
GET
/api/v2.1/view/rma-receipt-lines
Gets a list of RmaReceiptLine
#
GET
/api/v2.1/view/sales-accounts
Gets a list of SalesAccount
#
GET
/api/v2.1/view/sales-order-deliveries
Gets a list of SalesOrderDelivery
#
GET
/api/v2.1/view/sales-order-jobs
Gets a list of SalesOrderJob
#
GET
/api/v2.1/view/sales-order-lines
Gets a list of SalesOrderLine
#
GET
/api/v2.1/view/sales-orders
Gets a list of SalesOrder
#
GET
/api/v2.1/view/sales-order-sales-people
Gets a list of SalesOrderSalesPerson
#
GET
/api/v2.1/view/shift-days
Gets a list of ShiftDay
#
GET
/api/v2.1/view/shifts
Gets a list of Shift
#
GET
/api/v2.1/view/shipment-lines
Gets a list of ShipmentLine
#
GET
/api/v2.1/view/tax-codes
Gets a list of TaxCode
#
GET
/api/v2.1/view/timecard-lines
Gets a list of TimecardLine
#
GET
/api/v2.1/view/timecards
Gets a list of Timecard
#
GET
/api/v2.1/view/timezones
Gets a list of TimeZone
#
GET
/api/v2.1/view/work-center-rate-breaks
Gets a list of WorkCenterRateBreak
#
GET
/api/v2.1/view/work-centers
Gets a list of WorkCenter
#
Documentation
Specifications
Other Resources
Every API here is available over the APIs.io API and to AI agents over MCP.
{
"openapi": "3.0.1",
"info": {
"title": "ERP API v2.1",
"description": "Provides a common API surface for accessing ECI ERP products.\n\n<a name='erps'></a>\n## ERP Product Support\nThis version of the API is generally supported by:\n\n - Deacom\n - M1\n - JobBOSS²\n\nSupport for some resources varies, so check the *Supported ERPs* section on each resource\nto see if it's supported before using it.\n\nThe API user account used to access the ERP API determines which ERP Product, Customer, \nand any specific database (Instance) of that ERP that will be accessed. Depending on the product,\nthe actual ERP database could be a cloud hosted ERP or on premises install, therefore, performance\nof the API may vary dramatically.\n\nThe [user-info endpoint](#/Account/get_api_v1_user_info) in this API will provide basic information \nabout the user account and company being accessed, such as the companyId and product. \nIt should be noted that the **CompanyID** does not uniquely identify the instance being accessed via the API.\n\n## Authentication\nPass an access token in the HTTP Authorization header of each request. For example:\n\n```Authorization: Bearer [token]```\n\nAccess tokens are obtained from the Management API. See the <a href='https://integrations.ecimanufacturing.com/docs/apis/index.html#/OAuth2ApiUser/post_oauth2_api_user_token'>Management API OAuth 2.0 Token endpoint documentation</a> for more information.\n\n<a name='fields'></a>\n## Field Selection\nFor resources that support Field Selection, the `fields` parameter can be provided \nwith a comma separated list of fields to return in the result.\n\nFor example:\n\n```/api/v2/organizations?fields=name,country```\n\n<a name='filterexpr'></a>\n## Filter Expressions \n\nFor resources that support filtering, filter expressions can be applied as query string parameters in\nthe format ```field_name[operator]=value```\n\nNote, for simple equality, you can omit the operator and specify fieldname=value. e.g. ```?firstName=Jane```\n\n### Operators\n\n- [eq] Equal to the given value.\n- [ne] Not Equal to the given value.\n- [gte] Greater than or equal to the given value.\n- [lte] Less than or equal to the given value.\n- [gt] Greater than the given value.\n- [lt] Less than the given value.\n- [in] Is in a list of pipe separated values.\n- [notin] Is not in a list of pipe separated values.\n\n<a name='sortexpr'></a>\n## Sort Expressions\n\nFor resources that support sorting, the sort expression is specified by adding the ```sort``` query string parameter, with a comma separated list of expressions as its value,\neach expression having an optional prefix of + or - to indicate ascending or descending order.\n\nFor example:\n```\n?sort=firstname\n?sort=lastname,firstname\n?sort=-create_date\n```\n\n<a name='pageparam'></a>\n## Paging Parameters\n\nThe parameters ```take``` and ```skip``` can be provided separately but can be combined to implement server-side paging of results. \nSee the documentation for take and skip on each resource.\n\nFor example:\n```\n?take=100\n?take=100&skip=200\n```\n\n<a name='countparam'></a>\n## Count Parameter\n\nThe parameter ```count``` may be provided to change the data retrieval behavior.\n\nThe value of `0` returns the filtered, expanded, and paginated data in the `data` property of the response. The `count` property always contains the number of records in `data`. This is the default behavior when the `count` parameter is not provided.\n\nThe value of `1` returns an empty array in the `data` property and the total count of matching source records in the `count` property, applying any requested filters but ignoring any requested paging parameters.\n\nThe value of `2` returns both the `data` records, paginated if requested, and the `count` value with the total number of records in the source, ignoring pagination.\n\n```\n0 - Data Only\n1 - Total Count Only\n2 - Data and Total Count\n```\n\n## Expansions\n\nSome data sources have relationships that can be expanded. The list of supported\nexpansions is located in the documentation for each resource below.\n\nAn expansion expression is in the form:\n\n```expand=relationship_name(fields_expression)```\n\nfields_expression is optional.\n\nFor example, to expand the timecard for a timecard line\n\n```api/v1/view/timecardlines?expand=timecard```\n\nA resulting individual record would look like:\n\n```json\n{\n \"timecardID\": 5,\n \"timecard\": {\n \"timecardID\": 5,\n \"employeeID\": \"GROSE\",\n \"shiftID\": 1,\n \"timecardDate\": \"2000-11-06T00:00:00\",\n \"uniqueID\": \"389fcb16-8740-467f-9273-9c383f1472c9\",\n \"rowVersion\": 27569\n }\n}\n```\n\nTo select only specific fields from an expansion, use an inner fields expression.\n\n```api/v1/view/timecardlines?expand=timecard(fields=uniqueid,employeeID)```\n\nAnd the resulting record would look like:\n```json\n{\n \"timecardID\": 5,\n \"timecard\": {\n \"employeeID\": \"GROSE\",\n \"uniqueID\": \"389fcb16-8740-467f-9273-9c383f1472c9\"\n }\n}\n```\n\nExpansions can also be nested.\n\n```api/v1/view/timecardlines?expand=timecard(expand=employee)```\n\n\n## ConvertToUTC\nThe time zone in which Date/Time values are represented varies by ERP\nand some times data source. Pass the ConvertToUTC parameter\nwith a value of `yes` to indicate you want supported \ndate/time field values converted to UTC. \n\n```api/v1/view/timecardlines?ConvertToUTC=yes```\n\nSee resource specific documentation for which fields are supported.\n\n## Common Attributes\n### uniqueID\n\nThe ```uniqueID``` attribute, when present, uniquely identifies a record in the source system.\nThis identifier may not be globally unique. It is only guaranteed to be unique for the same resource\nand same Company account.\n\nIn general, the ERPs use the following data types in the uniqueID field:\n\n- Macola: GUID\n- M1: GUID\n- JobBOSS²: Int32\n\n### rowVersion\n\nThe value of the rowVersion attribute is a 64bit signed integer. This value can be used to query for \nnew or modified records in most resources. New and updated records will always receive a value higher than the\nrowVersion of any other record in the source data. There may be some variations in the implementation of\nthis attribute across ERP products.\n\n## Tracing\n\nThis API supports [W3C Trace Context](https://www.w3.org/TR/trace-context/). TraceIDs will be\ngenerated for each request and returned in each response in a *traceid* header. You should\ncapture this value in any responses and consider logging it as part of any integration\nbeing built. \n\nWhen reporting problems with this API, the *traceid* in the response is the single most important piece\nof information you can provide.\n\n```\ntraceid: 00-e352fa809e1a5b47ba4d88f8182b36f4-44902b415c593c4f-00\n```\n\nIn addition, the traceid value is provided in the body of error responses.\n\n```json\n{\n \"type\": \"https://tools.ietf.org/html/rfc7231#section-6.5.4\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"traceId\": \"00-c2857fd044158e41bf73349e95208f1e-9476acc2107e274d-00\"\n}\n```\n\nA caller can also provide their own W3C Trace Context compliant trace id\nvia the ```traceparent``` heeder in a request.\n\n```\ntraceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01\n```\n\n## Error Responses\n\nError responses will typically be in in [RFC7807](https://datatracker.ietf.org/doc/html/rfc7807) \n\"Problem details\" format as show below:\n\n### A sample 404 Not Found\n```json\n{\n \"type\": \"https://tools.ietf.org/html/rfc7231#section-6.5.4\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"traceId\": \"00-c2857fd044158e41bf73349e95208f1e-9476acc2107e274d-00\"\n}\n```\n\n### A sample 500 Internal Server Error\n```json\n{\n \"type\": \"https://tools.ietf.org/html/rfc7231#section-6.6.1\",\n \"title\": \"An error occured while processing your request.\",\n \"status\": 500,\n \"traceId\": \"00-fd1c6ec035a01943bec2ffabf2f1d6e2-9601a3cae715e143-00\"\n}\n```\n\n## Response Headers\n\n- **traceid:** The W3C Trace Context (see above)\n- **erp-company-id**: A value identifying the ERP Company where the data in the response originated.\n- **erp-instance-id**: A value indicating the database instance being accessed. Note this value is presently not immutable, and may change periodically.\n- **cdc-request-id**: For requests that were executed via a Cognytics Data Connector request, this provides the CDC Request ID\n\n## Management Console\nUse the <a href='https://integrations.ecimanufacturing.com'>Integration Engine Management Console</a> to configure and monitor access to this API.\n\n\n## Contact Information\n\nThis API is maintained by the ECI Manufacturing Integration Team.\n",
"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"
}
],
"paths": {
"/api/v2.1/user-info": {
"get": {
"tags": [
"Account"
],
"summary": "Gets information about the current user accessing the API.",
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/UserInfoResponse"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserInfoResponse"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UserInfoResponse"
}
}
}
}
}
}
},
"/api/v2.1/contacts": {
"post": {
"tags": [
"Contact"
],
"summary": "Create a new Contact in the ERP system.",
"description": "## Supported ERPs\n - JobBOSS²\n",
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContactCreateModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ContactCreateModel"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ContactCreateModel"
}
}
}
},
"responses": {
"201": {
"description": "Created"
}
}
},
"get": {
"tags": [
"Contact"
],
"summary": "Get a list of Contacts from the ERP system that match the given filters.",
"description": "Gets a list of Contact.\n\n## Supported ERPs\n - M1\n - JobBOSS²\n - Macola\n## Resource Features\nFeature |Supported |Notes\n------------|------------|------------\nFilter Expressions|**Yes**| \nSort Expressions|**Yes**\nField Selection|**Yes**\nPagination|**Yes**\nUniqueID|uniqueID|\n## Features by Field\nField |Filterable |Sortable |Supported ERPs\n------------|------------|------------|------------\nuniqueID|Yes|Yes|M1, JobBOSS², Macola\nrowVersion|Yes|Yes|M1, JobBOSS², Macola\ncontactID|Yes|Yes|M1, JobBOSS², Macola\nname|Yes|Yes|M1, JobBOSS², Macola\norganizationID|Yes|Yes|M1, JobBOSS², Macola\norganizationTypes|Yes|Yes|JobBOSS²\nphoneNumber|Yes|Yes|M1, JobBOSS², Macola\nemailAddress|Yes|Yes|M1, JobBOSS², Macola\nisActive|Yes|Yes|M1, JobBOSS², Macola\ncomments|Yes|Yes|JobBOSS²\n",
"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 <a href='#sortexpr'>sort expressions</a>.",
"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": "<a href='#countparam'>Data and count</a> response behavior ",
"schema": {
"maximum": 2,
"minimum": 0,
"type": "integer"
}
},
{
"name": "filters",
"in": "query",
"description": "See <a href='#filterexpr'>Filter Expressions</a> 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": {
"uniqueID[eq]": "cc90686b-399e-4094-b431-fa462f84b0a8",
"rowVersion[gte]": 123,
"contactID[eq]": "abc123",
"name[eq]": "abc123",
"organizationID[eq]": "abc123",
"organizationTypes[gte]": 123,
"phoneNumber[eq]": "abc123",
"emailAddress[eq]": "abc123",
"isActive[eq]": true,
"comments[eq]": "abc123"
}
}
}
},
{
"name": "expand",
"in": "query",
"description": "### Supported Expansions\nAn expansion expression containing a comma separater list of relationships to expand.\nName |Value |Description\n------------|------------|-----------\norganization|Organizations|The organization to which the Contact belongs.\n",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ContactListResponse"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContactListResponse"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ContactListResponse"
}
}
}
}
}
}
},
"/api/v2.1/contacts/{id}": {
"get": {
"tags": [
"Contact"
],
"summary": "Get an Contact from the ERP system that matches the given unique ID.",
"description": "Gets a Contact by unique ID.\n\n## Supported ERPs\n - M1\n - JobBOSS²\n - Macola\n## Features by Field\nField |Supported ERPs\n------------|------------\nuniqueID||M1, JobBOSS², Macola\nrowVersion||M1, JobBOSS², Macola\ncontactID||M1, JobBOSS², Macola\nname||M1, JobBOSS², Macola\norganizationID||M1, JobBOSS², Macola\norganizationTypes||JobBOSS²\nphoneNumber||M1, JobBOSS², Macola\nemailAddress||M1, JobBOSS², Macola\nisActive||M1, JobBOSS², Macola\ncomments||JobBOSS²\n",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The ID of the contact",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/Contact"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/Contact"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/Contact"
}
}
}
}
}
}
},
"/api/v2.1/departments": {
"get": {
"tags": [
"Department"
],
"summary": "Get a list of Employees from the ERP system that match the given filters.",
"description": "Gets a list of Department.\n\n## Supported ERPs\n - M1\n - JobBOSS²\n - Macola\n - Deacom\n## Resource Features\nFeature |Supported |Notes\n------------|------------|------------\nFilter Expressions|**Yes**| \nSort Expressions|**Yes**\nField Selection|**Yes**\nPagination|**Yes**\nUniqueID|uniqueID|\n## Features by Field\nField |Filterable |Sortable |Supported ERPs\n------------|------------|------------|------------\ndeptID|Yes|Yes|M1, JobBOSS², Macola, Deacom\nshortDesc|Yes|Yes|M1, JobBOSS², Macola, Deacom\nuniqueID|Yes|Yes|M1, JobBOSS², Macola, Deacom\nrowVersion|Yes|Yes|M1, JobBOSS², Macola, Deacom\n",
"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 <a href='#sortexpr'>sort expressions</a>.",
"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": "<a href='#countparam'>Data and count</a> response behavior ",
"schema": {
"maximum": 2,
"minimum": 0,
"type": "integer"
}
},
{
"name": "filters",
"in": "query",
"description": "See <a href='#filterexpr'>Filter Expressions</a> 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": {
"deptID[eq]": "abc123",
"shortDesc[eq]": "abc123",
"uniqueID[eq]": "cc90686b-399e-4094-b431-fa462f84b0a8",
"rowVersion[gte]": 123
}
}
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DepartmentListResponse"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DepartmentListResponse"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DepartmentListResponse"
}
}
}
}
}
}
},
"/api/v2.1/departments/{id}": {
"get": {
"tags": [
"Department"
],
"summary": "Get a Department from the ERP system that matches the given unique ID.",
"description": "Gets a Department by unique ID.\n\n## Supported ERPs\n - M1\n - JobBOSS²\n - Macola\n - Deacom\n## Features by Field\nField |Supported ERPs\n------------|------------\ndeptID||M1, JobBOSS², Macola, Deacom\nshortDesc||M1, JobBOSS², Macola, Deacom\nuniqueID||M1, JobBOSS², Macola, Deacom\nrowVersion||M1, JobBOSS², Macola, Deacom\n",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The ID of the Department",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/Department"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/Department"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/Department"
}
}
}
}
}
}
},
"/api/v2.1/employees": {
"get": {
"tags": [
"Employee"
],
"summary": "Get a list of Employees from the ERP system that match the given filters.",
"description": "Gets a list of Employee.\n\n## Supported ERPs\n - M1\n - JobBOSS²\n - Macola\n - Deacom\n## Resource Features\nFeature |Supported |Notes\n------------|------------|------------\nFilter Expressions|**Yes**| \nSort Expressions|**Yes**\nField Selection|**Yes**\nPagination|**Yes**\nUniqueID|uniqueID|\n## Features by Field\nField |Filterable |Sortable |Supported ERPs\n------------|------------|------------|------------\nemployeeID|Yes|Yes|M1, JobBOSS², Macola, Deacom\nfirstName|Yes|Yes|M1, JobBOSS², Macola, Deacom\nlastName|Yes|Yes|M1, JobBOSS², Macola, Deacom\ntitle|Yes|Yes|M1, JobBOSS², Macola, Deacom\nsupervisorEmployeeID|Yes|Yes|M1, JobBOSS², Macola, Deacom\npayRate|Yes|Yes|M1, JobBOSS², Macola, Deacom\ndeptID|Yes|Yes|M1, JobBOSS², Macola, Deacom\nshiftID|Yes|Yes|M1, JobBOSS², Macola, Deacom\nisActive|Yes|Yes|JobBOSS², Deacom\nuniqueID|Yes|Yes|M1, JobBOSS², Macola, Deacom\nrowVersion|Yes|Yes|M1, JobBOSS², Macola, Deacom\n",
"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 <a href='#sortexpr'>sort expressions</a>.",
"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": "<a href='#countparam'>Data and count</a> response behavior ",
"schema": {
"maximum": 2,
"minimum": 0,
"type": "integer"
}
},
{
"name": "filters",
"in": "query",
"description": "See <a href='#filterexpr'>Filter Expressions</a> 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": {
"employeeID[eq]": "abc123",
"firstName[eq]": "abc123",
"lastName[eq]": "abc123",
"title[eq]": "abc123",
"supervisorEmployeeID[eq]": "abc123",
"payRate[gte]": 123,
"deptID[eq]": "abc123",
"shiftID[eq]": "abc123",
"isActive[eq]": true,
"uniqueID[eq]": "cc90686b-399e-4094-b431-fa462f84b0a8",
"rowVersion[gte]": 123
}
}
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/EmployeeListResponse"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/EmployeeListResponse"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/EmployeeListResponse"
}
}
}
}
}
}
},
"/api/v2.1/employees/{id}": {
"get": {
"tags": [
"Employee"
],
"summary": "Get an Employee from the ERP system that matches the given unique ID.",
"description": "Gets a Employee by unique ID.\n\n## Supported ERPs\n - M1\n - JobBOSS²\n - Macola\n - Deacom\n## Features by Field\nField |Supported ERPs\n------------|------------\nemployeeID||M1, JobBOSS², Macola, Deacom\nfirstName||M1, JobBOSS², Macola, Deacom\nlastName||M1, JobBOSS², Macola, Deacom\ntitle||M1, JobBOSS², Macola, Deacom\nsupervisorEmployeeID||M1, JobBOSS², Macola, Deacom\npayRate||M1, JobBOSS², Macola, Deacom\ndeptID||M1, JobBOSS², Macola, Deacom\nshiftID||M1, JobBOSS², Macola, Deacom\nisActive||JobBOSS², Deacom\nuniqueID||M1, JobBOSS², Macola, Deacom\nrowVersion||M1, JobBOSS², Macola, Deacom\n",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The ID of the Employee",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/Employee"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/Employee"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/Employee"
}
}
}
}
}
}
},
"/api/v2.1/gl-codes": {
"get": {
"tags": [
"GLCode"
],
"summary": "Get a list of GLCodes from the ERP system that match the given filters.",
"description": "Gets a list of GLCode.\n\n## Supported ERPs\n - JobBOSS²\n## Resource Features\nFeature |Supported |Notes\n------------|------------|------------\nFilter Expressions|**Yes**| \nSort Expressions|**Yes**\nField Selection|**Yes**\nPagination|**Yes**\nUniqueID|uniqueID|\n## Features by Field\nField |Filterable |Sortable |Supported ERPs\n------------|------------|------------|------------\ndescription|<span style='color:red'>No</span>|Yes|JobBOSS²\nglCodeID|Yes|Yes|JobBOSS²\nrowVersion|Yes|Yes|JobBOSS²\nuniqueID|Yes|Yes|JobBOSS²\nisActive|Yes|Yes|JobBOSS²\n",
"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 <a href='#sortexpr'>sort expressions</a>.",
"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": "<a href='#countparam'>Data and count</a> response behavior ",
"schema": {
"maximum": 2,
"minimum": 0,
"type": "integer"
}
},
{
"name": "filters",
"in": "query",
"description": "See <a href='#filterexpr'>Filter Expressions</a> 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": {
"glCodeID[eq]": "abc123",
"rowVersion[gte]": 123,
"uniqueID[eq]": "cc90686b-399e-4094-b431-fa462f84b0a8",
"isActive[eq]": true
}
}
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/GLCodeListResponse"
# --- truncated at 32 KB (723 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/eci-solutions/refs/heads/main/openapi/eci-solutions-erp-v2-1-openapi.json