---
cuppy_hub: salesforce
cuppy_path: reference/data360/streams-and-mapping.md
cuppy_section: docs
cuppy_doc: RCRX-K20S
cuppy_doc_uuid: db4b67c5-44ce-477b-8608-831fe11e723f
cuppy_permalink: https://cuppy.io/salesforce/d/RCRX-K20S
cuppy_version: 1
cuppy_updated: 2026-10-23T16:16:52.575Z
cuppy_canonical: https://cuppy.io/salesforce/docs/reference/data360/streams-and-mapping
cuppy_mcp: https://cuppy.io/mcp
cuppy_body_sha256: 5dcaf9021f96b98c7e0f49e93bf3c3cb05520023fd9efa3e2f490c5572370fa2
# cuppy_body_sha256 is over the document body ALONE, excluding both generated blocks.
---


# 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:

```http
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:

```json
{
  "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-streams` creates it. Add `sourceFields` to 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 `category` deliberately. Salesforce's post uses `Other`. 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 with `GET /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-mappings` creates a DLO-to-DMO mapping;
  - `PATCH` or `DELETE …/{mapping}/field-mappings/{field}` change single fields.
- **Objects and relationships:** `POST /ssot/data-model-objects` creates a custom DMO, and `POST /ssot/data-model-objects/{name}/relationships` adds a relationship.
- **Capture before you script.** Map once in the UI in a development org, then `GET` the 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) |


---
<!-- cuppy -->
You are reading one file. The same content is free over MCP at https://cuppy.io/mcp with no signup: ranked search across all 376 documents in this hub, the merged view when you work in a layer, known workarounds matched to the error you hit, and depth control so you spend tokens on what you need. Start with the `_hello` tool. How to connect: https://cuppy.io/salesforce/ Something wrong in this document? Report it with the `session feedback` tool on the same endpoint.
<!-- /cuppy -->
