---
name: verify-identity-with-network-apis
description: Use the Infobip CAMARA implementation to verify a phone number against the mobile network, check for a recent SIM swap, verify device location, and run a KYC match.
api: openapi/infobip-camara-openapi.json
operations:
- authorize-number-verify
- verify-number
- verify-number-v2
- sim-swap-check
- sim-swap-retrieve-date
- verify-device-location
- know-your-customer-match
provider: Infobip
generated: '2026-07-25'
method: generated
source: Grounded in operationIds verified in openapi/infobip-camara-openapi.json plus conventions/infobip-conventions.yml, errors/infobip-error-codes.yml and rate-limits/infobip-rate-limits.yml
title: Verify identity with CAMARA network APIs
---

# Verify identity with CAMARA network APIs

Use the Infobip CAMARA implementation to verify a phone number against the mobile network, check for a recent SIM swap, verify device location, and run a KYC match.

## Ground rules for every Infobip call

- Base URL: `https://api.infobip.com` (an account may also be issued a personalized `https://{subdomain}.api.infobip.com` host shown in the web portal — either works).
- Auth header: `Authorization: App {API_KEY}`. Basic auth is only for the API-key-management endpoints. Every endpoint additionally requires at least one API scope (see `scopes/infobip-scopes.yml`).
- There is **no idempotency key**. Never blind-retry a send on a timeout or 5xx — re-read the outcome with the reports/logs operation for the returned `bulkId`/`messageId` first (`conventions/infobip-conventions.yml`).
- On `429` back off exponentially and honour `Retry-After`. Per-operation limits are published in the spec as `x-throttling-info` and collected in `rate-limits/infobip-rate-limits.yml`.
- HTTP errors use the Infobip `requestError.serviceException {messageId, text, validationErrors}` envelope (not RFC 9457) — see `errors/infobip-problem-types.yml`.
- A `200` does **not** mean delivered. Message outcome lives in the `status {groupId, groupName, id, name}` and `error {groupId, groupName, id, name, permanent}` objects; resolve them against `errors/infobip-error-codes.yml`. `permanent: true` means a retry can never succeed.
- Listing endpoints page with `page`/`size` (max 100) and return `{page, size, totalPages, totalResults}`; newer endpoints support `cursor`/`useCursor`.

## Steps
These are CAMARA-conformant network APIs, so they follow CAMARA conventions rather than the classic Infobip ones: send the `x-correlator` header and expect it echoed back for tracing.

1. **Number verification (silent, network-based)** — `authorize-number-verify` (`GET /camara/number-verification/v0/authorize`) starts the device authorization over the mobile data connection, then `verify-number` (`POST /camara/number-verification/v0/verify`) confirms the number. The v2 surface (`verify-number-v2`, `create-dcql-request`, `get-device-phone-number`) is the SIM-based flow.
2. **SIM swap** — `sim-swap-check` (`POST /camara/sim-swap/v0/check`) answers "has this SIM changed within N hours"; `sim-swap-retrieve-date` (`POST /camara/sim-swap/v0/retrieve-date`) returns the actual last-swap timestamp. Run this **before** you trust an OTP delivered to that number.
3. **Device location** — `verify-device-location` (`POST /camara/location/v0/verify`) checks a device against a coordinate + radius; it verifies, it does not return a position.
4. **KYC match** — `know-your-customer-match` (`POST /camara/kyc-match/v0.3/match`) compares the identity attributes you hold against the operator's record and returns per-attribute match results.
5. **Coverage is per operator.** A negative or unavailable result is normal in markets where the operator does not expose the capability — treat "not supported" as a distinct branch from "does not match", and never fail the user closed on it alone.
