Integrates with
SolidWorks|Jira|SAP|GitHub|Onshape|Arena|PTC Windchill|Siemens NX|SolidWorks|Jira|SAP|GitHub|Onshape|Arena|PTC Windchill|Siemens NX|
v2.4.1 — 99.99% uptime — 43ms p99
GET/api/v2

/bom/{product_id}/revisions

# PLM data as first-class API endpoints. No seat licenses. No modal windows.
# Wire BOMs, change orders, and revision histories into the tools you already use.

response.json200 OK
awaiting request...
GET
GET /bom/{id}
Fetch full bill of materials with component hierarchy
→
POST
POST /eco
Create and route engineering change orders
→
GET
GET /revisions
Full audit trail with diff between any two revisions
→
POST
POST /webhooks
Fire on BOM release, ECO approval, or part creation
→
47+
REST Endpoints
covering full PLM lifecycle
43ms
p99 Latency
across all endpoint types
99.99%
Uptime SLA
with status.headlessplm.io
$0
Per Seat
usage-based pricing only
# API Surface

47 endpoints. Every PLM operation.

$ curl https://api.headlessplm.io/v2/openapi.json
GET/bom/{id}
Core
Bill of Materials

Fetch complete BOM with multi-level component hierarchy, quantities, and supplier references

curl -H "X-API-Key: $KEY" \
https://api.headlessplm.io/v2/bom/PLM-7829
# Returns 247 components in 43ms
POST/eco
Core
Change Orders

Create engineering change orders, assign reviewers, and trigger approval workflows via API

POST /v2/eco
{ "title": "Cap swap R47", "severity": "MINOR",
"affected_parts": ["PN-8821", "PN-8822"] }
GET/revisions/{id}/diff
Revisions
Revision Diff

Structured diff between any two revisions — added, removed, modified components

GET /v2/revisions/REV-C...REV-D/diff
# { added: 3, removed: 1, modified: 7 }
GET/parts/{pn}/where-used
Parts
Where-Used

Find every BOM that references a given part number across all products

GET /v2/parts/CAP-100uF/where-used
# 14 BOMs across 6 products
POST/webhooks
Events
Webhook Events

Subscribe to bom.released, eco.approved, part.created events

{ "url": "https://your.app/plm",
"events": ["bom.released", "eco.approved"] }
GET/audit/{id}
Compliance
Audit Log

Immutable audit trail for every field change, who made it, and when

GET /v2/audit/PLM-7829?since=2026-01-01
# 1,204 events, 38 unique users
POST/parts
Parts
Create Part

Create part numbers with custom attributes and lifecycle state

POST /v2/parts
# IPN auto-assigned
PUT/bom/{id}/items
Core
Update BOM

Add, remove, or swap components in a working revision

PUT /v2/bom/PLM-7829/items
# PATCH also supported
GET/integrations/jira
Integrations
Jira Sync

Bi-directional sync of ECOs with Jira issues

GET /v2/integrations/jira/status
# last_sync: 12s ago
GET/integrations/github
Integrations
GitHub Link

Link firmware revisions to Git commits and tags

GET /v2/integrations/github/refs
# 847 linked commits
POST/export/bom
Export
Export BOM

Export to CSV, JSON, or native SAP IDOC format

POST /v2/export/bom
{ "format": "sap_idoc" }
GET/permissions
Access
RBAC

Role-based access control — viewer, editor, approver, admin

GET /v2/permissions/users/u_4421
# roles: [approver]
GET/search
Search
Full-Text Search

Search across all BOMs, parts, and ECOs with query syntax

GET /v2/search?q=capacitor+100uF
# 34 matches, 29ms
PATCH/parts/{pn}/lifecycle
Parts
Lifecycle State

Transition part lifecycle: DESIGN → PROTOTYPE → RELEASED → OBSOLETE

PATCH /v2/parts/CAP-100uF/lifecycle
{ "state": "RELEASED" }
GET/suppliers/{id}/parts
Supply Chain
Supplier AVL

Approved vendor list — all parts sourced from a given supplier

GET /v2/suppliers/SUP-TDK/parts
# 47 approved parts
POST/bom/{id}/compare
Core
BOM Compare

Compare two BOMs side-by-side and get a structured delta

POST /v2/bom/compare
{ "a": "PLM-7829", "b": "PLM-7830" }
hover any cell to see request example ↑  ·  full OpenAPI spec at /v2/openapi.json
# Integrations

Wire into your existing stack.

REST + webhooks. If it has an API, you can sync PLM data to it. Native connectors for the 15 most common tools.

SolidWorksCAD│
OnshapeCAD│
Siemens NXCAD│
JiraPM│
LinearPM│
GitHubVCS│
GitLabVCS│
SAPERP│
OracleERP│
NetSuiteERP│
Arena PLMPLM│
PTC WindchillPLM│
SlackNotify│
PagerDutyNotify│
DatadogObservability│
SolidWorksCAD│
OnshapeCAD│
Siemens NXCAD│
JiraPM│
LinearPM│
GitHubVCS│
GitLabVCS│
SAPERP│
OracleERP│
NetSuiteERP│
Arena PLMPLM│
PTC WindchillPLM│
SlackNotify│
PagerDutyNotify│
DatadogObservability│
CAD
SolidWorks
CAD
Onshape
CAD
Siemens NX
PM
Jira
PM
Linear
VCS
GitHub
VCS
GitLab
ERP
SAP
ERP
Oracle
ERP
NetSuite
PLM
Arena PLM
PLM
PTC Windchill
Notify
Slack
Notify
PagerDuty
Observability
Datadog
+∞
via webhook
# Install

Start building in 3 commands.

No sales call. No demo request. No 14-day trial with a credit card.
Just an API key and clean JSON.

# Install the HeadlessPLM CLI
$ curl -fsSL https://get.headlessplm.io | sh

# Initialize and authenticate
$ hplm init --workspace my-hardware-co
$ hplm auth login

# Fetch your first BOM
$ hplm bom get PLM-7829 --format json
# Generate API Key
work_email=

No credit card. No sales call. Rate-limited free tier — 10,000 req/month.

SOC 2 Type II
Certified
ITAR Compliant
On-prem available
Open Source SDK
MIT License