Purchase Order Creation API
Purchase Order APIs
Purchase Order Creation API
Create purchase orders with line items, vendor details, and procurement settings
Purchase Order Creation API
Authentication
All requests require an API key in the request headers. Headers:Request
Content-Type:application/json
Body Parameters
Fields Required for Active State (when state: "ACTIVE")
When state: "ACTIVE" is passed, the following fields must be present in addition to the schema-required fields for the PO to be activated:
If any of the above are missing, the PO is still created in draft state and
submitWarnings in the response identifies exactly which fields were absent.
Line Items Object
Each item in thelineItems array must contain the following fields:
SKU matching (THREE_WAY): WhenmatchingTypeisTHREE_WAY, every line item must include eitherskuCodeorskuName, and it must resolve to an existing SKU in your inventory. If any line item is missing both fields, or if the provided code/name cannot be matched, the request is rejected with a400error and the purchase order is not created. See Bulk SKU Creation to pre-populate your inventory.
PO Type Values
ThepoType field accepts the following values:
GOODS: Purchase order for physical goods or productsSERVICES: Purchase order for services
Matching Type Values
ThematchingType field accepts the following values:
TWO_WAY: Purchase order matching based on purchase order and invoice (2-way match)THREE_WAY: Purchase order matching based on purchase order, invoice, and goods receipt note (3-way match)
Tags
Tags can be applied both at the PO level (tags in the request body) and at the line-item level (tags inside each lineItems entry). In both cases tags is an object that maps a tag slug to a { value } object:
To discover the available tag slugs, their types, and (for
DROPDOWN tags) the valid value ids, see the tag APIs: the Tag List API, and Tag Detail API.value you send depends on the tag’s type:
Code Examples
Success Response
HTTP Status:200 OK
Response Fields:
skuMatchWarnings Object
submitWarnings Object
Response Example — draft (no state field or state: "DRAFTED")
Response Example — active (state: "ACTIVE", all fields present)
Response Example — draft despite state: "ACTIVE" (fields missing)
Response Example — state: "ACTIVE" with SKU warnings
Error Responses
Missing Required Fields
HTTP Status:400 Bad Request
Invalid Procurement Type
HTTP Status:400 Bad Request
Invalid Matching Type
HTTP Status:400 Bad Request
Invalid Date
HTTP Status:400 Bad Request
Invalid Expected Delivery Date
HTTP Status:400 Bad Request
SKU Required (THREE_WAY match)
HTTP Status:400 Bad Request
SKU Not Found (THREE_WAY match)
HTTP Status:400 Bad Request
Invalid Line Items
HTTP Status:400 Bad Request
400 Bad Request
400 Bad Request
Invalid Currency
HTTP Status:400 Bad Request
Invalid Description Length
HTTP Status:400 Bad Request
Vendor Not Found
HTTP Status:404 Not Found
Invalid GSTIN
HTTP Status:400 Bad Request
Invalid State
HTTP Status:400 Bad Request
Authentication Errors
HTTP Status:401 Unauthorized
Permission Errors
HTTP Status:403 Forbidden
Purchase Order Creation Errors
HTTP Status:500 Internal Server Error
Internal Error
HTTP Status:500 Internal Server Error
Best Practices
Purchase Order Creation
- Ensure all required fields (
poNumber,lineItems,poType,matchingType,poDate) are provided - Use ISO 8601 date format (YYYY-MM-DD) for all date fields
- Provide at least one line item with valid
quantity,rate, andidentifiervalues - Use
INRfor thecurrencyfield (only INR is currently supported) - Choose the appropriate
matchingTypebased on your procurement process:- Use
TWO_WAYfor simpler matching between PO and invoice - Use
THREE_WAYwhen goods receipt verification is required
- Use
- Link the purchase order to a vendor using
vendorIdif available - Include
gstinfor tax compliance in Indian markets - Keep
descriptionconcise (max 255 characters) for better readability - Use
termsAndConditionsto specify important contractual terms - Add
additionalNotesfor delivery instructions or special requirements
Activating a PO on Creation
Passstate: "ACTIVE" when the PO is complete and ready to be activated immediately:
- The response
statewill beACTIVEif all required fields are present, orDRAFTEDif anything was missing - Check
submitWarningsin the response — it lists exactly which PO-level or line item fields prevented activation - A PO created in
DRAFTEDstate can be activated later by calling the update API withstate: "ACTIVE" - Omitting
state(or passingstate: "DRAFTED") always creates in draft, regardless of what fields are present
Line Items
- Ensure each line item has a unique
identifier - Use positive numbers for
quantityandrate