Basic outbound marketing customer journey API operations
Note
Dynamics 365 Marketing and Dynamics 365 Customer Insights are now Customer Insights - Journeys and Customer Insights - Data. For more information, see Dynamics 365 Customer Insights FAQs
New Customer Insights - Journeys customers receive real-time journeys features only. For more information, see Default real-time journeys installation.
Important
This article only applies to outbound marketing.
Potential customers follow a path as they engage with your company. They start by discovering your product, evaluating whether it meets their needs, looking for a good offer, then finally making a purchase. This process is called the customer journey.
You can use customer journeys to create a model that guides members of marketing segments through this process using automated messaging, activity generation, interactive decision points, and more. More information: Create Customer Journey.
The customer journey API enables programmatic interaction with customer journey records, including publishing and validation. The API uses the standard Microsoft Dataverse Web API for manipulating entities and messages. More information: Use the Microsoft Dataverse Web API.
When you create a customer journey, the properties are stored in the msdyncrm_customerjourney
entity. You can browse the entity metadata information using @odata.context
in the GET
response.
Note
Before you perform operations, you should install Dynamics 365 Customer Insights - Journeys.
This article demonstrates how to perform operations on the msdyncrm_customerjourney
entity. The msdyncrm_name
field is the only required field to create a customer journey. The fields that are used in this article to create a customer journey are shown in the following table.
Display name | Schema name | Description or value |
---|---|---|
Name | msdyncrm_name | Name of the Customer Journey |
Status Reason | statuscode | Current status of the customer journey. Following are the available status codes: - Draft 192350000 - Live 192350001 - Stopped 192350002 - Live, Editable 192350003 - Error 192350005 - Going Live 192350006 - Stopping 192350007 |
Suppression Segment | msdyncrm_SuppressionSegmentId | The ID of the associated Suppression Segment. Use it to set reference to a record from msdyncrm_segments record set. |
Recurrence Interval (Days) | msdyncrm_recurrenceintervaldays | The duration of the iteration (in days). Non-negative integer. |
Minimum Consent | msgdpr_requiredconsent | - (1) Consent 587030001 - (2) Transactional 587030002 - (3) Subscriptions 587030003 - (4) Marketing 587030004 - (5) Profiling 587030005 |
Recurrence Count | msdyncrm_recurrencecount | The number of iterations. Non-negative integer. |
Workflow Definition | msdyncrm_workflowdefinition | The customer journey design definition. More information: Customer Journey workflow definition. |
Customer Journey Designer State | msdyncrm_customerjourneydesignerstate | This is a hidden field, used by the customer journey designer to persist its internal state. The field should be copied if you are creating a copy of the msdyncrm_workflowdefinition field from another customer journey or customer journey template record. |
Time Zone | msdyncrm_customerjourneytimezone | Effective time zone for the customer journey. |
Content Settings | msdyncrm_contentsettingsId | The ID of associated Content Settings. Use it to reference a record from the msdyncrm_contentsettingss record set. |
End Date and Time | msdyncrm_enddatetime | Date/time value in ISO 8601 UTC format. Note that seconds and milliseconds precision will be disregarded. |
Start Date and Time | msdyncrm_startdatetime | Date/time value in ISO 8601 UTC format. Note that seconds and milliseconds precision will be disregarded. |
Is Recurring | msdyncrm_isrecurring | A Boolean value. |
Entity Target | msdyncrm_entitytarget | - Contact 0 - Account 1 |
Type | msdyncrm_type | - Automated 192350000 192350001 |
Status | statecode | Status of the customer journey. |
Note
The statuscode
and statecode
fields define the state of the customer journey. Changing their values can result in Publishing
or Stopping
of customer journey workflow. If you wish to go live
save the record in Going Live
state (statuscode = 192350006). To stop a customer journey record, save the Live record in Stopping
state (statuscode = 192350007).
Create, retrieve, update, and delete operations
Create request
This request creates a customer journey record and sets the statuscode
to Draft
. This customer journey includes a segment with ID:24db2671-1529-e911-a9b7-000d3a1e6adc
and Unique Name: TC407937_DynamicSegment_2KZQ1p
and an email with ID: 15bd0ab8-c12a-e911-a9b6-000d3a1e6c14
. The effective Content Settings has record ID: 1922b1d8-0523-e911-a9ba-000d3a1e689f
. The response header OData-EntityId contains the URL to this newly created record (entity instance), which parenthetically includes the unique ID for this record.
Important
You need to replace OrgUrl
with https://<add your environment name, like ‘myorg.crm’>.dynamics.com
. You can also get the environment name from Settings > Customizations > Developer Resources.
POST {{OrgUrl}}/api/data/v9.0/msdyncrm_customerjourneys
{
"msgdpr_requiredconsent": 587030001,
"msdyncrm_customerjourneydesignerstate": "{\"NextActivityID\":8,\"NextActivityItemID\":42}",
"msdyncrm_workflowdefinition": "[{\"ActivityTypeId\":\"bpf_root\",\"ParentBranchId\":0,\"ParentRelationshipType\":\"Default\",\"ActivityId\":\"01\",\"Properties\":{\"Items\":[{\"ItemId\":null,\"ActivityTypeId\":\"bpf_root\",\"Title\":\"Undefined\",\"IsNameSystemDefined\":true,\"Name\":\"New ActivityTypeName_bpf_root_TitleText\",\"ActivityItemId\":0}]}},{\"ActivityTypeId\":\"Segment\",\"ParentActivityId\":\"01\",\"ParentBranchId\":0,\"ParentRelationshipType\":\"Default\",\"ActivityId\":\"01_0\",\"Properties\":{\"Items\":[{\"ItemId\":null,\"ActivityTypeId\":\"Segment\",\"Title\":\"Undefined\",\"IsNameSystemDefined\":true,\"Name\":\"New Segment group\",\"ActivityItemId\":23,\"SegmentMergeMethod\":\"Union\"},{\"ItemId\":\"24db2671-1529-e911-a9b7-000d3a1e6adc\",\"ActivityTypeId\":\"SegmentItem\",\"Title\":\"Undefined\",\"IsNameSystemDefined\":true,\"Name\":\"TC407937_DynamicSegment_2KZQ1p\",\"ActivityItemId\":24,\"ContainmentMethod\":\"Inclusion\",\"SegmentSourceType\":\"Segment\",\"DciSegmentName\":\"TC407937_DynamicSegment_2KZQ1p\",\"SegmentDisplayName\":\"TC407937_DynamicSegment_2KZQ1p\",\"Description\":\"\"}]},\"EntityTarget\":\"contact\"},{\"ActivityTypeId\":\"Email\",\"ParentActivityId\":\"01_0\",\"ParentBranchId\":0,\"ParentRelationshipType\":\"Default\",\"ActivityId\":\"01_0_2\",\"Properties\":{\"Items\":[{\"ItemId\":\"15bd0ab8-c12a-e911-a9b6-000d3a1e6c14\",\"ActivityTypeId\":\"Email\",\"Title\":\"Undefined\",\"IsNameSystemDefined\":true,\"Name\":\"Relationship test\",\"ActivityItemId\":32}]},\"EntityTarget\":\"contact\"}]",
"msdyncrm_customerjourneytimezone": 92,
"msdyncrm_contentsettingsId@odata.bind": "/msdyncrm_contentsettingss(1922b1d8-0523-e911-a9ba-000d3a1e689f)",
"msdyncrm_enddatetime": "2019-03-09T11:29:00.000Z",
"msdyncrm_startdatetime": "2019-02-09T11:29:00.000Z",
"msdyncrm_name": "Simple Email Sample",
"msdyncrm_isrecurring": false,
"msdyncrm_type": 192350000,
"msdyncrm_entitytarget": 0,
"statuscode": 192350000,
"statecode": 0,
"ownerid@odata.bind": "/systemusers(d0e20c01-d6c6-480f-aab5-0fa6749565a5)"
}
Retrieve request
The retrieve request retrieves the list of Live
customer journeys.
GET {{OrgUrl}}/api/data/v9.0/msdyncrm_customerjourneys?$filter=statuscode eq 192350001
Update request
With the update request, you update statuscode
to, which effectively publishes it.
PATCH {{OrgUrl}}api/data/v9.0/msdyncrm_customerjourneys(8aee9d91-8c2b-e911-a9b7-000d3a1e6adc)
{
"statuscode": 192350006
}
Delete request
With the delete request, you delete the customer journey that you created earlier.
DELETE {{OrgUrl}}/api/data/v9.0/msdyncrm_customerjourneys(b6faa2b7-b92b-e911-8185-000d3af9d16a)
Check for Errors
The Check for Errors feature checks the current record for missing content and technical errors and then displays the validation results, including error messages that should help the user solve any issues that were found.
The request body is a JSON object, which contains number of data elements with values corresponding to the msdyncrm_customerjourney
entity properties. The reference field (for example, Content Settings ID) doesn't use @odata.bind
with the record set reference but uses the ID of the referenced record. The following table explains the mapping.
Key | Corresponding property msdyncrm_customerjourney entity (logical name) |
---|---|
FieldValueCustomerJourneyId | msdyncrm_customerjourneyid |
FieldValueStatusCode | statuscode |
FieldValueName | msdyncrm_name |
FieldValueStartDateTime | msdyncrm_startdatetime |
FieldValueEndDateTime | msdyncrm_enddatetime |
FieldValueWorkflowDefinition | msdyncrm_workflowdefinition |
FieldValueIsRecurring | msdyncrm_isrecurring |
FieldValueRecurrenceIntervalDays | msdyncrm_recurrenceintervaldays |
FieldValueRecurrenceCount | msdyncrm_recurrencecount |
FieldValueRequiredConsent | msgdpr_requiredconsent |
FieldValueEntityTarget | msdyncrm_entitytarget |
FieldValueSuppressionSegmentId | msdyncrm_suppressionsegmentid |
FieldValueCustomerJourneyTimeZone | msdyncrm_customerjourneytimezone |
Validate Customer Journey request
POST {{OrgUrl}}/api/data/v9.0/msdyncrm_CustomerJourneyValidate
{
"FieldValueCustomerJourneyId": "{6628BBF7-C52A-E911-A9B7-000D3A1E6ADC}",
"FieldValueStatusCode": 192350000,
"FieldValueName": "Sample Customer Journey",
"FieldValueStartDateTime": "2019-02-08T11:48:00.000Z",
"FieldValueEndDateTime": "2019-03-08T11:48:00.000Z",
"FieldValueWorkflowDefinition": "[{\"ActivityTypeId\":\"bpf_root\",\"ParentBranchId\":0,\"ParentRelationshipType\":\"Default\",\"ActivityId\":\"01\",\"Properties\":{\"Items\":[{\"ItemId\":null,\"ActivityTypeId\":\"bpf_root\",\"Title\":\"Undefined\",\"IsNameSystemDefined\":true,\"Name\":\"New ActivityTypeName_bpf_root_TitleText\",\"ActivityItemId\":0}]}},{\"ActivityTypeId\":\"Segment\",\"ParentActivityId\":\"01\",\"ParentBranchId\":0,\"ParentRelationshipType\":\"Default\",\"ActivityId\":\"01_0\",\"Properties\":{\"Items\":[{\"ItemId\":null,\"ActivityTypeId\":\"Segment\",\"Title\":\"Undefined\",\"IsNameSystemDefined\":true,\"Name\":\"New Segment group\",\"ActivityItemId\":52,\"SegmentMergeMethod\":\"Union\"},{\"ItemId\":\"056bbe66-f025-e911-a9ba-000d3a1e689f\",\"ActivityTypeId\":\"SegmentItem\",\"Title\":\"Undefined\",\"IsNameSystemDefined\":true,\"Name\":\"TC407937_DynamicSegment_bmkX5u\",\"ActivityItemId\":53,\"ContainmentMethod\":\"Inclusion\",\"SegmentSourceType\":\"Segment\",\"DciSegmentName\":\"TC407937_DynamicSegment_bmkX5u\",\"SegmentDisplayName\":\"TC407937_DynamicSegment_bmkX5u\",\"Description\":\"\"}]},\"EntityTarget\":\"contact\"},{\"ActivityTypeId\":\"Email\",\"ParentActivityId\":\"01_0\",\"ParentBranchId\":0,\"ParentRelationshipType\":\"Default\",\"ActivityId\":\"01_0_3\",\"Properties\":{\"Items\":[{\"ItemId\":\"15bd0ab8-c12a-e911-a9b6-000d3a1e6c14\",\"ActivityTypeId\":\"Email\",\"Title\":\"Undefined\",\"IsNameSystemDefined\":true,\"Name\":\"Relationship test\",\"ActivityItemId\":61}]},\"EntityTarget\":\"contact\"}]",
"FieldValueIsRecurring": true,
"FieldValueRecurrenceIntervalDays": 30,
"FieldValueRecurrenceCount": 3,
"FieldValueRequiredConsent": 587030001,
"FieldValueContentSettingsId": "{1922B1D8-0523-E911-A9BA-000D3A1E689F}",
"FieldValueEntityTarget": 0,
"FieldValueSuppressionSegmentId": "{544A3E20-9B23-E911-A9B6-000D3A1E6C14}",
"FieldValueCustomerJourneyTimeZone": 92
}
Validate Customer Journey response
{
"@odata.context": "{{orgUrl}}/api/data/v9.0/$metadata#Microsoft.Dynamics.CRM.msdyncrm_CustomerJourneyValidateResponse",
"ValidationResult": "{\"ActivityValidationResults\":[{\"ActivityId\":\"\",\"Fault\":\"ErrorRecurringCampaignEndDateDoesNotFitRequestedIterations\",\"Result\":\"Error\",\"ErrorMessageArguments\":[]}],\"Result\":\"Error\"}"
}
Validation result
The following table describes the schema of the ValidationResult
object received in the Validate Customer Journey response.
Property | Type | Description |
---|---|---|
Result | String | The overall error check result. It has the following values: Valid – Records that passed the validation check. Warning – Records that passed validation check; there are nonblocking issues with it. Error – Records that did not pass validation; there are blocking issues with it. |
ActivityValidationResults | Object[] |
An array of validation detail objects. Each one refers to a specific problem that can apply to the customer journey record, a specific tile within the workflow design. See the Activity validation result schema. |
Activity validation result
The following table shows the schema of objects contained within the ActivityValidationResults
array of the ValidationResult
object.
Property | Type | Description |
---|---|---|
ActivityId | String | The Activity ID of the actual workflow tile to which the validation result applies. If empty, the validation result applies globally to the entire workflow definition or other properties of the customer journey. |
Fault | String | The code that identifies the actual validation result. See the validation sample to learn how to work with messages associated with fault codes. |
Result | String | The result severity. It has the following values: Valid – Informative entry Warning – Nonblocking issue Error – Blocking issue |
ErrorMessageArguments | String[] | Optional list of arguments that provides details of the validation result, for example, an ID of the element that fails to meet the validity criteria. |