CAMARA APIs - Functional Differences (Use-Case & Data Semantics Edition)
To add feedback, do not edit the document, but use the comments feature instead.
New changes in blue and changes highlighted in black
Audience: Non-telco experts
Objective: Explain in detail what problem each API solves, what data it delivers, how to interpret it, and how to combine them in risk and error-prevention policies
APIs covered: SIM Swap · Device Swap · Tenure · Number Recycling
1. Executive Summary
This whitepaper compares four CAMARA APIs that deliver trust/risk signals around a mobile phone number:
SIM Swap: provides information about the most recent change of the subscription profile associated with a phone number (MSISDN)—including both physical SIM and eSIM. The API either returns the timestamp of the last change or a boolean indicating whether a change occurred within a specified look-back window. Note the API is form-factor agnostic; it reflects operator-recorded changes to the SIM/eSIM subscription profile tied to the MSISDN. Administrative re-provisions may or may not be counted as “changes” depending on each operator’s policy."
Purpose: prevent SIM hijacking (attackers intercepting SMS/OTP, Number Verification, or pretending to be the victim on a phone call).
Device Swap: detects whether the phone number is now used on a different physical device. It mirrors SIM Swap’s I/O shape (timestamp or boolean-in-window), but the tracked event is the device change, not the SIM.
Purpose: detect access or requests from an unexpected handset.
Tenure: checks whether the phone number has had continuous service since a specified date, returning a boolean and, optionally, the contract type (postpaid, prepaid...).
Purpose: use a phone number tenure as a proxy for trustworthiness or fraud risk.
Number Recycling: checks whether a phone number has changed ownership (if has a different contract holder) since a specified date with the same provider, returning a boolean.
Purpose: avoid sending OTP/data to a new owner of a recycled number, avoid locking of accounts protected by SMS 2FA due to outdated number, and flagging outdated CRM contact details.
Unambiguous overlap statements:
SIM Swap and Device Swap share the same endpoints patterns and response structures; they differ only in what changed (SIM vs device).
Tenure and Number Recycling both answer “since-date” questions, but different focus: Tenure measures the period of time the phone number has been active with its current provider (and will reset in case of portability), while Number Recycling checks whether the ownership of the phone number has changed or not since the given date with its current provider.
2. Scope & Sources
This document focuses on functional semantics, I/O, error families, and practical interpretation. Sources: CAMARA Github (link), CAMARA Wiki Page (link) and CAMARA website (link).
3. Comparative Matrix – Data Semantics
The following table positions the four APIs side by side, focusing on what question they answer, the kind of data they return, the time horizon they cover, and how the signal is usually applied in risk or trust decisions. This helps highlight their distinct roles and avoid confusion when evaluating overlaps.
API | Question Answered | Nature of Data | Typical Horizon | Risk Signal | Common Decision |
SIM Swap | Has the SIM changed recently?
| Last change timestamp or boolean by window
| Hours/Days | Very recent change
| Block OTP transaction or activate alternative verification
|
Device Swap | Has the device changed recently? | Last change timestamp or boolean by window
| Hours/Days | Very recent change
| Flag the new device as untrusted until validated; advise developers not to assume continuity of trust automatically |
Tenure | Phone number active service since date X? | Boolean against a specified input date + optional contract type | Month/years | Short or interrupted phone tenure | Extra user verification may be required, it suggests higher risk of potential fraud from that mobile number |
Number recycling | Has ownership changed since date X? | Boolean against a specified input date | Month/years | Possible new owner | Do not send any more OTPs/messages through SMS/voice until the right phone number is confirmed, |
4. API Deep Dives
4.1. SIM Swap (v2.1.0)
Data provided:
latestSimChange (timestamp) or null if no visible changes within the operator’s observable window.
Optional monitoredPeriod (days) when no date is returned (use to interpret null).
/check returns swapped (true/false) evaluated over a window in hours (e.g., 24, 48, …).
How to Read It:
latestSimChange = timestamp → SIM change; the more recent, the higher risk for SMS‑based authentication.
latestSimChange = null + monitoredPeriod = N → no SIM swap events within N days (not “no data exists”).
swapped = true in X‑hour window → apply friction (challenge, deny, etc.).
If the operator’s policy forbids keeping older data, you may see null even if the line exists; use monitoredPeriod for context.
Endpoints and I/O:
POST /retrieve-date returns latestSimChange (timestamp or null), optionally monitoredPeriod (days). If there is no swap event, the SIM activation date on the network is used.
POST /check an input maxAge (1-2400 hours), returns swapped (boolean). If the requested window exceeds local policy/retention, expect 400 OUT_OF_RANGE with a human-readable reason.
Example – How SIM Swap responses should be interpreted:
Given following situation for several lines:
We expect following result from the API:
line | sim-swap/check maxAge = 2400 Call triggered Sept 15th | sim-swap/retrieve-date |
0601 | false | 2020/1/1 or monitoredPeriod:100 days |
0602 | true | 2025/9/1 |
0603 | true | 2025/9/1 |
0604 | false | 2024/1/1 or monitoredPeriod:100 days |
0605 | true | 2025/9/1 |
4.2. Device Swap (v1.0.0)
Data provided:
latestDeviceChange (timestamp) or null with optional monitoredPeriod (days), which indicates the maximum observable period supported by the operator due to local data-retention regulations or internal privacy policies.
/check returns swapped (true/false) over a window in hours.
If no swap ever occurred and policy allows, it may return the first time the number was used in a device.
How to Read It:
Same as SIM Swap but the event is “device change”. A Very recent change might imply higher impersonation risk or new device used by legitimate user (it could be useful to update device fingerprinting).
null+monitoredPeriodmeans “no events in that observable period.”
Endpoints and I/O:
POST /retrieve-date returns
latestDeviceChange(timestamp or null), optionallymonitoredPeriod(days). If no device swap has ever occurred and the operator supports it, the API may return the first time the phone number was used in a device; otherwise it may return null and optionally monitoredPeriodPOST /check a input maxAge (1-2400 hours), returns swapped (boolean).
4.3. Tenure (v0.2.0)
Data Provided:
tenureDateCheck (true/false) answering “Has the phone number been active since tenureDate?”
Optional contractType: PAYG, PAYM, Business.
How to Read It:
true → mobile phone number has been active since that date (tenure ≥ threshold).
false → more recent phone number activation or interruptions (change from postpaid<->prepaid): higher reputational risk.
contractTypeuseful for different policy tiers (prepaid, postpaid, enterprise). There is a higher correlation of frauds with origin in prepaid plan types, it is a signal of higher risk as well.
Endpoints and I/O:
POST /check-tenure a input tenureDate (YYYY-MM-DD), optional phoneNumber (two-legged only); output tenureDateCheck (boolean) and optional contractType (PAYG/PAYM/Business).
Examples:
Given following situation for several lines:
Note on 0608 line: on Jan 1st, 2024 we have a MSISDN change for this line. The 0608 is not anymore used for this line and 0604 is the new number. It was intentionally included to illustrate a non-existent or deactivated MSISDN, where /check-tenure returns 404 not found (no active record within the operator’s current numbering plan).
We expect following result from the API:
line | /check-tenure 2025-09-02 | /check-tenure 2025-06-02 | /check-tenure 2023-12-15 | /check-tenure 2021-12-15 |
0601 | true + contractType | true + contractType | true + contractType | true + contractType |
0602 | true + contractType | true + contractType | true + contractType | true + contractType |
0603 | true + contractType | false+ contractType | false+ contractType | false+ contractType |
0604 | true + contractType | true + contractType | false+ contractType | false+ contractType |
0605 | true + contractType | false+ contractType | false+ contractType | false+ contractType |
0606 | true + contractType | true + contractType | false+ contractType | false+ contractType |
0607 | true + contractType | true + contractType | false+ contractType | false+ contractType |
0608 | 404 not found | 404 not found | 404 not found | 404 not found |
4.4. Number Recycling (v0.2.0)
Data Provided: phoneNumberRecycled (true/false) compared to a specifiedDate.
How to Read It:
true→ ownership (contract holder) within the same MNO changed since thespecifiedDate. Treat as potential misdelivery risk. Note a port-in from other MNO is not mapped as a change of ownership as the owner could be still the same, neither is it a new phone activation as could be the first time the number is assigned to someone.false→ no ownership change has occurred since thatspecifiedDate, provided the reference date is processable for the provider.400 OUT_OF_RANGE→ thespecifiedDateis not a processable reference point for that provider in that period (e.g., no active subscriber at that date / unassigned gap / history not available). This does not simply mean “too old”.
Endpoints and I/O:
POST /check a input specifiedDate (YYYY-MM-DD), optional phoneNumber (two-legged only); output phoneNumberRecycled (boolean).
Examples:
Given following situation for several lines:
We expect the following result from the API request, call triggered 15 Sept 2025:
Line | /check 2021-12-15 | /check 2023-12-15 | /check 2025-06-02 | /check 2025-09-02 | Rationale |
|---|---|---|---|---|---|
0601 | false | false | false | false | No ownership change since any of those valid reference dates |
0602 | false | false | false | false | No ownership change since any of those valid reference dates |
0603 | 400 OUT_OF_RANGE | 400 OUT_OF_RANGE | 400 OUT_OF_RANGE | false | Earlier dates are outside the provider’s evaluable window; at 2025-09-02 the reference date is processable and no recycling occurred since |
0604 | false | false | false | false | No ownership change since any of those valid reference dates |
0605 | 400 OUT_OF_RANGE | 400 OUT_OF_RANGE | 400 OUT_OF_RANGE | false | Earlier dates are outside the provider’s evaluable window (e.g. history not available for that period); at 2025-09-02 it is processable and no recycling occurred since |
0606 | 400 OUT_OF_RANGE | 400 OUT_OF_RANGE | false | false | Earlier dates are outside the provider’s evaluable window; later dates are processable and no recycling occurred since |
0607 | true | 400 OUT_OF_RANGE | false | false |
|
Note:
OUT_OF_RANGE indicates that the provided
specifiedDateis outside the API provider’s supported historical/evaluable window and is therefore not processable for that provider (e.g., no active subscriber at that date / unassigned gap / history not available for that period) - Sync26 meta-release will close this gapThe
trueoutcome in UC0607 @ 2021-12-15 assumes the provider can still evaluate that reference date. If it is outside the supported window (e.g., retention/implementation limits), it should be treated as400 OUT_OF_RANGE(if number was not active on the date checked or was owned by another API Provider) rather than asserting a boolean.
5. Where to Use Them
Each API brings value in different industries depending on the type of risk they face. Below are examples of how companies can apply the signals in real customer journeys.
Industry | Onboarding on the app (new customer / number binding) | In-life interactions on the app (existing customer lifecycle) |
|---|---|---|
Banking / Fintech | Tenure (configurable threshold, e.g. ≥3–6 months) to unlock higher limits; Number Recycling (since last verified contact) before binding or re-binding a number. If SMS OTP is used at signup, run SIM Swap | Examples of in-life transactions:
Access & sensitive transactions: SIM Swap (configurable threshold, e.g. 24–72h) + Device Swap (configurable value, e.g. 24–72h) as risk gates; Tenure to modulate limits/trust. Step-up or cool-off if |
Insurance | Tenure threshold to prioritise trusted numbers; Number Recycling prior to policy activation or re-activation (since last contact/consent). | Examples of in-life transactions:
Claims / payouts: Device Swap (24–72h) before disbursements; add SIM Swap if using SMS OTP; use Tenure to prioritise trust and reduce manual review. |
E-commerce | Number Recycling (since registration) + Tenure before storing a number for notifications/2FA; if SMS OTP is part of account creation, add SIM Swap at bind time. | Examples of in-life transactions:
Purchase OTP & password resets: SIM Swap for SMS OTP integrity; Device Swap for account changes/high-risk actions; Number Recycling before messaging dormant accounts to prevent misdelivery. |
Messaging (brands / CPaaS) | Before (re)enrolling a number for alerts/marketing: Number Recycling (since last consent) + Tenure to prioritise deliverability. | Example of in-life transactions:
Prevent misdelivery & privacy breaches: periodic Number Recycling checks on dormant lists; use Tenure to tier sending policies. |
Credit / BNPL | Tenure as a fast trust filter; Number Recycling (since application date) before binding; if SMS OTP used in KYC, add SIM Swap check at registration. | Examples of in-life transactions:
High-value operations: gate with SIM Swap / Device Swap; use Tenure to tune limits, friction, and review thresholds. |
Authentication solutions | When binding phone numbers as factors: Number Recycling before trusting or re-trusting a stored phone number; Tenure can be added as a secondary continuity/trust signal.
| A service using phone numbers as identifiers wants to reactivate or trust a long-dormant account and needs to check whether the phone number may have been reassigned to a different subscriber. Long-dormant account reactivation or factor re-binding: Number Recycling first to avoid trusting a reassigned number; optionally add Tenure as an additional continuity/trust signal. Add SIM Swap / Device Swap only for adaptive step-up during login, recovery, or sensitive account actions. |
6. Overlap, Differentiation & How They Complement Each Other
The four APIs may look similar in structure, but their value lies in what type of change or continuity they track and how these signals complement each other.
6.1 SIM Swap vs Device Swap
Similarity: Both expose the same endpoint patterns (
/retrieve-date,/check) and responses (timestamp or boolean-in-window). Both could produce a positive response if the mobile phone is lost or stolen and it’s replaced by a new one.Difference: The event type differs: SIM replaced vs Device changed.