← Blog
Developer playbook · 16 menit baca · Published April 2026 · Author Serhat Dogan

Pusat Migrasi SMS-Activate 2026: Daftar Periksa Pengembang, Pemetaan API & Perbandingan Pengembalian Dana

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.

Mengapa playbook ini ada

Sebagian besar postingan "SMS-Activate sudah mati, berikut adalah daftar alternatif" melewatkan bagian yang sebenarnya membakar jam kerja pengembang: kode. Mendaftar ke penyedia baru memakan waktu lima menit. Menulis ulang integrasi yang telah berjalan dengan tenang di produksi selama bertahun-tahun, dengan kasus sudut yang tidak diuji dan pelacak biaya yang terpasang, membutuhkan waktu lebih lama dari yang Anda pikir.

Setelah kami mengirimkan lapisan kompatibilitas kami pada Januari 2026, kami mulai mendapatkan tiga pertanyaan yang sama dari setiap tim yang mencobanya:

  1. End-point mana yang dapat dipetakan dengan rapi dan mana yang memerlukan perubahan manual?
  2. Bagaimana cara saya menjaga pelacakan biaya dan aliran pengembalian dana saya bekerja tanpa penulisan ulang?
  3. Apa yang rusak secara diam-diam dan muncul seminggu kemudian sebagai kejutan penagihan?

Playbook ini menjawab ketiga pertanyaan tersebut secara berurutan dan memberikan kode copy-paste yang dapat Anda audit sebelum menjalankannya.

Ringkasan 48 jam: apa yang sebenarnya terjadi

SMS-Activate mati pada 29 Desember 2025. Tidak ada spanduk perawatan terjadwal, tidak ada alat migrasi, dan tidak ada pemberitahuan publik. Pengguna yang mencoba masuk hanya melihat halaman yang mengatakan layanan telah ditutup secara permanen. API mengembalikan reset koneksi pada setiap end-point dalam beberapa jam.

Tiga hal terjadi dengan cepat:

Dampaknya masih berlangsung. Per April 2026, ada kasus kecil-klaim aktif di Rusia dan setidaknya dua gugatan komunitas terkoordinasi yang mencoba memulihkan saldo yang dibekukan. Tidak ada yang membantu kode Anda, itulah sebabnya kami akan fokus pada bagian yang dapat Anda perbaiki.

Bagian 1: Peta deprekasi API

SMS-Activate mengirimkan satu end-point publik di https://sms-activate.org/stubs/handler_api.php. Setiap aksi adalah parameter string kueri pada URL itu. Tabel di bawah memetakan setiap aksi utama ke VerifySMS yang setara. Lapisan kompatibilitas di https://api.verifysms.app/compat/handler_api.php menerima bentuk string kueri yang sama persis.

Aksi SMS-ActivateTujuanLapisan kompatibilitas VerifySMSAPI VerifySMS asli
getBalanceKembalikan saldo USD sebagai teksBekerja tidak berubah. Mengembalikan ACCESS_BALANCE:X.YYGET /v1/balance mengembalikan JSON
getNumbersStatusKetersediaan per negaraBekerja. Mengembalikan format peta warisanGET /v1/countries/availability
getNumberSewakan nomor untuk layananBekerja. Mengembalikan ACCESS_NUMBER:id:+phonePOST /v1/rentals
setStatusKonfirmasi atau batalkan sewaBekerja. Kode status 1/3/6/8 berperilaku identikPOST /v1/rentals/{id}/status
getStatusPoll untuk kedatangan SMSBekerja. Mengembalikan STATUS_WAIT_CODE, STATUS_OK:CODE, STATUS_WAIT_RETRYGET /v1/rentals/{id}
getPricesAmbil tabel hargaBekerja. Mengembalikan harga VerifySMS dalam bentuk JSON warisanGET /v1/prices
getCountriesPeta kode negaraBekerja. Mengembalikan ID numerik warisan dan kode ISO-3166GET /v1/countries
getTopCountriesByServiceNegara teratas per layananMengembalikan data VerifySMS waktu nyata alih-alih peringkat SMS-Activate yang di-cacheGET /v1/services/{id}/top-countries

Beberapa aksi SMS-Activate yang kurang digunakan tidak memetakan satu ke satu. getRentServicesAndCountries dan API sewa jangka panjang adalah spesifik SMS-Activate dan tidak memiliki lapisan kompatibilitas. Jika integrasi Anda menggunakan itu, Anda harus pindah ke end-point sewa jangka panjang VerifySMS asli di POST /v1/rentals/long, yang didokumentasikan secara terpisah.

Bagian 2: Walkthrough migrasi kode

Cuplikan berikut adalah bentuk yang sama yang saya uji terhadap lingkungan pementasan kami sendiri pada Januari. Saya telah menyimpannya dengan sengaja membosankan sehingga Anda dapat membacanya terhadap kode Anda sendiri tanpa peralihan konteks.

Python (requests)

Perubahan yang diperlukan hanya URL dasar. Jika Anda sudah membungkus API dalam modul klien kecil, diff adalah satu baris.

import os
import requests

# SEBELUM
# BASE_URL = "https://sms-activate.org/stubs/handler_api.php"
# SESUDAH
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"respons tidak terduga: {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)
    # Tandai sebagai tidak digunakan sehingga kami mendapatkan pengembalian dana
    requests.get(BASE_URL, params={
        "api_key": API_KEY,
        "action": "setStatus",
        "status": 8,
        "id": rental_id,
    }, timeout=15)
    raise TimeoutError(f"tidak ada kode setelah {deadline_seconds}s")

Node.js (axios)

import axios from "axios";

// SEBELUM
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// SESUDAH
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(`respons tidak terduga: ${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(`tidak ada kode setelah ${deadlineMs}ms`);
}

PHP (curl)

<?php
// SEBELUM
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// SESUDAH
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("tidak terduga: $resp");
    }
    return ["id" => $id, "phone" => $phone];
}

Go (net/http)

package sms

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

// SEBELUM
// const baseURL = "https://sms-activate.org/stubs/handler_api.php"
// SESUDAH
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("tidak terduga: " + body)
    }
    return parts[1], parts[2], nil
}

Contoh Go sengaja ditulis tanpa klien pihak ketiga sehingga Anda dapat menempatkannya ke dalam layanan minimal tanpa menambahkan dependensi. Pola yang sama berlaku di setiap bahasa lain: tukar URL, pertahankan sisanya, dan biarkan penanganan kesalahan yang ada Anda ambil alih.

Bagian 3: Gotchas yang akan membakar Anda

Ini adalah tempat-tempat di mana lapisan kompatibilitas setia pada keanehan SMS-Activate tetapi keanehan itu sendiri akan mengejutkan Anda jika Anda tidak menyentuh kode ini dalam waktu lama.

ID negara bukan kode ISO

SMS-Activate menghitung negara dalam urutan mereka sendiri: Rusia adalah 0, AS adalah 187, Indonesia adalah 6, dan seterusnya. Jika integrasi Anda memiliki angka ajaib ini hardcode, mereka masih berfungsi pada lapisan kompatibilitas. Jika Anda menulis kode baru, lebih suka bentuk alpha-2 ISO-3166 (RU, US, ID) yang juga diterima oleh lapisan kompatibilitas. Jangan mencampur kedua gaya dalam satu situs panggilan, karena debugging masa depan akan menyakitkan.

Kode status 3 versus 6

Tindakan setStatus kode 3 berarti "minta SMS lain" di dunia SMS-Activate, dan kode 6 berarti "terima kode sebagai valid." Kode-kode ini mudah ditukar dalam keadaan darurat dan mereka memiliki hasil penagihan yang berlawanan: 3 membuat Anda dikenakan biaya, 6 mengonfirmasi verifikasi yang berhasil. Lapisan kompatibilitas berperilaku sama. Cari kode Anda untuk setStatus dan pastikan cabang yang mengambil kode 6 hanya berjalan setelah Anda yakin verifikasi berhasil.

Timeout dan pemutus sirkuit

SMS-Activate di bawah beban terkadang mengembalikan 200 dengan badan kosong alih-alih kesalahan HTTP. Klien defensif membungkus panggilan dalam batas waktu dan mengobati badan kosong sebagai sinyal coba ulang. VerifySMS tidak pernah mengembalikan badan kosong pada lapisan kompatibilitas. Jika klien Anda masih mengobati kosong sebagai coba ulang, itu akan membakar anggaran pada jaringan yang berfluktuasi karena coba ulang akan mengenai ID sewa yang berbeda. Pola yang lebih aman adalah memeriksa awalan respons yang diketahui (ACCESS_, STATUS_, BAD_) dan mengobati apa pun sebagai kegagalan keras, bukan transien.

Batas laju berpindah dari per-kunci ke per-IP

Batas laju SMS-Activate dikunci ke token API. Batas laju VerifySMS dikunci ke kombinasi token API dan alamat IP sumber, karena kami melihat banyak penyalahgunaan dari skrip scraper yang berbagi satu kunci di seluruh botnet. Untuk lalu lintas produksi normal dari satu server atau kumpulan yang seimbang, ini tidak terlihat. Jika Anda menjalankan pekerjaan CI terdistribusi yang semua berbagi kunci pementasan, Anda mungkin melihat 429 pertama kali armada semua memanas bersama. Solusinya adalah membiarkan canary berjalan dari satu node selama sehari sebelum menyebarnya.

Waktu pengembalian dana terasa instan karena sebenarnya instan

Ini bukan perangkap sebanyak kejutan yang menyenangkan. Di mana pengembalian dana SMS-Activate membutuhkan beberapa jam untuk muncul di saldo Anda, pengembalian dana VerifySMS muncul dalam 60 detik. Jika pelacak biaya Anda membaca saldo pada jadwal, itu akan mendaftar pengembalian dana sebagai kredit yang sistem lama akan melewatkan. Dasbor rekonsiliasi terkadang menandai ini sebagai anomali pada hari pertama.

Bagian 4: Pemeriksaan realitas perbandingan harga

Sebelum penutupan, SMS-Activate adalah batas pasar. Nomor Rusia berharga $0,03 hingga $0,05 per verifikasi, dan pembeli volume besar membayar lebih rendah. Batas itu sudah tidak ada lagi. Berikut adalah posisi penyedia yang tersisa pada April 2026 untuk layanan yang paling umum, diambil dari halaman harga publik masing-masing penyedia pada :

Layanan5simTextVerifiedSMSPVASMS-MANVerifySMS
WhatsApp / Rusia$0,014$0,05$0,035$0,10
WhatsApp / AS$0,27$0,25$0,28$0,22$0,18
Telegram / Rusia$0,016$0,05$0,04$0,10
Telegram / AS$0,35$0,40$0,38$0,30$0,20
Google / Indonesia$0,07$0,08$0,06$0,10

Pola ini sederhana: 5sim dan SMS-MAN menang pada harga Rusia yang sangat rendah, TextVerified adalah tingkat premium AS, dan VerifySMS berada di tengah dengan dasar $0,10 untuk semua kecuali nomor non-VoIP AS yang paling mahal. Jika anggaran Anda disesuaikan dengan harga dasar SMS-Activate, harapkan untuk membayar dua hingga lima kali lebih banyak per verifikasi tergantung pada pengganti yang Anda pilih.

Dua catatan tentang tabel ini. Pertama, setiap penyedia (termasuk VerifySMS) menaikkan dan menurunkan harga negara individu sebagai respons terhadap biaya operator, jadi konfirmasi harga saat ini di dasbor Anda sendiri sebelum melakukan anggaran. Kedua, harga efektif per verifikasi sukses tergantung pada rasio pengembalian dana. Penyedia dengan harga stiker $0,08 dan tingkat keberhasilan 70% biaya Anda lebih banyak per keberhasilan daripada penyedia $0,10 dengan pengembalian dana otomatis dan tingkat keberhasilan 90%.

Bagian 5: Daftar periksa migrasi 10 langkah

Ini adalah urutan sebenarnya yang kami jalankan untuk pengguna kami sendiri pada Januari. Ini menganggap pengembang tunggal dengan akses repo, satu layanan produksi, dan lingkungan pengujian. Skalakan persentase canary jika Anda menjalankan beberapa layanan atau monorepo.

  1. Inventori setiap situs panggilan. Jalankan git grep -n 'sms-activate\.org\|handler_api\.php\|getNumber\|setStatus' dan daftar setiap file yang mengenai API lama. Jika Anda menemukan lebih dari selusin, pilih modul wrapper dan sentralisasi panggilan terlebih dahulu sebelum bermigrasi.
  2. Dapatkan kunci API VerifySMS. Daftar, tambahkan sejumlah kecil saldo, dan hasilkan kunci yang dibatasi untuk pengujian. Simpan kunci produksi keluar dari repo.
  3. Ubah URL dasar. Ganti host SMS-Activate dengan api.verifysms.app/compat/handler_api.php. Jangan ubah string kueri. Komit ini sendiri sehingga diff bersih.
  4. Jalankan tes yang ada. Jika tes mengenai API nyata, arahkan mereka ke pengujian dan pantau untuk ketidakcocokan bentuk. Jika mereka memalsukan API, jalankan mereka terhadap titik akhir pengujian langsung juga sehingga Anda menangkap drift kontrak.
  5. Konfirmasi ID negara. Telusuri kode Anda untuk konstanta negara. Jika Anda menggunakan ID numerik lama, mereka masih berfungsi. Jika Anda memiliki kesempatan, ganti dengan kode ISO-3166 karena pengembang berikutnya yang menyentuh file ini akan berterima kasih.
  6. Pasang klaim pengembalian dana. Konfirmasi bahwa jalur waktu Anda memanggil setStatus dengan status=8. Tanpa ini, Anda masih akan mendapatkan pengembalian dana (kami secara otomatis mengembalikan sewa yang kedaluwarsa) tetapi pelacak biaya Anda akan tertunda kenyataan.
  7. Perbarui pelacak biaya Anda. Baca biaya dari header respons X-VerifySMS-Cost alih-alih menguraikannya dari tabel harga. Perubahan tunggal ini membuat dasbor keuangan Anda akurat hingga sentimeter.
  8. Pemantauan. Tambahkan tingkat keberhasilan, latensi p95, dan rasio pengembalian dana terhadap baseline yang ada. Pilih ambang yang dapat Anda pertahankan, bukan yang Anda pikir akan "baik".
  9. Canary 5 persen selama 24 jam. Alihkan sebagian kecil lalu lintas produksi melalui titik akhir baru. Pantau dasbor, bukan hanya peringatan.
  10. Potong sisanya. Setelah jendela canary bersih, pindahkan 95 persen sisanya dan tinggalkan kode klien lama yang dikomentari (tidak dihapus) untuk satu siklus rilis sehingga Anda memiliki rollback cepat.

Hapus kode lama dalam rilis berikutnya setelah itu. Jangan tinggalkan situs panggilan mati selama lebih dari seminggu karena orang berikutnya yang menyentuh modul akan menempelkannya kembali ke integrasi baru secara tidak sengaja.

Pertanyaan yang sering diajukan

Apakah lapisan kompatibilitas SMS-Activate adalah API nyata atau hanya stub?

Ini adalah titik akhir nyata di api.verifysms.app/compat/handler_api.php yang menerima setiap tindakan utama dari dokumentasi publik SMS-Activate: getBalance, getNumber, getStatus, setStatus, getPrices, dan getCountries. Permintaan di-proxy ke API asli kami di bawah kap, sehingga Anda mendapatkan harga VerifySMS, cakupan, dan perilaku pengembalian dana tanpa perubahan kode di sisi Anda.

Akankah kunci API lama saya berfungsi?

Tidak. Kunci API SMS-Activate berhenti autentikasi hari layanan ditutup. Anda memerlukan kunci baru dari VerifySMS. Daftar, tambahkan sejumlah kecil saldo, dan hasilkan kunci dari dasbor. Format kunci identik dalam panjang sehingga Anda dapat menempelkannya ke variabel lingkungan yang sama.

Bagaimana pengembalian dana bekerja dibandingkan dengan SMS-Activate?

SMS-Activate mengharuskan Anda memanggil setStatus dengan kode status 8 dalam 20 menit untuk menandai nomor sebagai tidak digunakan, dan pengembalian dana diproses secara manual dalam beberapa jam. VerifySMS menerima panggilan setStatus yang sama dan mengembalikan dana penuh ke saldo Anda dalam 60 detik. Jika Anda lupa memanggil setStatus sama sekali, sistem kami masih secara otomatis mengembalikan dana untuk nomor yang tidak pernah menerima SMS setelah jendela sewa kedaluwarsa.

Negara mana yang didukung?

VerifySMS mencakup lebih dari 200 negara. Setiap negara yang ditawarkan SMS-Activate tersedia di VerifySMS, termasuk Rusia, Indonesia, Vietnam, Nigeria, dan AS. Anda dapat mempertahankan pemetaan ID negara yang ada atau bermigrasi ke kode ISO-3166 alpha-2 kapan saja.

Apakah harga yang sama?

Tidak. Harga dasar pasar SMS-Activate $0,03 hingga $0,05 per verifikasi untuk nomor Rusia sudah tidak ada di pasar terbuka. Harga pasar saat ini berkisar dari $0,10 untuk layanan umum hingga $0,25 untuk nomor non-VoIP AS pada platform yang lebih ketat. VerifySMS mengenakan biaya $0,10 sebagai dasar dan menerbitkan harga per-negara di dasbor.

Apakah saya perlu mengubah logika polling saya?

Tidak. Panggilan getStatus mengembalikan STATUS_WAIT_CODE dan STATUS_OK dalam format yang sama seperti SMS-Activate. Interval polling 3 hingga 5 detik masih berfungsi. Satu-satunya perilaku baru adalah VerifySMS juga mengekspos URL webhook di dasbor, sehingga Anda dapat menghentikan polling sepenuhnya jika Anda lebih suka aliran yang didorong oleh peristiwa.

Apa yang terjadi jika lapisan kompatibilitas pernah ditinggalkan?

Lapisan kompatibilitas dianggap sebagai antarmuka publik permanen. Jika kami pernah mengubah perilakunya, kami akan menerbitkan jendela deprecasi minimal enam bulan dengan catatan migrasi penuh. API JSON VerifySMS asli juga didokumentasikan, sehingga Anda dapat bermigrasi dari lapisan kompatibilitas pada kecepatan Anda sendiri kapan saja masuk akal.

Bagaimana saya menguji tanpa menghabiskan uang?

Dasbor VerifySMS mengekspos mode sandbox yang mengembalikan nomor telepon yang disimulasikan dan kode SMS kalengan tanpa mengurangi saldo Anda. Flip flag sandbox di dasbor atau kirim header X-Sandbox-Mode dengan permintaan apa pun untuk melatih jalur kode Anda sebelum berjalan.

Apakah saya dapat bermigrasi dari layanan lain juga?

Ya. Buku pedoman ini ditulis di sekitar API SMS-Activate karena itulah tempat sebagian besar kode yang terdampar hidup, tetapi daftar periksa yang sama berlaku untuk migrasi dari 5sim, SMS-MAN, atau layanan lain yang kompatibel dengan handler_api. Lapisan kompatibilitas mengenali parameter handler_api.php terlepas dari layanan mana yang Anda panggil sebelumnya.

Berapa lama migrasi nyata yang dibutuhkan?

Untuk integrasi layanan tunggal dengan beberapa lusin situs panggilan, rencanakan dua hingga empat jam kerja fokus, ditambah jendela canary 24 jam sebelum Anda memotong lalu lintas penuh. Migrasi multi-layanan yang lebih besar dengan penanganan kesalahan khusus, analitik, dan pengulangan dapat berjalan lebih lama tetapi biasanya selesai dalam satu hari kerja.

Apakah saya kehilangan data historis?

Riwayat verifikasi SMS-Activate pergi offline ketika layanan ditutup dan tidak dapat dipulihkan. VerifySMS mempertahankan log audit penuh dari setiap upaya verifikasi pada akun Anda selama 12 bulan, dapat diakses dari dasbor dan melalui ekstensi /compat/handler_api.php?action=getHistory.

Apakah ini mempengaruhi postur GDPR atau kepatuhan saya?

VerifySMS terdaftar di Inggris dan mengikuti UK GDPR. Kami menerbitkan kebijakan retensi data, sub-prosesor, dan DPA di halaman privasi. Jika pengaturan sebelumnya Anda memerlukan DPA dengan SMS-Activate, hubungi kami dan kami akan menandatangani perjanjian yang sama dalam satu hari kerja.

Langkah berikutnya

Jika Anda telah membaca sejauh ini, Anda sudah memiliki potongan yang diperlukan. Mulai dengan langkah inventori, dapatkan URL dasar yang ditukar di depan rekan kerja untuk ditinjau, dan jalankan canary semalaman. Buku pedoman ini kecil dengan sengaja; bagian yang sulit adalah disiplin untuk berhenti setelah jendela canary alih-alih memotong semuanya dalam satu komit.

Baca terkait di situs lainnya:

Siap memotong migrasi menjadi satu malam?

Buat kunci API VerifySMS →

Mode sandbox termasuk · Garansi pengembalian dana otomatis · 200+ negara · Lapisan kompatibilitas SMS-Activate di /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