Data 360 connections, data streams and mapping — the Salesforce CRM connection, creating CRM data streams by API, refresh modes, mapping DLOs to DMOs, why Order and OrderItem need their own mapping, and the endpoints and metadata types involved
How CRM accounts, contacts and orders get into Data 360. The CRM connection, then POST /ssot/data-streams with the body from Salesforce's own automation post. Covers what the CRM mappings cover (Account and Contact map to standard DMOs, while Order and OrderItem have no CRM mapping page and must be mapped to Sales Order and Sales Order Product yourself), the mapping and object endpoints, the metadata types that describe streams, and failure modes.
markdownreferencev1RCRX-K20Sstage: ingesttrust: officialservice: data360interface: restData 360 data streamSalesforce CRM connectorGET /ssot/connections?connectorType=SalesforceDotComPOST /ssot/data-streamsconnectorInfo connectorDetails sourceObjectdataLakeObjectInfodatastreamType SFDCrefreshConfig UPSERTfrequencyTypesourceFieldsPOST /ssot/data-streams/{name}/actions/rundata-model-object-mappingsfield-mappingsAccount to Account DMOContact to Individual Contact Point EmailOrder to Sales Order mappingOrderItem to Sales Order ProductDataStreamDefinitionDataSrcDataModelFieldMapObjectSourceTargetMapMktDataTranObjectlegacy data bundlesPerson Accountfield not visible to Data 360
Connections, data streams and mapping
1. The CRM connection
In the org that hosts Data 360, the Salesforce CRM connector reads the home org (and other orgs you connect). Find its API name:
GET /services/data/v66.0/ssot/connections?connectorType=SalesforceDotCom
Salesforce's own automation post matches on a label that starts with "Salesforce Connector". The hub's reading: match on the connection's API name instead, which you control.
2. Create a CRM data stream (one per object)
From Salesforce's February 2026 automation post:
{
"name": "Order_Home",
"datastreamType": "SFDC",
"connectorInfo": {
"connectorType": "SalesforceDotCom",
"connectorDetails": { "name": "<connection API name>", "sourceObject": "Order" }
},
"dataLakeObjectInfo": { "name": "Order_Home__dll", "label": "Order_Home", "category": "Other" },
"refreshConfig": { "refreshMode": "UPSERT", "frequency": { "frequencyType": "Minutely" } }
}
POST /services/data/v66.0/ssot/data-streamscreates it. AddsourceFieldsto limit the columns; validate them against the object's describe first, because a field the API user can't see fails the stream.- Use one API user for both the describe and the stream creation, as Salesforce's post advises, so permissions match.
- Choose the DLO
categorydeliberately. Salesforce's post usesOther. The hub's reading: Account and Contact belong in Profile (identity resolution unifies profile data), and Order and OrderItem in Engagement or Other. Confirm on an existing stream withGET /ssot/data-streams/{name}before scripting it. - Run a stream on demand with
POST …/data-streams/{name}/actions/run. The path is the community plugin's.
For accounts, people and orders, stream at least Account, Contact, Order, OrderItem and Product2. With Person Accounts, also check how person accounts arrive: Salesforce's mapping pages say nothing about them.
3. Map DLOs to DMOs
| CRM object | Target DMOs | Mapping |
|---|---|---|
| Account | Account, Contact Point Address, Contact Point Phone | Salesforce publishes the field mapping ("Salesforce CRM: Account Mappings") |
| Contact | Individual, Contact Point Email, Contact Point Phone, Contact Point Address, Account Contact | Published ("Salesforce CRM: Contact Mappings") |
| Order | Sales Order | No CRM mapping page. Map AccountId → ssot__BillToAccountId__c, the customer → ssot__SoldToCustomerId__c, TotalAmount → ssot__GrandTotalAmount__c, EffectiveDate → ssot__OrderStartDate__c, Status → ssot__SalesOrderStatusId__c (the hub's reading) |
| OrderItem | Sales Order Product | No CRM mapping page. Map the order ID to Sales Order, then product, quantity and price |
| Product2 | Master Product | "Salesforce CRM: Product Mapping" |
- Mapping endpoints (paths from the community plugin, reconciled to Salesforce's v67 spec):
POST /ssot/data-model-object-mappingscreates a DLO-to-DMO mapping;PATCHorDELETE …/{mapping}/field-mappings/{field}change single fields.- Objects and relationships:
POST /ssot/data-model-objectscreates a custom DMO, andPOST /ssot/data-model-objects/{name}/relationshipsadds a relationship. - Capture before you script. Map once in the UI in a development org, then
GETthe mapping and keep the JSON. The pipeline replays captured definitions rather than guessing request bodies (guides/data360/automate-the-golden-record-pipeline.md).
Metadata types
DataStreamDefinition, DataSourceObject, DataSrcDataModelFieldMap, ObjectSourceTargetMap, MktDataTranObject and DataStreamTemplate are in Salesforce's metadata registry. They are what a data kit packages (reference/data360/automation-and-data-kits.md). The hub's reading: generate them by adding streams to a data kit, not by hand.
Failures
| Symptom | Cause → fix |
|---|---|
| Stream creation fails on a field list | A field in sourceFields doesn't exist or isn't visible to the API user. Describe the object as that user and filter |
| No connection found | No CRM connection, or the label doesn't match the convention you searched for. List connections and match on API name |
| Order rows are in the DLO but no Sales Order DMO data | The Order DLO isn't mapped. Create the mapping in step 3 |
| Identity resolution ignores accounts or contacts | Their DLO isn't profile category, or the required Individual or Account mappings are missing |
| Stream refreshes cost more than expected | Ingestion consumes Data 360 credits. Pick the slowest refresh that meets the use case (family 10) |