Python
Welcome to the ReSMS Python integration guide.
This guide explains how you can quickly and securely send SMS messages using the ReSMS API in your Python applications.
Features
- Send SMS: Send text messages to phone numbers.
- Send OTP: Generate and send one-time passwords (OTP) for user verification.
- Verify OTP: Validate OTP codes entered by users.
Installation
First, install our official ReSMS Python SDK:
pip install @resms/sdk
Setup
You need to get an API key on ReSMS Dashboard . Then import the package and set your API key.
import resms
resms.api_key = "re_12345" # Replace with your actual API key
Send SMS
Here’s a minimal example to send an SMS:
import resms
resms.api_key = "re_12345"
resms.sms.send(to="+33612345678", message="Welcome to ReSMS!")
Parameters
Possible parameters for sending an SMS:
Field | Type | Required | Description |
---|---|---|---|
to | String | ✅ | The phone number of the recipient, in international format (E.164) |
message | String | ✅ | The SMS content (160 characters max) |
sender_id | String | ❌ | The alphanumeric sender name displayed |
Response
Success Response
The sms.send()
method returns a dictionary when the SMS has been successfully sent.
The response format is:
{
"data": {
"messageId": "string"
}
}
Error Response
In case of an error, the SDK raises an HTTP exception with the error details. You can handle errors like this:
import resms
import requests
try:
resms.sms.send(to="+33612345678", message="Welcome to ReSMS!")
except requests.exceptions.HTTPError as e:
print(f"Error: {e.response.json()}")
The sms.send()
method may return the following errors:
Name | Message |
---|---|
COUNTRY_DETECTION_FAILED | Unable to detect country code from phone number |
PHONE_NUMBER_PARSING_FAILED | Invalid phone number |
INSUFFICIENT_SMS_QUOTA | Failed to update message status |
MESSAGE_STATUS_UPDATE_FAILED | Failed to update message status |
Send OTP
Here is a minimal example to send an OTP verification code to a phone number:
import resms
resms.api_key = "re_12345"
resms.otp.send(
to="+33612345678",
message="Your OTP code is {CODE}",
)
Parameters
Possible parameters for sending an OTP:
Field | Type | Required | Description | Default Value |
---|---|---|---|---|
to | String | ✅ | The phone number of the recipient, in international format (E.164) | |
message | String | ✅ | The SMS content (160 characters max). It must contain {CODE} . | |
sender_id | String | ❌ | The alphanumeric sender name displayed | |
code_type | String ("numeric" | "alpha" ) | ❌ | The type of OTP code to generate | "numeric" |
code_length | int | ❌ | The length of the OTP code | 6 |
validity_minutes | int | ❌ | The validity period of the OTP in minutes. | 5 |
Response
Success Response
The otp.send()
method returns a dictionary when the OTP has been successfully sent.
The response format is:
{
"data": {
"phoneNumber": "string",
"expiresAt": "string"
}
}
Error Response
In case of an error, the SDK raises an HTTP exception with the error details. You can handle errors like this:
import resms
import requests
try:
resms.otp.send(to="+33612345678", message="Your OTP code is {CODE}")
except requests.exceptions.HTTPError as e:
print(f"Error: {e.response.json()}")
The otp.send()
method may return the following errors:
Code | HTTP Status | Message |
---|---|---|
INVALID_MESSAGE_TEMPLATE | 400 | Message template must contain {CODE} placeholder |
INVALID_CODE_LENGTH | 400 | Code length must be between 4 and 16 |
INVALID_VALIDITY_DURATION | 400 | Validity duration must be between 1 minute and 1440 minutes (24 hours) |
TOO_MANY_OTP_REQUESTS | 429 | Too many OTP requests for this phone number |
Verify OTP
To verify an OTP code entered by the user:
import resms
resms.api_key = "re_12345"
response = resms.otp.verify(
to="+33612345678",
code="123456"
)
print(f"OTP verified successfully: {response['data']['otpId']}")
Parameters
Possible parameters for verifying an OTP:
Field | Type | Required | Description |
---|---|---|---|
to | String | ✅ | The phone number the OTP was sent to, in international format (E.164) |
code | String | ✅ | The verification code entered by the user |
Response
Success Response
The otp.verify()
method returns a dictionary indicating whether the OTP is valid or not.
The response format is:
{
"data": {
"otpId": "string",
"phoneNumber": "string",
"verifiedAt": "string"
}
}
Error Response
In case of an error, the SDK raises an HTTP exception with the error details. You can handle errors like this:
import resms
import requests
try:
response = resms.otp.verify(to="+33612345678", code="123456")
print(f"OTP verified successfully: {response['data']['otpId']}")
except requests.exceptions.HTTPError as e:
print(f"Error: {e.response.json()}")
The otp.verify()
method may return the following errors:
Code | HTTP Status | Message |
---|---|---|
OTP_NOT_FOUND | 404 | OTP not found |
OTP_INVALID | 400 | OTP is invalid |
OTP_EXPIRED | 400 | OTP has expired |
OTP_ALREADY_VERIFIED | 400 | OTP already verified |
INVALID_OTP_CODE | 400 | Invalid OTP code |
Have feedback, found a bug, or want to suggest a feature?
- Open an issue on GitHub
- Or chat with us directly on Discord — we’re happy to help!