CAMARA APIs - Functional Differences (Use-Case & Data Semantics Edition)

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:

image-20251027-155734.png

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 + monitoredPeriod means “no events in that observable period.”

Endpoints and I/O:

  • POST /retrieve-date returns latestDeviceChange (timestamp or null), optionally monitoredPeriod (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 monitoredPeriod

  • 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.

  • contractType useful 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:

image-20251125-153624.png

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 → no ownership change has occurred since that specifiedDate, provided the reference date is processable for the provider.

  • 400 OUT_OF_RANGE → the specifiedDate is 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:

image-20251027-160115.png

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

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

true at 2021-12-15 because a recycling/ownership-change happened after that valid reference date; 2023-12-15 is OUT_OF_RANGE because it falls into a non-processable period (e.g. no active subscriber / recycling gap)

Note:

  • OUT_OF_RANGE indicates that the provided specifiedDate is 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 gap

  • The true outcome 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 as 400 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)

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 /check (configurable value, e.g. 24–72h) to gate binding.

Examples of in-life transactions:

  • User make a money transfer on the bank app

  • Bank send message to the user through the app

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 true.

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:

  • User declare a prejudice and provide proofs

  • User change her/his account information and in particular link to insurance refund

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:

  • User change payment method or delivery address

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:

  • A car company wants to reach its customer via SMS to inform them about air bag issue requiring urgent maintenance

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:

  • User makes a request to a 4-times payment (split charge on 4 months)

  • User change hers/his account information

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.