Item identifier values
The actual serials and lots in stock, per item and location. quantityonhand and quantityavailable are generated columns and are never writable.
The object#
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| itemid | integer | Itemid. Id only. |
| item | string(30) | Item number (item.itemnum) instead of the id. |
| itemidentifierid | integer | Itemidentifierid. Id only. |
| itemidentifiervalue | string(255) | The recorded identifier value (serial or lot number). |
| itemidentifiervaluedate | string | The value parsed as a date, when the identifier is date-typed (expiration dates). |
| quantityreceivedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantitycommittedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantityusedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| itemidentifierdetailgroupidread-only | integer | Groups values received together. There is no such table - it is an internal grouping key assigned on receipt. Read-only. |
| inventorylocationid | integer | Inventorylocationid. Id only. |
| inventorylocation | string(50) | Location name instead of the id. |
| quantityonhandread-onlyqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantityavailableread-onlyqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| hasquantityonhandread-only | boolean | STORED GENERATED in the database. Read-only - MySQL computes it. |
| hasquantityavailableread-only | boolean | STORED GENERATED in the database. Read-only - MySQL computes it. |
| cancel | boolean | Cancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable. |
| externalid | string(100) | Your own key. Scoped to your company. |
Endpoints#
POST/itemidentifierdetails/batch
207
Create many.
Requires scope items:write.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
Body array
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| itemid | integer | Itemid. Id only. |
| item | string(30) | Item number (item.itemnum) instead of the id. |
| itemidentifierid | integer | Itemidentifierid. Id only. |
| itemidentifiervalue | string(255) | The recorded identifier value (serial or lot number). |
| itemidentifiervaluedate | string | The value parsed as a date, when the identifier is date-typed (expiration dates). |
| quantityreceivedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantitycommittedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantityusedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| itemidentifierdetailgroupidread-only | integer | Groups values received together. There is no such table - it is an internal grouping key assigned on receipt. Read-only. |
| inventorylocationid | integer | Inventorylocationid. Id only. |
| inventorylocation | string(50) | Location name instead of the id. |
| quantityonhandread-onlyqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantityavailableread-onlyqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| hasquantityonhandread-only | boolean | STORED GENERATED in the database. Read-only - MySQL computes it. |
| hasquantityavailableread-only | boolean | STORED GENERATED in the database. Read-only - MySQL computes it. |
| cancel | boolean | Cancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable. |
| externalid | string(100) | Your own key. Scoped to your company. |
curl -X POST \ 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails/batch' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '[ { "itemid": 104, "item": "Example item", "itemidentifierid": 104, "itemidentifiervalue": "Example itemidentifiervalue", "itemidentifiervaluedate": "2026-08-01", "quantityreceived": "1.000000" } ]'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/itemidentifierdetails/batch'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode([ [ 'itemid' => 104, 'item' => 'Example item', 'itemidentifierid' => 104, 'itemidentifiervalue' => 'Example itemidentifiervalue', 'itemidentifiervaluedate' => '2026-08-01', 'quantityreceived' => '1.000000', ], ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.post( "https://acme.nolapro.com/!/api/v2/itemidentifierdetails/batch", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json=[ { "itemid": 104, "item": "Example item", "itemidentifierid": 104, "itemidentifiervalue": "Example itemidentifiervalue", "itemidentifiervaluedate": "2026-08-01", "quantityreceived": "1.000000", }, ], ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails/batch', { method: 'POST', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify([ { itemid: 104, item: "Example item", itemidentifierid: 104, itemidentifiervalue: "Example itemidentifiervalue", itemidentifiervaluedate: "2026-08-01", quantityreceived: "1.000000", }, ]), } ); const data = await res.json();
using System.Net.Http.Json; var token = Environment.GetEnvironmentVariable("NP_TOKEN"); using var http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); var body = new[] { new { itemid = 104, item = "Example item", itemidentifierid = 104, itemidentifiervalue = "Example itemidentifiervalue", itemidentifiervaluedate = "2026-08-01", quantityreceived = "1.000000", }, }; var req = new HttpRequestMessage(HttpMethod.Post, "https://acme.nolapro.com/!/api/v2/itemidentifierdetails/batch") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
GET/itemidentifierdetails
200403
List item identifier values.
Requires scope items:read.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
| itemid | query | string | Restrict to one itemid. |
| inventorylocationid | query | string | Restrict to one inventorylocationid. |
| itemidentifierid | query | string | Restrict to one itemidentifierid. |
| itemidentifiervalue | query | string | Partial match, case insensitive. |
| cancel | query | string | Defaults to false. Pass true or any. |
| externalid | query | string | Exact match on your own key. |
| include | query | string | Comma-separated extras to embed. Only custom_fields is available: the extra fields this install has defined on the record. Off by default, and an unrecognised value is refused rather than ignored. See Conventions. |
When it fails
| Status | Code | Meaning |
|---|---|---|
| 403 | insufficient_scope | Token lacks read scope. |
curl \ 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/itemidentifierdetails'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.get( "https://acme.nolapro.com/!/api/v2/itemidentifierdetails", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails', { method: 'GET', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, } ); const data = await res.json();
using System.Net.Http.Json; var token = Environment.GetEnvironmentVariable("NP_TOKEN"); using var http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); var res = await http.GetAsync( "https://acme.nolapro.com/!/api/v2/itemidentifierdetails"); res.EnsureSuccessStatusCode();
POST/itemidentifierdetails
201400
Create.
Requires scope items:write.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
Body
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| itemid | integer | Itemid. Id only. |
| item | string(30) | Item number (item.itemnum) instead of the id. |
| itemidentifierid | integer | Itemidentifierid. Id only. |
| itemidentifiervalue | string(255) | The recorded identifier value (serial or lot number). |
| itemidentifiervaluedate | string | The value parsed as a date, when the identifier is date-typed (expiration dates). |
| quantityreceivedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantitycommittedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantityusedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| itemidentifierdetailgroupidread-only | integer | Groups values received together. There is no such table - it is an internal grouping key assigned on receipt. Read-only. |
| inventorylocationid | integer | Inventorylocationid. Id only. |
| inventorylocation | string(50) | Location name instead of the id. |
| quantityonhandread-onlyqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantityavailableread-onlyqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| hasquantityonhandread-only | boolean | STORED GENERATED in the database. Read-only - MySQL computes it. |
| hasquantityavailableread-only | boolean | STORED GENERATED in the database. Read-only - MySQL computes it. |
| cancel | boolean | Cancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable. |
| externalid | string(100) | Your own key. Scoped to your company. |
When it fails
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | A required field was missing. |
curl -X POST \ 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '{ "itemid": 104, "item": "Example item", "itemidentifierid": 104, "itemidentifiervalue": "Example itemidentifiervalue", "itemidentifiervaluedate": "2026-08-01", "quantityreceived": "1.000000" }'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/itemidentifierdetails'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode([ 'itemid' => 104, 'item' => 'Example item', 'itemidentifierid' => 104, 'itemidentifiervalue' => 'Example itemidentifiervalue', 'itemidentifiervaluedate' => '2026-08-01', 'quantityreceived' => '1.000000', ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.post( "https://acme.nolapro.com/!/api/v2/itemidentifierdetails", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json={ "itemid": 104, "item": "Example item", "itemidentifierid": 104, "itemidentifiervalue": "Example itemidentifiervalue", "itemidentifiervaluedate": "2026-08-01", "quantityreceived": "1.000000", }, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails', { method: 'POST', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify({ itemid: 104, item: "Example item", itemidentifierid: 104, itemidentifiervalue: "Example itemidentifiervalue", itemidentifiervaluedate: "2026-08-01", quantityreceived: "1.000000", }), } ); const data = await res.json();
using System.Net.Http.Json; var token = Environment.GetEnvironmentVariable("NP_TOKEN"); using var http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); var body = new { itemid = 104, item = "Example item", itemidentifierid = 104, itemidentifiervalue = "Example itemidentifiervalue", itemidentifiervaluedate = "2026-08-01", quantityreceived = "1.000000", }; var req = new HttpRequestMessage(HttpMethod.Post, "https://acme.nolapro.com/!/api/v2/itemidentifierdetails") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
Response 201
{
"itemid": 104,
"item": "Example item",
"itemidentifierid": 104,
"itemidentifiervalue": "Example itemidentifiervalue",
"itemidentifiervaluedate": "2026-08-01",
"quantityreceived": "1.000000"
}
GET/itemidentifierdetails/{id}
200404
Retrieve one record.
Requires scope items:read.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The record id. |
| include | query | string | Comma-separated extras to embed. Only custom_fields is available: the extra fields this install has defined on the record. Off by default, and an unrecognised value is refused rather than ignored. See Conventions. |
When it fails
| Status | Code | Meaning |
|---|---|---|
| 404 | not_found | No record with that id. |
curl \ 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.get( "https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104', { method: 'GET', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, } ); const data = await res.json();
using System.Net.Http.Json; var token = Environment.GetEnvironmentVariable("NP_TOKEN"); using var http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); var res = await http.GetAsync( "https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104"); res.EnsureSuccessStatusCode();
Response 200
{
"itemid": 104,
"item": "Example item",
"itemidentifierid": 104,
"itemidentifiervalue": "Example itemidentifiervalue",
"itemidentifiervaluedate": "2026-08-01",
"quantityreceived": "1.000000"
}
PATCH/itemidentifierdetails/{id}
200404
Update.
Requires scope items:write.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The record id. |
Body
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| itemid | integer | Itemid. Id only. |
| item | string(30) | Item number (item.itemnum) instead of the id. |
| itemidentifierid | integer | Itemidentifierid. Id only. |
| itemidentifiervalue | string(255) | The recorded identifier value (serial or lot number). |
| itemidentifiervaluedate | string | The value parsed as a date, when the identifier is date-typed (expiration dates). |
| quantityreceivedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantitycommittedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantityusedqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| itemidentifierdetailgroupidread-only | integer | Groups values received together. There is no such table - it is an internal grouping key assigned on receipt. Read-only. |
| inventorylocationid | integer | Inventorylocationid. Id only. |
| inventorylocation | string(50) | Location name instead of the id. |
| quantityonhandread-onlyqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| quantityavailableread-onlyqty | string(6dp) | Quantity, 6 decimal places, as a string. Stored as decimal(6dp). |
| hasquantityonhandread-only | boolean | STORED GENERATED in the database. Read-only - MySQL computes it. |
| hasquantityavailableread-only | boolean | STORED GENERATED in the database. Read-only - MySQL computes it. |
| cancel | boolean | Cancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable. |
| externalid | string(100) | Your own key. Scoped to your company. |
When it fails
| Status | Code | Meaning |
|---|---|---|
| 404 | not_found | No record with that id. |
curl -X PATCH \ 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '{ "itemid": 104, "item": "Example item", "itemidentifierid": 104, "itemidentifiervalue": "Example itemidentifiervalue", "itemidentifiervaluedate": "2026-08-01", "quantityreceived": "1.000000" }'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_POSTFIELDS => json_encode([ 'itemid' => 104, 'item' => 'Example item', 'itemidentifierid' => 104, 'itemidentifiervalue' => 'Example itemidentifiervalue', 'itemidentifiervaluedate' => '2026-08-01', 'quantityreceived' => '1.000000', ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.patch( "https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json={ "itemid": 104, "item": "Example item", "itemidentifierid": 104, "itemidentifiervalue": "Example itemidentifiervalue", "itemidentifiervaluedate": "2026-08-01", "quantityreceived": "1.000000", }, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104', { method: 'PATCH', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify({ itemid: 104, item: "Example item", itemidentifierid: 104, itemidentifiervalue: "Example itemidentifiervalue", itemidentifiervaluedate: "2026-08-01", quantityreceived: "1.000000", }), } ); const data = await res.json();
using System.Net.Http.Json; var token = Environment.GetEnvironmentVariable("NP_TOKEN"); using var http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); var body = new { itemid = 104, item = "Example item", itemidentifierid = 104, itemidentifiervalue = "Example itemidentifiervalue", itemidentifiervaluedate = "2026-08-01", quantityreceived = "1.000000", }; var req = new HttpRequestMessage(HttpMethod.Patch, "https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
Response 200
{
"itemid": 104,
"item": "Example item",
"itemidentifierid": 104,
"itemidentifiervalue": "Example itemidentifiervalue",
"itemidentifiervaluedate": "2026-08-01",
"quantityreceived": "1.000000"
}
DELETE/itemidentifierdetails/{id}
200404
Cancel.
Requires scope items:cancel.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The record id. |
When it fails
| Status | Code | Meaning |
|---|---|---|
| 404 | not_found | No record with that id. |
curl -X DELETE \ 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'DELETE', ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.delete( "https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104', { method: 'DELETE', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, } ); const data = await res.json();
using System.Net.Http.Json; var token = Environment.GetEnvironmentVariable("NP_TOKEN"); using var http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); var req = new HttpRequestMessage(HttpMethod.Delete, "https://acme.nolapro.com/!/api/v2/itemidentifierdetails/104"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
Response 200
{
"itemid": 104,
"item": "Example item",
"itemidentifierid": 104,
"itemidentifiervalue": "Example itemidentifiervalue",
"itemidentifiervaluedate": "2026-08-01",
"quantityreceived": "1.000000"
}
Identifier movements →
Read-only. Which serials and lots moved on which shipment or receipt. Written by the transaction that moved them, never directly - a movement with no transaction behind it would be a stock record nothing can explain.
Customers →
The companies you invoice. A customer carries terms, credit limit, tax group, and any number of ship-to addresses.