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:

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:

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:

Entity Type
Location
Lead
leadData.accessorValues
Account
accountData.accessorValues
AccountPerson
accountPersonData[].accessorValues (per relationship)
{  
  "accessorValues": {  
    "accessorName1": value1,  
    "accessorName2": value2  
  }  
}  

Rules

Rule
Requirement
Key names
Must match accessorName from accessorsMetadata
Value types
Must match the defined dataType
Optionality
All accessors are optional (omitted accessors evaluate to null)

Data Types

Type
Description
Example
integer
Whole numbers
42
float
Decimal numbers
3.14
string
Text values
"premium"
boolean
True/false
true

Accessor Constraints

Define constraints to help administrators create valid conditions:

Numeric Constraints

accessorsMetadata:  
  - accessorName: score  
    dataType: integer  
    constraints:  
      minValue: 0  
      maxValue: 100  

Usage in conditions:

String Constraints

accessorsMetadata:  
  - accessorName: tier  
    dataType: string  
    constraints:  
      allowedValues: ["platinum", "gold", "silver", "bronze"]  

Usage in conditions:

Boolean Constraints

accessorsMetadata:  
  - accessorName: isQualified  
    dataType: boolean  

Usage in conditions:

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  
    }  
  }  
}  

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  
    }  
  }  
}  

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"  
      }  
    }  
  ]  
}  

Routing Result:

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

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

Risk Assessment

accessorsMetadata:  
  - accessorName: riskLevel  
    dataType: string  
    constraints:  
      allowedValues: ["low", "medium", "high"]  
  - accessorName: complianceScore  
    dataType: integer  

Callback

{  
  "accessorValues": {  
    "riskLevel": "low",  
    "complianceScore": 95  
  }  
}  

Routing

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

Best Practices

Define Clear Accessors

Return Consistent Values

Design Meaningful Paths

Document Accessor Logic

Handle Edge Cases

Troubleshooting

Issue
Cause
Solution
Path not taken
Accessor value doesn't match condition
Verify accessor value and condition syntax
Accessor ignored
Accessor name doesn't match definition
Check spelling of accessorName
Type error
Accessor value type mismatch
Ensure value matches defined dataType
All entities go to default
Accessors not returned in callback
Include accessorValues in callback response
Split paths not working
enableSplitPaths not set
Ensure service definition has enableSplitPaths: true

Advanced Patterns

Time-based Routing

Include temporal factors:

accessorsMetadata:  
  - accessorName: recencyScore  
    dataType: integer  
  - accessorName: urgency  
    dataType: string  
    constraints:  
      allowedValues: ["immediate", "soon", "later"]