Python Integation Guide
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/sdkSetup
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 keySend 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!