Transform data
Stateless translation: pass in platform data, get back the canonical form and the
target platform’s representation. Nothing is persisted. Use this to preview a
translation before committing with /propagate.
/transform when you want to:
- Preview what a cross-platform translation looks like before committing with
POST /propagate - Validate your data shape against Structural’s canonical model
- Get both the canonical and target-platform views in a single call without side effects
Supported entity types
/transform accepts 9 entity types - more than /connect and /propagate (which
accept 5), because it does not require entity data to be seeded first:
project, customer, contract, invoice, payment, employee, time_entry,
change_order, budget_line_item
The context field
Some mappers require additional context that is not present in the source data itself. Thecontext field is an optional generic object (Record<string, unknown>) that passes
through to the mapper.
Procore contracts require context with a commitmentType key:
commitmentType are "WorkOrderContract" and "PurchaseOrderContract".
Omitting context when transforming a Procore contract results in a 422 TRANSFORM_ERROR.
Dynamics contracts do not require context - the mapper handles them without additional
input.
Response
The response contains three sections:canonical- the platform-agnostic representation with typed IDs, money in minor units, and ISO currency codesdata- the target platform’s representation, ready to send to that platform’s APImetadata- source, target, entity type, canonical version, timestamp, and request ID. When cross-entity references were resolved (e.g., a payment referencing a project), areferencesobject reports which references were resolved and which could not be found
Authorizations
API key passed as a Bearer token. Keys are prefixed: sk_demo_* (sandbox),
sk_live_* (production), sk_test_* (staging).
Body
Source platform
procore, dynamics Target platform
procore, dynamics The entity type to transform. 9 types are supported. contract requires a
context field when source is procore.
project, customer, employee, time_entry, invoice, payment, contract, change_order, budget_line_item The platform-native data to transform
Optional mapper context. For Procore contracts, pass
{"commitmentType": "WorkOrderContract"} or {"commitmentType": "PurchaseOrderContract"}.
Omitting this for Procore contracts results in a 422 error.