All integrations

SMS Alert

MESSAGING · MESSAGING

SMS and one-time passwords sent to contacts and groups from that account.

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

smsalert_post_cancelschedule_jsonWRITE

Cancel a scheduled batch by `batchid` before it goes out; the credits it reserved are refunded ("campaign stopped successfully and credits are refunded."). A batch that cannot be stopped -- already sent, already cancelled -- answers 409 "campaign can not be stopped".

api
smsalert_post_contactlist_jsonREAD

List the contacts in one group -- `id`, `name`, `number` (stored with the country code), `creationdate` -- paged by `limit` and `page`, ordered by `order`. `group_id` is REQUIRED (there is no all-contacts listing; enumerate groups first). An empty group is an EMPTY list (`description: []`, vendor sentence in `desc`), not an error; an unknown group answers 404 "invalid group". The contact `id` is what `update_contact` and `delete_contact` take.

api
smsalert_post_createcontact_jsonWRITE

Add one contact (`name`, `number`) to the group NAMED by `grpname` (the group's name, not its id). The number is stored with the country code prepended when given without one. A number already in that group is refused with 409 "Number already exists in this group"; an unknown group with 404 "group does not exist". The response confirms creation but does not return the contact id; `list_contacts` on the group does.

api
smsalert_post_creategroup_jsonWRITE

Create a contact group. `name` may contain letters, digits, hyphens and underscores only -- a space is refused (400 "Only Alphabets, numbers, hyphen, underscore allowed. Space not allowed"), and a name already in use is refused with 409 "Group already exists". The response confirms creation but does NOT return the new id; call `list_groups` (with `q` set to the name) to fetch it.

api
smsalert_post_createshorturl_jsonWRITE

Shorten a long `url` on SMS Alert's load.bz domain, for use inside SMS text. Returns `description.data.Link` (`long_url`, `alias`, `short_url`, `clicks`, `created`) and `description.id`, the link id `delete_short_url` takes. A malformed URL answers 400 "Please enter a valid URL address.".

api
smsalert_post_createtemplate_jsonWRITE

Save an SMS template with a `name` and its `text`. Duplicate names are ACCEPTED (measured 2026-09-19: two templates named the same were both created), so check `list_templates` first if uniqueness matters. The response confirms creation but does not return the id; `list_templates` does.

api
smsalert_post_creditstatus_jsonREAD

Return the SMS credit balance of the account, per route (for example `transactional`, `nondnd`, `promotional`, or `demo` on a trial account), as `description.routes[]` with `route`, `display_name` and `credits`, plus a one-line `desc` summary. Takes no arguments and spends nothing. Call it before a large send: every recipient costs one credit per message part.

api
smsalert_post_deletecontact_jsonWRITE

Delete a contact by contact `id` (from `list_contacts`). DESTRUCTIVE.

api
smsalert_post_deletegroup_jsonWRITE

Delete a contact group by `id`. DESTRUCTIVE: the group and its membership are removed. An unknown id answers 404 "invalid group".

api
smsalert_post_deleteshorturl_jsonWRITE

Delete a short URL by its link `id` (the `description.id` returned by `create_short_url`). DESTRUCTIVE: the short link stops resolving. An unknown id answers 404 "invalid short url id".

api
smsalert_post_deletetemplate_jsonWRITE

Delete a template by template `id`. DESTRUCTIVE. A second delete of the same id answers 404 "invalid template".

api
smsalert_post_grouplist_jsonREAD

List the account's contact groups -- `id`, `name`, `creationdate`, `members` (a count) -- paged by `limit` (default 10) and `page` (default 1), filtered by `q` (matched against the name), ordered by `order` (`asc`/`desc`). The group `id` is what the contact tools and `send_sms_to_groups` take. An account with no groups, or a `q` that matches nothing, is an EMPTY list (`description: []`, vendor sentence in `desc`), not an error.

api
smsalert_post_grouppush_jsonWRITE

Send one SMS `text` to every contact in one or more groups (`id`: a group id, or several comma-separated) from a sender ID, optionally on a named `route` and optionally at a future time (`schedule`, YYYY-MM-DD HH:MM:SS in the account's time zone, IST). SPENDS ONE CREDIT PER RECIPIENT per message part and reaches real phones. Returns `description.batchid` plus a per-number `batch_dtl[]` with each `msgid` and status (AWAITED-DLR, pending for a scheduled batch, BLACKLST for a blocked number). A scheduled batch can be moved with `reschedule_sms` or cancelled with `cancel_scheduled_sms`, which refunds its credits. An unknown group answers 404 "invalid group name or group id".

api
smsalert_post_modifyschedule_jsonWRITE

Move a scheduled batch (`batchid`, from the send tool's response or `list_sent_sms` with schedule=1) to a new `schedule` time, YYYY-MM-DD HH:MM:SS in the account's time zone (IST). Only a batch that has not gone out yet can be moved. An unknown batch answers 404 "campaign does not exist".

api
smsalert_post_mverify_jsonWRITE

Generate a one-time password and SEND it by SMS to `mobileno` (spends one credit). `template` is the message text and must contain the `[otp]` tag, which accepts attributes: `[otp length="6" retry="2" validity="10"]` (length 3-8, default 4; retry = how many sends per window, default 5; validity in minutes, default 15). Omit `template` to use the account's default OTP text, and `sender` to use the account's default sender ID. Returns a batch id like the send tools. Check the code the user types with `validate_otp`. Too long an OTP is a 400 "OTP length should be between 3 and 8"; too many sends in the window a 429 "Max OTP limit reached, please try after 15 minutes".

api
smsalert_post_mverify_json_validateWRITE

Check the `code` a user typed against the OTP last sent to `mobileno` by `send_otp`. Sends nothing and spends nothing. READ THE RESULT, NOT THE STATUS: SMS Alert answers `status: success` in BOTH outcomes, with `description.desc` "Code Matched successfully." when it matches and "Code does not match." when it does not. A code past its validity window does not match.

api
smsalert_post_pull_jsonREAD

Return the per-recipient delivery report for one `batchid`: each `mobileno`, `sender`, `text`, `msgid`, `status` (DELIVRD, AWAITED-DLR, pending, BLACKLST, FAILED, ...), `schedule` and `lastupdated`. Optional filters `schedule`, `sender` and `text` narrow the report. An unknown batch answers success with an empty `report` and desc "no search results found". The vendor keeps reports for the last three days (API Kit §17).

api
smsalert_post_push_jsonWRITE

Send one SMS `text` to one or more numbers (`mobileno`: a number, or several comma-separated, with or without the country code) from a sender ID. Optional: `route` (a route name from `get_credit_balance`), `schedule` (YYYY-MM-DD HH:MM:SS in the account's time zone, IST -- omit to send now), and a delivery-report callback (`dlrurl` together with `reference`, one reference per number; SMS Alert will GET the URL with ?msgid=<reference>&status=<status>). SPENDS ONE CREDIT PER RECIPIENT per message part and reaches real phones. Send `text` as plain text -- do NOT URL-encode it. Returns `description.batchid` and a per-number `batch_dtl[]` with each `msgid` and status (AWAITED-DLR when sent, pending when scheduled). Read delivery with `get_delivery_report`; move or cancel a scheduled batch with `reschedule_sms` / `cancel_scheduled_sms` (cancelling refunds the credits). Missing `sender`, `mobileno` or `text` is a 400 "insufficient parameters".

api
smsalert_post_senderlist_jsonREAD

List the sender IDs registered on the account with their approval state (`sender`, `approved`, `open`, `datetime`). Indian transactional and promotional routes require a registered, DLT-approved sender ID; the sender you pass to the send tools should come from this list. An account with none answers an EMPTY list, which this tool returns as `description: []` with the vendor's own sentence in `desc` ("no senderid available for your account").

api
smsalert_post_smscampaignlog_jsonREAD

List the account's SMS batches (the vendor calls them campaigns), newest first: `id` (the batch id), `senderid`, `text`, `route`, `smscount`, `creditscharged`, `creditsrefunded`, `schedule` (boolean), `scheduletime`, `datetime`. Paged by `limit` and `page`, filtered by `q`; `schedule=1` lists only batches that are scheduled and still pending. Use the `id` with `get_delivery_report` for per-recipient status.

api
smsalert_post_templatelist_jsonREAD

List the account's SMS templates -- `id`, `title`, `template` (the text), `creationdate`, `active` -- paged by `limit` and `page`, ordered by `order`. An account with none is an EMPTY list (`description: []`, vendor sentence in `desc`), not an error. Templates here are the account's saved texts; for Indian routes the DLT template registration is a separate, regulatory registration done in the dashboard.

api
smsalert_post_updatecontact_jsonWRITE

Update a contact's `name` and `number` by contact `id`. NOT partial: all three are required -- `name` alone is refused with 400 "insufficient parameters" (measured 2026-09-19) -- so read the contact back with `list_contacts` and resend the value you are not changing. An unknown id answers 404 "invalid contact".

api
smsalert_post_updategroup_jsonWRITE

Rename a contact group by `id`. Both `id` and the new `name` are required; the same naming rule as `create_group` applies. An unknown id answers 404 "invalid group".

api
smsalert_post_updateprofile_jsonWRITE

Update the account's first name, last name, mobile number, email address or FCM push id. PARTIAL: send only what should change -- `firstname` alone updates the first name and leaves the rest untouched (measured 2026-09-19). A malformed value is refused with the field named, e.g. {"emailid": ["Email is not valid."]}.

api
smsalert_post_updatetemplate_jsonWRITE

Update a template's `name` and `text` by template `id`. All three are required. An unknown id answers 404 "invalid template".

api
smsalert_post_user_jsonREAD

Return the profile of the SMS Alert account this connection's API key belongs to: id, username, first and last name, mobile number, email, allowed country prefixes, creation and expiry dates, and the mobile-verified, KYC, Android-push and two-factor flags. Takes no arguments. A quick way to confirm which account a connection is bound to.

api

Put SMS Alert behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.