Items
Inventory and non-inventory items. Stock levels are per location and are never written directly, only moved.
You cannot set onhand. Quantity changes come from receipts, shipments, and adjustments so that cost layers and the inventory GL account stay in step.
The object#
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| itemcode | string(255) | Item code (SKU) - the human key used across NolaPro. |
| compositeitemyesno | integer | 1 when the item is a composite built from component items (bill of materials). |
| description | string(100) | Item description shown on documents and lookups. |
| categoryid | integer | Categoryid. Id only. |
| stockunitnameid | integer | Stockunitnameid. Id only. |
| stockunitname | string(50) | The unitname of the referenced unitnames, instead of the id. Send this or stockunitnameid, not both unless they agree. |
| priceunitnameid | integer | Priceunitnameid. Id only. |
| priceunitname | string(50) | The unitname of the referenced unitnames, instead of the id. Send this or priceunitnameid, not both unless they agree. |
| lbsperpriceunitnumber | string | Numeric string. Not money - do not apply currency rounding. |
| priceunitsperstockunitnumber | string(10dp) | Numeric string, 10 decimal places. Not money - do not apply currency rounding. |
| stockunitsperpriceunitnumber | string(6dp) | Numeric string, 6 decimal places. Not money - do not apply currency rounding. |
| inventoryglacctid | integer | Inventoryglacctid. Id only. |
| inventoryglacct | string(20) | The name of the referenced glaccounts, instead of the id. Send this or inventoryglacctid, not both unless they agree. |
| salesglacctid | integer | Salesglacctid. Id only. |
| salesglacct | string(20) | The name of the referenced glaccounts, instead of the id. Send this or salesglacctid, not both unless they agree. |
| widthmoney | string | Stored as double. |
| lengthmoney | string | Stored as double. |
| mwtmoney | string | Stored as double. |
| cogs | integer | Cost of goods sold. |
| cogseffectivedate | string | Date the cost of goods sold figure takes effect. |
| middlemanpricemoney | string | Stored as double. |
| pricemoney | string | Stored as double. |
| priceeffectivedate | string | Date the price takes effect. |
| status | boolean | True when the item is marked Inactive on the item screens - hidden from lookups, kept for history. Not the same as cancel. |
| id_item_useinstead | integer | Replacement item to use instead of this one, shown when this item is discontinued. |
| invtype | integer | Item type: 1 = physical, 2 = print-on-demand (POD - costed at static cost, no stock tracking), 3 = finished goods. 0 on older records. |
| catalogdescription | text | Catalogdescription. Stored as text, no practical length limit. |
| products_website | string(255) | Product webpage URL shown in the web store. |
| catalogsheeturl | text | URL of the item’s catalog sheet, shown in the web store. |
| graphicurl | text | URL or filename of the item’s picture. |
| pdffile | text | PDF file attached to the item for the web store. |
| videofile | text | Video file attached to the item for the web store. |
| soundfile | text | Sound file attached to the item for the web store. |
| cancel | boolean | Cancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable. |
| entrydateread-only | string | When the record was created. |
| lastchangedateread-only | string | Last modification. Drives modifiedsince. |
| products_quantityread-only | integer | Quantity mirror maintained in the osCommerce-style web store tables. Maintained by the cart sync, so it cannot be written through the API. |
| products_viewedread-only | integer | View counter maintained by the web store. Cannot be written through the API. |
| products_status | boolean | Web store visibility flag from the osCommerce-style product tables. |
| products_tax_class_idread-only | integer | Legacy osCommerce column. The products_tax_class table does not exist in NolaPro and every row holds 0, so this can never resolve to anything. Read-only, and kept only because the column is still on the table. |
| products_costpricemoney | string(2dp) | Stored as decimal(8,2). |
| products_pushupmoney | string(2dp) | Stored as decimal(4,2). |
| scart | integer | 1 shows the item in the B2B shopping cart. |
| parentitemid | integer | Parentitemid. Id only. |
| scart_minqtydisplay | integer | Minimum on-hand quantity before the cart shows availability; the Shopify sync maps it to the no-back-orders flag. |
| taxexempt | boolean | True when the item is never taxed, regardless of the customer’s tax setup. |
| calipermoney | string(4dp) | Stored as decimal(10,4). |
| upc | string(255) | Universal Product Code. |
| author | text | Author, for book and media items in the web store. |
| notes | text | Notes. Stored as text, no practical length limit. |
| b2b_block | boolean | True blocks the item from B2B orders (Block Usage On B2B Orders). |
| pos_block | boolean | True hides the item from Point of Sale. |
| gbaseidread-only | string(100) | Submission id from the legacy Google Base product feed. |
| gbasedateread-only | string | When the item was last submitted to the legacy Google Base product feed. |
| commissionflatmoney | string(6dp) | Stored as decimal(19,6). |
| commissionpercentnumber | string(2dp) | Numeric string, 2 decimal places. Not money - do not apply currency rounding. |
| staticcostmoney | string(5dp) | Stored as decimal(19,5). |
| minpmmoney | string(2dp) | Stored as decimal(6,2). |
| restockdate | string | Expected restock date, shown to buyers when the item is out of stock. |
| customerid | integer | Reference to customers, by id. Write either this or customer. |
| customer | string(30) | Code for the referenced customer, instead of the id. |
| commoditycode | string(10) | Commodity Code from the item screen, used on customs and freight paperwork. |
| defaultlinenote | text | Defaultlinenote. Stored as text, no practical length limit. |
| inventorytype | string(1) | S = stocked, N = non-stocked, O = other charges. Non-stocked and other-charge items carry no on-hand quantity and cost at static cost. |
| last3dcartstockupdateread-only | string | When the Shift4Shop (3DCart) sync last pushed a stock level for this item. Maintained by the sync, so it cannot be written through the API. |
| listonebay | boolean | True marks the item for eBay listing (List On eBay). |
| lockpricecost | boolean | True locks price and cost during a sale (Lock Price & Cost During Sale) so line edits cannot change them. |
| mobile_pos | boolean | True shows the item in the mobile Point of Sale (Show In Mobile POS). |
| notforsale | integer | 1 marks the item Not For Sale - usable internally but blocked from sales documents. |
| rental | integer | 1 when the item is a rental item. |
| shipheightmoney | string(2dp) | Stored as decimal(7,2). |
| shiplengthmoney | string(2dp) | Stored as decimal(7,2). |
| shippingmarkupmoney | string(6dp) | Stored as decimal(19,6). |
| shipsbyitself | integer | 1 when the item ships in its own package rather than being combined (Ships By Itself). |
| shipwidthmoney | string(2dp) | Stored as decimal(7,2). |
| taxclassid | integer | Taxclassid. Id only. |
| taxclass | string(100) | The name of the referenced taxclasses, instead of the id. Send this or taxclassid, not both unless they agree. |
| accruedpurchasesglid | integer | GL account purchases accrue to. Write either this or accruedpurchasesgl. |
| accruedpurchasesgl | string(20) | GL account NUMBER (glaccount.name) instead of the id. The sibling of accruedpurchasesglid, matching how salesglacct and inventoryglacct already work on this resource. |
| allownegqtysalesoverride | integer | 1 allows negative-quantity sale lines for this item (Allow Negative Quantity Sales), priced by negativesalesruletype. |
| buyeruserid | integer | Buyeruserid. Id only. |
| buyeruser | string(50) | The name of the referenced genusers, instead of the id. Send this or buyeruserid, not both unless they agree. |
| expiredays | integer | Shelf life in days; sets the default expiration date when lot tracking receives this item. |
| internalbuynotes | text | Internalbuynotes. Stored as text, no practical length limit. |
| internalsellnotes | text | Internalsellnotes. Stored as text, no practical length limit. |
| negativesalesruletype | string(1) | Pricing rule for negative-quantity sale lines: F = fixed price, R = reduce price by percentage, S = percentage of sale price. |
| negativesalesrulevaluemoney | string(6dp) | Stored as decimal(19,6). |
| nochargeglaccountid | integer | Nochargeglaccountid. Id only. |
| nochargeglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or nochargeglaccountid, not both unless they agree. |
| pickernotes | text | Pickernotes. Stored as text, no practical length limit. |
| po_block | integer | 1 blocks the item from purchase orders (Block Usage On Purchase Orders). |
| prelimable | boolean | True when sales of the item count toward preliminary lien notice amounts on prelim-able jobs. |
| qtyperpallet | integer | Quantity per pallet; 0 uses the company default. |
| rebateglaccountid | integer | Rebateglaccountid. Id only. |
| rebateglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or rebateglaccountid, not both unless they agree. |
| rental_d | boolean | True offers daily rental pricing for the item. |
| rental_m | boolean | True offers monthly rental pricing for the item. |
| rental_w | boolean | True offers weekly rental pricing for the item. |
| rentalconverttosalear | integer | GL account credited when a rental converts to a sale (Rental Conversion To Sales). |
| rentalconverttosalecogs | integer | GL account debited for cost when a rental converts to a sale (Rental Conversion Cost Of Goods). |
| returnsglaccountid | integer | Returnsglaccountid. Id only. |
| returnsglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or returnsglaccountid, not both unless they agree. |
| transfershortglaccountid | integer | Transfershortglaccountid. Id only. |
| transfershortglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or transfershortglaccountid, not both unless they agree. |
| unnumber | string(255) | UN hazardous-material number, printed as a caution on transfer and shipping paperwork. |
| itemcodechecksumread-only | integer | STORED GENERATED in the database. Read-only - MySQL computes it. |
| itemcomparisongroupid | integer | Itemcomparisongroupid. Id only. |
| itemcomparisongroup | string(255) | The name of the referenced itemcomparisongroups, instead of the id. Send this or itemcomparisongroupid, not both unless they agree. |
| itemidentifiers | text | Itemidentifiers. Stored as text, no practical length limit. |
| externalid | string(100) | Your own key. Scoped to your company. |
Endpoints#
Stock movement history for an item.
Every movement that made the item's stock what it is: receipts, shipments, adjustments, transfers and commitments.
/items/{id}/stock answers what is on hand right now. This answers how it got there, which is what you need when your own system and NolaPro disagree about a number.
trtype 1 is a commitment against an open order and is deliberately excluded from on-hand - filter it out to see physical movement only. Cancelled rows stay readable and do not count toward stock.
Requires scope items:read.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The item id. |
| Status | Code | Meaning |
|---|---|---|
| 422 | unknown_value | No such parent record in this company. The same answer whether it does not exist or belongs to someone else, so a caller cannot probe another company's ids. |
curl \ 'https://acme.nolapro.com/!/api/v2/items/104/transactions' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/104/transactions'); 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/items/104/transactions", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/104/transactions', { 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/items/104/transactions"); res.EnsureSuccessStatusCode();
Stock and reorder settings per location.
/items/{id}/stock answers for one location at a time. This lists every location the item is stocked at, with on-hand, bin, cost layers and the seasonal minimum, maximum and reorder quantities.
A customer running more than one warehouse needs this to route fulfilment, and to avoid promising stock that is in the wrong building.
Only locations that exist are listed. NolaPro keeps stock rows against internal pseudo-locations with negative ids and no matching location record; those are omitted, because an id you cannot fetch, adjust or ship from is not a warehouse.
Requires scope items:read.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The item id. |
| Status | Code | Meaning |
|---|---|---|
| 422 | unknown_value | No such parent record in this company. |
curl \ 'https://acme.nolapro.com/!/api/v2/items/104/locations' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/104/locations'); 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/items/104/locations", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/104/locations', { 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/items/104/locations"); res.EnsureSuccessStatusCode();
The item code as a scannable barcode image.
Returns image/png. Encodes the item's own code unless you pass value.
Code 39 cannot encode every item code. Its alphabet is digits, A-Z, space and -.$/+%; an underscore or a lower-case letter produces an image that looks like a barcode and will not scan, which a warehouse discovers at the shelf. Those are refused with the offending characters named - use code128b for arbitrary text.
The label SHEET (many labels, a stored template, print-ready) is a different thing and is not this endpoint.
Requires scope items:read.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The item id. |
| symbology | query | string | Defaults to code39. |
| value | query | string | Encode this instead of the item code. |
| width | query | integer | Pixels, 40-2000. Defaults to 460. |
| height | query | integer | Pixels, 20-1000. Defaults to 120. |
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_enum | symbology is not one of the four supported. |
| 400 | invalid_type | width or height was not a whole number. |
| 422 | rule_violation | The symbology cannot represent those characters, or the item has no code. |
| 422 | unknown_value | No such item in this company. |
curl \ 'https://acme.nolapro.com/!/api/v2/items/104/barcode' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/104/barcode'); 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/items/104/barcode", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/104/barcode', { 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/items/104/barcode"); res.EnsureSuccessStatusCode();
Correct the stock level for an item at a location.
The only way to move stock that is not a side effect of shipping or receiving a document.
Send either quantity (a signed change) or onhand (the level it should end at). They are the same operation - the delta is onhand - current - and letting you send the target means NolaPro computes the difference at the moment it applies it, rather than you computing it against a figure that may already have moved.
This posts to the general ledger. The adjustment raises an INVADJ voucher against the item's inventory GL account, so the response carries voucherid and the period rules apply.
Requires scope items:write.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The item id. |
| Field | Type | Description |
|---|---|---|
| locationidrequired | integer | Where the stock is held. |
| quantityqty | string | Signed change. Negative writes stock off. |
| onhandqty | string | The level it should end at. NolaPro works out the difference. |
| description | string(255) | Why. Appears on the movement and the voucher. |
| date | string | Posting date. Defaults to today. |
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Neither or both of quantity and onhand were sent, or locationid is missing. |
| 400 | invalid_type | A quantity was not a decimal string. |
| 400 | invalid_precision | More than six decimal places. |
| 422 | rule_violation | It would change nothing, or the item is not stock-tracked there. |
| 422 | period_closed | The GL period is closed, so the voucher has nowhere to post. |
| 422 | unknown_value | No such item or location in this company. |
curl -X POST \ 'https://acme.nolapro.com/!/api/v2/items/104/adjustments' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/104/adjustments'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.post( "https://acme.nolapro.com/!/api/v2/items/104/adjustments", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/104/adjustments', { method: 'POST', 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.Post, "https://acme.nolapro.com/!/api/v2/items/104/adjustments"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
Retrieve stock for an item at one location.
Replaces the legacy item/get_item_stats and item/get_item_cost endpoints.
Requires scope items:read.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The item id. |
| locationrequired | query | integer | Inventory location id. Required: stock is meaningless without it. |
| Status | Code | Meaning |
|---|---|---|
| 404 | not_found | Unknown item, or the item is not stocked at that location. |
curl \ 'https://acme.nolapro.com/!/api/v2/items/104/stock' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/104/stock'); 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/items/104/stock", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/104/stock', { 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/items/104/stock"); res.EnsureSuccessStatusCode();
{
"itemid": 3391,
"location": 2,
"onhand": "412.000000",
"committed": "60.000000",
"available": "352.000000",
"cost": "7.1100"
}
List items.
Requires scope items:read.
| Name | In | Type | Notes |
|---|---|---|---|
| status | query | string | Restrict to one status. |
| customerid | query | string | Restrict to one customerid. |
| itemcode | query | string | Item code. Partial match. |
| description | query | string | Description. Partial match. |
| categoryid | query | string | Restrict to one category. |
| inventorytype | query | string | S stocked, N non-stocked, O other charges. |
| cancel | query | string | Defaults to false. Pass true or any. |
| page | query | string | 1-based. |
| perpage | query | string | Default 50, maximum 200. |
| externalid | query | string | Find by your own key. |
| modifiedsince | query | string | RFC 3339 UTC timestamp. Returns only records changed since then, including cancelled ones - so cancel defaults to any rather than false when this is used. The response carries _meta.synced_through; store it and send it back next time. |
| 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. |
curl \ 'https://acme.nolapro.com/!/api/v2/items' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items'); 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/items", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items', { 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/items"); res.EnsureSuccessStatusCode();
Create.
Requires scope items:write.
| Name | In | Type | Notes |
|---|---|---|---|
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| itemcode | string(255) | Item code (SKU) - the human key used across NolaPro. |
| compositeitemyesno | integer | 1 when the item is a composite built from component items (bill of materials). |
| description | string(100) | Item description shown on documents and lookups. |
| categoryid | integer | Categoryid. Id only. |
| stockunitnameid | integer | Stockunitnameid. Id only. |
| stockunitname | string(50) | The unitname of the referenced unitnames, instead of the id. Send this or stockunitnameid, not both unless they agree. |
| priceunitnameid | integer | Priceunitnameid. Id only. |
| priceunitname | string(50) | The unitname of the referenced unitnames, instead of the id. Send this or priceunitnameid, not both unless they agree. |
| lbsperpriceunitnumber | string | Numeric string. Not money - do not apply currency rounding. |
| priceunitsperstockunitnumber | string(10dp) | Numeric string, 10 decimal places. Not money - do not apply currency rounding. |
| stockunitsperpriceunitnumber | string(6dp) | Numeric string, 6 decimal places. Not money - do not apply currency rounding. |
| inventoryglacctid | integer | Inventoryglacctid. Id only. |
| inventoryglacct | string(20) | The name of the referenced glaccounts, instead of the id. Send this or inventoryglacctid, not both unless they agree. |
| salesglacctid | integer | Salesglacctid. Id only. |
| salesglacct | string(20) | The name of the referenced glaccounts, instead of the id. Send this or salesglacctid, not both unless they agree. |
| widthmoney | string | Stored as double. |
| lengthmoney | string | Stored as double. |
| mwtmoney | string | Stored as double. |
| cogs | integer | Cost of goods sold. |
| cogseffectivedate | string | Date the cost of goods sold figure takes effect. |
| middlemanpricemoney | string | Stored as double. |
| pricemoney | string | Stored as double. |
| priceeffectivedate | string | Date the price takes effect. |
| status | boolean | True when the item is marked Inactive on the item screens - hidden from lookups, kept for history. Not the same as cancel. |
| id_item_useinstead | integer | Replacement item to use instead of this one, shown when this item is discontinued. |
| invtype | integer | Item type: 1 = physical, 2 = print-on-demand (POD - costed at static cost, no stock tracking), 3 = finished goods. 0 on older records. |
| catalogdescription | text | Catalogdescription. Stored as text, no practical length limit. |
| products_website | string(255) | Product webpage URL shown in the web store. |
| catalogsheeturl | text | URL of the item’s catalog sheet, shown in the web store. |
| graphicurl | text | URL or filename of the item’s picture. |
| pdffile | text | PDF file attached to the item for the web store. |
| videofile | text | Video file attached to the item for the web store. |
| soundfile | text | Sound file attached to the item for the web store. |
| cancel | boolean | Cancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable. |
| entrydateread-only | string | When the record was created. |
| lastchangedateread-only | string | Last modification. Drives modifiedsince. |
| products_quantityread-only | integer | Quantity mirror maintained in the osCommerce-style web store tables. Maintained by the cart sync, so it cannot be written through the API. |
| products_viewedread-only | integer | View counter maintained by the web store. Cannot be written through the API. |
| products_status | boolean | Web store visibility flag from the osCommerce-style product tables. |
| products_tax_class_idread-only | integer | Legacy osCommerce column. The products_tax_class table does not exist in NolaPro and every row holds 0, so this can never resolve to anything. Read-only, and kept only because the column is still on the table. |
| products_costpricemoney | string(2dp) | Stored as decimal(8,2). |
| products_pushupmoney | string(2dp) | Stored as decimal(4,2). |
| scart | integer | 1 shows the item in the B2B shopping cart. |
| parentitemid | integer | Parentitemid. Id only. |
| scart_minqtydisplay | integer | Minimum on-hand quantity before the cart shows availability; the Shopify sync maps it to the no-back-orders flag. |
| taxexempt | boolean | True when the item is never taxed, regardless of the customer’s tax setup. |
| calipermoney | string(4dp) | Stored as decimal(10,4). |
| upc | string(255) | Universal Product Code. |
| author | text | Author, for book and media items in the web store. |
| notes | text | Notes. Stored as text, no practical length limit. |
| b2b_block | boolean | True blocks the item from B2B orders (Block Usage On B2B Orders). |
| pos_block | boolean | True hides the item from Point of Sale. |
| gbaseidread-only | string(100) | Submission id from the legacy Google Base product feed. |
| gbasedateread-only | string | When the item was last submitted to the legacy Google Base product feed. |
| commissionflatmoney | string(6dp) | Stored as decimal(19,6). |
| commissionpercentnumber | string(2dp) | Numeric string, 2 decimal places. Not money - do not apply currency rounding. |
| staticcostmoney | string(5dp) | Stored as decimal(19,5). |
| minpmmoney | string(2dp) | Stored as decimal(6,2). |
| restockdate | string | Expected restock date, shown to buyers when the item is out of stock. |
| customerid | integer | Reference to customers, by id. Write either this or customer. |
| customer | string(30) | Code for the referenced customer, instead of the id. |
| commoditycode | string(10) | Commodity Code from the item screen, used on customs and freight paperwork. |
| defaultlinenote | text | Defaultlinenote. Stored as text, no practical length limit. |
| inventorytype | string(1) | S = stocked, N = non-stocked, O = other charges. Non-stocked and other-charge items carry no on-hand quantity and cost at static cost. |
| last3dcartstockupdateread-only | string | When the Shift4Shop (3DCart) sync last pushed a stock level for this item. Maintained by the sync, so it cannot be written through the API. |
| listonebay | boolean | True marks the item for eBay listing (List On eBay). |
| lockpricecost | boolean | True locks price and cost during a sale (Lock Price & Cost During Sale) so line edits cannot change them. |
| mobile_pos | boolean | True shows the item in the mobile Point of Sale (Show In Mobile POS). |
| notforsale | integer | 1 marks the item Not For Sale - usable internally but blocked from sales documents. |
| rental | integer | 1 when the item is a rental item. |
| shipheightmoney | string(2dp) | Stored as decimal(7,2). |
| shiplengthmoney | string(2dp) | Stored as decimal(7,2). |
| shippingmarkupmoney | string(6dp) | Stored as decimal(19,6). |
| shipsbyitself | integer | 1 when the item ships in its own package rather than being combined (Ships By Itself). |
| shipwidthmoney | string(2dp) | Stored as decimal(7,2). |
| taxclassid | integer | Taxclassid. Id only. |
| taxclass | string(100) | The name of the referenced taxclasses, instead of the id. Send this or taxclassid, not both unless they agree. |
| accruedpurchasesglid | integer | GL account purchases accrue to. Write either this or accruedpurchasesgl. |
| accruedpurchasesgl | string(20) | GL account NUMBER (glaccount.name) instead of the id. The sibling of accruedpurchasesglid, matching how salesglacct and inventoryglacct already work on this resource. |
| allownegqtysalesoverride | integer | 1 allows negative-quantity sale lines for this item (Allow Negative Quantity Sales), priced by negativesalesruletype. |
| buyeruserid | integer | Buyeruserid. Id only. |
| buyeruser | string(50) | The name of the referenced genusers, instead of the id. Send this or buyeruserid, not both unless they agree. |
| expiredays | integer | Shelf life in days; sets the default expiration date when lot tracking receives this item. |
| internalbuynotes | text | Internalbuynotes. Stored as text, no practical length limit. |
| internalsellnotes | text | Internalsellnotes. Stored as text, no practical length limit. |
| negativesalesruletype | string(1) | Pricing rule for negative-quantity sale lines: F = fixed price, R = reduce price by percentage, S = percentage of sale price. |
| negativesalesrulevaluemoney | string(6dp) | Stored as decimal(19,6). |
| nochargeglaccountid | integer | Nochargeglaccountid. Id only. |
| nochargeglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or nochargeglaccountid, not both unless they agree. |
| pickernotes | text | Pickernotes. Stored as text, no practical length limit. |
| po_block | integer | 1 blocks the item from purchase orders (Block Usage On Purchase Orders). |
| prelimable | boolean | True when sales of the item count toward preliminary lien notice amounts on prelim-able jobs. |
| qtyperpallet | integer | Quantity per pallet; 0 uses the company default. |
| rebateglaccountid | integer | Rebateglaccountid. Id only. |
| rebateglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or rebateglaccountid, not both unless they agree. |
| rental_d | boolean | True offers daily rental pricing for the item. |
| rental_m | boolean | True offers monthly rental pricing for the item. |
| rental_w | boolean | True offers weekly rental pricing for the item. |
| rentalconverttosalear | integer | GL account credited when a rental converts to a sale (Rental Conversion To Sales). |
| rentalconverttosalecogs | integer | GL account debited for cost when a rental converts to a sale (Rental Conversion Cost Of Goods). |
| returnsglaccountid | integer | Returnsglaccountid. Id only. |
| returnsglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or returnsglaccountid, not both unless they agree. |
| transfershortglaccountid | integer | Transfershortglaccountid. Id only. |
| transfershortglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or transfershortglaccountid, not both unless they agree. |
| unnumber | string(255) | UN hazardous-material number, printed as a caution on transfer and shipping paperwork. |
| itemcodechecksumread-only | integer | STORED GENERATED in the database. Read-only - MySQL computes it. |
| itemcomparisongroupid | integer | Itemcomparisongroupid. Id only. |
| itemcomparisongroup | string(255) | The name of the referenced itemcomparisongroups, instead of the id. Send this or itemcomparisongroupid, not both unless they agree. |
| itemidentifiers | text | Itemidentifiers. Stored as text, no practical length limit. |
| externalid | string(100) | Your own key. Scoped to your company. |
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | A required field was missing. |
| 403 | record_limit_reached | The install is at its licensed item limit. |
curl -X POST \ 'https://acme.nolapro.com/!/api/v2/items' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '{ "accruedpurchasesgl": "4000" }'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode([ 'accruedpurchasesgl' => '4000', ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.post( "https://acme.nolapro.com/!/api/v2/items", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json={ "accruedpurchasesgl": "4000", }, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items', { method: 'POST', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify({ accruedpurchasesgl: "4000", }), } ); 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 { accruedpurchasesgl = "4000", }; var req = new HttpRequestMessage(HttpMethod.Post, "https://acme.nolapro.com/!/api/v2/items") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
{
"accruedpurchasesgl": "4000"
}
Retrieve one record.
Requires scope items:read.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | |
| 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. |
| Status | Code | Meaning |
|---|---|---|
| 404 | not_found | No item with that id. |
curl \ 'https://acme.nolapro.com/!/api/v2/items/104' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/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/items/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/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/items/104"); res.EnsureSuccessStatusCode();
{
"accruedpurchasesgl": "4000"
}
Update.
Requires scope items:write.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | |
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| itemcode | string(255) | Item code (SKU) - the human key used across NolaPro. |
| compositeitemyesno | integer | 1 when the item is a composite built from component items (bill of materials). |
| description | string(100) | Item description shown on documents and lookups. |
| categoryid | integer | Categoryid. Id only. |
| stockunitnameid | integer | Stockunitnameid. Id only. |
| stockunitname | string(50) | The unitname of the referenced unitnames, instead of the id. Send this or stockunitnameid, not both unless they agree. |
| priceunitnameid | integer | Priceunitnameid. Id only. |
| priceunitname | string(50) | The unitname of the referenced unitnames, instead of the id. Send this or priceunitnameid, not both unless they agree. |
| lbsperpriceunitnumber | string | Numeric string. Not money - do not apply currency rounding. |
| priceunitsperstockunitnumber | string(10dp) | Numeric string, 10 decimal places. Not money - do not apply currency rounding. |
| stockunitsperpriceunitnumber | string(6dp) | Numeric string, 6 decimal places. Not money - do not apply currency rounding. |
| inventoryglacctid | integer | Inventoryglacctid. Id only. |
| inventoryglacct | string(20) | The name of the referenced glaccounts, instead of the id. Send this or inventoryglacctid, not both unless they agree. |
| salesglacctid | integer | Salesglacctid. Id only. |
| salesglacct | string(20) | The name of the referenced glaccounts, instead of the id. Send this or salesglacctid, not both unless they agree. |
| widthmoney | string | Stored as double. |
| lengthmoney | string | Stored as double. |
| mwtmoney | string | Stored as double. |
| cogs | integer | Cost of goods sold. |
| cogseffectivedate | string | Date the cost of goods sold figure takes effect. |
| middlemanpricemoney | string | Stored as double. |
| pricemoney | string | Stored as double. |
| priceeffectivedate | string | Date the price takes effect. |
| status | boolean | True when the item is marked Inactive on the item screens - hidden from lookups, kept for history. Not the same as cancel. |
| id_item_useinstead | integer | Replacement item to use instead of this one, shown when this item is discontinued. |
| invtype | integer | Item type: 1 = physical, 2 = print-on-demand (POD - costed at static cost, no stock tracking), 3 = finished goods. 0 on older records. |
| catalogdescription | text | Catalogdescription. Stored as text, no practical length limit. |
| products_website | string(255) | Product webpage URL shown in the web store. |
| catalogsheeturl | text | URL of the item’s catalog sheet, shown in the web store. |
| graphicurl | text | URL or filename of the item’s picture. |
| pdffile | text | PDF file attached to the item for the web store. |
| videofile | text | Video file attached to the item for the web store. |
| soundfile | text | Sound file attached to the item for the web store. |
| cancel | boolean | Cancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable. |
| entrydateread-only | string | When the record was created. |
| lastchangedateread-only | string | Last modification. Drives modifiedsince. |
| products_quantityread-only | integer | Quantity mirror maintained in the osCommerce-style web store tables. Maintained by the cart sync, so it cannot be written through the API. |
| products_viewedread-only | integer | View counter maintained by the web store. Cannot be written through the API. |
| products_status | boolean | Web store visibility flag from the osCommerce-style product tables. |
| products_tax_class_idread-only | integer | Legacy osCommerce column. The products_tax_class table does not exist in NolaPro and every row holds 0, so this can never resolve to anything. Read-only, and kept only because the column is still on the table. |
| products_costpricemoney | string(2dp) | Stored as decimal(8,2). |
| products_pushupmoney | string(2dp) | Stored as decimal(4,2). |
| scart | integer | 1 shows the item in the B2B shopping cart. |
| parentitemid | integer | Parentitemid. Id only. |
| scart_minqtydisplay | integer | Minimum on-hand quantity before the cart shows availability; the Shopify sync maps it to the no-back-orders flag. |
| taxexempt | boolean | True when the item is never taxed, regardless of the customer’s tax setup. |
| calipermoney | string(4dp) | Stored as decimal(10,4). |
| upc | string(255) | Universal Product Code. |
| author | text | Author, for book and media items in the web store. |
| notes | text | Notes. Stored as text, no practical length limit. |
| b2b_block | boolean | True blocks the item from B2B orders (Block Usage On B2B Orders). |
| pos_block | boolean | True hides the item from Point of Sale. |
| gbaseidread-only | string(100) | Submission id from the legacy Google Base product feed. |
| gbasedateread-only | string | When the item was last submitted to the legacy Google Base product feed. |
| commissionflatmoney | string(6dp) | Stored as decimal(19,6). |
| commissionpercentnumber | string(2dp) | Numeric string, 2 decimal places. Not money - do not apply currency rounding. |
| staticcostmoney | string(5dp) | Stored as decimal(19,5). |
| minpmmoney | string(2dp) | Stored as decimal(6,2). |
| restockdate | string | Expected restock date, shown to buyers when the item is out of stock. |
| customerid | integer | Reference to customers, by id. Write either this or customer. |
| customer | string(30) | Code for the referenced customer, instead of the id. |
| commoditycode | string(10) | Commodity Code from the item screen, used on customs and freight paperwork. |
| defaultlinenote | text | Defaultlinenote. Stored as text, no practical length limit. |
| inventorytype | string(1) | S = stocked, N = non-stocked, O = other charges. Non-stocked and other-charge items carry no on-hand quantity and cost at static cost. |
| last3dcartstockupdateread-only | string | When the Shift4Shop (3DCart) sync last pushed a stock level for this item. Maintained by the sync, so it cannot be written through the API. |
| listonebay | boolean | True marks the item for eBay listing (List On eBay). |
| lockpricecost | boolean | True locks price and cost during a sale (Lock Price & Cost During Sale) so line edits cannot change them. |
| mobile_pos | boolean | True shows the item in the mobile Point of Sale (Show In Mobile POS). |
| notforsale | integer | 1 marks the item Not For Sale - usable internally but blocked from sales documents. |
| rental | integer | 1 when the item is a rental item. |
| shipheightmoney | string(2dp) | Stored as decimal(7,2). |
| shiplengthmoney | string(2dp) | Stored as decimal(7,2). |
| shippingmarkupmoney | string(6dp) | Stored as decimal(19,6). |
| shipsbyitself | integer | 1 when the item ships in its own package rather than being combined (Ships By Itself). |
| shipwidthmoney | string(2dp) | Stored as decimal(7,2). |
| taxclassid | integer | Taxclassid. Id only. |
| taxclass | string(100) | The name of the referenced taxclasses, instead of the id. Send this or taxclassid, not both unless they agree. |
| accruedpurchasesglid | integer | GL account purchases accrue to. Write either this or accruedpurchasesgl. |
| accruedpurchasesgl | string(20) | GL account NUMBER (glaccount.name) instead of the id. The sibling of accruedpurchasesglid, matching how salesglacct and inventoryglacct already work on this resource. |
| allownegqtysalesoverride | integer | 1 allows negative-quantity sale lines for this item (Allow Negative Quantity Sales), priced by negativesalesruletype. |
| buyeruserid | integer | Buyeruserid. Id only. |
| buyeruser | string(50) | The name of the referenced genusers, instead of the id. Send this or buyeruserid, not both unless they agree. |
| expiredays | integer | Shelf life in days; sets the default expiration date when lot tracking receives this item. |
| internalbuynotes | text | Internalbuynotes. Stored as text, no practical length limit. |
| internalsellnotes | text | Internalsellnotes. Stored as text, no practical length limit. |
| negativesalesruletype | string(1) | Pricing rule for negative-quantity sale lines: F = fixed price, R = reduce price by percentage, S = percentage of sale price. |
| negativesalesrulevaluemoney | string(6dp) | Stored as decimal(19,6). |
| nochargeglaccountid | integer | Nochargeglaccountid. Id only. |
| nochargeglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or nochargeglaccountid, not both unless they agree. |
| pickernotes | text | Pickernotes. Stored as text, no practical length limit. |
| po_block | integer | 1 blocks the item from purchase orders (Block Usage On Purchase Orders). |
| prelimable | boolean | True when sales of the item count toward preliminary lien notice amounts on prelim-able jobs. |
| qtyperpallet | integer | Quantity per pallet; 0 uses the company default. |
| rebateglaccountid | integer | Rebateglaccountid. Id only. |
| rebateglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or rebateglaccountid, not both unless they agree. |
| rental_d | boolean | True offers daily rental pricing for the item. |
| rental_m | boolean | True offers monthly rental pricing for the item. |
| rental_w | boolean | True offers weekly rental pricing for the item. |
| rentalconverttosalear | integer | GL account credited when a rental converts to a sale (Rental Conversion To Sales). |
| rentalconverttosalecogs | integer | GL account debited for cost when a rental converts to a sale (Rental Conversion Cost Of Goods). |
| returnsglaccountid | integer | Returnsglaccountid. Id only. |
| returnsglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or returnsglaccountid, not both unless they agree. |
| transfershortglaccountid | integer | Transfershortglaccountid. Id only. |
| transfershortglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or transfershortglaccountid, not both unless they agree. |
| unnumber | string(255) | UN hazardous-material number, printed as a caution on transfer and shipping paperwork. |
| itemcodechecksumread-only | integer | STORED GENERATED in the database. Read-only - MySQL computes it. |
| itemcomparisongroupid | integer | Itemcomparisongroupid. Id only. |
| itemcomparisongroup | string(255) | The name of the referenced itemcomparisongroups, instead of the id. Send this or itemcomparisongroupid, not both unless they agree. |
| itemidentifiers | text | Itemidentifiers. Stored as text, no practical length limit. |
| externalid | string(100) | Your own key. Scoped to your company. |
| Status | Code | Meaning |
|---|---|---|
| 404 | not_found | No item with that id. |
curl -X PATCH \ 'https://acme.nolapro.com/!/api/v2/items/104' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '{ "accruedpurchasesgl": "4000" }'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/104'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_POSTFIELDS => json_encode([ 'accruedpurchasesgl' => '4000', ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.patch( "https://acme.nolapro.com/!/api/v2/items/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json={ "accruedpurchasesgl": "4000", }, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/104', { method: 'PATCH', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify({ accruedpurchasesgl: "4000", }), } ); 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 { accruedpurchasesgl = "4000", }; var req = new HttpRequestMessage(HttpMethod.Patch, "https://acme.nolapro.com/!/api/v2/items/104") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
{
"accruedpurchasesgl": "4000"
}
Cancel.
Requires scope items:cancel.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | |
| Status | Code | Meaning |
|---|---|---|
| 404 | not_found | No item with that id. |
curl -X DELETE \ 'https://acme.nolapro.com/!/api/v2/items/104' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/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/items/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/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/items/104"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
{
"accruedpurchasesgl": "4000"
}
Create many.
Requires scope items:write.
| Name | In | Type | Notes |
|---|---|---|---|
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| itemcode | string(255) | Item code (SKU) - the human key used across NolaPro. |
| compositeitemyesno | integer | 1 when the item is a composite built from component items (bill of materials). |
| description | string(100) | Item description shown on documents and lookups. |
| categoryid | integer | Categoryid. Id only. |
| stockunitnameid | integer | Stockunitnameid. Id only. |
| stockunitname | string(50) | The unitname of the referenced unitnames, instead of the id. Send this or stockunitnameid, not both unless they agree. |
| priceunitnameid | integer | Priceunitnameid. Id only. |
| priceunitname | string(50) | The unitname of the referenced unitnames, instead of the id. Send this or priceunitnameid, not both unless they agree. |
| lbsperpriceunitnumber | string | Numeric string. Not money - do not apply currency rounding. |
| priceunitsperstockunitnumber | string(10dp) | Numeric string, 10 decimal places. Not money - do not apply currency rounding. |
| stockunitsperpriceunitnumber | string(6dp) | Numeric string, 6 decimal places. Not money - do not apply currency rounding. |
| inventoryglacctid | integer | Inventoryglacctid. Id only. |
| inventoryglacct | string(20) | The name of the referenced glaccounts, instead of the id. Send this or inventoryglacctid, not both unless they agree. |
| salesglacctid | integer | Salesglacctid. Id only. |
| salesglacct | string(20) | The name of the referenced glaccounts, instead of the id. Send this or salesglacctid, not both unless they agree. |
| widthmoney | string | Stored as double. |
| lengthmoney | string | Stored as double. |
| mwtmoney | string | Stored as double. |
| cogs | integer | Cost of goods sold. |
| cogseffectivedate | string | Date the cost of goods sold figure takes effect. |
| middlemanpricemoney | string | Stored as double. |
| pricemoney | string | Stored as double. |
| priceeffectivedate | string | Date the price takes effect. |
| status | boolean | True when the item is marked Inactive on the item screens - hidden from lookups, kept for history. Not the same as cancel. |
| id_item_useinstead | integer | Replacement item to use instead of this one, shown when this item is discontinued. |
| invtype | integer | Item type: 1 = physical, 2 = print-on-demand (POD - costed at static cost, no stock tracking), 3 = finished goods. 0 on older records. |
| catalogdescription | text | Catalogdescription. Stored as text, no practical length limit. |
| products_website | string(255) | Product webpage URL shown in the web store. |
| catalogsheeturl | text | URL of the item’s catalog sheet, shown in the web store. |
| graphicurl | text | URL or filename of the item’s picture. |
| pdffile | text | PDF file attached to the item for the web store. |
| videofile | text | Video file attached to the item for the web store. |
| soundfile | text | Sound file attached to the item for the web store. |
| cancel | boolean | Cancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable. |
| entrydateread-only | string | When the record was created. |
| lastchangedateread-only | string | Last modification. Drives modifiedsince. |
| products_quantityread-only | integer | Quantity mirror maintained in the osCommerce-style web store tables. Maintained by the cart sync, so it cannot be written through the API. |
| products_viewedread-only | integer | View counter maintained by the web store. Cannot be written through the API. |
| products_status | boolean | Web store visibility flag from the osCommerce-style product tables. |
| products_tax_class_idread-only | integer | Legacy osCommerce column. The products_tax_class table does not exist in NolaPro and every row holds 0, so this can never resolve to anything. Read-only, and kept only because the column is still on the table. |
| products_costpricemoney | string(2dp) | Stored as decimal(8,2). |
| products_pushupmoney | string(2dp) | Stored as decimal(4,2). |
| scart | integer | 1 shows the item in the B2B shopping cart. |
| parentitemid | integer | Parentitemid. Id only. |
| scart_minqtydisplay | integer | Minimum on-hand quantity before the cart shows availability; the Shopify sync maps it to the no-back-orders flag. |
| taxexempt | boolean | True when the item is never taxed, regardless of the customer’s tax setup. |
| calipermoney | string(4dp) | Stored as decimal(10,4). |
| upc | string(255) | Universal Product Code. |
| author | text | Author, for book and media items in the web store. |
| notes | text | Notes. Stored as text, no practical length limit. |
| b2b_block | boolean | True blocks the item from B2B orders (Block Usage On B2B Orders). |
| pos_block | boolean | True hides the item from Point of Sale. |
| gbaseidread-only | string(100) | Submission id from the legacy Google Base product feed. |
| gbasedateread-only | string | When the item was last submitted to the legacy Google Base product feed. |
| commissionflatmoney | string(6dp) | Stored as decimal(19,6). |
| commissionpercentnumber | string(2dp) | Numeric string, 2 decimal places. Not money - do not apply currency rounding. |
| staticcostmoney | string(5dp) | Stored as decimal(19,5). |
| minpmmoney | string(2dp) | Stored as decimal(6,2). |
| restockdate | string | Expected restock date, shown to buyers when the item is out of stock. |
| customerid | integer | Reference to customers, by id. Write either this or customer. |
| customer | string(30) | Code for the referenced customer, instead of the id. |
| commoditycode | string(10) | Commodity Code from the item screen, used on customs and freight paperwork. |
| defaultlinenote | text | Defaultlinenote. Stored as text, no practical length limit. |
| inventorytype | string(1) | S = stocked, N = non-stocked, O = other charges. Non-stocked and other-charge items carry no on-hand quantity and cost at static cost. |
| last3dcartstockupdateread-only | string | When the Shift4Shop (3DCart) sync last pushed a stock level for this item. Maintained by the sync, so it cannot be written through the API. |
| listonebay | boolean | True marks the item for eBay listing (List On eBay). |
| lockpricecost | boolean | True locks price and cost during a sale (Lock Price & Cost During Sale) so line edits cannot change them. |
| mobile_pos | boolean | True shows the item in the mobile Point of Sale (Show In Mobile POS). |
| notforsale | integer | 1 marks the item Not For Sale - usable internally but blocked from sales documents. |
| rental | integer | 1 when the item is a rental item. |
| shipheightmoney | string(2dp) | Stored as decimal(7,2). |
| shiplengthmoney | string(2dp) | Stored as decimal(7,2). |
| shippingmarkupmoney | string(6dp) | Stored as decimal(19,6). |
| shipsbyitself | integer | 1 when the item ships in its own package rather than being combined (Ships By Itself). |
| shipwidthmoney | string(2dp) | Stored as decimal(7,2). |
| taxclassid | integer | Taxclassid. Id only. |
| taxclass | string(100) | The name of the referenced taxclasses, instead of the id. Send this or taxclassid, not both unless they agree. |
| accruedpurchasesglid | integer | GL account purchases accrue to. Write either this or accruedpurchasesgl. |
| accruedpurchasesgl | string(20) | GL account NUMBER (glaccount.name) instead of the id. The sibling of accruedpurchasesglid, matching how salesglacct and inventoryglacct already work on this resource. |
| allownegqtysalesoverride | integer | 1 allows negative-quantity sale lines for this item (Allow Negative Quantity Sales), priced by negativesalesruletype. |
| buyeruserid | integer | Buyeruserid. Id only. |
| buyeruser | string(50) | The name of the referenced genusers, instead of the id. Send this or buyeruserid, not both unless they agree. |
| expiredays | integer | Shelf life in days; sets the default expiration date when lot tracking receives this item. |
| internalbuynotes | text | Internalbuynotes. Stored as text, no practical length limit. |
| internalsellnotes | text | Internalsellnotes. Stored as text, no practical length limit. |
| negativesalesruletype | string(1) | Pricing rule for negative-quantity sale lines: F = fixed price, R = reduce price by percentage, S = percentage of sale price. |
| negativesalesrulevaluemoney | string(6dp) | Stored as decimal(19,6). |
| nochargeglaccountid | integer | Nochargeglaccountid. Id only. |
| nochargeglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or nochargeglaccountid, not both unless they agree. |
| pickernotes | text | Pickernotes. Stored as text, no practical length limit. |
| po_block | integer | 1 blocks the item from purchase orders (Block Usage On Purchase Orders). |
| prelimable | boolean | True when sales of the item count toward preliminary lien notice amounts on prelim-able jobs. |
| qtyperpallet | integer | Quantity per pallet; 0 uses the company default. |
| rebateglaccountid | integer | Rebateglaccountid. Id only. |
| rebateglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or rebateglaccountid, not both unless they agree. |
| rental_d | boolean | True offers daily rental pricing for the item. |
| rental_m | boolean | True offers monthly rental pricing for the item. |
| rental_w | boolean | True offers weekly rental pricing for the item. |
| rentalconverttosalear | integer | GL account credited when a rental converts to a sale (Rental Conversion To Sales). |
| rentalconverttosalecogs | integer | GL account debited for cost when a rental converts to a sale (Rental Conversion Cost Of Goods). |
| returnsglaccountid | integer | Returnsglaccountid. Id only. |
| returnsglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or returnsglaccountid, not both unless they agree. |
| transfershortglaccountid | integer | Transfershortglaccountid. Id only. |
| transfershortglaccount | string(20) | The name of the referenced glaccounts, instead of the id. Send this or transfershortglaccountid, not both unless they agree. |
| unnumber | string(255) | UN hazardous-material number, printed as a caution on transfer and shipping paperwork. |
| itemcodechecksumread-only | integer | STORED GENERATED in the database. Read-only - MySQL computes it. |
| itemcomparisongroupid | integer | Itemcomparisongroupid. Id only. |
| itemcomparisongroup | string(255) | The name of the referenced itemcomparisongroups, instead of the id. Send this or itemcomparisongroupid, not both unless they agree. |
| itemidentifiers | text | Itemidentifiers. Stored as text, no practical length limit. |
| externalid | string(100) | Your own key. Scoped to your company. |
curl -X POST \ 'https://acme.nolapro.com/!/api/v2/items/batch' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '[ { "accruedpurchasesgl": "4000" } ]'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/batch'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode([ [ 'accruedpurchasesgl' => '4000', ], ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.post( "https://acme.nolapro.com/!/api/v2/items/batch", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json=[ { "accruedpurchasesgl": "4000", }, ], ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/batch', { method: 'POST', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify([ { accruedpurchasesgl: "4000", }, ]), } ); 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 { accruedpurchasesgl = "4000", }, }; var req = new HttpRequestMessage(HttpMethod.Post, "https://acme.nolapro.com/!/api/v2/items/batch") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
Barcode shelf labels as a PDF
A sheet of scannable shelf labels for the item. This is the label SHEET; GET /items/{id}/barcode returns a single barcode as a PNG instead.
Answers application/pdf, not JSON. Because the body is binary it cannot be carried inside a /batch results array; asking for it there returns 415 not_batchable.
Requires scope items:read.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer |
curl \ 'https://acme.nolapro.com/!/api/v2/items/104/labels' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/104/labels'); 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/items/104/labels", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/104/labels', { 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/items/104/labels"); res.EnsureSuccessStatusCode();
Price list as a PDF
The price list across the catalogue. A report over every item, so it takes filters rather than an id.
Answers application/pdf, not JSON. Because the body is binary it cannot be carried inside a /batch results array; asking for it there returns 415 not_batchable.
Requires scope items:read.
| Name | In | Type | Notes |
|---|---|---|---|
| inventorylocationid | query | string | Restrict to one stocking location. |
| categoryid | query | string | Restrict to one category. |
| customerid | query | string | Price it as this customer would see it. |
| pricelevelid | query | string | Price it at this level. |
| begincode | query | string | Start of an item-code range. |
| endcode | query | string | End of an item-code range. |
| showavailable | query | string | Include the available quantity column. true or false. |
curl \ 'https://acme.nolapro.com/!/api/v2/items/pricelist' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/items/pricelist'); 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/items/pricelist", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/items/pricelist', { 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/items/pricelist"); res.EnsureSuccessStatusCode();