Loyalty program API points redemption fails for cross-channel transactions

Our loyalty program integration is failing when customers try to redeem points across different channels. The redemption works fine for in-store purchases but fails via mobile app and web. We’re using the Adobe Loyalty API redemption endpoint and getting inconsistent errors. Here’s a typical request that fails:


POST /loyalty/v2/redemptions
{
  "memberId": "CUST-12345",
  "points": 500,
  "channel": "mobile",
  "rewardId": "RWD-789"
}

Error response: {"error": "Invalid channel mapping", "code": "LYL-403"}. The payload structure matches the documentation, and we’ve validated the memberId and rewardId exist. The redemption rules are configured in the admin console to allow all channels. Has anyone dealt with channel mapping issues in AEC 2021? This is impacting customer experience significantly - we’re getting support tickets daily from frustrated customers who can’t use their points.

I encountered this exact issue last year. The problem is that AEC 2021’s loyalty API validates channel identifiers against a whitelist that’s separate from the UI settings. You need to get the valid channel codes from the channel configuration endpoint first. Also, make sure your payload includes the transactionId field - even though it’s marked optional in the docs, some channel validations require it. We added transactionId and switched to the proper channel codes, which fixed it immediately.

Thanks for all the insights! After thorough investigation and testing, here’s the complete solution that resolved our cross-channel redemption issues:

Root Cause Analysis:

The problem had three interconnected components that all needed to be addressed:

1. Channel Mapping Configuration:

The channel identifiers in our API requests didn’t match Adobe’s internal channel registry. We needed to query the proper channel codes:


GET /loyalty/v2/channels
Response: [
  {"id": "CH_MOBILE_APP", "name": "Mobile Application"},
  {"id": "CH_WEB_PORTAL", "name": "Web Portal"},
  {"id": "CH_IN_STORE", "name": "Point of Sale"}
]

We were sending “mobile” but the system expected “CH_MOBILE_APP”. This mismatch caused the LYL-403 error. The in-store channel worked because our POS system was already using the correct “CH_IN_STORE” identifier.

2. Payload Validation Requirements:

Each channel has specific validation rules in AEC 2021. Mobile and web redemptions require additional fields that aren’t needed for in-store:

  • transactionId: Mandatory for non-POS channels (format: TXN-{timestamp}-{random})
  • deviceInfo: Required for mobile channel (deviceType, osVersion, appVersion)
  • sessionToken: Required for web channel to prevent replay attacks

Our original payload was missing these channel-specific fields. Updated payload structure:


{
  "memberId": "CUST-12345",
  "points": 500,
  "channel": "CH_MOBILE_APP",
  "rewardId": "RWD-789",
  "transactionId": "TXN-1234567890-ABC",
  "metadata": {
    "deviceType": "iOS",
    "appVersion": "3.2.1"
  }
}

3. Redemption Rules Configuration:

We discovered that while the admin console showed “all channels enabled” at the program level, individual rewards had channel restrictions. Reward RWD-789 was only configured for in-store redemptions. We needed to:

  • Navigate to Loyalty Admin > Rewards > RWD-789 > Channel Availability
  • Explicitly enable CH_MOBILE_APP and CH_WEB_PORTAL
  • Set channel-specific point multipliers (mobile had 1.0x, needed to be configured)
  • Configure redemption limits per channel (mobile was set to 0, blocking all redemptions)

Complete Implementation Solution:

  1. Channel Registry Integration: Modified our integration layer to cache channel identifiers from the /loyalty/v2/channels endpoint (refreshed daily)

  2. Dynamic Payload Construction: Built a payload builder that adds required fields based on channel:

    • Mobile: adds deviceInfo from app context
    • Web: adds sessionToken from user session
    • All non-POS: generates unique transactionId
  3. Reward Configuration Audit: Ran a script to verify all active rewards are enabled for all channels we support. Found 23 rewards that needed channel configuration updates.

  4. Error Handling Enhancement: Implemented specific error handling for LYL-403 that provides clear guidance to users and logs detailed diagnostics for our team.

Results:

  • Mobile redemption success rate: 0% → 98.5%
  • Web redemption success rate: 0% → 97.2%
  • Support tickets reduced by 85%
  • Average redemption processing time: 1.2 seconds

Important Notes for AEC 2021:

  • The channel validation is case-sensitive and prefix-specific (must use CH_ prefix)
  • Redemption rules can override program-level channel settings - always check both levels
  • The API documentation doesn’t clearly indicate which fields are channel-dependent - test thoroughly
  • Consider implementing a pre-validation check before redemption attempts to provide better UX

We also built a monitoring dashboard that tracks redemption success rates by channel, which helped us identify the issue faster and verify the fix was working across all channels.

The channel mapping error usually indicates a mismatch between the reward’s configured channels and the redemption request channel. Have you verified that reward RWD-789 is actually enabled for mobile redemptions? Sometimes rewards are created with limited channel availability. Also check if there are any redemption rules filtering by channel - we had a case where a rule was blocking mobile redemptions unintentionally.

We had similar issues and discovered that the channel field needs to match exactly what’s in your channel registry. Use GET /loyalty/v2/channels to retrieve valid channel identifiers. Also, double-check your API credentials - different channels might require different permission scopes in AEC 2021.

Check your channel configuration in the Loyalty Program settings. AEC 2021 requires explicit channel mapping for each reward type. Even if the admin console shows “all channels enabled”, the API needs specific channel identifiers that might differ from what you’re sending. Try using “MOBILE_APP” instead of “mobile”.

Don’t forget about payload validation beyond just the channel field. We found that certain reward types require additional metadata in the redemption request depending on the channel. For example, mobile redemptions might need device information or app version. Check the schema validation rules for your specific reward categories.