Path Condition Accessors
Path condition accessors allow external services to provide computed values that can be used in journey path conditions for dynamic routing decisions.
This enables services to influence the journey path based on their processing logic.
Use path condition accessors when you want to:
- Implement dynamic split path decisioning based on external service logic
- Route entities differently based on enrichment results
- Apply scoring or classification that affects journey flow
Configuration
Enable accessors
In your API definition file, set enableSplitPaths to true.
serviceDefinition:
enableSplitPaths: true
invocationPayloadDef:
accessorsMetadata:
- accessorName: enrichmentScore
dataType: integer
description: Data quality score (0-100)
constraints:
minValue: 0
maxValue: 100
- accessorName: treatmentId
dataType: string
description: Recommended treatment
constraints:
allowedValues: ["premium", "standard", "basic"]
Create path conditions
In the journey builder, create path conditions using the defined accessors:
- Condition:
my.enrichmentScore >= 80 - Condition:
my.treatmentId == 'standard' - Default path (no condition)
Return accessor values
In the callback response, include the expected accessorValues:
{
"leadData": {
"id": 12345,
"email": "john@example.com",
"accessorValues": {
"enrichmentScore": 92,
"treatmentId": "premium"
}
}
}
Adobe evaluates the path conditions using the accessor values and routes the entity accordingly.
Accessor Value Structure
Location
Accessor values are embedded directly in the entity data:
leadData.accessorValuesaccountData.accessorValuesaccountPersonData[].accessorValues (per relationship){
"accessorValues": {
"accessorName1": value1,
"accessorName2": value2
}
}
Rules
accessorName from accessorsMetadatadataTypenull)Data Types
integerfloatstringbooleanAccessor Constraints
Define constraints to help administrators create valid conditions:
Numeric Constraints
accessorsMetadata:
- accessorName: score
dataType: integer
constraints:
minValue: 0
maxValue: 100
Usage in conditions:
my.score >= 80my.score < 50
String Constraints
accessorsMetadata:
- accessorName: tier
dataType: string
constraints:
allowedValues: ["platinum", "gold", "silver", "bronze"]
Usage in conditions:
my.tier == 'platinum'my.tier IN ['platinum', 'gold']
Boolean Constraints
accessorsMetadata:
- accessorName: isQualified
dataType: boolean
Usage in conditions:
my.isQualified == truemy.isQualified
Examples by Entity Type
Lead Path Condition Accessors
Service Definition
enableSplitPaths: true
invocationPayloadDef:
accessorsMetadata:
- accessorName: enrichmentScore
dataType: integer
- accessorName: dataQuality
dataType: string
constraints:
allowedValues: ["high", "medium", "low"]
- accessorName: isVerified
dataType: boolean
Callback Response
{
"leadData": {
"id": 12345,
"email": "john@example.com",
"accessorValues": {
"enrichmentScore": 92,
"dataQuality": "high",
"isVerified": true
}
}
}
- Premium Path:
my.enrichmentScore >= 80 - Standard Path:
my.dataQuality == 'high' - Default Path: All others
Account Path Condition Accessors
Service Definition
enableSplitPaths: true
invocationPayloadDef:
accessorsMetadata:
- accessorName: accountScore
dataType: integer
- accessorName: tier
dataType: string
constraints:
allowedValues: ["enterprise", "business", "startup"]
- accessorName: fitScore
dataType: float
Callback Response
{
"accountData": {
"id": 67890,
"accountName": "Acme Corp",
"accessorValues": {
"accountScore": 95,
"tier": "enterprise",
"fitScore": 8.7
}
}
}
- Enterprise Path:
my.tier == 'enterprise' - High Potential Path:
my.accountScore >= 80 - Default Path: All others
AccountPerson Path Condition Accessors
Key Feature: Each person-account relationship can have its own accessor values for relationship-specific routing.
Service Definition
enableSplitPaths: true
invocationPayloadDef:
accessorsMetadata:
- accessorName: engagementScore
dataType: integer
- accessorName: persona
dataType: string
constraints:
allowedValues: ["decision_maker", "influencer", "user", "blocker"]
- accessorName: priority
dataType: string
constraints:
allowedValues: ["critical", "high", "medium", "low"]
Callback Response
{
"accountPersonData": [
{
"accountPersonRelId": 111,
"accountId": 67890,
"personId": 12345,
"email": "john@acme.com",
"title": "VP Sales",
"accessorValues": {
"engagementScore": 92,
"persona": "decision_maker",
"priority": "critical"
}
},
{
"accountPersonRelId": 112,
"accountId": 67890,
"personId": 12346,
"email": "jane@acme.com",
"title": "Manager",
"accessorValues": {
"engagementScore": 65,
"persona": "influencer",
"priority": "medium"
}
}
]
}
- VIP Path:
my.persona == 'decision_maker' - High Engagement Path:
my.engagementScore >= 80 - Nurture Path:
my.engagementScore < 60
Routing Result:
- John (decision_maker, critical priority) → VIP Path
- Jane (influencer, medium priority) → Nurture Path
Path Configuration in Execution Request
Adobe sends path configuration in the execution request:
{
"actionConfig": {
"pathConfig": [
{
"pathId": "highValue",
"pathDefinition": [
{
"accessor": "enrichmentScore",
"operator": "greaterThanOrEqual",
"values": ["80"]
}
]
},
{
"pathId": "default",
"pathDefinition": []
}
]
},
"enableSplitPaths": true
}
Your Service
- Reviews
pathDefinitionto understand which accessors are needed - Returns appropriate values in
accessorValues - Adobe then evaluate conditions and routes accordingly
Common Use Cases
Lead Scoring & Routing
accessorsMetadata:
- accessorName: leadScore
dataType: integer
- accessorName: segment
dataType: string
constraints:
allowedValues: ["hot", "warm", "cold"]
Callback
{
"accessorValues": {
"leadScore": 85,
"segment": "hot"
}
}
Routing
- Hot leads (score >= 80) → Sales team path
- Warm leads (50-79) → Nurture campaign
- Cold leads (< 50) → Long-term nurture
Risk Assessment
accessorsMetadata:
- accessorName: riskLevel
dataType: string
constraints:
allowedValues: ["low", "medium", "high"]
- accessorName: complianceScore
dataType: integer
Callback
{
"accessorValues": {
"riskLevel": "low",
"complianceScore": 95
}
}
Routing
- Low risk + high compliance → Fast track
- Medium risk → Standard review
- High risk → Manual review
Buying Group Roles
accessorsMetadata:
- accessorName: buyingGroupRole
dataType: string
constraints:
allowedValues: ["champion", "economic_buyer", "decision_maker", "influencer", "user"]
- accessorName: engagementLevel
dataType: string
constraints:
allowedValues: ["high", "medium", "low"]
Callback (AccountPerson)
{
"accountPersonData": [
{
"accountPersonRelId": 111,
"accessorValues": {
"buyingGroupRole": "decision_maker",
"engagementLevel": "high"
}
}
]
}
Routing
- Decision makers with high engagement → Executive outreach
- Influencers → Educational content
- Users → Product demos
Best Practices
Define Clear Accessors
- Use descriptive names:
enrichmentScorenotscore1 - Document expected value ranges
- Provide constraints for validation
Return Consistent Values
- Always return same data type
- Handle missing data gracefully (omit accessor or use default)
- Validate values before sending
Design Meaningful Paths
- Create mutually exclusive conditions when possible
- Always have a default path
- Test path logic with sample accessor values
Document Accessor Logic
- Explain how accessor values are computed
- Provide examples of accessor values and resulting paths
- Document any dependencies or prerequisites
Handle Edge Cases
- Missing data → Omit accessor (evaluates to null)
- Invalid values → Log error and use default
- Timeout → Send partial accessors if possible
Troubleshooting
accessorNamedataTypeaccessorValues in callback responseenableSplitPaths not setenableSplitPaths: trueAdvanced Patterns
Time-based Routing
Include temporal factors:
accessorsMetadata:
- accessorName: recencyScore
dataType: integer
- accessorName: urgency
dataType: string
constraints:
allowedValues: ["immediate", "soon", "later"]