Purple ERP API Documentation
Machine-readable OpenAPI 3.0 specification: https://marketplace.moveworks.com/api/purple-suite/erp/openapi.json
The consolidated all-apps document at https://marketplace.moveworks.com/api/purple-suite/openapi.json can be narrowed to this app with ?apps=erp, or combined with other apps comma-separated (e.g. ?apps=erp,itsm).
Overview
Endpoints
GET /api/purple-suite/erp/purchase-orders
List ERP purchase orders (procurement commitments to vendors)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
Responses
200- Paginated list
application/jsondataarrayarray of:
PurchaseOrderidstringvendorstringstatusstringtotalAmountnumbercurrencystringlineItemsintegerapproverstringexpectedDeliverystringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present and true only when the collection exceeded the in-memory query cap and results may be incomplete.
400- Invalid OData query (e.g. malformed $filter)
POST /api/purple-suite/erp/purchase-orders
Create ERP purchase order (raise a new PO to a vendor)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
PurchaseOrder
idstringvendorstringstatusstringtotalAmountnumbercurrencystringlineItemsintegerapproverstringexpectedDeliverystringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonPurchaseOrderidstringvendorstringstatusstringtotalAmountnumbercurrencystringlineItemsintegerapproverstringexpectedDeliverystringcreatedAtstringupdatedAtstring
GET /api/purple-suite/erp/purchase-orders/{id}
Get purchase order
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonPurchaseOrderidstringvendorstringstatusstringtotalAmountnumbercurrencystringlineItemsintegerapproverstringexpectedDeliverystringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/erp/purchase-orders/{id}
Delete purchase order
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/erp/purchase-orders/{id}
Update or transition an ERP purchase order
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
PurchaseOrder
idstringvendorstringstatusstringtotalAmountnumbercurrencystringlineItemsintegerapproverstringexpectedDeliverystringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonPurchaseOrderidstringvendorstringstatusstringtotalAmountnumbercurrencystringlineItemsintegerapproverstringexpectedDeliverystringcreatedAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/erp/purchase-orders/{id}/verify-match
3-way match verification
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
invoice_idstring requiredreceipt_confirmedboolean required
Responses
200- Match result
application/jsonmatchedbooleanpo_idstringinvoice_idstringstatusstring
404- Not found
422- Match validation failed
GET /api/purple-suite/erp/invoices
List ERP vendor invoices (accounts payable)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
Responses
200- Paginated list
application/jsondataarrayarray of:
InvoiceidstringvendorstringstatusstringamountnumbercurrencystringdueDatestringpoIdstring — Purchase order this invoice is linked to (used for 3-way match)notesstring — Free-text notes; the only field writable on a voided invoicecreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present and true only when the collection exceeded the in-memory query cap and results may be incomplete.
400- Invalid OData query (e.g. malformed $filter)
POST /api/purple-suite/erp/invoices
Create ERP vendor invoice (record a bill in accounts payable)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Invoice
idstringvendorstringstatusstringamountnumbercurrencystringdueDatestringpoIdstring — Purchase order this invoice is linked to (used for 3-way match)notesstring — Free-text notes; the only field writable on a voided invoicecreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonInvoiceidstringvendorstringstatusstringamountnumbercurrencystringdueDatestringpoIdstring — Purchase order this invoice is linked to (used for 3-way match)notesstring — Free-text notes; the only field writable on a voided invoicecreatedAtstringupdatedAtstring
GET /api/purple-suite/erp/invoices/{id}
Get invoice
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonInvoiceidstringvendorstringstatusstringamountnumbercurrencystringdueDatestringpoIdstring — Purchase order this invoice is linked to (used for 3-way match)notesstring — Free-text notes; the only field writable on a voided invoicecreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/erp/invoices/{id}
Delete invoice
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/erp/invoices/{id}
Update or transition an ERP vendor invoice
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Invoice
idstringvendorstringstatusstringamountnumbercurrencystringdueDatestringpoIdstring — Purchase order this invoice is linked to (used for 3-way match)notesstring — Free-text notes; the only field writable on a voided invoicecreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonInvoiceidstringvendorstringstatusstringamountnumbercurrencystringdueDatestringpoIdstring — Purchase order this invoice is linked to (used for 3-way match)notesstring — Free-text notes; the only field writable on a voided invoicecreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/erp/inventory
List ERP inventory items (stocked goods by SKU)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
Responses
200- Paginated list
application/jsondataarrayarray of:
InventoryItemidstringitemNamestringskustringquantityintegerreorderPointintegerunitCostnumberwarehouseLocationstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present and true only when the collection exceeded the in-memory query cap and results may be incomplete.
400- Invalid OData query (e.g. malformed $filter)
POST /api/purple-suite/erp/inventory
Create ERP inventory item (stock a new SKU)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
InventoryItem
idstringitemNamestringskustringquantityintegerreorderPointintegerunitCostnumberwarehouseLocationstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonInventoryItemidstringitemNamestringskustringquantityintegerreorderPointintegerunitCostnumberwarehouseLocationstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/erp/inventory/{id}
Get inventory item
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonInventoryItemidstringitemNamestringskustringquantityintegerreorderPointintegerunitCostnumberwarehouseLocationstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/erp/inventory/{id}
Delete inventory item
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/erp/inventory/{id}
Update inventory item
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
InventoryItem
idstringitemNamestringskustringquantityintegerreorderPointintegerunitCostnumberwarehouseLocationstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonInventoryItemidstringitemNamestringskustringquantityintegerreorderPointintegerunitCostnumberwarehouseLocationstringcreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/erp/journal-entries
List ERP general-ledger journal entries
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
Responses
200- Paginated list
application/jsondataarrayarray of:
JournalEntryidstringtypestringdebitAccountstringcreditAccountstringamountnumberdescriptionstringstatusstringperiodstringpostedAtstring — ISO timestamp when the entry was posted; set automatically on posted and reversal entriesreversalOfstring — ID of the original entry this reversal was created fromcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present and true only when the collection exceeded the in-memory query cap and results may be incomplete.
400- Invalid OData query (e.g. malformed $filter)
POST /api/purple-suite/erp/journal-entries
Create ERP journal entry (book a GL debit/credit)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
JournalEntry
idstringtypestringdebitAccountstringcreditAccountstringamountnumberdescriptionstringstatusstringperiodstringpostedAtstring — ISO timestamp when the entry was posted; set automatically on posted and reversal entriesreversalOfstring — ID of the original entry this reversal was created fromcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonJournalEntryidstringtypestringdebitAccountstringcreditAccountstringamountnumberdescriptionstringstatusstringperiodstringpostedAtstring — ISO timestamp when the entry was posted; set automatically on posted and reversal entriesreversalOfstring — ID of the original entry this reversal was created fromcreatedAtstringupdatedAtstring
GET /api/purple-suite/erp/journal-entries/{id}
Get journal entry
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonJournalEntryidstringtypestringdebitAccountstringcreditAccountstringamountnumberdescriptionstringstatusstringperiodstringpostedAtstring — ISO timestamp when the entry was posted; set automatically on posted and reversal entriesreversalOfstring — ID of the original entry this reversal was created fromcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/erp/journal-entries/{id}
Delete journal entry
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/erp/journal-entries/{id}
Update or post an ERP journal entry
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
JournalEntry
idstringtypestringdebitAccountstringcreditAccountstringamountnumberdescriptionstringstatusstringperiodstringpostedAtstring — ISO timestamp when the entry was posted; set automatically on posted and reversal entriesreversalOfstring — ID of the original entry this reversal was created fromcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonJournalEntryidstringtypestringdebitAccountstringcreditAccountstringamountnumberdescriptionstringstatusstringperiodstringpostedAtstring — ISO timestamp when the entry was posted; set automatically on posted and reversal entriesreversalOfstring — ID of the original entry this reversal was created fromcreatedAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/erp/journal-entries/{id}/reverse
Reverse a journal entry
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
201- Reversal entry created
application/jsonJournalEntryidstringtypestringdebitAccountstringcreditAccountstringamountnumberdescriptionstringstatusstringperiodstringpostedAtstring — ISO timestamp when the entry was posted; set automatically on posted and reversal entriesreversalOfstring — ID of the original entry this reversal was created fromcreatedAtstringupdatedAtstring
404- Not found
422- Entry cannot be reversed in its current state
GET /api/purple-suite/erp/assets
List ERP fixed assets (the finance asset register)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
Responses
200- Paginated list
application/jsondataarrayarray of:
AssetidstringnamestringtypestringstatusstringpurchaseValuenumbercurrentValuenumberpurchasedAtstring — Date the asset was originally purchasedlocationstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present and true only when the collection exceeded the in-memory query cap and results may be incomplete.
400- Invalid OData query (e.g. malformed $filter)
POST /api/purple-suite/erp/assets
Create ERP fixed asset record
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Asset
idstringnamestringtypestringstatusstringpurchaseValuenumbercurrentValuenumberpurchasedAtstring — Date the asset was originally purchasedlocationstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonAssetidstringnamestringtypestringstatusstringpurchaseValuenumbercurrentValuenumberpurchasedAtstring — Date the asset was originally purchasedlocationstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/erp/assets/{id}
Get asset
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonAssetidstringnamestringtypestringstatusstringpurchaseValuenumbercurrentValuenumberpurchasedAtstring — Date the asset was originally purchasedlocationstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/erp/assets/{id}
Delete asset
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/erp/assets/{id}
Update asset
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Asset
idstringnamestringtypestringstatusstringpurchaseValuenumbercurrentValuenumberpurchasedAtstring — Date the asset was originally purchasedlocationstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonAssetidstringnamestringtypestringstatusstringpurchaseValuenumbercurrentValuenumberpurchasedAtstring — Date the asset was originally purchasedlocationstringcreatedAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/erp/purchase-requests
Create purchase request (legacy)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json
object
Responses
200- Submitted
application/jsonpurchase_requestobjectidstringstatusstring
GET /api/purple-suite/erp/purchase-requests/pending
List pending purchase requests (legacy)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Responses
200- Empty list stub
application/jsonarray of:
GET /api/purple-suite/erp/purchase-requests/history
List historical purchase requests (legacy)
Responses
200- Empty list stub
application/jsonarray of:
GET /api/purple-suite/erp/approvals
List approvals (legacy)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Responses
200- Empty list stub
application/jsonsuccessbooleandataarrayarray of:
POST /api/purple-suite/erp/approvals
Create approval (legacy)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json
object
Responses
200- Created
application/jsonsuccessbooleandataobjectidstring
PATCH /api/purple-suite/erp/approvals/{approvalId}
Update approval (legacy)
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
approvalId | path | string | yes | Approval ID |
Request body
application/json
object
Responses
200- Updated
application/jsonsuccessbooleandataobject