Skip to main content
Technical Preview

Overview

PTC Windchill is the PLM system that owns parts, BOMs, CAD documents, drawings and change processes for many manufacturers. This connector lets shop-floor logic on MQTT look up a part and its released structure, build a kitting list from the multi-level components report, fetch part attachments and drawings for a work instruction screen, watch change notices, and raise a problem report or variance from a quality event, without custom code. PtcWindchillApi (PtcWindchillRestApi.lot) is one client connector on https://YOUR_WINDCHILL_SERVER with 17 events: 1 CSRF token call, 14 reads and 2 writes. No event updates, deletes, revises or checks out anything.
Windchill REST Services (WRS) is an OData v4 API under /Windchill/servlet/odata/<Domain>/. This template uses the Product Management (ProdMgmt), Document Management (DocMgmt), Change Management (ChangeMgmt) and common (PTC) domains. Every server publishes its own $metadata per domain (for example /Windchill/servlet/odata/ProdMgmt/$metadata), which also lists your custom types and soft attributes. The events follow PTC’s public Windchill REST Services 2.7 guide. To add another entity set or action, copy an event and change the path.

Server host

Windchill is installed per customer, or runs as Windchill+ (SaaS). Replace YOUR_WINDCHILL_SERVER with your Windchill web server host, with no trailing slash, and add the port when it does not use 443. To pin a domain version, insert it after odata/ (for example /Windchill/servlet/odata/v5/ProdMgmt/); without a version the server uses its default.

Authentication

WRS calls act as the Windchill user behind the credentials. Keep them in Hub secrets, map them in with GET SECRET, and never publish the authorization value or the CSRF nonce on a topic other clients can read.
  • HTTP Basic (default). Windchill relies on web server authentication. Store the full header value, Basic <base64 of user:password>, as the secret WINDCHILL_AUTHORIZATION and send it as "authorization" in every payload.
  • OAuth 2.0. When Windchill is set up as an OAuth resource server (client credentials for machine clients), send "authorization": "Bearer <access token>" and change every endpoint prefix from /Windchill/servlet/odata/ to /Windchill/oauth/servlet/odata/ (WRS OAuth authorization). Getting the token from your authorization server is outside this connector.
  • CSRF nonce. Every POST needs the header CSRF_NONCE. Publish on mes/ptc-windchill/csrf-token/get, read NonceValue from the reply and send it as "nonce". The nonce belongs to the server session, so refresh it when POST calls start failing.

Payload conventions

  • id is a Windchill object ID, for example OR:wt.part.WTPart:191559 (find it with QueryParts by number).
  • filter is an OData $filter expression, URL-encoded because the broker puts it straight into the URL: Number%20eq%20'0000000007' or startswith(Number,'00'). Set the request header PTC-WildcardSearch: true (add it to the event) to use * wildcards.
  • request is the JSON body sent unchanged on POST events.

Events

Replies arrive on <topic>/response.

Part structure and kitting list

GetPartStructure returns the multi-level BOM; GetComponentsReport returns one consolidated line per component with total quantity and unit, which suits kitting and line-side staging. Both take a NavigationCriteria body (config spec, view, plant filters). Send {} to use the default filter, or the ID of a saved filter: {"NavigationCriteria": {"ID": "OR:wt.filter.NavigationCriteria:..."}}.

Problem report from a quality event

CreateProblemReport creates a standalone problem report in a product or library context. Add affected parts with Changeables@odata.bind. Category, priority and life cycle values depend on your Change Management setup.

Connector

Example actions

These actions refresh the CSRF nonce, look up a part by number from a station, request a kitting list when an order is released, and turn a press quality event into a problem report. Set internal/ptc-windchill/product-context to the product container OID (for example OR:wt.pdmlink.PDMLinkProduct:122008) first.

Not included

  • Updates, check out / check in, revise and delete operations (by policy for a shop-floor template).
  • Content upload (three-stage upload to the file vault) and DownloadContentAsZip (returns a ZIP stream, not JSON). Use the download URL from GetPartAttachments instead.
  • Deprecated GetBOM and GetPartsList actions (replaced by GetPartStructure and GetMultiLevelComponentsReport).
  • Webhooks: Windchill has no generic outbound webhook. Poll ListChangeNotices, or push events with Windchill’s own event and workflow tooling.

Status

Beta, blocked on a live test. Smoke test on 2026-10-06 05:23 WEST: static 93/93, local mock WRS 17/17, controls 8/8, public PTC help pages 5/5. The ready gate needs an authenticated call against a real Windchill server: GetCsrfToken and QueryParts, then a POST with the nonce, or a broker MQTT round trip. PTC offers no public Windchill sandbox. To unblock, provide WC_HOST, WC_USER and WC_PASSWORD (a read user, plus create rights on problem reports in a test product for the write test) and WC_TEST_PART_NUMBER, then run python3 smoke_ptc_windchill.py. See also the REST API connectors base page and the REST API apps catalog.
Last modified on October 21, 2026