✦Developers

KERN ERP API — Procurement

Masters, products and styles, Buyer POs, purchase orders, GRNs, sales invoices, packing slips and stock.

Version 2026-10-09.1 · published 9 Oct 2026 · 105 APIs

Base URL https://kronex.codeverse.co/cedge

Download: OpenAPI (JSON) · Postman collection · Guides · Changelog

Procurement

Grouped by screen, as in the app. Scope for the whole module: erp.procurement.*:read or :write.

Purchase Orders

Access: erp.procurement.purchase_orders:read(or :write)

GET/public/v1/procurement/purchase-orders

List purchase orders (paged)

Scope erp.procurement.purchase_orders:read · the client's role needs view on Purchase Orders

Parameters
NameInTypeNotes
pagequeryinteger (int32)Page number, starting at 0.
sizequeryinteger (int32)Items per page.
sortByquerystringField to sort by.
sortDirquerystringSort direction: asc or desc.
statusquerystringOnly records with this status (see the record's status values).
searchquerystringSearch text (part of a name, number or code; not case-sensitive).
vendorIdqueryinteger (int64)Only this vendor / customer (id).
poCategoryquerystringOnly this purchase-order category.
Response (200) — data
FieldTypeNotes
contentarray of object
idinteger (int64)
poNumstring
poDatestring (date)
deliveryDatestring (date)
vendorIdinteger (int64)
vendorNamestring
vendorCodestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
shipToLabelstring
orderModestring
poCategorystring
processNamestring
sourceRefTypestring
sourceLabelsarray of string
itemTypesarray of string
itemsCountinteger (int32)
grandTotalnumber
receivedAmountnumber
statusstring
approverNamestring
approvedOnstring
notesstring
shippingMethodstring
shippingTermsstring
paymentTermsstring
cf1string
cf2string
cf3string
cf4string
cf5string
pageinteger (int32)
sizeinteger (int32)
totalElementsinteger (int64)
totalPagesinteger (int32)
lastboolean

Errors: 400, 401, 403, 404, 405, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — List purchase orders (paged) curl -X GET "https://kronex.codeverse.co/cedge/public/v1/procurement/purchase-orders?page=0&size=20" \ -H "Authorization: Bearer $KERN_API_KEY"
POST/public/v1/procurement/purchase-orders

Create a purchase order (draft)

Scope erp.procurement.purchase_orders:write · the client's role needs create on Purchase Orders · send an Idempotency-Key

Parameters
NameInTypeNotes
Idempotency-Key *headerstringAny unique text up to 120 characters (e.g. a UUID). A retry with the same key and body returns the first answer instead of doing the work twice.
Request body
FieldTypeNotes
vendorIdinteger (int64)
vendorNamestring
vendorCodestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
poDatestring (date)
deliveryDatestring (date)
shipTostring
shipToLabelstring
shipToTypestring
shipLocationstring
referenceNostring
orderModestring
poCategorystring
processDefinitionIdinteger (int64)
processNamestring
sourceRefTypestring
sourceRefIdinteger (int64)
sourceRefIdsarray of integer (int64)
shippingMethodstring
shippingTermsstring
incotermsstring
carrierstring
paymentTermsstring
currencystring
advancePctnumber
dueDatestring (date)
notesstring
sourceProdOrderIdinteger (int64)
sourceStyleIdinteger (int64)
cf1string
cf2string
cf3string
cf4string
cf5string
linesarray of object
rmType *string
rmRefId *integer (int64)
productionOrderIdinteger (int64)

…9 more fields — see the OpenAPI file.

Response (200) — data
FieldTypeNotes
idinteger (int64)
poNumstring
vendorIdinteger (int64)
vendorNamestring
vendorCodestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
vendorAddressstring
vendorGstinstring
vendorTermsConditionsstring
poDatestring (date)
deliveryDatestring (date)
dueDatestring (date)
shipTostring
shipToLabelstring
shipToTypestring
shipLocationstring
referenceNostring
orderModestring
poCategorystring
processDefinitionIdinteger (int64)
processNamestring
sourceRefTypestring
sourceRefIdinteger (int64)
sourceRefIdsarray of integer (int64)
sourceLabelsarray of string
shippingMethodstring
shippingTermsstring
incotermsstring
carrierstring
paymentTermsstring
currencystring
advancePctnumber
notesstring
statusstring
subTotalnumber
totalDiscountnumber
netAmountnumber
totalGstnumber

…70 more fields — see the OpenAPI file.

Errors: 400, 401, 403, 404, 405, 409, 413, 422, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Create a purchase order (draft) curl -X POST "https://kronex.codeverse.co/cedge/public/v1/procurement/purchase-orders" \ -H "Authorization: Bearer $KERN_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ … }'
GET/public/v1/procurement/purchase-orders/{id}

Get one purchase order with lines

Scope erp.procurement.purchase_orders:read · the client's role needs view on Purchase Orders

Parameters
NameInTypeNotes
id *pathinteger (int64)The record's id.
Response (200) — data
FieldTypeNotes
idinteger (int64)
poNumstring
vendorIdinteger (int64)
vendorNamestring
vendorCodestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
vendorAddressstring
vendorGstinstring
vendorTermsConditionsstring
poDatestring (date)
deliveryDatestring (date)
dueDatestring (date)
shipTostring
shipToLabelstring
shipToTypestring
shipLocationstring
referenceNostring
orderModestring
poCategorystring
processDefinitionIdinteger (int64)
processNamestring
sourceRefTypestring
sourceRefIdinteger (int64)
sourceRefIdsarray of integer (int64)
sourceLabelsarray of string
shippingMethodstring
shippingTermsstring
incotermsstring
carrierstring
paymentTermsstring
currencystring
advancePctnumber
notesstring
statusstring
subTotalnumber
totalDiscountnumber
netAmountnumber
totalGstnumber

…70 more fields — see the OpenAPI file.

Errors: 400, 401, 403, 404, 405, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Get one purchase order with lines curl -X GET "https://kronex.codeverse.co/cedge/public/v1/procurement/purchase-orders/{id}" \ -H "Authorization: Bearer $KERN_API_KEY"
PUT/public/v1/procurement/purchase-orders/{id}

Update a draft or rejected purchase order

Scope erp.procurement.purchase_orders:write · the client's role needs edit on Purchase Orders · send an Idempotency-Key

Parameters
NameInTypeNotes
id *pathinteger (int64)The record's id.
Idempotency-Key *headerstringAny unique text up to 120 characters (e.g. a UUID). A retry with the same key and body returns the first answer instead of doing the work twice.
Request body
FieldTypeNotes
vendorIdinteger (int64)
vendorNamestring
vendorCodestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
poDatestring (date)
deliveryDatestring (date)
shipTostring
shipToLabelstring
shipToTypestring
shipLocationstring
referenceNostring
orderModestring
poCategorystring
processDefinitionIdinteger (int64)
processNamestring
sourceRefTypestring
sourceRefIdinteger (int64)
sourceRefIdsarray of integer (int64)
shippingMethodstring
shippingTermsstring
incotermsstring
carrierstring
paymentTermsstring
currencystring
advancePctnumber
dueDatestring (date)
notesstring
sourceProdOrderIdinteger (int64)
sourceStyleIdinteger (int64)
cf1string
cf2string
cf3string
cf4string
cf5string
linesarray of object
rmType *string
rmRefId *integer (int64)
productionOrderIdinteger (int64)

…9 more fields — see the OpenAPI file.

Response (200) — data
FieldTypeNotes
idinteger (int64)
poNumstring
vendorIdinteger (int64)
vendorNamestring
vendorCodestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
vendorAddressstring
vendorGstinstring
vendorTermsConditionsstring
poDatestring (date)
deliveryDatestring (date)
dueDatestring (date)
shipTostring
shipToLabelstring
shipToTypestring
shipLocationstring
referenceNostring
orderModestring
poCategorystring
processDefinitionIdinteger (int64)
processNamestring
sourceRefTypestring
sourceRefIdinteger (int64)
sourceRefIdsarray of integer (int64)
sourceLabelsarray of string
shippingMethodstring
shippingTermsstring
incotermsstring
carrierstring
paymentTermsstring
currencystring
advancePctnumber
notesstring
statusstring
subTotalnumber
totalDiscountnumber
netAmountnumber
totalGstnumber

…70 more fields — see the OpenAPI file.

Errors: 400, 401, 403, 404, 405, 409, 413, 422, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Update a draft or rejected purchase order curl -X PUT "https://kronex.codeverse.co/cedge/public/v1/procurement/purchase-orders/{id}" \ -H "Authorization: Bearer $KERN_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ … }'
PATCH/public/v1/procurement/purchase-orders/{id}/submit

Submit a purchase order for approval

Scope erp.procurement.purchase_orders:write · the client's role needs edit on Purchase Orders · send an Idempotency-Key

Parameters
NameInTypeNotes
id *pathinteger (int64)The record's id.
Idempotency-Key *headerstringAny unique text up to 120 characters (e.g. a UUID). A retry with the same key and body returns the first answer instead of doing the work twice.
Response (200) — data
FieldTypeNotes
idinteger (int64)
poNumstring
vendorIdinteger (int64)
vendorNamestring
vendorCodestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
vendorAddressstring
vendorGstinstring
vendorTermsConditionsstring
poDatestring (date)
deliveryDatestring (date)
dueDatestring (date)
shipTostring
shipToLabelstring
shipToTypestring
shipLocationstring
referenceNostring
orderModestring
poCategorystring
processDefinitionIdinteger (int64)
processNamestring
sourceRefTypestring
sourceRefIdinteger (int64)
sourceRefIdsarray of integer (int64)
sourceLabelsarray of string
shippingMethodstring
shippingTermsstring
incotermsstring
carrierstring
paymentTermsstring
currencystring
advancePctnumber
notesstring
statusstring
subTotalnumber
totalDiscountnumber
netAmountnumber
totalGstnumber

…70 more fields — see the OpenAPI file.

Errors: 400, 401, 403, 404, 405, 409, 413, 422, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Submit a purchase order for approval curl -X PATCH "https://kronex.codeverse.co/cedge/public/v1/procurement/purchase-orders/{id}/submit" \ -H "Authorization: Bearer $KERN_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json"
PATCH/public/v1/procurement/purchase-orders/{id}/cancel

Cancel a purchase order

Scope erp.procurement.purchase_orders:write · the client's role needs edit on Purchase Orders · send an Idempotency-Key

Parameters
NameInTypeNotes
id *pathinteger (int64)The record's id.
Idempotency-Key *headerstringAny unique text up to 120 characters (e.g. a UUID). A retry with the same key and body returns the first answer instead of doing the work twice.
Response (200) — data
FieldTypeNotes
idinteger (int64)
poNumstring
vendorIdinteger (int64)
vendorNamestring
vendorCodestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
vendorAddressstring
vendorGstinstring
vendorTermsConditionsstring
poDatestring (date)
deliveryDatestring (date)
dueDatestring (date)
shipTostring
shipToLabelstring
shipToTypestring
shipLocationstring
referenceNostring
orderModestring
poCategorystring
processDefinitionIdinteger (int64)
processNamestring
sourceRefTypestring
sourceRefIdinteger (int64)
sourceRefIdsarray of integer (int64)
sourceLabelsarray of string
shippingMethodstring
shippingTermsstring
incotermsstring
carrierstring
paymentTermsstring
currencystring
advancePctnumber
notesstring
statusstring
subTotalnumber
totalDiscountnumber
netAmountnumber
totalGstnumber

…70 more fields — see the OpenAPI file.

Errors: 400, 401, 403, 404, 405, 409, 413, 422, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Cancel a purchase order curl -X PATCH "https://kronex.codeverse.co/cedge/public/v1/procurement/purchase-orders/{id}/cancel" \ -H "Authorization: Bearer $KERN_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json"

PO Receipts (GRN)

Access: erp.procurement.grns:read(or :write)

GET/public/v1/procurement/grns

List goods receipts (GRN, paged)

Scope erp.procurement.grns:read · the client's role needs view on PO Receipts (GRN)

Parameters
NameInTypeNotes
pagequeryinteger (int32)Page number, starting at 0.
sizequeryinteger (int32)Items per page.
sortByquerystringField to sort by.
sortDirquerystringSort direction: asc or desc.
statusquerystringOnly records with this status (see the record's status values).
searchquerystringSearch text (part of a name, number or code; not case-sensitive).
Response (200) — data
FieldTypeNotes
contentarray of object
idinteger (int64)
grnNumstring
grnDatestring (date)
modestring
warehouseIdinteger (int64)
warehouseNamestring
dcNumstring
invoiceNumstring
vendorIdinteger (int64)
vendorNamestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
statusstring
lineCountinteger (int32)
itemTypesarray of string
totalQtynumber
postedAtstring (date-time)
createdAtstring (date-time)
pageinteger (int32)
sizeinteger (int32)
totalElementsinteger (int64)
totalPagesinteger (int32)
lastboolean

Errors: 400, 401, 403, 404, 405, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — List goods receipts (GRN, paged) curl -X GET "https://kronex.codeverse.co/cedge/public/v1/procurement/grns?page=0&size=20" \ -H "Authorization: Bearer $KERN_API_KEY"
POST/public/v1/procurement/grns

Create a GRN (draft)

Scope erp.procurement.grns:write · the client's role needs create on PO Receipts (GRN) · send an Idempotency-Key

Parameters
NameInTypeNotes
Idempotency-Key *headerstringAny unique text up to 120 characters (e.g. a UUID). A retry with the same key and body returns the first answer instead of doing the work twice.
Request body
FieldTypeNotes
modestring
grnDatestring (date)
warehouseIdinteger (int64)
warehouseNamestring
internalRefstring
dcNumstring
invoiceNumstring
carrierstring
tolerancePctnumber
vendorIdinteger (int64)
vendorNamestring
excessReasonstring
transportCostnumber
transportGstPctnumber
additionalCostnumber
additionalGstPctnumber
poIdsarray of integer (int64)
linesarray of object
poIdinteger (int64)
poNumstring
poLineIdinteger (int64)
itemRefTypestring
itemRefIdinteger (int64)
itemCodestring
itemDescriptionstring
uomstring
uomIdinteger (int64)
poQtynumber
prevReceivednumber
receiveQtynumber
rejectQtynumber
unitPricenumber
lotNumberstring
rollNostring
qcStatusstring
remarksstring
acceptedQtynumber
rejectedQtynumber
rejectionReasonstring
qcModestring

…7 more fields — see the OpenAPI file.

Response (200) — data
FieldTypeNotes
idinteger (int64)
grnNumstring
grnDatestring (date)
modestring
warehouseIdinteger (int64)
warehouseNamestring
internalRefstring
dcNumstring
invoiceNumstring
carrierstring
tolerancePctnumber
vendorIdinteger (int64)
vendorNamestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
vendorAddressstring
vendorGstinstring
statusstring
guidanceobject
nextActionsarray of object
blockersarray of object
excessReasonstring
transportCostnumber
transportGstPctnumber
transportGstAmtnumber
additionalCostnumber
additionalGstPctnumber
additionalGstAmtnumber
grandTotalnumber
closeReasonstring
closedByinteger (int64)
closedAtstring (date-time)
createdByinteger (int64)
postedAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)
lotTrackingboolean
invoiceApprovalStatusstring
invoiceApprovedAtstring (date-time)

…41 more fields — see the OpenAPI file.

Errors: 400, 401, 403, 404, 405, 409, 413, 422, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Create a GRN (draft) curl -X POST "https://kronex.codeverse.co/cedge/public/v1/procurement/grns" \ -H "Authorization: Bearer $KERN_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ … }'
GET/public/v1/procurement/grns/{id}

Get one GRN with lines

Scope erp.procurement.grns:read · the client's role needs view on PO Receipts (GRN)

Parameters
NameInTypeNotes
id *pathinteger (int64)The record's id.
Response (200) — data
FieldTypeNotes
idinteger (int64)
grnNumstring
grnDatestring (date)
modestring
warehouseIdinteger (int64)
warehouseNamestring
internalRefstring
dcNumstring
invoiceNumstring
carrierstring
tolerancePctnumber
vendorIdinteger (int64)
vendorNamestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
vendorAddressstring
vendorGstinstring
statusstring
guidanceobject
nextActionsarray of object
blockersarray of object
excessReasonstring
transportCostnumber
transportGstPctnumber
transportGstAmtnumber
additionalCostnumber
additionalGstPctnumber
additionalGstAmtnumber
grandTotalnumber
closeReasonstring
closedByinteger (int64)
closedAtstring (date-time)
createdByinteger (int64)
postedAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)
lotTrackingboolean
invoiceApprovalStatusstring
invoiceApprovedAtstring (date-time)

…41 more fields — see the OpenAPI file.

Errors: 400, 401, 403, 404, 405, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Get one GRN with lines curl -X GET "https://kronex.codeverse.co/cedge/public/v1/procurement/grns/{id}" \ -H "Authorization: Bearer $KERN_API_KEY"
GET/public/v1/procurement/grns/receivable-pos

Purchase orders that can be received

Scope erp.procurement.grns:read · the client's role needs view on PO Receipts (GRN)

Response (200) — data
FieldTypeNotes
poIdinteger (int64)
poNostring
poCreationDatestring (date)
vendorNamestring
companyLocationNamestring
shipToTypestring
shipToLabelstring
poDeliveryDatestring (date)
grnCountinteger (int32)
grnNosarray of string
grnsarray of object
idinteger (int64)
grnNostring
receivedDatestring (date)
pendingApprovalCountinteger (int32)
acknowledgedboolean
lastAcknowledgedAtstring (date-time)
lastAcknowledgedByNamestring
linesarray of object
poLineIdinteger (int64)
rmTypestring
rmLabelstring
productNostring
countValuestring
widthnumber
gsmnumber
millVendorNamestring
lotNostring
poQtynumber
uomstring
unitPricenumber
allowancePctnumber
receivedSoFarnumber
maxReceivableNownumber
approvedSoFarnumber
closureTypestring
closedAtstring (date-time)

Errors: 400, 401, 403, 404, 405, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Purchase orders that can be received curl -X GET "https://kronex.codeverse.co/cedge/public/v1/procurement/grns/receivable-pos?page=0&size=20" \ -H "Authorization: Bearer $KERN_API_KEY"
PATCH/public/v1/procurement/grns/{id}/post

Post a GRN (adds the stock)

Scope erp.procurement.grns:write · the client's role needs edit on PO Receipts (GRN) · send an Idempotency-Key

Parameters
NameInTypeNotes
id *pathinteger (int64)The record's id.
Idempotency-Key *headerstringAny unique text up to 120 characters (e.g. a UUID). A retry with the same key and body returns the first answer instead of doing the work twice.
Response (200) — data
FieldTypeNotes
idinteger (int64)
grnNumstring
grnDatestring (date)
modestring
warehouseIdinteger (int64)
warehouseNamestring
internalRefstring
dcNumstring
invoiceNumstring
carrierstring
tolerancePctnumber
vendorIdinteger (int64)
vendorNamestring
vendorPhonestring
vendorWhatsappstring
vendorEmailstring
vendorAddressstring
vendorGstinstring
statusstring
guidanceobject
nextActionsarray of object
blockersarray of object
excessReasonstring
transportCostnumber
transportGstPctnumber
transportGstAmtnumber
additionalCostnumber
additionalGstPctnumber
additionalGstAmtnumber
grandTotalnumber
closeReasonstring
closedByinteger (int64)
closedAtstring (date-time)
createdByinteger (int64)
postedAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)
lotTrackingboolean
invoiceApprovalStatusstring
invoiceApprovedAtstring (date-time)

…41 more fields — see the OpenAPI file.

Errors: 400, 401, 403, 404, 405, 409, 413, 422, 429, 500 — every error says how to fix it; see error codes and troubleshooting.

Example
# KERN ERP — Post a GRN (adds the stock) curl -X PATCH "https://kronex.codeverse.co/cedge/public/v1/procurement/grns/{id}/post" \ -H "Authorization: Bearer $KERN_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json"