← Blog
Developer playbook · 16 Min. Lesezeit · Published April 2026 · Author Serhat Dogan

SMS-Activate-Migrationszentrum 2026: Entwickler-Checkliste, API-Mapping & Rückerstattungsvergleich

SMS-Activate-Migrationszentrum 2026: Entwickler-Checkliste, API-Mapping & Rückerstattungsvergleich

If you are still carrying handler_api.php calls in your repo pointed at sms-activate.org, this is the hub you open at 9pm on a Friday and close with a working integration before midnight. Real endpoint mapping, real code diffs, refund policy comparison, and the gotchas that will bite you between the line you change and the alert that wakes you up on Monday morning.

Warum dieses Playbook existiert

Die meisten Beiträge vom Typ "SMS-Activate ist tot, hier ist eine Liste von Alternativen" verpassen den Teil, der tatsächlich Entwicklerstunden kostet: den Code. Die Anmeldung bei einem neuen Anbieter dauert fünf Minuten. Die Neufassung einer Integration, die seit Jahren unauffällig in der Produktion läuft, mit ungetesteten Eckfällen und einem Kosten-Tracker, dauert länger, als Sie denken.

Nachdem wir im Januar 2026 unsere Kompatibilitätsschicht veröffentlicht hatten, begannen wir, von jedem Team, das sie ausprobierte, dieselben drei Fragen zu hören:

  1. Welche Endpunkte lassen sich sauber zuordnen und welche erfordern manuelle Änderungen?
  2. Wie kann ich meine Kostenverfolgung und meinen Rückerstattungsfluss ohne Neufassung am Laufen halten?
  3. Was bricht lautlos und taucht eine Woche später als unerwartete Rechnung auf?

Dieses Playbook beantwortet diese drei Fragen der Reihe nach und liefert Ihnen Code zum Kopieren und Einfügen, den Sie vor der Ausführung prüfen können.

Der 48-Stunden-Rückblick: Was tatsächlich passiert ist

SMS-Activate wurde am 29. Dezember 2025 abgeschaltet. Es gab kein Banner für geplante Wartungsarbeiten, kein Migrationstool und keine öffentliche Mitteilung. Benutzer, die sich anmelden wollten, landeten auf einer einzelnen Seite, auf der stand, dass der Dienst dauerhaft geschlossen wurde. Die API gab innerhalb weniger Stunden Verbindungsabbrüche für jeden Endpunkt zurück.

Drei Dinge passierten schnell:

Die Folgen spielen sich immer noch ab. Im April 2026 gibt es aktive Klagen in Kleinverfahren in Russland und mindestens zwei koordinierte Sammelklagen, die versuchen, eingefrorene Guthaben zurückzufordern. Nichts davon hilft Ihrem Code, weshalb wir uns auf den Teil konzentrieren werden, den Sie tatsächlich beheben können.

Teil 1: API-Deprecations-Karte

SMS-Activate bot einen einzigen öffentlichen Endpunkt unter https://sms-activate.org/stubs/handler_api.php an. Jede Aktion war ein Query-String-Parameter auf dieser URL. Die folgende Tabelle ordnet jede Hauptaktion ihrer VerifySMS-Entsprechung zu. Die Kompatibilitätsschicht unter https://api.verifysms.app/compat/handler_api.php akzeptiert exakt dieselbe Query-String-Form.

SMS-Activate AktionZweckVerifySMS KompatibilitätsschichtNative VerifySMS API
getBalanceUSD-Guthaben als Text zurückgebenFunktioniert unverändert. Gibt ACCESS_BALANCE:X.YY zurückGET /v1/balance gibt JSON zurück
getNumbersStatusVerfügbarkeit pro LandFunktioniert. Gibt das Legacy-Kartenformat zurückGET /v1/countries/availability
getNumberEine Nummer für einen Dienst mietenFunktioniert. Gibt ACCESS_NUMBER:id:+phone zurückPOST /v1/rentals
setStatusEine Miete bestätigen oder stornierenFunktioniert. Statuscodes 1/3/6/8 verhalten sich identischPOST /v1/rentals/{id}/status
getStatusAuf SMS-Ankunft wartenFunktioniert. Gibt STATUS_WAIT_CODE, STATUS_OK:CODE, STATUS_WAIT_RETRY zurückGET /v1/rentals/{id}
getPricesPreistabelle abrufenFunktioniert. Gibt die VerifySMS-Preise im Legacy-JSON-Format zurückGET /v1/prices
getCountriesLänderkode-ZuordnungFunktioniert. Gibt sowohl Legacy-numerische IDs als auch ISO-3166-Codes zurückGET /v1/countries
getTopCountriesByServiceTop-Länder pro DienstGibt Echtzeit-VerifySMS-Daten anstelle von zwischengespeicherten SMS-Activate-Rängen zurückGET /v1/services/{id}/top-countries

Eine Handvoll weniger genutzter SMS-Activate-Aktionen lässt sich nicht eins zu eins zuordnen. getRentServicesAndCountries und die API für Langzeitmieten waren spezifisch für SMS-Activate und haben keine Kompatibilitätsschicht. Wenn Ihre Integration diese verwendet hat, sollten Sie zum nativen Langzeitmiet-Endpunkt von VerifySMS unter POST /v1/rentals/long wechseln, der separat dokumentiert ist.

Teil 2: Code-Migrations-Walkthroughs

Die folgenden Snippets haben genau die Form, die ich im Januar gegen unsere eigene Staging-Umgebung getestet habe. Ich habe sie bewusst einfach gehalten, damit Sie sie ohne Kontextwechsel gegen Ihren eigenen Code lesen können.

Python (requests)

Die einzige erforderliche Änderung ist die Basis-URL. Wenn Sie die API bereits in ein kleines Client-Modul eingepackt haben, ist der Unterschied eine einzelne Zeile.

import os
import requests

# VORHER
# BASE_URL = "https://sms-activate.org/stubs/handler_api.php"
# NACHHER
BASE_URL = "https://api.verifysms.app/compat/handler_api.php"
API_KEY = os.environ["SMS_API_KEY"]

def get_number(service: str, country: int) -> tuple[str, str]:
    resp = requests.get(BASE_URL, params={
        "api_key": API_KEY,
        "action": "getNumber",
        "service": service,
        "country": country,
    }, timeout=30)
    resp.raise_for_status()
    # ACCESS_NUMBER:12345:+441234567890
    status, rental_id, phone = resp.text.split(":", 2)
    if status != "ACCESS_NUMBER":
        raise RuntimeError(f"unerwartete Antwort: {resp.text}")
    return rental_id, phone

def wait_for_code(rental_id: str, deadline_seconds: int = 180) -> str:
    import time
    start = time.monotonic()
    while time.monotonic() - start < deadline_seconds:
        resp = requests.get(BASE_URL, params={
            "api_key": API_KEY,
            "action": "getStatus",
            "id": rental_id,
        }, timeout=15).text
        if resp.startswith("STATUS_OK:"):
            return resp.split(":", 1)[1]
        time.sleep(4)
    # Als ungenutzt markieren, damit wir die Rückerstattung erhalten
    requests.get(BASE_URL, params={
        "api_key": API_KEY,
        "action": "setStatus",
        "status": 8,
        "id": rental_id,
    }, timeout=15)
    raise TimeoutError(f"kein Code nach {deadline_seconds}s")

Node.js (axios)

import axios from "axios";

// VORHER
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// NACHHER
const BASE_URL = "https://api.verifysms.app/compat/handler_api.php";
const API_KEY = process.env.SMS_API_KEY;

export async function getNumber(service, country) {
  const { data } = await axios.get(BASE_URL, {
    params: { api_key: API_KEY, action: "getNumber", service, country },
    timeout: 30_000,
  });
  const [status, rentalId, phone] = data.split(":");
  if (status !== "ACCESS_NUMBER") {
    throw new Error(`unerwartete Antwort: ${data}`);
  }
  return { rentalId, phone };
}

export async function waitForCode(rentalId, deadlineMs = 180_000) {
  const start = Date.now();
  while (Date.now() - start < deadlineMs) {
    const { data } = await axios.get(BASE_URL, {
      params: { api_key: API_KEY, action: "getStatus", id: rentalId },
      timeout: 15_000,
    });
    if (data.startsWith("STATUS_OK:")) return data.split(":")[1];
    await new Promise((r) => setTimeout(r, 4000));
  }
  await axios.get(BASE_URL, {
    params: { api_key: API_KEY, action: "setStatus", status: 8, id: rentalId },
    timeout: 15_000,
  });
  throw new Error(`kein Code nach ${deadlineMs}ms`);
}

PHP (curl)

<?php
// VORHER
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// NACHHER
const BASE_URL = "https://api.verifysms.app/compat/handler_api.php";

function sms_call(array $params): string {
    $params["api_key"] = getenv("SMS_API_KEY");
    $url = BASE_URL . "?" . http_build_query($params);
    $ch  = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    $body = curl_exec($ch);
    curl_close($ch);
    return $body;
}

function get_number(string $service, int $country): array {
    $resp = sms_call(["action" => "getNumber", "service" => $service, "country" => $country]);
    [$status, $id, $phone] = explode(":", $resp, 3);
    if ($status !== "ACCESS_NUMBER") {
        throw new RuntimeException("unerwartet: $resp");
    }
    return ["id" => $id, "phone" => $phone];
}

Go (net/http)

package sms

import (
    "errors"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "strings"
    "time"
)

// VORHER
// const baseURL = "https://sms-activate.org/stubs/handler_api.php"
// NACHHER
const baseURL = "https://api.verifysms.app/compat/handler_api.php"

func call(params url.Values) (string, error) {
    params.Set("api_key", os.Getenv("SMS_API_KEY"))
    req, _ := http.NewRequest("GET", baseURL+"?"+params.Encode(), nil)
    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    return string(body), nil
}

func GetNumber(service string, country int) (id, phone string, err error) {
    body, err := call(url.Values{
        "action":  {"getNumber"},
        "service": {service},
        "country": {fmt.Sprint(country)},
    })
    if err != nil {
        return "", "", err
    }
    parts := strings.SplitN(body, ":", 3)
    if len(parts) != 3 || parts[0] != "ACCESS_NUMBER" {
        return "", "", errors.New("unerwartet: " + body)
    }
    return parts[1], parts[2], nil
}

Das Go-Beispiel ist bewusst ohne externe Clients geschrieben, damit Sie es in einen minimalen Dienst integrieren können, ohne Abhängigkeiten hinzuzufügen. Das gleiche Muster gilt für jede andere Sprache: Tauschen Sie die URL aus, behalten Sie den Rest bei und lassen Sie Ihre bestehende Fehlerbehandlung übernehmen.

Teil 3: Stolpersteine, die Sie ausbrennen werden

Dies sind die Stellen, an denen die Kompatibilitätsschicht den Eigenheiten von SMS-Activate treu bleibt, die Eigenheiten selbst Sie jedoch überraschen werden, wenn Sie diesen Code eine Weile nicht angerührt haben.

Länder-IDs sind keine ISO-Codes

SMS-Activate nummerierte Länder in seiner eigenen Reihenfolge: Russland war 0, USA war 187, Indonesien war 6 und so weiter. Wenn Ihre Integration diese magischen Zahlen fest kodiert hat, funktionieren sie auf der Kompatibilitätsschicht immer noch. Wenn Sie neuen Code schreiben, bevorzugen Sie die ISO-3166 Alpha-2-Form (RU, US, ID), die die Kompatibilitätsschicht ebenfalls akzeptiert. Mischen Sie nicht beide Stile an derselben Aufrufstelle, da zukünftiges Debugging schmerzhaft sein wird.

Statuscode 3 vs. 6

Der setStatus-Aktionscode 3 bedeutete in der Welt von SMS-Activate "eine weitere SMS anfordern", und Code 6 bedeutete "den Code als gültig akzeptieren". Diese beiden Codes können in Eile vertauscht werden und haben entgegengesetzte Abrechnungsergebnisse: 3 hält Sie in Rechnung, 6 bestätigt die erfolgreiche Verifizierung. Die Kompatibilitätsschicht verhält sich genauso. Durchsuchen Sie Ihren Code nach setStatus und stellen Sie sicher, dass der Zweig, der Code 6 annimmt, nur ausgeführt wird, nachdem Sie sicher sind, dass die Verifizierung erfolgreich war.

Timeouts und Schutzschalter

SMS-Activate gab unter Last manchmal einen 200er mit leerem Body zurück, anstatt eines HTTP-Fehlers. Defensive Clients umschließen den Aufruf mit einem Timeout und behandeln den leeren Body als Wiederholungssignal. VerifySMS gibt auf der Kompatibilitätsschicht niemals einen leeren Body zurück. Wenn Ihr Client leere Werte immer noch als Wiederholung behandelt, verbrennt er Budget für ein fehlerhaftes Netzwerk, da die Wiederholung eine andere Miet-ID treffen wird. Das sicherere Muster ist, nach den bekannten Antwortpräfixen (ACCESS_, STATUS_, BAD_) zu suchen und alles andere als harten Fehler zu behandeln, nicht als transienten.

Ratenbegrenzungen verschieben sich von pro Schlüssel zu pro IP

Die Ratenbegrenzungen von SMS-Activate waren an das API-Token gebunden. Die Ratenbegrenzungen von VerifySMS sind an die Kombination aus API-Token und Quell-IP-Adresse gebunden, da wir viel Missbrauch durch Scraper-Skripte sehen, die einen Schlüssel über ein Botnetz teilen. Für normalen Produktionsverkehr von einem einzelnen Server oder einem Lastverteilerpool ist dies unsichtbar. Wenn Sie verteilte CI-Jobs ausführen, die alle einen Staging-Schlüssel gemeinsam nutzen, sehen Sie möglicherweise ein 429 beim ersten Mal, wenn die gesamte Flotte gleichzeitig hochfährt. Die Lösung besteht darin, den Canary 24 Stunden lang von einem Knoten aus laufen zu lassen, bevor Sie ihn verteilen.

Timeouts und Schutzschalter

SMS-Activate gab unter Last manchmal einen 200er mit leerem Body zurück, anstatt eines HTTP-Fehlers. Defensive Clients umschließen den Aufruf mit einem Timeout und behandeln den leeren Body als Wiederholungssignal. VerifySMS gibt auf der Kompatibilitätsschicht niemals einen leeren Body zurück. Wenn Ihr Client leere Werte immer noch als Wiederholung behandelt, verbrennt er Budget für ein fehlerhaftes Netzwerk, da die Wiederholung eine andere Miet-ID treffen wird. Das sicherere Muster ist, nach den bekannten Antwortpräfixen (ACCESS_, STATUS_, BAD_) zu suchen und alles andere als harten Fehler zu behandeln, nicht als transienten.

Ratenbegrenzungen verschieben sich von pro Schlüssel zu pro IP

Die Ratenbegrenzungen von SMS-Activate waren an das API-Token gebunden. Die Ratenbegrenzungen von VerifySMS sind an die Kombination aus API-Token und Quell-IP-Adresse gebunden, da wir viel Missbrauch durch Scraper-Skripte sehen, die einen Schlüssel über ein Botnetz teilen. Für normalen Produktionsverkehr von einem einzelnen Server oder einem Lastverteilerpool ist dies unsichtbar. Wenn Sie verteilte CI-Jobs ausführen, die alle einen Staging-Schlüssel gemeinsam nutzen, sehen Sie möglicherweise ein 429 beim ersten Mal, wenn die gesamte Flotte gleichzeitig hochfährt. Die Lösung besteht darin, den Canary 24 Stunden lang von einem Knoten aus laufen zu lassen, bevor Sie ihn verteilen.

Rückerstattungszeitpunkte fühlen sich sofort an, weil sie tatsächlich sofort sind

Das ist weniger eine Falle als eine angenehme Überraschung. Während SMS-Activate-Rückerstattungen einige Stunden dauerten, um auf Ihrem Guthaben zu erscheinen, erscheinen VerifySMS-Rückerstattungen innerhalb von 60 Sekunden. Wenn Ihr Kosten-Tracker das Guthaben nach einem Zeitplan liest, registriert er die Rückerstattung als Gutschrift, die das alte System übersehen hätte. Abgleich-Dashboards kennzeichnen dies manchmal am ersten Tag als Anomalie.

Teil 4: Preisvergleichs-Realitätscheck

Vor der Abschaltung war SMS-Activate der Boden des Marktes. Russische Nummern kosteten 0,03 bis 0,05 US-Dollar pro Verifizierung, und Großabnehmer zahlten noch weniger. Dieser Boden ist weg. Hier sind die verbleibenden Anbieter im April 2026 für die gängigsten Dienste, entnommen von der öffentlichen Preisseite jedes Anbieters am :

Dienst5simTextVerifiedSMSPVASMS-MANVerifySMS
WhatsApp / Russland$0.014$0.05$0.035$0.10
WhatsApp / USA$0.27$0.25$0.28$0.22$0.18
Telegram / Russland$0.016$0.05$0.04$0.10
Telegram / USA$0.35$0.40$0.38$0.30$0.20
Google / Indonesien$0.07$0.08$0.06$0.10

Das Muster ist einfach: 5sim und SMS-MAN gewinnen bei den Tiefstpreisen für russische Nummern, TextVerified ist die Premium-Klasse für die USA, und VerifySMS liegt dazwischen mit einem pauschalen Basissatz von 0,10 US-Dollar für alles außer den teuersten US-Nicht-VoIP-Nummern. Wenn Ihr Budget auf die Tiefstpreise von SMS-Activate abgestimmt war, rechnen Sie damit, pro Verifizierung zwei- bis Fünfmal mehr zu bezahlen, unabhängig davon, welchen Ersatz Sie wählen.

Zwei Anmerkungen zu dieser Tabelle. Erstens erhöhen und senken alle Anbieter (einschließlich VerifySMS) die Preise für einzelne Länder als Reaktion auf die Kosten der Netzbetreiber. Bestätigen Sie daher den aktuellen Preis in Ihrem eigenen Dashboard, bevor Sie ein Budget festlegen. Zweitens hängt der *effektive* Preis pro erfolgreicher Verifizierung vom Rückerstattungsverhältnis ab. Ein Anbieter mit einem Listenpreis von 0,08 US-Dollar und einer Erfolgsquote von 70 % kostet Sie pro Erfolg mehr als ein Anbieter für 0,10 US-Dollar mit automatischen Rückerstattungen und einer Erfolgsquote von 90 %.

Teil 5: Die 10-Schritte-Migrations-Checkliste

Dies ist die tatsächliche Reihenfolge, die wir unseren eigenen Benutzern im Januar durchlaufen ließen. Sie geht von einem einzelnen Entwickler mit Repository-Zugriff, einem Produktionsdienst und einer Staging-Umgebung aus. Skalieren Sie die Canary-Prozentsätze hoch, wenn Sie mehrere Dienste oder ein Monorepo betreiben.

  1. Bestandsaufnahme jedes Aufruforts. Führen Sie git grep -n 'sms-activate\.org\|handler_api\.php\|getNumber\|setStatus' aus und listen Sie jede Datei auf, die auf die alte API zugreift. Wenn Sie mehr als ein Dutzend finden, wählen Sie ein Wrapper-Modul und zentralisieren Sie die Aufrufe zuerst, bevor Sie migrieren.
  2. Holen Sie sich einen VerifySMS API-Schlüssel. Melden Sie sich an, fügen Sie ein kleines Guthaben hinzu und generieren Sie einen berechtigten Schlüssel für Staging. Halten Sie den Produktionsschlüssel aus dem Repository fern.
  3. Ändern Sie die Basis-URL. Ersetzen Sie den SMS-Activate-Host durch api.verifysms.app/compat/handler_api.php. Ändern Sie die Query-String nicht. Committen Sie dies allein, damit der Diff sauber ist.
  4. Führen Sie Ihre bestehenden Tests aus. Wenn die Tests auf die echte API zugreifen, richten Sie sie auf Staging aus und achten Sie auf Formatanpassungen. Wenn sie die API mocken, führen Sie sie auch gegen den Live-Staging-Endpunkt aus, um Vertragsabweichungen zu erkennen.
  5. Bestätigen Sie die Länder-IDs erneut. Überfliegen Sie Ihren Code auf Länderkonstanten. Wenn Sie die Legacy-numerischen IDs verwenden, funktionieren sie immer noch. Wenn Sie die Möglichkeit haben, ersetzen Sie sie durch ISO-3166-Codes, da der nächste Entwickler, der diese Datei bearbeitet, Ihnen dankbar sein wird.
  6. Schließen Sie die Rückerstattungsansprüche an. Bestätigen Sie, dass Ihr Timeout-Pfad setStatus mit status=8 aufruft. Ohne dies erhalten Sie immer noch Rückerstattungen (wir erstatten abgelaufene Mieten automatisch), aber Ihr Kosten-Tracker wird der Realität hinterherhinken.
  7. Aktualisieren Sie Ihren Kosten-Tracker. Lesen Sie die Kosten aus dem Antwortheader X-VerifySMS-Cost, anstatt sie aus der Preistabelle zu parsen. Diese eine Änderung macht Ihr Finanz-Dashboard bis auf den Cent genau.
  8. Überwachung. Fügen Sie Warnungen für Erfolgsquote, p95-Latenz und Rückerstattungsquote gegen Ihre bestehende Basislinie hinzu. Wählen Sie Schwellenwerte, die Sie verteidigen können, nicht solche, von denen Sie denken, dass sie "in Ordnung" sein werden.
  9. Canary 5 Prozent für 24 Stunden. Leiten Sie einen kleinen Teil des Produktionsverkehrs über den neuen Endpunkt. Beobachten Sie das Dashboard, nicht nur die Warnungen.
  10. Schalten Sie den Rest um. Sobald das Canary-Fenster sauber ist, schalten Sie die restlichen 95 Prozent um und lassen Sie den alten Client-Code auskommentiert (nicht gelöscht) für einen Release-Zyklus, damit Sie ein schnelles Rollback haben.

Löschen Sie den alten Code im nächsten Release danach. Lassen Sie keine toten Aufrufstellen länger als eine Woche herumliegen, da die nächste Person, die das Modul bearbeitet, sie versehentlich wieder in eine neue Integration einfügen wird.

Häufig gestellte Fragen

Ist die SMS-Activate-Kompatibilitätsschicht eine echte API oder nur ein Stub?

Es ist ein echter Endpunkt unter api.verifysms.app/compat/handler_api.php, der jede Hauptaktion aus den öffentlichen SMS-Activate-Dokumenten akzeptiert: getBalance, getNumber, getStatus, setStatus, getPrices und getCountries. Anfragen werden im Hintergrund an unsere native API weitergeleitet, sodass Sie VerifySMS-Preise, Abdeckung und Rückerstattungsverhalten ohne Codeänderungen auf Ihrer Seite erhalten.

Funktioniert mein alter API-Schlüssel noch?

Nein. SMS-Activate API-Schlüssel authentifizierten am Tag der Abschaltung des Dienstes nicht mehr. Sie benötigen einen neuen Schlüssel von VerifySMS. Melden Sie sich an, fügen Sie ein kleines Guthaben hinzu und generieren Sie einen Schlüssel aus dem Dashboard. Das Schlüsselformat ist in der Länge identisch, sodass Sie ihn in dieselbe Umgebungsvariable einfügen können.

Wie funktionieren Rückerstattungen im Vergleich zu SMS-Activate?

SMS-Activate erforderte, dass Sie setStatus mit dem Statuscode 8 innerhalb von 20 Minuten aufrufen, um eine Nummer als ungenutzt zu markieren, und Rückerstattungen wurden manuell innerhalb weniger Stunden bearbeitet. VerifySMS akzeptiert denselben setStatus-Aufruf und erstattet den vollen Betrag innerhalb von 60 Sekunden auf Ihr Guthaben zurück. Wenn Sie vergessen, setStatus überhaupt aufzurufen, erstattet unser System automatisch jede Nummer, die nach Ablauf des Mietzeitraums nie eine SMS erhalten hat.

Welche Länder werden unterstützt?

VerifySMS deckt über 200 Länder ab. Jedes Land, das SMS-Activate angeboten hat, ist auf VerifySMS verfügbar, einschließlich Russland, Indonesien, Vietnam, Nigeria und den USA. Sie können Ihre bestehende Länder-ID-Zuordnung beibehalten oder jederzeit auf ISO-3166 Alpha-2-Codes umsteigen.

Sind die Preise gleich?

Nein. Die Tiefstpreise von SMS-Activate von 0,03 bis 0,05 US-Dollar pro Verifizierung für russische Nummern sind vom freien Markt verschwunden. Die aktuellen Marktpreise reichen von 0,10 US-Dollar für gängige Dienste bis zu 0,25 US-Dollar für US-Nicht-VoIP-Nummern auf strengeren Plattformen. VerifySMS berechnet 0,10 US-Dollar als Basis und veröffentlicht die Preise pro Land im Dashboard.

Muss ich meine Abfragelogik ändern?

Nein. Der getStatus-Aufruf gibt STATUS_WAIT_CODE und STATUS_OK im selben Format zurück, das SMS-Activate verwendet hat. Abfrageintervalle von 3 bis 5 Sekunden funktionieren immer noch. Das einzige neue Verhalten ist, dass VerifySMS auch eine Webhook-URL im Dashboard anbietet, sodass Sie das Abfragen vollständig einstellen können, wenn Sie einen ereignisgesteuerten Fluss bevorzugen.

Was passiert, wenn die Kompatibilitätsschicht irgendwann veraltet ist?

Die Kompatibilitätsschicht gilt als dauerhafte öffentliche Schnittstelle. Wenn wir ihr Verhalten jemals ändern, veröffentlichen wir ein Mindestdeprecationsfenster von sechs Monaten mit einer vollständigen Migrationsnotiz. Die native VerifySMS JSON-API ist ebenfalls dokumentiert, sodass Sie die Kompatibilitätsschicht in Ihrem eigenen Tempo migrieren können, wann immer es sinnvoll ist.

Wie kann ich testen, ohne Geld auszugeben?

Das VerifySMS-Dashboard bietet einen Sandbox-Modus, der simulierte Telefonnummern und vordefinierte SMS-Codes zurückgibt, ohne Ihr Guthaben zu belasten. Aktivieren Sie die Sandbox-Flagge im Dashboard oder senden Sie den Header X-Sandbox-Mode mit jeder Anfrage, um Ihre Code-Pfade vor dem Livegang zu testen.

Kann ich auch von anderen Diensten migrieren?

Ja. Dieses Playbook ist auf die SMS-Activate-API zugeschnitten, da dort die meiste gestrandete Code liegt, aber dieselbe Checkliste gilt für Migrationen von 5sim, SMS-MAN oder jedem anderen handler_api-kompatiblen Dienst. Die Kompatibilitätsschicht erkennt handler_api.php-Parameter unabhängig davon, welchen Dienst Sie zuvor aufgerufen haben.

Wie lange dauert eine echte Migration?

Für eine einzelne Service-Integration mit einigen Dutzend Aufrufstellen planen Sie zwei bis vier Stunden konzentrierter Arbeit ein, plus ein 24-stündiges Canary-Fenster, bevor Sie den gesamten Verkehr umleiten. Größere Multi-Service-Migrationen mit benutzerdefinierter Fehlerbehandlung, Analysen und Wiederholungsversuchen können länger dauern, aber normalerweise innerhalb eines Arbeitstages abgeschlossen werden.

Verliere ich meine historischen Daten?

Die Verlaufsdaten von SMS-Activate-Verifizierungen gingen offline, als der Dienst abgeschaltet wurde, und sind nicht wiederherstellbar. VerifySMS führt ein vollständiges Audit-Protokoll jeder Verifizierungsanfrage für Ihr Konto für 12 Monate, zugänglich über das Dashboard und über die Erweiterung /compat/handler_api.php?action=getHistory.

Beeinflusst dies meine GDPR- oder Compliance-Haltung?

VerifySMS ist im Vereinigten Königreich registriert und folgt der britischen DSGVO. Wir veröffentlichen unsere Datenaufbewahrungsrichtlinie, Unterverarbeiter und die DPA auf der Datenschutzseite. Wenn Ihre frühere Einrichtung eine DPA mit SMS-Activate erforderte, kontaktieren Sie uns und wir werden dieselbe Vereinbarung innerhalb eines Geschäftstages gegenzeichnen.

Nächste Schritte

Wenn Sie bis hierher gelesen haben, haben Sie bereits die notwendigen Teile. Beginnen Sie mit dem Inventurschritt, lassen Sie den Basis-URL-Austausch von einem Teammitglied überprüfen und führen Sie das Canary über Nacht aus. Das Playbook ist bewusst klein gehalten; der schwierige Teil ist die Disziplin, nach dem Canary-Fenster aufzuhören, anstatt alles in einem Commit umzustellen.

Verwandte Lektüre auf dem Rest der Website:

Bereit, die Migration auf einen einzigen Abend zu verkürzen?

Erstellen Sie einen VerifySMS API-Schlüssel →

Sandbox-Modus inklusive · Garantie für automatische Rückerstattung · 200+ Länder · SMS-Activate Kompatibilitätsschicht unter /compat/handler_api.php

Next steps

If you have read this far, you already have the pieces you need. Start with the inventory step, get the base URL swap in front of a teammate for review, and run the canary overnight. The playbook is small on purpose; the hard part is the discipline to stop after the canary window instead of cutting everything over in one commit.

Related reading on the rest of the site:

Ready to cut the migration to a single evening?

Create a VerifySMS API key →

Sandbox mode included · Auto-refund guarantee · 200+ countries · SMS-Activate compat layer on /compat/handler_api.php