> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Telefonrisiko-API: Carrier- und Betrugssignale

> Telefonnummern ohne OTP mit Didit risikobewerten: Carrier, Leitungstyp, Portierung, Wegwerfnummern und Betrugssignale in einem Aufruf.

Verwenden Sie `POST /v3/phone/risk/`, wenn Sie Telefon-Intelligence vor, anstelle von oder außerhalb eines OTP-Ablaufs benötigen.

Der Endpoint sendet keinen Code an den Benutzer. Er erstellt eine API-Sitzung, reichert die Nummer an, wendet Ihre Phone-Risk-Regeln an und gibt in einer synchronen Antwort denselben normalisierten Telefonblock zurück, den auch die Telefonverifizierung verwendet.

Wenn die Anfrage gespeichert wird, kann Didit die bewertete Telefonnummer zusätzlich als aggregierte Evidenz in **Netzwerke** verwenden. Netzwerkgraphen können bei gemeinsam genutzten Telefonsignalen risikoreiche Telefon-Intelligence, Rufnummernportierung und Kontext zum Leitungstyp anzeigen. Sie zeigen anderen Organisationen jedoch nicht die Telefonnummer im Rohformat.

## Antwort interpretieren

* `status` ist die endgültige Entscheidung für diese API-Sitzung. Sie lautet normalerweise `Approved`; die Risikobewertung kann auch `In Review` oder `Declined` ergeben.
* `phone.full_number` ist die normalisierte Nummer im E.164-Format. `phone.phone_number_prefix` und `phone.phone_number` teilen sie in die internationale Vorwahl und die nationale Nummer auf.
* `phone.is_disposable` und `phone.is_virtual` sind stabile Ja-/Nein-Signale für Ihre Anwendungslogik. Die Carrier-Abfrage ergänzt `carrier.name` und `carrier.type` (`mobile`, `voip` und ähnliche Werte).
* `phone.phone_intelligence.score` verwendet eine Risikoskala von 0 bis 100, wobei ein höherer Wert ein höheres Risiko bedeutet. `phone_type_risk` (`Low`, `Medium`, `High`) und `phone_trust_index` (inverser Wert des Scores) sind abgeleitete Ansichten.
* `phone.phone_intelligence` und `phone.enrichment` sind Kompatibilitätsaliase mit demselben normalisierten Objekt. Neue Integrationen sollten `phone.enrichment` lesen.
* `phone.matches` listet andere Sitzungen Ihrer Anwendung auf, in denen dieselbe Nummer von einem anderen Benutzer verwendet wurde. Nutzen Sie das Feld zur Erkennung doppelter Konten.
* `request_id` ist die ID der API-Sitzung. Speichern Sie sie zusammen mit `vendor_data`, wenn Sie das Ergebnis mit späteren Webhooks oder Aktivitäten in der Console abgleichen müssen.

> [!WARNING]
>
> `phone.phone_intelligence` und `phone.enrichment` sind Felder, die nach Möglichkeit bereitgestellt werden. Eine abgeschlossene Abfrage kann beide auslassen, wenn für diese Nummer, dieses Land oder diesen Tarif keine verwertbaren Intelligence-Daten zurückgegeben werden. Bauen Sie Regeln zuerst auf den stabilen normalisierten Feldern auf und behandeln Sie fehlende Intelligence als „unbekannt“, nicht als „sicher“.

## Zusatzmodul Social Footprint

Setzen Sie `enable_social` auf `true`, damit der Antwort unter `phone` ein Block `phone_social` hinzugefügt wird. Er enthält die Online-Plattformen, auf denen diese Telefonnummer registriert ist, nach Kategorien gruppiert, mit den zusammenfassenden Zählwerten und allen Profildetails, die unsere Datenpartner zurückgeben.

* `phone.phone_social.profiles_registered` und `phone.phone_social.profiles_checked` sind die wichtigsten Kennzahlen: Plattformen, auf denen die Telefonnummer nachweislich registriert ist, bezogen auf die geprüften Plattformen.
* `phone.phone_social.registered_platforms` und `phone.phone_social.not_registered_platforms` listen jede Plattform mit ihrer `category` und ihrem `scope` auf (`global` oder `local` für regionsspezifische Plattformen).
* `phone.phone_social.categories` gibt pro Kategorie die Anzahl der Registrierungen und das Verhältnis an. `phone.phone_social.profiles` enthält Profildetails pro Plattform, sofern eine Plattform sie bereitstellt (Name, Foto-URL, Info-Text, Datenschutzstatus, Kennzeichen für Geschäftskonten).
* Zusammenfassende Indizes (`digital_footprint_diversity`, `digital_sophistication_index`, `engagement_depth_index`, `subscription_affordability_index`) sind zusammengesetzte Werte von 0 bis 10. Jeder Zählwert kann `null` sein, wenn die Prüfung dafür keine Daten geliefert hat.

`profiles_registered: 0` ist eine gültige Antwort und kein Fehler: Die Plattformen wurden geprüft, und die Telefonnummer wurde auf keiner davon gefunden. Das ist ein häufiges Signal für synthetische Identitäten. Dieser Endpoint leitet daraus allein keine Aktion ab. Verwenden Sie `phone_no_social_presence_action` in einem Workflow, um daraus eine Entscheidung zur Prüfung oder Ablehnung zu machen.

Der Block fehlt, wenn `enable_social` nicht gesetzt ist. Er fehlt auch, wenn die Social-Prüfung nicht abgeschlossen werden konnte. In diesem Fall wird sie nicht abgerechnet.

## Verhalten in der Sandbox

Sandbox-Schlüssel validieren die Anfrage und geben deterministische, genehmigte Daten zurück. Sie senden keinen OTP, verbrauchen keine Credits, erstellen keine Sitzung und tragen nicht zu Netzwerken bei. Wenn `enable_social` gesetzt ist, geben sie außerdem einen deterministischen Block `phone_social` zurück.

## Abrechnung

Aufrufe der Phone Risk API kosten \$0.04 zum Listenpreis. Das ist weniger als eine vollständige Telefonverifizierung, weil kein OTP gesendet wird. Eine Live-Anfrage ist abrechenbar, sobald die Abfrage startet, auch wenn einige Best-Effort-Felder nicht verfügbar sind.

Das Zusatzmodul Social Footprint wird separat abgerechnet: eine Einheit `phone_social` pro Anfrage zusätzlich zum Preis der Phone Risk API, sobald die Prüfung abgeschlossen ist. Die Credit-Prüfung vor der Abfrage umfasst beides.


## OpenAPI

````yaml de/openapi-25.json POST /v3/phone/risk/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/phone/risk/:
    post:
      tags:
        - Standalone APIs
      summary: Risiko-Score für eine Telefonnummer ermitteln
      description: >-
        Lösen Sie eine Telefonnummer auf und erhalten Sie Informationen zu
        Mobilfunkanbieter, Leitungstyp, Portierung, Wegwerfnummern,
        sitzungsübergreifendem Abgleich und normalisierten Signalen zur
        Risikoanalyse, ohne ein OTP zu senden. Der Endpoint erstellt eine
        API-Sitzung und gibt deren ID als `request_id` zurück.


        **Entscheidung.** Der `status` auf oberster Ebene spiegelt
        `phone.status` wider. Er ist normalerweise `Approved`; die
        Risikobewertung kann `In Review` oder `Declined` ergeben.


        **Kompatibilitäts-Aliase.** Live-Antworten stellen das normalisierte
        Informationsobjekt sowohl als `phone.phone_intelligence` als auch als
        `phone.enrichment` bereit. Die Werte sind identisch. Neue Integrationen
        können `phone.enrichment` auslesen. Beide Schlüssel fehlen, wenn keine
        nutzbaren Informationsdaten zurückgegeben wurden.


        **Abrechnung.** Live-Aufrufe nutzen die Preise der Phone Risk API. Die
        Anfrage ist abrechenbar, sobald die Abfrage beginnt, selbst wenn einige
        nach Möglichkeit ermittelte Felder nicht verfügbar sind.


        **Sandbox.** Sandbox-Schlüssel validieren die Anfrage und geben
        deterministische genehmigte Daten zurück, ohne ein OTP zu senden,
        Credits zu verbrauchen, eine Sitzung zu erstellen oder zu Networks
        beizutragen.


        **Authentifizierung.** Senden Sie den API-Schlüssel Ihrer Anwendung in
        `x-api-key`. Fehlende oder ungültige Anmeldedaten geben `403` zurück –
        diese API gibt niemals `401` zurück.


        **Rate-Limit.** Geteiltes Schreibkontingent von 300 Anfragen pro Minute
        pro API-Schlüssel über POST/PATCH/DELETE-Endpoints hinweg
        (Transaktionserstellungen und Ereigniserfassung haben ein separates
        Budget von 600).


        **Online-Präsenz.** Setzen Sie `enable_social` auf `true`, um einen
        `phone_social`-Block hinzuzufügen: die Online-Plattformen, auf denen
        diese Nummer registriert ist, mit Anzahlen pro Kategorie und allen
        verfügbaren Profildetails. `profiles_registered: 0` bedeutet, dass die
        Plattformen überprüft wurden und die Nummer auf keiner davon gefunden
        wurde – eine gültige, abrechenbare Antwort. Der Block fehlt, wenn das
        Add-on nicht angefordert wurde oder die Überprüfung nicht abgeschlossen
        werden konnte, und er wird in diesem Fall nicht abgerechnet. Die
        Abrechnung fügt zusätzlich zum Preis dieses Endpoints eine
        `phone_social`-Einheit pro Anfrage hinzu.
      operationId: post_v3phone_risk
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhoneRiskRequest'
            examples:
              Minimal:
                summary: Eine Nummer mit Standardwerten bewerten
                value:
                  phone_number: '+14155552671'
              Full context:
                summary: Score mit Signalen, Länderhinweis und Korrelations-IDs
                value:
                  phone_number: '+14155552671'
                  country_code: US
                  signals:
                    ip: 192.0.2.1
                    device_id: 8F0B8FDD-C2CB-4387-B20A-56E9B2E5A0D2
                    device_platform: ios
                    device_model: iPhone17,2
                    os_version: 18.0.1
                    app_version: 1.2.34
                    user_agent: >-
                      Mozilla/5.0 (iPhone; CPU iPhone OS 18_0_1 like Mac OS X)
                      AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0
                      Mobile/15E148 Safari/604.1
                  vendor_data: lead-123
                  metadata:
                    source: signup_prescreen
      responses:
        '200':
          description: >-
            Die Risikobewertung wurde abgeschlossen. Prüfen Sie `status` für die
            Entscheidung; HTTP ist bei abgeschlossenen Abfragen immer `200`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PhoneRiskResponse'
              examples:
                Clean mobile number:
                  summary: Bereinigte Mobilfunknummer mit Intelligence-Abdeckung
                  value:
                    request_id: 4fd09d2e-9bc9-4c4e-9c46-7f625ac0ab62
                    status: Approved
                    phone:
                      status: Approved
                      phone_number_prefix: '+1'
                      phone_number: '4155552671'
                      full_number: '+14155552671'
                      country_code: US
                      country_name: United States
                      carrier:
                        name: Example Mobile
                        type: mobile
                      is_disposable: false
                      is_virtual: false
                      verification_method: null
                      verification_attempts: 0
                      verified_at: null
                      warnings: []
                      lifecycle: []
                      matches: []
                      phone_intelligence:
                        score: 3
                        phone_type_risk: Low
                        phone_trust_index: 97
                        network_stability_index: 95
                        is_disposable: false
                        is_ported: false
                        is_recently_ported: false
                        carrier_type: mobile
                        reason_codes: []
                      enrichment:
                        score: 3
                        phone_type_risk: Low
                        phone_trust_index: 97
                        network_stability_index: 95
                        is_disposable: false
                        is_ported: false
                        is_recently_ported: false
                        carrier_type: mobile
                        reason_codes: []
                    vendor_data: lead-123
                    metadata:
                      source: signup_prescreen
                    created_at: '2026-09-01T10:30:00.123456+00:00'
                Number in review:
                  summary: Wegwerf- oder virtuelle Nummer zur Prüfung markiert
                  value:
                    request_id: 8c22e1f0-4b3d-4a3a-9d1e-2f6b7c8d9e0f
                    status: In Review
                    phone:
                      status: In Review
                      phone_number_prefix: '+44'
                      phone_number: '7700900123'
                      full_number: '+447700900123'
                      country_code: GB
                      country_name: United Kingdom
                      carrier:
                        name: Example VoIP
                        type: voip
                      is_disposable: true
                      is_virtual: true
                      verification_method: null
                      verification_attempts: 0
                      verified_at: null
                      warnings: []
                      lifecycle: []
                      matches: []
                      phone_intelligence:
                        score: 72
                        phone_type_risk: High
                        phone_trust_index: 28
                        network_stability_index: 40
                        is_disposable: true
                        is_ported: true
                        is_recently_ported: true
                        carrier_type: voip
                        reason_codes:
                          - code: IR-5AC67A32
                            direction: risk
                            message: Phone type identified as non-mobile
                            impact_level: medium
                      enrichment:
                        score: 72
                        phone_type_risk: High
                        phone_trust_index: 28
                        network_stability_index: 40
                        is_disposable: true
                        is_ported: true
                        is_recently_ported: true
                        carrier_type: voip
                        reason_codes:
                          - code: IR-5AC67A32
                            direction: risk
                            message: Phone type identified as non-mobile
                            impact_level: medium
                    vendor_data: lead-124
                    metadata: null
                    created_at: '2026-09-01T10:30:00.123456+00:00'
        '400':
          $ref: '#/components/responses/PhoneRiskValidationError'
        '403':
          $ref: '#/components/responses/RiskPermissionDenied'
        '429':
          $ref: '#/components/responses/RateLimitedWrite'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/phone/risk/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "phone_number": "+14155552671",
                "country_code": "US",
                "vendor_data": "lead-123",
                "metadata": {"source": "signup_prescreen"}
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.phone.assess_risk(
                phone_number="+14155552671",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.phone.assessRisk({
              phone_number: "+14155552671",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Phone.AssessRisk(ctx, didit.PhoneRiskRequest{\n\tPhoneNumber: \"+14155552671\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: |-
            import me.didit.Didit;
            import me.didit.types.PhoneRiskRequest;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            var result = client.phone().assessRisk(PhoneRiskRequest.builder()
                    .phoneNumber("+14155552671")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->phone->assessRisk([
                'phone_number' => '+14155552671',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.phone.assess_risk(phone_number: "+14155552671")
            puts result.to_h
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using System.Text.Json;
            using Didit;

            // Reads DIDIT_API_KEY.
            using var client = new DiditClient();

            var result = await client.Phone.AssessRiskAsync(new PhoneRiskRequest
            {
                PhoneNumber = "+14155552671",
            });
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    PhoneRiskRequest:
      type: object
      required:
        - phone_number
      properties:
        phone_number:
          type: string
          maxLength: 20
          description: >-
            Zu bewertende Telefonnummer. Sie wird validiert und auf E.164
            normalisiert.
          example: '+14155552671'
        country_code:
          type: string
          maxLength: 3
          description: >-
            Optionaler ISO 3166-1 alpha-2- oder alpha-3-Länderhinweis für die
            Informationsabdeckung.
          example: US
        signals:
          $ref: '#/components/schemas/RiskSignals'
        vendor_data:
          type: string
          description: >-
            Ihre stabile Referenz für diese Anfrage. Wird in der API-Sitzung
            gespeichert und in der Antwort zurückgegeben.
        metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Ihre nicht sensiblen JSON-Metadaten. Werden in der API-Sitzung
            gespeichert und in der Antwort zurückgegeben.
        enable_social:
          type: boolean
          default: false
          description: >-
            Wenn true, wird auch der digitale Fußabdruck der Nummer ermittelt –
            die Messaging-, Social-, E-Commerce- und Berufs-Plattformen, auf
            denen sie registriert ist. Wird als eine `phone_social`-Einheit pro
            Anfrage zusätzlich zum regulären Preis dieses Endpoints abgerechnet.
          example: true
    PhoneRiskResponse:
      type: object
      required:
        - request_id
        - status
        - created_at
      properties:
        request_id:
          type: string
          format: uuid
          description: >-
            ID der API-Sitzung, die für diese Anfrage erstellt wurde. Speichern
            Sie sie zusammen mit `vendor_data`, wenn Sie das Ergebnis mit
            späteren Webhooks oder Konsolenaktivitäten korrelieren müssen.
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            Endgültige Entscheidung für diese API-Sitzung. Normalerweise
            `Approved`; die Risikobewertung kann `In Review` oder `Declined`
            ergeben.
        vendor_data:
          type: string
          nullable: true
          description: >-
            Rückgabe der von Ihnen gesendeten `vendor_data`, `null`, wenn Sie
            keine gesendet haben.
        metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Rückgabe der von Ihnen gesendeten `metadata`, `null`, wenn Sie keine
            gesendet haben.
        created_at:
          type: string
          format: date-time
          description: Zeitstempel dieser Antwort.
        phone:
          type: object
          description: >-
            Normalisierter Telefonbericht, derselbe Block wie in den Antworten
            der Telefonverifizierung.
          required:
            - status
          properties:
            status:
              type: string
              enum:
                - Approved
                - In Review
                - Declined
              description: >-
                Entscheidung für diese Telefonnummer. Spiegelt den `status` auf
                oberster Ebene wider.
            phone_number_prefix:
              type: string
              description: Ländervorwahl mit vorangestelltem `+` (z. B. `+1`).
              example: '+1'
            phone_number:
              type: string
              description: Nationale Rufnummer ohne Ländervorwahl.
              example: '4155552671'
            full_number:
              type: string
              description: Vollständige Nummer im E.164-Format.
              example: '+14155552671'
            country_code:
              type: string
              nullable: true
              description: ISO 3166-1-Alpha-2-Land der Nummer.
              example: US
            country_name:
              type: string
              description: Vollständiger Ländername, abgeleitet aus `country_code`.
              example: United States
            carrier:
              type: object
              nullable: true
              description: >-
                Netzwerk, über das die Nummer aktuell betrieben wird. `null`,
                wenn die Abfrage keinen Netzbetreiber ermitteln konnte.
              properties:
                name:
                  type: string
                  description: >-
                    Name des Mobilfunkanbieters. Leere Zeichenkette, wenn die
                    Abfrage ihn nicht identifizieren konnte.
                type:
                  type: string
                  description: >-
                    Durch die Abfrage gemeldeter Leitungstyp: `mobile`,
                    `fixed_line`, `voip`, `isp`, `vpn`, `toll_free`,
                    `premium_rate` oder ähnlich.
            is_disposable:
              type: boolean
              description: >-
                `true`, wenn die Nummer zu einem temporären oder
                Burner-Nummern-Dienst gehört.
            is_virtual:
              type: boolean
              description: >-
                `true`, wenn der Leitungstyp virtuell ist (`voip`, `isp` oder
                `vpn`).
            verification_method:
              type: string
              nullable: true
              description: >-
                OTP-Kanal der zugrunde liegenden Verifizierung. `null` für
                Risikoabfragen, die niemals einen Code senden.
            verification_attempts:
              type: integer
              description: OTP-Sendevorgänge für diese Nummer. `0` für Risikoabfragen.
            verified_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Wann die Nummer zuletzt durch ein OTP verifiziert wurde. `null`
                für Risikoabfragen.
            warnings:
              type: array
              description: >-
                Für diese Anfrage erfasste Risikowarnungen. Leeres Array, wenn
                keine vorhanden sind.
              items:
                $ref: '#/components/schemas/RiskWarning'
            lifecycle:
              type: array
              description: >-
                Chronologischer Audit-Trail der Anfrage. Leeres Array für
                Risikoabfragen ohne Sendeereignisse.
              items:
                $ref: '#/components/schemas/RiskLifecycleEvent'
            matches:
              type: array
              description: >-
                Andere Sitzungen Ihrer Anwendung, bei denen dieselbe
                Telefonnummer von einem anderen Benutzer (anderes `vendor_data`)
                verwendet wurde. Bis zu 5 Einträge. Leeres Array, wenn keine
                Treffer vorliegen.
              items:
                $ref: '#/components/schemas/PhoneMatchItem'
            phone_intelligence:
              $ref: '#/components/schemas/PhoneIntelligence'
            enrichment:
              $ref: '#/components/schemas/PhoneIntelligence'
            phone_social:
              $ref: '#/components/schemas/PhoneSocialFootprint'
    RiskSignals:
      type: object
      description: >-
        Optionaler Geräte- und Netzwerkkontext, der von Ihrer Anwendung
        beobachtet wird. Alle Felder sind optional. Ihre Übergabe speist die
        sitzungsübergreifende Übereinstimmungserkennung in Networks.
      properties:
        ip:
          type: string
          format: ip
          description: Für den Endbenutzer ermittelte IPv4- oder IPv6-Adresse.
          example: 192.0.2.1
        device_id:
          type: string
          maxLength: 255
          description: >-
            Stabiler Geräteidentifikator, der von Ihrer Anwendung erfasst wurde
            (Android `ANDROID_ID`, iOS `identifierForVendor`).
        device_platform:
          type: string
          enum:
            - android
            - ios
            - ipados
            - tvos
            - web
          description: Plattform des Geräts des Endbenutzers.
        device_model:
          type: string
          maxLength: 255
          description: Von Ihrer Anwendung gemeldetes Gerätemodell.
        os_version:
          type: string
          maxLength: 64
          description: Betriebssystemversion.
        app_version:
          type: string
          maxLength: 64
          description: Version Ihrer Anwendung.
        user_agent:
          type: string
          maxLength: 512
          description: User-Agent des Browsers oder der App.
    RiskWarning:
      type: object
      required:
        - feature
        - risk
        - log_type
        - short_description
        - long_description
      properties:
        feature:
          type: string
          description: Funktion, die die Warnung erzeugt hat.
        risk:
          type: string
          description: >-
            Maschinenlesbarer Risiko-Code. Neue Werte können im Laufe der Zeit
            hinzugefügt werden.
        additional_data:
          type: object
          nullable: true
          additionalProperties: true
          description: Risikospezifischer Kontext oder `null`.
        log_type:
          type: string
          enum:
            - error
            - warning
            - information
          description: Schweregrad, der von den Entscheidungsregeln verwendet wird.
        short_description:
          type: string
          description: Für Menschen lesbare einzeilige Zusammenfassung.
        long_description:
          type: string
          description: Lesbare Erklärung.
    RiskLifecycleEvent:
      type: object
      required:
        - type
        - timestamp
        - details
        - fee
      properties:
        type:
          type: string
          description: >-
            Maschinenlesbarer Ereignistyp. Neue Werte können im Laufe der Zeit
            hinzugefügt werden.
        timestamp:
          type: string
          format: date-time
          description: Wann das Ereignis stattgefunden hat.
        details:
          type: object
          nullable: true
          additionalProperties: true
          description: Ereignisspezifische Payload oder `null`.
        fee:
          type: number
          description: Für dieses Ereignis abgerechneter USD-Betrag.
    PhoneMatchItem:
      type: object
      description: >-
        Eine andere Sitzung Ihrer Anwendung, die dieselbe Telefonnummer mit
        abweichenden `vendor_data` verwendet hat.
      properties:
        session_id:
          type: string
          format: uuid
          description: >-
            Sitzungs-ID der anderen Verifizierung, die diese Telefonnummer
            verwendet hat.
        session_number:
          type: integer
          description: Benutzerfreundliche fortlaufende Nummer dieser Sitzung.
        vendor_data:
          type: string
          nullable: true
          description: '`vendor_data` dieser Sitzung.'
        verification_date:
          type: string
          description: Wann diese Sitzung erstellt wurde (`YYYY-MM-DDTHH:MM:SSZ`).
        phone_number:
          type: string
          description: Die übereinstimmende Telefonnummer.
        status:
          type: string
          description: Status dieser Sitzung (z. B. `Approved`, `Declined`, `In Progress`).
        is_blocklisted:
          type: boolean
          description: >-
            Gibt an, ob die Telefonnummer auf der Sperrliste Ihrer Anwendung
            steht.
        api_service:
          type: string
          nullable: true
          description: >-
            Für Sitzungen vom API-Typ: die eigenständige API, die sie erstellt
            hat; `null` für reguläre Verifizierungssitzungen.
        source:
          type: string
          description: >-
            Wo die Übereinstimmung gefunden wurde. Normalerweise `session`; ein
            Sperrlisten-Treffer über einen Organisationslisteneintrag verwendet
            `list_entry`.
    PhoneIntelligence:
      type: object
      description: >-
        Normalisierter Telefon-Intelligence-Block. Nur vorhanden, wenn das
        Intelligence-Add-on für diese Abfrage ausgeführt wurde; falls vorhanden,
        wird er auch unter dem `enrichment`-Alias mit identischen Werten
        bereitgestellt.
      properties:
        score:
          type: number
          nullable: true
          description: Normalisierter Risiko-Score von 0–100. Höher ist riskanter.
        phone_type_risk:
          type: string
          nullable: true
          description: '`Low`, `Medium` oder `High`, abgeleitet aus dem Score.'
        phone_trust_index:
          type: number
          nullable: true
          description: Kehrwert des Werts, für Dashboards, die höhere Werte bevorzugen.
        network_stability_index:
          type: number
          nullable: true
          description: Stabilität des Leitungsnetzwerks.
        is_disposable:
          type: boolean
          nullable: true
          description: >-
            `true`, wenn die Nummer wie eine Wegwerf- oder virtuelle Nummer
            aussieht.
        is_ported:
          type: boolean
          nullable: true
          description: '`true`, wenn die Nummer den Mobilfunkanbieter gewechselt hat.'
        is_recently_ported:
          type: boolean
          nullable: true
          description: '`true`, wenn die Portierung kürzlich erfolgt ist.'
        carrier_type:
          type: string
          nullable: true
          description: >-
            Durch die Abfrage gemeldete Leitungsklassifizierung (z. B.
            `mobile`).
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  Stabiler Didit-Identifikator des Signals, zum Beispiel
                  `IR-5AC67A32`. Opak: danach gruppieren und filtern, nicht
                  parsen.
              value:
                nullable: true
                description: >-
                  Für ein Risiko-Flag (beispielsweise `voip`, `leaked`,
                  `disposable`, `spam_trap`): dessen Wert: ein boolescher Wert,
                  eine Stufe oder ein Datum. Null für einen bewerteten
                  Grundcode.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: >-
                  Gibt an, ob das Signal das Risiko erhöht oder das Vertrauen
                  gestärkt hat.
              message:
                type: string
                description: Lesbare Erklärung des Signals, auf Englisch.
              impact_level:
                type: string
                nullable: true
                description: >-
                  Wie stark das Signal den Score beeinflusst hat, zum Beispiel
                  `low`, `medium` oder `high`.
          description: >-
            Signale, die den Score erklären, jeweils mit einem stabilen
            Didit-Code, einer Richtung, einer Nachricht und einer
            Auswirkungsstufe. Im Laufe der Zeit können neue Codes hinzukommen;
            weisen Sie unbekannte Codes daher nicht ab.
    PhoneSocialFootprint:
      type: object
      nullable: true
      description: >-
        Social Footprint der Telefonnummer: die Online-Plattformen, auf denen
        sie registriert ist. Nur vorhanden, wenn `enable_social` gesetzt war und
        die Prüfung abgeschlossen wurde. Jeder Zähler kann null sein, wenn dafür
        keine Daten zurückgegeben wurden. `profiles_registered: 0` bedeutet,
        dass die Plattformen geprüft wurden und die Telefonnummer auf keiner
        davon gefunden wurde – eine gültige, abrechenbare Antwort und ein
        häufiges Signal für eine synthetische Identität.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: >-
            Plattformen, bei denen die Telefonnummer nachweislich registriert
            ist.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: Auf Registrierung geprüfte Plattformen.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: Plattformen, die einen zugehörigen Namen zurückgegeben haben.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: Plattformen, die ein Profilfoto zurückgegeben haben.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: Kommunikationsplattformen mit erkannter Präsenz.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: Unterschiedliche Plattformkategorien mit erkannter Präsenz.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: Zusammengesetzter Indikator für digitale Reife, 0-10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: Indikator für die Profilreichhaltigkeit, 0–10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: Mix aus kostenlosen vs. kostenpflichtigen Plattformen, 0-10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: Registrierungen auf kostenlosen Plattformen.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: Registrierungen auf rein kostenpflichtigen Plattformen.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: Registrierungen auf Freemium-Plattformen.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: >-
            Vollständigkeit des WhatsApp-Profils. Nur für Telefonnummern; null
            für E-Mail-Adressen.
          example: Partial
        registered_platforms:
          type: array
          description: Plattformen, bei denen eine Registrierung bestätigt ist.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: Geprüfte Plattformen mit negativem Ergebnis.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: Anzahl der Registrierungen und Verhältnis pro Plattformkategorie.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            Profildetails pro Plattform, geschlüsselt nach Plattform, sofern die
            Plattform diese bereitstellt.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    SocialFootprintPlatform:
      type: object
      properties:
        platform:
          type: string
          description: Plattform-Identifikator.
          example: whatsapp
        category:
          type: string
          description: >-
            Plattformkategorie, z. B. MESSAGING, SOCIAL_MEDIA, ECOMMERCE,
            PROFESSIONAL, EMAIL_PROVIDER.
          example: MESSAGING
        scope:
          type: string
          enum:
            - global
            - local
          description: >-
            `global` für weltweite Plattformen, `local` für regionsspezifische
            Plattformen.
          example: global
    SocialFootprintCategorySummary:
      type: object
      properties:
        registered:
          type: integer
          nullable: true
          description: >-
            Plattformen in dieser Kategorie, bei denen eine Registrierung
            bestätigt ist.
          example: 2
        ratio:
          type: number
          format: float
          nullable: true
          description: >-
            Anteil der geprüften Plattformen der Kategorie mit einer
            Registrierung, 0.0-1.0.
          example: 0.6667
    SocialFootprintProfile:
      type: object
      properties:
        name:
          type: string
          nullable: true
          description: Profilname, sofern die Plattform diesen bereitstellt.
        photo:
          type: string
          nullable: true
          description: Profilfoto-URL, sofern die Plattform diese bereitstellt.
        about:
          type: string
          nullable: true
          description: Profil-Info-/Bio-Text, sofern die Plattform diesen bereitstellt.
        privacy_status:
          type: string
          nullable: true
          enum:
            - PUBLIC
            - PRIVATE
            - null
          description: Profilsichtbarkeit, sofern die Plattform diese bereitstellt.
        business_account:
          type: boolean
          nullable: true
          description: >-
            Gibt an, ob das Profil ein Geschäftskonto ist, sofern die Plattform
            dies bereitstellt.
  responses:
    PhoneRiskValidationError:
      description: Validierung der Anfrage fehlgeschlagen.
      content:
        application/json:
          examples:
            Missing phone number:
              summary: Fehlende Telefonnummer
              value:
                phone_number:
                  - This field is required.
            Invalid phone number:
              summary: Ungültige Telefonnummer
              value:
                phone_number:
                  - Invalid phone number provided.
            Invalid signal IP:
              summary: Ungültige Signal-IP
              value:
                signals:
                  ip:
                    - Enter a valid IPv4 or IPv6 address.
    RiskPermissionDenied:
      description: >-
        Der API-Schlüssel fehlt oder ist ungültig, oder die Organisation kann
        die Live-Abfrage nicht abdecken. Diese API gibt niemals `401` zurück.
      content:
        application/json:
          examples:
            Missing or invalid API key:
              summary: >-
                Kein `x-api-key`-Header, oder der Schlüssel ist ungültig oder
                widerrufen
              value:
                detail: You do not have permission to perform this action.
            Not enough credits:
              summary: >-
                Das Guthaben der Organisation reicht für den Preis der Abfrage
                nicht aus
              value:
                error: You don't have enough credits to perform this request.
    RateLimitedWrite:
      description: >-
        Das geteilte Schreiblimit von 300 Anfragen pro Minute pro API-Schlüssel
        wurde überschritten. Beachten Sie `Retry-After`, bevor Sie es erneut
        versuchen.
      content:
        application/json:
          schema:
            type: object
            required:
              - detail
            properties:
              detail:
                type: string
          example:
            detail: >-
              Write request rate limit exceeded. You can make up to 300 requests
              per minute.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.