Skip to main content

Purchase Requisition API

Create purchase requisitions for internal approval before creating POs.


Endpoints

MethodEndpointDescription
GET/record/v1/purchaseRequisitionList purchase requisitions
GET/record/v1/purchaseRequisition/{id}Get specific requisition
POST/record/v1/purchaseRequisitionCreate requisition
PATCH/record/v1/purchaseRequisition/{id}Update requisition
DELETE/record/v1/purchaseRequisition/{id}Delete requisition

Key Fields

FieldTypeDescriptionRequired
idstringInternal ID-
tranIdstringRequisition numberAuto-generated
entityobjectVendor (optional for requisitions)No
tranDatestringRequest dateYes
dueDatestringNeeded by dateNo
approvalStatusobjectApproval statusRead-only
subsidiaryobjectSubsidiaryYes (OneWorld)
locationobjectLocationNo
departmentobjectDepartmentNo
classobjectClassNo
requestorobjectEmployee requestorNo
supervisorobjectSupervisor for approvalNo
memostringMemoNo
totalnumberTotal amount (read-only)-
itemcollectionRequested itemsYes

Example: Create Purchase Requisition

POST /record/v1/purchaseRequisition
Content-Type: application/json

Request Body

{
"tranDate": "2025-12-25",
"dueDate": "2026-01-15",
"subsidiary": {
"id": "1"
},
"location": {
"id": "1"
},
"department": {
"id": "10"
},
"requestor": {
"id": "250"
},
"supervisor": {
"id": "100"
},
"memo": "Restock request for warehouse - Q1 2026",
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 100,
"rate": 25.00,
"amount": 2500.00,
"description": "Widget A - Standard",
"expectedReceiptDate": "2026-01-15"
},
{
"item": { "id": "790" },
"quantity": 50,
"rate": 50.00,
"amount": 2500.00,
"description": "Widget B - Premium"
}
]
}
}

Response

{
"id": "3001",
"tranId": "PR-2025-001",
"tranDate": "2025-12-25",
"dueDate": "2026-01-15",
"approvalStatus": {
"id": "1",
"refName": "Pending Approval"
},
"subsidiary": {
"id": "1",
"refName": "Parent Company"
},
"location": {
"id": "1",
"refName": "Main Warehouse"
},
"department": {
"id": "10",
"refName": "Operations"
},
"requestor": {
"id": "250",
"refName": "John Smith"
},
"supervisor": {
"id": "100",
"refName": "Jane Manager"
},
"memo": "Restock request for warehouse - Q1 2026",
"total": 5000.00,
"item": {
"items": [
{
"item": { "id": "789", "refName": "Widget A - Standard" },
"quantity": 100,
"rate": 25.00,
"amount": 2500.00,
"description": "Widget A - Standard",
"expectedReceiptDate": "2026-01-15"
},
{
"item": { "id": "790", "refName": "Widget B - Premium" },
"quantity": 50,
"rate": 50.00,
"amount": 2500.00,
"description": "Widget B - Premium"
}
]
},
"links": [
{
"rel": "self",
"href": "https://account.suitetalk.api.netsuite.com/services/rest/record/v1/purchaseRequisition/3001"
}
]
}

Example: Update Requisition

PATCH /record/v1/purchaseRequisition/3001
Content-Type: application/json

Request Body

{
"memo": "Restock request for warehouse - Q1 2026 - URGENT",
"dueDate": "2026-01-10",
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 150,
"rate": 25.00,
"amount": 3750.00
},
{
"item": { "id": "790" },
"quantity": 50,
"rate": 50.00,
"amount": 2500.00
}
]
}
}

Line Items

Item Sublist Fields

FieldTypeDescriptionRequired
itemobjectItem to requisitionYes
quantitynumberQuantity neededYes
ratenumberExpected unit priceNo
amountnumberLine total (calculated)-
descriptionstringItem descriptionNo
expectedReceiptDatestringExpected receipt dateNo
locationobjectDelivery locationNo
departmentobjectDepartmentNo
classobjectClassNo
customerobjectCustomer (for job costing)No

Query Filters

Find Pending Approval

GET /record/v1/purchaseRequisition?q=approvalStatus.id='1'

Find by Requestor

GET /record/v1/purchaseRequisition?q=requestor='250'

Find by Date Range

GET /record/v1/purchaseRequisition?q=tranDate BETWEEN '2025-01-01' AND '2025-12-31'

Find by Department

GET /record/v1/purchaseRequisition?q=department='10'

Find Urgent Requisitions (Due Soon)

GET /record/v1/purchaseRequisition?q=dueDate < '2026-01-20' AND approvalStatus.id='1'

Approval Statuses

StatusDescription
Pending ApprovalAwaiting supervisor approval
ApprovedApproved, ready to convert to PO
RejectedRejected by supervisor
CancelledCancelled by requestor

Convert to Purchase Order

Once approved, convert to PO:

POST /record/v1/purchaseOrder
Content-Type: application/json
{
"createdFrom": {
"id": "3001"
},
"entity": {
"id": "789"
},
"tranDate": "2025-12-26"
}

Important Notes

  • Purchase requisitions require approval workflow to be enabled in NetSuite
  • The approvalStatus field is read-only and managed by the approval workflow
  • Requisitions can be created without specifying a vendor; vendor is selected when converting to PO
  • Line items must have valid item IDs; inventory and non-inventory items are supported
  • The total field is automatically calculated from line item amounts
  • Expected receipt dates help with planning and inventory management
  • Multiple requisitions can be combined into a single PO during conversion
  • Requisitions cannot be edited after approval (must be rejected and recreated)
  • Department, class, and location can be set at header or line level
  • The requestor field typically defaults to the current user when creating via API

See Also