Kotlin
Welcome to the ReSMS Kotlin integration guide.
This guide explains how you can quickly and securely send SMS messages using the ReSMS API in your Kotlin 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 Kotlin SDK:
Maven:
<dependency>
<groupId>dev.resms</groupId>
<artifactId>resms-java-sdk</artifactId>
<version>1.1.0</version>
</dependency>
Gradle (Kotlin DSL):
implementation("dev.resms:resms-java-sdk:1.1.0")
Setup
You need to get an API key on ReSMS Dashboard .
Then import the package and create a new instance of the ReSMS
class with your API key.
import dev.resms.ReSMS
val resms = ReSMS("re_12345") // Replace with your actual API key
Send SMS
Here’s a minimal example to send an SMS:
import dev.resms.ReSMS
import dev.resms.core.exception.ReSMSException
import dev.resms.services.sms.model.SendSmsOptions
val resms = ReSMS("re_12345")
val smsOptions = SendSmsOptions.builder()
.to("+33612345678")
.message("Welcome to ReSMS!")
.build()
try {
resms.sms().send(smsOptions)
} catch (e: ReSMSException) {
println("Error: ${e.message}")
}
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) |
senderId | String | ❌ | The alphanumeric sender name displayed |
Response
Success Response
The sms.send()
method returns a response when the SMS has been successfully sent.
The response type is:
data class SendSmsResponse(
val data: SendSmsResponseData
) : Response() {
data class SendSmsResponseData(
val messageId: String
)
}
Error Response
In case of an error, a ReSMSException
is thrown:
class ReSMSException(message: String) : Exception(message)
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 dev.resms.ReSMS
import dev.resms.services.otp.model.SendOtpOptions
val resms = ReSMS("re_12345")
val otpOptions = SendOtpOptions.builder()
.to("+33612345678")
.message("Your OTP code is {CODE}")
.build()
try {
resms.otp().send(otpOptions)
} catch (e: ReSMSException) {
println("Error: ${e.message}")
}
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} . | |
senderId | String | ❌ | The alphanumeric sender name displayed | |
codeType | String ("NUMERIC" | "ALPHA" ) | ❌ | The type of OTP code to generate | "NUMERIC" |
codeLength | Int | ❌ | The length of the OTP code | 6 |
validityMinutes | Int | ❌ | The validity period of the OTP in minutes. | 5 |
Response
Success Response
The otp.send()
method returns a response when the OTP has been successfully sent.
The response type is:
data class SendOtpResponse(
val data: SendOtpResponseData
) : Response() {
data class SendOtpResponseData(
val phoneNumber: String,
val expiresAt: String
)
}
Error Response
In case of an error, a ReSMSException
is thrown with the error details.
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 dev.resms.ReSMS
import dev.resms.services.otp.model.VerifyOtpOptions
val resms = ReSMS("re_12345")
val verifyOptions = VerifyOtpOptions.builder()
.to("+33612345678")
.code("123456")
.build()
try {
val response = resms.otp().verify(verifyOptions)
println("OTP verified: ${response.data.otpId}")
} catch (e: ReSMSException) {
println("Error: ${e.message}")
}
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 response indicating whether the OTP is valid or not.
The response type is:
data class VerifyOtpResponse(
val data: VerifyOtpResponseData
) : Response() {
data class VerifyOtpResponseData(
val otpId: String,
val phoneNumber: String,
val verifiedAt: String
)
}
Error Response
In case of an error, a ReSMSException
is thrown with the error details.
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!