ERP & Procurement Integration
The ERP integration connects your ITSM Automation platform to enterprise resource planning and procurement systems — SAP S/4HANA, Oracle ERP, and manual procurement workflows. This enables automated purchase requisitions for hardware replacement, software license procurement, and cost tracking per ticket or project. When an agent resolves a ticket that requires a new asset, a procurement request can be created directly from the ticket context with pre-filled cost center and budget allocation.
The procurement request model
The procurement request model represents a purchase requisition flowing between ITSM and your ERP system. Each request tracks line items, approval status, vendor assignment, and the ERP purchase order once created.
Properties
- Name
id- Type
- string
- Description
Unique identifier for the procurement request.
- Name
type- Type
- string
- Description
The procurement type. One of
hardware,software_license,service, orconsumable.
- Name
status- Type
- string
- Description
Current lifecycle status. One of
draft,pending_approval,approved,ordered,received, orcancelled.
- Name
title- Type
- string
- Description
Short summary of the procurement request.
- Name
description- Type
- string
- Description
Detailed description of what is being procured and why.
- Name
requester_id- Type
- string
- Description
The ID of the user who created the procurement request.
- Name
approver_id- Type
- string
- Description
The ID of the manager or approver assigned to review this request.
- Name
ticket_id- Type
- string
- Description
The ID of the related ITSM ticket, if the request was created from a ticket context.
- Name
items- Type
- array
- Description
Line items for the procurement request. Each item contains
name(string),sku(string),quantity(integer),unit_cost(number), andcurrency(string).
- Name
total_cost- Type
- number
- Description
Computed total cost across all line items.
- Name
currency- Type
- string
- Description
ISO 4217 currency code (e.g.,
USD,EUR,GBP).
- Name
vendor- Type
- string
- Description
The vendor name assigned to fulfill this request.
- Name
erp_source- Type
- string
- Description
The ERP system this request is synced with. One of
sap_s4hana,oracle_erp, ormanual.
- Name
erp_po_number- Type
- string
- Description
The purchase order number assigned by the ERP system once the order is placed.
- Name
cost_center- Type
- string
- Description
The cost center code charged for this procurement (e.g.,
CC-IT-OPS).
- Name
budget_code- Type
- string
- Description
The budget line code for financial tracking.
- Name
expected_delivery- Type
- string
- Description
Expected delivery date in ISO 8601 format.
- Name
created_at- Type
- timestamp
- Description
Timestamp of when the procurement request was created.
- Name
updated_at- Type
- timestamp
- Description
Timestamp of when the procurement request was last updated.
- Name
org_id- Type
- string
- Description
The tenant organization ID that owns this procurement request.
List procurement requests
This endpoint returns a paginated list of procurement requests for your organization. You can filter by status, type, and requester. Results are ordered by created_at descending (most recent first).
Optional attributes
- Name
status- Type
- string
- Description
Filter by request status:
draft,pending_approval,approved,ordered,received, orcancelled.
- Name
type- Type
- string
- Description
Filter by procurement type:
hardware,software_license,service, orconsumable.
- Name
requester_id- Type
- string
- Description
Filter by the user who created the request.
- Name
limit- Type
- integer
- Description
Limit the number of results returned. Default is
20, maximum is100.
Request
curl -G http://localhost:3000/v1/erp/procurement \
-H "Authorization: Bearer {token}" \
-d status=pending_approval \
-d type=hardware \
-d limit=10
Response
{
"has_more": true,
"data": [
{
"id": "proc_9xKpQ2mR4wVbN3",
"type": "hardware",
"status": "pending_approval",
"title": "Laptop Replacement — Water Damage",
"description": "Replacement laptop for employee after liquid damage to current device. Original ticket INC-00847.",
"requester_id": "usr_7nLsW8kF9xYt",
"approver_id": "usr_3kPmN8rT2wXq",
"ticket_id": "tkt_4kPmN8rT2wXq",
"items": [
{
"name": "Dell Latitude 5550 Laptop",
"sku": "DELL-LAT5550-i7-16",
"quantity": 1,
"unit_cost": 1429.00,
"currency": "USD"
},
{
"name": "Dell WD22TB4 Thunderbolt Dock",
"sku": "DELL-WD22TB4",
"quantity": 1,
"unit_cost": 279.00,
"currency": "USD"
}
],
"total_cost": 1708.00,
"currency": "USD",
"vendor": "Dell Technologies",
"erp_source": "sap_s4hana",
"erp_po_number": null,
"cost_center": "CC-IT-EUS",
"budget_code": "BUD-2026-HW-Q1",
"expected_delivery": "2026-03-10",
"created_at": 1708732800,
"updated_at": 1708732800,
"org_id": "org_5jHtK4pR8uWn"
},
{
"id": "proc_3nLsW8kF9xYtP7",
"type": "software_license",
"status": "pending_approval",
"title": "JetBrains IntelliJ IDEA Licenses",
"description": "Annual license renewal for the platform engineering team — 8 seats.",
"requester_id": "usr_8mWqR3nT5vXp",
"approver_id": "usr_3kPmN8rT2wXq",
"ticket_id": null,
"items": [
{
"name": "IntelliJ IDEA Ultimate — Annual",
"sku": "JB-IDEA-ULT-ANN",
"quantity": 8,
"unit_cost": 599.00,
"currency": "USD"
}
],
"total_cost": 4792.00,
"currency": "USD",
"vendor": "JetBrains",
"erp_source": "sap_s4hana",
"erp_po_number": null,
"cost_center": "CC-IT-DEV",
"budget_code": "BUD-2026-SW-Q1",
"expected_delivery": "2026-03-01",
"created_at": 1708732500,
"updated_at": 1708732500,
"org_id": "org_5jHtK4pR8uWn"
}
]
}
Create a procurement request
This endpoint creates a new procurement request. If a ticket_id is provided, the request is linked to the ITSM ticket and the ticket timeline is updated with the procurement reference. The request starts in draft status unless submit is set to true, in which case it moves directly to pending_approval.
Required attributes
- Name
type- Type
- string
- Description
The procurement type:
hardware,software_license,service, orconsumable.
- Name
title- Type
- string
- Description
Short summary of the procurement request.
- Name
items- Type
- array
- Description
Line items with
name,sku,quantity,unit_cost, andcurrency.
- Name
cost_center- Type
- string
- Description
The cost center code to charge (e.g.,
CC-IT-OPS).
Optional attributes
- Name
description- Type
- string
- Description
Detailed description of the procurement need.
- Name
ticket_id- Type
- string
- Description
Link this request to an existing ITSM ticket.
- Name
vendor- Type
- string
- Description
Preferred vendor name.
- Name
budget_code- Type
- string
- Description
Budget line code for financial tracking.
- Name
expected_delivery- Type
- string
- Description
Requested delivery date in ISO 8601 format.
- Name
submit- Type
- boolean
- Description
When
true, immediately submits for approval instead of saving as draft. Defaults tofalse.
Request
curl -X POST http://localhost:3000/v1/erp/procurement \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"type": "hardware",
"title": "Replacement Server — Rack Unit 14",
"description": "Replace failed HPE ProLiant DL380 in rack 14. Original incident INC-01203.",
"ticket_id": "tkt_6jHtK4pR8uWn",
"items": [
{
"name": "HPE ProLiant DL380 Gen11",
"sku": "HPE-DL380-G11-2P",
"quantity": 1,
"unit_cost": 8750.00,
"currency": "USD"
},
{
"name": "HPE 32GB DDR5 RDIMM",
"sku": "HPE-DDR5-32G-RD",
"quantity": 4,
"unit_cost": 189.00,
"currency": "USD"
},
{
"name": "HPE 1.92TB SAS SSD",
"sku": "HPE-SSD-192T-SAS",
"quantity": 6,
"unit_cost": 425.00,
"currency": "USD"
}
],
"vendor": "Hewlett Packard Enterprise",
"cost_center": "CC-IT-INFRA",
"budget_code": "BUD-2026-HW-INFRA-Q1",
"expected_delivery": "2026-03-15",
"submit": true
}'
Response
{
"id": "proc_5pRtH5jN2cEmK8",
"type": "hardware",
"status": "pending_approval",
"title": "Replacement Server — Rack Unit 14",
"description": "Replace failed HPE ProLiant DL380 in rack 14. Original incident INC-01203.",
"requester_id": "usr_2kNpL7mS9wYr",
"approver_id": "usr_3kPmN8rT2wXq",
"ticket_id": "tkt_6jHtK4pR8uWn",
"items": [
{ "name": "HPE ProLiant DL380 Gen11", "sku": "HPE-DL380-G11-2P", "quantity": 1, "unit_cost": 8750.00, "currency": "USD" },
{ "name": "HPE 32GB DDR5 RDIMM", "sku": "HPE-DDR5-32G-RD", "quantity": 4, "unit_cost": 189.00, "currency": "USD" },
{ "name": "HPE 1.92TB SAS SSD", "sku": "HPE-SSD-192T-SAS", "quantity": 6, "unit_cost": 425.00, "currency": "USD" }
],
"total_cost": 12056.00,
"currency": "USD",
"vendor": "Hewlett Packard Enterprise",
"erp_source": "sap_s4hana",
"erp_po_number": null,
"cost_center": "CC-IT-INFRA",
"budget_code": "BUD-2026-HW-INFRA-Q1",
"expected_delivery": "2026-03-15",
"created_at": 1708733400,
"updated_at": 1708733400,
"org_id": "org_5jHtK4pR8uWn"
}
Get procurement request
This endpoint retrieves the full details of a single procurement request, including all line items, approval history, and the ERP purchase order reference if the order has been placed.
Request
curl http://localhost:3000/v1/erp/procurement/proc_9xKpQ2mR4wVbN3 \
-H "Authorization: Bearer {token}"
Response
{
"id": "proc_9xKpQ2mR4wVbN3",
"type": "hardware",
"status": "ordered",
"title": "Laptop Replacement — Water Damage",
"description": "Replacement laptop for employee after liquid damage to current device. Original ticket INC-00847.",
"requester_id": "usr_7nLsW8kF9xYt",
"approver_id": "usr_3kPmN8rT2wXq",
"ticket_id": "tkt_4kPmN8rT2wXq",
"items": [
{ "name": "Dell Latitude 5550 Laptop", "sku": "DELL-LAT5550-i7-16", "quantity": 1, "unit_cost": 1429.00, "currency": "USD" },
{ "name": "Dell WD22TB4 Thunderbolt Dock", "sku": "DELL-WD22TB4", "quantity": 1, "unit_cost": 279.00, "currency": "USD" }
],
"total_cost": 1708.00,
"currency": "USD",
"vendor": "Dell Technologies",
"erp_source": "sap_s4hana",
"erp_po_number": "PO-4500012847",
"cost_center": "CC-IT-EUS",
"budget_code": "BUD-2026-HW-Q1",
"expected_delivery": "2026-03-10",
"approval_history": [
{
"action": "submitted",
"by": "usr_7nLsW8kF9xYt",
"at": 1708732800,
"comment": null
},
{
"action": "approved",
"by": "usr_3kPmN8rT2wXq",
"at": 1708733100,
"comment": "Approved — within quarterly hardware budget."
}
],
"created_at": 1708732800,
"updated_at": 1708734000,
"org_id": "org_5jHtK4pR8uWn"
}
Update a procurement request
This endpoint updates an existing procurement request. Only requests in draft or pending_approval status can be updated. Once a request is approved or ordered, it becomes immutable — create a new request or contact the approver to revert the status.
Optional attributes
- Name
title- Type
- string
- Description
Updated title for the procurement request.
- Name
description- Type
- string
- Description
Updated description.
- Name
items- Type
- array
- Description
Replacement line items array. Replaces all existing items.
- Name
vendor- Type
- string
- Description
Updated vendor name.
- Name
cost_center- Type
- string
- Description
Updated cost center code.
- Name
budget_code- Type
- string
- Description
Updated budget line code.
- Name
expected_delivery- Type
- string
- Description
Updated expected delivery date.
Request
curl -X PATCH http://localhost:3000/v1/erp/procurement/proc_3nLsW8kF9xYtP7 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"name": "IntelliJ IDEA Ultimate — Annual",
"sku": "JB-IDEA-ULT-ANN",
"quantity": 10,
"unit_cost": 599.00,
"currency": "USD"
}
],
"description": "Annual license renewal for platform engineering and QA teams — increased to 10 seats."
}'
Response
{
"id": "proc_3nLsW8kF9xYtP7",
"type": "software_license",
"status": "pending_approval",
"title": "JetBrains IntelliJ IDEA Licenses",
"description": "Annual license renewal for platform engineering and QA teams — increased to 10 seats.",
"items": [
{ "name": "IntelliJ IDEA Ultimate — Annual", "sku": "JB-IDEA-ULT-ANN", "quantity": 10, "unit_cost": 599.00, "currency": "USD" }
],
"total_cost": 5990.00,
"currency": "USD",
"vendor": "JetBrains",
"erp_source": "sap_s4hana",
"erp_po_number": null,
"cost_center": "CC-IT-DEV",
"budget_code": "BUD-2026-SW-Q1",
"expected_delivery": "2026-03-01",
"created_at": 1708732500,
"updated_at": 1708733600,
"org_id": "org_5jHtK4pR8uWn"
}
Approve a procurement request
This endpoint approves a procurement request. Only users with the procurement_approver role and requests in pending_approval status can be approved. Once approved, the request is automatically synced to the configured ERP system to generate a purchase order.
Optional attributes
- Name
comment- Type
- string
- Description
Approval comment for the audit trail.
Request
curl -X POST http://localhost:3000/v1/erp/procurement/proc_9xKpQ2mR4wVbN3/approve \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"comment": "Approved — within quarterly hardware budget. Expedite delivery if possible."
}'
Response
{
"id": "proc_9xKpQ2mR4wVbN3",
"status": "approved",
"approved_by": "usr_3kPmN8rT2wXq",
"approved_at": 1708733100,
"comment": "Approved — within quarterly hardware budget. Expedite delivery if possible.",
"erp_sync_status": "queued",
"erp_sync_job_id": "sync_8mWqR3nT5vXp"
}
Reject a procurement request
This endpoint rejects a procurement request. The requester is notified and the request moves to cancelled status. A rejection reason is required for audit compliance.
Required attributes
- Name
reason- Type
- string
- Description
The reason for rejecting the procurement request.
Request
curl -X POST http://localhost:3000/v1/erp/procurement/proc_3nLsW8kF9xYtP7/reject \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"reason": "Exceeds quarterly software budget. Please reduce seat count to 5 and resubmit, or defer to Q2."
}'
Response
{
"id": "proc_3nLsW8kF9xYtP7",
"status": "cancelled",
"rejected_by": "usr_3kPmN8rT2wXq",
"rejected_at": 1708733200,
"reason": "Exceeds quarterly software budget. Please reduce seat count to 5 and resubmit, or defer to Q2."
}
List vendors
This endpoint returns the list of configured vendors available for procurement requests. Vendors are synced from your ERP system and include contract status, tier classification, and contact information.
Request
curl http://localhost:3000/v1/erp/vendors \
-H "Authorization: Bearer {token}"
Response
{
"data": [
{
"id": "vnd_7xKpQ2mR4wVb",
"name": "Dell Technologies",
"status": "active",
"tier": "strategic",
"website": "https://www.dell.com",
"primary_contact_name": "Enterprise Account Manager",
"primary_contact_email": "enterprise@dell.com",
"categories": ["hardware", "consumable"],
"contract_expires_at": 1735689600,
"tags": ["hardware", "laptops", "servers", "strategic"]
},
{
"id": "vnd_3nLsW8kF9xYt",
"name": "Hewlett Packard Enterprise",
"status": "active",
"tier": "strategic",
"website": "https://www.hpe.com",
"primary_contact_name": "Solutions Architect",
"primary_contact_email": "support@hpe.com",
"categories": ["hardware", "service"],
"contract_expires_at": 1735689600,
"tags": ["hardware", "servers", "storage", "strategic"]
},
{
"id": "vnd_9pRtH5jN2cEm",
"name": "JetBrains",
"status": "active",
"tier": "approved",
"website": "https://www.jetbrains.com",
"primary_contact_name": "License Manager",
"primary_contact_email": "sales@jetbrains.com",
"categories": ["software_license"],
"contract_expires_at": 1740960000,
"tags": ["software", "development-tools", "licensing"]
},
{
"id": "vnd_5pRtH5jN2cEm",
"name": "Microsoft",
"status": "active",
"tier": "strategic",
"website": "https://www.microsoft.com",
"primary_contact_name": "Enterprise Account Manager",
"primary_contact_email": "enterprise@microsoft.com",
"categories": ["software_license", "service"],
"contract_expires_at": 1735689600,
"tags": ["cloud", "software", "licensing", "strategic"]
}
]
}
Get budget summaries
This endpoint returns budget summaries grouped by cost center. Each summary shows the allocated budget, amount spent, amount committed (in approved but undelivered orders), and remaining balance. This data is synced from your ERP system and updated in real-time as procurement requests are approved and fulfilled.
Optional attributes
- Name
cost_center- Type
- string
- Description
Filter to a specific cost center code (e.g.,
CC-IT-INFRA).
- Name
fiscal_year- Type
- integer
- Description
Fiscal year to query. Defaults to the current fiscal year.
Request
curl -G http://localhost:3000/v1/erp/budgets \
-H "Authorization: Bearer {token}" \
-d fiscal_year=2026
Response
{
"fiscal_year": 2026,
"data": [
{
"cost_center": "CC-IT-OPS",
"name": "IT Operations",
"annual_budget": 240000.00,
"spent": 38420.00,
"committed": 4200.00,
"remaining": 197380.00,
"utilization_percent": 17.76,
"currency": "USD"
},
{
"cost_center": "CC-IT-DEV",
"name": "Software Development",
"annual_budget": 360000.00,
"spent": 62150.00,
"committed": 5990.00,
"remaining": 291860.00,
"utilization_percent": 18.93,
"currency": "USD"
},
{
"cost_center": "CC-IT-INFRA",
"name": "Infrastructure",
"annual_budget": 480000.00,
"spent": 124800.00,
"committed": 12056.00,
"remaining": 343144.00,
"utilization_percent": 28.51,
"currency": "USD"
},
{
"cost_center": "CC-IT-SEC",
"name": "Information Security",
"annual_budget": 180000.00,
"spent": 28500.00,
"committed": 0.00,
"remaining": 151500.00,
"utilization_percent": 15.83,
"currency": "USD"
},
{
"cost_center": "CC-IT-EUS",
"name": "End User Support",
"annual_budget": 120000.00,
"spent": 19200.00,
"committed": 1708.00,
"remaining": 99092.00,
"utilization_percent": 17.42,
"currency": "USD"
}
]
}
Trigger ERP sync
This endpoint triggers a manual synchronization with your connected ERP system. The sync pulls updated vendor catalogs, budget allocations, and purchase order statuses. Syncs are processed asynchronously via BullMQ and the response returns a job ID for tracking.
Optional attributes
- Name
scope- Type
- string
- Description
Sync scope. One of
full,vendors,budgets,purchase_orders, orcatalogs. Defaults tofull.
- Name
erp_source- Type
- string
- Description
Limit sync to a specific ERP source:
sap_s4hanaororacle_erp. Defaults to all configured sources.
Request
curl -X POST http://localhost:3000/v1/erp/sync \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"scope": "full",
"erp_source": "sap_s4hana"
}'
Response
{
"sync_job_id": "sync_4kPmN8rT2wXq",
"erp_source": "sap_s4hana",
"scope": "full",
"status": "queued",
"queued_at": 1708733500,
"estimated_entities": {
"vendors": 47,
"budgets": 12,
"purchase_orders": 186,
"catalogs": 324
}
}