Items Endpoint
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 theitems:writescope - Other methods return
405
List Items
GET /functions/v1/items?q=NM-1&limit=50&offset=0
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | No | Matches the item number, a linked manufacturer part number or the customer part number, ignoring case (max 256 characters) |
limit | number | No | Page size (default 50, max 200) |
offset | number | No | Pagination offset (default 0) |
team_id | number | No | Team 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_nameandcustomer_part_numberare set for items you make for a customer, otherwisenull.sourceismanual(entered in the dashboard),csv(imported),apiorconnector(managed by your integration).linksare the item's manufacturer part numbers: approved first, then in qualification, then blocked, each group bypreference.manufacturer_nameis the name as entered, andmanufacturerthe matching catalog manufacturer, ornullwhen it is not matched yet.part_idlinks to the parts endpoint once the part is in the catalog.- A link
idcan be passed inlink_idsto 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_refis the item's id in your ERP (max 256 characters) andversiona positive integer that grows with every change, such as a modification timestamp.item_numberandcustomer_part_numberare at most 128 characters.linksis required (it may be empty) and replaces the item's pushed part numbers.approval_statusisapproved,qualificationorblocked;lifecycleis one ofActive,New,NRND,LTB,EOL,Obsolete,Inactiveornull.- 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:
| Outcome | Meaning |
|---|---|
created, updated | Stored |
unchanged | Same version as stored; nothing changed |
stale | Older version than stored; ignored |
conflict | The item number belongs to another item, for example one your team entered (conflict_item_id, conflict_source) |
invalid | The 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
| Status | Body | When |
|---|---|---|
| 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 |