CAMARA APIs - Functional Differences (Use-Case & Data Semantics Edition)
To add feedback, do not edit the document, but use the comments feature instead.
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: confirms the period the phone number has been active with its current provider (or the activation date) and optionally returns 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: (Line) 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 vs. 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 | Same holder (with the same provider) since date X? |
Boolean vs. 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 a 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 a 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 a returns latestDeviceChange (timestamp or null), optionally monitoredPeriod (days) - If there is no swap event, the SIM activation date on the network is used.
POST /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 the specifiedDate. 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 → number still belongs to same person; safe to proceed. Note the MNO can only confirm there has not been a change of ownership while the phone number belonged to him, so within the phone number Tenure.
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 submitted on September 15, 2025:
line | /check 2021-12-15 | /check 2023-12-15 | /check 2025-06-02 | /check 2025-09-02 |
0601 | false | false | false | false |
0602 | false | false | false | false |
0603 | false | false | false | false |
0604 | false | false | false | false |
0605 | false(*) | false(*) | false(*) | false |
0606 | false | false | false | false |
0607 | true | true | false | false |
*: Note this is a case an API provider can confirm a contract which is one with other MNO before a port-in date.
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: Tenure + Number Recycling to ensure stable ownership before trusting the factor. | Examples of in-life transactions:
Add a telco-signal layer: SIM Swap / Device Swap for adaptive step-up; use Tenure to weight risk scores and session trust. |
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.
Complementarity: Used together, they provide a stronger signal of suspicious recent change. A legitimate SIM replacement without a device change is lower risk than both happening simultaneously. Both are very useful to keep up to date device fingerprints associated to a given person.
6.2 Tenure vs Number Recycling
Similarity: Both answer “since-date” questions.
Difference: Line Tenure within its current operator (phone number activation date) vs Phone Number ownership change within its current operator (phone number recycled and assigned to someone else). Tenure does not specify the source of activation while number recycling only refers to line activations from a contract owner to another one in the same provider (MNO). Also, note that SIM cards can be handed to a person who is not the contract owner (for example, in family contracts where multiple lines are in use by family members but the MNO only keeps track of the contract holder).