Send SMS New
/api/v3/sms/send Base URL https://api.easify.liveBearer token and Accept header required Authentication →
This endpoint is used to send SMS/MMS with a higher rate limit of 10000 requests a minute.
This endpoint allows users to send SMS/MMS messages using their Easify phone number.
When to use this endpoint
This is the recommended endpoint for sending SMS through the API:
- Allows up to 10000 requests a minute, compared with 1000 for Send SMS (Classic).
- The request returns straight away with a
reference_id, and the message is sent from a queue. This can take up to 1 hour. - Most problems, such as not enough credits, show up afterwards as a
Failedstatus, so follow each message with SMS Status (New) or the SMS status webhook. - Media must be a public URL. File uploads aren't supported.
This endpoint has its own rate limit of 10000 requests per minute per API token, separate from the other endpoints. If you exceed this limit, you will receive a 429 Too Many Requests status with a message indicating when you can try again.
Messages sent through this endpoint are queued and may take up to 1 hour to be sent. Use the reference_id returned in the response with the sms/status API to track the delivery status of a message.
A successful request returns HTTP 202 Accepted with status Queued. The request itself only checks the fields listed below. All other checks run after the message is queued, including the from number and its SMS/MMS capability, the destination country, the blacklist (when check_blacklist is 1), the media download, credits and the daily segment limit. If one of them fails, the request still returns 202. The message then shows status Failed with the reason in remarks (for example "Selected from number is invalid" or "Sorry, you do not have enough credits to send this SMS. Please recharge for more"), both in sms/status and in the status webhook.
Request Body
| from_number string |
From number to send SMS *Ensure that you are using a phone number associated with the api token,please use the Phone Numbers API to retrieve the associated phone numbers. *A number without a leading + is treated as a +1 number (+1 is added to its last 10 digits). For any other country, send the full number with + and country code. |
Required |
| to_number string | To number to send SMS (No need of attaching country code) | Required |
| message string | The content to be sent | Required without media |
| media string |
Publicly accessible URL of the media file to attach |
Required without message |
| lead_id string | CRM lead id(If you have a CRM and need to associate the SMS history with a specific lead, you can use the lead_id to connect the SMS records to the corresponding lead in your CRM) | Optional |
| country_code string | Country code for to_number (Currently support +1, +972 and +44 codes) | Required |
| force_send integer | If you send an SMS outside of open hours and closing hours, it will be scheduled for the next opening hour. If you need to send it immediately despite being outside of these hours, set force_send to 1 | Optional |
| check_blacklist integer |
Determines whether the API should check if the recipient number is blacklisted before sending the SMS. 1 = enforce blacklist (block blacklisted numbers), 0 = ignore blacklist and send SMS. Default: 0. A blocked message is still accepted (202) and then fails with the remark "Sorry, this recipient is blacklisted!" |
Optional |
| sanitize_message integer | Set to 1 to convert the message to plain GSM text before sending: look-alike characters such as curly quotes are replaced, and emojis and other non-GSM characters are removed. Default: 0. | Optional |
Example Request and Response
Request:
{
"from_number": "315293****",
"to_number": "315135****",
"country_code": "+1",
"message": "Hi Alex, this is ABC Company. Your appointment is confirmed for Tue, Nov 18 at 10:00 AM. Reply STOP to unsubscribe."
}
Success Response:
{
"status": true,
"message": "Message queued successully",
"data": {
"reference_id": "41a66ba9-3e50-481a-8cc4-db7****",
"created_at": "2026-07-23T05:04:41.145135Z",
"updated_at": "2026-07-23T05:04:41.145589Z",
"status": "Queued",
"remarks": "Message queued"
}
}
Responses
| Case | Status Code | Response |
|---|---|---|
| If the user provides an invalid Easify API token or does not pass the Easify API token in the header. | 401 |
{
"status":false,
"message":"Unauthenticated",
"errors":[]
}
|
| If user not provided from_number | 422 |
{
"message":"The from_number is required.",
"errors": {
"from_number": ["The from number is required."]
}
}
|
| If the user provided invalid country code | 422 |
{
"message": "Currently, this service is only available in the following countries: Canada, United States, Israel, United Kingdom. Please verify the country code.",
"errors": {
"country_code": ["Currently, this service is only available in the following countries: Canada, United States, Israel, United Kingdom. Please verify the country code."]
}
}
|
| If the user not provided country_code | 400 |
{
"message": "The country code field is required.",
"errors": {
"country_code": ["The country code field is required."]
}
}
|
| If the user exceeds the allowed rate limit for requests | 429 |
{
"status":false,
"message":"Too many requests. Try again in 59 seconds",
"errors":[]
}
|
| If the user's subscription has ended | 402 |
{
"status":false,"message":"You need to recharge your account to proceed","errors":[]
}
|
| When the user account is inactive | 403 |
{
"status": false,
"message": "Your account is currently inactive.",
"errors": []
}
|
| If the request comes from an IP address or domain that is not on the account's API whitelist | 400 |
{
"status": false,
"message": "Access denied! Your IP or domain is not whitelisted.[ HostName : ] - [ Ip Address : << YOUR_SERVER_IP >>]",
"errors": []
}
|
Code Examples
php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.easify.live/api/v3/sms/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode([
'from_number' => '315293****',
'to_number' => '315135****',
'country_code' => '+1',
'message' => 'Hi Alex, this is ABC Company. Your appointment is confirmed for Tue, Nov 18 at 10:00 AM. Reply STOP to unsubscribe.',
]),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer <> ',
'Content-Type: application/json',
'Accept: application/json',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;