Purchase Requisition API
Create purchase requisitions for internal approval before creating POs.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /record/v1/purchaseRequisition | List purchase requisitions |
GET | /record/v1/purchaseRequisition/{id} | Get specific requisition |
POST | /record/v1/purchaseRequisition | Create requisition |
PATCH | /record/v1/purchaseRequisition/{id} | Update requisition |
DELETE | /record/v1/purchaseRequisition/{id} | Delete requisition |
Key Fields
| Field | Type | Description | Required |
|---|---|---|---|
id | string | Internal ID | - |
tranId | string | Requisition number | Auto-generated |
entity | object | Vendor (optional for requisitions) | No |
tranDate | string | Request date | Yes |
dueDate | string | Needed by date | No |
approvalStatus | object | Approval status | Read-only |
subsidiary | object | Subsidiary | Yes (OneWorld) |
location | object | Location | No |
department | object | Department | No |
class | object | Class | No |
requestor | object | Employee requestor | No |
supervisor | object | Supervisor for approval | No |
memo | string | Memo | No |
total | number | Total amount (read-only) | - |
item | collection | Requested items | Yes |
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
| Field | Type | Description | Required |
|---|---|---|---|
item | object | Item to requisition | Yes |
quantity | number | Quantity needed | Yes |
rate | number | Expected unit price | No |
amount | number | Line total (calculated) | - |
description | string | Item description | No |
expectedReceiptDate | string | Expected receipt date | No |
location | object | Delivery location | No |
department | object | Department | No |
class | object | Class | No |
customer | object | Customer (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
| Status | Description |
|---|---|
Pending Approval | Awaiting supervisor approval |
Approved | Approved, ready to convert to PO |
Rejected | Rejected by supervisor |
Cancelled | Cancelled 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
approvalStatusfield 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
totalfield 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
requestorfield typically defaults to the current user when creating via API
See Also
- Purchase Order - Convert to POs
- Employee - Requestor records
- Inventory Item - Items to requisition