v1REST · JSON

SNSOTP OTP API

API REST untuk verifikasi SMS. Pesan nomor untuk salah satu dari 182 layanan di salah satu dari 154 negara, baca kode satu kali dari pesanan, dan dapatkan kembali harga penuh jika tidak ada kode yang tiba dalam 20 menit.

Setiap endpoint menerima parameter sebagai parameter query (GET) atau sebagai field form atau JSON (POST). Jawaban berupa JSON; uang dalam string USD dengan dua desimal dan waktu dalam format ISO 8601 UTC.

Server

https://snsotp.com/api/v1

AutentikasiBearer token

Kunci API Anda dari konsol, dikirim sebagai Authorization: Bearer sok_...

Autentikasi

Buat kunci di halaman API di konsol. Kunci dimulai dengan sok_ dan hanya ditampilkan sekali, jadi simpan di variabel lingkungan. Mengganti kunci akan menghentikan kunci lama segera. Panggilan ke /services, /countries, dan /prices bekerja tanpa kunci.

Header
Authorization: Bearer sok_your_key_here

Kunci juga dapat dikirim sebagai parameter query atau field form key, yang membantu alat yang tidak dapat mengatur header.

Mulai cepat

Pesan nomor, berikan ke aplikasi, lalu polling pesanan hingga kode tersedia. Alur yang sama dalam empat bahasa:

# 1. Order a number for whatsapp in US
curl -X POST https://snsotp.com/api/v1/orders \
  -H "Authorization: Bearer $SNSOTP_KEY" \
  -d service=whatsapp -d country=us

# 2. Read the code (poll every 3 to 5 seconds)
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \
  -H "Authorization: Bearer $SNSOTP_KEY"

GET/services

Setiap layanan dengan kode dan harga terendah · tidak ada kunci

Setiap layanan yang dapat dipesan, dengan kodenya (gunakan sebagai service dalam panggilan lain), kategorinya, dan harga terendah di seluruh negara. Tidak perlu kunci.

PermintaancURL
curl https://snsotp.com/api/v1/services
Jawaban200
{
  "services": [
    { "code": "whatsapp", "name": "WhatsApp", "category": "social", "from": "0.09" },
    { "code": "telegram", "name": "Telegram", "category": "social", "from": "0.03" }
  ]
}

GET/countries

Setiap negara dengan kode dan kode dial · tidak ada kunci

Setiap negara dengan kodenya (ISO 3166 alpha-2 dalam huruf kecil, gunakan sebagai country) dan kode dialnya. Tidak perlu kunci.

PermintaancURL
curl https://snsotp.com/api/v1/countries
Jawaban200
{
  "countries": [
    { "code": "us", "name": "United States", "dial_code": "1" },
    { "code": "gb", "name": "United Kingdom", "dial_code": "44" }
  ]
}

GET/prices

Harga untuk layanan, negara, atau keduanya · tidak ada kunci

Harga per pesanan untuk satu layanan di setiap negara, satu negara untuk setiap layanan, atau satu pasangan. Kirim setidaknya satu filter. Tidak perlu kunci.

Parameter

  • servicestring

    Kode layanan, misalnya whatsapp

  • countrystring

    Kode negara, misalnya us

PermintaancURL
curl "https://snsotp.com/api/v1/prices?service=whatsapp&country=us"
Jawaban200
{
  "prices": [
    { "service": "whatsapp", "country": "us", "price": "0.93" }
  ]
}

GET/balance

Saldo Anda dalam USD · kunci diperlukan

Saldo Anda dalam USD.

PermintaancURL
curl https://snsotp.com/api/v1/balance \
  -H "Authorization: Bearer $SNSOTP_KEY"
Jawaban200
{
  "balance": "42.50",
  "currency": "USD"
}

POST/orders

Pesan nomor untuk layanan dan negara · kunci diperlukan

Memesan nomor dan membebankan harganya. Jawaban berisi nomor lengkap (phone) dan tanpa kode dial (number). Pesanan tetap terbuka selama 20 menit; jika tidak ada kode yang tiba dalam waktu tersebut, harga akan kembali ke saldo Anda secara otomatis. Jawaban status 201.

Parameter

  • servicestringdiperlukan

    Kode layanan dari GET /services

  • countrystringdiperlukan

    Kode negara dari GET /countries

PermintaancURL
curl -X POST https://snsotp.com/api/v1/orders \
  -H "Authorization: Bearer $SNSOTP_KEY" \
  -d service=whatsapp -d country=us
Jawaban201
{
  "order": {
    "id": "OT-7K2M9QX4PB",
    "service": "whatsapp",
    "country": "us",
    "phone": "+13475550182",
    "number": "3475550182",
    "dial_code": "1",
    "price": "0.93",
    "status": "waiting",
    "code": null,
    "sms": null,
    "codes": [],
    "expires_at": "2026-11-03T12:20:00.000Z"
  },
  "window_minutes": 20
}

GET/orders/{id}

Status, kode, dan teks SMS dari satu pesanan · kunci diperlukan

Satu pesanan dengan statusnya, kode terbaru, teks SMS terbaru, dan setiap kode yang diterima sejauh ini. Polling setiap 3 hingga 5 detik selama statusnya waiting.

Parameter

  • idpathdiperlukan

    ID pesanan dari POST /orders

PermintaancURL
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \
  -H "Authorization: Bearer $SNSOTP_KEY"
Jawaban200
{
  "order": {
    "id": "OT-7K2M9QX4PB",
    "service": "whatsapp",
    "country": "us",
    "phone": "+13475550182",
    "number": "3475550182",
    "price": "0.93",
    "status": "received",
    "code": "284913",
    "sms": "Your WhatsApp code is 284913",
    "expires_at": "2026-11-03T12:20:00.000Z"
  }
}

GET/orders

Pesanan terbuka Anda (atau semua dengan status=all) · kunci diperlukan

Pesanan terbuka Anda, yang terbaru pertama. Tambahkan status=all untuk pesanan terbaru dalam setiap status.

Parameter

  • statusstring

    open (default) atau all

  • limitnumber

    1 hingga 100, default 50

PermintaancURL
curl "https://snsotp.com/api/v1/orders?status=open" \
  -H "Authorization: Bearer $SNSOTP_KEY"
Jawaban200
{
  "orders": [
    { "id": "OT-7K2M9QX4PB", "service": "whatsapp", "status": "received", "code": "284913" }
  ]
}

POST/orders/{id}/resend

Kode lain di nomor yang sama · kunci diperlukan

Meminta kode lain pada nomor yang sama setelah kode pertama, dalam jendela waktu, tanpa biaya tambahan. Kemudian picu SMS baru di aplikasi; waiting_for_resend adalah true hingga SMS tiba.

Parameter

  • idpathdiperlukan

    ID pesanan

PermintaancURL
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/resend \
  -H "Authorization: Bearer $SNSOTP_KEY"
Jawaban200
{
  "order": { "id": "OT-7K2M9QX4PB", "status": "received", "waiting_for_resend": true }
}

POST/orders/{id}/finish

Tutup pesanan setelah menggunakan kode · kunci diperlukan

Menutup pesanan yang telah menerima kode setelah Anda menggunakannya. Menyelesaikan bersifat opsional: pesanan terbuka akan ditutup sendiri saat jendela waktu berakhir.

Parameter

  • idpathdiperlukan

    ID pesanan

PermintaancURL
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/finish \
  -H "Authorization: Bearer $SNSOTP_KEY"
Jawaban200
{
  "order": { "id": "OT-7K2M9QX4PB", "status": "finished" }
}

POST/orders/{id}/cancel

Batalkan sebelum kode, pengembalian dana penuh · kunci diperlukan

Membatalkan pesanan sebelum kode tiba dan mengembalikan harga penuh ke saldo Anda segera. Setelah kode tiba, pembatalan akan menjawab has_code.

Parameter

  • idpathdiperlukan

    ID pesanan

PermintaancURL
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/cancel \
  -H "Authorization: Bearer $SNSOTP_KEY"
Jawaban200
{
  "order": { "id": "OT-7K2M9QX4PB", "status": "canceled", "refunded": "0.93" }
}

Status pesanan

nilai status
  • waitingNomor sudah siap dan belum ada SMS yang tiba. Pembatalan masih mungkin.
  • receivedSetidaknya satu kode telah tiba. code dan sms berisi yang terbaru.
  • finishedDitutup setelah kode tiba, dengan finish atau saat jendela waktu berakhir.
  • refundedTidak ada kode yang tiba dalam 20 menit. Harga penuh telah kembali ke saldo Anda.
  • canceledDibatalkan sebelum kode tiba. Harga penuh telah kembali ke saldo Anda.

Kesalahan

Kesalahan menggunakan status HTTP dan body dengan kode stabil dan pesan yang dapat dibaca.

Status HTTP dan kode
  • 400missing_filter, bad_jsonNilai yang diperlukan hilang atau body tidak dapat dibaca.
  • 401no_key, bad_keyKunci hilang, salah, atau dihapus.
  • 402no_balanceSaldo tidak cukup untuk pesanan ini. Tambahkan saldo di konsol.
  • 404unknown_service, unknown_country, not_sold, not_foundKode atau pesanan tidak ada, atau pasangan tidak dijual.
  • 409too_many_open, has_code, not_ready, no_numbersTindakan tidak sesuai dengan status pesanan, atau tidak ada nomor yang tersedia saat ini (tidak ada yang dibebankan).
  • 429rate_limitedLebih dari 300 permintaan dalam satu menit dengan satu kunci.
Body kesalahan402
{
  "error": {
    "code": "no_balance",
    "message": "Not enough credit. Add credit in the console."
  }
}

Batas kecepatan

  • 300 permintaan per menit per kunci. Di atas itu API akan menjawab 429 rate_limited selama sisa menit tersebut.
  • Hingga 20 pesanan terbuka per akun. Selesaikan atau batalkan satu untuk membuka yang lain.
  • Polling order setiap 3 hingga 5 detik; kode biasanya tiba dalam satu menit.

Format aktivasi SMS

Skrip yang ditulis untuk format handler_api.php umum bekerja dengan kunci API yang sama: ubah alamat dasar ke https://snsotp.com/stubs/handler_api.php dan pertahankan tindakannya. Kode layanan dan negara sama seperti di REST API.

Tindakan
  • getBalance

    ACCESS_BALANCE:42.50

  • getServicesList

    Daftar layanan JSON

  • getCountries

    Peta negara JSON

  • getPricesservice, country (opsional)

    JSON {country: {service: {cost, count}}}

  • getNumberservice, country

    ACCESS_NUMBER:<id>:<phone>

  • getStatusid

    STATUS_WAIT_CODE, STATUS_OK:<code>, STATUS_WAIT_RETRY:<code>, STATUS_CANCEL

  • setStatusid, status 1 / 3 / 6 / 8

    ACCESS_READY, ACCESS_RETRY_GET, ACCESS_ACTIVATION, ACCESS_CANCEL

PermintaancURL
curl "https://snsotp.com/stubs/handler_api.php\
?api_key=$SNSOTP_KEY&action=getNumber\
&service=telegram&country=gb"

ACCESS_NUMBER:OT-3QF8ZK2W7M:447700900182

nilai setStatus: 1 siap, 3 kode lain, 6 selesai, 8 batalkan dengan pengembalian dana penuh.

Dokumentasi API OTP: SMS Verification REST API | SNSOTP