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:
POST /propagate/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
context 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.
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),
a references object reports which references were resolved and which could not be
foundAPI key passed as a Bearer token. Keys are prefixed: sk_demo_* (sandbox),
sk_live_* (production), sk_test_* (staging).
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.