Problem description
Consumers have requested coarse time-band signals to support better fraud and risk decisioning. The current /check endpoint returns only a Boolean (swapped), which by itself is an insufficient signal.
Possible evolution
Return an Optional standardized operator-defined recency bucket.
Proposed approach:
- Keep the existing Boolean
swapped field.
- Add an optional
simSwapAgeBandEnum.
- Preserve backward compatibility.
This keeps /check aligned with its purpose as a simple threshold signal while optionally exposing standardized context.
The consuming party (e.g., a bank) can then apply its own thresholds, ML features, or step-up logic outside the API contract.
Proposed request/response pattern
Request
{
"phoneNumber": "+1234567890"
}
The request remains intentionally minimal and consumer-agnostic.
Response
{
"swapped": true,
"simSwapAgeBandEnum": 1,
}
swapped remains the primary contract
- enum fields provide optional additional signal
YAML schema note
Suggested explanatory note:
simSwapAgeBandEnum is an optional standardized recency bucket representing the elapsed time between the SIM activation/change date and the current time.
The value maps the duration into fixed bands (0–14), ranging from 0 hours up to 3+ years.
Special values:
111 → Change has not occurred
999 → Subscriber valid but no real-time profile available
Standardized AgeBandEnum mapping
0 = 0h ≤ d < 4h
1 = 4h ≤ d < 12h
2 = 12h ≤ d < 1d
3 = 1d ≤ d < 2d
4 = 2d ≤ d < 5d
5 = 5d ≤ d < 7d
6 = 7d ≤ d < 14d
7 = 14d ≤ d < 30d
8 = 30d ≤ d < 60d
9 = 60d ≤ d < 90d
10 = 90d ≤ d < 180d
11 = 180d ≤ d < 1y
12 = 1y ≤ d < 2y
13 = 2y ≤ d < 3y
14 = 3y+
111 = Change has not happened
999 = Subscriber valid, but no real-time profile found
enum: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,111,999]
Backward compatibility
This proposal introduces additive-only changes:
- Existing
swapped behavior remains unchanged
- New optional response fields:
Existing clients remain unaffected.
The goal is to keep the API focused on known business value & delivering simple operator signals, while leaving policy and decisioning to consuming systems.
Problem description
Consumers have requested coarse time-band signals to support better fraud and risk decisioning. The current /check endpoint returns only a Boolean (swapped), which by itself is an insufficient signal.
Possible evolution
Return an Optional standardized operator-defined recency bucket.
Proposed approach:
swappedfield.simSwapAgeBandEnum.This keeps
/checkaligned with its purpose as a simple threshold signal while optionally exposing standardized context.The consuming party (e.g., a bank) can then apply its own thresholds, ML features, or step-up logic outside the API contract.
Proposed request/response pattern
Request
{ "phoneNumber": "+1234567890" }The request remains intentionally minimal and consumer-agnostic.
Response
{ "swapped": true, "simSwapAgeBandEnum": 1, }swappedremains the primary contractYAML schema note
Suggested explanatory note:
Special values:
111→ Change has not occurred999→ Subscriber valid but no real-time profile availableStandardized AgeBandEnum mapping
Backward compatibility
This proposal introduces additive-only changes:
swappedbehavior remains unchangedsimSwapAgeBandEnumExisting clients remain unaffected.
The goal is to keep the API focused on known business value & delivering simple operator signals, while leaving policy and decisioning to consuming systems.