Part data model

Updated:

One revision of a part or item

View field support, webhooks, and list parameters for each integration on the Supported Integrations page.

FieldTypeRequiredDescription
idstringNoUnique identifier of this part revision
created_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
updated_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
master_identifierstringNoVendor ID shared by every revision of the same part (Windchill WTPartMaster, Aras config_id); not a unified object
numberstringNoPart number
namestringNo
descriptionstringNo
revisionstringNoRevision label, e.g. B
statusenumNoNormalized lifecycle status Values: IN_WORK, IN_REVIEW, RELEASED, OBSOLETE, OTHER
lifecycle_statestringNoVendor's own lifecycle state or phase name
typeenumNoNormalized part type Values: COMPONENT, ASSEMBLY, RAW_MATERIAL, SOFTWARE, DOCUMENT_ONLY, OTHER
original_typestringNoThe vendor's own part type or category name
category_idstringNoThe PlmCategory the part is filed under (reference to AccountingCategory)
sourceenumNoWhether a part is made in-house or bought Values: MAKE, BUY, OTHER
unit_of_measurestringNo
is_assemblybooleanNoWhether the part has BOM children
user_idstringNoOwner or creator (reference to HrisEmployee)
document_idsstring[]NoRelated PlmDocument IDs
file_idsstring[]NoAttachment IDs retrievable from StorageFile
urlstringNoDeep link to the vendor UI
metadataPlmMetadata[]No
metadata[].idstringNoThe ID of the custom field definition (from the metadata/metadata endpoint).
metadata[].slugstringNoThe integration's API name (key) of an existing custom field.
metadata[].valueobjectNoThe field's value, typed by format.
metadata[].namespacestringNo
metadata[].formatenumNoThe data type of the custom field, which determines how value is formatted. Values: TEXT, NUMBER, DATE, BOOLEAN, FILE, TEXTAREA, SINGLE_SELECT, MULTIPLE_SELECT, MEASUREMENT, PRICE, YES_NO, CURRENCY, URL
metadata[].extra_dataobjectNo

TypeScript

TypeScript
export type PlmPart = {
	id?: string; // Unique identifier of this part revision
	created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	updated_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	master_identifier?: string; // Vendor ID shared by every revision of the same part (Windchill WTPartMaster, Aras config_id); not a unified object
	number?: string; // Part number
	name?: string;
	description?: string;
	revision?: string; // Revision label, e.g. B
	status?: 'IN_WORK' | 'IN_REVIEW' | 'RELEASED' | 'OBSOLETE' | 'OTHER'; // Normalized lifecycle status
	lifecycle_state?: string; // Vendor's own lifecycle state or phase name
	type?: 'COMPONENT' | 'ASSEMBLY' | 'RAW_MATERIAL' | 'SOFTWARE' | 'DOCUMENT_ONLY' | 'OTHER'; // Normalized part type
	original_type?: string; // The vendor's own part type or category name
	category_id?: string; // The PlmCategory the part is filed under (reference to AccountingCategory)
	source?: 'MAKE' | 'BUY' | 'OTHER'; // Whether a part is made in-house or bought
	unit_of_measure?: string;
	is_assembly?: boolean; // Whether the part has BOM children
	user_id?: string; // Owner or creator (reference to HrisEmployee)
	document_ids?: string[]; // Related PlmDocument IDs
	file_ids?: string[]; // Attachment IDs retrievable from StorageFile
	url?: string; // Deep link to the vendor UI
	metadata?: [];
	raw?: any; // Raw data from integration
} 

Zod

Zod
import { z } from 'zod';

export const ZodPlmPart = z.object({
	id: z.string().optional().describe("Unique identifier of this part revision"),
	created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	updated_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	master_identifier: z.string().optional().describe("Vendor ID shared by every revision of the same part (Windchill WTPartMaster, Aras config_id); not a unified object"),
	number: z.string().optional().describe("Part number"),
	name: z.string().optional(),
	description: z.string().optional(),
	revision: z.string().optional().describe("Revision label, e.g. B"),
	status: z.enum("IN_WORK", "IN_REVIEW", "RELEASED", "OBSOLETE", "OTHER").optional().describe("Normalized lifecycle status"),
	lifecycle_state: z.string().optional().describe("Vendor's own lifecycle state or phase name"),
	type: z.enum("COMPONENT", "ASSEMBLY", "RAW_MATERIAL", "SOFTWARE", "DOCUMENT_ONLY", "OTHER").optional().describe("Normalized part type"),
	original_type: z.string().optional().describe("The vendor's own part type or category name"),
	category_id: z.string().optional().describe("The PlmCategory the part is filed under (reference to AccountingCategory)"),
	source: z.enum("MAKE", "BUY", "OTHER").optional().describe("Whether a part is made in-house or bought"),
	unit_of_measure: z.string().optional(),
	is_assembly: z.boolean().optional().describe("Whether the part has BOM children"),
	user_id: z.string().optional().describe("Owner or creator (reference to HrisEmployee)"),
	document_ids: z.array().optional().describe("Related PlmDocument IDs"),
	file_ids: z.array().optional().describe("Attachment IDs retrievable from StorageFile"),
	url: z.string().optional().describe("Deep link to the vendor UI"),
	metadata: z.array().optional(),

});

Python

Python
import dataclasses

@dataclasses.dataclass
class PlmPartStatus(str, Enum):
	IN_WORK = 'IN_WORK'
	IN_REVIEW = 'IN_REVIEW'
	RELEASED = 'RELEASED'
	OBSOLETE = 'OBSOLETE'
	OTHER = 'OTHER'

@dataclasses.dataclass
class PlmPartType(str, Enum):
	COMPONENT = 'COMPONENT'
	ASSEMBLY = 'ASSEMBLY'
	RAW_MATERIAL = 'RAW_MATERIAL'
	SOFTWARE = 'SOFTWARE'
	DOCUMENT_ONLY = 'DOCUMENT_ONLY'
	OTHER = 'OTHER'

@dataclasses.dataclass
class PlmPartSource(str, Enum):
	MAKE = 'MAKE'
	BUY = 'BUY'
	OTHER = 'OTHER'

@dataclasses.dataclass
class PlmPart:
	"""Unique identifier of this part revision"""
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	updated_at: Optional[str]
	"""Vendor ID shared by every revision of the same part (Windchill WTPartMaster, Aras config_id); not a unified object"""
	master_identifier: Optional[str]
	"""Part number"""
	number: Optional[str]
	name: Optional[str]
	description: Optional[str]
	"""Revision label, e.g. B"""
	revision: Optional[str]
	"""Normalized lifecycle status"""
	status: Optional[PlmPartStatus]
	"""Vendor's own lifecycle state or phase name"""
	lifecycle_state: Optional[str]
	"""Normalized part type"""
	type: Optional[PlmPartType]
	"""The vendor's own part type or category name"""
	original_type: Optional[str]
	"""The PlmCategory the part is filed under (reference to AccountingCategory)"""
	category_id: Optional[str]
	"""Whether a part is made in-house or bought"""
	source: Optional[PlmPartSource]
	unit_of_measure: Optional[str]
	"""Whether the part has BOM children"""
	is_assembly: Optional[bool]
	"""Owner or creator (reference to HrisEmployee)"""
	user_id: Optional[str]
	"""Related PlmDocument IDs"""
	document_ids: Optional[List[List[str]]]
	"""Attachment IDs retrievable from StorageFile"""
	file_ids: Optional[List[List[str]]]
	"""Deep link to the vendor UI"""
	url: Optional[str]
	metadata: Optional[PropertyPlmPartMetadata]
Are we missing anything? Let us know
Was this page helpful?