Skip to main content

Network APIs

Tap directly into the mobile operator network for silent, no-OTP identity and fraud signals. These endpoints wrap the GSMA Open Gateway / CAMARA APIs behind a single, tenant-scoped surface so you can verify a number, detect a recent SIM swap, confirm a device’s location or reachability, match KYC attributes, charge the operator bill, and fuse it all into one risk verdict — without ever sending a message to the subscriber. Base path: /api/v1/numbers/network-apis
The upstream integration is gated on operator credentials per deployment. When no operator is configured every endpoint fails closed — it returns 503 SERVICE_UNAVAILABLE rather than fabricating an identity result. Call Operator status first to check whether the surface is live.
All requests are authenticated with your API key and rate-limited on the standard read/write buckets. Phone numbers are E.164 (e.g. +14155550100).

Using the SDKs

Prefer the typed client, but this page’s endpoint has no helper yet — the generic request() keeps auth/retries and the { data, meta } envelope identical:
Python (same call via the SDK’s escape hatch):
The Python SDK is core-scope — it wraps the 8 core resources (messaging, voice, contacts, campaigns, verify, numbers) and reaches everything else through the generic client.request() escape hatch above. See the Python SDK. Raw curl in the body of this page works identically. Full SDK index at SDK quickstart.

Operator status

GET /api/v1/numbers/network-apis/status Report whether GSMA/CAMARA operator credentials are configured for this deployment. Returns a boolean only — never a secret.

Number Verification (Silent Auth)

POST /api/v1/numbers/network-apis/number-verification:verify Verify a network-asserted MSISDN — the silent alternative to an SMS OTP. Fails closed: anything that is not an explicit network-confirmed match resolves to devicePhoneNumberVerified: false.
string
E.164 number to verify. Provide exactly one of phoneNumber or hashedPhoneNumber.
string
SHA-256 hash of the E.164 number (privacy-preserving variant).
string
Device-bound access token from the 3-legged CIBA / auth-code flow completed over the cellular data bearer. When present it proves device possession.

SIM Swap

Check

POST /api/v1/numbers/network-apis/sim-swap:check Was the SIM behind a number swapped within the look-back window? A recent swap is a strong account-takeover signal.
string
required
E.164 number to check.
integer
default:"240"
Look-back window in hours (range 12400). Default 240 (10 days).

Retrieve date

POST /api/v1/numbers/network-apis/sim-swap:retrieve-date Return the timestamp of the most recent SIM change, for callers that want the raw date rather than a boolean.
string
required
E.164 number to look up.

Subscriptions (continuous monitoring)

Poll instead where you can, subscribe where you must — enroll a number into continuous SIM-swap monitoring and the operator pushes a CloudEvent to your HTTPS webhook the instant the SIM is swapped. Create a subscription (POST /api/v1/numbers/network-apis/sim-swap/subscriptions):
string
required
E.164 number to monitor.
string
required
HTTPS webhook the operator POSTs swap notifications to.
string
Bearer token the operator presents on each callback, so you can authenticate the inbound notification.
string
RFC-3339 UTC expiry. Omit for an open-ended subscription you tear down with DELETE.
integer
Stop after this many delivered events (11000).
Read one subscription (GET /api/v1/numbers/network-apis/sim-swap/subscriptions/{subscriptionId}):
Cancel a subscription (DELETE /api/v1/numbers/network-apis/sim-swap/subscriptions/{subscriptionId}):
Returns 204 No Content — the operator stops delivering swap notifications.

Device Swap

POST /api/v1/numbers/network-apis/device-swap:check The account-takeover sibling of SIM Swap: was the SIM behind a number moved to a different handset (an IMEI change) within the look-back window? A subscriber whose card suddenly answers from a new device is a strong takeover corroborator — distinct from a fresh SIM.
string
required
E.164 number to check.
integer
default:"240"
Look-back window in hours (range 12400). Default 240.

Device Roaming Status

POST /api/v1/numbers/network-apis/device-roaming-status:retrieve Surface the operator’s network-asserted roaming state for a device — a SIM answering in an unexpected country is a takeover and fraud corroborator you can fuse into your own decisioning.
string
required
E.164 number of the device.
Continuous monitoring: enroll the number into roaming on/off notifications via POST /api/v1/numbers/network-apis/device-roaming-status/subscriptions, then read or cancel with the matching GET / DELETE on /device-roaming-status/subscriptions/{subscriptionId}. The request and lifecycle shapes are identical to the SIM Swap subscriptions above.

KYC Match

POST /api/v1/numbers/network-apis/kyc-match:match Match caller-supplied identity attributes against the operator’s KYC records. Returns per-attribute match results — never the underlying PII.
string
required
E.164 number whose KYC record to match against.
string
Full name to match.
string
Given (first) name.
string
Family (last) name.
string
Date of birth (ISO YYYY-MM-DD).
string
National ID / document number.
string
Email address to match.
Tenant-owned control: only send the identity attributes your tenant’s lawful KYC basis covers. The operator returns per-attribute match tokens and never the underlying PII, so no subscriber data is exposed beyond what you already hold.

Device Location Verification

POST /api/v1/numbers/network-apis/device-location:verify Confirm whether a device is within a claimed geofence (a circle) without revealing its coordinates.
string
required
E.164 number of the device.
number
required
Geofence centre latitude (WGS-84, -9090).
number
required
Geofence centre longitude (WGS-84, -180180).
integer
required
Geofence radius in metres (2000200000).
integer
Max age in seconds of the location fix the operator may use (603600).
verificationResult is one of TRUE, FALSE, PARTIAL, UNKNOWN.

Device Status reachability

POST /api/v1/numbers/network-apis/device-status:reachability Surface the operator’s network-asserted reachability for a device without contacting it. NOT_CONNECTED is a corroborating fraud signal.
string
required
E.164 number of the device.
reachabilityStatus is one of CONNECTED_DATA, CONNECTED_SMS, NOT_CONNECTED.

Carrier Billing

POST /api/v1/numbers/network-apis/carrier-billing:charge Charge a one-time payment to the end-user’s mobile-operator bill (Direct Carrier Billing). The per-transaction amount is capped server-side; a request above the cap is rejected with 422 before it reaches the operator.
string
required
E.164 number to bill.
number
required
Charge amount in major currency units (e.g. 1.99). Positive and finite.
string
required
ISO-4217 alphabetic currency code (e.g. EUR).
string
required
Human-readable description shown on the operator-bill line (max 140 chars).
string
Your own reconciliation reference, echoed to the operator.
string
Idempotency key so a retried charge is not double-billed.
Tenant-owned control: billing on the operator’s bill is a tenant-managed capability. Your tenant’s deployment configuration sets the per-transaction cap the server enforces; a charge above it is rejected with 422 before it ever reaches the operator.

Age Verification

POST /api/v1/numbers/network-apis/age-verification:verify Operator-asserted check that a subscriber is at least ageThreshold years old, for age-gated commerce. Returns a verdict only — never a date of birth — and fails closed (anything but an explicit affirmative reads as not old enough).
string
required
E.164 number of the subscriber.
integer
required
Minimum age to assert, in years (13120).
string
Optional identity attribute that raises match confidence.
string
Optional given name.
string
Optional family name.
string
Optional date of birth.
string
Optional ID / document number.
string
Optional email.

Scam Signal

POST /api/v1/numbers/network-apis/scam-signal:assess Real-time anti-APP-fraud network-signal dip for a number. Returns a normalised, fail-safe verdict — the three anonymised signals plus a coarse risk level — so a bank/fintech can make the final allow/review/block call at the moment of a live transaction. No call content is ever accessed.
string
E.164 number. Provide exactly one of phoneNumber or hashedPhoneNumber.
string
SHA-256 hash of the E.164 number.

Identity Risk Score

POST /api/v1/numbers/network-apis/risk:score Fuse the operator CAMARA signals (SIM swap, device status, device location, number verification, operator-asserted call forwarding) together with caller-held signals (roaming, reputation, call forwarding) into one weighted transaction-risk verdict with reason codes. Callable at login / signup / checkout / payout — not just on an OTP send. Each live signal is fetched fail-soft: an unconfigured or failing signal is reported unavailable and contributes nothing rather than failing the request. When a CAMARA operator is configured, risk:score automatically dips the same operator-asserted call-forwarding signal used by Scam Signal — the carrier itself confirming unconditional forwarding is active on the line, mirroring Twilio Lookup v2’s paid “Call Forwarding” data package. This carrier-grade signal is fused at a higher weight than the callForwardingUnconditional field below (a self-reported/derived value you already hold), and the two are independent: you don’t need an operator connection to pass your own signal in, and an operator dip never requires you to supply one.
string
required
E.164 number to score.
object
Optional business context (action, reference) echoed back, not scored.
object
Optional claimed geofence (latitude, longitude, radius, maxAge) that drives Device-Location Verification.
integer
default:"240"
SIM Swap look-back window in hours (12400).
string
Device-bound Silent-Auth token; when present, possession is checked.
string
Caller-held line reputation: low, medium, high, unknown.
boolean
Caller-held roaming state.
boolean
Caller-held unconditional call-forwarding state.
object
Per-request weight overrides (0–100 each).
object
Per-request decision-threshold overrides (review, deny).
Tenant-owned control: default weights and thresholds are deployment-level tenant settings. The per-request weights / thresholds overrides let a tenant tune the verdict without touching the shared surface configuration.

Quality-on-Demand (QoD) sessions

Programmable QoS data bearers: request a low-latency / high-throughput data session for a device on demand, read its status, extend it, and tear it down. QoD shapes a data bearer only.

Create a session

POST /api/v1/numbers/network-apis/qod-sessions
string
required
E.164 number of the target device.
string
required
Application server IPv4 the optimized bearer targets.
string
Optional application server IPv6.
string
required
Operator QoS profile id (e.g. QOS_E low-latency, QOS_L throughput).
integer
default:"3600"
Requested session duration in seconds (186400).

Get a session

GET /api/v1/numbers/network-apis/qod-sessions/{sessionId} Read the current status of a session.

Extend a session

POST /api/v1/numbers/network-apis/qod-sessions/{sessionId}/extend
integer
required
Additional seconds to add to the live session (186400).

Delete a session

DELETE /api/v1/numbers/network-apis/qod-sessions/{sessionId} Tear down a session. Returns 204 No Content.

Errors

503
No GSMA/CAMARA operator is configured for this deployment. The surface fails closed — call Operator status to check before integrating.
422
The request body failed validation, the operator could not process it (e.g. no subscriber for the number), or a Carrier-Billing amount exceeded the per-transaction cap.
502
The operator / aggregator returned an unexpected error. Phone numbers in error details are masked.

  • Network signals before you send — the task-level guide: gate an outbound campaign on SIM-swap + roaming, fuse risk:score into a login flow, replace an SMS OTP with Silent Auth, run KYC-match onboarding, check operator status before leaning on coverage, and when QoD matters.