Start here
Your first request in four steps
Connect a phone and enable call synchronization.
Copy the API key from the dashboard.
Call the missed or incoming list endpoint.
Paginate with limit and offset and store timestamps in UTC.
Official mobile application
The secure bridge between your phone, dashboard and API.
SMS and call operations pass through the official SMSMobileAPI app installed on your connected phone. The app securely pairs the device with your account, synchronizes authorized events and links the mobile network to the dashboard and REST API.
- Signed releases distributed through the official Google Play and Apple App Store listings
- Google and Apple platform review, signing and distribution controls
- Secure device pairing, HTTPS transport and authenticated API access
- Only the permissions required for the mobile features you enable
Authentication
Keep credentials on your server
Call endpoints use the apikey query parameter. The API validates both the key and the active subscription before returning call activity.
- Background operating-system restrictions can delay mobile call synchronization by several minutes. Open the app to request a manual synchronization when testing.
History management
Clear history safely: preview, delete, follow progress
These endpoints clear the selected server history for your API key, not messages on phones or external services. They do not provide account erasure. New activity can appear after deletion.
Read the request_id and retry guide
By default, linked or processing records remain visible. Only use include_linked=1 if you accept that integrations or ongoing processing may stop working.
How request_id works
- Preview the counts with action=preview. No request_id is needed and no records are deleted.
- Generate a unique request_id for a new deletion, for example a UUID. Save it before sending action=delete.
- For retries, timeouts or HTTP 202, reuse the same API key, history endpoint, request_id and include_linked value. Never generate a new ID automatically after an error.
- When completed=true, the operation is finished. Reusing its ID returns the same result instead of deleting newly arrived records. Use a new ID only for a deliberately new cleanup.
request_id identifies your deletion operation, not an individual SMS. Allowed format: 16–128 ASCII letters, digits, hyphens or underscores. A UUID generated with crypto.randomUUID() is suitable.
Deletion runs in batches. HTTP 202 with continue_required=true means you must repeat action=delete after 3 seconds. There is no background cron. action=status only reads progress, even when its HTTP status is 200.
Deletion and status examples
Replace the sample request_id with your own unique value before starting. The following delete requests change real account history; they are not previews.
curl -X POST "https://api.smsmobileapi.com/delete-history-calls-missed/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -X POST "https://api.smsmobileapi.com/delete-history-calls-missed/" \
-H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -G "https://api.smsmobileapi.com/delete-history-calls-missed/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=status" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"GET also accepts action=preview or action=delete. POST is recommended: URL parameters can leak into browser history and server logs. Never place a deletion URL in a public link, image or prefetch.
For POST, send all parameters in the form body or a JSON object, never in the query string. Unknown parameters are rejected; date or mobile filters are not supported.
Authentication for history endpoints
Use apikey or an Authorization: Bearer access token issued by SMSMobileAPI OAuth2. Do not send a refresh token or an API key as a Bearer token. Expired tokens are refused.
When scopes are set, history:read allows preview/status and history:delete also allows deletion. Restrictions on both the token and OAuth client apply. Legacy tokens without scopes retain their existing account access.
OAuth2 selects the unique primary API key. If several primary keys exist, also provide apikey to select one belonging to the account. Secondary keys never grant access to the primary key history.
Read the response before continuing
count_delete is the cumulative number removed by this operation. selected_at_start is the initial selection; protected_at_start counts excluded records. Use preview.linked_or_processing to count linked records even when include_linked=1.
{
"result": {
"error": 0,
"history": "calls-missed",
"action": "delete",
"request_id": "6d54ac58-41f1-4fbc-9a39-6e6c86089451",
"status": "processing",
"completed": false,
"count_delete": 100,
"total_before": 250,
"selected_at_start": 200,
"protected_at_start": 50,
"include_linked": 0,
"continue_required": true,
"message": "Repeat GET or POST with the same request_id and include_linked to continue. Status requests do not run deletion."
}
}- 200 with completed=true: finished. A 200 preview or status response alone does not prove completion.
- 400 INVALID_REQUEST_ID: check the format. 404 REQUEST_NOT_FOUND: no operation exists for this ID, API key and history.
- 401: invalid or expired credentials. 403: insufficient OAuth scope or unauthorized account.
- 409 HISTORY_BUSY: another cleanup is running; continue it from the original client. 409 INCLUDE_LINKED_CONFLICT: restore the original include_linked value.
- 409 OAUTH_ACCOUNT_AMBIGUOUS: provide an API key belonging to this account.
- 503 or network interruption: some batches may already be completed. Check configuration, then retry with the original request_id. Do not create a replacement operation automatically.
GET
List missed calls
https://api.smsmobileapi.com/call/missed/list/Returns missed calls from newest to oldest.
Use it to trigger callback workflows and missed-call alerts.
Parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key. |
offset |
integer | Optional | Pagination offset; default 0. |
limit |
integer | Optional | Rows per request; default 100, maximum 500. |
search |
string | Optional | Search caller number or cached name. |
date_start |
YYYY-MM-DD | Optional | Include calls from 00:00:00 on this day. |
date_end |
YYYY-MM-DD | Optional | Include calls until 23:59:59 on this day. |
Request example
curl "https://api.smsmobileapi.com/call/missed/list/?apikey=YOUR_API_KEY&offset=0&limit=100"
Example response
{
"success": true,
"offset": 0,
"limit": 100,
"count": 1,
"data": [{"number": "+15551230001", "name": "Alex Carter", "date": "2026-03-20 16:12:28"}]
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑
GET
List incoming answered calls
https://api.smsmobileapi.com/call/incoming/list/Returns answered incoming calls with duration, timestamps and cached contact details.
Use it for call reporting, CRM history and customer-service metrics.
Parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key. |
limit |
integer | Optional | Default 50, maximum 200. |
offset |
integer | Optional | Pagination offset. |
sort_by |
enum | Optional | call_date_ms, call_datetime_utc, duration_sec, phone_number, created_at, cached_name or geo_location. |
sort_dir |
asc | desc | Optional | Default desc. |
date_from_ms |
Unix milliseconds | Optional | Minimum call timestamp. |
date_to_ms |
Unix milliseconds | Optional | Maximum call timestamp. |
q |
string | Optional | Search phone number or cached name. |
Request example
curl "https://api.smsmobileapi.com/call/incoming/list/?apikey=YOUR_API_KEY&limit=50&sort_by=call_date_ms&sort_dir=desc"
Example response
{
"success": true,
"count": 1,
"rows": [{
"phone_number": "+15551230010",
"cached_name": "Jordan Blake",
"call_date_ms": 1774027779390,
"call_datetime_utc": "2026-03-20 17:29:39",
"duration_sec": 23,
"geo_location": "Canada"
}]
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑
GET
List outgoing calls
https://api.smsmobileapi.com/call/outgoing/list/Returns calls placed from connected devices.
Use it to complete call timelines and analyze outbound activity.
Parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key. |
limit |
integer | Optional | Default 50, maximum 200. |
offset |
integer | Optional | Pagination offset. |
sort_by |
enum | Optional | call_date_ms, call_datetime_utc, duration_sec, phone_number, created_at, cached_name or geo_location. |
sort_dir |
asc | desc | Optional | Default desc. |
date_from_ms |
Unix milliseconds | Optional | Minimum call timestamp. |
date_to_ms |
Unix milliseconds | Optional | Maximum call timestamp. |
q |
string | Optional | Search phone number or cached name. |
Request example
curl "https://api.smsmobileapi.com/call/outgoing/list/?apikey=YOUR_API_KEY&limit=50&offset=0&sort_by=call_date_ms&sort_dir=desc"
Example response
{
"success": true,
"count": 1,
"rows": [{
"phone_number": "+15551230020",
"cached_name": "Casey Morgan",
"call_date_ms": 1774025965645,
"call_datetime_utc": "2026-03-20 16:59:25",
"duration_sec": 61,
"geo_location": "Canada"
}]
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑
POST · GET
Clear missed call history
https://api.smsmobileapi.com/delete-history-calls-missed/Clears missed call records from the account history, not the call log on the phone.
Use preview first, check the counts, then explicitly request deletion. This clears the entire selected history for the API key, without date, phone or message filters.
Parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Optional | Required without OAuth2. With OAuth2, optionally select an API key belonging to the same account. |
action |
preview | delete | status | Optional | preview counts without deleting; delete starts or continues deletion; status reads progress without continuing. The API defaults to delete; this tester defaults to preview. |
include_linked |
0 | 1 | Optional | Default 0: keep linked or processing records. Set 1 to include them, with a risk of breaking integrations. Keep this value unchanged when continuing a deletion. |
request_id |
string | Optional | Required for delete and status, optional for preview. Use 16 to 128 letters, digits, hyphens or underscores. Generate one unique ID per new deletion and keep it for every retry. This is not a message ID or an API key. |
Request example
curl -X POST "https://api.smsmobileapi.com/delete-history-calls-missed/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=preview" -d "include_linked=0"
Deletion and status examples
Replace the sample request_id with your own unique value before starting. The following delete requests change real account history; they are not previews.
curl -X POST "https://api.smsmobileapi.com/delete-history-calls-missed/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -X POST "https://api.smsmobileapi.com/delete-history-calls-missed/" \
-H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -G "https://api.smsmobileapi.com/delete-history-calls-missed/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=status" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"Example response
{
"result": {
"error": 0,
"history": "calls-missed",
"action": "preview",
"total": 120,
"simple": 100,
"linked_or_processing": 20,
"selected": 100,
"include_linked": 0,
"operation_in_progress": false,
"active_include_linked": null
}
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- The example above is a preview, not a deletion. Counts are illustrative; the definitive selection is fixed when deletion starts.
- include_linked=1 may disrupt GHL, Zapier, automations, unsubscribe links or delivery tracking. It never bypasses account ownership or storage integrity checks.
POST · GET
Clear incoming call history
https://api.smsmobileapi.com/delete-history-calls-incoming/Clears incoming call records from the account history, not the call log on the phone.
Use preview first, check the counts, then explicitly request deletion. This clears the entire selected history for the API key, without date, phone or message filters.
Parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Optional | Required without OAuth2. With OAuth2, optionally select an API key belonging to the same account. |
action |
preview | delete | status | Optional | preview counts without deleting; delete starts or continues deletion; status reads progress without continuing. The API defaults to delete; this tester defaults to preview. |
include_linked |
0 | 1 | Optional | Default 0: keep linked or processing records. Set 1 to include them, with a risk of breaking integrations. Keep this value unchanged when continuing a deletion. |
request_id |
string | Optional | Required for delete and status, optional for preview. Use 16 to 128 letters, digits, hyphens or underscores. Generate one unique ID per new deletion and keep it for every retry. This is not a message ID or an API key. |
Request example
curl -X POST "https://api.smsmobileapi.com/delete-history-calls-incoming/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=preview" -d "include_linked=0"
Deletion and status examples
Replace the sample request_id with your own unique value before starting. The following delete requests change real account history; they are not previews.
curl -X POST "https://api.smsmobileapi.com/delete-history-calls-incoming/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -X POST "https://api.smsmobileapi.com/delete-history-calls-incoming/" \
-H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -G "https://api.smsmobileapi.com/delete-history-calls-incoming/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=status" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"Example response
{
"result": {
"error": 0,
"history": "calls-incoming",
"action": "preview",
"total": 120,
"simple": 100,
"linked_or_processing": 20,
"selected": 100,
"include_linked": 0,
"operation_in_progress": false,
"active_include_linked": null
}
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- The example above is a preview, not a deletion. Counts are illustrative; the definitive selection is fixed when deletion starts.
- include_linked=1 may disrupt GHL, Zapier, automations, unsubscribe links or delivery tracking. It never bypasses account ownership or storage integrity checks.
POST · GET
Clear outgoing call history
https://api.smsmobileapi.com/delete-history-calls-outgoing/Clears outgoing call records from the account history, not the call log on the phone.
Use preview first, check the counts, then explicitly request deletion. This clears the entire selected history for the API key, without date, phone or message filters.
Parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Optional | Required without OAuth2. With OAuth2, optionally select an API key belonging to the same account. |
action |
preview | delete | status | Optional | preview counts without deleting; delete starts or continues deletion; status reads progress without continuing. The API defaults to delete; this tester defaults to preview. |
include_linked |
0 | 1 | Optional | Default 0: keep linked or processing records. Set 1 to include them, with a risk of breaking integrations. Keep this value unchanged when continuing a deletion. |
request_id |
string | Optional | Required for delete and status, optional for preview. Use 16 to 128 letters, digits, hyphens or underscores. Generate one unique ID per new deletion and keep it for every retry. This is not a message ID or an API key. |
Request example
curl -X POST "https://api.smsmobileapi.com/delete-history-calls-outgoing/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=preview" -d "include_linked=0"
Deletion and status examples
Replace the sample request_id with your own unique value before starting. The following delete requests change real account history; they are not previews.
curl -X POST "https://api.smsmobileapi.com/delete-history-calls-outgoing/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -X POST "https://api.smsmobileapi.com/delete-history-calls-outgoing/" \
-H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -G "https://api.smsmobileapi.com/delete-history-calls-outgoing/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=status" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"Example response
{
"result": {
"error": 0,
"history": "calls-outgoing",
"action": "preview",
"total": 120,
"simple": 100,
"linked_or_processing": 20,
"selected": 100,
"include_linked": 0,
"operation_in_progress": false,
"active_include_linked": null
}
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- The example above is a preview, not a deletion. Counts are illustrative; the definitive selection is fixed when deletion starts.
- include_linked=1 may disrupt GHL, Zapier, automations, unsubscribe links or delivery tracking. It never bypasses account ownership or storage integrity checks.
POST · GET
Clear rule execution history
https://api.smsmobileapi.com/delete-history-call-rules/Clears call automation execution records only. The rules themselves are not deleted.
Use preview first, check the counts, then explicitly request deletion. This clears the entire selected history for the API key, without date, phone or message filters.
Parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Optional | Required without OAuth2. With OAuth2, optionally select an API key belonging to the same account. |
action |
preview | delete | status | Optional | preview counts without deleting; delete starts or continues deletion; status reads progress without continuing. The API defaults to delete; this tester defaults to preview. |
include_linked |
0 | 1 | Optional | Default 0: keep linked or processing records. Set 1 to include them, with a risk of breaking integrations. Keep this value unchanged when continuing a deletion. |
request_id |
string | Optional | Required for delete and status, optional for preview. Use 16 to 128 letters, digits, hyphens or underscores. Generate one unique ID per new deletion and keep it for every retry. This is not a message ID or an API key. |
Request example
curl -X POST "https://api.smsmobileapi.com/delete-history-call-rules/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=preview" -d "include_linked=0"
Deletion and status examples
Replace the sample request_id with your own unique value before starting. The following delete requests change real account history; they are not previews.
curl -X POST "https://api.smsmobileapi.com/delete-history-call-rules/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -X POST "https://api.smsmobileapi.com/delete-history-call-rules/" \
-H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -G "https://api.smsmobileapi.com/delete-history-call-rules/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=status" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"Example response
{
"result": {
"error": 0,
"history": "call-rules",
"action": "preview",
"total": 120,
"simple": 100,
"linked_or_processing": 20,
"selected": 100,
"include_linked": 0,
"operation_in_progress": false,
"active_include_linked": null
}
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- The example above is a preview, not a deletion. Counts are illustrative; the definitive selection is fixed when deletion starts.
- include_linked=1 may disrupt GHL, Zapier, automations, unsubscribe links or delivery tracking. It never bypasses account ownership or storage integrity checks.
Troubleshooting
Errors and safe retries
Read the HTTP status and the JSON error field before retrying. Do not retry validation or authentication failures without correcting the request first.
| HTTP | Code | What to do |
|---|---|---|
| 400 | missing_apikey | The apikey parameter is missing or empty. |
| 403 | invalid_apikey | The key is not recognized. |
| 403 | api_expired | The subscription linked to the key has expired. |
| 500 | server_error | The request could not be completed by the call service. |
Need help?
Bring the request context—not your secrets.
Share the endpoint, timestamp, HTTP status and sanitized response. Never include API keys, tokens or private message content.


