Purchase orders
Purchase orders to a vendor. A proposal is status: "proposal", the same shape as an AR quote. ponumber is assigned under a lock when omitted.
The object#
| Field | Type | Description |
|---|---|---|
| idread-only | integer | NolaPro id. |
| vendorid | integer | Reference to vendors, by id. Write either this or vendor. |
| vendor | string(30) | Code for the referenced vendor, instead of the id. |
| ponumber | string(20) | The customer's purchase order number. |
| duedate | string | Date payment is due. |
| locationid | integer | Inventory location to receive into. |
| location | string(20) | The locationcode of the referenced inventorylocations, instead of the id. Send this or locationid, not both unless they agree. |
| carrierserviceid | integer | Carrier service the purchase order ships by. |
| carrierservice | string(100) | Code for the referenced carrierservice, instead of the id. |
| tracknumber | string(255) | Carrier tracking number. |
| contact | string(20) | Vendor contact for the purchase order. |
| requisition | string(22) | Requisition reference. |
| ordernumber | string(20) | Order # of the sales order this PO buys for, when the PO was pulled from an order. |
| complete | integer | 1 when the PO is complete - fully received or manually closed; no further receipts are expected. |
| cancel | boolean | Cancelled. Always a boolean on the wire, whatever integer width the column uses (D23). |
| entrydate | string | When the record was created. |
| lastchangedateread-only | string | Last modification. Drives modifiedsince. |
| referenceid | integer | Referenceid. Id only. |
| notes | text | Notes. Stored as text, no practical length limit. |
| initials | string(255) | Buyer initials shown on the PO. |
| status | string | A proposal is the PO version of a quote - one field flip converts it. Partial and Complete are not statuses: see effectivestatus and complete. Stored as int -1/0; never exposed (D35). One of proposal, open. |
| effectivestatusread-only | string | What the PO list screen shows. partial is computed from whether receipts exist - it is not stored, so it cannot be written; sending it is rejected like any read-only field. One of proposal, open, partial, complete. |
| description | string(255) | Purchase order description. |
| wherefrom | integer | Where the PO originated; 0 for POs entered on the purchase order screen. |
| salesordernumber | string(20) | Sales Order Number reference shown on the PO. |
| dropship | integer | 1 when the PO drop-ships from the vendor directly to the customer. |
| shiptoid | integer | Shiptoid. Id only. |
| salesorderid | integer | Salesorderid. Id only. |
| paytermsid | integer | Paytermsid. Id only - the table this points at is not identifiable from the column name, so there is no human key to send instead. |
| payterms | string(30) | Code for the referenced invoiceterms, instead of the id. |
| ccpurchaseid | integer | Ccpurchaseid. Id only. |
| stageid | integer | Stageid. Id only. |
| recipient_userid | integer | User who will receive the goods. |
| recipient_user | string(50) | The name of the referenced genusers, instead of the id. Send this or recipient_userid, not both unless they agree. |
| jobid | integer | Jobid. Id only. |
| totaltaxmoney | string(5dp) | Stored as decimal(19,5). |
| main_invpoid | integer | Main invpoid. Id only. |
| prior_invpoid | integer | Prior invpoid. Id only. |
| retainagemoney | string(2dp) | Stored as decimal(12,2). |
| fob | string(2) | FOB terms printed on the PO. |
| chargeback | integer | 1 when the PO is charged back to another vendor. |
| chargeback_vendorid | integer | Vendor the chargeback PO is charged back to. |
| chargeback_vendor | string(30) | The vendorcode of the referenced vendors, instead of the id. Send this or chargeback_vendorid, not both unless they agree. |
| chargeback_invpoid | integer | Chargeback invpoid. Id only. |
| chargeback_percentnumber | string(2dp) | Numeric string, 2 decimal places. Not money - do not apply currency rounding. |
| pototalmoney | string(6dp) | Stored as decimal(19,6). |
| currency | string(10) | Currency the PO is priced in. |
| curratenumber | string(10dp) | Numeric string, 10 decimal places. Not money - do not apply currency rounding. |
| taxratenumber | string(2dp) | Numeric string, 2 decimal places. Not money - do not apply currency rounding. |
| costcodeid | integer | Cost code. |
| costcode | string(20) | Code for the referenced costcode, instead of the id. |
| glcategoryid | integer | Glcategoryid. Id only. |
| glcategory | string(20) | The code of the referenced glcategories, instead of the id. Send this or glcategoryid, not both unless they agree. |
| return_from_invpoid | integer | Return from invpoid. Id only. |
| rtvnumber | string(45) | RTV number, for a return-to-vendor PO. |
| vendor_orderfromid | integer | Vendor orderfromid. Id only. |
| address1 | string(100) | Street address. |
| address2 | string(100) | Second address line. |
| city | string(50) | City of the PO ship-to address. |
| completedate | string | Date the PO was completed. |
| customerdropshiptoid | integer | Customer ship-to address a drop-ship PO delivers to. |
| customerdropshipto | string(30) | The customercode of the referenced customers, instead of the id. Send this or customerdropshiptoid, not both unless they agree. |
| donotupdatelastpocost | boolean | True keeps receipts on this PO from updating the item’s last PO cost (Do Not Update Last PO Cost). |
| headernote | text | Headernote. Stored as text, no practical length limit. |
| prepaid | integer | Prepaid. Id only. |
| shipname | string(50) | Ship To name printed on the PO. |
| state | string(20) | State of the PO ship-to address. |
| zip | string(15) | Postal code. |
| addressverifiedread-only | string(32) | Hash of the address as it stood when it last passed the AvaTax/USPS address check; when it no longer matches the current address the address counts as unverified. Maintained by the verification flow, so it cannot be written through the API. |
| externalid | string(100) | Your own key. Scoped to your company. |
Endpoints#
Create many.
Requires scope purchaseorders:write.
| Name | In | Type | Notes |
|---|---|---|---|
| Field | Type | Description |
|---|---|---|
| vendoridrequired | integer | Who the order is placed with. |
| number | string(20) | PO number. Leave it out and NolaPro allocates the next one - which is the normal case. |
| date | string | Order date. Defaults to today. |
| duedate | string | When it is wanted. Defaults to the order date. |
| locationid | integer | Inventory location to receive into. |
| description | string(255) | Free text on the order. |
| notes | text | Longer notes. |
| requisition | string(22) | Requisition reference. |
| ordernumber | string(20) | Your order number. |
| tracknumber | string(255) | Carrier tracking number. |
| externalid | string(100) | Your own identifier for this record. Stored verbatim and returned on reads; GET /<resource>?externalid=... finds it again. |
| linesrequired | array of object | At least one line. pototal and the line numbers are derived - do not send them. |
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request was malformed. |
| 422 | rule_violation | NolaPro refused the document. message carries its reason. |
| 422 | unknown_value | A reference did not resolve in this company. |
curl -X POST \ 'https://acme.nolapro.com/!/api/v2/purchaseorders/batch' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '[ { "vendorid": 104, "date": "2026-08-02", "duedate": "2026-08-02", "externalid": "crm-8842", "lines": [ { "quantity": "3.000000", "price": "125.0000" } ] } ]'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/purchaseorders/batch'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode([ [ 'vendorid' => 104, 'date' => '2026-08-02', 'duedate' => '2026-08-02', 'externalid' => 'crm-8842', 'lines' => [ [ 'quantity' => '3.000000', 'price' => '125.0000', ], ], ], ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.post( "https://acme.nolapro.com/!/api/v2/purchaseorders/batch", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json=[ { "vendorid": 104, "date": "2026-08-02", "duedate": "2026-08-02", "externalid": "crm-8842", "lines": [ { "quantity": "3.000000", "price": "125.0000", }, ], }, ], ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/purchaseorders/batch', { method: 'POST', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify([ { vendorid: 104, date: "2026-08-02", duedate: "2026-08-02", externalid: "crm-8842", lines: [ { quantity: "3.000000", price: "125.0000", }, ], }, ]), } ); 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 { vendorid = 104, date = "2026-08-02", duedate = "2026-08-02", externalid = "crm-8842", lines = new[] { new { quantity = "3.000000", price = "125.0000", }, }, }, }; var req = new HttpRequestMessage(HttpMethod.Post, "https://acme.nolapro.com/!/api/v2/purchaseorders/batch") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
{
"results": [
{
"index": 1,
"status": 1
}
]
}
List purchase orders.
Requires scope purchaseorders:read.
| Name | In | Type | Notes |
|---|---|---|---|
| status | query | string | Restrict to one status. One of: proposal, open. |
| complete | query | string | Restrict to one complete. |
| vendorid | query | string | Restrict to one vendorid. |
| locationid | query | string | Restrict to one locationid. |
| jobid | query | string | Restrict to one jobid. |
| description | query | string | description. Partial match, case-insensitive. |
| ponumber | query | string | Partial match, case insensitive. |
| cancel | query | string | Defaults to false. Pass true or any. |
| 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. |
| 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. |
| Status | Code | Meaning |
|---|---|---|
| 403 | insufficient_scope | Token lacks read scope. |
curl \ 'https://acme.nolapro.com/!/api/v2/purchaseorders' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/purchaseorders'); 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/purchaseorders", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/purchaseorders', { 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/purchaseorders"); res.EnsureSuccessStatusCode();
Create.
Creates a purchase order, optionally with its lines. Omit ponumber to have one assigned from the ponumberseq sequence under a lock.
Requires scope purchaseorders:write.
| Name | In | Type | Notes |
|---|---|---|---|
| Field | Type | Description |
|---|---|---|
| vendoridrequired | integer | Who the order is placed with. |
| number | string(20) | PO number. Leave it out and NolaPro allocates the next one - which is the normal case. |
| date | string | Order date. Defaults to today. |
| duedate | string | When it is wanted. Defaults to the order date. |
| locationid | integer | Inventory location to receive into. |
| description | string(255) | Free text on the order. |
| notes | text | Longer notes. |
| requisition | string(22) | Requisition reference. |
| ordernumber | string(20) | Your order number. |
| tracknumber | string(255) | Carrier tracking number. |
| externalid | string(100) | Your own identifier for this record. Stored verbatim and returned on reads; GET /<resource>?externalid=... finds it again. |
| linesrequired | array of object | At least one line. pototal and the line numbers are derived - do not send them. |
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | A required field was missing. |
| 422 | rule_violation | NolaPro refused the document. message carries its reason. |
| 422 | unknown_value | A reference did not resolve in this company. |
curl -X POST \ 'https://acme.nolapro.com/!/api/v2/purchaseorders' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '{ "vendorid": 104, "date": "2026-08-02", "duedate": "2026-08-02", "externalid": "crm-8842", "lines": [ { "quantity": "3.000000", "price": "125.0000" } ] }'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/purchaseorders'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode([ 'vendorid' => 104, 'date' => '2026-08-02', 'duedate' => '2026-08-02', 'externalid' => 'crm-8842', 'lines' => [ [ 'quantity' => '3.000000', 'price' => '125.0000', ], ], ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.post( "https://acme.nolapro.com/!/api/v2/purchaseorders", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json={ "vendorid": 104, "date": "2026-08-02", "duedate": "2026-08-02", "externalid": "crm-8842", "lines": [ { "quantity": "3.000000", "price": "125.0000", }, ], }, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/purchaseorders', { method: 'POST', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify({ vendorid: 104, date: "2026-08-02", duedate: "2026-08-02", externalid: "crm-8842", lines: [ { quantity: "3.000000", price: "125.0000", }, ], }), } ); 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 { vendorid = 104, date = "2026-08-02", duedate = "2026-08-02", externalid = "crm-8842", lines = new[] { new { quantity = "3.000000", price = "125.0000", }, }, }; var req = new HttpRequestMessage(HttpMethod.Post, "https://acme.nolapro.com/!/api/v2/purchaseorders") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
{
"status": "quote"
}
Retrieve one record.
Requires scope purchaseorders:read.
| 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. |
| Status | Code | Meaning |
|---|---|---|
| 404 | not_found | No record with that id. |
curl \ 'https://acme.nolapro.com/!/api/v2/purchaseorders/104' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/purchaseorders/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/purchaseorders/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/purchaseorders/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/purchaseorders/104"); res.EnsureSuccessStatusCode();
{
"status": "proposal",
"effectivestatus": "proposal"
}
Update.
Only the fields you send change. Children cannot be sent here - lines are create-only (see Conventions). Use the child resource to add, change or remove one. Changing status from quote to open commits inventory for every line and is reported back as an inventory_committed warning.
Requires scope purchaseorders:write.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The record id. |
| Field | Type | Description |
|---|---|---|
| duedate | string | When payment or delivery is expected. |
| description | string(255) | Free text. |
| notes | string(500) | Longer notes. |
| requisition | string(22) | Requisition reference. |
| ordernumber | string(20) | Your order number. |
| tracknumber | string(255) | Carrier tracking number. |
| externalid | string(100) | Your own identifier for this record. |
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request was malformed. |
| 404 | not_found | No such record, or it belongs to another company. |
| 409 | line_has_receipts | The purchase order has receipts against it. |
| 409 | po_complete | The purchase order is marked complete. |
| 409 | stale_record | If-Match did not match; someone else changed it first. |
| 422 | rule_violation | NolaPro refused the change. message carries its reason. |
curl -X PATCH \ 'https://acme.nolapro.com/!/api/v2/purchaseorders/104' \ -H 'Authorization: Bearer $NP_TOKEN' \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: your-unique-key' \ -d '{ "duedate": "2026-08-01", "description": "Example description", "notes": "Example notes", "requisition": "Example requisition", "ordernumber": "INV-88421", "tracknumber": "INV-88421" }'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/purchaseorders/104'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NP_TOKEN')], CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_POSTFIELDS => json_encode([ 'duedate' => '2026-08-01', 'description' => 'Example description', 'notes' => 'Example notes', 'requisition' => 'Example requisition', 'ordernumber' => 'INV-88421', 'tracknumber' => 'INV-88421', ]), ]); $res = json_decode(curl_exec($ch), true);
import os, requests r = requests.patch( "https://acme.nolapro.com/!/api/v2/purchaseorders/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, json={ "duedate": "2026-08-01", "description": "Example description", "notes": "Example notes", "requisition": "Example requisition", "ordernumber": "INV-88421", "tracknumber": "INV-88421", }, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/purchaseorders/104', { method: 'PATCH', headers: { Authorization: `Bearer ${process.env.NP_TOKEN}` }, body: JSON.stringify({ duedate: "2026-08-01", description: "Example description", notes: "Example notes", requisition: "Example requisition", ordernumber: "INV-88421", tracknumber: "INV-88421", }), } ); 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 { duedate = "2026-08-01", description = "Example description", notes = "Example notes", requisition = "Example requisition", ordernumber = "INV-88421", tracknumber = "INV-88421", }; var req = new HttpRequestMessage(HttpMethod.Patch, "https://acme.nolapro.com/!/api/v2/purchaseorders/104") { Content = JsonContent.Create(body), }; req.Headers.Add("Idempotency-Key", "your-unique-key"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
Cancel.
Requires scope purchaseorders:cancel.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The record id. |
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request was malformed. |
| 409 | cannot_cancel | Something already depends on this document - a payment, a shipment, an invoice. |
| 409 | line_has_receipts | The purchase order has receipts against it. |
| 422 | unknown_value | No such record in this company. |
curl -X DELETE \ 'https://acme.nolapro.com/!/api/v2/purchaseorders/104' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/purchaseorders/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/purchaseorders/104", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/purchaseorders/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/purchaseorders/104"); var res = await http.SendAsync(req); res.EnsureSuccessStatusCode();
Purchase order as a PDF
The purchase order as it is sent to the vendor.
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 purchaseorders:read.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The record id. |
curl \ 'https://acme.nolapro.com/!/api/v2/purchaseorders/104/pdf' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/purchaseorders/104/pdf'); 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/purchaseorders/104/pdf", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/purchaseorders/104/pdf', { 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/purchaseorders/104/pdf"); res.EnsureSuccessStatusCode();
Receiving checklist as a PDF
The receiving checklist for the order: what to expect and tick off as it arrives. Carries no costs, because it goes to the dock.
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 purchaseorders:read.
| Name | In | Type | Notes |
|---|---|---|---|
| idrequired | path | integer | The record id. |
curl \ 'https://acme.nolapro.com/!/api/v2/purchaseorders/104/checklist' \ -H 'Authorization: Bearer $NP_TOKEN'
$ch = curl_init('https://acme.nolapro.com/!/api/v2/purchaseorders/104/checklist'); 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/purchaseorders/104/checklist", headers={"Authorization": f"Bearer {os.environ['NP_TOKEN']}"}, ) r.raise_for_status()
const res = await fetch( 'https://acme.nolapro.com/!/api/v2/purchaseorders/104/checklist', { 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/purchaseorders/104/checklist"); res.EnsureSuccessStatusCode();