Reason codes are the detailed signals that explain exactly why a customer passed or failed identity verification. Each code represents a specific finding—from “email address is over 2 years old” (I553) to “multiple identities associated with SSN” (R203)—giving you granular insight into verification decisions and enabling intelligent retry logic.

Understanding Code Categories

Reason codes follow a consistent naming pattern that indicates their type and severity:
PrefixCategoryMeaningAction Required
IInformationalPositive or neutral signalsNone - supports verification
RRisk IndicatorPotential fraud or discrepancyReview or additional verification
BIBusiness InfoBusiness-specific positive signalsNone - supports business verification
BRBusiness RiskBusiness-specific risk indicatorsReview business documentation
Focus on R codes first—these indicate the specific issues preventing verification. Use I codes to understand what IS working correctly.

Where Codes Appear

Reason codes are returned in the codes array within each breakdown module:
const review = await straddle.customers.review(customerId);

// Each module has its own codes array
const fraudCodes = review.identity_details.breakdown.fraud.codes;
const emailCodes = review.identity_details.breakdown.email.codes;
const phoneCodes = review.identity_details.breakdown.phone.codes;

// Example response
console.log(fraudCodes);
// ["I1004", "I520", "R203"]  
//  ↑        ↑       ↑
//  Match 4+ Consortium | Email low risk | Multiple SSNs

Critical Risk Codes

These codes typically result in immediate rejection or review:

Identity Fraud Indicators

CodeDescriptionSuggested Action
R201Invalid SSN formatVerify SSN and re-submit
R203Multiple identities with SSNHigh fraud risk - manual review
R298Manipulated synthetic identityReject - synthetic fraud pattern
R299Fabricated synthetic identityReject - synthetic fraud pattern

Verification Failures

CodeDescriptionSuggested Action
R551Invalid email addressRequest valid email
R603Invalid phone numberUpdate phone number
R703Address doesn’t existVerify address format
R901SSN cannot be resolvedAdditional documentation needed

Watchlist Hits

CodeDescriptionSuggested Action
R180OFAC SDN list matchCompliance review required
R184Politically exposed personEnhanced due diligence
R185Adverse mediaInvestigation required

Implementation Patterns

Automated Response Logic

async function handleReasonCodes(customerId) {
  const review = await straddle.customers.review(customerId);
  const allCodes = [];
  
  // Collect all codes from all modules
  Object.values(review.identity_details.breakdown).forEach(module => {
    if (module.codes) allCodes.push(...module.codes);
  });
  
  // Priority 1: Check for blocking codes
  const blockingCodes = ['R180', 'R184', 'R298', 'R299'];
  if (allCodes.some(code => blockingCodes.includes(code))) {
    return { action: 'reject', reason: 'High risk or compliance issue' };
  }
  
  // Priority 2: Check for fixable issues
  const fixableIssues = {
    'R201': 'Invalid SSN - please verify',
    'R551': 'Invalid email - please update',
    'R603': 'Invalid phone - please update',
    'R703': 'Address not found - please verify'
  };
  
  for (const [code, message] of Object.entries(fixableIssues)) {
    if (allCodes.includes(code)) {
      return { action: 'request_update', message, field: getFieldFromCode(code) };
    }
  }
  
  // Priority 3: Check risk threshold
  const riskCodes = allCodes.filter(code => code.startsWith('R'));
  if (riskCodes.length > 5) {
    return { action: 'manual_review', codes: riskCodes };
  }
  
  // All clear
  return { action: 'approve' };
}

User-Friendly Error Messages

const CODE_MESSAGES = {
  // Invalid input
  'R201': 'The Social Security Number appears to be invalid. Please double-check and re-enter.',
  'R551': 'We couldn\'t verify this email address. Please use your primary email.',
  'R603': 'This phone number couldn\'t be verified. Please ensure it\'s a valid US number.',
  'R703': 'We couldn\'t find this address. Please verify the street address and ZIP code.',
  
  // Identity issues  
  'R203': 'We need additional information to verify your identity. Please contact support.',
  'R298': 'We\'re unable to verify your identity at this time. Please contact support.',
  
  // Watchlist
  'R180': 'Additional review required. Our compliance team will contact you within 24 hours.',
};

function getUserMessage(codes) {
  for (const code of codes) {
    if (CODE_MESSAGES[code]) {
      return CODE_MESSAGES[code];
    }
  }
  return 'We need to review your application. You\'ll hear from us soon.';
}

Best Practices

Prioritize Response

  • Handle blocking codes first (watchlist, synthetic)
  • Then fixable issues (invalid input)
  • Finally risk assessment (velocity, correlation)
  • Always provide actionable feedback

Track Patterns

  • Monitor most frequent codes
  • Identify false positive patterns
  • Optimize data collection based on failures
  • Adjust risk thresholds over time

Handle Gracefully

  • Prepare for new codes
  • Group related codes for handling
  • Cache code lookups for performance
  • Log all codes for analysis

User Experience

  • Translate codes to clear messages
  • Specify exactly what needs fixing
  • Avoid exposing raw codes to users
  • Provide support paths for complex issues

Common Code Patterns

Successful Verification

Typically includes these informational codes:
  • I1004 or I1005: Found in consortium data
  • I520, I620, I720: Low risk scores
  • I556, I618, I708: PII elements resolved

Needs Manual Review

Often includes these combinations:
  • I1001 + multiple R codes: New identity with risks
  • R1001-R1009: Velocity or inconsistency issues
  • R160-R166: Suspect but not confirmed fraud

Auto-Reject Patterns

  • R298 or R299: Synthetic identity
  • R180-R185: Watchlist matches
  • Multiple R140-R146: Negative tags

Reason Codes Documentation

Consortium and Social Verification


Account Verification Codes

Account Correlation


Device Verification Codes

Device Information


Email Verification Codes

Email Risk and Correlation


Phone Verification Codes

Phone Risk and Correlation


Address Verification Codes

Address Risk and Correlation


General Information Codes

General Information


Risk Codes

Identity Risk Codes