Skip to content
REST API

Items Endpoint

List your team's items, read one item with all its part numbers, and push items from an ERP.
GET https://api.elexess.com/functions/v1/items

Items are your team's own part numbers. Each item can hold several manufacturer part numbers, each approved, in qualification or blocked. Team admins create and edit items on the Items page of the dashboard, including CSV import and export. An ERP without a connector can push its items here. To search an item live across the suppliers, use the search endpoint with mode=item.

Authentication

  • Reads: JWT or team API token (el_live_*)
  • Pushes (POST, DELETE): a team API token with the items:write scope
  • Other methods return 405

List Items

GET /functions/v1/items?q=NM-1&limit=50&offset=0
ParameterTypeRequiredDescription
qstringNoMatches the item number, a linked manufacturer part number or the customer part number, ignoring case (max 256 characters)
limitnumberNoPage size (default 50, max 200)
offsetnumberNoPagination offset (default 0)
team_idnumberNoTeam to read. A user must be an active member; an API token can only read its own team

Items are sorted by item number.

{
  "team_id": 7,
  "total": 1,
  "limit": 50,
  "offset": 0,
  "items": [
    {
      "id": 54,
      "item_number": "NM-10045",
      "description": "Op-amp, dual",
      "note": null,
      "customer_name": "ACME GmbH",
      "customer_part_number": "K-4711",
      "source": "csv",
      "external_ref": null,
      "observed_at": "2026-10-20T08:15:00Z",
      "updated_at": "2026-10-20T08:15:00Z",
      "links": [
        {
          "id": 301,
          "manufacturer_part_number": "LM358DR",
          "manufacturer_name": "TI",
          "manufacturer_id": 12,
          "manufacturer": "Texas Instruments",
          "part_id": 12345,
          "approval_status": "approved",
          "lifecycle": "Active",
          "preference": 0,
          "note": null,
          "source": "csv"
        }
      ]
    }
  ]
}

Fields:

  • customer_name and customer_part_number are set for items you make for a customer, otherwise null.
  • source is manual (entered in the dashboard), csv (imported), api or connector (managed by your integration).
  • links are the item's manufacturer part numbers: approved first, then in qualification, then blocked, each group by preference. manufacturer_name is the name as entered, and manufacturer the matching catalog manufacturer, or null when it is not matched yet. part_id links to the parts endpoint once the part is in the catalog.
  • A link id can be passed in link_ids to the search endpoint to search only some of an item's part numbers.

Get One Item

GET /functions/v1/items?id=54
GET /functions/v1/items?item_number=NM-10045

Pass either id or item_number, not both. item_number must match exactly, ignoring case and surrounding spaces. team_id works as for the list.

{
  "team_id": 7,
  "item": {
    "id": 54,
    "item_number": "NM-10045",
    "links": []
  }
}

item has the same fields as a list entry (shortened here).

Push Items

POST /functions/v1/items

Sends up to 100 items from your ERP in one call, in the item shape of the connector contract. The body may be at most 2 MiB.

{
  "items": [
    {
      "item_number": "NM-10045",
      "external_ref": "ITEM-10045",
      "version": 1730620800,
      "description": "Op-amp, dual",
      "customer_name": null,
      "customer_part_number": null,
      "links": [
        { "part_number": "LM358DR", "manufacturer": "Texas Instruments", "approval_status": "approved", "lifecycle": "Active" }
      ]
    }
  ]
}
  • external_ref is the item's id in your ERP (max 256 characters) and version a positive integer that grows with every change, such as a modification timestamp.
  • item_number and customer_part_number are at most 128 characters. links is required (it may be empty) and replaces the item's pushed part numbers. approval_status is approved, qualification or blocked; lifecycle is one of Active, New, NRND, LTB, EOL, Obsolete, Inactive or null.
  • Pushed items get source: "connector". They are managed by your ERP, so the dashboard cannot edit them.
{
  "team_id": 7,
  "counts": { "created": 1, "updated": 0, "unchanged": 0, "stale": 0, "conflict": 0, "invalid": 0 },
  "results": [
    { "external_ref": "ITEM-10045", "item_number": "NM-10045", "item_id": 54, "outcome": "created", "link_conflicts": 0, "links_skipped": 0 }
  ]
}

Each item gets one outcome:

OutcomeMeaning
created, updatedStored
unchangedSame version as stored; nothing changed
staleOlder version than stored; ignored
conflictThe item number belongs to another item, for example one your team entered (conflict_item_id, conflict_source)
invalidThe item failed validation

link_conflicts counts part numbers your team already manages on the item; they stay as they are. links_skipped counts invalid part numbers.

A team whose integration syncs items gets them from its connector only. Pushes then answer 409 with code: "connector_syncs_items".

Remove a Pushed Item

DELETE /functions/v1/items?external_ref=ITEM-10045&version=1730620900
DELETE /functions/v1/items?item_number=NM-10045

Pass external_ref or item_number. With version, an item stored at a newer version stays. The answer is {"team_id": 7, "outcome": "..."} with deleted, released (your team added part numbers of its own, so the item stays as a team item with those), stale or absent.

Error Responses

StatusBodyWhen
400{"error":"id must be a positive integer"}Invalid id
400{"error":"team_id must be a positive integer"}Invalid team_id
400{"error":"Pass id or item_number, not both"}Both given
400{"error":"Items need a team"}The user belongs to no team
401{"error":"Unauthorized"}Missing or invalid token
403{"error":"Forbidden"}team_id names a team the caller cannot read
404{"error":"Item not found"}No item with this id or item_number in the team
400{"error":"items must be an array of 1 to 100 items"}Push body is not a batch of 1 to 100 items
400{"error":"Pass external_ref or item_number"}Remove without exactly one of them
403{"error":"…","code":"insufficient_scope"}Push without a token that has items:write
405{"error":"Method not allowed. …"}Any method other than GET, POST or DELETE
409{"error":"…","code":"connector_syncs_items"}Push to a team whose connector syncs items
413{"error":"Body is larger than …"}Push body over 2 MiB
500{"error":"Failed to load items"}, {"error":"Failed to write items"}Internal error
503{"error":"Upstream temporarily unavailable"}Transient failure; retry after Retry-After