DockSMS

Global virtual number SMS API One platform for SMS verification delivery

6+ countries · 1000+ projects · 99.9% uptime

OpenAPI ready · 24/7 automated delivery

Why choose us

Instant delivery

Millisecond response time with verification codes arriving in seconds.

Global coverage

US / UK / HK / CA / ID / VN coverage with expanding inventory.

Secure and reliable

HMAC request signing, replay protection, and stable service uptime.

Flexible integration

OpenAPI + Webhook with multilingual examples for business systems.

Coverage

Expanding continuously

United States
United Kingdom
Hong Kong
Canada
Indonesia
Vietnam

How it works

1

Create an account

Sign up quickly and finish account creation.

2

Top up balance

Create a recharge order and your balance is credited automatically after payment.

3

Choose numbers

Pick a country and project to get a number.

4

Receive SMS

Receive the verification code and complete your flow.

Built for developers

APP_KEY="YOUR_APP_KEY"
APP_SECRET="YOUR_APP_SECRET"
URI="/openapi/v1/orders.php"
TIMESTAMP=$(date +%s)
NONCE=$(openssl rand -hex 16)
BODY='{"product_id":413,"quantity":1,"expiry":15,"prefix":"1267","exclude_prefix":"","idempotency_key":"demo-001"}'
BODY_HASH=$(printf '%s' "$BODY" | openssl dgst -sha256 | awk '{print $NF}')
PAYLOAD=$(printf 'POST\n%s\n%s\n%s\n%s' "$URI" "$TIMESTAMP" "$NONCE" "$BODY_HASH")
SIGNATURE=$(printf '%s' "$PAYLOAD" | openssl dgst -sha256 -hmac "$APP_SECRET" | awk '{print $NF}')

curl -X POST "https://smsdock.top$URI" \
  -H 'Content-Type: application/json' \
  -H "X-App-Key: $APP_KEY" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "X-Nonce: $NONCE" \
  -H "X-Signature: $SIGNATURE" \
  -d "$BODY"
<?php
$body = json_encode([
    'product_id' => 413,
    'quantity' => 1,
    'expiry' => 15,
    'prefix' => '1267',
    'exclude_prefix' => '',
    'idempotency_key' => 'demo-001',
], JSON_UNESCAPED_SLASHES);
$timestamp = (string) time();
$nonce = bin2hex(random_bytes(16));
$uri = '/openapi/v1/orders.php';
$payload = "POST\n{$uri}\n{$timestamp}\n{$nonce}\n" . hash('sha256', $body);
$signature = hash_hmac('sha256', $payload, 'YOUR_APP_SECRET');

$ch = curl_init('https://smsdock.top' . $uri);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $body,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'X-App-Key: YOUR_APP_KEY',
        'X-Timestamp: ' . $timestamp,
        'X-Nonce: ' . $nonce,
        'X-Signature: ' . $signature,
    ],
]);
echo curl_exec($ch);
import hashlib, hmac, json, secrets, time, requests

body = json.dumps({
    "product_id": 413,
    "quantity": 1,
    "expiry": 15,
    "prefix": "1267",
    "exclude_prefix": "",
    "idempotency_key": "demo-001"
}, separators=(",", ":"))
uri = "/openapi/v1/orders.php"
timestamp = str(int(time.time()))
nonce = secrets.token_hex(16)
payload = f"POST\n{uri}\n{timestamp}\n{nonce}\n{hashlib.sha256(body.encode()).hexdigest()}"
signature = hmac.new(b"YOUR_APP_SECRET", payload.encode(), hashlib.sha256).hexdigest()

res = requests.post("https://smsdock.top" + uri, data=body, headers={
    "Content-Type": "application/json",
    "X-App-Key": "YOUR_APP_KEY",
    "X-Timestamp": timestamp,
    "X-Nonce": nonce,
    "X-Signature": signature,
})
print(res.text)
import crypto from "node:crypto";

const body = JSON.stringify({
  product_id: 413,
  quantity: 1,
  expiry: 15,
  prefix: "1267",
  exclude_prefix: "",
  idempotency_key: "demo-001"
});
const uri = "/openapi/v1/orders.php";
const timestamp = String(Math.floor(Date.now() / 1000));
const nonce = crypto.randomBytes(16).toString("hex");
const bodyHash = crypto.createHash("sha256").update(body).digest("hex");
const payload = `POST\n${uri}\n${timestamp}\n${nonce}\n${bodyHash}`;
const signature = crypto.createHmac("sha256", "YOUR_APP_SECRET").update(payload).digest("hex");

const res = await fetch("https://smsdock.top" + uri, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-App-Key": "YOUR_APP_KEY",
    "X-Timestamp": timestamp,
    "X-Nonce": nonce,
    "X-Signature": signature
  },
  body
});
console.log(await res.text());

FAQ

What does this platform do?

The platform provides overseas virtual number SMS APIs. Users can buy numbers and query verification codes through the console or OpenAPI.

Is the API hard to integrate?

Not at all. The platform provides HMAC signing examples, request specs, and Webhook callback documentation for fast integration.

How do I get started?

After creating an account, create a recharge order first. Once payment succeeds, your balance is credited automatically so you can choose a country, project, and buy numbers.

What if SMS does not arrive?

First check number status, project matching, and SMS retention time. Exceptional orders enter the system repair workflow.

Which payment methods are supported?

Recharge is supported through the USDT-TRC20 checkout. Once credited, the balance can be used for purchases.

How are exceptional orders handled?

Exceptional orders are handled through the system repair and unfreeze return workflow. You can submit the necessary details through the contact support page.

How long can a number be used?

Numbers display an estimated expiration time. Carriers may reclaim them 3-5 days earlier, so please watch the expiry risk closely.

How can I contact support?

Use the support contact page and the team will verify the issue against orders, balance, and SMS records.

Get started

Create an account and unlock the full OpenAPI workflow