Skip to main content

Get SMS Online — Python SDK

Python client for the Get SMS Online API.
Receive SMS online and get one-time verification codes programmatically for WhatsApp, Telegram, Google, and 700+ other services.

Use this library to automate phone number verification with temporary phone numbers — no SIM card required.
Ideal for receiving OTP codes, bypassing SMS verification, and managing virtual phone numbers at scale.

Compatible with both getsms.online and tellabot.com — the API is identical.
Full API documentation: getsms.online/api_command_reference.php

PyPI version

Installation

pip install get-sms-online
pip install git+https://github.com/getsms-online/get.sms.online-python.git

Quick start

from getsms import GetSMSClient, GetSMSError

client = GetSMSClient(user="your_username", api_key="your_api_key")

# Check balance
print(client.balance())   # e.g. 10.0

# Request a number and wait for the SMS
requests = client.request_number("WhatsApp")
req = requests[0]
print(f"Your number: {req['mdn']}")

sms = client.wait_for_sms(req["id"], timeout=900)
if sms:
    print(f"Code: {sms['pin']}")

API key

Generate your API key at Account → Profile inside the members area at getsms.online.

Reference

GetSMSClient(user, api_key)

All methods raise GetSMSError on API errors.


request_number(service, mdn=None, areacode=None, state=None, markup=None)

Request a phone number for one or more services.

Parameter Type Description
service str or list Service name(s), e.g. "WhatsApp" or ["Google", "Yahoo"]
mdn str Request a specific number (optional)
areacode str 3-digit US area code (optional)
state str 2-letter US state, e.g. "CA" (optional)
markup int Priority bid 10–2000 (optional)

Returns a list of request dicts: id, mdn, service, status, state, markup, price, carrier, till_expiration.

# Single service
result = client.request_number("WhatsApp")

# Specific area code
result = client.request_number("Google", areacode="415")

# Multiple services at once (priority request)
result = client.request_number(["Google", "Amazon", "Yahoo"])

request_status(request_id)

Get the current status of a request.

Possible status values: Reserved, Awaiting MDN, Completed, Rejected, Timed Out.

info = client.request_status("10000001")
print(info[0]["status"])   # "Reserved"
print(info[0]["mdn"])      # "15302286946"

reject(request_id)

Reject a reserved number or cancel a priority bid.

client.reject("10000001")

read_sms(request_id=None, mdn=None, service=None)

Read the latest SMS messages (up to 3, from the past 2 days).
Tip: use a webhook instead of polling.

messages = client.read_sms(request_id="10000001")
for msg in messages:
    print(msg["reply"], msg["pin"])

list_services(service=None)

List available services and prices.

# All services
all_services = client.list_services()

# One or more specific services
info = client.list_services("Google")
info = client.list_services(["Google", "WhatsApp"])

Returns: name, price, ltr_price, ltr_short_price, otp_available, ltr_available, recommended_markup.


balance()

Returns your current balance as a float.

print(client.balance())   # 10.0

wait_for_mdn(service, areacode=None, state=None, timeout=1800, poll_interval=15)

Convenience helper for priority requests — use when no numbers are immediately available.

  1. Fetches recommended_markup for the service via list_services
  2. Adds 2% and submits a priority request with that markup
  3. Polls request_status every 15 seconds until a number is assigned (Reserved) or the request expires

After it returns, pass entry["id"] to wait_for_sms to wait for the SMS.

entry = client.wait_for_mdn("Google", state="CA")
if entry:
    print(f"Number assigned: {entry['mdn']}")
    sms = client.wait_for_sms(entry["id"])
    if sms:
        print(sms["pin"])

Returns a request dict with the assigned MDN, or None if timed out / rejected.


wait_for_sms(request_id, timeout=900, poll_interval=15)

Convenience helper — polls request_status until an SMS arrives or the request expires.
The number is cancelled automatically by the server on timeout — no manual rejection needed.
poll_interval is enforced to a minimum of 15 seconds.

sms = client.wait_for_sms("10000001", timeout=900, poll_interval=15)
if sms:
    print(sms["pin"])

Returns the first SMS message dict, or None if the request timed out or was rejected.


Webhook

Instead of polling read_sms, configure a webhook URL at Account → Profile.
Your endpoint will receive POST requests with the following fields:

Incoming message:

Field Value
event "incoming_message"
id Request ID
timestamp UNIX timestamp
date_time Human-readable (America/New_York)
from Sending number
to Receiving number
service Service name
reply SMS text
pin Extracted PIN code
price Price

Priority request won:

Field Value
event "priority_request"
status "ok"
id Request ID
mdn Assigned number
service Service name
price Price

Your webhook endpoint must return HTTP 200. On failure the system retries 5 times at 10-minute intervals.


Error handling

from getsms import GetSMSClient, GetSMSError

client = GetSMSClient("user", "key")

try:
    result = client.request_number("WhatsApp")
except GetSMSError as e:
    print(f"API error: {e}")
except Exception as e:
    print(f"Network error: {e}")

Links

Keywords

receive sms online · temporary phone number · virtual phone number · disposable phone number · sms verification · bypass sms · otp code · phone number verification · free sms receive · temporary number for whatsapp · temporary number for telegram · temporary number for google · sms api python · receive otp online

License

MIT

Release files for get-sms-online 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for get-sms-online 1.0.1
File Size Uploaded
get_sms_online-1.0.1.tar.gz 7.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for get-sms-online 1.0.1
File Interpreter ABI Platform
get_sms_online-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size:15.2 kB

Release files / get_sms_online-1.0.1.tar.gz

Download URL get_sms_online-1.0.1.tar.gz
Size 7.6 kB
Tags Source
SHA-256 checksum
How to use checksums
9978fe6511432822c15f7b278efb6e2d8f8938a96f2ac2ac5619f931b6608e91
BLAKE2b-256 checksum
How to use checksums
1cd1a6dca07452e4d1e2faeb537d9d0416e09aa33ff8f2a404306158f436a92e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release files / get_sms_online-1.0.1-py3-none-any.whl

Download URL get_sms_online-1.0.1-py3-none-any.whl
Size 7.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
961b3a7539641a9bdbd2548705e829abb83a342ddfcaa39395538763f383dedd
BLAKE2b-256 checksum
How to use checksums
bc01392b94d496ae31b596986a7c79d657370e792e1de9a6e531d98c5caee456
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page