← Blog
Developer playbook · 16 분 소요 · Published 4월 2026 · Author Serhat Dogan

SMS-Activate 마이그레이션 허브 2026: 개발자 체크리스트, API 매핑 및 환불 비교

SMS-Activate 마이그레이션 허브 2026: 개발자 체크리스트, API 매핑 및 환불 비교

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.

이 플레이북이 존재하는 이유

대부분의 "SMS-Activate는 끝났고, 여기 대안 목록이 있습니다"라는 게시물은 개발자의 시간을 소모하는 실제 부분, 즉 코드를 놓치고 있습니다. 새 공급업체에 가입하는 데는 5분이 걸립니다. 테스트되지 않은 예외 사례와 비용 추적기가 연결된 상태로 수년간 조용히 운영되어 온 통합을 다시 작성하는 데는 생각보다 더 많은 시간이 걸립니다.

2026년 1월 호환성 레이어를 출시한 후, 이를 시도한 모든 팀으로부터 동일한 세 가지 질문을 받기 시작했습니다.

  1. 어떤 엔드포인트가 깔끔하게 매핑되고 어떤 엔드포인트에 수동 변경이 필요한가요?
  2. 다시 작성하지 않고 비용 추적 및 환불 흐름을 어떻게 유지할 수 있나요?
  3. 일주일 후에 청구서 깜짝 놀라게 할 만한 문제가 조용히 발생하는 것은 무엇인가요?

이 플레이북은 이 세 가지 질문에 순서대로 답변하고, 실행 전에 감사할 수 있는 복사-붙여넣기 코드를 제공합니다.

48시간 요약: 실제로 무슨 일이 일어났는가

SMS-Activate는 2025년 12월 29일에 서비스를 중단했습니다. 예정된 유지보수 배너, 마이그레이션 도구 또는 공개 공지가 없었습니다. 로그인하려는 사용자는 서비스가 영구적으로 종료되었다는 단일 페이지에 접속했습니다. API는 몇 시간 내에 모든 엔드포인트에서 연결 재설정을 반환했습니다.

세 가지 일이 빠르게 일어났습니다:

결과는 아직 진행 중입니다. 2026년 4월 현재 러시아에서 활발한 소액 청구 소송이 진행 중이며, 동결된 잔액을 복구하려는 커뮤니티 공동 소송이 최소 두 건 있습니다. 이 중 어느 것도 귀하의 코드에 도움이 되지 않으므로, 실제로 수정할 수 있는 부분에 집중하겠습니다.

파트 1: API 사용 중단 맵

SMS-Activate는 https://sms-activate.org/stubs/handler_api.php에 단일 공개 엔드포인트를 제공했습니다. 모든 작업은 해당 URL의 쿼리 문자열 매개변수였습니다. 아래 표는 모든 주요 작업을 VerifySMS에 해당하는 작업과 매핑합니다. https://api.verifysms.app/compat/handler_api.php의 호환성 레이어는 정확히 동일한 쿼리 문자열 모양을 수락합니다.

SMS-Activate 작업목적VerifySMS 호환 레이어기본 VerifySMS API
getBalanceUSD 잔액을 텍스트로 반환변경 없이 작동합니다. ACCESS_BALANCE:X.YY를 반환합니다.GET /v1/balance는 JSON을 반환합니다.
getNumbersStatus국가별 가용성작동합니다. 레거시 맵 형식을 반환합니다.GET /v1/countries/availability
getNumber서비스에 대한 번호 임대작동합니다. ACCESS_NUMBER:id:+phone을 반환합니다.POST /v1/rentals
setStatus임대 확인 또는 취소작동합니다. 상태 코드 1/3/6/8은 동일하게 작동합니다.POST /v1/rentals/{id}/status
getStatusSMS 도착 확인작동합니다. STATUS_WAIT_CODE, STATUS_OK:CODE, STATUS_WAIT_RETRY를 반환합니다.GET /v1/rentals/{id}
getPrices가격표 가져오기작동합니다. 레거시 JSON 모양으로 VerifySMS 가격을 반환합니다.GET /v1/prices
getCountries국가 코드 맵작동합니다. 레거시 숫자 ID와 ISO-3166 코드를 모두 반환합니다.GET /v1/countries
getTopCountriesByService서비스별 상위 국가캐시된 SMS-Activate 순위 대신 실시간 VerifySMS 데이터를 반환합니다.GET /v1/services/{id}/top-countries

덜 사용되는 몇 가지 SMS-Activate 작업은 일대일로 매핑되지 않습니다. getRentServicesAndCountries 및 장기 임대 API는 SMS-Activate 전용이었으며 호환 레이어가 없습니다. 통합에서 이를 사용했다면, 별도로 문서화된 VerifySMS의 기본 장기 임대 엔드포인트인 POST /v1/rentals/long으로 이동해야 합니다.

파트 2: 코드 마이그레이션 워크스루

다음 스니펫은 1월에 자체 스테이징 환경에서 테스트한 정확한 모양입니다. 컨텍스트 전환 없이 자신의 코드와 비교하여 읽을 수 있도록 의도적으로 단순하게 유지했습니다.

Python (requests)

유일하게 필요한 변경 사항은 기본 URL입니다. API를 작은 클라이언트 모듈로 이미 래핑했다면, diff는 한 줄입니다.

import os
import requests

# 이전
# BASE_URL = "https://sms-activate.org/stubs/handler_api.php"
# 이후
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"unexpected response: {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)
    # 환불을 받기 위해 사용되지 않음으로 표시
    requests.get(BASE_URL, params={
        "api_key": API_KEY,
        "action": "setStatus",
        "status": 8,
        "id": rental_id,
    }, timeout=15)
    raise TimeoutError(f"no code after {deadline_seconds}s")

Node.js (axios)

import axios from "axios";

// 이전
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// 이후
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(`unexpected response: ${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(`no code after ${deadlineMs}ms`);
}

PHP (curl)

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

Go (net/http)

package sms

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

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

Go 예제는 타사 클라이언트 없이 의도적으로 작성되어 최소한의 서비스에 종속성을 추가하지 않고 통합할 수 있습니다. 다른 모든 언어에서도 동일한 패턴이 적용됩니다. URL을 교체하고 나머지는 그대로 유지하며 기존 오류 처리를 상속받도록 하세요.

파트 3: 함정에 빠질 만한 부분

이곳은 호환성 레이어가 SMS-Activate의 특이점을 충실히 따르지만, 이 코드를 오랫동안 만지지 않았다면 그 특이점 자체가 놀라게 할 만한 부분입니다.

국가 ID는 ISO 코드가 아닙니다

SMS-Activate는 자체 순서대로 국가에 번호를 매겼습니다. 러시아는 0, 미국은 187, 인도네시아는 6 등이었습니다. 통합에 이러한 매직 넘버가 하드코딩되어 있다면 호환성 레이어에서도 여전히 작동합니다. 새 코드를 작성하는 경우 ISO-3166 알파-2 형식(RU, US, ID)을 선호하세요. 호환성 레이어도 이를 수락합니다. 두 스타일을 같은 호출 지점에서 혼합하지 마세요. 향후 디버깅이 어려울 수 있습니다.

상태 코드 3 대 6

setStatus 작업 코드 3은 SMS-Activate 세계에서 "다른 SMS 요청"을 의미했고, 코드 6은 "코드를 유효한 것으로 수락"을 의미했습니다. 이 두 코드는 서두를 때 쉽게 바꿀 수 있으며, 청구 결과가 반대입니다. 3은 계속 청구되고, 6은 성공적인 인증을 확인합니다. 호환성 레이어도 동일하게 작동합니다. 코드에서 setStatus를 검색하고 코드 6을 받는 분기가 인증이 성공했다고 확신한 후에만 실행되는지 확인하세요.

타임아웃 및 회로 차단기

SMS-Activate는 부하 시 HTTP 오류 대신 빈 본문을 가진 200을 반환하기도 했습니다. 방어적인 클라이언트는 호출을 타임아웃으로 감싸고 빈 본문을 재시도 신호로 처리합니다. VerifySMS는 호환성 레이어에서 빈 본문을 반환하지 않습니다. 클라이언트가 여전히 빈 것을 재시도로 취급하면, 재시도가 다른 임대 ID에 도달하기 때문에 불안정한 네트워크에서 예산을 소모하게 됩니다. 더 안전한 패턴은 알려진 응답 접두사(ACCESS_, STATUS_, BAD_)를 확인하고 다른 모든 것을 일시적인 실패가 아닌 영구적인 실패로 취급하는 것입니다.

속도 제한이 키당에서 IP당으로 이동

SMS-Activate 속도 제한은 API 토큰에 따라 키가 지정되었습니다. VerifySMS 속도 제한은 API 토큰과 소스 IP 주소의 조합에 따라 키가 지정됩니다. 이는 하나의 키를 봇넷 전체에서 공유하는 스크래퍼 스크립트의 많은 남용을 보기 때문입니다. 단일 서버 또는 로드 밸런싱된 풀에서 정상적인 프로덕션 트래픽의 경우 이는 눈에 띄지 않습니다. 하나의 스테이징 키를 공유하는 분산 CI 작업을 실행하는 경우, 플릿이 모두 함께 워밍업될 때 처음으로 429 오류가 발생할 수 있습니다. 해결 방법은 플릿을 확장하기 전에 하루 동안 카나리를 한 노드에서 실행하도록 하는 것입니다.

환불 타이밍은 실제로 즉시이므로 즉시 느껴집니다

이것은 함정이라기보다는 즐거운 놀라움입니다. SMS-Activate 환불이 잔액에 표시되는 데 몇 시간이 걸렸던 반면, VerifySMS 환불은 60초 이내에 나타납니다. 비용 추적기가 일정에 따라 잔액을 읽는 경우, 이전 시스템이 놓쳤을 크레딧으로 환불을 등록할 것입니다. 조정 대시보드에서 첫날에 이를 이상으로 표시하는 경우가 있습니다.

파트 4: 가격 비교 현실 점검

차단 전에 SMS-Activate는 시장의 바닥이었습니다. 러시아 번호는 인증당 0.03달러에서 0.05달러였고, 대량 구매자는 더 적은 비용을 지불했습니다. 그 바닥은 사라졌습니다. 2026년 4월 현재 가장 일반적인 서비스에 대한 나머지 공급업체의 위치는 다음과 같습니다. 각 공급업체의 공개 가격 페이지에서 가져왔습니다. 2026년 4월 7일:

서비스5simTextVerifiedSMSPVASMS-MANVerifySMS
WhatsApp / 러시아$0.014$0.05$0.035$0.10
WhatsApp / 미국$0.27$0.25$0.28$0.22$0.18
Telegram / 러시아$0.016$0.05$0.04$0.10
Telegram / 미국$0.35$0.40$0.38$0.30$0.20
Google / 인도네시아$0.07$0.08$0.06$0.10

패턴은 간단합니다. 5sim과 SMS-MAN은 최저가 러시아 가격에서 승리하고, TextVerified는 미국 프리미엄 등급이며, VerifySMS는 가장 비싼 미국 비 VoIP 번호를 제외한 모든 것에 대해 0.10달러의 고정 기본 가격으로 중간에 위치합니다. 예산이 SMS-Activate의 최저 가격에 맞춰져 있었다면, 어떤 대체제를 선택하든 인증당 2~5배 더 많은 비용을 지불할 것으로 예상하세요.

이 표에 대한 두 가지 참고 사항이 있습니다. 첫째, 모든 공급업체(VerifySMS 포함)는 통신사 비용에 대응하여 개별 국가 가격을 올리고 내리므로, 예산을 확정하기 전에 대시보드에서 현재 가격을 확인하세요. 둘째, 성공적인 인증당 실질 가격은 환불 비율에 따라 달라집니다. 스티커 가격이 0.08달러이고 성공률이 70%인 공급업체는 자동 환불과 90% 성공률을 가진 0.10달러 공급업체보다 성공당 더 많은 비용이 듭니다.

파트 5: 10단계 마이그레이션 체크리스트

이것은 1월에 자체 사용자들을 안내했던 실제 순서입니다. 리포지토리 액세스 권한이 있는 단일 개발자, 하나의 프로덕션 서비스 및 스테이징 환경을 가정합니다. 여러 서비스를 실행하거나 모노레포를 실행하는 경우 카나리 비율을 확장하세요.

  1. 모든 호출 지점을 재고하세요. git grep -n 'sms-activate\.org\|handler_api\.php\|getNumber\|setStatus'를 실행하고 이전 API에 접속하는 모든 파일을 나열하세요. 12개 이상 발견되면, 마이그레이션하기 전에 래퍼 모듈을 선택하고 호출을 중앙 집중화하세요.
  2. VerifySMS API 키를 받으세요. 가입하고, 소액의 잔액을 추가하고, 스테이징용으로 범위를 지정한 키를 생성하세요. 프로덕션 키는 리포지토리에 넣지 마세요.
  3. 기본 URL을 변경하세요. SMS-Activate 호스트를 api.verifysms.app/compat/handler_api.php로 바꾸세요. 쿼리 문자열은 변경하지 마세요. diff가 깔끔하도록 이것만 커밋하세요.
  4. 기존 테스트를 실행하세요. 테스트가 실제 API에 접속하는 경우, 스테이징으로 가리키고 모양 불일치를 확인하세요. API를 모킹하는 경우, 라이브 스테이징 엔드포인트에서도 실행하여 계약 드리프트를 잡으세요.
  5. 국가 ID를 재확인하세요. 코드에서 국가 상수를 살펴보세요. 레거시 숫자 ID를 사용하는 경우 여전히 작동합니다. 기회가 있다면 ISO-3166 코드로 교체하세요. 이 파일을 만지는 다음 개발자가 감사할 것입니다.
  6. 환불 청구를 연결하세요. 타임아웃 경로가 setStatusstatus=8로 호출하는지 확인하세요. 이것 없이는 여전히 환불을 받겠지만(만료된 임대 건은 자동 환불), 비용 추적기가 실제보다 느릴 것입니다.
  7. 비용 추적기를 업데이트하세요. 가격표에서 파싱하는 대신 X-VerifySMS-Cost 응답 헤더에서 비용을 읽으세요. 이 단일 변경으로 재무 대시보드가 센트 단위까지 정확해집니다.
  8. 모니터링. 기존 기준선에 대해 성공률, p95 지연 시간 및 환불 비율 경고를 추가하세요. "괜찮을 것"이라고 생각하는 임계값이 아니라 방어할 수 있는 임계값을 선택하세요.
  9. 24시간 동안 5% 카나리 테스트. 프로덕션 트래픽의 작은 부분을 새 엔드포인트로 라우팅하세요. 경고뿐만 아니라 대시보드도 확인하세요.
  10. 나머지를 전환하세요. 카나리 창이 깨끗하면 나머지 95%를 이동하고 이전 클라이언트 코드는 한 릴리스 주기 동안 삭제하지 않고 주석 처리된 상태로 두어 빠른 롤백을 할 수 있도록 하세요.

그 다음 릴리스에서 이전 코드를 삭제하세요. 죽은 호출 지점을 일주일 이상 남겨두지 마세요. 다음 사람이 모듈을 만질 때 실수로 새 통합에 다시 붙여넣을 수 있습니다.

자주 묻는 질문

SMS-Activate 호환성 레이어는 실제 API인가요, 아니면 스텁인가요?

api.verifysms.app/compat/handler_api.php의 실제 엔드포인트이며, SMS-Activate 공개 문서의 주요 작업인 getBalance, getNumber, getStatus, setStatus, getPrices, getCountries를 모두 수락합니다. 요청은 내부적으로 기본 API로 프록시되므로, 코드 변경 없이 VerifySMS의 가격, 커버리지 및 환불 동작을 얻을 수 있습니다.

이전 API 키가 작동하나요?

아니요. SMS-Activate API 키는 서비스가 종료된 날부터 인증이 중단되었습니다. VerifySMS에서 새 키가 필요합니다. 가입하고, 소액의 잔액을 추가하고, 대시보드에서 키를 생성하세요. 키 형식은 길이가 동일하므로 동일한 환경 변수에 붙여넣을 수 있습니다.

환불은 SMS-Activate와 비교하여 어떻게 작동하나요?

SMS-Activate는 번호를 사용하지 않음으로 표시하기 위해 20분 이내에 상태 코드 8로 setStatus를 호출해야 했으며, 환불은 몇 시간 내에 수동으로 처리되었습니다. VerifySMS는 동일한 setStatus 호출을 수락하고 60초 이내에 잔액으로 전액 환불합니다. setStatus 호출을 완전히 잊어버린 경우에도 임대 기간이 만료된 후 SMS가 수신되지 않은 모든 번호는 시스템에서 자동으로 환불됩니다.

어떤 국가가 지원되나요?

VerifySMS는 200개 이상의 국가를 지원합니다. SMS-Activate가 제공했던 모든 국가는 러시아, 인도네시아, 베트남, 나이지리아, 미국을 포함하여 VerifySMS에서 사용할 수 있습니다. 기존 국가 ID 매핑을 유지하거나 원할 때 언제든지 ISO-3166 알파-2 코드로 마이그레이션할 수 있습니다.

가격은 동일한가요?

아니요. 러시아 번호에 대한 인증당 0.03달러에서 0.05달러의 SMS-Activate 최저 시장 가격은 공개 시장에서 사라졌습니다. 현재 시장 가격은 일반 서비스의 경우 0.10달러에서 더 엄격한 플랫폼의 경우 미국 비 VoIP 번호의 경우 0.25달러까지 다양합니다. VerifySMS는 0.10달러를 기본 가격으로 청구하며 국가별 가격을 대시보드에 게시합니다.

폴링 로직을 변경해야 하나요?

아니요. getStatus 호출은 SMS-Activate에서 사용했던 것과 동일한 형식으로 STATUS_WAIT_CODESTATUS_OK를 반환합니다. 3~5초의 폴링 간격도 여전히 작동합니다. 새로운 동작은 VerifySMS가 대시보드에서 웹훅 URL도 제공한다는 것입니다. 따라서 이벤트 기반 흐름을 선호하는 경우 폴링을 완전히 중단할 수 있습니다.

호환성 레이어가 나중에 사용 중단되면 어떻게 되나요?

호환성 레이어는 영구적인 공개 인터페이스로 간주됩니다. 동작을 변경하는 경우 전체 마이그레이션 노트와 함께 최소 6개월의 사용 중단 기간을 게시할 것입니다. 기본 VerifySMS JSON API도 문서화되어 있으므로, 언제든지 편할 때 호환성 레이어에서 마이그레이션할 수 있습니다.

돈을 쓰지 않고 어떻게 테스트하나요?

VerifySMS 대시보드는 잔액을 차감하지 않고 시뮬레이션된 전화 번호와 미리 정의된 SMS 코드를 반환하는 샌드박스 모드를 제공합니다. 대시보드에서 샌드박스 플래그를 전환하거나 요청에 X-Sandbox-Mode 헤더를 보내 라이브로 전환하기 전에 코드 경로를 실행하세요.

다른 서비스에서도 마이그레이션할 수 있나요?

예. 이 플레이북은 SMS-Activate API를 중심으로 작성되었지만, 대부분의 중단된 코드가 여기에 있기 때문입니다. 하지만 동일한 체크리스트가 5sim, SMS-MAN 또는 handler_api와 호환되는 다른 서비스로의 마이그레이션에도 적용됩니다. 호환성 레이어는 이전에 어떤 서비스를 호출했는지에 관계없이 handler_api.php 매개변수를 인식합니다.

실제 마이그레이션은 얼마나 걸리나요?

수십 개의 호출 지점이 있는 단일 서비스 통합의 경우, 24시간 카나리 창을 거쳐 전체 트래픽을 전환하기 전에 2~4시간의 집중적인 작업 시간을 계획하세요. 사용자 정의 오류 처리, 분석 및 재시도가 있는 더 큰 다중 서비스 마이그레이션은 더 오래 걸릴 수 있지만 일반적으로 단일 근무일 내에 완료됩니다.

기록 데이터는 손실되나요?

SMS-Activate 인증 기록은 서비스가 종료될 때 오프라인이 되었으며 복구할 수 없습니다. VerifySMS는 12개월 동안 계정의 모든 인증 시도에 대한 전체 감사 로그를 유지하며, 대시보드와 /compat/handler_api.php?action=getHistory 확장을 통해 액세스할 수 있습니다.

이것이 GDPR 또는 규정 준수 상태에 영향을 미치나요?

VerifySMS는 영국에 등록되어 있으며 영국 GDPR을 준수합니다. 당사는 개인 정보 보호 페이지에 데이터 보존 정책, 하위 처리자 및 DPA를 게시합니다. 이전 설정에서 SMS-Activate와의 DPA가 필요한 경우 당사에 연락하시면 영업일 기준 하루 이내에 동일한 계약에 공동 서명해 드리겠습니다.

다음 단계

이 글을 여기까지 읽었다면 이미 필요한 조각들을 가지고 있습니다. 재고 조사 단계부터 시작하여, 기본 URL 교체를 동료에게 검토받고, 카나리를 밤새 실행하세요. 플레이북은 의도적으로 작습니다. 어려운 부분은 카나리 창 이후에 모든 것을 한 번에 전환하지 않고 멈추는 규율입니다.

사이트의 나머지 부분에 대한 관련 읽을거리:

마이그레이션을 한 번의 저녁으로 끝낼 준비가 되셨나요?

VerifySMS API 키 생성 →

샌드박스 모드 포함 · 자동 환불 보장 · 200개 이상 국가 · /compat/handler_api.php에서 SMS-Activate 호환 레이어

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