v1REST · JSON

SNSOTP OTP API

API REST untuk pengesahan SMS. Pesan nombor untuk salah satu daripada 182 perkhidmatan di salah satu daripada 154 negara, baca kod sekali guna daripada pesanan, dan dapatkan harga penuh kembali jika tiada kod tiba dalam 20 minit.

Setiap endpoint menerima parameter sebagai parameter pertanyaan (GET) atau sebagai medan borang atau JSON (POST). Jawapan adalah JSON; wang adalah rentetan USD dengan dua perpuluhan dan masa adalah ISO 8601 dalam UTC.

Pelayan

https://snsotp.com/api/v1

PengesahanToken Bearer

Kunci API anda dari konsol, dihantar sebagai Authorization: Bearer sok_...

Pengesahan

Buat kunci pada halaman API di konsol. Ia bermula dengan sok_ dan ditunjukkan sekali sahaja, jadi simpan dalam pembolehubah persekitaran. Menggantikan kunci akan menghentikan kunci lama dengan segera. Panggilan kepada /services, /countries dan /prices berfungsi tanpa kunci.

Header
Authorization: Bearer sok_your_key_here

Kunci juga boleh dihantar sebagai parameter pertanyaan atau medan borang key, yang membantu alat yang tidak boleh menetapkan header.

Permulaan pantas

Pesan nombor, berikan kepada aplikasi, kemudian poll pesanan sehingga kod ada. Aliran 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 perkhidmatan dengan kod dan harga terendahnya · tiada kunci

Setiap perkhidmatan yang boleh dipesan, dengan kodnya (gunakan sebagai perkhidmatan dalam panggilan lain), kategorinya dan harga terendah merentasi negara. Tiada kunci diperlukan.

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

GET/countries

Setiap negara dengan kod dan kod dailnya · tiada kunci

Setiap negara dengan kodnya (ISO 3166 alpha-2 dalam huruf kecil, gunakan sebagai negara) dan kod dailnya. Tiada kunci diperlukan.

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

GET/prices

Harga untuk perkhidmatan, negara atau kedua-duanya · tiada kunci

Harga setiap pesanan untuk satu perkhidmatan di setiap negara, satu negara untuk setiap perkhidmatan, atau satu pasangan. Hantar sekurang-kurangnya satu penapis. Tiada kunci diperlukan.

Parameter

  • servicestring

    Kod perkhidmatan, contohnya whatsapp

  • countrystring

    Kod negara, contohnya us

PermintaancURL
curl "https://snsotp.com/api/v1/prices?service=whatsapp&country=us"
Jawapan200
{
  "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"
Jawapan200
{
  "balance": "42.50",
  "currency": "USD"
}

POST/orders

Pesan nombor untuk perkhidmatan dan negara · kunci diperlukan

Memesan nombor dan mengenakan harganya. Jawapan mengandungi nombor penuh (phone) dan tanpa kod dail (number). Pesanan kekal terbuka selama 20 minit; jika tiada kod dalam tempoh itu, harga akan kembali ke saldo anda secara automatik. Status jawapan 201.

Parameter

  • servicestringdiperlukan

    Kod perkhidmatan dari GET /services

  • countrystringdiperlukan

    Kod 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
Jawapan201
{
  "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, kod dan teks SMS satu pesanan · kunci diperlukan

Satu pesanan dengan statusnya, kod terkini, teks SMS terkini dan setiap kod yang diterima setakat ini. Poll setiap 3 hingga 5 saat semasa status adalah waiting.

Parameter

  • idpathdiperlukan

    ID pesanan dari POST /orders

PermintaancURL
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \
  -H "Authorization: Bearer $SNSOTP_KEY"
Jawapan200
{
  "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 dahulu. Tambah status=all untuk pesanan terkini dalam setiap status.

Parameter

  • statusstring

    terbuka (lalai) atau semua

  • limitnumber

    1 hingga 100, lalai 50

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

POST/orders/{id}/resend

Kod lain pada nombor yang sama · kunci diperlukan

Meminta kod lain pada nombor yang sama selepas kod pertama, dalam tempoh window, tanpa kos tambahan. Kemudian picu SMS baru dalam aplikasi; waiting_for_resend adalah benar sehingga ia tiba.

Parameter

  • idpathdiperlukan

    ID pesanan

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

POST/orders/{id}/finish

Tutup pesanan selepas anda menggunakan kod · kunci diperlukan

Menutup pesanan yang menerima kod setelah anda menggunakannya. Menyelesaikan adalah pilihan: pesanan terbuka akan ditutup sendiri apabila window berakhir.

Parameter

  • idpathdiperlukan

    ID pesanan

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

POST/orders/{id}/cancel

Batal sebelum kod, bayaran penuh dikembalikan · kunci diperlukan

Membatalkan pesanan sebelum kod tiba dan mengembalikan harga penuh ke saldo anda dengan segera. Selepas kod, batalkan jawapan has_code.

Parameter

  • idpathdiperlukan

    ID pesanan

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

Status pesanan

nilai status
  • waitingNombor sudah sedia dan tiada SMS tiba lagi. Pembatalan mungkin.
  • receivedSekurang-kurangnya satu kod tiba. code dan sms mengandungi yang terkini.
  • finishedDitutup selepas kod, dengan finish atau apabila window berakhir.
  • refundedTiada kod tiba dalam 20 minit. Harga penuh kembali ke saldo anda.
  • canceledDibatalkan sebelum kod. Harga penuh kembali ke saldo anda.

Ralat

Ralat menggunakan status HTTP dan badan dengan kod stabil dan mesej yang boleh dibaca.

Status HTTP dan kod
  • 400missing_filter, bad_jsonNilai yang diperlukan tiada atau badan tidak boleh dibaca.
  • 401no_key, bad_keyKunci tiada, salah atau dipadam.
  • 402no_balanceTiada cukup saldo untuk pesanan ini. Tambah saldo di konsol.
  • 404unknown_service, unknown_country, not_sold, not_foundKod atau pesanan tidak wujud, atau pasangan tidak dijual.
  • 409too_many_open, has_code, not_ready, no_numbersTindakan tidak sesuai dengan keadaan pesanan, atau tiada nombor percuma sekarang (tiada apa yang dikenakan).
  • 429rate_limitedLebih daripada 300 permintaan dalam satu minit dengan satu kunci.
Badan ralat402
{
  "error": {
    "code": "no_balance",
    "message": "Not enough credit. Add credit in the console."
  }
}

Had kadar

  • 300 permintaan seminit setiap kunci. Melebihi itu API akan menjawab 429 rate_limited untuk baki minit tersebut.
  • Sehingga 20 pesanan terbuka setiap akaun. Selesaikan atau batalkan satu untuk membuka yang lain.
  • Poll pesanan setiap 3 hingga 5 saat; kod biasanya tiba dalam masa satu minit.

Format pengaktifan SMS

Skrip yang ditulis untuk format handler_api.php biasa berfungsi dengan kunci API yang sama: ubah alamat asas kepada https://snsotp.com/stubs/handler_api.php dan kekalkan tindakan. Kod perkhidmatan dan negara adalah sama seperti dalam API REST.

Tindakan
  • getBalance

    ACCESS_BALANCE:42.50

  • getServicesList

    Senarai JSON perkhidmatan

  • getCountries

    Peta JSON negara

  • getPricesservice, country (pilihan)

    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 sedia, 3 kod lain, 6 selesai, 8 batalkan dengan bayaran balik penuh.

Dokumentasi API OTP: API Pengesahan SMS REST | SNSOTP