MENU navbar-image

Introduction

Send and track SMS through your own Android gateway devices over a simple REST API.

All endpoints are authenticated with a Bearer **API key**. Create one in your
dashboard under **Developers → API keys**, then send it in the `Authorization`
header: `Authorization: Bearer YOUR_API_KEY`.

Sending an SMS does **not** require a device id — the message is sent from your
active gateway device automatically. Every message counts as one SMS.

**For AI agents:** every response uses `{ "success", "data", "message" }`;
validation errors return `422 { "message", "errors" }`, a missing/invalid key
returns `401`, and Premium-only features return `403 { "upgrade": true }`. On
`POST /api/sms` you can pass `my_id` (your own reference) and `callback_url` (we
POST the final delivery result there). A machine-readable summary built for LLMs
lives at [`/llms.txt`](/llms.txt) and [`/llms-full.txt`](/llms-full.txt); the
full OpenAPI spec is at [`/docs.openapi`](/docs.openapi).

<aside>Code examples for each endpoint appear on the right; switch the language with the tabs at the top.</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer YOUR_API_KEY".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Create an API key in your dashboard under Developers → API keys, then send it as Authorization: Bearer YOUR_API_KEY.

API Keys

Create and revoke the API keys used to authenticate API requests.

List the user's API keys (never returns the plaintext token).

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/tokens" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/tokens"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/tokens';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/tokens'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": [
        {
            "id": 5,
            "name": "Production server",
            "abilities": [
                "*"
            ],
            "last_used_at": "2026-06-08T10:00:00.000000Z",
            "created_at": "2026-06-01T09:00:00.000000Z"
        }
    ]
}
 

Request      

GET api/tokens

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Create a new API key. The plaintext token is returned ONCE.

requires authentication

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/tokens" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"abilities\": [
        \"architecto\"
    ]
}"
const url = new URL(
    "https://api.mobsms.cloud/api/tokens"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "abilities": [
        "architecto"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/tokens';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'b',
            'abilities' => [
                'architecto',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/tokens'
payload = {
    "name": "b",
    "abilities": [
        "architecto"
    ]
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "success": true,
    "message": "API key created. Copy it now — it will not be shown again.",
    "data": {
        "id": 6,
        "name": "Production server",
        "token": "6|aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789",
        "created_at": "2026-06-08T10:00:00.000000Z"
    }
}
 

Request      

POST api/tokens

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

abilities   string[]  optional    

Revoke (delete) an API key the user owns.

requires authentication

Example request:
curl --request DELETE \
    "https://api.mobsms.cloud/api/tokens/architecto" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/tokens/architecto"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/tokens/architecto';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/tokens/architecto'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "message": "API key revoked"
}
 

Request      

DELETE api/tokens/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the token. Example: architecto

Account

Account overview: balance, usage and spend.

Display the authenticated user's account overview.

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/account" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/account"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/account';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/account'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "user": {
            "id": 1,
            "name": "Ali",
            "email": "ali@example.com"
        },
        "balance": 0,
        "sms_rate": 100,
        "usage": {
            "total_sms": 1200,
            "total_spent": 120000,
            "today_sms": 8,
            "today_spent": 800,
            "month_sms": 240,
            "month_spent": 24000
        },
        "stats": {
            "total_sent": 1100,
            "total_delivered": 1050,
            "total_failed": 50,
            "total_pending": 0,
            "total_received": 30,
            "devices": 2,
            "active_devices": 1
        },
        "subscription": {
            "plan": "premium",
            "is_premium": true,
            "premium_expires_at": "2027-06-08T00:00:00.000000Z",
            "prices": {
                "monthly": 5,
                "yearly": 50,
                "currency": "USD"
            },
            "features": [
                "api",
                "webhooks",
                "bulk"
            ]
        }
    }
}
 

Request      

GET api/account

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Display the authenticated user's account overview.

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/balance" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/balance"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/balance';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/balance'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "user": {
            "id": 1,
            "name": "Ali",
            "email": "ali@example.com"
        },
        "balance": 0,
        "sms_rate": 100,
        "usage": {
            "total_sms": 1200,
            "total_spent": 120000,
            "today_sms": 8,
            "today_spent": 800,
            "month_sms": 240,
            "month_spent": 24000
        },
        "stats": {
            "total_sent": 1100,
            "total_delivered": 1050,
            "total_failed": 50,
            "total_pending": 0,
            "total_received": 30,
            "devices": 2,
            "active_devices": 1
        },
        "subscription": {
            "plan": "premium",
            "is_premium": true,
            "premium_expires_at": "2027-06-08T00:00:00.000000Z",
            "prices": {
                "monthly": 5,
                "yearly": 50,
                "currency": "USD"
            },
            "features": [
                "api",
                "webhooks",
                "bulk"
            ]
        }
    }
}
 

Request      

GET api/balance

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

App

Self-update feed for the Android gateway app. The app polls latest on launch (and periodically) and installs the APK when the server build is newer than its own version code.

Latest gateway-app release.

Returns the newest active release. The app compares version_code against its own build number and prompts an update when this is higher. data is null when no release is published.

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/app/latest" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/app/latest"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/app/latest';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/app/latest'
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "version_name": "1.0.1",
        "version_code": 2,
        "release_notes": "Bug fixes and a faster send queue.",
        "mandatory": false,
        "apk_url": "https://api.mobsms.cloud/api/app/download/3",
        "apk_size": 27418624
    }
}
 

Example response (200, no release published):


{
    "success": true,
    "data": null
}
 

Request      

GET api/app/latest

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Authentication

Obtain a token for the dashboard/app. For server-to-server API access, create a long-lived API key under "API Keys" instead.

Login

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"you@example.com\",
    \"password\": \"secret123\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/login"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "you@example.com",
    "password": "secret123"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/login';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'email' => 'you@example.com',
            'password' => 'secret123',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/login'
payload = {
    "email": "you@example.com",
    "password": "secret123"
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "token": "9|aBcDeF...plaintext",
        "user": {
            "id": 1,
            "name": "Ali",
            "email": "you@example.com"
        },
        "token_type": "Bearer"
    },
    "message": "Login successful"
}
 

Example response (401):


{
    "success": false,
    "message": "Invalid credentials"
}
 

Request      

POST api/login

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

The account email. Example: you@example.com

password   string     

The account password. Example: secret123

POST api/register

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/register" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Ali Valiyev\",
    \"email\": \"ali@example.com\",
    \"password\": \"secret123\",
    \"password_confirmation\": \"secret123\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/register"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Ali Valiyev",
    "email": "ali@example.com",
    "password": "secret123",
    "password_confirmation": "secret123"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/register';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Ali Valiyev',
            'email' => 'ali@example.com',
            'password' => 'secret123',
            'password_confirmation' => 'secret123',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/register'
payload = {
    "name": "Ali Valiyev",
    "email": "ali@example.com",
    "password": "secret123",
    "password_confirmation": "secret123"
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "success": true,
    "data": {
        "token": "10|aBcDeF...plaintext",
        "user": {
            "id": 2,
            "name": "Ali Valiyev",
            "email": "ali@example.com"
        },
        "token_type": "Bearer"
    },
    "message": "Registration successful"
}
 

Request      

POST api/register

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Your name. Example: Ali Valiyev

email   string     

A unique email. Example: ali@example.com

password   string     

At least 6 chars; must match password_confirmation. Example: secret123

password_confirmation   string     

Repeat of password. Example: secret123

Sign in with Google (GIS / ID-token flow).

The frontend obtains an ID token from Google Identity Services and posts it here. We verify it against Google's tokeninfo endpoint (validates the signature + expiry), check the audience/issuer, then link-by-email or create the user and issue a Sanctum token.

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/auth/google" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"id_token\": \"architecto\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/auth/google"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "id_token": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/auth/google';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'id_token' => 'architecto',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/auth/google'
payload = {
    "id_token": "architecto"
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "token": "11|aBcDeF...plaintext",
        "user": {
            "id": 3,
            "name": "Ali",
            "email": "ali@gmail.com"
        },
        "token_type": "Bearer"
    },
    "message": "Login successful"
}
 

Example response (401):


{
    "success": false,
    "message": "Invalid Google token"
}
 

Request      

POST api/auth/google

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

id_token   string     

Example: architecto

Logout user

requires authentication

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/logout" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/logout"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/logout';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/logout'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "message": "Logout successful"
}
 

Request      

POST api/logout

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Get authenticated user

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/user" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/user"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/user';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/user'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "id": 1,
        "name": "Ali",
        "email": "ali@example.com",
        "plan": "premium",
        "premium_expires_at": "2027-06-08T00:00:00.000000Z"
    }
}
 

Request      

GET api/user

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Contacts

Manage your address book. Contacts can belong to one or more groups and are used as bulk-SMS recipients.

Bulk-import contacts (e.g. from a parsed CSV).

requires authentication

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/contacts/import" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"contacts\": [
        {
            \"name\": \"Ali\",
            \"phone_number\": \"+998901112233\"
        }
    ],
    \"group_id\": 10
}"
const url = new URL(
    "https://api.mobsms.cloud/api/contacts/import"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "contacts": [
        {
            "name": "Ali",
            "phone_number": "+998901112233"
        }
    ],
    "group_id": 10
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/contacts/import';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => \Symfony\Component\VarExporter\Internal\Hydrator::hydrate(
            $o = [
                clone (\Symfony\Component\VarExporter\Internal\Registry::$prototypes['stdClass'] ?? \Symfony\Component\VarExporter\Internal\Registry::p('stdClass')),
            ],
            null,
            [
                'stdClass' => [
                    'name' => [
                        'Ali',
                    ],
                    'phone_number' => [
                        '+998901112233',
                    ],
                ],
            ],
            [
                'contacts' => [
                    $o[0],
                ],
                'group_id' => 10,
            ],
            []
        ),
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/contacts/import'
payload = {
    "contacts": [
        {
            "name": "Ali",
            "phone_number": "+998901112233"
        }
    ],
    "group_id": 10
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "success": true,
    "data": {
        "imported": 42,
        "skipped": 3
    },
    "message": "Imported 42 contacts"
}
 

Request      

POST api/contacts/import

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

contacts   object[]     

The rows to import. Each needs at least phone_number.

name   string  optional    

Must not be greater than 255 characters. Example: n

phone_number   string  optional    

Must not be greater than 32 characters. Example: g

email   string  optional    

Must not be greater than 255 characters. Example: rowan.gulgowski@example.com

notes   string  optional    

Must not be greater than 1000 characters. Example: d

group_id   integer  optional    

Optional group to add every imported contact to. Example: 10

Devices

List your gateway devices. Sending does not require a device id — it's used only if you want to target a specific device.

Display a listing of the resource.

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/devices" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/devices"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/devices';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/devices'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": [
        {
            "id": 5,
            "device_id": "abc123",
            "device_name": "Pixel 7",
            "phone_number": "+998901234567",
            "is_active": true,
            "is_default": true,
            "sms_rate": 100,
            "send_delay_seconds": 0,
            "default_sim_slot": 0
        }
    ]
}
 

Request      

GET api/devices

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Set the user's default device (used when an API send omits device_id).

requires authentication

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/devices/default-device" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"device_id\": \"architecto\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/devices/default-device"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "device_id": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/devices/default-device';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'device_id' => 'architecto',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/devices/default-device'
payload = {
    "device_id": "architecto"
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "id": 5,
        "device_name": "Pixel 7",
        "is_default": true
    },
    "message": "Default device updated successfully"
}
 

Request      

POST api/devices/default-device

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

device_id   string     

Example: architecto

SMS

Send SMS and read message history & delivery status.

Send bulk SMS

requires authentication

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/sms/bulk" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"message\": \"Hi {name}, your code is 1234\",
    \"recipients\": [
        \"+998901234567\"
    ],
    \"device_id\": \"active\",
    \"price\": 27,
    \"my_id\": \"campaign-7\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/sms/bulk"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "message": "Hi {name}, your code is 1234",
    "recipients": [
        "+998901234567"
    ],
    "device_id": "active",
    "price": 27,
    "my_id": "campaign-7"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms/bulk';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'message' => 'Hi {name}, your code is 1234',
            'recipients' => [
                '+998901234567',
            ],
            'device_id' => 'active',
            'price' => 27,
            'my_id' => 'campaign-7',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms/bulk'
payload = {
    "message": "Hi {name}, your code is 1234",
    "recipients": [
        "+998901234567"
    ],
    "device_id": "active",
    "price": 27,
    "my_id": "campaign-7"
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "success": true,
    "data": [
        {
            "id": 201,
            "message_id": "uuid-1",
            "recipient_number": "+998901112233",
            "status": "pending",
            "price": 100,
            "is_charged": false,
            "direction": "outbound"
        }
    ],
    "message": "Bulk SMS queued for sending"
}
 

Example response (422):


{
    "success": false,
    "message": "No active device available"
}
 

Request      

POST api/sms/bulk

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

message   string     

The message text (max 1600). Use {name} to insert each recipient's name. Example: Hi {name}, your code is 1234

recipients   string[]     

Recipients. Each item is a phone number string, or an object { "number": "+998...", "name": "Ali" } for personalisation.

device_id   string  optional    

Optional. "active" broadcasts across all active devices (round-robin); omit to use your default device; or a specific device id. Example: active

price   number  optional    

Must be at least 0. Example: 27

my_id   string  optional    

Optional client reference id. Example: campaign-7

Delivery statistics

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/sms/delivery-stats" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/sms/delivery-stats"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms/delivery-stats';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms/delivery-stats'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "today": {
            "sent": 8,
            "delivered": 7,
            "failed": 1,
            "delivery_rate": 87.5
        },
        "this_week": {
            "sent": 40,
            "delivered": 38,
            "delivery_rate": 95
        },
        "this_month": {
            "sent": 240,
            "delivered": 230,
            "delivery_rate": 95.8
        }
    },
    "message": "Delivery statistics retrieved successfully"
}
 

Request      

GET api/sms/delivery-stats

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

List outbound (sent) messages.

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/sms/outbox" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/sms/outbox"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms/outbox';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms/outbox'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "current_page": 1,
        "data": [
            {
                "id": 101,
                "recipient_number": "+998901234567",
                "message": "Hello",
                "status": "delivered",
                "price": 100,
                "is_charged": false,
                "created_at": "2026-06-08T10:00:00.000000Z"
            }
        ],
        "per_page": 50,
        "total": 1
    }
}
 

Request      

GET api/sms/outbox

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

List inbound (received) messages.

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/sms/inbox" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/sms/inbox"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms/inbox';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms/inbox'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "current_page": 1,
        "data": [
            {
                "id": 55,
                "sender_number": "+998907778899",
                "message": "Reply text",
                "status": "received",
                "direction": "inbound",
                "created_at": "2026-06-08T09:00:00.000000Z"
            }
        ],
        "per_page": 50,
        "total": 1
    }
}
 

Request      

GET api/sms/inbox

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Cancel a pending outbound message.

requires authentication

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/sms/architecto/cancel" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/sms/architecto/cancel"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms/architecto/cancel';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms/architecto/cancel'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "id": 101,
        "status": "cancelled"
    },
    "message": "SMS cancelled successfully"
}
 

Example response (422):


{
    "success": false,
    "message": "Only pending messages can be cancelled"
}
 

Request      

POST api/sms/{id}/cancel

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the sms. Example: architecto

List messages

requires authentication

Paginated message history (newest first), filterable.

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/sms?direction=outbound&status=delivered&device_id=5&page=1" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/sms"
);

const params = {
    "direction": "outbound",
    "status": "delivered",
    "device_id": "5",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'direction' => 'outbound',
            'status' => 'delivered',
            'device_id' => '5',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms'
params = {
  'direction': 'outbound',
  'status': 'delivered',
  'device_id': '5',
  'page': '1',
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "current_page": 1,
        "data": [
            {
                "id": 101,
                "message_id": "9f1c-uuid",
                "recipient_number": "+998901234567",
                "sender_number": "+998901112233",
                "message": "Hello",
                "direction": "outbound",
                "status": "delivered",
                "price": 100,
                "is_charged": false,
                "sent_at": "2026-06-08T10:00:01.000000Z",
                "delivered_at": "2026-06-08T10:00:05.000000Z",
                "created_at": "2026-06-08T10:00:00.000000Z"
            }
        ],
        "per_page": 50,
        "total": 1
    }
}
 

Request      

GET api/sms

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

direction   string  optional    

Filter by inbound or outbound. Example: outbound

status   string  optional    

Filter by status (pending, sent, delivered, failed). Example: delivered

device_id   integer  optional    

Filter by device id. Example: 5

page   integer  optional    

Page number. Example: 1

Send an SMS

requires authentication

Queues a single SMS to be sent from your active gateway device.

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/sms" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"message\": \"Your code is 1234\",
    \"recipient_number\": \"+998901234567\",
    \"device_id\": \"active\",
    \"price\": 39,
    \"my_id\": \"order-42\",
    \"callback_url\": \"https:\\/\\/example.com\\/sms\\/callback\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/sms"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "message": "Your code is 1234",
    "recipient_number": "+998901234567",
    "device_id": "active",
    "price": 39,
    "my_id": "order-42",
    "callback_url": "https:\/\/example.com\/sms\/callback"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'message' => 'Your code is 1234',
            'recipient_number' => '+998901234567',
            'device_id' => 'active',
            'price' => 39,
            'my_id' => 'order-42',
            'callback_url' => 'https://example.com/sms/callback',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms'
payload = {
    "message": "Your code is 1234",
    "recipient_number": "+998901234567",
    "device_id": "active",
    "price": 39,
    "my_id": "order-42",
    "callback_url": "https:\/\/example.com\/sms\/callback"
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "success": true,
    "message": "SMS queued for sending",
    "data": {
        "id": 101,
        "message_id": "9f1c...uuid",
        "recipient_number": "+998901234567",
        "status": "pending",
        "price": 100,
        "is_charged": false,
        "direction": "outbound",
        "callback_url": "https://example.com/sms/callback"
    }
}
 

Example response (422):


{
    "success": false,
    "message": "No active device available"
}
 

Request      

POST api/sms

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

message   string     

The message text (max 1600 chars). Example: Your code is 1234

recipient_number   string     

Destination number (E.164). Alias: phone. Example: +998901234567

device_id   string  optional    

Optional device id to target; omit to use your active device. Example: active

price   number  optional    

Must be at least 0. Example: 39

my_id   string  optional    

Optional client reference id echoed back. Example: order-42

callback_url   string  optional    

Optional. A URL we POST the delivery result to once this message is delivered or fails. The body is {"event":"status","data":{...message...},"timestamp":"..."}. Example: https://example.com/sms/callback

Get a message

requires authentication

Fetch one message by numeric id or by its message_id UUID (poll delivery status).

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/sms/architecto" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/sms/architecto"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms/architecto';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms/architecto'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "id": 101,
        "message_id": "9f1c-uuid",
        "recipient_number": "+998901234567",
        "status": "delivered",
        "price": 100,
        "is_charged": false,
        "sent_at": "2026-06-08T10:00:01.000000Z",
        "delivered_at": "2026-06-08T10:00:05.000000Z",
        "error_message": null,
        "callback_url": null
    }
}
 

Example response (404):


{
    "message": "No query results for model [SmsMessage]."
}
 

Request      

GET api/sms/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the sms. Example: architecto

Update a message

requires authentication

Example request:
curl --request PUT \
    "https://api.mobsms.cloud/api/sms/architecto" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"received\",
    \"error_message\": \"architecto\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/sms/architecto"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "status": "received",
    "error_message": "architecto"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms/architecto';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'status' => 'received',
            'error_message' => 'architecto',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms/architecto'
payload = {
    "status": "received",
    "error_message": "architecto"
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "id": 101,
        "status": "delivered"
    },
    "message": "SMS updated successfully"
}
 

Request      

PUT api/sms/{id}

PATCH api/sms/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the sms. Example: architecto

Body Parameters

status   string  optional    

Example: received

Must be one of:
  • pending
  • sent
  • delivered
  • failed
  • received
error_message   string  optional    

Example: architecto

Delete a message

requires authentication

Example request:
curl --request DELETE \
    "https://api.mobsms.cloud/api/sms/architecto" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/sms/architecto"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/sms/architecto';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/sms/architecto'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "message": "SMS deleted successfully"
}
 

Request      

DELETE api/sms/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the sms. Example: architecto

Settings

Account-level preferences.

Show the authenticated user's settings.

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/settings" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/settings"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/settings';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/settings'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "keep_inbound": true
    }
}
 

Request      

GET api/settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Update the authenticated user's settings.

requires authentication

Example request:
curl --request PUT \
    "https://api.mobsms.cloud/api/settings" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"keep_inbound\": false
}"
const url = new URL(
    "https://api.mobsms.cloud/api/settings"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "keep_inbound": false
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/settings';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'keep_inbound' => false,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/settings'
payload = {
    "keep_inbound": false
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "keep_inbound": false
    },
    "message": "Settings updated successfully"
}
 

Request      

PUT api/settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

keep_inbound   boolean  optional    

Store incoming SMS in your history. When false, inbound messages aren't saved (the incoming webhook still fires). Example: false

Subscription

Premium plan status, pricing, crypto-payment details, and promo-code redemption.

Get the authenticated user's subscription status, pricing and payment info.

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/subscription" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/subscription"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/subscription';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/subscription'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "plan": "premium",
        "is_premium": true,
        "premium_expires_at": "2027-06-08T00:00:00.000000Z",
        "prices": {
            "monthly": 5,
            "yearly": 50,
            "currency": "USD"
        },
        "features": [
            "api",
            "webhooks",
            "bulk"
        ],
        "payment": {
            "wallet_address": "UQCGj7fXHlxD5H_uwbrJSE9N6NPMQ62pz_eoxViCdNYCF5Gh",
            "asset": "USDT (TON)",
            "network": "TON",
            "admin_telegram": "@dev_murod"
        }
    }
}
 

Request      

GET api/subscription

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Redeem a promo code to unlock Premium for free.

requires authentication

Example request:
curl --request POST \
    "https://api.mobsms.cloud/api/subscriptions/redeem-promo" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"PDAFTAR\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/subscriptions/redeem-promo"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "code": "PDAFTAR"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/subscriptions/redeem-promo';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'code' => 'PDAFTAR',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/subscriptions/redeem-promo'
payload = {
    "code": "PDAFTAR"
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "success": true,
    "message": "Promo code redeemed — Premium activated.",
    "data": {
        "plan": "premium",
        "is_premium": true,
        "premium_expires_at": "2027-06-08T00:00:00.000000Z",
        "prices": {
            "monthly": 5,
            "yearly": 50,
            "currency": "USD"
        },
        "features": [
            "api",
            "webhooks",
            "bulk"
        ]
    }
}
 

Example response (422):


{
    "success": false,
    "message": "This promo code is invalid or no longer available."
}
 

Request      

POST api/subscriptions/redeem-promo

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

code   string     

The promo code (case-insensitive). Example: PDAFTAR

Webhooks

Register callback URLs to receive incoming-SMS and delivery-status events.

Display the authenticated user's webhook URLs.

requires authentication

Example request:
curl --request GET \
    --get "https://api.mobsms.cloud/api/webhooks" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.mobsms.cloud/api/webhooks"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/webhooks';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/webhooks'
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "webhook_url_incoming": "https://example.com/incoming",
        "webhook_url_status": "https://example.com/status"
    }
}
 

Request      

GET api/webhooks

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Update the authenticated user's webhook URLs.

requires authentication

Example request:
curl --request PUT \
    "https://api.mobsms.cloud/api/webhooks" \
    --header "Authorization: Bearer YOUR_API_KEY" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"webhook_url_incoming\": \"https:\\/\\/example.com\\/incoming\",
    \"webhook_url_status\": \"https:\\/\\/example.com\\/status\"
}"
const url = new URL(
    "https://api.mobsms.cloud/api/webhooks"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "webhook_url_incoming": "https:\/\/example.com\/incoming",
    "webhook_url_status": "https:\/\/example.com\/status"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.mobsms.cloud/api/webhooks';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_KEY',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'webhook_url_incoming' => 'https://example.com/incoming',
            'webhook_url_status' => 'https://example.com/status',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.mobsms.cloud/api/webhooks'
payload = {
    "webhook_url_incoming": "https:\/\/example.com\/incoming",
    "webhook_url_status": "https:\/\/example.com\/status"
}
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "success": true,
    "data": {
        "webhook_url_incoming": "https://example.com/incoming",
        "webhook_url_status": "https://example.com/status"
    },
    "message": "Webhooks updated successfully"
}
 

Request      

PUT api/webhooks

Headers

Authorization        

Example: Bearer YOUR_API_KEY

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

webhook_url_incoming   string  optional    

Optional URL to receive inbound-SMS events. Example: https://example.com/incoming

webhook_url_status   string  optional    

Optional URL to receive delivery-status events. Example: https://example.com/status