oneapi
Autentificare
Telecom v1 / Telecom

Analiză număr de telefon

Tipul (mobil, fix, non-geografic, scurt), operatorul care a primit blocul la alocare şi dacă numărul se află
într-un bloc alocat de ANCOM. POST, fiindcă numărul e dată a clientului: într-un GET ar ajunge în logurile de
acces, în istoricul browserului şi în referrer.

POST
https://oneapi.ro/api/telecom/v1/analizeaza

Corpul cererii

Se trimite ca JSON, în corpul cererii (Content-Type: application/json) — nu în şirul de interogare.

NumeTipDescriereValori acceptate
numarobligatoriu text Minim 3, maxim 32. max 32 car.
Mobil Corpul cererii
{
    "numar": "0721234567"
}
Fix, cu prefix internațional Corpul cererii
{
    "numar": "+40 264 405 300"
}
Număr inventat Corpul cererii
{
    "numar": "0312345678"
}

Parametri de interogare

Ruta nu acceptă parametri de interogare.

Cum se comportă

  • Corpul cererii are un singur câmp, numar (text, 3–32 caractere, obligatoriu): numărul de analizat. Câmpurile de corp nu apar în tabelul de parametri — acela documentează doar query string-ul — de aceea sunt descrise aici.
  • Metoda e POST pentru că numărul e dată a clientului: într-un GET ar ajunge în logurile de acces, în istoricul browserului și în header-ul Referer. Numărul analizat nu se scrie nicăieri — nici în loguri, nici în bază.
  • Nu confunda alocarea cu operatorul curent. ANCOM publică cine a primit blocul la alocare, nu cine deține numărul azi. Un număr portat rămâne în blocul operatorului inițial. De aceea răspunsul are operator_alocare (ce știm) separat de operator_curent, care e întotdeauna null — nu există sursă publică de portabilitate în România. Câmpul e acolo tocmai ca să fie explicit că nu știm.
  • Acceptă orice formă uzuală: 0721234567, +40721234567, 0040 721 234 567, 0721-234-567. Separatorii se ignoră.
  • Se validează și numerele scurte (1910, 0264 990, 116000) — sunt ~17% din blocurile alocate. Ele n-au 9 cifre, deci nu există regulă de format care să le confirme: sunt declarate valide numai dacă figurează efectiv într-un bloc alocat. Un număr scurt neregăsit primește valid: false cu motivul numar_scurt_nealocat.
  • Un număr de 9 cifre cu format corect rămâne valid: true chiar dacă blocul nu e alocat — distincția utilă e bloc_alocat, nu valid.

La ce folosește

  • Validarea numărului de telefon la înregistrare sau la checkout: respingi numerele care nu se află în niciun bloc alocat de ANCOM, adică nu pot exista.
  • Rutarea unui mesaj sau apel: afli dacă numărul e mobil, fix sau non-geografic înainte să alegi canalul (SMS n-are sens pe un fix).
  • Fraud scoring: un număr cu format corect dar bloc nealocat e un semnal puternic de date inventate într-un formular.
  • Normalizarea unei baze de contacte la o formă unică (E.164) pornind de la orice formă în care a fost introdusă.

Structura răspunsului

Toate câmpurile de mai jos sunt în data.

CâmpTipDescriere
valid boolean Numărul e o formă recunoscută. La numerele scurte, validitatea se decide prin alocare.
motiv string Doar când valid e false: format_nerecunoscut sau numar_scurt_nealocat.
introdus string Exact ce ai trimis, ca să poți corela răspunsurile într-un lot.
format.e164 string Forma internațională (+40…). Lipsește la numerele scurte — ele nu se formează din străinătate.
format.national string Forma națională, cu 0 inițial.
format.fara_prefix string Cifrele semnificative, fără 0 și fără prefix de țară.
tip string mobil | fix | nongeografic | scurt | necunoscut. Vine din blocul alocat; fără bloc, e o deducție după prima cifră.
bloc_alocat boolean Numărul cade într-un bloc alocat de ANCOM. false = cel mai probabil numărul nu există.
operator_alocare string Titularul de licență care a primit blocul, cu numele exact din registrul ANCOM.
operator_curent null Întotdeauna null: portabilitatea nu e publicată. Prezent explicit, ca să nu fie citit ca omisiune.
bloc object Intervalul alocat în care cade numărul: domeniul, primul și ultimul număr, dimensiunea.
bloc.domeniu string Domeniul de numerotație din care face parte blocul (ex. 721, 264).
bloc.primul string Primul număr din bloc.
bloc.ultimul string Ultimul număr din bloc.
bloc.dimensiune integer Câte numere conține blocul.
observatie string Avertismentul aplicabil rezultatului (portabilitate sau bloc nealocat).
sursa object Sursa alocărilor: ANCOM, „Resurse de numerotație", cu data importului.
sursa.ancom string Setul de date folosit („Resurse de numerotație").
sursa.actualizat string Când a fost importată ultima dată alocarea.

Exemple de răspuns

body: {"numar": "0721234567"}

POSThttps://oneapi.ro/api/telecom/v1/analizeaza
{
    "data": {
        "valid": true,
        "introdus": "0721234567",
        "format": {
            "e164": "+40721234567",
            "national": "0721234567",
            "fara_prefix": "721234567"
        },
        "tip": "mobil",
        "bloc_alocat": true,
        "operator_alocare": "VODAFONE ROMANIA S.A.",
        "bloc": {
            "domeniu": "72",
            "primul": "721000000",
            "ultimul": "721999999",
            "dimensiune": 1000000
        },
        "observatie": "Operatorul e cel care a primit blocul la alocare. Dacă numărul a fost portat, deținătorul actual poate fi altul — ANCOM nu publică portabilitatea.",
        "sursa": {
            "ancom": "Resurse de numerotație",
            "actualizat": "2026-10-02 11: 46: 30"
        }
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
422validareLipsește numar, e gol sau depășește 32 de caractere. Câmpul vinovat e în detalii.
429cota_depasitaCota lunară a planului a fost depăşită (vezi Retry-After).

Toate erorile au aceeași formă. eroare.cod e stabil și e cel după care trebuie să ramifici în cod — nu după textul din mesaj, care se poate schimba.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "Lipsește numar, e gol sau depășește 32 de caractere. Câmpul vinovat e în detalii."
    }
}