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