Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Learn how to generate API Keys to create authenticated requests to the Mobile Alerts API.
API Keys can be generated in the Mobile Text Alerts platform dashboard.
Visit for your account. This is under the three-dot menu in the top right of the platform dashboard.
Select the tab or scroll down to Developer Resources.
Click the GENERATE A NEW KEY button. Enter a name for the new API Key.
Once generated, store this key in a safe place. The key will no longer be available to view after clicking “Accept”.
This API Key is used to make authenticated calls to the Mobile Text Alerts API.
This API Key is used as a bearer token when making requests to the API. A bearer token is included in the request header to grant a user or application access to a protected endpoint.
Header structure: "Authorization: Bearer {myAPIKey}"
Below is an example cURL request with a bearer token to the endpoint, this will verify the API Key as valid.
If valid, a response will be returned with the message: "API Key verified"
Learn how to get started with the Mobile Text Alerts API.
With the Mobile Text Alerts API you can take full control over your account with message sending, phone number segmentation and more. The API allows you to perform CRUD (create, read, update, delete) operations without incurring any additional costs, as API access comes bundled with every subscription.
Launched new SDKs page to help you learn how to integrate with MTA’s API across different platforms and languages. First SDK subpage added:
Launched new AI section, here you can learn how to utilize all of Mobile Text Alerts AI-first features. New pages:
Expanded API Reference with newly released API endpoints and refreshed documentation content on over 50 endpoints.
Launched our new API Reference - Complete, detailed documentation for every publicly available endpoint provided by the Mobile Text Alerts API. Developers using Mobile Text Alerts now have an even easier way of referencing any endpoint in our API with full interactivity and the ability to create requests directly within the documentation.
Introduced new Open in ChatGPT / Claude options for every page on the Developer Center. Simply click on the Copy menu on the top right, and you can send any Developer Center page to your preferred AI assistant and it will analyze and summarize the page for you.
Expanded FAQ page with more commonly questions, sourced directly from conversations with our users!
Improvements to the following pages:
Messaging Routes - , ,
Added a new Messaging Route Guide -
Introduced support for llms.txt and llms-full.txt for robust LLM crawling and access.
Added Markdown support for all documentation pages. Just append .md to a Developer Center URL to get a Markdown version, perfect for LLMs.
New detailed Adaptive Groups tutorial
New Messaging Routes Guide -
Revamped tutorials, adding distinct tutorials for and managing custom attributes
New Groups Bulk Add/Delete Subscribers tutorial
Expanded and clarified our Rate Limits page, added sections for endpoint-specific rate limits
Launched an improved Developer Center Introduction page with a handy registry of links using new visual card elements.
Added a new dedicated Getting Started guide: Check Delivery Status
New Tutorials:
Launched a new section with our first use case study:
Developer Center launches! A new, comprehensive space for new guides, tutorials and API reference material for Mobile Text Alerts.
Launched with a full suite of Message Sending Tutorials, Messaging Route Guides and a step-by-step Getting Started flow.
Learn how to use the Mobile Text Alerts API to add a subscriber to your account
The MTA API allows you to view, add, edit, and remove subscribers from your account just like you can from the platform dashboard page. This page will guide you through adding a subscriber with the API.
Subscribers can be added via the API with a POST request to the /subscribers endpoint. A phone number (number) or email address (email) is required. If you add a phone number or email of a subscriber that already exists on the account, this will update the existing subscriber with any changes.
Below is an example cURL POST request to the /subscribers endpoint to add a new subscriber.
To view all possible request parameters see:
If valid, a response will be returned with the message: "Subscriber created successfully."
Learn how create a request to the Mobile Text Alerts API that will send a message.
curl -L \
-H 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258' \
'https://api.mobile-text-alerts.com/v3/auth/verify-api-key'//Example successful response
{"message":"API Key verified",
"data":{"name":"Account111111111","email":"[email protected]"}} 
New to using a REST API or just getting started with the MTA API? Start here:
Step through Tutorials to learn more about common actions with the API
Have a question about how to use Mobile Text Alerts API?
Recipient(s):
subscriberIds: number[] - List of subscriber IDs of recipients. Messages can be sent to specific subscribers, with each subscriber assigned a unique subscriberId.
subscribers: (number | string)[] - List of recipient phone numbers or email addresses. A new subscriber will be created for new recipients that are not already subscribers on your account.
allSubscribers: boolean - Flag to indicate send message to all subscribers if true. When allSubscribers is set to true, no other recipient fields should be specified. Default value is false.
groups: number[] - List of group IDs of recipients. Messages can be sent to specific groups, with each group assigned a unique groupId.
threadId: number - Messages can be sent in reply to a thread, with each thread assigned a unique threadId.
Content:
message: string - The content of the message being sent.
image: string - The URL of an attachment for a message. By default, messages with attachments (image) will be sent as an MMS. This URL needs to be publicly accessible; this ensures Mobile Text Alerts can access it when sending.
templateId: number - Messages can be saved as pre-set for reuse with saved controlled templates on your account assigned a templateId.
If using a templateId of a template that requires a link, then a linkId is also required.
Let's create a simple request to the /send endpoint.
Click here to learn more about how to customize your message sends.
View more Subscriber API Endpoints
See the different tutorials for ways to send messages with the MTA API
Mobile Text Alerts provides multiple SDKs to help you integrate with Mobile Text Alert's API across different platforms and languages.
An SDK (Software Development Kit) is a collection of tools, libraries, documentation, and code samples that developers can use to build applications for a specific platform, framework, or service. It provides a pre-packaged toolbox so developers don't need to worry about low-level implementation details and provides a higher-level interface for interacting with a system.
Learn how to send iMessages via the API
Once your subscribers begin , you're ready to send iMessages to them. Mobile Text Alerts will automatically capture and record the inbound opt-in messages and internally flag your subscribers as iMessage enabled and opted-in. Remember, opt-ins are tied to a specific Sender Identity, so you must receive inbound consent from a subscriber on each Sender Identity you plan to use to send messages to them.
When sending iMessages via API, you need to specify a Sender Identity and Mobile Text Alerts will handle routing messages intelligently based on current subscriber status. For the subscribers included in a /send call, the system will verify whether they are enabled for iMessage and then route messages through your Sender Identity. Graceful is also supported.
Create Chatbot
Get Chatbot
Update Chatbot
List Chatbots
"subscribers": [1112223333]curl -XPOST --location 'https://api.mobile-text-alerts.com/v3/subscribers' \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258'
--header 'Content-Type:application/json' \
--data-raw '{
"firstName": "FirstName",
"lastName": "LastName",
"number": 8002223333,
"email": "[email protected]"
}'//Example successful response
{
"message":"Subscriber created successfully.",
"data":
{
"id":109021633,
"firstName":"FirstName",
"lastName":"LastName",
"email":"[email protected]",
"number":8002223333,
"e164Number":"+18002223333",
"date":{"val":"CURRENT_TIMESTAMP"},
"countryId":209,
"groups":[],
"subscriberFieldData":[],
"signupMethod":5,
"longNumber":8002223333,
"carrierId":"41"
}
}The Mobile Text Alert SDKs are code libraries that wrap the Mobile Text Alert's REST API to simplify operations like authentication, sending messages, listing subscribers, and all functionality of the API. Instead of manually constructing HTTP requests with proper headers and authentication, you can instead call predefined methods for all your operations. The SDK makes things easier by automatically handling things such as request formatting, error handling, and retry logic.
Before making requests you will need to generate an API Key to securely access the API. This requires you to have a free API account.
Don't have account yet? Click here to create your free account.
See below to learn more about available official supported SDK libraries:
Learn more about how to customize your message sends with the API:
Learn how to receive message responses and to reply to them with the API
Learn how to use Message Templates in send requests to the API:
When calling the /send endpoint of the API, include the senderName in the request to directly specify the exact sender name to use without needing to include a longcodeId .
The Sender Identity must be indicated with either senderName or longcodeId.
When calling the /send endpoint of the API, you can also include the longcodeId in the request, this will be used as a fallback to senderName. When a longcode has an associated iMessage Sender Identity, Mobile Text Alerts will use that identity for iMessage enabled recipients.
See Send a Message to learn more about making a /send call to the API.
When sending messages via the iMessage route, you will receive webhooks from Mobile Text Alerts just as you would for other messaging routes (such as SMS). For messages routed via iMessage, you will receive delivery-status callbacks as the message's status changes through the process of sending.
For webhook calls for iMessage message-send or message-reply events, the payloads will include the senderName field to identify the sender "in-scope" with sending that message when sent via iMessage. For message replies, this is the senderName that the inbound reply was sent to.
When inbound messages are sent to your Sender Identities, Mobile Text Alerts will deliver message-reply webhooks consistent with inbound SMS messages.
Click here for more information on configuring webhooks for your account.
Learn more about REST APIs and how to interact with them.
API stands for Application Programming Interface. APIs enable communication between two software components, typically a client and a server. The application sending the request is the client, and the application sending the response is the server. When interacting with the Mobile Text Alerts API, the Mobile Text Alerts database is the server, and you send requests as the client.
There are different types of APIs, the MTA API is a REST API.
REST stands for Representational State Transfer, a REST API is a way for software systems to communicate using HTTP. The main principle of REST APIs is statelessness, which means each request from a client to a server must contain all the information needed (no session stored on the server). The server processes the request and returns the necessary data as plain text.
HTTP methods indicate the action the client would like to perform on a given resource. Examples of possible actions when calling the Mobile Text Alerts API: send a message, add/delete a subscriber, create a drip campaign, and many more.
Each HTTP method is mapped to a specific operation and is included with every request to the API.
GET - Retrieves data from the server.
Example: A GET request to the /subscribers endpoint would return a list of all subscribers.
POST - Sends data to the server to create something new.
After making a request to the API, it will return a response that contains the following information:
- This three-digit code indicates the outcome of the request
Example: 200
- This provides metadata about the response.
Learn about Rich Communication Services (RCS) messaging and how it is used for businesses with RBM (RCS Business Messaging)
RCS stands for Rich Communication Services, which is a next-generation messaging protocol that upgrades traditional SMS/MMS by allowing more dynamic and secure conversations.
Richer message content- RCS allows sending high-resolution images, videos, audio messages and other rich media without strict file size limits.
More features and capabilities- RCS messages support read receipts, typing indicators, and group chats.
Message delivery and connectivity- RCS uses data or Wi-Fi to send/receive messages which can result in faster and more reliable message delivery.
Increased security
RCS is currently available for virtually all Android phones (including Samsung) via the Google Messages app.
Apple introduced RCS support in iOS 18 with supported carriers, allowing iPhone users to send and receive messages with Android users using the RCS standard. RCS messages will appear in green text bubbles, while iMessages appear in blue.
Note that RCS messages with Apple devices aren’t end-to-end encrypted.
RCS Business Messaging, or RBM, is a messaging platform that allows businesses to engage with customers by sending RCS messages. Messages sent via RBM agents will use RCS as the messaging route.
RCS Business Messaging can provide customers with a more engaging and interactive experience.
An RCS Agent is the digital identity of the brand seen by the customer when sending RCS messages. This is similar to a Sender ID for SMS message, but with added features such as the brand name, logo and a “verified sender” check mark. This adds branding to conversations, creating a more interactive experience that helps businesses build stronger connections with more trust for customers.
An RBM Agent initiates conversations with customers based on pre-defined triggers. Unlike SMS, a customer can’t text in a keyword to a brand’s RCS agent to hear more, but they can reply to sent messages to create a two-way conversation.
Mobile Text Alerts handles the complexities of agent deployment on every RCS supported carrier network, allowing RCS to easily become another messaging channel for your brand.
When sending RCS messages via the API, Mobile Text Alerts will handle routing messages intelligently based on current subscriber status. For the subscribers included in a /send call, the system will verify whether they are enabled for RCS and then route messages through your agent.
There is also support to configure selecting and sending via multiple brands/agents, and graceful fallback to SMS. See to learn more.
Learn how to connect to the MTA Actions MCP server with Claude (web or Desktop)
The free version of Claude.ai and Claude Desktop cannot connect to remote MCP servers, you must have a Team/Pro/Enterprise account.
On Claude Desktop free users are currently only able to install local MCP servers. We're working to develop a local-friendly version of our MCP servers where possible.
Open Claude (web or Desktop app) and click the "Search and tools" icon and select Manage Connectors.
Under Connectors, click Add custom connector (or + Add) to begin the connection process.
Paste the following MCP Actions Server URL into the connector URL field:
Example prompt: “Using the Mobile Text Alerts connector, list available tools” — Claude should show tool names (Send Message, Schedule Message, Add Subscribers).
When Claude uses this tool, you'll see it appear in the chat view with the MTA name and logo. This can be expanded to view the exact parameters passed in the tool call.
Visit to learn more about custom connectors using remote MCP.
Learn the basics of iMessage
iMessage is Apple's proprietary, free, and encrypted messaging service for sending text, photos, videos, and more between Apple devices (iPhone, iPad, Mac, Apple Watch, and Apple Vision Pro) using Wi-Fi or cellular data. Known for its "blue bubbles", with iMessage users can send and receive messages with each other, similar to SMS, MMS, or email. iMessage is a secure message ecosystem, with high user trust for sending and receiving iMessages. It is estimated that there are over one billion iMessage users across the globe.
Globally iMessage has become a highly trusted method of communication due to its security features and ubiquity. iMessages can have a broader reach and better engagement by using an identity synonymous with your brand.
iMessage also has a much higher throughput in terms of media sizes for attachments, which enables higher resolution photos and even videos.
Learn the types of parameters used in a request to the Mobile Text Alerts API.
Header parameters are included in the request header, all requests to the Mobile Text Alerts API require a valid Authorization header. See Request Headers to learn more.
Path parameters (sometimes called path variables) are part of the endpoint itself and are not optional when making a request to certain endpoints.
For example, when calling the Update Drip Campaign endpoint:
The {dripCampaignId} is a string that identifies the id of the campaign to be updated.
The request body contains the actual data being transferred. This is particularly important in methods such as POST, PATCH, and DELETE, where data is sent to the server. This data is typically sent as JSON.
For example, when calling the Update Drip Campaign endpoint, the name and endDate of a campaign can be updated in the request body:
Example request to Update Drip Campaign endpoint:
For more information on how to use these endpoints see: Manage Subscribers
Create Subscriber POST /subscribers
Get Subscriber GET /subscribers/{idOrNumberOrEmail}
Update Subscriber PATCH /subscribers/{idOrNumberOrEmail}
Delete Subscriber
List Subscribers
Export Subscribers
See for large scale subscriber updates.
Create Smart Reply POST /smart-replies
Get Smart Reply GET /smart-replies/{id}
Update Smart Reply PATCH /smart-replies/{id}
Delete Smart Reply DELETE /smart-replies/{id}
List Smart Replies
Information on Rate Limits
An API rate limit is a restriction on the number of requests a client can make to an API within a given period of time.
Most Mobile Text Alerts API endpoints have a general rate limit of 30 requests per minute per IP address. However, some individual endpoints may override the general rate limit (see below).
Learn more about AI-powered features available with Mobile Text Alerts
Mobile Text Alerts has many built-in AI features to help simplify using our services, and if you’re using AI tools like Claude or Cursor, you can integrate these tools with MTA. MCP (Model Context Protocol) servers for Developer Center and the MTA API can help your AI assistants integrate easily with Mobile Text Alerts.
In the , there are several built-in AI powered features such as:
Learn how to utilize MTA's Actions MCP Server
Mobile Text Alerts offers a robust and powerful Model Context Protocol (MCP) server, unlocking the capabilities to send and manage SMS messaging directly by an AI assistant. This server allows AI assistants and other applications to access your Mobile Text Alerts account from beyond our web and mobile app platforms.
"message": "Use promo code TESTMESSAGE for 5% off when you sign up. STOP to end"curl --location 'https://api.mobile-text-alerts.com/v3/send' \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258' \
--data '{"subscribers": [1112223333],"message": "Use promo code TESTMESSAGE for 5% off when you sign up. STOP to end"}'{
"data": {
"messageId": "uuid",
"totalSent": 1,
"totalFailedInternationalRecipients": 0
},
"message": "Message Sent to 1 Recipient."
}Success
Indicates a successful request and will contain response headers with addition details about the request.
400
BadRequestError
Indicates that the request was malformed or invalid.
401
UnauthorizedError
Indicates that the client is not authorized to access the requested resource. Make sure you are including a valid API Key in the request header.
403
ForbiddenError
Indicates the client is authenticated but not authorized to access the requested resource.
429
RateLimitError
Indicates too many requests to the server within a window of time, exceeding the allowed rate limit for that endpoint.
500
InternalServerError
Indicates the server encountered an unexpected error that prevented it from fulfilling the request. This usually means there is an issue with the server, not the request.

Example: A POST request to the /send endpoint would create a new message(s).
PATCH - Updates existing data on the server.
Example: A PATCH request to the /threads/{threadId}/read endpoint would update the thread specified with {threadId}as Read.
DELETE - Removes existing data on the server.
Example: A DELETE request to the /groups/{groupId} endpoint would remove the group specified with {groupId}.
Example: Content-Type, Date
Response Body/Payload- This is the actual data content of the response.
Example:
Note: The "Advanced settings" section can be left blank. The Mobile Text Alerts MCP server uses the latest OAuth 2.1 specification with Dynamic Client Registration.
Next click Add. You should see the new "Mobile Text Alerts" connector listed under Connectors.
Configure the authentication with one of the following methods:
OAuth (recommended): Click Connect to launch the MTA connection flow, where you will be redirected to the Mobile Text Alerts platform to login. After logging in (or if already logged in), you'll be presented with an authorization screen that confirms you'd like to connect your account with Claude. Click "Allow"
Bearer Token: Copy your Mobile Text Alerts API Key in the connector’s Authorization header.
After a successful authorization, you will be redirected back to the Claude Connector settings page. The Connect button should now be replaced with a Configure button. This allows you to view the tools registered with Claude and control individual tool settings, such as enabling/disabling and controlling how/when Claude can use a particular tool.
You can now use this connector. Test it by asking Claude something that uses the MTA Actions server.
The Actions MCP server is a remote server hosted at the following URL:
You can authenticate with the following methods:
The server adheres to the latest MCP specification and implements a fully compatible OAuth 2.1 flow with Dynamic Client Registration (DCR). Link your Mobile Text Alerts account simply by logging in and authorizing your AI assistant to access your account.
The Actions MCP server also accepts a Mobile Text Alerts API key via the Authorization header using Bearer Token Authentication. By providing this key, you are implicitly authorizing your AI assistant or agent to access your MTA account
See Get an API Key to learn how to get an API Key.
The Actions MCP server supports multiple tools, enabling your AI assistant access to the following actions with the MTA API:
Send Message - This sends a message immediately, for scheduling messages to be sent at a future time, use the Schedule Message tool (below).
Schedule Message - Schedule a message to be sent at a specific future date/time.
Add Subscribers - Add or update your subscribers in bulk.
Create Group - Create a regular or adaptive group in Mobile Text Alerts.
Need additional help or have questions? Send an email to [email protected] or use our support chat on mobile-text-alerts.com and indicate your question is about the Mobile Text Alerts MCP server.
{
"data": {
"messageId": "uuid",
"totalSent": 1,
"totalFailedInternationalRecipients": 0
},
"message": "Message Sent to 1 Recipient."
}https://mcp.mobile-text-alerts.com/mcp https://mcp.mobile-text-alerts.com/mcpHeader structure: "Authorization: Bearer {myAPIKey}"
Example request:
See Get an API Key to learn how to generate and send this key in a request.
Content-Type is an HTTP header that indicates the data type of the request’s message body. This is needed for the server to understand how to process the request data.
Header structure: "Content-Type: application/json"
Example request:
Response headers provide metadata about the response to the client. Most of the MTA API response headers provide information about your individual account's rate limit usage.
RateLimit-Limit
integer
The maximum number of requests that the consumer is permitted to make per window.
RateLimit-Remaining
integer
The number of requests remaining in the current rate limit window.
RateLimit-Reset
integer
The remaining window before the rate limit resets (in milliseconds).
Retry-After
integer
The number of seconds to wait before retrying the request.
Your rate limit usage can be tracked in the X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset response headers.
Some endpoints use account based rate limiting, where the rate limit is determined by the authenticated account instead of the IP address.
25 requests every 15 seconds
5 requests every 15 seconds. A maximum of 1,000 records in a single request.
5 requests every 15 seconds. A maximum of 1,000 records in a single request.
15 requests every 15 seconds
15 requests every 15 seconds
15 requests every 15 seconds
Shorten a Message
Generate an Image
Look for the icon for quick access to these features.
MCP (Model Context Protocol) servers are backend services that extend AI models like ChatGPT, Claude, Cursor with custom tools, data, or functionality.
New to MCP Servers and want to learn more? See MCP Servers.
The content on Developer Center can be downloaded in different formats to be used by Large Language Models (LLMs) to ingest and access. This allows AI systems like ChatGPT, Claude, Cursor, and Copilot to retrieve and provide accurate, contextual responses about the MTA API.
.md pages - All pages of the Developer Center are available as markdown files. Add the .md extension to any page (or click on the Copy menu on the top right, and select View as Markdown) to see the content of that page rendered in markdown, which can be passed to an LLM for more efficient processing than an HTML file.
llms.txt - This is a proposed standard for making web content available in text-based formats that are easier for LLMs to process.
lms-full.txt - Where the llms.txt file contains an index of all the page URLs and titles, the llms-full.txt contains the full content of Developer Center in one file that can be passed to LLMs as context.
You can also ask ChatGPT or Claude questions about the content in Developer Center. Click on the Copy menu on the top right of any page, and select either Open in ChatGPT or Open in Claude. This will feed all the information in Developer Center into the AI so it can answer your MTA-related questions.
This Developer Center GitBook site includes a Model Context Protocol (MCP) server. This allows AI assistants to access the documentation content directly. Your AI tools such as Claude Desktop, Cursor, and VS Code can use this server to access the information to answer questions about how to use MTA features.
https://api.mobile-text-alerts.com/v3/drip-campaigns/{dripCampaignId}
Learn about 10DLC and how to call the API for your account's number information
A 10DLC refers to a 10-digit long code in Application-to-Person (A2P) messaging. A 10DLC is a 10-digit phone number for a business that looks like a standard 10-digit phone number with a geographical area code. 10DLCs, toll-free numbers, and short codes are the three primary number types businesses use to engage in A2P text messaging.
10DLC differ from toll-free phone numbers, which have an “800” area code (rather than an area code that is local to a geographical area), and from short codes, which are 5-6 digits. 10DLC requires a special registration process and must comply with US messaging guidelines.
10DLCs may improve SMS engagement rates. (Receiving a text from a 10-digit number with a local area code can feel more personal than receiving a text from a 5-digit short code or toll-free number.)
10DLCs have much lower costs than dedicated short codes, and in many cases are included for free.
Unregistered 10DLCs typically have better delivery rates than unregistered toll-free numbers.
The registration process costs $15/month (as opposed to toll-free numbers, which are free to register) if you have a low-volume plan.
Unregistered 10DLCs have throughputs of only 60 messages per minute, much lower than toll-free numbers or short codes.
Registered 10DLCs have throughputs of around 150 messages per minute, much lower than toll-free numbers or short codes.
10DLCs have a daily limit of around 2,000 messages.
10DLCs will give you the lowest throughput, at 150 text messages per minute.
The daily limit for 10DLCs is 2,000 messages per day, but can in some cases this can be increased (increases may incur fees from the mobile carriers).
10DLCs allow for sending mass text messages at an affordable cost, using a local area code which can feel more personable to recipients. Though these benefits make 10DLC an excellent SMS solution for many businesses, MTA generally recommends a toll-free number since toll-free numbers are free and have higher messaging speeds.
You can get a free 10DLC with your Mobile Text Alerts account—however, if you would like to register the phone number for better message delivery, the cost is $15/month on the lower plans (it is, however, included for free on most plans).
to learn more about 10DLC, registering your brand and more.
Just as you can view , you can view your all account's numbers and data about them such as name, type, status, and more by calling the endpoint.
Learn how to view the Delivery Status of outbound messages
You can check the delivery status of your message sends with Mobile Text Alerts two different ways:
Call the List Deliveries API endpoint
This is best for reporting/analytics of settled message data. This only includes the most recent status for a message.
Configure the delivery-status webhook
This is best for real time status updates, with this webhook you can receive the full status history from the moment of send to the final result status (delivered, rejected etc.).
With the endpoint of the Mobile Text Alerts API you can see a list of all messages sent to all subscribers or you can use query parameters to filter the results. The message status will show the most recent status of a message.
Example query
Filter messages with a delivered delivery status: (note the [] brackets are escaped characters in the cURL request)
delivery-status webhookA delivery-status webhook event is triggered when MTA receives an updated from a provider regarding a sent message. This is best for real time status updates as you can receive the full status history from the moment of send to the final result status (delivered, rejected etc.).
If you haven't configured webhooks for your account see:
Also view the , to learn what fields are sent as part of this webhook.
Learn how to create Custom Subscriber Attributes to store additional data fields for your subscribers.
Subscriber data is stored with predefined subscriber attributes such as First Name, Last Name, Email, etc. You can create your own fields to store any additional types of data for your subscribers. These Custom Subscriber Attributes can be used to help you organize your subscribers to create send lists, form groups and more.
You can add/update/delete your account's Custom Subscriber Attributes in the or with the MTA API.
The below image shows how custom attributes are shown in the platform dashboard, see to learn more.
Find answers to some frequently asked questions about using the MTA API.
You can send a message to your personal phone number for testing and verification. To do this you would send a request to the /send endpoint with the phone number in the subscribers field and the test message in the message field.
Example request:
Learn about dedicated short codes and how to call the API for your account's number information
A dedicated short code is a 5 or 6-digit phone number for sending and receiving messages that is exclusively owned by a single brand or organization (example: 52001).
Dedicated short codes have the best throughput (rate of messages sent per second) and the most convenience for users (since they are short, easy to remember, and easy to type into a phone). Dedicated short codes allow sends of 100s or 1000s of messages at once, with high deliverability rates.
Learn more about Model Context Protocol and its use cases.
Model Context Protocol (MCP) is an open-source standard developed by in November 2024. MCP defines a shared communication protocol between an AI client (such as a model or assistant) and one or more servers (which provide capabilities, data, or APIs).
MCP servers are backend services that extend AI models like ChatGPT, Claude, Cursor with custom tools, data, or functionality. The goal is to make it possible for AI models to call functions, retrieve data, and work with resources without custom integrations or private APIs. The AI model acts as an MCP client, and includes built-in support for the MCP client interface. When you connect your AI client to an MCP server (such as the MTA MCP Actions server) this allows the model to securely fetch information, run computations, or interact with an external API.
curl -L \
-H 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258' \
'https://api.mobile-text-alerts.com/v3/auth/verify-api-key'// curl --location 'https://api.mobile-text-alerts.com/v3/groups/12345/subscribers/bulk-create' \
--header 'Content-Type: application/json' \
--data '{
"subscriberIds": [
123
]
}'https://developers.mobile-text-alerts.com/~gitbook/mcp{
"name": "<string>",
"endDate": "<YYYY-MM-DD HH:mm:ss>"
}curl --location --request PATCH 'https://api.mobile-text-alerts.com/v3/drip-campaigns/12345' \
--header 'Content-Type: application/json' \
--data '{
"name": "Example Campaign Name"
}'X-RateLimit-Limit
integer
The maximum number of requests that the consumer is permitted to make per window.
X-RateLimit-Remaining
integer
The number of requests remaining in the current rate limit window.
X-RateLimit-Reset
integer
The remaining window before the rate limit resets (in milliseconds).
X-Request-ID
string
A unique identifier for the request.
15 requests every 15 seconds.
For large scale subscriber changes Bulk Create/Update Subscribers endpoints are recommended.
15 requests every 15 seconds
15 requests every 15 seconds. A maximum of 1,000 records in a single request.
See below for details of each step of the process to ensure you have the data required to complete this process.
An initial message is sent, just as other messages, with a request to the /send endpoint of the API. But in order to track this message for potential future replies, this request must contain identifying metadata.
This identifier can be set in either of the following parameters when creating your initial request: externalId or tags .
Either parameter can be used to ensure that the message-reply payload sent your endpoint will contain the necessary data needed for you to create a reply.
The externalId parameter is an optional string field intended for you create and assign your own identifier for each message request. This is strongly recommended as it ensures consistency between your system and Mobile Text Alerts. With an externalId MTA can return this specific identifier in all future webhook calls related to this message.
Example: "externalId": "RequestId-4e0242e2-d101"
You can also use the tags parameter, a general purpose tagging system, as a way to assign any additional data in the request to the /send endpoint. The tags object is tracked with the outbound message record and will be reflected in all webhook calls related to this outbound message. The tags can contain metadata about the recipient, the message send request, an identifier to you external system and any other data for your use case.
Example: "tags": {"ABCompanyId": "4e0242e2-d101"}
A successful /send request will return a messageId as part of the response. This is the unique identifier of the request assigned by Mobile Text Alerts. It is recommended to store this messageId in your system to reconcile with your provided internal identifier.
Message reply notifications, will be sent via message-reply webhook calls. A message-reply event sent to your webhook URL will contains the following field data in the payload that is relevant to sending response messages:
fromNumber - identifies the phone number of the subscriber that sent the reply
externalId - the original string you provided on the initial outbound message
messageId - the internal MTA identifier for this inbound message reply
message - (SMS/text only replies) the full contents of the subscriber's reply.
url - (MMS replies) a URL where the inbound media has been re-hosted. If you plan to use this supplied media within your application, it is recommended that you download and cache this resource for further use.
tags - the original tag metadata you provided on the initial outbound message
Refer to the message-reply webhook payload for additional field information.
The fromNumber identifies the phone number of the subscriber that replied, but that subscriber may receive messages from different numbers on your account or may be replying to different messages at different points in time. To avoid this confusion, instead of associating your reply to a subscriber, it is best to associate a reply to an outbound message.
You can determine the initial outbound message being replied to by retrieving the original outbound message from your system, using the externalId and/or tags in the reply payload. This enables your application to produce a consistently ordered chain of messages, both outbound and inbound, needed to support 2-way conversations.
To form your response message request, you can reuse the initial outbound number by setting the same longcodeId value in the /send request that was previously used for the original outbound message. Set the recipient to the value of the fromNumber. Ensure that you provide a new internal identifier for this outbound message in order to repeat this process of send and reply.


10DLC registration requires that your business/organization has an EIN/tax ID, so it is not always a good solution for sole proprietors or new businesses.
10DLCs aren’t as convenient as dedicated short codes, because they are longer numbers.

query
string
The query string will return all subscribers with this value in either firstName, lastName, number, or email.
filters[startDate]
date in format: YYYY-MM-DD
Filter results to only show results after a specified start date.
filters[endDate]
date in format: YYYY-MM-DD
Filter results to only show results before a specified end date.
filters[type]
string enum:sms|mms|tts
Filter results by message type, choose one of the following type codes: sms|mms|tts.
filters[status]
string enum:sent|delivered|undelivered|undeliverable|unknown|rejected
Filter results by delivery status, choose one of the following status codes: sent|delivered|undelivered|undeliverable|unknown|rejected.
page
number
Specific page number to retrieve.
pageSize
number
Number of results per page.
sortBy
date
Field to sort results by date.
sortDirection
ASC|DESC
Direction to sort results by, choose either ASC for ascending or DESC for descending.
/custom-fields . Custom Fields was the previous name for what is now called Custom Subscriber Attributes. Available API actions:
A new Custom Subscriber Attribute can be created for your account by calling the POST /custom-fields endpoint.
Request Body
See all Custom Subscriber Attributes that have been created on your account by calling the GET /custom-fields endpoint.
Rate Limit
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests per 15 seconds.
You can make changes to existing Custom Subscriber Attributes that have been created on your account by calling the PATCH /custom-fields/{customFieldId} endpoint with the identifying {customFieldId} of the attribute to be updated as a path parameter.
Request Body
In the below example, we are updating customFieldId: 7769 with a new name.
Custom Subscriber Attributes can be deleted without needed to supply a request body. Simply include the {customFieldId} of the group to be deleted as a path parameter with your DELETE request.
(Deleting attribute with id :7769)
List the data for just the specified Custom Subscriber Attribute by calling the GET /custom-fields/{customFieldId} with a path parameter containing the {customFieldId} of the attribute to be retrieved.
Example Response (for a date type attribute)
Once you have created Custom Subscriber Attributes on your account you can start adding custom data to your subscribers. See Assign Custom Subscriber Attributes to learn how to add and edit these attributes for your individual subscribers.
After you have these attributes assigned to your subscribers you can use Custom Subscriber Attributes as a condition attribute for your Adaptive Groups.

Yes, the Mobile Text Alerts SMS Verification API provides an easy way to manage SMS multi-factor authentication workflows within your application. There are endpoints for verification code generation, delivery of SMS messages and validation of user supplied codes. See Generate and validate 2FA / MFA codes via SMS to learn more.
A successful request will provide the following information in the response:
messageId- the unique id of the message
totalSent- the total number of recipients of the message
totalFailedInternationalRecipients- the total number of failed recipients with non-US phone numbers.
message- a summary of request results
See How to build a sample request to the API to learn more about the request and response data for the /send endpoint.
You can indicate the time a message will be sent by including the scheduledDate request field when calling the /send endpoint. This allows you to use ISO8601 format to indicate the exact date and time a message is sent.
Enter the time to send the message in the scheduledDate field as part of the request.
Visit to learn more.
Yes, you can refer to subscribers by name in your message by using a Liquid Template variable in the properties field. The properties field contains a map between the individual subscribers and the values of these variables assigned to them.
In the below example request, the firstName variable is used to reference the name values for the recipients. The name of each recipient is defined in properties for each subscriber number.
Visit to learn more.
In order to receive message reply notifications, you must configure a message-reply webhook. Once configured, when MTA receives an an inbound message from a provider will post the inbound message to this endpoint.
See Receive and Reply to Messages to learn more.
Subscribers can be added with the but for large imports the Bulk Create Subscribers endpoint is recommended to save on request round trip time and overall API call volume to avoid hitting rate limits.
You can check the delivery status of your message sends with Mobile Text Alerts two different ways:
Call the List Deliveries API endpoint
This is best for reporting/analytics of settled message data. This only includes the most recent status for a message.
Configure the delivery-status webhook
This is best for real time status updates, with this webhook you can receive the full status history from the moment of send to the final result status (delivered, rejected etc.).
Yes, if you're interested in sending iMessages and want to participate in our beta program, please reach out to your account manager to notify them of your interest.
See Send an iMessage to learn more.
Dedicated short codes have a much higher SMS throughput volume (starting as high as 350 messages per second or 21,000 messages per minute). So messages will go out faster than with 10-digit numbers.
Dedicated short codes are convenient for your audience because they are typically 5-6 digits.
Registration is required to use a short code in any capacity.
Dedicated short codes are the most costly SMS marketing option, with a one-time $2,500 provisioning fee and a $600/month leasing fee (premium and vanity codes may cost more).
Set-up time is significantly longer than other options, as it can take anywhere from 3 weeks to 4 months to get final approval from the mobile carriers.
Short code numbers give you the highest throughput by far, at as much as 21,000 text messages per minute.
Unlike 10DLCs, short code numbers have no daily limits.
Dedicated short codes cost significantly more than other messaging options, so we recommend dedicated short codes as the best fit for businesses with a more robust budget who have a large number of messages to send on a regular basis.
There are three types of dedicated short codes. You can lease each one of these or migrate your existing dedicated code through Mobile Text Alerts.
Premium short codes allow spelling out a brand name or a significant word using a mobile phone’s dial pad. These codes create memorable customization, but may be pricier than other options.
Examples: 827438 for “Target” or 262966 for “Amazon."
Vanity short codes are numbers that you can select from a list of available codes. With this option you can choose a code that is easy for your customers to remember.
Depending on the options available, you may even be able to select a code that fits your brand without paying the full price of leasing a premium short code.
Random short codes are short numbers that are randomly assigned.
The benefit of choosing a random short code is that you receive all the same short code features for a lower cost than a premium or vanity short code.
If you’d like to lease a dedicated short code for your business, you can contact us.
Just as you can view Your Numbers on the platform dashboard, you can view your all account's numbers and data about them such as name, type, status, and more by calling the /dedicated-numbers endpoint.

When building or extending AI applications, one of the key challenges is connecting the model’s reasoning layer with real-world data and services. LLMs train on data and context (usually human-readable text) but can’t easily gain knowledge from external services.
Before MCP, custom integrations to specific tools were created to give the AI access to external features, but these integrations were specific to that LLM and tool. So an open standard was created so that all AI tools could communicate with services in the same way.
Standardized Integration: Instead of building custom APIs or plugins for each data source or service, you can connect via MCP. Different AI systems (such as Claude, ChatGPT, or Cursor) can all interact with the same MCP server.
Security and Context Control: MCP supports permissions and clear data boundaries, ensuring AI models can access only the intended resources.
Dynamic Context Enrichment: AI models can request and use live data—from databases, code repositories, monitoring systems, or alerts—directly in context, improving output accuracy and reducing hallucination.
Local and Remote Flexibility: MCP works both with (for secure or offline data) and (for distributed or shared services).
MCP servers can be deployed locally or remotely, depending on your use case, security needs, and environment.
These servers are hosted externally, usually as web services or API endpoints, and made accessible via standard MCP protocol connections.
Integrating with SaaS products (e.g., analytics dashboards, notification systems, CRM data).
Providing organization-wide AI access to shared tools or datasets.
Allows multiple AI clients to use the same MCP endpoint.
Centralized maintenance and version control.
Easier sharing across teams or projects.
Scalable infrastructure (e.g., using cloud hosting).
Mobile Text Alerts MCP Actions server provides access to the Mobile Text Alerts API, so any AI model configured with it can send messages (and other actions) securely.
Local MCP servers are installed as packages or modules directly on a developer’s system or inside a controlled environment. They typically run alongside an AI client and expose capabilities locally.
Interacting with local files, codebases, or development tools.
Testing or prototyping custom MCP capabilities.
Keeping sensitive data fully offline.
Data never leaves the local machine.
Low-latency performance for local context access.
Easy to customize or extend for specialized workflows.
A developer might install a local MCP package that lets an AI assistant read and refactor code in the current project directory or execute local scripts securely.
This Developer Center GitBook site includes a Model Context Protocol (MCP) server. See Developer Center MCP Server to learn more.
This server hosted by Mobile Text Alerts enables users using AI assistants to send SMS right from within their AI workflows. See MTA Actions MCP Server to learn more.
By standardizing communication between AI clients and external tools, MCP simplifies integration, strengthens security, and unlocks more capable and context-aware AI applications.
For full technical details and protocol specifications, visit modelcontextprotocol.io.
Learn about Toll-Free numbers and how to call the API for your account's number information
Toll-free SMS numbers are 10-digit numbers with an 800 “area code” as the leading digits (example: 800-780-8000).
Text-enabled toll-free numbers allow you to send messages at decent messaging speeds without adding extra fees.
All accounts at Mobile Text Alerts include a dedicated toll-free number for free.
Toll-free numbers must be verified, this reduces the risk of filtering your message traffic. This is a mandatory industry-wide process that whitelists your text messaging traffic.
When you first create your account, you will need to enter your Brand Registration information. This includes your company's contact information, expected messaging use case and messages, and a Privacy Policy for compliance. After submitting this information, MTA will submit your Toll-Free number to carriers for approval.
You can call the endpoint of the API to see the status of your toll-free number(s) with the field..
The registration process for toll-free numbers is free.
Toll-free numbers usually allow for higher messaging speeds than 10DLCs (1,200 messages per minute as opposed to 150 messages per minute).
Toll-free number registration doesn’t require an EIN/tax ID, so sole proprietors and very small businesses may have an easier time getting registered.
Toll-free numbers have no daily limits, unlike 10DLCs which have a daily limit of around 2,000.
Toll-free numbers generally have much slower messaging speeds than short codes (though they are faster than 10DLCs).
Toll-free numbers may not seem as personable (and therefore not get as much engagement) as 10DLC’s because the “area code” is a generic 800 number.
Toll-free numbers aren’t as convenient as dedicated short codes, because they are longer numbers.
Toll-free numbers will give you significantly higher throughput than 10DLC’s, at 1,200 text messages per minute.
Unlike 10DLCs, toll-free numbers have no daily limits.
Mobile Text Alerts generally recommends toll-free numbers over 10DLCs because registration for toll-free numbers is always free, and they have faster messaging speeds. But they do sacrifice the benefit of a personal area code, businesses with a more robust budget may want to consider a dedicated short code.
A dedicated toll-free number is included for free with any Mobile Text Alerts subscription. You can get started in seconds to test it out for yourself and for your business today.
Make sure to submit the Brand Registration form that appears at the top of the main dashboard page when you log in to your account.
Just as you can view , you can view your all account's numbers and data about them such as name, type, status, and more by calling the endpoint.
This endpoint will return the verification status of your toll-free number(s) with tollFreeVerificationStatus this is an ENUM value (0-5) that corresponds with the following statuses:
0 - Not Submitted
1 - Verification Form Complete
2 - Submitted for Review by Carriers
Learn how to set up webhooks with the Mobile Text Alerts API
With Mobile Text Alerts webhooks you can receive real time notifications of events, such as: sent messages, message replies, and delivery statuses. With the Mobile Text Alerts API you can register, delete, and view the webhooks on your account.
Webhooks are a way for applications to communicate with each other, with real-time data sent from one application to another whenever a given event occurs. For events you want to be notified of, you can configure a webhook to your specified URL.
For example, when a user replies to a message that was sent; MTA receives the inbound message from a provider and will post the inbound message to your provided endpoint.
The Mobile Text Alerts API supports the following event types for webhooks:
message-replyWhen MTA receives an an inbound message from a provider, MTA will post the inbound message to the customer provided endpoint.
View
delivery-statusWhen MTA receives an updated delivery status from a provider regarding a customer's sent message.
View
message-sendWhen MTA send a message to a provider, MTA will post the message to the customer provided endpoint.
View
number-opt-inYou must receive an inbound opt-in message before you send outbound and . This webhook will post the opt-in event to the customer provided endpoint.
View
When registering a webhook, you can choose to receive emails if MTA fails to send a request to your configured URL or a non-200 response code was received. To receive these email alerts: when registering a webhook, set sendAlertEmail to true , with alertEmail set to the intended email address.
POST /webhooks
Webhooks can be created for your account by calling the Register Webhooks /webhooks endpoint of the MTA API.
Headers
Request Fields
Response
Learn how you can add and update the Custom Subscriber Attributes assigned to your individual subscribers.
Custom Subscriber Attributes are used to store data of any type that you choose to define for your subscribers. These attributes can be added and updated manually through the platform, automatically from your subscribers via SMS with a workflow, and with the MTA API.
Visit the tab in the platform dashboard by selecting Subscribers > Attributes. Here you can view and search all attributes currently available for your subscribers.
Click on a specific attribute to edit it, or click the "trash bin" icon to delete an attribute.
Click the Add Attribute button.
Enter the Name of the new attribute.
Select the from the following data types under Attribute Type:
Text
Example: To create a field to store subscribers' birthdays, you could create the following attribute:
Name: "Birthday" with the Attribute Type: Date.
After your attributes are created, you can assign the data for those attributes to your subscribers manually on the page, or by importing a spreadsheet.
You can also configure your account's to collect subscriber data as part of the enrollment process.
Workflow Builder allows you to automatically collect data from your subscribers via SMS.
.
Subscriber attributes can be added or updated by including key/value pairs in subscriberFields as part of the request body to one of the endpoints.
The data type of the Custom Subscriber Attribute must match what is configured for that field. For example, the below request uses the following Custom Subscriber Attribute: "name":"Birthday","type":"date","format":"MM/DD/YYYY"
MTA will assign each custom attribute a SubscriberFieldId and each subscriber attribute will have a unique id assigned for that instance. This data can be retrieved by viewing the subscriber data from the API.
Custom subscriber attributes are returned by the Mobile Text Alerts API in the field subscriberFieldData which contains:
id - Refers to the specific instance of that field for the specified subscriber
subscriberFieldId - Identifies the CustomFieldId of the Custom Subscriber Attribute, this can be used to .
data - the data of this field for the specified subscriber
For example when retrieving a subscriber's data from :
Get Webinar GET /webinars/{webinarIdentifier}
List Webinars GET /webinars
List Webinar Events GET /webinars/events
Trigger SMS Verification Code POST /verify/sms/send-code
Check SMS Verification Code POST /verify/sms/check-code
Get Verification GET /verify/{verificationId}
List Verifications GET /verify
Verify Phone Number
Get Default Reply GET /automated-replies/default-reply
Update Default Reply PATCH /automated-replies/default-reply
Get New Subscriber Reply GET /automated-replies/new-subscriber-reply
Update New Subscriber Reply PATCH /automated-replies/new-subscriber-reply
View the steps to sending iMessages with Mobile Text Alerts
Get Controlled Template
List Controlled Templates
List Dedicated Numbers
List Short Codes
For more information on how to use these endpoints see:
Get Bulk Adaptive Group Member Count
Bulk Add Subscribers to Group
Bulk Remove Subscribers from Group
Create Deeplink
Create iMessage Deeplink
curl --location 'https://api.mobile-text-alerts.com/v3/dedicated-numbers' \
--header 'Authorization: Bearer 3068eebf-7611-5458-830e-65tf055a0b95'{"data":
{"rows":
[{"name":"Main Phone Number",
"created":"2025-01-27T15:26:48.000Z",
"longcodeId":10721,"number":"8332298025",
"tollFree":1,
"isShortcode":0,
"branded":0,
"pending":1,
"verified":0,
"countryCode":"US",
"users":{},
"type":"Toll-Free",
"status":"Basic",
"deliveryRate":0,
"tollFreeVerificationStatus":0,
"tollFreeVerificationSubmissionDate":"2025-03-25T18:21:23.276Z"
}],
"page":0,"pageSize":25,"total":1
}
}
curl --location 'https://mobile-text-alerts.com/v3/deliveries??filters%5Bstatus%5D=delivered'\ ’ \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258'curl --location 'https://api.mobile-text-alerts.com/v3/custom-fields' \
--header 'Authorization: Bearer 6078eebf-7661-5458-330e-74cd055a0b08'curl -L \
--request PATCH \
--url 'https://api.mobile-text-alerts.com/v3/custom-fields/7769' \
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03' \
--header 'Content-Type: application/json' \
--data '{
"name": "New Name"
}'curl --request DELETE --location 'https://api.mobile-text-alerts.com/v3/custom-fields/7769'
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03' curl --location 'https://mobile-text-alerts.com/v3/custom-fields/7769'\
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03'{"data"{"id":7769,"accountId":1195226,"name":"Birthday","type":"date","options":[],"format":"MM/DD/YYYY","created":"2025-07-17T20:51:34.000Z"}}curl --location 'https://api.mobile-text-alerts.com/v3/send' \
--data '{"subscribers": [1112223333],"message": "Hello World"}'curl --location 'https://api.mobile-text-alerts.com/v3/send' \
--data '{"subscribers": [1112223333],"message": "Hello World", "scheduledDate": "20260302T173000-0500"}'{
"subscribers": ["3175551111", "3175552222"],
"message": "Hello {{firstName}}!",
"properties": {
"3175551111": {
"firstName": "Bob",
},
"3175552222": {
"firstName": "Tony",
}
}
}curl --location 'https://api.mobile-text-alerts.com/v3/dedicated-numbers' \
--header 'Authorization: Bearer 3068eebf-7611-5458-830e-65tf055a0b95'{"data":
{"rows":
[{"name":"Main Phone Number",
"created":"2025-01-27T15:26:48.000Z",
"longcodeId":10721,"number":"8332298025",
"tollFree":1,
"isShortcode":0,
"branded":0,
"pending":1,
"verified":0,
"countryCode":"US",
"users":{},
"type":"Toll-Free",
"status":"Basic",
"deliveryRate":0,
"tollFreeVerificationStatus":0,
"tollFreeVerificationSubmissionDate":"2025-03-25T18:21:23.276Z"
}],
"page":0,"pageSize":25,"total":1
}
} 3 - Approved by Carrier4 - Denied by Carrier
5 - Submission Failure Reported by Carrier

sendAlertEmail
boolean
Default value is false .
If true, MTA will send a to the configured alertEmail on the webhook. Iffalse (or not supplied when registering the webhook) no failure email alerts will be sent.
skipErrors
boolean
If set to true, all error responses(non-200) for requests to your configured URL will be ignored. If are configured, they will not be triggered.
skipErrorCodes
string[]
This field can be used to indicate specific error codes to be ignored, failure email alerts will not be sent for these codes.
retryOnError
boolean
If set to true, a retry request will be made to your configured URL if the previous request resulted in an error response. Which responses are errors is determined by if skipErrors is enabled (all non-200 status codes ignored as errors) or skipErrorCodes (all specified error codes ignored as errors).
MTA uses exponential backoff for retry calls, with up to 2 retry attempts.
maxThroughputPerMinute
number
Indicate the maximum number of requests that can be sent to the configured URL in a 60 second window.
Content-Type
application/json
Bearer <APIKey>
event(required)
string
The event type to be registered: message-reply, delivery-status,message-send , or number-opt-in.
url(required)
string
This is your hosted URL endpoint that MTA will make a POST request to when events trigger.
The only requirement for this endpoint is that the response has a 200 HTTP status code.
secret(required)
string
This is shared secret between your organization and MTA, used to authenticate webhook requests. Your webhook listener validates the value in the request with the shared secret.
alertEmail
string
The email address to be contacted for failure email alerts.
If an alertEmail is not configured but sendAlertEmail is set to true, the account's main email will be used.
See the expected event payloads for MTA webhooks:
Just getting started with webhooks?
Number (digits only)
Date (you will need to specify the date format)
Checkbox (a flag option that allows either checked or unchecked)
Option/Multi Options (this will allow you to create an enum of possible options)
Address (text for storing subscriber addresses)



Learn more about sending an MMS with Mobile Text Alerts
MMS stands for Multimedia Messaging Service used for sending messages that include a media attachment. MMS messages have a 500 KB size limit, a 1550 character limit, and a higher credit cost per send than SMS.
1 credit cost per SMS message (160 character limit, no attachment)
3 credit cost per MMS message (1550 character limit, plus 500KB image attachment)
Some situations where MMS is worth using instead of SMS:
Very long text content
Sales-oriented content, where an image would can help drive the call-to-action
Audience is primarily within the US/Canada
A Mobile Text Alerts plan with rollover and/or excess credits
The following file types are supported to use as attachments for MMS:
rehost fieldYou can choose to host the URL of an attachment for an MMS on your own servers, or it can be hosted by MTA. When sending a request to the /send endpoint, if the rehost flag is set to true, the attachment will be rehosted by MTA before sending. This can be useful if the recipient isn't receiving your attachment or you don't want to host the attachment.
MMS are sent via the API with a POST request to the /send endpoint just like SMS, but include the image field for the URL of the attachment that will be sent. All requests to this endpoint must contain both recipient and content information.
Required request fields:
Choose recipient(s): (Must be one of the following)
subscriberIds: number[] - List of subscriber IDs of recipients. Messages can be sent to specific subscribers, with each subscriber assigned a unique subscriberId.
subscribers: (number | string)[]- List of recipient phone numbers or email addresses. A new subscriber will be created for new recipients that are not already subscribers on your account.
Learn how to use Message Templates when calling the Mobile Text Alerts API
Pre-set message templates allow you to create a message once and then have it on hand to send at any time. You can create and send message templates in the platform, mobile app and the API.
Templates can be sent in a message by sending a POST request to the /send endpoint. All requests to this endpoint must contain both recipient and content information. When using a message template, the templateId will be used as the content.
Required request fields:
Choose recipient(s): (Must be one of the following)
subscriberIds: number[] - List of subscriber IDs of recipients. Messages can be sent to specific subscribers, with each subscriber assigned a unique subscriberId.
subscribers: (number | string)[]- List of recipient phone numbers or email addresses. A new subscriber will be created for new recipients that are not already subscribers on your account.
When sending or scheduling a message, the /send endpoint will compose the message body using the provided templateId for a controlled template and, if required by the template, a provided linkId. Links can be created with the /shortlinks endpoint.
You can call GET /templates to see all the available templates on your account:
To see the details on a specific template, you will need the {id} of the template. Then call GET /templates/{id} :
To make changes to a specific template, you will need the {id} of the template. Then call PATCH /templates/{id} with the body containing the new template data, message is required.
Example request:
To remove a specific template, you will need the {id} of the template, then call DELETE /templates/{id}
When creating a new template, the message field is required to hold the content of the message.
Example request:
If your account is configured for template-only message sending, please use the Controlled Template endpoints below to view available templates:
For more information on how to use these endpoints see: Group Subscribers
Create Group POST /groups
Get Group GET /groups/{groupId}
Update Group PATCH /groups/{groupId}
Delete Group
List Groups
Add Subscriber to Group
Delete Subscriber from Group
List All Groups and Member Count
Get Adaptive Group Member Count
See for large group changes in a single request.
Create Link POST /links/shortlinks
Get a tracked Link by ID GET /links/{linkId}
Add Tags to a Link PATCH /links/{linkId}
List and Search all tracked Links GET /links
Get a tracked Link by ID
Validate Subdomain
Update Subdomain
Create Unsubscribe POST /unsubscribes
Get Unsubscribe for Number GET /unsubscribes/{number}
List Unsubscribes GET /unsubscribes
Bulk Unsubscribes POST /unsubscribes/bulk
List Deliveries GET /deliveries
Create Tag POST /link-tags
Get Tag GET /link-tags/{linkTagId}
Update Tag PATCH /link-tags/{linkTagId}
Delete Tag DELETE /link-tags/{linkTagId}
List Tags
Learn how to use the bulk subscriber endpoints, useful for large scale subscriber updates.
When creating or updating many subscribers at one time with the Create Subscriber and Update Subscriber endpoints you can quickly exhaust the available rate limit. The Bulk Create Subscribers and Bulk Update Subscribers endpoints are recommended for handling large subscriber changes via the API, this can save on both request round trip time and overall API call volume.
This endpoint is used to create (or update and create) many subscriber accounts in one request.
CreateOnly ParameterIf set to true the createOnly path parameter indicates the only action should be to create new subscribers and will not update records of existing subscribers. If set to false then both creating or updating (if the subscriber exists) actions will be performed.
Records of subscribers should be in an array.
Required Fields for new subscribers: email or number
This endpoint is used to update many subscriber accounts in one request. The number field is used to identify the subscriber record to be updated , if no number is provided then email will be used an identifier. One of these fields must be provided to identify the subscriber record to be updated.
Records of subscribers should be in an array.
Create Account Variable POST /account-variables
Get Account Variable GET /account-variables/{idOrTitle}
Update Account Variable PATCH /account-variables/{idOrTitle}
Delete Account Variable DELETE /account-variables/{idOrTitle}
List Account Variables
Create Custom Field POST /custom-fields
Get Custom Field GET /custom-fields/{customFieldId}
Update Custom Field PATCH /custom-fields/{customFieldId}
Delete Custom Field DELETE /custom-fields/{customFieldId}
List Custom Fields
Bulk Create Custom Fields
View all the ways you can interact with the API to manage your subscribers
Bulk endpoints can be used to add or delete up to 1,000 subscriber records in a group in a single request.
The POST endpoint can be used to add up to 1,000 subscribers to a single group in a single request.
When adding subscribers to a group you will need the subscriberId of each of the subscribers to add and the groupId of the group that these subscribers will be added to. The subscriberIds
Get Scheduled Message
Update Scheduled Message
Delete Scheduled Message
List Scheduled Messages
Get Thread
Delete Thread
List Threads
Mark Thread as Read
Learn how the SMS fallback is handled for failed iMessage send requests
The iMessage route also supports graceful fallback for several failure scenarios.
Possible reasons an outbound iMessage may fail:
The subscriber is not capable of receiving iMessages
The subscriber has not opted-in via inbound message to the selected Sender Identity
The Sender Identity has been disabled, blocked, or banned
Create Drip Campaign
Get Drip Campaign
Update Drip Campaign
Delete Drip Campaign
For more information on how to use these endpoints see:
Bulk Create Subscribers
Bulk Update Subscribers
curl --location 'https://api.mobile-text-alerts.com/v3/dedicated-numbers' \
--header 'Authorization: Bearer 3068eebf-7611-5458-830e-65tf055a0b95'{"data":
{"rows":
[{"name":"Main Phone Number",
"created":"2025-01-27T15:26:48.000Z",
"longcodeId":10721,"number":"8332298025",
"tollFree":1,
"isShortcode":0,
"branded":0,
"pending":1,
"verified":0,
"countryCode":"US",
"users":{},
"type":"Toll-Free",
"status":"Basic",
"deliveryRate":0,
"tollFreeVerificationStatus":0,
"tollFreeVerificationSubmissionDate":"2025-03-25T18:21:23.276Z"
}],
"page":0,"pageSize":25,"total":1
}
} {
"message": "Webhook 11 created successfully.",
"data": {
"id": 11,
"event": "delivery-status",
"url": "https://www.example.com/app/hooks",
"alertEmail": "[email protected]",
"sendAlertEmail": true,
"skipErrors": false,
"skipErrorCodes": [],
"retryOnError": true,
"maxThroughputPerMinute": 600,
"createdAt": "2022-04-18T05:00:00.000Z"
}
}{
"error": "Invalid request"
}curl -XPOST --location 'https://api.mobile-text-alerts.com/v3/subscribers' \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258'
--header 'Content-Type:application/json' \
--data-raw '{
"firstName": "FirstName",
"lastName": "LastName",
"number": 8002223333,
"email": "[email protected]"
"subscriberFields": {
"Birthday": "01/01/2000"
}
}'{"id":109021626,
"firstName":"Test",
"lastName":"Example",
"email":"[email protected]",
"number":0,
"date":"2025-03-20T19:09:38.000Z",
"countryId":null,
"groups":[],
"subscriberFieldData":
[{"id":21323389,"subscriberFieldId":7506,"data":"01/01/2000"},
{"id":21323390,"subscriberFieldId":7507,"data":"ExampleAttribute"}],
"signupMethod":11,
"longNumber":0,
"carrierId":41
}Our iMessage route is temporarily unavailable
If any of these failures occur, Mobile Text Alerts will fall back gracefully to SMS to deliver your message. This ensures your subscriber will always receive your message, even if there's an issue using iMessage.
Step 1: Get a registered Sender Identity
Step 2: Receive opt-in consent for your subscribers
Step 3: Send iMessages to opted in subscribers
Step 4: SMS Fallback for failed iMessage sends
Step 1: Get a registered Sender Identity
Step 2: Receive opt-in consent for your subscribers
Step 3: Send iMessages to opted in subscribers
Step 4: SMS Fallback for failed iMessage sends
Target audience responds better to media in messages
allSubscribers: boolean - Flag to indicate send message to all subscribers if true. When allSubscribers is set to true, no other recipient fields should be specified. Default value is false.
groups: number[] - List of group IDs of recipients. Messages can be sent to specific groups, with each group assigned a unique groupId.
threadId: number - Messages can be sent in reply to a thread, with each thread assigned a unique threadId.
Content: (Must include at least one of the following)
message: string - The content of the message being sent.
image: string - The URL of an attachment for a message. By default, messages with attachments (image) will be sent as an MMS. This URL needs to be publicly accessible; this ensures Mobile Text Alerts can access it when sending.
templateId: number - Messages can be saved as pre-set message templates for reuse with saved controlled templates on your account assigned a templateId. Visit tutorial to learn more.
Other fields:
rehost: boolean- If the rehost flag is included and is set to true, the attachment will be rehosted by MTA before being sent to the recipients.
The text content of the message should be assigned to the message field and the URL of the attachment to the image field.
Create the API request to the /send endpoint. Remember to include Authorization header.

allSubscribers: boolean - Flag to indicate send message to all subscribers if true. When allSubscribers is set to true, no other recipient fields should be specified. Default value is false.
groups: number[] - List of group IDs of recipients. Messages can be sent to specific groups, with each group assigned a unique groupId.
threadId: number - Messages can be sent in reply to a thread, with each thread assigned a unique threadId.
Content:
templateId: number - Messages can be saved as pre-set message templates for reuse with saved controlled templates on your account assigned a templateId.
Other fields:
linkId: number - if a message contains a linkId then this field is required. Links can be created with the /shortlinks endpoint.
Use the templateId field to indicate which template will be used.
Create the API request to the /send endpoint. Remember to include Authorization header.
List all subscribers and query for subscribers. Includes all subscribers with query value in either first name, last name, number, email, or custom subscriber fields and with filters values in respective categories.
Rate Limit
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests per 15 seconds.
Example Successful Response
Used to add a new subscriber.
Rate Limit
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests per 15 seconds.
Body
Required Fields: email or number
Example Successful Response
Update details of a specific subscriber. If a field isn't specified, then original value is retained, except for groups , where the subscriber will be added as a member to the groups specified and removed from all other groups.
If given a phone number or email that already exists, then this endpoint will return success: false.
Path Variable
When making the request, the Subscriber Id, Phone Number or email must be included as an identifier in the path:
idOrNumber: string
subscriberId: number
Rate Limit
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests per 15 seconds.
Body (all optional)
Example Successful Response
List the data for just the specified (using the path variable) subscriber.
Path Variable
When making the request, the Subscriber Id or Phone Number must be included as an identifier in the path:
idOrNumber: string
subscriberId: number
Rate Limit
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests per 15 seconds.
Example Successful Response
Remove the specified (using the path variable) subscriber.
Path Variable
When making the request, the Subscriber Id or Phone Number must be included as an identifier in the path:
idOrNumber: string
subscriberId: number
A 404 response will be returned if this identifier is not found.
Rate Limit
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests per 15 seconds.
Example Successful Response
Visit Subscribers for full API reference.
subscriberIdgroupIdIn the below example we are adding subscriberId :108767117 and 108767118 to groupId: 187561 .
Successful response: {"message":"Added 2 subscribers to group 187561."
The POST groups/{groupId}/subscribers/bulk-delete endpoint can be used to remove up to 1,000 subscribers from a single group in a single request.
When removing subscribers from a group you will need the subscriberId of each of the subscribers to be removed and the groupId of the group that these subscribers will be deleted from. The subscriberIds parameter in the body of the request accepts an array of subscriberId values, while the groupId is specified as a path parameter.
In the below example we are removing subscriberId :108767117 and 108767118 from groupId: 187561 .
Successful response: {"message": "Removed 2 subscribers from group 187561."}
Get Message Schedule Calendar GET /scheduled/calendar/{year}/{month}
Get Scheduled Message Recipients GET /scheduled/{scheduledMessageId}/recipients
Delete Scheduled Messages for Number DELETE /scheduled/number/{number}
Get Thread Items GET /threads/{threadId}/items
Delete Thread Item DELETE /threads/{threadId}/items
Shorten Message POST /send/shorten-message
Get Message Cost POST /send/cost
Get Message Delivery Time POST /send/messaging-speeds
List Drip Campaigns GET /drip-campaigns
Start Drip Campaign POST /drip-campaigns/{dripCampaignId}/start
Stop Drip Campaign POST /drip-campaigns/{dripCampaignId}/stop
Clone Drip Campaign POST /drip-campaigns/{dripCampaignId}/clone
List Drip Campaign Numbers GET /drip-campaigns/{dripCampaignId}/numbers/{sequenceId}
Create Drip Campaign Message POST /drip-campaigns/{dripCampaignId}/messages
Update Drip Campaign Message PATCH /drip-campaigns/{dripCampaignId}/messages/{messageId}
Delete Drip Campaign Message DELETE /drip-campaigns/{dripCampaignId}/messages/{messageId}
name
string
The name of the attribute.
type
string enum
The data type of the attribute, one of the following:
string
number
date (the date format must be specified in the format
options[]
string[]
For select or multi-select , the list of possible string values are listed here.
format
string enum
name
string
The name of the attribute.
type
string enum
The data type of the attribute, one of the following:
string
number
date (the date format must be specified in the format
options[]
string[]
For select or multi-select , the list of possible string values are listed here.
format
string enum
Learn about subscriber opt in and how do this with MTA's deeplinks
As with SMS, capturing the proper consent and opt-ins from your recipients is critical to successful usage of iMessage capabilities. Capturing opt-ins ensures that your recipients are expecting the iMessage and gives you the opportunity to identify yourself to the recipient. This ensures that your messages are safely delivered and not marked as spam by the recipient.
You must receive an inbound opt-in message before you send outbound iMessages. An explicit iMessage opt-in is required regardless of whether an opt-in was collected for communications via SMS or email. This can be as simple as sending in "Sign me up" to your Sender Identity.
To help facilitate this, Mobile Text Alerts provides a feature that automatically tracks iMessage opt-ins.
Learn how to set up a webhook endpoint on your server which will listen to events sent from MTA
Get Campaign
List Campaigns
Get Campaign Analytics
List Campaign Options
curl --location 'https://api.mobile-text-alerts.com/v3/send' \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258' \
--data '{"subscribers": [1112223333],
"message": "Use promo code TESTMESSAGE for 5% off when you sign up. STOP to end",
"image": "https://imgur.com/gallery/example"
}'{
"data": {
"messageId": "uuid",
"totalSent": 1,
"totalFailedInternationalRecipients": 0
},
"message": "Message Sent to 1 Recipient."
}.jpeg
.jpg
.gif
.png
.bmp.mp4
.mpeg
.ogg
.rn-realaudio
.wav
.3gpp
.3gpp2
.ac3
.webm
.amr-nb
.amr.mpeg
.mp4
.quicktime
.webm
.3gpp
.3gpp2
.3gpp-tt
.h261
.h263
.h264.vcard
.csv
.rtf
.pdf"subscribers": [1112223333]"message": "Use promo code TESTMESSAGE for 5% off when you sign up. STOP to end"
"image": "https://imgur.com/gallery/example"curl --location 'https://api.mobile-text-alerts.com/v3/send' \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258' \
--data '{"subscribers": [1112223333],
"templateId": 101
}'{
"data": {
"messageId": "uuid",
"totalSent": 1,
"totalFailedInternationalRecipients": 0
},"subscribers": [1112223333]curl --location --request PATCH 'https://api.mobile-text-alerts.com/v3/templates/123' \
--data '{
"name": "Updated Template Name",
"message": "This is an updated template message",
"isMMS": true
}'curl --location 'https://api.mobile-text-alerts.com/v3/templates' \
--data '{
"name": "New Template",
"message": "This is a template message",
"isMMS": true
}'"templateId": 101curl --location 'https://api.mobile-text-alerts.com/v3/subscribers' \
--header 'Authorization: Bearer 6078eebf-7661-5458-330e-74cd055a0b03'{"data":
{"rows":[
{"id":109021626,
"firstName":"Test",
"lastName":"Example",
"email":"[email protected]",
"number":0,"date":"2025-03-20T19:09:38.000Z",
"countryId":null,"groups":[],
"subscriberFieldData":[],
"signupMethod":11,
"longNumber":0,
"carrierId":41},
{"id":109021633,
"firstName":"FirstName",
"lastName":"LastName",
"email":"[email protected]",
"number":1112228904,"e164Number":"+1112228904",
"date":"2025-03-21T15:50:54.000Z",
"countryId":209,"groups":[],
"subscriberFieldData":[],
"signupMethod":5,
"longNumber":1112228904,
"carrierId":41},
"page":0,"pageSize":25,"total":2}}curl -XPOST --location 'https://api.mobile-text-alerts.com/v3/subscribers' \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258'
--header 'Content-Type:application/json' \
--data-raw '{
"firstName": "FirstName",
"lastName": "LastName",
"number": 8002223333,
"email": "[email protected]"
}'{
"data": {
"id": 100,
"firstName": "firstName",
"lastName": "lastName",
"email": "[email protected]",
"number": 1234567890,
"date": "2021-01-01T00:00:00.000Z",
"countryId": 0,
"groups": [
{
"id": 100,
"name": "Group A"
},
{
"id": 101,
"name": "Group B"
},
{
"id": 102,
"name": "Group C"
}
],
"subscriberFieldData": [
{
"id": 1000,
"subscriberFieldId": 2000,
"data": "January 1st, 2000"
},
{
"id": 1001,
"subscriberFieldId": 2001,
"data": "Custom Field Value"
}
],
"signupMethod": 3,
"longNumber": 1234567890
}
}curl -PATCH --location 'https://api.mobile-text-alerts.com/v3/subscribers/100’ \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258'
--header 'Content-Type:application/json' \
--data-raw '{"firstName": "FirstName1”, "lastName": "LastName1” }'
{"message":"Subscriber updated successfully.",
"data":{
"id":109021633,
"firstName":"FirstName",
"lastName":"LastName",
"email":"[email protected]",
"number":12223334444,
"e164Number":"+12223334444",
"date":"2025-03-21T15:50:54.000Z",
"countryId":209,"groups":[],
"subscriberFieldData":[],
"signupMethod":5,
"longNumber":2069638904,
"carrierId":41
}
}curl --location 'https://api.mobile-text-alerts.com/v3/subscribers/100 \
--header 'Authorization: Bearer 6078eebf-7661-5458-330e-74cd055a0b03'{"data":
{"id":100,
"firstName":"FirstName",
"lastName":"LastName",
"email":"[email protected]",
"number":1112228904,"e164Number":"+1112228904",
"date":"2025-03-21T15:50:54.000Z",
"countryId":209,
"groups":[],
"subscriberFieldData":[],
"signupMethod":5,
"longNumber":2069638904,
"carrierId":41
}
}curl --location --request DELETE 'https://api.mobile-text-alerts.com/v3/subscribers/100'
--header 'Authorization: Bearer 6078eebf-7661-5458-330e-74cd055a0b03'{"message":"Subscriber deleted successfully."}curl -L \
--request POST \
--url 'https://api.mobile-text-alerts.com/v3/groups/187561/subscribers/bulk-create' \
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03' \
--header 'Content-Type: application/json' \
--data '{
"subscriberIds": [
108767117,
108767118
]
}'curl -L \
--request POST \
--url 'https://api.mobile-text-alerts.com/v3/groups/{groupId}/subscribers/bulk-delete' \
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03' \
--header 'Content-Type: application/json' \
--data '{
"subscriberIds": [
108767117,
108767118
]
}'boolean (used for check boxes)
select (you will need to list the options in the options[] field)
address
multi-select (you will need to list the options in the options[] field)
boolean (used for check boxes)
select (you will need to list the options in the options[] field)
address
multi-select (you will need to list the options in the options[] field)
Determines the format of the date .
One of the following:
Month D, YYYY , MM/DD/YYYY, DD/MM/YYYY
Determines the format of the date .
One of the following:
Month D, YYYY , MM/DD/YYYY, DD/MM/YYYY
A deeplink looks and works like a standard website link but behaves differently depending on the user's browser, device, or operating system. Mobile Text Alerts provides a powerful deeplinking technology that can both identify if a recipient is capable of sending iMessages and link to a prompt to send their first inbound opt-in message to your Sender Identity.
Deeplinks used for iMessages can be generated by calling the /deeplinks/imessage endpoint with the following fields:
senderName: The sender name used to pre-populate the "To:" field for iMessage
If no senderName is provided, the longcodeId is required for a valid request.
optInMessage: The opt-in message used to populate the deeplink urls.
longcodeId: The id of the associated fallback longcode for your senderName
See steps above. Example: https://mobile-text-alerts.com/deeplink/abcd1234
Once clicked, Mobile Text Alerts with automatically detect whether the recipient can send/receive iMessages.
iMessage detected: If the recipient can send/receive iMessages, Mobile Text Alerts will redirect them to a special iMessage specific link which launches iMessage and prefills their opt-in message. All they have to do is hit send.
Mobile Text Alerts currently does not allow outbound messages to be sent to recipients before receiving an inbound opt-in message. As a result, messages can only be sent via iMessage to recipients that have explicitly completed the opt-in flow. This provides the best protection for your Sender Identities. Recipients are naturally wary of receiving unsolicited messages through iMessage because it is primarily a peer-to-peer messaging system. Apple may prompt users with a "Report Junk" warning for outbound messages received without an explicit inbound message from the recipient. These reports can result in your Sender Identity being blocked or disabled, which will directly impact your ability to deliver messages via iMessage. MTA opt-in requirement provides the best possible protection for your Sender Identities.
In certain uncommon cases, the restriction on requiring an inbound opt-in can be relaxed for individual Sender Identities, after careful review by our team. As described above, this significantly increases the risk of impact on delivery rates for that Sender Identity, and in requesting to lift this restriction, you are accepting that increased risk. Our team will only consider these requests for pre-existing Sender Identities that have already been in use. Our evaluation will look at the age of the Sender Identity (min 3 months old), number of active conversations, and overall inbound message reply rates. It is not guaranteed that a Sender Identity will be approved for outbound-first messaging.
Once configured and registered, this endpoint will receive the event payloads from MTA. The body of the requests are JSON; you can view the expected event payloads for each event type here.
MTA will send HTTP POST requests to the URL of your server endpoint.
A url must be specified for each webhook event type that you register. You can configure multiple event types to be sent to the same destination URL endpoint. This would require multiple calls to the Register Webhook endpoint for each event type you want to receive, each with the same url field.
Example URL:
When registering a webhook you are required to provide a secret value to MTA. This is typically 128 character hexadecimal string. This is used for security to validate that the requests you receive are from MTA.
MTA will generate a SHA-256 HMAC signature using the request body and the secret . This is set as a X-Signature header in the request MTA sends to your endpoint.
Your webhook listener should validate the request is from MTA by generating the signature of the request body and comparing it to the value of the X-Signature header.
You will need to register your webhook endpoint for each event type you want to receive. To do this you will call the Register Webhook /webhooks endpoint of the MTA API.
Required fields:
event: string - Choose which you want to receive the event notifications for. This can be one of the following: message-reply, delivery-status,message-send , or number-opt-in.
url: string - This is your hosted URL endpoint (created in step 2 above) that MTA will make a POST request to when events trigger.
secret: string - This is shared secret between your organization and MTA (created in step 3 above).
Example request:
Example successful 200 response:
Once your webhook is registered, you will start receiving the event payloads when that event is triggered. Your server can parse this JSON and use this payload data however you configure your server.
Your webhook configuration can be updated after registration by calling Update Webhook endpoint PATCH https://api.mobile-text-alerts.com/{VERSION}/webhooks/{webhookId} using the {webhookId} that was returned when first registering the webhook.
List Campaign Messages GET /campaigns/{campaignId}/messages
Learn how MTA can generate and then validate verification codes via SMS for simplified two-factor authentication.
SMS verification is a form of two-factor authentication (2FA) where a user receives a one-time code via SMS to verify access to an application. SMS verification ensures that even if a password is stolen, an attacker would also need access to the user's phone to complete a login request.
The Mobile Text Alerts SMS Verification API provides an easy way to manage SMS multi-factor authentication workflows within your application. These endpoints provide verification code generation, delivery of SMS messages and validation of user supplied codes.
to be sent to your user's number by calling the .
If this is a valid phone number, the user receives a code and enters it into your application.
You will then via the .
MTA will return the of the request. You can then use this status code to allow/deny access to your application.
One time verification codes can be generated and sent to a user by calling the send verification code endpoint detailed below.
The user will receive a message in this format:
Optional request parameters allow you to customize this verification code such as the amount of time the code will be valid for and the code's length.
Successful responses include an identifying verificationId that can be used to check the validity of a user supplied code after it has been sent.
verify/sms/send-codeThis endpoint is idempotent which means that it handles de-duplicating requests in the event of networking issues or other issues that might cause a request to be in an unknown state.
When sending your request to the endpoint, simply include an X-Request-Id header with an alphanumeric value. If you're unsure if the request succeeded or not, you can simply re-send the request with the same X-Request-Id and the send endpoint will detect if it's a duplicate or not.
For duplicate requests, a 409 Conflict error is returned.
This endpoint will return a risk type when the bypass field in the request is set to true.
Possible values:
invalid_format
The phone number format itself is invalid.
deny_list
After initiating an SMS Verification request, the user receives a code via SMS to be entered into your application. Once you've received this code, it can be validated using the Check SMS Code endpoint. You must retain one identifier for this request in order to validate it with the user-supplied code.
verify/sms/check-code*Either the to or verificationId field is required to identify the request.
This Verification Status is an enum value representing the current status of the SMS verification request. This is used to confirm the validity of the user supplied code.
Status codes:
PENDING
The verification request has been processed by Mobile Text Alerts and was sent to the user.
APPROVED
Create Template POST /templates
Get Template GET /templates/{id}
Update Template PATCH /templates/{id}
Delete Template POST /templates/{id}
List Templates
Learn about Sender Identities and how to get one provisioned for your account
When sending iMessages you will use a dedicated Sender Identity to identify your brand when communicating with your subscribers.
A Sender Identity consists of the characters at the top of an iMessage conversation to iMessage-enabled recipients. This is the contact information that your recipients will see when interacting with your brand via iMessage.
A Sender Identity looks like an email address, consisting of the sending name and a domain. One or more Sender Identities can be used when sending iMessages via Mobile Text Alerts. You can select which to use, just like when selecting an outbound longcode for SMS.
and ask about getting an iMessage Sender Identity. Include the name of your brand in your request so that we can get a Sender Identity setup that closely corresponds to your business.
Upon enrollment in the iMessage sending program, a Sender Identity will be provisioned for your account. You can supply a desired name for your Sender Identity, but it will come with a pre-configured domain that is verified for iMessage sending.
Mobile Text Alerts also provides support for for Sender Identities. You can request additional Sender Identities be provisioned for your account. Depending on the number of identities requested, it may take up to three days to complete the provisioning process. Once provisioned, each Sender Identity will be attached to an outbound longcode on your account. When sending messages, each selection of a specific longcode will correspond to a specific Sender Identity. If Mobile Text Alerts detects that a recipient is iMessage enabled, it will use the Sender Identity associated with the outbound longcode and send via iMessage instead of SMS.
Custom domains are supported but require additional configuration and setup before use. After submitting a request for a custom domain, MTA will identify the particular domain for use and will either purchase and maintain the domain on your behalf depending on the use case. Domains provisioned and managed by MTA have an additional cost, or you can purchase and provide one.
Finally, DNS entries will need to be configured to properly set up the custom domain. After this initial configuration, all future Sender Identities can be provisioned using this domain.
curl --location 'https://api.mobile-text-alerts.com/v3/deeplinks/imessage' \
--data '{
"longcodeId": 12345,
"optInMessage": "Example"
}'{
"deeplinkUrl": "https://platform.mobile-text-alerts.com/deeplinks/abc"
}Options Types - Configuration options with proper typing
Auto-completion - Full IDE support with intelligent suggestions
The Mobile Text Alerts TypeScript SDK requires a working node installation of Node.js and npm. You can check which version of Node you already have installed by running the following command:
The Mobile Text Alerts TypeScript SDK is open-source and hosted on GitHub:
The latest version of the TypeScript SDK can be installed with npm:
The client acts as a single point of configuration for all your API interactions. This is where you set your API key for authentication, the base URL, and other options. This is done during initialization, so it does not need to be passed in every individual API call.
After creating a client, you can use TypeScript functions to call any of the Mobile Text Alerts API endpoints.
The following example calls the POST /send endpoint:
The following example calls the GET /subscribers endpoint:
The following example calls the POST /templates endpoint:
If the API returns an HTTP error code (400, 401, 404, 500, etc.), the SDK intercepts the response and transforms it into a meaningful exception class for each endpoint.
Most Mobile Text Alerts API endpoints have a general rate limit of 30 requests per minute per IP address. However, some individual endpoints may override the general rate limit, see Rate Limits to learn more.
https://www.yoursite.com/app/hookscurl --location 'https://api.mobile-text-alerts.com/v3/webhooks' \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258' \
--data-raw '{
"event": "delivery-status",
"url": "https://www.example.com/app/hooks",
"secret": "abc123-abc2-cde1-1234-xyz123456",
"alertEmail": "[email protected]",
"sendAlertEmail": true
}'{
"message": "Webhook 11 created successfully.",
"data": {
"id": 11,
"event": "delivery-status",
"url": "https://www.example.com/app/hooks",
"alertEmail": "[email protected]",
"sendAlertEmail": true,
"skipErrors": false,
"skipErrorCodes": [],
"retryOnError": true,
"maxThroughputPerMinute": 600,
"createdAt": "2022-04-18T05:00:00.000Z"
}
}node -vnpm install @mobiletextalerts/typescript-sdkimport { createClient, type ClientOptions } from '@mobiletextalerts/typescript-sdk';
const clientOptions: ClientOptions = {
baseUrl: 'https://api.mobile-text-alerts.com/v3',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
// Additional client configuration options
};
const client = createClient(clientOptions);import { sendMessageFromApi } from '@mobiletextalerts/typescript-sdk';
const result = await sendMessageFromApi({
client,
body: {
message: "Hello from your app!",
recipients: ["1234567890"],
// Additional message options
}
});import { subscribersListSubscribers } from '@mobiletextalerts/typescript-sdk';
const subscribers = await subscribersListSubscribers({
client,
query: {
limit: 100,
offset: 0
}
});import { templatesCreateTemplate } from '@mobiletextalerts/typescript-sdk';
const template = await templatesCreateTemplate({
client,
body: {
name: "Welcome Message",
content: "Welcome to our service, {firstName}!"
}
});try {
const result = await subscribersListSubscribers({ client });
// Handle success
} catch (error) {
// Error types are automatically inferred based on the endpoint
console.error('API Error:', error);
}Example: imessage://[email protected]&body=Signup)
Cannot send/receive iMessages: If the link was opened on an Android phone, the web, or other non iMessage supported device, the deeplink will gracefully redirect them to a context-sensible location.
Example: Launch the SMS app instead, show a web opt-in form, etc
externalId
string
The is an optional field intended for you create and assign your own identifier for each message request. The externalId will be included in webhook notifications.
realtime
boolean
Indicates the number should be validated using the number verification service.
bypass
boolean
Indicates if you choose to bypass number validation. If true, a will be returned in the response.
longcodeId
number
The id for a longcode to use when sending the verification code.
tags
object
A set of properties to attach to the outgoing message. These are for internal use only.
poolId
number
The id for a pool of longcodes to use when sending the verification code.
verificationId
string
A unique identifier that identifies this specific verification request. Can be used when checking code validity to identify the associated verification request
messageId
string
An additional unique identifier for alignment with webhook calls that fire as a result of this verification message.
Webhook event payloads for and include this messageId in the tags array.
deliverable
boolean
Indicates if the number is valid.
reason
string
If the number is invalid, this will contain any additional information from the verification service.
carrier
string
The carrier identified for the to number.
lineType
string
The phone number type identified for the to number.
Possible values:landline ,mobile ,tollfree ,satellite ,voip ,premium ,pager ,unknown
risk
string
Any validation issues with the number, only present when bypass is true. See below.
unsubscribed
Marked as unsubscribed for your account.
suspended
The number has been temporarily suspended by the carrier.
deactivated
The number has been deactivated by the carrier.
landline
The number is a landline number.
voip
The number is a VOIP (Voice-over-IP) number.
unknown
The number is invalid but the reason is unknown
EXPIRED
The verification request has expired. This status does not indicate whether the supplied code was/is valid or invalid.
INVALID
The verification request has not yet expired but the supplied code did not match the code sent to the user via SMS.
to - required
string
The destination phone number to be sent the SMS verification code.
serviceName -required
string
A customer friendly name for your service, that will be included in the verification message
timeoutSeconds
number
The number of seconds the verification code will be considered valid. MTA will store a timestamp associated with this timeout and reflect an EXPIRED status if a code is checked after the timeout period has elapsed.
Default: 300
codeLength
number
Determines the length of the code generated. codeLength must be between 4 and 8 digits.
Default: 6
to
string
The destination number supplied in the request
timeoutSeconds
number
The number of seconds the verification code will be considered valid. This value is provided in the request
type
string
The type of verification code.
For this response, this value will always be: sms
status
enum
An enum value representing the current status of this verification request. See Verification Status to see possible status codes.
to*
string
The destination phone number this SMS verification code was sent to.
verificationId*
string
The unique identifier supplied in the response to a "Trigger SMS Verification Code" request that identifies this specific verification code request.
code - required
string
The code supplied by the user that should be validated for this verification request. Length must match the configured codeLength for this request.
to
string
The destination number supplied in the request.
verificationId
string
The verification request ID supplied in the request.
If only to is supplied in the request, the response will still include this field for reporting purposes.
status
enum
An enum value representing the current status of this verification request. See Verification Status to see possible status codes.

isMMS will default to false and a SMS template will be created unless an attachment is provided. If name is not provided, up to the first 32 characters of the message will be used as the name.
isMMS will default to false and a SMS template will be created unless an attachment is provided. If name is not provided, up to the first 32 characters of the message will be used as the name.
Learn how to customize your message sends with the MTA API
SMS stands for Short Message Service, used for sending short text messages (under 160 characters) between mobile devices. SMS messages do not allow pictures, videos, or multimedia attachments. MMS was created for these types of messages, which stands for Multimedia Messaging Service. MMS message sends have a higher credit cost per send.
1 credit cost per SMS message (160 character limit, no attachment)
3 credit cost per MMS message (1550 character limit, plus 500KB image attachment)
You can indicate the exact time a message will be sent (in UTC) with the scheduledDate request field. This field uses , so it is structured: year, month, day, hour, minutes, seconds, and milliseconds.
For example, "20250306T193000-0000" would represent March 6, 2025, 7:30:00 PM UTC.
Scheduled messages can be set to repeat on a custom schedule by using the repeat request field. In this field, each day of the week is represented by a boolean value, which when true indicates the days the message send request will be repeated.
The type field is a string with the value either week or month, which indicates if the message sends should be repeated by the day of month or the day of week.
The frequency is a number between -1 and 5 each indicating a specific frequency of repeats:
If a message is scheduled on Saturday March 1, 2025 and is repeated by day of month, then the next send would be Tuesday April 1, 2025. But if it is repeated by day of week, then the next message would be sent on the first Saturday in April, so Saturday April 5, 2025.
Example repeat field:
With the properties field you can include Liquid Templates variables in your messages. This allows custom messages to each subscriber but only one call to the API. This is useful to include a subscriber's first name or a custom link to a message.
The properties field is a map between the individual subscribers you're sending your message to, and the values of the variables in your message. These variables only exist in the context of a single send, and each property must be explicitly enumerated in the properties array if a corresponding property is used in the message. For predefined subscriber fields that persist beyond a single send, subscriber attributes can be used.
Note that Properties are not the same as Subscriber Attributes, a separately defined system for tracking fields stored on a subscriber record.
- are defined fields for a subscriber that can be added and edited through the API, platform, Workflow Builder and more. Subscriber attributes are enclosed in single square brackets: [first name]
properties in a /send message requestInclude your variable(s) in the message field, wrapped between {{ and }} .
"message": "Hello {{firstName}}! Visit {{link}} to reveal your discount!"
Define the values of your variable(s) for each subscriber that will receive the message in the properties field.
Message Templates allows you to save pre-set messages. See the tutorial to learn how to use templates with the MTA API.
POST /send
See below for the API reference for the /send endpoint.
For steps on how to create an example request to this endpoint see .
Headers
Request Fields
Response
firstName
string
First name of the subscriber.
lastName
string
Last name of the subscriber.
number
number
Phone number of the subscriber.
email
string
firstName
string
First name of the subscriber.
lastName
string
Last name of the subscriber.
number
number
Phone number of the subscriber.
email
string
Learn how to create and update groups of subscribers, useful for targeted messaging.
Organizing subscribers into different groups enables you to easily send out targeted messages to specific segments. With Mobile Text Alerts, you can add, edit, and remove groups and subscribers via the or with the , making it easy to keep your contact lists updated.
The Mobile Text Alerts API allows you to , , s metadata or for your account.
Note that these actions are used to make changes to the group itself, not the subscribers that may be contained within the group. See
Your ${serviceName} verification code is: ${code}Properties - only exist in the context of a single send, these are Liquid Template variables enclosed in double curly braces: {{firstName}}
Create your request to the /send endpoint.
linkId
number
If message contains a templateId and the includes a link, linkId is required to identify the link.
subscriberIds
number[]
List of subscriber ids to send the message to.
subscribers
number[] or string[]
A list of phone numbers and/or emails to send the message to. Phone numbers can be type number or string.
allSubscribers
boolean
Default value is false.
If true, send the message to all subscribers.
groups
number[]
List of group ids to send the message to.
threadId
number
Unique id of the thread to send the message to.
isMMS
boolean
Default value:
false for message with no attachment
true for messages with attachment
Indicates if message will be send as an .
header
string
A header is a message that is included before the message body. A newline will be added between the header and message body.
footer
string
A footer is a message to include at the end of the message body. A space will be added between the message body and footer.
longcodeId
number
Unique id corresponding to the dedicated number to send the message from.
senderName
string
If your account is sending, this field is used to specify the desired sender name.
externalId
number
An id to assign to message in the metadata of your message, this externalID is included in notifications.
properties
{ [key: string]: string }
are used to populate the liquid template variables in your message.
scheduledDate
string
The date and time a
Must be in format (eg. "20230302T173000-0500").
repeat
repeat indicates the how a scheduled message should go out.
Default: If a value for repeat is not provided, the scheduled message will not repeat.
tags
(custom)
Tags is a map of custom data to be included with your notifications.
Content-Type
application/json
Authorization
Bearer <APIKey>
message
string
The content of the message being sent.
image
string
The URL of an attachment for a message. By default, messages with attachments (image) will be sent as an MMS.
rehost
boolean
Specifies if the attached image should be rehosted by MTA before being sent.
templateId
number
Unique id of the template corresponding to the controlled template to be used as the message body.

Click here to view the full API Reference for Groups.
A POST call to the /groups endpoint will create a new group, see below for all the additional request fields for the group metadata when creating a new group.
Successful response: "message": "Created group Example."
Groups can be deleted without needed to supply a request body. Simply include the {groupId} of the group to be deleted as a path parameter with your DELETE request.
In the below example we are deleting groupId: 187561 .
Successful Response: {"message":"Group deleted successfully."}
The fields that contain the metadata about a group can be added or updated at anytime by calling the PATCH /groups/{groupId}endpoint with the identifying {groupId} of the group to be updated. See below for all the optional request fields that contain the group metadata.
In the below example, we are updating groupId: 187561 .
Successful response: "message": "Updated group New Name."
Call the GET /groups endpoint to see the groups on your account.
This endpoint does not show adaptive groups by default, see List Adaptive Groups to learn more.
Query responses include the following data:
page - the current page of results being shown
pageSize- number of groups shown per page
total - the total number of groups on your account
Successful response:
To add a subscriber to a group you will need both the subscriberId and the groupId . The subscriberId is passed on the body of the request, while the groupId is specified as a path parameter.
In the below example we are adding subscriberId :108767117 to groupId: 187561 .
Successful response: {"message":"Added subscriber 108767117 to group 187561."}
Subscribers can be removed from a group by identifying them with the groupId and subscriberId in the path parameters to the DELETE /groups/{groupId}/subscribers/{subscriberId endpoint.
In the below example we are deleting subscriberId :108767117 from groupId: 187561 .
Successful Response: {"message":"Deleted subscriber 108767117 from group 187561."}

Email address of the subscriber.
e164Number
string
E.164 international telephone number of the subscriber. If supplied, will be used over number .
E.164 Format:
[+] [country code] [subscriber number including area code] (max. 15 digits)
groupIds
number[]
List of group ids of the groups the subscriber belongs to.
subscriberFields
dictionary: subscriberFieldIds:string as the keys and data: string corresponding values
A dictionary of key value pairs of additional custom subscriber attributes for the subscriber.
Example:
"subscriberFields": {
"2000": "January 1st, 2000",
"2001": "Custom Field Data"
}firstName
string
First name of the subscriber.
lastName
string
Last name of the subscriber.
number(required if no email)
number
Phone number of the subscriber.
email (required if no number)
string
Email address of the subscriber.
e164Number
string
E.164 international telephone number of the subscriber. If supplied, will be used over number .
E.164 Format:
[+] [country code] [subscriber number including area code] (max. 15 digits)
groupIds
number[]
List of group ids of the groups the subscriber belongs to.
subscriberFields
dictionary: subscriberFieldIds:string as the keys and data: string corresponding values
A dictionary of key value pairs of additional custom subscriber attributes for the subscriber.
Example:
"subscriberFields": {
"2000": "January 1st, 2000",
"2001": "Custom Field Data"
}firstName
string
First name of the subscriber.
lastName
string
Last name of the subscriber.
number(required if no email)
number
Phone number of the subscriber.
email (required if no number)
string
curl --location 'https://api.mobile-text-alerts.com/v3/send' \
--header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258' \
--data
'{
"subscribers": ["3175551111", "3175552222"],
"message": "Hello {{firstName}}! Visit {{link}} to reveal your discount!",
"properties": {
"3175551111": {
"firstName": "John",
"link": "https://example.com/20percent"
},
"3175552222": {
"firstName": "Jane",
"link": "https://example.com/10percent"
}
}
}'CUSTOM = -1,
NEVER = 0,
DAILY = 1,
WEEKLY = 2,
BIWEEKLY = 3,
MONTHLY = 4,
ANNUALLY = 5 "repeat": {
"monday": false,
"tuesday": false,
"wednesday": false,
"thursday": false,
"friday": false,
"saturday": true,
"sunday": false,
"type": "month",
"frequency": 2,
}{
"data": {
"messageId": "uuid",
"totalSent": 1,
"totalFailedInternationalRecipients": 0
},
"message": "Message Sent to 1 Recipient."
}{
"httpCode": 400,
"message": "text",
"timestamp": "2025-03-03T14:27:08.966Z",
"type": "bad_request_error",
"name": "MTABadRequestError",
"requestId": "123e4567-e89b-12d3-a456-426614174000"
}{
"httpCode": 401,
"message": "text",
"timestamp": "2025-03-04T19:24:00.365Z",
"type": "unauthorized_error",
"name": "MTAUnauthorizedError",
"requestId": "123e4567-e89b-12d3-a456-426614174000"
}{
"httpCode": 403,
"message": "text",
"timestamp": "2025-03-04T19:24:00.365Z",
"type": "forbidden_error",
"name": "MTAForbiddenError",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"reason": null
}{
"httpCode": 429,
"message": "text",
"timestamp": "2025-03-04T19:24:00.365Z",
"type": "rate_limit_error",
"name": "MTARateLimitError",
"requestId": "123e4567-e89b-12d3-a456-426614174000"
}{
"httpCode": 500,
"message": "text",
"timestamp": "2025-03-04T19:24:00.365Z",
"type": "internal_server_error",
"name": "MTAInternalServerError",
"requestId": "123e4567-e89b-12d3-a456-426614174000"
}"properties": {
"3175551111": {
"firstName": "John",
"link": "https://example.com/20percent"
},
"3175552222": {
"firstName": "Jane",
"link": "https://example.com/10percent"
}
}curl -L \
--request POST \
--url 'https://api.mobile-text-alerts.com/v3/groups' \
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03' \
--header 'Content-Type: application/json' \
--data '{
"name": "Example"
}'curl --request DELETE --location 'https://api.mobile-text-alerts.com/v3/groups/187561'
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03' curl -L \
--request PATCH \
--url 'https://api.mobile-text-alerts.com/v3/groups/187561' \
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03' \
--header 'Content-Type: application/json' \
--data '{
"name": "New Name"
}'curl --location 'https://api.mobile-text-alerts.com/v3/groups'\
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03'{"data":
{"rows":
[{"id":187561,
"name":"Test Group",
"hidden":0,
"displayName":null,
"welcomeMessage":"",
"sortOrder":null,
"description":"First group created for testing.",
"createdAt":"2025-05-29T19:04:14.000Z",
"memberCount":0,"type":"static"},
{"id":187572,
"name":"API-Test",
"hidden":0,
"displayName":null,
"welcomeMessage":"",
"sortOrder":null,
"description":null,
"createdAt":"2025-05-29T14:47:26.000Z",
"memberCount":0,"type":"static"}],
"page":0,"pageSize":25,"total":2}}curl -X POST --location 'https://api.mobile-text-alerts.com/v3/groups/187561/subscribers' \
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03'
--header 'Content-Type: application/json' \
--data '{"subscriberId":108767117}'curl --request DELETE --location 'https://api.mobile-text-alerts.com/v3/groups/187561/subscribers/108767117'
--header 'Authorization: Bearer 3098eebf-7661-5858-890e-65cd054a0b03' Email address of the subscriber.
e164Number
string
E.164 international telephone number of the subscriber. If supplied, will be used over number .
E.164 Format:
[+] [country code] [subscriber number including area code] (max. 15 digits)
groupIds
number[]
List of group ids of the groups the subscriber belongs to.
subscriberFields
dictionary: subscriberFieldIds:string as the keys and data: string corresponding values
A dictionary of key value pairs of additional custom subscriber attributes for the subscriber.
Example:
"subscriberFields": {
"2000": "January 1st, 2000",
"2001": "Custom Field Data"
}Email address of the subscriber.
e164Number
string
E.164 international telephone number of the subscriber. If supplied, will be used over number .
E.164 Format:
[+] [country code] [subscriber number including area code] (max. 15 digits)
groupIds
number[]
List of group ids of the groups the subscriber belongs to.
subscriberFields
dictionary: subscriberFieldIds:string as the keys and data: string corresponding values
A dictionary of key value pairs of additional custom subscriber attributes for the subscriber.
Example:
"subscriberFields": {
"2000": "January 1st, 2000",
"2001": "Custom Field Data"
}Learn how to configure Adaptive Groups with the the MTA API to create groups that auto-populate over time.
With Adaptive Groups, you can automatically segment subscribers based on predefined criteria. Once configured these groups will auto-populate with subscribers meeting the defined conditions without the need for manual intervention. This ongoing audience segmentation enables targeted messaging for smarter, data-driven campaigns.
This page explains how to create and configure Adaptive Groups using the Mobile Text Alerts API. for more details about using Adaptive Groups in the platform dashboard.
Adaptive Groups use the same API endpoints as standard groups for all actions but utilize additional request fields for the metadata about the Adaptive Group settings.
Adaptive groups are created using the same POST /groups endpoint that is used for standard groups. A group will be stored as an Adaptive Group when the settings field is included as a request field.
settings object definition:
match: 'AND' | 'OR' required - This determines which conditions (detailed below) must be met for a subscriber to be added to a group:
AND - A subscriber needs to meet all conditions.
OR - A subscriber needs to meet any condition.
In the platform dashboard this is seen as "All conditions" (AND) and "Any condition" (OR) when creating/editing an Adaptive Group.
conditions: IGroupCondition[] required- This contains the rules or conditions of an Adaptive Group.
See below for details on the sub-fields:
type:string required - Identifies the data type of the attribute that is being referenced in the rule. For preset attributes the types are as follows:
First Name: "string"
Last Name: "string"
Phone Number: "number"
Email: "string"
Opt-In Source: "number" - Set of
Join Date: "date"
Clicked Link: "number"- The numeric ID corresponding to desired short link.
Groups: "number" - The numeric ID corresponding to the desired Group.
conditionAttribute: string required - This defines the field that will be checked when the Adaptive Group rules are evaluated . The preset attributes are as follows:
conditionOperator: string enum required - This is the comparison expression that determines how the attribute gets compared to the chosen value. This must be one following enum values:
conditionValue: (string | number)[] required - This is the value that the subscriber attribute will be compared against. The type of this value must match the type listed in the type field.
Let's create an Adaptive Group with two conditions where if a subscriber meets either condition they will be added to the group.
If a subscriber matches any of these conditions they will be added to the group, so match: "OR".
Join Date is between 06/01/2025 to 06/30/2025
The following shows how this would be mapped to fields:
"type": "date" - The Join Date field uses the type "date" .
"conditionAttribute": "date" - The Attribute Name for Join Date is just "date".
"conditionOperator": "between" - The comparison being configured is between two dates.
"conditionValue": ["2025-06-01 04:00", "2025-06-30 04:00"] - The start and end ranges of the "between" comparison is provided as an array with two dates, represented as strings.
Email ends with "@yourorg.com"
The following shows how this would be mapped to fields:
"type":"string" - The Email field uses the type "string".
Below shows how this is displayed in the platform dashboard:
The complete settings configuration for this example:
See Create Group to learn more about this endpoint.
The settings field that contains the conditions for an Adaptive Group can be updated at anytime by calling the PATCH /groups/{groupId}endpoint with the identifying {groupId} of the group to be updated.
By default, Adaptive Groups are not listed when calling the GET /groups endpoint. To include Adaptive Groups you need to add the optional query parameter: filters[includeAdaptive] .
(note the [] brackets are escaped characters in the cURL request)
enum IGroupOperator {
EQUALS = 'equals',
NOT_EQUALS = 'not equals',
CONTAINS = 'contains',
STARTS_WITH = 'starts with',
ENDS_WITH = 'ends with',
GREATER_THAN = 'greater than',
LESS_THAN = 'less than',
IS_EMPTY = 'is empty',
IS_NOT_EMPTY = 'is not empty',
BETWEEN = 'between',
NOT_BETWEEN = 'not between',
IS_TRUE = 'is checked',
IS_FALSE = 'is not checked',
}OPT_IN_MESSAGE = 1,
SIGN_UP_FORM = 2,
CONTROL_PANEL = 3,
SPREADSHEET_IMPORT = 4,
API = 5,
ACTIVE_DIRECTORY_SYNC = 6,
BLESS_IMPORT = 7,
CONSTANT_CONTACT = 8,
SONLET_SYNC = 9,
THIRD_PARTY_SYNC = 9,
BLESS_REGISTRATION = 10,
MANUAL_ENTRY = 11,
ZIPWHIP_SYNC = 12,
OPT_IN_WEB_BANNER = 13,
ZAPIER_SYNC = 14,
SHOPIFY_SYNC = 15,
HUBSPOT_SYNC = 16,
KEYWORD = 17,
QR_CODE = 18,
WEBINAR_IMPORT = 19interface IGroupSettings {
match: 'AND' | 'OR';
conditions: IGroupCondition[];
}type IGroupCondition = {
type: string;
conditionAttribute: string;
conditionOperator: IGroupOperator;
conditionValue: (string | number)[];
};"settings":
{"match":"OR",
"conditions": [
{"type":"date",
"conditionAttribute":"date",
"conditionOperator":"between",
"conditionValue":["2025-06-01 04:00","2025-06-30 04:00"]},
{"type":"string",
"conditionAttribute":"email",
"conditionOperator":"ends with",
"conditionValue":["@yourorg.com"]}
]
}curl --location 'https://mobile-text-alerts.com/v3/groups?filters%5BincludeAdaptive%5D=true'\
--header 'Authorization: Bearer 3068eebf-7661-5458-830e-65cd055a0b03'"conditionAttribute":"email" - The Attribute Name for Email is "email"."conditionOperator":"ends with" - The end of the condition attribute is what is being evaluated so "ends with" is used.
"conditionValue":["@yourorg.com"] - The string value that the subscriber email will be compared against to see if it has a match for "ends with" .


enum IGroupConditionAttribute {
FIRST_NAME = 'firstName',
LAST_NAME = 'lastName',
EMAIL = 'email',
PHONE_NUMBER = 'number',
JOIN_DATE = 'date',
SIGN_UP_METHOD = 'signUpMethod',
CLICKED_LINK = 'linkClickTracking',
CUSTOM_FIELD = 'custom-'
} View the expected webhook event payloads to your custom defined endpoints
Here you can see the data that is sent in notification requests to your customer provided endpoints. The only requirement for a customer defined endpoint is that the response has a 200 HTTP status code.
Webhooks first must be registered, see Setting up Webhooks to learn more.
The payloads documented below describe the expected data to the endpoints you (as an MTA customer) must implement in order to successfully receive notifications.
Versions
Our latest webhook version is V3. If you haven't specifically requested to use or remain on an earlier version, you will receive this latest version of V3 payloads. Previous versions (V1, V2) are also included below.
Formats Dynamic fields may also include the following format specifications:
phone_national - A phone number in the national format. (Ex: 5555555555)
phone_e164 - A phone number in E164 format (Ex: [+] [country code] [subscriber number including area code] max. 15 digits)
enum
Tags
Many the following payloads have the optional tags field which is an object of any tags provided by the customer when the message was sent.
Example:
One of the fields of the delivery status webhook is status which will return a code that is associated with the following statuses:
One of the fields of the number opt-in webhook is optInType which will return one of the following types, used to indicate the method used to opt-in:
date - A date string. The timezone and format are specified.
string
The id provided by the customer when the message was sent.
status
MTADeliveryStatus
The delivery status. See .
tags *
<string, string>
An object of any tags provided by the customer when the message was sent.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
type
MTAWebhook.DELIVERY_STATUS
The webhook event type, identifying it as delivery status.
string
The id provided by the customer when the message was sent.
status
MTADeliveryStatus
The delivery status. See .
tags *
<string, string>
An object of any tags provided by the customer when the message was sent.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
type
MTAWebhook.DELIVERY_STATUS
The webhook event type, identifying it as delivery status.
string
The MTA internal id of the outbound message.
externalId *
string
The id provided by the customer when the message was sent.
timestamp
string | date:UTC:ISO-8601
A date string. The timezone and format are specified.
status
number |MTADeliveryStatus
The delivery status code. See .
tags *
<string, string>
An object of any tags provided by the customer when the message was sent.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
type
MTADeliveryStatus
The webhook event type, identifying it as delivery status.
string
The content of the inbound message.
messageId
number
The internal MTA id for the inbound message.
externalId
string
The customer provided id from the last outbound message sent to the origination number.
previousMessageId
string
The internal MTA id for the last interaction with the outbound number. This could be an outbound id or an inbound id, whichever happened last.
isOptOutMessage
boolean
If true, indicates the inbound message is considered an opt-out request.
tags *
<string, string>
An object of any tags provided by the customer from the last outbound message sent to the origination number.
url *
string
The URL of the message, if it was an MMS and had an image attached.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
type
MTAWebhook.MESSAGE_REPLY
The webhook event type, identifying it as message reply.
string
The content of the inbound message.
messageId
number
The internal MTA id for the inbound message.
externalId
string
The customer provided id from the last outbound message sent to the origination number.
previousMessageId
string
The internal MTA id for the last interaction with the outbound number. This could be an outbound id or an inbound id, whichever happened last.
isOptOutMessage
boolean
If true, indicates the inbound message is considered an opt-out request.
tags *
<string, string>
An object of any tags provided by the customer from the last outbound message sent to the origination number.
url *
string
The URL of the message, if it was an MMS and had an image attached.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
type
MTAWebhook.MESSAGE_REPLY
The webhook event type, identifying it as message reply.
string
The MTA internal id of the message reply.
externalId *
string
The customer provided id from the last outbound message sent to the origination number.
message
string
The content of the inbound message.
messageId *
number
The internal MTA id for the inbound message.
url *
string
The URL of the message, if it was an MMS and had an image attached.
timestamp
string | date:UTC:ISO-8601
A date string. The timezone and format are specified.
tags *
<string, string>
An object of any tags provided by the customer from the last outbound message sent to the origination number.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
string
The id provided by the customer when the message was sent.
message
string
The content of the outbound message.
url
string
The URL of the message, if it was an MMS and had an image attached.
tags *
<string, string>
An object of any tags provided by the customer when the message was sent.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
type
MTAWebhook.MESSAGE_SEND
The webhook event type, identifying it as message send.
string
The id provided by the customer when the message was sent.
message
string
The content of the outbound message.
url
string
The URL of the message, if it was an MMS and had an image attached.
tags *
<string, string>
An object of any tags provided by the customer when the message was sent.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
type
MTAWebhook.MESSAGE_SEND
The webhook event type, identifying it as message send.
string
The MTA internal id of the outbound message.
externalId *
string
The id provided by the customer when the message was sent.
message
string
The content of the outbound message.
url *
string
The URL of the message, if it was an MMS and had an image attached.
timestamp
string | date:UTC:ISO-8601
A date string. The timezone and format are specified.
tags *
<string, string>
An object of any tags provided by the customer when the message was sent.
senderName *
string
The sender name used to pre-populate the "To:" field for iMessages.
string
The sender name used to pre-populate the "To:" field for iMessages.
optInType
enum NumberOptInType
Identifies how the method used to opt-in, see .
type
type: MTAWebhook.NUMBER_OPT_IN
The webhook event type, identifying it as number opt-in.
string
The sender name used to pre-populate the "To:" field for iMessages.
optInType
enum NumberOptInType
Identifies how the method used to opt-in, see .
type
MTAWebhook.NUMBER_OPT_IN
The webhook event type, identifying it as number opt-in.
string
The sender name used to pre-populate the "To:" field for iMessages.
type
enum NumberOptInType
The webhook event type, identifying it as number opt-in.
timestamp
string | date:UTC:ISO-8601
A date string. The timezone and format are specified.
destinationNumber
string
The number the message was sent to.
messageId
number
The MTA internal id of the outbound message.
destinationNumber
string
The number the message was sent to.
messageId
number
The MTA internal id of the outbound message.
fromNumber *
string |phone_e164
The number that the message was sent from.
toNumber
string |phone_e164
The number the message was sent to.
originationNumber
string
The number that the inbound message was sent from.
destinationNumber
number
The number that the inbound message was sent to.
originationNumber
string
The number that the inbound message was sent from.
destinationNumber
string
The number that the inbound message was sent to.
fromNumber
string |phone_e164
The number that the inbound message was sent from.
toNumber *
string |phone_e164
The number that the inbound message was sent to.
destinationNumber
string
The number the message was sent to.
messageId
string | number
The MTA internal id of the outbound message.
destinationNumber
string
The number the message was sent to.
messageId
number
The MTA internal id of the outbound message.
fromNumber *
string |phone_e164
The number that the message was sent from.
toNumber
string |phone_e164
The number the message was sent to.
originationNumber
string
The number the message was sent from.
destinationNumber
string
The number the message was sent to.
originationNumber
string
The number the message was sent from.
destinationNumber *
string
The number the message was sent to.
fromNumber
string
The number the message was sent from.
toNumber *
string
The number the message was sent to.
externalId
externalId
messageId
message
message
replyId
externalId
externalId
messageId
senderName *
senderName *
senderName *
"tags": {
"key": "value"
}QUEUED = 1,
SENDING = 2,
SENT = 3, // provider sent to carrier
DELIVERED = 4,
SENDING_FAILED = 5, // something failed on the provider end
DELIVERY_FAILED = 6, // sent to carrier, but failed to deliver
DELIVERY_UNCONFIRMED = 7, // no response from carrier
DELIVERY_REJECTED = 8, // blocked by carrier
UNDELIVERED = 9, // handset is turned off, out of coverage, or something else of that nature
INVALID_NUMBER = 10,
STOPPED_NUMBER = 11,
LANDLINE = 12,
SEND_REJECTED = 13, // blocked by provider
QUEUEING_FAILED = 14 // carrier failed to acknowledge messageenum NumberOptInType {
SMS = 'sms',
EMAIL = 'email',
IMessage = 'imessage',
RCS = 'rcs',
}name - required
string
The name of the group.
hidden
boolean
Indicates if the group is hidden.
description
string
Description of the group.
displayName
string
name - required
string
The name of the group.
hidden
boolean
Indicates if the group is hidden.
description
string
Description of the group.
displayName
string
An alternate display name for this group
sortOrder
number
Override default sorting when displaying this group on the subscriber sign up page
isTemporary
boolean
When set to true, this group is marked as temporary. Temporary groups are deleted at midnight of the day following their creation.
createdAt
string
Timestamp of when the group was created. For example: "2025-05-29T19:04:14.000Z"
settings
object
This field is only used for Adaptive Groups. See Configure settings field for a group to learn more about this field.
An alternate display name for this group
sortOrder
number
Override default sorting when displaying this group on the subscriber sign up page
isTemporary
boolean
When set to true, this group is marked as temporary. Temporary groups are deleted at midnight of the day following their creation.
createdAt
string
Timestamp of when the group was created. For example: "2025-05-29T19:04:14.000Z"
settings
object
This field is only used for Adaptive Groups. See Configure settings field for a group to learn more about this field.
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Add a new subscriber. If given a phone number or email that already exists tied to the same account, updates the existing subscriber with new information
Required Fields: email or number
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
SubscriberRequest
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
SubscriberRequest
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
List all subscribers and query for subscribers. Includes all subscribers with query value in either first name, last name, number, email, or custom subscriber fields and with filters values in respective categories.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Add a new subscriber. If given a phone number or email that already exists tied to the same account, updates the existing subscriber with new information
Required Fields: email or number
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
SubscriberRequest
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
List all subscribers and query for subscribers. Includes all subscribers with query value in either first name, last name, number, email, or custom subscriber fields and with filters values in respective categories.
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
message: string
The body of the message.
image: string
Content to Send: One of the following
message
image
templateId
The subscribers field is a list of recipient phone numbers or email addresses. If a provided recipient is not already a subscriber on your account, one will be created.
Messages will be sent to a subscriber's phone number if one is set, otherwise, the message will be sent to the subscriber via email.
The allSubscribers request field can be set to true in order to send the message to all subscribers. When allSubscribers is set to true, no other recipient fields should be specified.
A message with an attachment (image) will be sent as MMS by default. A messages without an attachment will be sent as SMS by default. A message without an attachment can be sent as MMS by setting the isMMS request field to true.
If the rehost flag is provided and is set to true, the attachment will be rehosted on an MTA server before being sent to the recipients. You may prefer to do this in the event that the recipient isn't receiving your attachment or you simply don't want to host the attachment yourself.
SMS messages cost 1 credit per 160 characters
MMS messages cost 3 credits
Accounts configured for template-only sending should provide a templateId rather than a message.
If the template corresponding to templateId requires a link, a linkId should also be provided.
All available controlled templates can be queried via the endpoints.
By inserting one or more Liquid Template variables into your message and using the properties field, you can send a unique message to each subscriber with a single API call.
The properties field is a map between the individual subscribers you're sending your message to, and the values of the variables in your message.
Example:
The send endpoint is idempotent which means that it handles de-duplicating requests in the event of networking issues or other issues that might cause a request to be in an unknown state.
When sending your request to the endpoint, simply include an X-Request-Id header with an alphanumeric value. If you're unsure if the request succeeded or not, you can simply re-send the request with the same X-Request-Id and the send endpoint will detect if it's a duplicate or not.
If the request is a duplicate, you'll receive a 409 Conflict error response.
Please Note: This feature is currently in beta and is not yet generally available. If you're interested in sending iMessages and want to participate in our beta program, please reach out to your account manager to notify them of your interest.
iMessage is an Apple designed and built messaging service available to users of iOS, iPadOS, macOS and watchOS devices. Users can send and receive messages with each other, much like they can via SMS, MMS or email and it is widely known for its "blue bubbles". Apple has designed iMessage to be a secure message ecosystem thus increasing user trust when they send and receive iMessages. It is estimated that there are over 1 billion iMessage users across the globe.
Due to the security features and ubiquity of iMessage, it has quickly become a highly trusted method of communication for users around the globe. As a result, you can expect to have broader reach and better engagement from those recipients that you contact via iMessage using an identity that is synonymous with your brand (see below). iMessage also has a much higher throughput in terms of media sizes for attachments, enabling higher resolution photos and even videos.
When communicating with subscribers via iMessage, you'll use a unique, dedicated "Sender Identity" that helps identify your brand.
A Sender Identity is the sequence of characters that appears at the top of an iMessage conversation when you send a message to any of your iMessage enabled recipients. In other words, it is the "contact" that your recipients will receive messages from and reply to when interacting with your brand via iMessage. Sender Identities look like an email address and consist of the sending name and a domain. When sending messages via Mobile Text Alerts, you can use one or more Sender Identities to send iMessages and can select which to use in the same way you select an outbound longcode for SMS messaging.
Upon enrollment in the iMessage sending program, a Sender Identity will be provisioned for your account. You'll be able to supply a desired name for your Sender Identity but it will come with a preconfigured domain that we've configured and verified for iMessage sending. Mobile Text Alerts also provides support for Custom Domains for Sender Identities (more below). You can request additional Sender Identities be provisioned for your account. It may take up to 3 days to complete the provisioning process depending on the number of identities requested. Once provisioned, our team will attach each Sender Identity to an outbound longcode on your account. When sending messages, selection of a particular longcode will correspond to a particular Sender Identity. If Mobile Text Alerts detects that a recipient is iMessage enabled, it will use the Sender Identity associated with the outbound longcode and send via iMessage instead of SMS.
Mobile Text Alerts is capable of supporting custom domains for your Sender Identities but it requires some additional configuration and set up before you can begin using them. When you submit a request for a Custom Domain to our team, we will discuss and identify the particular domain you'd like to use. Depending on your particular use case, Mobile Text Alerts will either purchase and maintain the domain on your behalf, or you can purchase one and provide it to us. We'll need to configure a few DNS entries to properly set up your custom domain. Once initial configuration is complete, you can provision all future Sender Identities using this domain.
As with SMS, capturing the proper consent and opt-ins from your recipients is critical to the successful usage of the iMessage capabilities offered by Mobile Text Alerts. Capturing opt-ins ensures that your recipients are expecting to hear from you via iMessage and it gives you an opportunity to identify yourself to the recipient. In doing so, you can be sure that your messages are safely delivered without being marked as spam by the recipient.
In order to send iMessages to your recipients, you must receive an inbound opt-in message from them before you send your first outbound message. Regardless of whether an opt-in was collected for communications via SMS or email, an explicit iMessage opt-in is required. This can be as simple as sending in "Sign me up" to your Sender Identity one time. Mobile Text Alerts provides a useful feature for accomplishing this and automatically tracks iMessage opt-ins for you when using this system: deeplinks.
A deeplink looks and works like any other website link but behaves differently depending on the user's browser, device or operating system. Mobile Text Alerts provides a powerful deeplinking technology that can both identify if a recipient is capable of sending iMessages and link to a prompt to send their first inbound opt-in message to your Sender Identity. A Mobile Text Alerts deeplink works like this:
Generate your iMessage opt-in deeplink, which will look like this: https://mobile-text-alerts.com/deeplink/abcd1234
Through a method of your choice, direct your subscribers to this deeplink. For example, you could send an SMS campaign from Mobile Text Alerts that announces your customers can now receive iMessages from you by clicking the link (which is your deeplink from Step 1)
When a recipient clicks this link, Mobile Text Alerts with automatically detect whether they can send/receive iMessages.
If you choose to prompt your recipients for iMessage opt-ins via another method, you can still use the special imessage:// style URL to launch the iMessage app and prefill the message.
Mobile Text Alerts presently doesn't allow outbound messages to be sent to recipients before receiving an inbound opt-in message from them. As a result, messages can only be sent via iMessage to recipients that have explicitly completed the opt-in flow. This provides the best protection for your Sender Identities. Recipients are naturally wary of receiving unsolicited messages through iMessage since it is a peer to peer messaging system primarily. Apple may even prompt the user with a "Report Junk" warning for outbound messages received without an explicit inbound message from the recipient. These reports can result in your Sender Identity being blocked or disabled, which will directly impact your ability to deliver messages via iMessage. Our opt-in requirement provides the best possible protection for your Sender Identities.
Are there ways to send outbound messages first via iMessage?
In certain uncommon cases, the restriction on requiring an inbound opt-in can be relaxed for individual Sender Identities, after careful review by our team. As described above, this significantly increases the risk of impact on delivery rates for that Sender Identity and in making a request to lift this restriction, you are accepting that increased risk. Our team will only consider these requests for pre-existing Sender Identities that have already been in use. Our evaluation will look at the age of the Sender Identity (min 3 months old), number of active conversations and overall inbound message reply rates and it is not guaranteed that a Sender Identity will be approved for outbound-first messaging.
Once your subscribers begin opting-in to receiving iMessages, you're ready to begin sending to them. As mentioned above, Mobile Text Alerts will automatically capture and record the inbound opt-in messages and internally flag your subscribers as iMessage enabled and opted-in. Remember, opt-ins are tied to a specific Sender Identity, so you must receive inbound consent from a subscriber on each Sender Identity you plan to use to send messages to them. When sending messages via API, you'll specify a Sender Identity (more on that below) and Mobile Text Alerts will handle routing messages intelligently based on current subscriber status. For those subscibers included in a /send call, the system will examine whether they are enabled for iMessage and will route messages through your Sender Identity if so. The system also handles graceful fallback to SMS (also more on that further below).
When making /send API calls, you won't need to adjust much in order to send messages via iMessage. If you've completed all the necessary configuration and set up steps, you should have a Sender Identity that is attached to one of your existing outbound longcodes used for SMS/MMS. Your API calls will continue to supply a longcodeId and when that longcode has an associated iMessage Sender Identity, Mobile Text Alerts will use that identity for iMessage enabled recipients. This structure enables minimial change necessary to start using the iMessage route and provides flexibility to manage Sender Identities like you currently manage longcodes.
The iMessage route also supports graceful fallback for a number of failure scenarios. An outbound iMessage may fail for any of the following reasons:
The subscriber is not capable of receiving iMessages
The subscriber has not opted-in via inbound message to the selected Sender Identity
The Sender Identity has been disabled, blocked, or banned
Our iMessage route is temporarily unavailable
If any of these failures occur, Mobile Text Alerts will fall back gracefully to SMS in order to deliver your message. In this way, you can have the confidence that your subscriber will always receive your message, even if there's an issue preventing us from using iMessage to deliver that particular message.
When sending messages via the iMessage route, you can expect to receive webhooks from Mobile Text Alerts consistent with other messaging routes such as SMS. For messages routed via iMessage, you will receive delivery status callbacks as the message's status changes through the process of sending. When inbound messages are sent in to your Sender Identities, Mobile Text Alerts will deliver message reply webhooks consistent with inbound SMS messages. For more information on configuring webhooks for your account, please see the section of our documentation.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 25 requests every 15 seconds
message: string
The body of the message.
image: string
Content to Send: One of the following
message
image
templateId
The subscribers field is a list of recipient phone numbers or email addresses. If a provided recipient is not already a subscriber on your account, one will be created.
Messages will be sent to a subscriber's phone number if one is set, otherwise, the message will be sent to the subscriber via email.
The allSubscribers request field can be set to true in order to send the message to all subscribers. When allSubscribers is set to true, no other recipient fields should be specified.
A message with an attachment (image) will be sent as MMS by default. A messages without an attachment will be sent as SMS by default. A message without an attachment can be sent as MMS by setting the isMMS request field to true.
If the rehost flag is provided and is set to true, the attachment will be rehosted on an MTA server before being sent to the recipients. You may prefer to do this in the event that the recipient isn't receiving your attachment or you simply don't want to host the attachment yourself.
SMS messages cost 1 credit per 160 characters
MMS messages cost 3 credits
Accounts configured for template-only sending should provide a templateId rather than a message.
If the template corresponding to templateId requires a link, a linkId should also be provided.
All available controlled templates can be queried via the endpoints.
By inserting one or more Liquid Template variables into your message and using the properties field, you can send a unique message to each subscriber with a single API call.
The properties field is a map between the individual subscribers you're sending your message to, and the values of the variables in your message.
Example:
The send endpoint is idempotent which means that it handles de-duplicating requests in the event of networking issues or other issues that might cause a request to be in an unknown state.
When sending your request to the endpoint, simply include an X-Request-Id header with an alphanumeric value. If you're unsure if the request succeeded or not, you can simply re-send the request with the same X-Request-Id and the send endpoint will detect if it's a duplicate or not.
If the request is a duplicate, you'll receive a 409 Conflict error response.
Please Note: This feature is currently in beta and is not yet generally available. If you're interested in sending iMessages and want to participate in our beta program, please reach out to your account manager to notify them of your interest.
iMessage is an Apple designed and built messaging service available to users of iOS, iPadOS, macOS and watchOS devices. Users can send and receive messages with each other, much like they can via SMS, MMS or email and it is widely known for its "blue bubbles". Apple has designed iMessage to be a secure message ecosystem thus increasing user trust when they send and receive iMessages. It is estimated that there are over 1 billion iMessage users across the globe.
Due to the security features and ubiquity of iMessage, it has quickly become a highly trusted method of communication for users around the globe. As a result, you can expect to have broader reach and better engagement from those recipients that you contact via iMessage using an identity that is synonymous with your brand (see below). iMessage also has a much higher throughput in terms of media sizes for attachments, enabling higher resolution photos and even videos.
When communicating with subscribers via iMessage, you'll use a unique, dedicated "Sender Identity" that helps identify your brand.
A Sender Identity is the sequence of characters that appears at the top of an iMessage conversation when you send a message to any of your iMessage enabled recipients. In other words, it is the "contact" that your recipients will receive messages from and reply to when interacting with your brand via iMessage. Sender Identities look like an email address and consist of the sending name and a domain. When sending messages via Mobile Text Alerts, you can use one or more Sender Identities to send iMessages and can select which to use in the same way you select an outbound longcode for SMS messaging.
Upon enrollment in the iMessage sending program, a Sender Identity will be provisioned for your account. You'll be able to supply a desired name for your Sender Identity but it will come with a preconfigured domain that we've configured and verified for iMessage sending. Mobile Text Alerts also provides support for Custom Domains for Sender Identities (more below). You can request additional Sender Identities be provisioned for your account. It may take up to 3 days to complete the provisioning process depending on the number of identities requested. Once provisioned, our team will attach each Sender Identity to an outbound longcode on your account. When sending messages, selection of a particular longcode will correspond to a particular Sender Identity. If Mobile Text Alerts detects that a recipient is iMessage enabled, it will use the Sender Identity associated with the outbound longcode and send via iMessage instead of SMS.
Mobile Text Alerts is capable of supporting custom domains for your Sender Identities but it requires some additional configuration and set up before you can begin using them. When you submit a request for a Custom Domain to our team, we will discuss and identify the particular domain you'd like to use. Depending on your particular use case, Mobile Text Alerts will either purchase and maintain the domain on your behalf, or you can purchase one and provide it to us. We'll need to configure a few DNS entries to properly set up your custom domain. Once initial configuration is complete, you can provision all future Sender Identities using this domain.
As with SMS, capturing the proper consent and opt-ins from your recipients is critical to the successful usage of the iMessage capabilities offered by Mobile Text Alerts. Capturing opt-ins ensures that your recipients are expecting to hear from you via iMessage and it gives you an opportunity to identify yourself to the recipient. In doing so, you can be sure that your messages are safely delivered without being marked as spam by the recipient.
In order to send iMessages to your recipients, you must receive an inbound opt-in message from them before you send your first outbound message. Regardless of whether an opt-in was collected for communications via SMS or email, an explicit iMessage opt-in is required. This can be as simple as sending in "Sign me up" to your Sender Identity one time. Mobile Text Alerts provides a useful feature for accomplishing this and automatically tracks iMessage opt-ins for you when using this system: deeplinks.
A deeplink looks and works like any other website link but behaves differently depending on the user's browser, device or operating system. Mobile Text Alerts provides a powerful deeplinking technology that can both identify if a recipient is capable of sending iMessages and link to a prompt to send their first inbound opt-in message to your Sender Identity. A Mobile Text Alerts deeplink works like this:
Generate your iMessage opt-in deeplink, which will look like this: https://mobile-text-alerts.com/deeplink/abcd1234
Through a method of your choice, direct your subscribers to this deeplink. For example, you could send an SMS campaign from Mobile Text Alerts that announces your customers can now receive iMessages from you by clicking the link (which is your deeplink from Step 1)
When a recipient clicks this link, Mobile Text Alerts with automatically detect whether they can send/receive iMessages.
If you choose to prompt your recipients for iMessage opt-ins via another method, you can still use the special imessage:// style URL to launch the iMessage app and prefill the message.
Mobile Text Alerts presently doesn't allow outbound messages to be sent to recipients before receiving an inbound opt-in message from them. As a result, messages can only be sent via iMessage to recipients that have explicitly completed the opt-in flow. This provides the best protection for your Sender Identities. Recipients are naturally wary of receiving unsolicited messages through iMessage since it is a peer to peer messaging system primarily. Apple may even prompt the user with a "Report Junk" warning for outbound messages received without an explicit inbound message from the recipient. These reports can result in your Sender Identity being blocked or disabled, which will directly impact your ability to deliver messages via iMessage. Our opt-in requirement provides the best possible protection for your Sender Identities.
Are there ways to send outbound messages first via iMessage?
In certain uncommon cases, the restriction on requiring an inbound opt-in can be relaxed for individual Sender Identities, after careful review by our team. As described above, this significantly increases the risk of impact on delivery rates for that Sender Identity and in making a request to lift this restriction, you are accepting that increased risk. Our team will only consider these requests for pre-existing Sender Identities that have already been in use. Our evaluation will look at the age of the Sender Identity (min 3 months old), number of active conversations and overall inbound message reply rates and it is not guaranteed that a Sender Identity will be approved for outbound-first messaging.
Once your subscribers begin opting-in to receiving iMessages, you're ready to begin sending to them. As mentioned above, Mobile Text Alerts will automatically capture and record the inbound opt-in messages and internally flag your subscribers as iMessage enabled and opted-in. Remember, opt-ins are tied to a specific Sender Identity, so you must receive inbound consent from a subscriber on each Sender Identity you plan to use to send messages to them. When sending messages via API, you'll specify a Sender Identity (more on that below) and Mobile Text Alerts will handle routing messages intelligently based on current subscriber status. For those subscibers included in a /send call, the system will examine whether they are enabled for iMessage and will route messages through your Sender Identity if so. The system also handles graceful fallback to SMS (also more on that further below).
When making /send API calls, you won't need to adjust much in order to send messages via iMessage. If you've completed all the necessary configuration and set up steps, you should have a Sender Identity that is attached to one of your existing outbound longcodes used for SMS/MMS. Your API calls will continue to supply a longcodeId and when that longcode has an associated iMessage Sender Identity, Mobile Text Alerts will use that identity for iMessage enabled recipients. This structure enables minimial change necessary to start using the iMessage route and provides flexibility to manage Sender Identities like you currently manage longcodes.
The iMessage route also supports graceful fallback for a number of failure scenarios. An outbound iMessage may fail for any of the following reasons:
The subscriber is not capable of receiving iMessages
The subscriber has not opted-in via inbound message to the selected Sender Identity
The Sender Identity has been disabled, blocked, or banned
Our iMessage route is temporarily unavailable
If any of these failures occur, Mobile Text Alerts will fall back gracefully to SMS in order to deliver your message. In this way, you can have the confidence that your subscriber will always receive your message, even if there's an issue preventing us from using iMessage to deliver that particular message.
When sending messages via the iMessage route, you can expect to receive webhooks from Mobile Text Alerts consistent with other messaging routes such as SMS. For messages routed via iMessage, you will receive delivery status callbacks as the message's status changes through the process of sending. When inbound messages are sent in to your Sender Identities, Mobile Text Alerts will deliver message reply webhooks consistent with inbound SMS messages. For more information on configuring webhooks for your account, please see the section of our documentation.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 25 requests every 15 seconds
message: string
The body of the message.
image: string
Content to Send: One of the following
message
image
templateId
The subscribers field is a list of recipient phone numbers or email addresses. If a provided recipient is not already a subscriber on your account, one will be created.
Messages will be sent to a subscriber's phone number if one is set, otherwise, the message will be sent to the subscriber via email.
The allSubscribers request field can be set to true in order to send the message to all subscribers. When allSubscribers is set to true, no other recipient fields should be specified.
A message with an attachment (image) will be sent as MMS by default. A messages without an attachment will be sent as SMS by default. A message without an attachment can be sent as MMS by setting the isMMS request field to true.
If the rehost flag is provided and is set to true, the attachment will be rehosted on an MTA server before being sent to the recipients. You may prefer to do this in the event that the recipient isn't receiving your attachment or you simply don't want to host the attachment yourself.
SMS messages cost 1 credit per 160 characters
MMS messages cost 3 credits
Accounts configured for template-only sending should provide a templateId rather than a message.
If the template corresponding to templateId requires a link, a linkId should also be provided.
All available controlled templates can be queried via the endpoints.
By inserting one or more Liquid Template variables into your message and using the properties field, you can send a unique message to each subscriber with a single API call.
The properties field is a map between the individual subscribers you're sending your message to, and the values of the variables in your message.
Example:
The send endpoint is idempotent which means that it handles de-duplicating requests in the event of networking issues or other issues that might cause a request to be in an unknown state.
When sending your request to the endpoint, simply include an X-Request-Id header with an alphanumeric value. If you're unsure if the request succeeded or not, you can simply re-send the request with the same X-Request-Id and the send endpoint will detect if it's a duplicate or not.
If the request is a duplicate, you'll receive a 409 Conflict error response.
Please Note: This feature is currently in beta and is not yet generally available. If you're interested in sending iMessages and want to participate in our beta program, please reach out to your account manager to notify them of your interest.
iMessage is an Apple designed and built messaging service available to users of iOS, iPadOS, macOS and watchOS devices. Users can send and receive messages with each other, much like they can via SMS, MMS or email and it is widely known for its "blue bubbles". Apple has designed iMessage to be a secure message ecosystem thus increasing user trust when they send and receive iMessages. It is estimated that there are over 1 billion iMessage users across the globe.
Due to the security features and ubiquity of iMessage, it has quickly become a highly trusted method of communication for users around the globe. As a result, you can expect to have broader reach and better engagement from those recipients that you contact via iMessage using an identity that is synonymous with your brand (see below). iMessage also has a much higher throughput in terms of media sizes for attachments, enabling higher resolution photos and even videos.
When communicating with subscribers via iMessage, you'll use a unique, dedicated "Sender Identity" that helps identify your brand.
A Sender Identity is the sequence of characters that appears at the top of an iMessage conversation when you send a message to any of your iMessage enabled recipients. In other words, it is the "contact" that your recipients will receive messages from and reply to when interacting with your brand via iMessage. Sender Identities look like an email address and consist of the sending name and a domain. When sending messages via Mobile Text Alerts, you can use one or more Sender Identities to send iMessages and can select which to use in the same way you select an outbound longcode for SMS messaging.
Upon enrollment in the iMessage sending program, a Sender Identity will be provisioned for your account. You'll be able to supply a desired name for your Sender Identity but it will come with a preconfigured domain that we've configured and verified for iMessage sending. Mobile Text Alerts also provides support for Custom Domains for Sender Identities (more below). You can request additional Sender Identities be provisioned for your account. It may take up to 3 days to complete the provisioning process depending on the number of identities requested. Once provisioned, our team will attach each Sender Identity to an outbound longcode on your account. When sending messages, selection of a particular longcode will correspond to a particular Sender Identity. If Mobile Text Alerts detects that a recipient is iMessage enabled, it will use the Sender Identity associated with the outbound longcode and send via iMessage instead of SMS.
Mobile Text Alerts is capable of supporting custom domains for your Sender Identities but it requires some additional configuration and set up before you can begin using them. When you submit a request for a Custom Domain to our team, we will discuss and identify the particular domain you'd like to use. Depending on your particular use case, Mobile Text Alerts will either purchase and maintain the domain on your behalf, or you can purchase one and provide it to us. We'll need to configure a few DNS entries to properly set up your custom domain. Once initial configuration is complete, you can provision all future Sender Identities using this domain.
As with SMS, capturing the proper consent and opt-ins from your recipients is critical to the successful usage of the iMessage capabilities offered by Mobile Text Alerts. Capturing opt-ins ensures that your recipients are expecting to hear from you via iMessage and it gives you an opportunity to identify yourself to the recipient. In doing so, you can be sure that your messages are safely delivered without being marked as spam by the recipient.
In order to send iMessages to your recipients, you must receive an inbound opt-in message from them before you send your first outbound message. Regardless of whether an opt-in was collected for communications via SMS or email, an explicit iMessage opt-in is required. This can be as simple as sending in "Sign me up" to your Sender Identity one time. Mobile Text Alerts provides a useful feature for accomplishing this and automatically tracks iMessage opt-ins for you when using this system: deeplinks.
A deeplink looks and works like any other website link but behaves differently depending on the user's browser, device or operating system. Mobile Text Alerts provides a powerful deeplinking technology that can both identify if a recipient is capable of sending iMessages and link to a prompt to send their first inbound opt-in message to your Sender Identity. A Mobile Text Alerts deeplink works like this:
Generate your iMessage opt-in deeplink, which will look like this: https://mobile-text-alerts.com/deeplink/abcd1234
Through a method of your choice, direct your subscribers to this deeplink. For example, you could send an SMS campaign from Mobile Text Alerts that announces your customers can now receive iMessages from you by clicking the link (which is your deeplink from Step 1)
When a recipient clicks this link, Mobile Text Alerts with automatically detect whether they can send/receive iMessages.
If you choose to prompt your recipients for iMessage opt-ins via another method, you can still use the special imessage:// style URL to launch the iMessage app and prefill the message.
Mobile Text Alerts presently doesn't allow outbound messages to be sent to recipients before receiving an inbound opt-in message from them. As a result, messages can only be sent via iMessage to recipients that have explicitly completed the opt-in flow. This provides the best protection for your Sender Identities. Recipients are naturally wary of receiving unsolicited messages through iMessage since it is a peer to peer messaging system primarily. Apple may even prompt the user with a "Report Junk" warning for outbound messages received without an explicit inbound message from the recipient. These reports can result in your Sender Identity being blocked or disabled, which will directly impact your ability to deliver messages via iMessage. Our opt-in requirement provides the best possible protection for your Sender Identities.
Are there ways to send outbound messages first via iMessage?
In certain uncommon cases, the restriction on requiring an inbound opt-in can be relaxed for individual Sender Identities, after careful review by our team. As described above, this significantly increases the risk of impact on delivery rates for that Sender Identity and in making a request to lift this restriction, you are accepting that increased risk. Our team will only consider these requests for pre-existing Sender Identities that have already been in use. Our evaluation will look at the age of the Sender Identity (min 3 months old), number of active conversations and overall inbound message reply rates and it is not guaranteed that a Sender Identity will be approved for outbound-first messaging.
Once your subscribers begin opting-in to receiving iMessages, you're ready to begin sending to them. As mentioned above, Mobile Text Alerts will automatically capture and record the inbound opt-in messages and internally flag your subscribers as iMessage enabled and opted-in. Remember, opt-ins are tied to a specific Sender Identity, so you must receive inbound consent from a subscriber on each Sender Identity you plan to use to send messages to them. When sending messages via API, you'll specify a Sender Identity (more on that below) and Mobile Text Alerts will handle routing messages intelligently based on current subscriber status. For those subscibers included in a /send call, the system will examine whether they are enabled for iMessage and will route messages through your Sender Identity if so. The system also handles graceful fallback to SMS (also more on that further below).
When making /send API calls, you won't need to adjust much in order to send messages via iMessage. If you've completed all the necessary configuration and set up steps, you should have a Sender Identity that is attached to one of your existing outbound longcodes used for SMS/MMS. Your API calls will continue to supply a longcodeId and when that longcode has an associated iMessage Sender Identity, Mobile Text Alerts will use that identity for iMessage enabled recipients. This structure enables minimial change necessary to start using the iMessage route and provides flexibility to manage Sender Identities like you currently manage longcodes.
The iMessage route also supports graceful fallback for a number of failure scenarios. An outbound iMessage may fail for any of the following reasons:
The subscriber is not capable of receiving iMessages
The subscriber has not opted-in via inbound message to the selected Sender Identity
The Sender Identity has been disabled, blocked, or banned
Our iMessage route is temporarily unavailable
If any of these failures occur, Mobile Text Alerts will fall back gracefully to SMS in order to deliver your message. In this way, you can have the confidence that your subscriber will always receive your message, even if there's an issue preventing us from using iMessage to deliver that particular message.
When sending messages via the iMessage route, you can expect to receive webhooks from Mobile Text Alerts consistent with other messaging routes such as SMS. For messages routed via iMessage, you will receive delivery status callbacks as the message's status changes through the process of sending. When inbound messages are sent in to your Sender Identities, Mobile Text Alerts will deliver message reply webhooks consistent with inbound SMS messages. For more information on configuring webhooks for your account, please see the section of our documentation.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 25 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Required Fields: message
Defaults:
isMMS will default to false and a regular sms template will be created unless an attachment is provided. If name is not provided, up to the first 32 characters of the message will be used as the name.
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
This endpoint will accept a maximum of 1,000 records in a single request.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 5 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
This endpoint will accept a maximum of 1,000 records in a single request.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 5 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
This feature is currently in closed beta. Please contact your MTA account rep or MTA support for more information.
androidURI: The deeplink URI for Android.
iosURI: The deeplink URI for iOS.
macURI: The deeplink URI for Mac.
Upon successful creation, the response will include the deeplinkUrl
Example
Request:
Response:
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
This feature is currently in closed beta. Please contact your MTA account rep or MTA support for more information.
longcodeId: The id of the longcode.
optInMessage: The opt-in message used to populate the deeplink urls.
senderName: The sender name used to pre-populate the "To:" field for iMessage
Upon successful creation, the response will include the deeplinkUrl
Example
Request:
Response:
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
List all subscribers and query for subscribers. Includes all subscribers with query value in either first name, last name, number, email, or custom subscriber fields and with filters values in respective categories.
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Required Fields: subscriberId
Note: Field addToDripCampaigns is true by default.
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
This endpoint allows users to unsubscribe subscribers in bulk. The endpoint would accept array of objects with key "number", which is the phone number of the subscriber to unsubscribe and of type string.
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
This endpoint will accept a maximum of 1,000 records in a single request. Records of subscribers should be in an array. The createOnly field indicates if the action is creating new subscribers only (doesn't accept records of existing subscribers) or the action is creating or updating (accept records of existing subscribers and update info according to the records).
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
This endpoint will accept a maximum of 1,000 records in a single request.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
BulkUpdateSubscribers.RequestRecord
Success
BadRequestError
RateLimitError
InternalServerError
Success
BadRequestError
RateLimitError
InternalServerError
Success
BadRequestError
RateLimitError
InternalServerError
Success
BadRequestError
RateLimitError
InternalServerError
Success
BadRequestError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
This endpoint will accept a maximum of 1,000 records in a single request. Records of subscribers should be in an array. The createOnly field indicates if the action is creating new subscribers only (doesn't accept records of existing subscribers) or the action is creating or updating (accept records of existing subscribers and update info according to the records).
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
This endpoint will accept a maximum of 1,000 records in a single request.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
BulkUpdateSubscribers.RequestRecord
List all subscribers and query for subscribers. Includes all subscribers with query value in either first name, last name, number, email, or custom subscriber fields and with filters values in respective categories.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Add a new subscriber. If given a phone number or email that already exists tied to the same account, updates the existing subscriber with new information
Required Fields: email or number
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 15 requests every 15 seconds
SubscriberRequest
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
SubscriberRequest
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
This endpoint will accept a maximum of 1,000 records in a single request.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 5 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
This endpoint will accept a maximum of 1,000 records in a single request.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 5 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
message: string
The body of the message.
image: string
Content to Send: One of the following
message
image
templateId
The subscribers field is a list of recipient phone numbers or email addresses. If a provided recipient is not already a subscriber on your account, one will be created.
Messages will be sent to a subscriber's phone number if one is set, otherwise, the message will be sent to the subscriber via email.
The allSubscribers request field can be set to true in order to send the message to all subscribers. When allSubscribers is set to true, no other recipient fields should be specified.
A message with an attachment (image) will be sent as MMS by default. A messages without an attachment will be sent as SMS by default. A message without an attachment can be sent as MMS by setting the isMMS request field to true.
If the rehost flag is provided and is set to true, the attachment will be rehosted on an MTA server before being sent to the recipients. You may prefer to do this in the event that the recipient isn't receiving your attachment or you simply don't want to host the attachment yourself.
SMS messages cost 1 credit per 160 characters
MMS messages cost 3 credits
Accounts configured for template-only sending should provide a templateId rather than a message.
If the template corresponding to templateId requires a link, a linkId should also be provided.
All available controlled templates can be queried via the endpoints.
By inserting one or more Liquid Template variables into your message and using the properties field, you can send a unique message to each subscriber with a single API call.
The properties field is a map between the individual subscribers you're sending your message to, and the values of the variables in your message.
Example:
The send endpoint is idempotent which means that it handles de-duplicating requests in the event of networking issues or other issues that might cause a request to be in an unknown state.
When sending your request to the endpoint, simply include an X-Request-Id header with an alphanumeric value. If you're unsure if the request succeeded or not, you can simply re-send the request with the same X-Request-Id and the send endpoint will detect if it's a duplicate or not.
If the request is a duplicate, you'll receive a 409 Conflict error response.
Please Note: This feature is currently in beta and is not yet generally available. If you're interested in sending iMessages and want to participate in our beta program, please reach out to your account manager to notify them of your interest.
iMessage is an Apple designed and built messaging service available to users of iOS, iPadOS, macOS and watchOS devices. Users can send and receive messages with each other, much like they can via SMS, MMS or email and it is widely known for its "blue bubbles". Apple has designed iMessage to be a secure message ecosystem thus increasing user trust when they send and receive iMessages. It is estimated that there are over 1 billion iMessage users across the globe.
Due to the security features and ubiquity of iMessage, it has quickly become a highly trusted method of communication for users around the globe. As a result, you can expect to have broader reach and better engagement from those recipients that you contact via iMessage using an identity that is synonymous with your brand (see below). iMessage also has a much higher throughput in terms of media sizes for attachments, enabling higher resolution photos and even videos.
When communicating with subscribers via iMessage, you'll use a unique, dedicated "Sender Identity" that helps identify your brand.
A Sender Identity is the sequence of characters that appears at the top of an iMessage conversation when you send a message to any of your iMessage enabled recipients. In other words, it is the "contact" that your recipients will receive messages from and reply to when interacting with your brand via iMessage. Sender Identities look like an email address and consist of the sending name and a domain. When sending messages via Mobile Text Alerts, you can use one or more Sender Identities to send iMessages and can select which to use in the same way you select an outbound longcode for SMS messaging.
Upon enrollment in the iMessage sending program, a Sender Identity will be provisioned for your account. You'll be able to supply a desired name for your Sender Identity but it will come with a preconfigured domain that we've configured and verified for iMessage sending. Mobile Text Alerts also provides support for Custom Domains for Sender Identities (more below). You can request additional Sender Identities be provisioned for your account. It may take up to 3 days to complete the provisioning process depending on the number of identities requested. Once provisioned, our team will attach each Sender Identity to an outbound longcode on your account. When sending messages, selection of a particular longcode will correspond to a particular Sender Identity. If Mobile Text Alerts detects that a recipient is iMessage enabled, it will use the Sender Identity associated with the outbound longcode and send via iMessage instead of SMS.
Mobile Text Alerts is capable of supporting custom domains for your Sender Identities but it requires some additional configuration and set up before you can begin using them. When you submit a request for a Custom Domain to our team, we will discuss and identify the particular domain you'd like to use. Depending on your particular use case, Mobile Text Alerts will either purchase and maintain the domain on your behalf, or you can purchase one and provide it to us. We'll need to configure a few DNS entries to properly set up your custom domain. Once initial configuration is complete, you can provision all future Sender Identities using this domain.
As with SMS, capturing the proper consent and opt-ins from your recipients is critical to the successful usage of the iMessage capabilities offered by Mobile Text Alerts. Capturing opt-ins ensures that your recipients are expecting to hear from you via iMessage and it gives you an opportunity to identify yourself to the recipient. In doing so, you can be sure that your messages are safely delivered without being marked as spam by the recipient.
In order to send iMessages to your recipients, you must receive an inbound opt-in message from them before you send your first outbound message. Regardless of whether an opt-in was collected for communications via SMS or email, an explicit iMessage opt-in is required. This can be as simple as sending in "Sign me up" to your Sender Identity one time. Mobile Text Alerts provides a useful feature for accomplishing this and automatically tracks iMessage opt-ins for you when using this system: deeplinks.
A deeplink looks and works like any other website link but behaves differently depending on the user's browser, device or operating system. Mobile Text Alerts provides a powerful deeplinking technology that can both identify if a recipient is capable of sending iMessages and link to a prompt to send their first inbound opt-in message to your Sender Identity. A Mobile Text Alerts deeplink works like this:
Generate your iMessage opt-in deeplink, which will look like this: https://mobile-text-alerts.com/deeplink/abcd1234
Through a method of your choice, direct your subscribers to this deeplink. For example, you could send an SMS campaign from Mobile Text Alerts that announces your customers can now receive iMessages from you by clicking the link (which is your deeplink from Step 1)
When a recipient clicks this link, Mobile Text Alerts with automatically detect whether they can send/receive iMessages.
If you choose to prompt your recipients for iMessage opt-ins via another method, you can still use the special imessage:// style URL to launch the iMessage app and prefill the message.
Mobile Text Alerts presently doesn't allow outbound messages to be sent to recipients before receiving an inbound opt-in message from them. As a result, messages can only be sent via iMessage to recipients that have explicitly completed the opt-in flow. This provides the best protection for your Sender Identities. Recipients are naturally wary of receiving unsolicited messages through iMessage since it is a peer to peer messaging system primarily. Apple may even prompt the user with a "Report Junk" warning for outbound messages received without an explicit inbound message from the recipient. These reports can result in your Sender Identity being blocked or disabled, which will directly impact your ability to deliver messages via iMessage. Our opt-in requirement provides the best possible protection for your Sender Identities.
Are there ways to send outbound messages first via iMessage?
In certain uncommon cases, the restriction on requiring an inbound opt-in can be relaxed for individual Sender Identities, after careful review by our team. As described above, this significantly increases the risk of impact on delivery rates for that Sender Identity and in making a request to lift this restriction, you are accepting that increased risk. Our team will only consider these requests for pre-existing Sender Identities that have already been in use. Our evaluation will look at the age of the Sender Identity (min 3 months old), number of active conversations and overall inbound message reply rates and it is not guaranteed that a Sender Identity will be approved for outbound-first messaging.
Once your subscribers begin opting-in to receiving iMessages, you're ready to begin sending to them. As mentioned above, Mobile Text Alerts will automatically capture and record the inbound opt-in messages and internally flag your subscribers as iMessage enabled and opted-in. Remember, opt-ins are tied to a specific Sender Identity, so you must receive inbound consent from a subscriber on each Sender Identity you plan to use to send messages to them. When sending messages via API, you'll specify a Sender Identity (more on that below) and Mobile Text Alerts will handle routing messages intelligently based on current subscriber status. For those subscibers included in a /send call, the system will examine whether they are enabled for iMessage and will route messages through your Sender Identity if so. The system also handles graceful fallback to SMS (also more on that further below).
When making /send API calls, you won't need to adjust much in order to send messages via iMessage. If you've completed all the necessary configuration and set up steps, you should have a Sender Identity that is attached to one of your existing outbound longcodes used for SMS/MMS. Your API calls will continue to supply a longcodeId and when that longcode has an associated iMessage Sender Identity, Mobile Text Alerts will use that identity for iMessage enabled recipients. This structure enables minimial change necessary to start using the iMessage route and provides flexibility to manage Sender Identities like you currently manage longcodes.
The iMessage route also supports graceful fallback for a number of failure scenarios. An outbound iMessage may fail for any of the following reasons:
The subscriber is not capable of receiving iMessages
The subscriber has not opted-in via inbound message to the selected Sender Identity
The Sender Identity has been disabled, blocked, or banned
Our iMessage route is temporarily unavailable
If any of these failures occur, Mobile Text Alerts will fall back gracefully to SMS in order to deliver your message. In this way, you can have the confidence that your subscriber will always receive your message, even if there's an issue preventing us from using iMessage to deliver that particular message.
When sending messages via the iMessage route, you can expect to receive webhooks from Mobile Text Alerts consistent with other messaging routes such as SMS. For messages routed via iMessage, you will receive delivery status callbacks as the message's status changes through the process of sending. When inbound messages are sent in to your Sender Identities, Mobile Text Alerts will deliver message reply webhooks consistent with inbound SMS messages. For more information on configuring webhooks for your account, please see the section of our documentation.
This endpoint overrides the general rate limit with an account rate limit. Requests are limited by the authenticated account instead of the IP address. This endpoint is limited to 25 requests every 15 seconds
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
from: string
The phone number used to send the message
to: string
fee: number
The fee for sending the message
carrierFee: number
The message field can be excluded or left blank to indicate that, when isMMS is true, that the message would be an attachment only.
The isMMS field can be excluded and will default to false.
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
This feature is currently in closed beta. Please contact your MTA account rep or MTA support for more information.
longcodeId: The id of the longcode.
optInMessage: The opt-in message used to populate the deeplink urls.
senderName: The sender name used to pre-populate the "To:" field for iMessage
Upon successful creation, the response will include the deeplinkUrl
Example
Request:
Response:
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Required Fields: message
Defaults:
isMMS will default to false and a regular sms template will be created unless an attachment is provided. If name is not provided, up to the first 32 characters of the message will be used as the name.
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Required Fields: subscriberId
Note: Field addToDripCampaigns is true by default.
undefined
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
Success
BadRequestError
UnauthorizedError
ForbiddenError
InternalServerError
windowsURI: The deeplink URI for Windows.defaultURI: The default deeplink URI.
If this field is empty, the sender name associated with the longcode will be used as the default.
{
"androidURI": "sms:+15555555555?body=Example",
"iosURI": "imessage://[email protected]?body=Example",
"macURI": "https://mobile-text-alerts.com/example",
"windowsURI": "https://mobile-text-alerts.com/example",
"defaultURI": "https://mobile-text-alerts.com/example"
}
{
"longcodeId": 1337,
"optInMessage": "Example",
"senderName": "[email protected]"
}
{
"deeplinkUrl": "https://platform.mobile-text-alerts.com/deeplinks/abc"
}
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
No content
If this field is empty, the sender name associated with the longcode will be used as the default.
{
"longcodeId": 1337,
"optInMessage": "Example",
"senderName": "[email protected]"
}
{
"deeplinkUrl": "https://platform.mobile-text-alerts.com/deeplinks/abc"
}
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
{
"success": true,
"error": "text",
"message": "text",
"data": {
"name": "text",
"email": "text"
}
}GET /v3/auth/verify-api-key HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"description": "text",
"instructions": "text",
"longcodeId": 1,
"isEnabled": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"conversationCount": 1,
"files": [
{
"id": 1,
"filePath": "text",
"url": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"description": "text",
"instructions": "text",
"longcodeId": 1,
"isEnabled": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"conversationCount": 1,
"files": [
{
"id": 1,
"filePath": "text",
"url": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"description": "text",
"instructions": "text",
"longcodeId": 1,
"isEnabled": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"conversationCount": 1,
"files": [
{
"id": 1,
"filePath": "text",
"url": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"description": "text",
"instructions": "text",
"longcodeId": 1,
"isEnabled": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"conversationCount": 1,
"files": [
{
"id": 1,
"filePath": "text",
"url": "text"
}
]
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}POST /v3/chatbots HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 107
{
"name": "text",
"description": "text",
"instructions": "text",
"longcodeId": 1,
"files": [
"text"
],
"isEnabled": true
}GET /v3/chatbots/{chatbotId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/chatbots/{chatbotId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 92
{
"name": "text",
"description": "text",
"instructions": "text",
"files": [
"text"
],
"isEnabled": true
}GET /v3/chatbots HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"endDate": "2025-12-15T22:44:42.368Z",
"created": "2025-12-15T22:44:42.368Z",
"groupIds": [
1
],
"campaignMessages": [
{
"id": 1,
"accountId": 1,
"title": "text",
"content": "text",
"attachment": "text",
"added": "2025-12-15T22:44:42.368Z",
"sequence": 1,
"delay": 1,
"timeOfDay": "text",
"dripCampaignId": 1,
"isMms": 1,
"memberCount": 1
}
]
}
}PATCH /v3/drip-campaigns/{dripCampaignId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 32
{
"name": "text",
"endDate": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"word": "text",
"message": "text",
"includeContactCard": true,
"includeSignupLink": true,
"created": "2025-12-15T22:44:42.368Z",
"account": {
"id": 1,
"name": "text",
"accountName": "text",
"subdomain": "text",
"contactName": "text",
"email": "text",
"emailClean": "text",
"fbId": "text",
"fbEmail": "text",
"fromEmail": "text",
"password": "text",
"joinDate": "2025-12-15T22:44:42.368Z",
"trialStart": "2025-12-15T22:44:42.368Z",
"expirationDate": "2025-12-15T22:44:42.368Z",
"paidDate": "2025-12-15T22:44:42.368Z",
"unsubscribed": 1,
"resold": 1,
"disabled": 1,
"validationCode": "text",
"welcomeMessage": "text",
"extraKeyword": "text",
"validated": 1,
"token": "text",
"autoRenew": 1,
"autoRenewPhone": 1,
"members": 1,
"unsubscribeAuto": 1,
"track": "text",
"promo": "text",
"numberOfTexts": 1,
"messagesSentThisMonth": 1,
"messagesAllowedPerMonth": 1,
"smsRollover": 1,
"extraPurchasedTexts": 1,
"expiringSms": 1,
"allowImports": 1,
"pricePerText": 1,
"apiKey": "text",
"reseller": 1,
"lastLoggedIn": "2025-12-15T22:44:42.368Z",
"lastViewedNotifications": "2025-12-15T22:44:42.368Z",
"phoneNumber": "text",
"phoneCallsRemaining": 1,
"preferredNexmoNumbers": "text",
"surveyNexmoNumber": "text",
"phoneAlerts": 1,
"timezone": 1,
"disableDaylightSavingsTime": 1,
"confirmSending": 1,
"sendToEmailAndPhones": 1,
"shortcodeKeyword": "text",
"payByInvoice": 1,
"country": 1,
"ipAddress": "text",
"note": "text",
"newSignupForm": 1,
"useThirdpartyForAtt": 1,
"mmsEnabled": 1,
"textToSpeechEnabled": 1,
"replyInboxEnabled": 1,
"mmsSentThisMonth": 1,
"mmsRollover": 1,
"mmsAllowed": 1,
"extraPurchasedMms": 1,
"pricePerMms": 1,
"preferredMmsNumber": "text",
"checkCarriersRegularly": 1,
"sendTmobileViaLongcode": 1,
"useNewQueue": 1,
"stayLoggedInToken": "text",
"customSubscriberFields": 1,
"fromName": "text",
"smsDripCampaignsEnabled": 1,
"emailDripCampaignsEnabled": 1,
"forwardReplies": 1,
"accountForwardNumbers": [
{
"id": 1,
"accountId": 1,
"name": "text",
"number": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"account": "[Circular Reference]"
}
],
"replyPhone": "text",
"replyEmail": "text",
"sendAllThroughTwilioNumber": "text",
"signupImg": "text",
"signupPageCountry": 1,
"optout": 1,
"optoutMessage": "text",
"slowQueue": 1,
"isAffiliate": 1,
"sentNotificationAboutLowMmsMessages": 1,
"mmsWelcome": 1,
"sortBy": "text",
"sortAsc": "text",
"loyaltyProgramEnabled": 1,
"notifyUsersAfterPurchase": 1,
"noOfPurchasesForReward": 1,
"firstReplyHasNames": 1,
"facebookToken": "text",
"newInvoice": 1,
"phoneCallsPerMonth": 1,
"phoneCallsRollover": 1,
"ttsPerMonth": 1,
"ttsSent": 1,
"ttsRollover": 1,
"replaceImportedNumbers": 1,
"declinedCard": 1,
"autoTopup": 1,
"topupIncrement": 1,
"disableOverage": 1,
"blessAuthKey": "text",
"blessEmail": "text",
"extraPhoneCalls": 1,
"blessAutoInviteCustomers": 1,
"blessInviteMessage": "text",
"capSubscribers": 1,
"smsNotifyShortcode": 1,
"smsNotifyKey": "text",
"blessRewardsProgram": 1,
"unlimitedInternational": 1,
"blessRewardsTime": 1,
"industry": 1,
"facebookClaimWord": "text",
"mmsProvider": 1,
"noticeToUpgrade": "2025-12-15T22:44:42.368Z",
"appointmentReminders": 1,
"autoReply": 1,
"autoReplyMessage": "text",
"omitMmsFrom": 1,
"mmsFromMessage": "text",
"birthdayTexts": 1,
"birthdayMessage": "text",
"llrOrderEmail": "text",
"gcalToken": "text",
"constantContactToken": "text",
"llrMerchantId": "text",
"appointmentMessage": "text",
"moneyRewards": 1,
"facebookMessengerEnabled": 1,
"facebookMessengerPageId": 1,
"facebookMessengerUserToken": "text",
"facebookMessengerPageToken": "text",
"skipDiscountItems": 1,
"messageLimit": 1,
"useTwilio": 1,
"longcodeProvider": 1,
"smsProvider": 1,
"newSubscriberNotice": 1,
"internationalCredit": 1,
"paypalEmail": "text",
"disableMessageExtras": 1,
"appDownloadLink": "text",
"lastCreditCardNotice": "2025-12-15T22:44:42.368Z",
"onesignalUserId": "text",
"llrUsername": "text",
"pageLength": 1,
"appPayment": 1,
"waveId": 1,
"telnyxProfileId": "text",
"throughputPerMinute": 1,
"appleId": "text",
"googleId": "text",
"shopifyId": "text",
"shopifyShop": "text",
"zoomId": "text",
"gotoId": "text",
"rbmAgentId": 1,
"vsmsAgentId": 1,
"twofactorBackup": [
"text"
],
"twofactorSecret": "text",
"twofactorPhone": "text",
"twofactorMethod": "sms",
"appSumoId": "text",
"shopifyStores": [
{
"id": 1,
"accountId": 1,
"storeId": "text",
"accessToken": "text",
"scopes": "text",
"credits": 1,
"settings": null,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z"
}
],
"shopifySegments": [
{
"id": 1,
"accountId": 1,
"storeId": 1,
"name": "text",
"conditionals": null,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z"
}
],
"shopifyLists": [
{
"id": 1,
"name": "text",
"accountId": 1,
"storeId": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z",
"members": "[Circular Reference]"
}
],
"shopifyListMembers": [
{
"id": 1,
"accountId": 1,
"storeId": 1,
"listId": 1,
"customerId": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z",
"list": "[Circular Reference]"
}
],
"hasPlatformAccess": 1,
"isUsingPlatform": 1,
"hasSeenPlatform": 1,
"recaptchaScore": 1,
"emailVerified": 1
},
"keyword": {
"id": 1,
"accountId": 1,
"keyword": "text",
"shortcode": "text",
"destinationGroupId": 1,
"deleted": 1,
"created": "2025-12-15T22:44:42.368Z",
"nonavidWelcomeMessage": "text",
"longcode": 1,
"includeContactCard": true,
"includeSignupLink": true,
"qrCodeTemplateId": 1,
"description": "text"
}
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"word": "text",
"message": "text",
"includeContactCard": true,
"includeSignupLink": true,
"created": "2025-12-15T22:44:42.368Z",
"account": {
"id": 1,
"name": "text",
"accountName": "text",
"subdomain": "text",
"contactName": "text",
"email": "text",
"emailClean": "text",
"fbId": "text",
"fbEmail": "text",
"fromEmail": "text",
"password": "text",
"joinDate": "2025-12-15T22:44:42.368Z",
"trialStart": "2025-12-15T22:44:42.368Z",
"expirationDate": "2025-12-15T22:44:42.368Z",
"paidDate": "2025-12-15T22:44:42.368Z",
"unsubscribed": 1,
"resold": 1,
"disabled": 1,
"validationCode": "text",
"welcomeMessage": "text",
"extraKeyword": "text",
"validated": 1,
"token": "text",
"autoRenew": 1,
"autoRenewPhone": 1,
"members": 1,
"unsubscribeAuto": 1,
"track": "text",
"promo": "text",
"numberOfTexts": 1,
"messagesSentThisMonth": 1,
"messagesAllowedPerMonth": 1,
"smsRollover": 1,
"extraPurchasedTexts": 1,
"expiringSms": 1,
"allowImports": 1,
"pricePerText": 1,
"apiKey": "text",
"reseller": 1,
"lastLoggedIn": "2025-12-15T22:44:42.368Z",
"lastViewedNotifications": "2025-12-15T22:44:42.368Z",
"phoneNumber": "text",
"phoneCallsRemaining": 1,
"preferredNexmoNumbers": "text",
"surveyNexmoNumber": "text",
"phoneAlerts": 1,
"timezone": 1,
"disableDaylightSavingsTime": 1,
"confirmSending": 1,
"sendToEmailAndPhones": 1,
"shortcodeKeyword": "text",
"payByInvoice": 1,
"country": 1,
"ipAddress": "text",
"note": "text",
"newSignupForm": 1,
"useThirdpartyForAtt": 1,
"mmsEnabled": 1,
"textToSpeechEnabled": 1,
"replyInboxEnabled": 1,
"mmsSentThisMonth": 1,
"mmsRollover": 1,
"mmsAllowed": 1,
"extraPurchasedMms": 1,
"pricePerMms": 1,
"preferredMmsNumber": "text",
"checkCarriersRegularly": 1,
"sendTmobileViaLongcode": 1,
"useNewQueue": 1,
"stayLoggedInToken": "text",
"customSubscriberFields": 1,
"fromName": "text",
"smsDripCampaignsEnabled": 1,
"emailDripCampaignsEnabled": 1,
"forwardReplies": 1,
"accountForwardNumbers": [
{
"id": 1,
"accountId": 1,
"name": "text",
"number": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"account": "[Circular Reference]"
}
],
"replyPhone": "text",
"replyEmail": "text",
"sendAllThroughTwilioNumber": "text",
"signupImg": "text",
"signupPageCountry": 1,
"optout": 1,
"optoutMessage": "text",
"slowQueue": 1,
"isAffiliate": 1,
"sentNotificationAboutLowMmsMessages": 1,
"mmsWelcome": 1,
"sortBy": "text",
"sortAsc": "text",
"loyaltyProgramEnabled": 1,
"notifyUsersAfterPurchase": 1,
"noOfPurchasesForReward": 1,
"firstReplyHasNames": 1,
"facebookToken": "text",
"newInvoice": 1,
"phoneCallsPerMonth": 1,
"phoneCallsRollover": 1,
"ttsPerMonth": 1,
"ttsSent": 1,
"ttsRollover": 1,
"replaceImportedNumbers": 1,
"declinedCard": 1,
"autoTopup": 1,
"topupIncrement": 1,
"disableOverage": 1,
"blessAuthKey": "text",
"blessEmail": "text",
"extraPhoneCalls": 1,
"blessAutoInviteCustomers": 1,
"blessInviteMessage": "text",
"capSubscribers": 1,
"smsNotifyShortcode": 1,
"smsNotifyKey": "text",
"blessRewardsProgram": 1,
"unlimitedInternational": 1,
"blessRewardsTime": 1,
"industry": 1,
"facebookClaimWord": "text",
"mmsProvider": 1,
"noticeToUpgrade": "2025-12-15T22:44:42.368Z",
"appointmentReminders": 1,
"autoReply": 1,
"autoReplyMessage": "text",
"omitMmsFrom": 1,
"mmsFromMessage": "text",
"birthdayTexts": 1,
"birthdayMessage": "text",
"llrOrderEmail": "text",
"gcalToken": "text",
"constantContactToken": "text",
"llrMerchantId": "text",
"appointmentMessage": "text",
"moneyRewards": 1,
"facebookMessengerEnabled": 1,
"facebookMessengerPageId": 1,
"facebookMessengerUserToken": "text",
"facebookMessengerPageToken": "text",
"skipDiscountItems": 1,
"messageLimit": 1,
"useTwilio": 1,
"longcodeProvider": 1,
"smsProvider": 1,
"newSubscriberNotice": 1,
"internationalCredit": 1,
"paypalEmail": "text",
"disableMessageExtras": 1,
"appDownloadLink": "text",
"lastCreditCardNotice": "2025-12-15T22:44:42.368Z",
"onesignalUserId": "text",
"llrUsername": "text",
"pageLength": 1,
"appPayment": 1,
"waveId": 1,
"telnyxProfileId": "text",
"throughputPerMinute": 1,
"appleId": "text",
"googleId": "text",
"shopifyId": "text",
"shopifyShop": "text",
"zoomId": "text",
"gotoId": "text",
"rbmAgentId": 1,
"vsmsAgentId": 1,
"twofactorBackup": [
"text"
],
"twofactorSecret": "text",
"twofactorPhone": "text",
"twofactorMethod": "sms",
"appSumoId": "text",
"shopifyStores": [
{
"id": 1,
"accountId": 1,
"storeId": "text",
"accessToken": "text",
"scopes": "text",
"credits": 1,
"settings": null,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z"
}
],
"shopifySegments": [
{
"id": 1,
"accountId": 1,
"storeId": 1,
"name": "text",
"conditionals": null,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z"
}
],
"shopifyLists": [
{
"id": 1,
"name": "text",
"accountId": 1,
"storeId": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z",
"members": "[Circular Reference]"
}
],
"shopifyListMembers": [
{
"id": 1,
"accountId": 1,
"storeId": 1,
"listId": 1,
"customerId": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z",
"list": "[Circular Reference]"
}
],
"hasPlatformAccess": 1,
"isUsingPlatform": 1,
"hasSeenPlatform": 1,
"recaptchaScore": 1,
"emailVerified": 1
},
"keyword": {
"id": 1,
"accountId": 1,
"keyword": "text",
"shortcode": "text",
"destinationGroupId": 1,
"deleted": 1,
"created": "2025-12-15T22:44:42.368Z",
"nonavidWelcomeMessage": "text",
"longcode": 1,
"includeContactCard": true,
"includeSignupLink": true,
"qrCodeTemplateId": 1,
"description": "text"
}
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"word": "text",
"message": "text",
"includeContactCard": true,
"includeSignupLink": true,
"created": "2025-12-15T22:44:42.368Z",
"account": {
"id": 1,
"name": "text",
"accountName": "text",
"subdomain": "text",
"contactName": "text",
"email": "text",
"emailClean": "text",
"fbId": "text",
"fbEmail": "text",
"fromEmail": "text",
"password": "text",
"joinDate": "2025-12-15T22:44:42.368Z",
"trialStart": "2025-12-15T22:44:42.368Z",
"expirationDate": "2025-12-15T22:44:42.368Z",
"paidDate": "2025-12-15T22:44:42.368Z",
"unsubscribed": 1,
"resold": 1,
"disabled": 1,
"validationCode": "text",
"welcomeMessage": "text",
"extraKeyword": "text",
"validated": 1,
"token": "text",
"autoRenew": 1,
"autoRenewPhone": 1,
"members": 1,
"unsubscribeAuto": 1,
"track": "text",
"promo": "text",
"numberOfTexts": 1,
"messagesSentThisMonth": 1,
"messagesAllowedPerMonth": 1,
"smsRollover": 1,
"extraPurchasedTexts": 1,
"expiringSms": 1,
"allowImports": 1,
"pricePerText": 1,
"apiKey": "text",
"reseller": 1,
"lastLoggedIn": "2025-12-15T22:44:42.368Z",
"lastViewedNotifications": "2025-12-15T22:44:42.368Z",
"phoneNumber": "text",
"phoneCallsRemaining": 1,
"preferredNexmoNumbers": "text",
"surveyNexmoNumber": "text",
"phoneAlerts": 1,
"timezone": 1,
"disableDaylightSavingsTime": 1,
"confirmSending": 1,
"sendToEmailAndPhones": 1,
"shortcodeKeyword": "text",
"payByInvoice": 1,
"country": 1,
"ipAddress": "text",
"note": "text",
"newSignupForm": 1,
"useThirdpartyForAtt": 1,
"mmsEnabled": 1,
"textToSpeechEnabled": 1,
"replyInboxEnabled": 1,
"mmsSentThisMonth": 1,
"mmsRollover": 1,
"mmsAllowed": 1,
"extraPurchasedMms": 1,
"pricePerMms": 1,
"preferredMmsNumber": "text",
"checkCarriersRegularly": 1,
"sendTmobileViaLongcode": 1,
"useNewQueue": 1,
"stayLoggedInToken": "text",
"customSubscriberFields": 1,
"fromName": "text",
"smsDripCampaignsEnabled": 1,
"emailDripCampaignsEnabled": 1,
"forwardReplies": 1,
"accountForwardNumbers": [
{
"id": 1,
"accountId": 1,
"name": "text",
"number": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"account": "[Circular Reference]"
}
],
"replyPhone": "text",
"replyEmail": "text",
"sendAllThroughTwilioNumber": "text",
"signupImg": "text",
"signupPageCountry": 1,
"optout": 1,
"optoutMessage": "text",
"slowQueue": 1,
"isAffiliate": 1,
"sentNotificationAboutLowMmsMessages": 1,
"mmsWelcome": 1,
"sortBy": "text",
"sortAsc": "text",
"loyaltyProgramEnabled": 1,
"notifyUsersAfterPurchase": 1,
"noOfPurchasesForReward": 1,
"firstReplyHasNames": 1,
"facebookToken": "text",
"newInvoice": 1,
"phoneCallsPerMonth": 1,
"phoneCallsRollover": 1,
"ttsPerMonth": 1,
"ttsSent": 1,
"ttsRollover": 1,
"replaceImportedNumbers": 1,
"declinedCard": 1,
"autoTopup": 1,
"topupIncrement": 1,
"disableOverage": 1,
"blessAuthKey": "text",
"blessEmail": "text",
"extraPhoneCalls": 1,
"blessAutoInviteCustomers": 1,
"blessInviteMessage": "text",
"capSubscribers": 1,
"smsNotifyShortcode": 1,
"smsNotifyKey": "text",
"blessRewardsProgram": 1,
"unlimitedInternational": 1,
"blessRewardsTime": 1,
"industry": 1,
"facebookClaimWord": "text",
"mmsProvider": 1,
"noticeToUpgrade": "2025-12-15T22:44:42.368Z",
"appointmentReminders": 1,
"autoReply": 1,
"autoReplyMessage": "text",
"omitMmsFrom": 1,
"mmsFromMessage": "text",
"birthdayTexts": 1,
"birthdayMessage": "text",
"llrOrderEmail": "text",
"gcalToken": "text",
"constantContactToken": "text",
"llrMerchantId": "text",
"appointmentMessage": "text",
"moneyRewards": 1,
"facebookMessengerEnabled": 1,
"facebookMessengerPageId": 1,
"facebookMessengerUserToken": "text",
"facebookMessengerPageToken": "text",
"skipDiscountItems": 1,
"messageLimit": 1,
"useTwilio": 1,
"longcodeProvider": 1,
"smsProvider": 1,
"newSubscriberNotice": 1,
"internationalCredit": 1,
"paypalEmail": "text",
"disableMessageExtras": 1,
"appDownloadLink": "text",
"lastCreditCardNotice": "2025-12-15T22:44:42.368Z",
"onesignalUserId": "text",
"llrUsername": "text",
"pageLength": 1,
"appPayment": 1,
"waveId": 1,
"telnyxProfileId": "text",
"throughputPerMinute": 1,
"appleId": "text",
"googleId": "text",
"shopifyId": "text",
"shopifyShop": "text",
"zoomId": "text",
"gotoId": "text",
"rbmAgentId": 1,
"vsmsAgentId": 1,
"twofactorBackup": [
"text"
],
"twofactorSecret": "text",
"twofactorPhone": "text",
"twofactorMethod": "sms",
"appSumoId": "text",
"shopifyStores": [
{
"id": 1,
"accountId": 1,
"storeId": "text",
"accessToken": "text",
"scopes": "text",
"credits": 1,
"settings": null,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z"
}
],
"shopifySegments": [
{
"id": 1,
"accountId": 1,
"storeId": 1,
"name": "text",
"conditionals": null,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z"
}
],
"shopifyLists": [
{
"id": 1,
"name": "text",
"accountId": 1,
"storeId": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z",
"members": "[Circular Reference]"
}
],
"shopifyListMembers": [
{
"id": 1,
"accountId": 1,
"storeId": 1,
"listId": 1,
"customerId": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z",
"list": "[Circular Reference]"
}
],
"hasPlatformAccess": 1,
"isUsingPlatform": 1,
"hasSeenPlatform": 1,
"recaptchaScore": 1,
"emailVerified": 1
},
"keyword": {
"id": 1,
"accountId": 1,
"keyword": "text",
"shortcode": "text",
"destinationGroupId": 1,
"deleted": 1,
"created": "2025-12-15T22:44:42.368Z",
"nonavidWelcomeMessage": "text",
"longcode": 1,
"includeContactCard": true,
"includeSignupLink": true,
"qrCodeTemplateId": 1,
"description": "text"
}
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"word": "text",
"message": "text",
"includeContactCard": true,
"includeSignupLink": true,
"created": "2025-12-15T22:44:42.368Z",
"account": {
"id": 1,
"name": "text",
"accountName": "text",
"subdomain": "text",
"contactName": "text",
"email": "text",
"emailClean": "text",
"fbId": "text",
"fbEmail": "text",
"fromEmail": "text",
"password": "text",
"joinDate": "2025-12-15T22:44:42.368Z",
"trialStart": "2025-12-15T22:44:42.368Z",
"expirationDate": "2025-12-15T22:44:42.368Z",
"paidDate": "2025-12-15T22:44:42.368Z",
"unsubscribed": 1,
"resold": 1,
"disabled": 1,
"validationCode": "text",
"welcomeMessage": "text",
"extraKeyword": "text",
"validated": 1,
"token": "text",
"autoRenew": 1,
"autoRenewPhone": 1,
"members": 1,
"unsubscribeAuto": 1,
"track": "text",
"promo": "text",
"numberOfTexts": 1,
"messagesSentThisMonth": 1,
"messagesAllowedPerMonth": 1,
"smsRollover": 1,
"extraPurchasedTexts": 1,
"expiringSms": 1,
"allowImports": 1,
"pricePerText": 1,
"apiKey": "text",
"reseller": 1,
"lastLoggedIn": "2025-12-15T22:44:42.368Z",
"lastViewedNotifications": "2025-12-15T22:44:42.368Z",
"phoneNumber": "text",
"phoneCallsRemaining": 1,
"preferredNexmoNumbers": "text",
"surveyNexmoNumber": "text",
"phoneAlerts": 1,
"timezone": 1,
"disableDaylightSavingsTime": 1,
"confirmSending": 1,
"sendToEmailAndPhones": 1,
"shortcodeKeyword": "text",
"payByInvoice": 1,
"country": 1,
"ipAddress": "text",
"note": "text",
"newSignupForm": 1,
"useThirdpartyForAtt": 1,
"mmsEnabled": 1,
"textToSpeechEnabled": 1,
"replyInboxEnabled": 1,
"mmsSentThisMonth": 1,
"mmsRollover": 1,
"mmsAllowed": 1,
"extraPurchasedMms": 1,
"pricePerMms": 1,
"preferredMmsNumber": "text",
"checkCarriersRegularly": 1,
"sendTmobileViaLongcode": 1,
"useNewQueue": 1,
"stayLoggedInToken": "text",
"customSubscriberFields": 1,
"fromName": "text",
"smsDripCampaignsEnabled": 1,
"emailDripCampaignsEnabled": 1,
"forwardReplies": 1,
"accountForwardNumbers": "[Circular Reference]",
"replyPhone": "text",
"replyEmail": "text",
"sendAllThroughTwilioNumber": "text",
"signupImg": "text",
"signupPageCountry": 1,
"optout": 1,
"optoutMessage": "text",
"slowQueue": 1,
"isAffiliate": 1,
"sentNotificationAboutLowMmsMessages": 1,
"mmsWelcome": 1,
"sortBy": "text",
"sortAsc": "text",
"loyaltyProgramEnabled": 1,
"notifyUsersAfterPurchase": 1,
"noOfPurchasesForReward": 1,
"firstReplyHasNames": 1,
"facebookToken": "text",
"newInvoice": 1,
"phoneCallsPerMonth": 1,
"phoneCallsRollover": 1,
"ttsPerMonth": 1,
"ttsSent": 1,
"ttsRollover": 1,
"replaceImportedNumbers": 1,
"declinedCard": 1,
"autoTopup": 1,
"topupIncrement": 1,
"disableOverage": 1,
"blessAuthKey": "text",
"blessEmail": "text",
"extraPhoneCalls": 1,
"blessAutoInviteCustomers": 1,
"blessInviteMessage": "text",
"capSubscribers": 1,
"smsNotifyShortcode": 1,
"smsNotifyKey": "text",
"blessRewardsProgram": 1,
"unlimitedInternational": 1,
"blessRewardsTime": 1,
"industry": 1,
"facebookClaimWord": "text",
"mmsProvider": 1,
"noticeToUpgrade": "2025-12-15T22:44:42.368Z",
"appointmentReminders": 1,
"autoReply": 1,
"autoReplyMessage": "text",
"omitMmsFrom": 1,
"mmsFromMessage": "text",
"birthdayTexts": 1,
"birthdayMessage": "text",
"llrOrderEmail": "text",
"gcalToken": "text",
"constantContactToken": "text",
"llrMerchantId": "text",
"appointmentMessage": "text",
"moneyRewards": 1,
"facebookMessengerEnabled": 1,
"facebookMessengerPageId": 1,
"facebookMessengerUserToken": "text",
"facebookMessengerPageToken": "text",
"skipDiscountItems": 1,
"messageLimit": 1,
"useTwilio": 1,
"longcodeProvider": 1,
"smsProvider": 1,
"newSubscriberNotice": 1,
"internationalCredit": 1,
"paypalEmail": "text",
"disableMessageExtras": 1,
"appDownloadLink": "text",
"lastCreditCardNotice": "2025-12-15T22:44:42.368Z",
"onesignalUserId": "text",
"llrUsername": "text",
"pageLength": 1,
"appPayment": 1,
"waveId": 1,
"telnyxProfileId": "text",
"throughputPerMinute": 1,
"appleId": "text",
"googleId": "text",
"shopifyId": "text",
"shopifyShop": "text",
"zoomId": "text",
"gotoId": "text",
"rbmAgentId": 1,
"vsmsAgentId": 1,
"twofactorBackup": [
"text"
],
"twofactorSecret": "text",
"twofactorPhone": "text",
"twofactorMethod": "sms",
"appSumoId": "text",
"shopifyStores": [
{
"id": 1,
"accountId": 1,
"storeId": "text",
"accessToken": "text",
"scopes": "text",
"credits": 1,
"settings": null,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z"
}
],
"shopifySegments": [
{
"id": 1,
"accountId": 1,
"storeId": 1,
"name": "text",
"conditionals": null,
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"deletedAt": "2025-12-15T22:44:42.368Z"
}
],
"shopifyLists": "[Circular Reference]",
"shopifyListMembers": "[Circular Reference]",
"hasPlatformAccess": 1,
"isUsingPlatform": 1,
"hasSeenPlatform": 1,
"recaptchaScore": 1,
"emailVerified": 1
},
"keyword": {
"id": 1,
"accountId": 1,
"keyword": "text",
"shortcode": "text",
"destinationGroupId": 1,
"deleted": 1,
"created": "2025-12-15T22:44:42.368Z",
"nonavidWelcomeMessage": "text",
"longcode": 1,
"includeContactCard": true,
"includeSignupLink": true,
"qrCodeTemplateId": 1,
"description": "text"
}
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}POST /v3/smart-replies HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 98
{
"word": "text",
"message": "text",
"includeContactCard": true,
"includeSignupLink": true,
"templateId": 1
}GET /v3/smart-replies/{id} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/smart-replies/{id} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 98
{
"word": "text",
"message": "text",
"includeContactCard": true,
"includeSignupLink": true,
"templateId": 1
}DELETE /v3/smart-replies/{id} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/smart-replies HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
}POST /v3/subscribers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 181
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"name": "text",
"created": "text",
"longcodeId": 1,
"number": "text",
"tollFree": 1,
"isShortcode": 1,
"branded": 1,
"pending": 1,
"verified": 1,
"countryCode": "text",
"users": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"type": "text",
"status": "Basic",
"deliveryRate": 1,
"tollFreeVerificationStatus": null,
"tollFreeVerificationSubmissionDate": "text"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/dedicated-numbers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"messageId": 1,
"externalId": "text",
"message": "text",
"attachment": "text",
"status": "sent",
"date": "text",
"carrier": "text",
"to": "text",
"from": "text",
"type": "sms"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/deliveries HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"type": null,
"hidden": true,
"options": [
"text"
],
"format": null,
"created": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"type": null,
"hidden": true,
"options": [
"text"
],
"format": null,
"created": "2025-12-15T22:44:42.368Z"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"type": null,
"hidden": true,
"options": [
"text"
],
"format": null,
"created": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"type": null,
"hidden": true,
"options": [
"text"
],
"format": null,
"created": "2025-12-15T22:44:42.368Z"
}
}POST /v3/custom-fields HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 87
{
"name": "text",
"type": "string",
"hidden": true,
"options": [
"text"
],
"format": "MMM D, YYYY"
}GET /v3/custom-fields HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/custom-fields/{customFieldId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 73
{
"name": "text",
"type": "string",
"options": [
"text"
],
"format": "MMM D, YYYY"
}DELETE /v3/custom-fields/{customFieldId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/custom-fields/{customFieldId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"name": "text",
"created": "text",
"longcodeId": 1,
"number": "text",
"tollFree": 1,
"isShortcode": 1,
"branded": 1,
"pending": 1,
"verified": 1,
"countryCode": "text",
"users": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"type": "text",
"status": "Basic",
"deliveryRate": 1,
"tollFreeVerificationStatus": null,
"tollFreeVerificationSubmissionDate": "text"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/dedicated-numbers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"webinarId": "text",
"webinarHash": "text",
"name": "text",
"description": "text",
"recurring": "text",
"eventType": "text",
"schedules": "text",
"eventDatetime": "2025-12-15T22:44:42.368Z",
"timezone": "text",
"presenters": "text",
"registrationUrl": "text",
"created": "2025-12-15T22:44:42.368Z",
"isWebinarjam": 1,
"organizerKey": "text",
"inactive": true,
"zoomUUID": "text",
"zoomWebinarId": 1,
"zoomOccurrenceId": 1,
"zoomRecurrenceType": 1,
"zoomRegistrationType": 1,
"zoomType": 1,
"gotoWebinarKey": "text",
"gotoWebinarId": "text",
"gotoAccountKey": "text",
"gotoRecurrenceType": "text",
"gotoExperienceType": "text",
"duration": 1,
"updatedAt": "2025-12-15T22:44:42.368Z",
"id": 1,
"webinarSettingId": 1,
"registrants": 1,
"participants": 1,
"absentees": 1,
"groupId": 1,
"enableWelcome": true,
"enableReminders": true,
"enableAbsentees": true
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"webinarId": "text",
"webinarHash": "text",
"name": "text",
"description": "text",
"recurring": "text",
"eventType": "text",
"schedules": "text",
"eventDatetime": "2025-12-15T22:44:42.368Z",
"timezone": "text",
"presenters": "text",
"registrationUrl": "text",
"created": "2025-12-15T22:44:42.368Z",
"isWebinarjam": 1,
"organizerKey": "text",
"inactive": true,
"zoomUUID": "text",
"zoomWebinarId": 1,
"zoomOccurrenceId": 1,
"zoomRecurrenceType": 1,
"zoomRegistrationType": 1,
"zoomType": 1,
"gotoWebinarKey": "text",
"gotoWebinarId": "text",
"gotoAccountKey": "text",
"gotoRecurrenceType": "text",
"gotoExperienceType": "text",
"duration": 1,
"updatedAt": "2025-12-15T22:44:42.368Z",
"id": 1,
"webinarSettingId": 1,
"registrants": 1,
"participants": 1,
"absentees": 1,
"groupId": 1,
"enableWelcome": true,
"enableReminders": true,
"enableAbsentees": true
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"webinarId": "text",
"webinarHash": "text",
"name": "text",
"description": "text",
"recurring": "text",
"eventType": "text",
"schedules": "text",
"eventDatetime": "2025-12-15T22:44:42.368Z",
"timezone": "text",
"presenters": "text",
"registrationUrl": "text",
"created": "2025-12-15T22:44:42.368Z",
"isWebinarjam": 1,
"organizerKey": "text",
"inactive": true,
"zoomUUID": "text",
"zoomWebinarId": 1,
"zoomOccurrenceId": 1,
"zoomRecurrenceType": 1,
"zoomRegistrationType": 1,
"zoomType": 1,
"gotoWebinarKey": "text",
"gotoWebinarId": "text",
"gotoAccountKey": "text",
"gotoRecurrenceType": "text",
"gotoExperienceType": "text",
"duration": 1,
"updatedAt": "2025-12-15T22:44:42.368Z",
"id": 1,
"webinarSettingId": 1,
"registrants": 1,
"participants": 1,
"absentees": 1,
"groupId": 1,
"enableWelcome": true,
"enableReminders": true,
"enableAbsentees": true
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/webinars/{webinarIdentifier} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/webinars HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/webinars/events HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"name": "text",
"created": "text",
"longcodeId": 1,
"number": "text",
"tollFree": 1,
"isShortcode": 1,
"branded": 1,
"pending": 1,
"verified": 1,
"countryCode": "text",
"users": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"type": "text",
"status": "Basic",
"deliveryRate": 1,
"tollFreeVerificationStatus": null,
"tollFreeVerificationSubmissionDate": "text"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/dedicated-numbers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"to": "text",
"timeoutSeconds": 1,
"type": "sms",
"status": "PENDING",
"messageId": "text",
"verificationId": "text",
"deliverable": true,
"reason": "text",
"carrier": "text",
"lineType": "text",
"risk": null
}{
"to": "text",
"verificationId": "text",
"status": "PENDING"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": "text",
"number": "text",
"serviceName": "text",
"timeoutSeconds": 1,
"codeLength": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"expiresAt": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": "text",
"number": "text",
"serviceName": "text",
"timeoutSeconds": 1,
"codeLength": 1,
"createdAt": "2025-12-15T22:44:42.368Z",
"expiresAt": "2025-12-15T22:44:42.368Z"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"deliverable": true,
"reason": "text",
"carrier": "text",
"lineType": "text",
"risk": null
}POST /v3/verify/sms/send-code HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 224
{
"to": "text",
"serviceName": "text",
"timeoutSeconds": 1,
"codeLength": 1,
"realtime": true,
"bypass": true,
"externalId": "text",
"longcodeId": 1,
"tags": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"poolId": "text",
"senderName": "text",
"gated": true
}POST /v3/verify/sms/check-code HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 51
{
"to": "text",
"verificationId": "text",
"code": "text"
}GET /v3/verify/{verificationId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/verify HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/verify/number HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 31
{
"number": "text",
"bypass": true
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"autoReply": true,
"autoReplyMessage": "text",
"initialReply": true,
"initialReplyMessage": "text",
"autoReplyTimes": {
"monday": {
"startTime": "text",
"endTime": "text"
},
"tuesday": {
"startTime": "text",
"endTime": "text"
},
"wednesday": {
"startTime": "text",
"endTime": "text"
},
"thursday": {
"startTime": "text",
"endTime": "text"
},
"friday": {
"startTime": "text",
"endTime": "text"
},
"saturday": {
"startTime": "text",
"endTime": "text"
},
"sunday": {
"startTime": "text",
"endTime": "text"
}
},
"autoReplyDuringHours": true,
"autoReplyAfterHours": true
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"newSubscriberMessage": "text"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"newSubscriberMessage": "text"
}
}GET /v3/automated-replies/default-reply HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/automated-replies/default-reply HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 519
{
"autoReply": true,
"autoReplyMessage": "text",
"initialReply": true,
"initialReplyMessage": "text",
"autoReplyTimes": {
"monday": {
"startTime": "text",
"endTime": "text"
},
"tuesday": {
"startTime": "text",
"endTime": "text"
},
"wednesday": {
"startTime": "text",
"endTime": "text"
},
"thursday": {
"startTime": "text",
"endTime": "text"
},
"friday": {
"startTime": "text",
"endTime": "text"
},
"saturday": {
"startTime": "text",
"endTime": "text"
},
"sunday": {
"startTime": "text",
"endTime": "text"
}
},
"autoReplyDuringHours": true,
"autoReplyAfterHours": true,
"templateId": 1
}GET /v3/automated-replies/new-subscriber-reply HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/automated-replies/new-subscriber-reply HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 46
{
"newSubscriberMessage": "text",
"templateId": 1
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"accountId": 1,
"name": "text",
"message": "text",
"requiresLink": true,
"type": "dispensary",
"isMMS": true,
"isGlobal": true,
"url": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"assignedChildAccounts": [
{
"id": 1,
"accountName": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"accountId": 1,
"name": "text",
"message": "text",
"requiresLink": true,
"type": "dispensary",
"isMMS": true,
"isGlobal": true,
"url": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"assignedChildAccounts": [
{
"id": 1,
"accountName": "text"
}
]
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/controlled-templates/{controlledTemplateId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/controlled-templates HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"name": "text",
"created": "text",
"longcodeId": 1,
"number": "text",
"tollFree": 1,
"isShortcode": 1,
"branded": 1,
"pending": 1,
"verified": 1,
"countryCode": "text",
"users": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"type": "text",
"status": "Basic",
"deliveryRate": 1,
"tollFreeVerificationStatus": null,
"tollFreeVerificationSubmissionDate": "text"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/dedicated-numbers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"shortcodes": null
}
}GET /v3/shortcodes HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"memberCounts": {
"ANY_ADDITIONAL_PROPERTY": 1
}
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}GET /v3/groups/member-count/bulk?groupIds=text HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/groups/{groupId}/subscribers/bulk-create HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 21
{
"subscriberIds": [
1
]
}POST /v3/groups/{groupId}/subscribers/bulk-delete HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 21
{
"subscriberIds": [
1
]
}POST /v3/deeplinks HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 93
{
"androidURI": "text",
"iosURI": "text",
"macURI": "text",
"windowsURI": "text",
"defaultURI": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"deeplinkUrl": "text"
}
}POST /v3/deeplinks/imessage HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 58
{
"longcodeId": 1,
"optInMessage": "text",
"senderName": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"deeplinkUrl": "text"
}
}{
"deeplinkUrl": "https://platform.mobile-text-alerts.com/deeplinks/abc"
}
{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"messageId": 1,
"externalId": "text",
"message": "text",
"attachment": "text",
"status": "sent",
"date": "text",
"carrier": "text",
"to": "text",
"from": "text",
"type": "sms"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/deliveries HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"hidden": 1,
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z",
"memberCount": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"hidden": 1,
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z",
"memberCount": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"hidden": 1,
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z",
"memberCount": 1
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"hidden": 1,
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z",
"memberCount": 1
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"memberCount": 1
}
}POST /v3/groups HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 502
{
"id": 1,
"accountId": 1,
"name": "text",
"hidden": 1,
"keyword": "text",
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z"
}GET /v3/groups/{groupId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/groups/{groupId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 502
{
"id": 1,
"accountId": 1,
"name": "text",
"hidden": 1,
"keyword": "text",
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z"
}DELETE /v3/groups/{groupId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/groups HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/groups/{groupId}/subscribers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 44
{
"subscriberId": 1,
"addToDripCampaigns": true
}DELETE /v3/groups/{groupId}/subscribers/{subscriberId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/groups/member-count/all HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/groups/{groupId}/member-count HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"created": "2025-12-15T22:44:42.368Z",
"longUrl": "text",
"shortUrl": "text",
"finalUrl": "text",
"trackingEnabled": true,
"isMms": true,
"clicks": 1,
"tags": [
{
"id": 1,
"tag": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"created": "2025-12-15T22:44:42.368Z",
"longUrl": "text",
"shortUrl": "text",
"finalUrl": "text",
"trackingEnabled": true,
"isMms": true,
"clicks": 1,
"tags": [
{
"id": 1,
"tag": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"created": "2025-12-15T22:44:42.368Z",
"longUrl": "text",
"shortUrl": "text",
"finalUrl": "text",
"trackingEnabled": true,
"isMms": true,
"clicks": 1,
"tags": [
{
"id": 1,
"tag": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"created": "2025-12-15T22:44:42.368Z",
"longUrl": "text",
"shortUrl": "text",
"finalUrl": "text",
"trackingEnabled": true,
"isMms": true,
"clicks": 1,
"tags": [
{
"id": 1,
"tag": "text"
}
]
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"name": "text",
"number": 1,
"subscriberId": 1,
"dateClicked": "2025-12-15T22:44:42.368Z"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}POST /v3/links/shortlinks HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 103
{
"longUrl": "text",
"trackingEnabled": true,
"isMMS": true,
"ageCheck": true,
"tags": [
"text"
],
"isWebinar": true
}GET /v3/links/{linkId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/links/{linkId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 17
{
"tags": [
"text"
]
}GET /v3/links HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/links/{linkId}/clicks HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/links/validate-subdomain HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 20
{
"subdomain": "text"
}POST /v3/links/subdomain HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 20
{
"subdomain": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"unsubscribed": true
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"number": "text",
"email": "text",
"date": "2025-12-15T22:44:42.368Z"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"totalRecordCount": 1,
"unsubscribedRecordCount": 1,
"errorRecordCount": 1,
"unsubscribedRecords": [
{
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
],
"errorRecords": [
{
"number": "text",
"error": "text"
}
]
}
}POST /v3/unsubscribes HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 17
{
"number": "text"
}GET /v3/unsubscribes/{number} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/unsubscribes HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/unsubscribes/bulk HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 19
[
{
"number": "text"
}
]{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"tag": "text"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"tag": "text"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"tag": "text"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"tag": "text"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}POST /v3/link-tags HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 14
{
"tag": "text"
}GET /v3/link-tags/{linkTagId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/link-tags/{linkTagId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 14
{
"tag": "text"
}DELETE /v3/link-tags/{linkTagId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/link-tags HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"title": "text",
"value": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"title": "text",
"value": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"title": "text",
"value": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"title": "text",
"value": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}POST /v3/account-variables HTTP/1.1
Host: api.mobile-text-alerts.com
Content-Type: application/json
Accept: */*
Content-Length: 31
{
"title": "text",
"value": "text"
}GET /v3/account-variables/{idOrTitle} HTTP/1.1
Host: api.mobile-text-alerts.com
Accept: */*
PATCH /v3/account-variables/{idOrTitle} HTTP/1.1
Host: api.mobile-text-alerts.com
Content-Type: application/json
Accept: */*
Content-Length: 31
{
"title": "text",
"value": "text"
}DELETE /v3/account-variables/{idOrTitle} HTTP/1.1
Host: api.mobile-text-alerts.com
Accept: */*
GET /v3/account-variables HTTP/1.1
Host: api.mobile-text-alerts.com
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"type": null,
"hidden": true,
"options": [
"text"
],
"format": null,
"created": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"type": null,
"hidden": true,
"options": [
"text"
],
"format": null,
"created": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"type": null,
"hidden": true,
"options": [
"text"
],
"format": null,
"created": "2025-12-15T22:44:42.368Z"
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"type": null,
"hidden": true,
"options": [
"text"
],
"format": null,
"created": "2025-12-15T22:44:42.368Z"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}POST /v3/custom-fields HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 87
{
"name": "text",
"type": "string",
"hidden": true,
"options": [
"text"
],
"format": "MMM D, YYYY"
}GET /v3/custom-fields/{customFieldId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/custom-fields/{customFieldId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 73
{
"name": "text",
"type": "string",
"options": [
"text"
],
"format": "MMM D, YYYY"
}DELETE /v3/custom-fields/{customFieldId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/custom-fields HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/custom-fields/bulk-create HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 106
{
"customFields": [
{
"name": "text",
"type": "string",
"hidden": true,
"options": [
"text"
],
"format": "MMM D, YYYY"
}
]
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"totalRecordCount": 1,
"createdRecordCount": 1,
"errorRecordCount": 1,
"createdRecords": [
{
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
],
"errorRecords": [
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text",
"error": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"totalRecordCount": 1,
"updatedRecordCount": 1,
"errorRecordCount": 1,
"updatedRecords": [
{
"record": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
},
"id": 1
}
],
"errorRecords": [
{
"error": "text",
"id": 1
}
]
}
}POST /v3/subscribers/bulk HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 203
[
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
}
]PATCH /v3/subscribers/bulk HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 221
[
{
"record": {
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
},
"id": 1
}
]{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}GET /v3/subscribers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/subscribers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 181
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
}PATCH /v3/subscribers/{idOrNumberOrEmail} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 181
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
}GET /v3/subscribers/{idOrNumberOrEmail} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
DELETE /v3/subscribers/{idOrNumberOrEmail} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}POST /v3/groups/{groupId}/subscribers/bulk-create HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 21
{
"subscriberIds": [
1
]
}POST /v3/groups/{groupId}/subscribers/bulk-delete HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 21
{
"subscriberIds": [
1
]
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"accountId": 1,
"numberIds": [
"text"
],
"subscriberIds": [
1
],
"groupIds": [
"text"
],
"allSubscribers": 1,
"message": "text",
"url": "text",
"scheduledDate": "2025-12-15T22:44:42.368Z",
"timestamp": "2025-12-15T22:44:42.368Z",
"repeatMessage": 1,
"repeatDays": [
1
],
"repeatMonthType": "text",
"excludedGroupIds": [
"text"
],
"header": "text",
"footer": "text",
"threadId": 1,
"filterClicks": 1,
"properties": {
"ANY_ADDITIONAL_PROPERTY": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"recipients": "text",
"isMMS": true,
"longcodeId": 1,
"longcode": 1,
"userId": 1,
"userDescription": "text",
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": [
1
],
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"accountId": 1,
"numberIds": [
"text"
],
"subscriberIds": [
1
],
"groupIds": [
"text"
],
"allSubscribers": 1,
"message": "text",
"url": "text",
"scheduledDate": "2025-12-15T22:44:42.368Z",
"timestamp": "2025-12-15T22:44:42.368Z",
"repeatMessage": 1,
"repeatDays": [
1
],
"repeatMonthType": "text",
"excludedGroupIds": [
"text"
],
"header": "text",
"footer": "text",
"threadId": 1,
"filterClicks": 1,
"properties": {
"ANY_ADDITIONAL_PROPERTY": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"recipients": "text",
"isMMS": true,
"longcodeId": 1,
"longcode": 1,
"userId": 1,
"userDescription": "text",
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": [
1
],
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"accountId": 1,
"numberIds": [
"text"
],
"subscriberIds": [
1
],
"groupIds": [
"text"
],
"allSubscribers": 1,
"message": "text",
"url": "text",
"scheduledDate": "2025-12-15T22:44:42.368Z",
"timestamp": "2025-12-15T22:44:42.368Z",
"repeatMessage": 1,
"repeatDays": [
1
],
"repeatMonthType": "text",
"excludedGroupIds": [
"text"
],
"header": "text",
"footer": "text",
"threadId": 1,
"filterClicks": 1,
"properties": {
"ANY_ADDITIONAL_PROPERTY": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"recipients": "text",
"isMMS": true,
"longcodeId": 1,
"longcode": 1,
"userId": 1,
"userDescription": "text",
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": [
1
],
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": [
{
"day": "text",
"messages": [
{
"id": 1,
"accountId": 1,
"numberIds": [
"text"
],
"subscriberIds": [
1
],
"groupIds": [
"text"
],
"allSubscribers": 1,
"message": "text",
"url": "text",
"scheduledDate": "2025-12-15T22:44:42.368Z",
"timestamp": "2025-12-15T22:44:42.368Z",
"repeatMessage": 1,
"repeatDays": [
1
],
"repeatMonthType": "text",
"excludedGroupIds": [
"text"
],
"header": "text",
"footer": "text",
"threadId": 1,
"filterClicks": 1,
"properties": {
"ANY_ADDITIONAL_PROPERTY": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"recipients": "text",
"isMMS": true,
"longcodeId": 1,
"longcode": 1,
"userId": 1,
"userDescription": "text",
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": [
1
],
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1
}
]
}
]
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"firstName": "text",
"lastName": "text",
"number": "text",
"email": "text",
"groupName": "text",
"memberCount": 1
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}GET /v3/scheduled/{scheduledMessageId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/scheduled/{scheduledMessageId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 616
{
"message": "text",
"numberIds": [
1
],
"groupIds": [
1
],
"allSubscribers": true,
"scheduledDate": "text",
"image": "text",
"repeatMessage": 1,
"repeatDays": [
1
],
"repeatMonthType": "text",
"excludedGroupIds": [
1
],
"header": "text",
"footer": "text",
"isMMS": true,
"repeat": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true,
"type": "week",
"frequency": -1,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"templateId": 1,
"longcodeId": 1,
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": [
1
],
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1
}POST /v3/scheduled/{scheduledMessageId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 53
{
"isMMS": true,
"skippedAt": "2025-12-15T22:44:42.368Z"
}GET /v3/scheduled HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/scheduled/calendar/{year}/{month} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/scheduled/{scheduledMessageId}/recipients HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
DELETE /v3/scheduled/number/{number} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"allSubscribers": true,
"groups": [
1
],
"subscribers": [
1
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"unread": true,
"latestMessage": {
"message": "text",
"timestamp": "text"
},
"multipleRecipients": true
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"accountId": 1,
"name": "text",
"items": [
{
"id": 1,
"timestamp": "text",
"message": 1,
"inbound": 1,
"table": 1,
"scheduled": true,
"users": 1,
"replyFrom": 1,
"url": 1
}
],
"count": 1,
"multipleRecipients": true,
"recentReply": {
"name": "text",
"number": "text"
}
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}GET /v3/threads/{threadId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
DELETE /v3/threads/{threadId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/threads HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/threads/{threadId}/read HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/threads/{threadId}/items?page=1&pageSize=1&getScheduled=true HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
DELETE /v3/threads/{threadId}/items HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"endDate": "2025-12-15T22:44:42.368Z",
"created": "2025-12-15T22:44:42.368Z",
"groupIds": [
1
],
"campaignMessages": [
{
"id": 1,
"accountId": 1,
"title": "text",
"content": "text",
"attachment": "text",
"added": "2025-12-15T22:44:42.368Z",
"sequence": 1,
"delay": 1,
"timeOfDay": "text",
"dripCampaignId": 1,
"isMms": 1,
"memberCount": 1
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"endDate": "2025-12-15T22:44:42.368Z",
"created": "2025-12-15T22:44:42.368Z",
"groupIds": [
1
],
"campaignMessages": [
{
"id": 1,
"accountId": 1,
"title": "text",
"content": "text",
"attachment": "text",
"added": "2025-12-15T22:44:42.368Z",
"sequence": 1,
"delay": 1,
"timeOfDay": "text",
"dripCampaignId": 1,
"isMms": 1,
"memberCount": 1
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"endDate": "2025-12-15T22:44:42.368Z",
"created": "2025-12-15T22:44:42.368Z",
"groupIds": [
1
],
"campaignMessages": [
{
"id": 1,
"accountId": 1,
"title": "text",
"content": "text",
"attachment": "text",
"added": "2025-12-15T22:44:42.368Z",
"sequence": 1,
"delay": 1,
"timeOfDay": "text",
"dripCampaignId": 1,
"isMms": 1,
"memberCount": 1
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"endDate": "2025-12-15T22:44:42.368Z",
"created": "2025-12-15T22:44:42.368Z",
"groupIds": [
1
],
"campaignMessages": [
{
"id": 1,
"accountId": 1,
"title": "text",
"content": "text",
"attachment": "text",
"added": "2025-12-15T22:44:42.368Z",
"sequence": 1,
"delay": 1,
"timeOfDay": "text",
"dripCampaignId": 1,
"isMms": 1,
"memberCount": 1
}
]
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"endDate": "2025-12-15T22:44:42.368Z",
"created": "2025-12-15T22:44:42.368Z",
"groupIds": [
1
],
"campaignMessages": [
{
"id": 1,
"accountId": 1,
"title": "text",
"content": "text",
"attachment": "text",
"added": "2025-12-15T22:44:42.368Z",
"sequence": 1,
"delay": 1,
"timeOfDay": "text",
"dripCampaignId": 1,
"isMms": 1,
"memberCount": 1
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"accountId": 1,
"title": "text",
"content": "text",
"attachment": "text",
"added": "2025-12-15T22:44:42.368Z",
"sequence": 1,
"delay": 1,
"timeOfDay": "text",
"dripCampaignId": 1,
"isMms": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"accountId": 1,
"title": "text",
"content": "text",
"attachment": "text",
"added": "2025-12-15T22:44:42.368Z",
"sequence": 1,
"delay": 1,
"timeOfDay": "text",
"dripCampaignId": 1,
"isMms": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}POST /v3/drip-campaigns HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 32
{
"name": "text",
"endDate": "text"
}GET /v3/drip-campaigns/{dripCampaignId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/drip-campaigns/{dripCampaignId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 32
{
"name": "text",
"endDate": "text"
}DELETE /v3/drip-campaigns/{dripCampaignId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/drip-campaigns HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/drip-campaigns/{dripCampaignId}/start HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 13
{
"groupId": 1
}POST /v3/drip-campaigns/{dripCampaignId}/stop HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 13
{
"groupId": 1
}POST /v3/drip-campaigns/{dripCampaignId}/clone HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/drip-campaigns/{dripCampaignId}/numbers/{sequenceId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/drip-campaigns/{dripCampaignId}/messages HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 122
{
"title": "text",
"content": "text",
"attachment": "text",
"delay": 1,
"timeOfDay": "text",
"isMms": 1,
"previousId": 1,
"templateId": 1
}PATCH /v3/drip-campaigns/{dripCampaignId}/messages/{messageId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 122
{
"title": "text",
"content": "text",
"attachment": "text",
"delay": 1,
"timeOfDay": "text",
"isMms": 1,
"previousId": 1,
"templateId": 1
}DELETE /v3/drip-campaigns/{dripCampaignId}/messages/{messageId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"deeplinkUrl": "text"
}
}POST /v3/deeplinks/imessage HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 58
{
"longcodeId": 1,
"optInMessage": "text",
"senderName": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"description": "text",
"lastMessageActivity": "2025-12-15T22:44:42.368Z",
"deliveredCount": 1,
"unsubscribeCount": 1,
"responseCount": 1,
"clickCount": 1,
"clickRate": 1,
"conversionCount": 1,
"conversionRevenue": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"description": "text",
"lastMessageActivity": "2025-12-15T22:44:42.368Z",
"deliveredCount": 1,
"unsubscribeCount": 1,
"responseCount": 1,
"clickCount": 1,
"clickRate": 1,
"conversionCount": 1,
"conversionRevenue": 1
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"description": "text",
"isArchived": true,
"linkRecipientCount": 1,
"timespanAnalytics": [
{
"ANY_ADDITIONAL_PROPERTY": {
"deliveredCount": 1,
"clickCount": 1,
"spend": 1,
"replyCount": 1,
"unsubscribeCount": 1,
"creditCount": 1,
"conversionCount": 1
}
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text"
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"isMMS": true,
"message": "text",
"createdAt": "text",
"recipientCount": 1,
"processedCount": 1,
"emailRecipientCount": 1,
"deliveredCount": 1,
"unsubscribeCount": 1,
"responseCount": 1,
"clickCount": 1,
"clickRate": 1,
"conversionCount": 1
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/campaigns/{campaignId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/campaigns HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/campaigns/{campaignId}/analytics?startDate=text&endDate=text&interval=days HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/campaigns/options HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/campaigns/{campaignId}/messages HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"to": "text",
"timeoutSeconds": 1,
"type": "sms",
"status": "PENDING",
"messageId": "text",
"verificationId": "text",
"deliverable": true,
"reason": "text",
"carrier": "text",
"lineType": "text",
"risk": null
}{
"to": "text",
"verificationId": "text",
"status": "PENDING"
}POST /v3/verify/sms/send-code HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 224
{
"to": "text",
"serviceName": "text",
"timeoutSeconds": 1,
"codeLength": 1,
"realtime": true,
"bypass": true,
"externalId": "text",
"longcodeId": 1,
"tags": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"poolId": "text",
"senderName": "text",
"gated": true
}POST /v3/verify/sms/check-code HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 51
{
"to": "text",
"verificationId": "text",
"code": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"message": "text",
"timestamp": "2025-12-15T22:44:42.368Z",
"attachment": "text",
"mms": true
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"message": "text",
"timestamp": "2025-12-15T22:44:42.368Z",
"attachment": "text",
"mms": true
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"message": "text",
"timestamp": "2025-12-15T22:44:42.368Z",
"attachment": "text",
"mms": true
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"message": "text",
"timestamp": "2025-12-15T22:44:42.368Z",
"attachment": "text",
"mms": true
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}POST /v3/templates HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 65
{
"name": "text",
"message": "text",
"attachment": "text",
"isMMS": true
}GET /v3/templates/{id}?isMMS=text HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/templates/{id} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 84
{
"name": "text",
"message": "text",
"attachment": "text",
"isMMS": true,
"updateAsMMS": true
}POST /v3/templates/{id} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 14
{
"isMMS": true
}GET /v3/templates HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"hidden": 1,
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z",
"memberCount": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"hidden": 1,
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z",
"memberCount": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"hidden": 1,
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z",
"memberCount": 1
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}POST /v3/groups HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 502
{
"id": 1,
"accountId": 1,
"name": "text",
"hidden": 1,
"keyword": "text",
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z"
}DELETE /v3/groups/{groupId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/groups/{groupId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 502
{
"id": 1,
"accountId": 1,
"name": "text",
"hidden": 1,
"keyword": "text",
"welcomeMessage": "text",
"description": "text",
"parentWebinarId": "text",
"displayName": "text",
"sortOrder": 1,
"type": "static",
"settings": {
"match": "AND",
"conditions": [
{
"type": "text",
"conditionAttribute": "text",
"conditionOperator": "equals",
"conditionCategory": "text",
"conditionValue": [
"text"
],
"conditionSubOperator": "equals",
"conditionSubValue": [
"text"
],
"shouldLoadDefaultValue": true
}
]
},
"isTemporary": true,
"createdAt": "2025-12-15T22:44:42.368Z"
}GET /v3/groups HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/groups/{groupId}/subscribers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 44
{
"subscriberId": 1,
"addToDripCampaigns": true
}DELETE /v3/groups/{groupId}/subscribers/{subscriberId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"url": "text"
}
}POST /v3/subscribers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 181
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
}GET /v3/subscribers/{idOrNumberOrEmail} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/subscribers/{idOrNumberOrEmail} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 181
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
}DELETE /v3/subscribers/{idOrNumberOrEmail} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/subscribers/export HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/subscribers HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"totalRecordCount": 1,
"createdRecordCount": 1,
"errorRecordCount": 1,
"createdRecords": [
{
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
}
],
"errorRecords": [
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text",
"error": "text"
}
]
}
}PATCH /v3/subscribers/bulk HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 221
[
{
"record": {
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
},
"id": 1
}
]{
"success": true,
"error": "text",
"message": "text",
"data": {
"totalRecordCount": 1,
"updatedRecordCount": 1,
"errorRecordCount": 1,
"updatedRecords": [
{
"record": {
"id": 1,
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"date": "2025-12-15T22:44:42.368Z",
"countryId": 1,
"groups": [
{
"id": 1,
"name": "text",
"addedToGroupAt": "2025-12-15T22:44:42.368Z"
}
],
"subscriberFieldData": [
{
"id": 1,
"subscriberFieldId": 1,
"data": "text"
}
],
"signupMethod": 1,
"longNumber": 1,
"carrierId": 1
},
"id": 1
}
],
"errorRecords": [
{
"error": "text",
"id": 1
}
]
}
}POST /v3/subscribers/bulk HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 203
[
{
"firstName": "text",
"lastName": "text",
"email": "text",
"number": 1,
"e164Number": "text",
"groupIds": [
1
],
"subscriberFields": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"employeeNumber": "text",
"welcomeMessage": "text"
}
]See Send as MMS for more details.
rehost: boolean
An indicator to specify if the attached image should be rehosted by MTA before being sent.
See Send as MMS for more details.
templateId: number
A template id corresponding to the controlled template that should be used as the body of the message.
linkId: number
If the message content is specified using a templateId and the template includes a link, this field is used to find the correspinding link.
subscriberIds: number[]
A list of subscriber ids to send the message to.
subscribers: (number | string)[]
A list of phone numbers and/or emails to send the message to. Phone numbers can be provided in the number or string type.
allSubscribers: boolean
An indicator to send the message to all subscribers if true.
Default: false.
groups: number[]
A list of group ids to send the message to.
threadId: number
A thread id to send the message to.
isMMS: boolean
An indicator to send the message as MMS instead of SMS.
Default behavior: False for messages without an attachment. True for messages with an attachment.
See Send as MMS for more details.
header: string
A message to include before the message body. A newline will be added between the header and message body.
footer: string
A message to include at the end of the message body. A space will be added between the message body and footer.
longcodeId: number
The longcode id corresponding to the dedicated number to send the message from.
senderName: string
If your account is enabled for iMessage sending, specify your desired sender name using this field.
externalId: string
An external id to include with the metadata of your message. The externalId will be included in webhook notifications.
properties: { [key: string]: string }
Properties are used to populate the liquid template variables in your message.
See Using Properties for details.
scheduledDate: string
The date and time a message should be scheduled to send.
Must be in ISO8601 format (eg. "20230302T173000-0500").
repeat: IRepeat
If a scheduled message should go out repeatedly, repeat indicates how.
Default behavior: If repeat is not provided, the scheduled message will not repeat.
interface IRepeat {
monday: boolean;
tuesday: boolean;
wednesday: boolean;
thursday: boolean;
friday: boolean;
saturday
tags
Tags is a map of custom data to be included with your webhook notifications.
Recipients: One of the following
subscriberIds
subscribers
allSubscribers
groups
threadId
If templateId is used and corresponds to a template that requires a link, linkId is required.
Links can be created using the Create Short Link endpoint.
imessage://[email protected]&body=Signup) which launches iMessage and prefills their opt-in message. All they have to do is hit send.If they cannot send/receive iMessages (for example, the link was opened on an Android phone or the web), the deeplink will gracefully redirect them to a context-sensible location (launch the SMS app instead, show a web opt-in form etc.)
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
See Send as MMS for more details.
rehost: boolean
An indicator to specify if the attached image should be rehosted by MTA before being sent.
See Send as MMS for more details.
templateId: number
A template id corresponding to the controlled template that should be used as the body of the message.
linkId: number
If the message content is specified using a templateId and the template includes a link, this field is used to find the correspinding link.
subscriberIds: number[]
A list of subscriber ids to send the message to.
subscribers: (number | string)[]
A list of phone numbers and/or emails to send the message to. Phone numbers can be provided in the number or string type.
allSubscribers: boolean
An indicator to send the message to all subscribers if true.
Default: false.
groups: number[]
A list of group ids to send the message to.
threadId: number
A thread id to send the message to.
isMMS: boolean
An indicator to send the message as MMS instead of SMS.
Default behavior: False for messages without an attachment. True for messages with an attachment.
See Send as MMS for more details.
header: string
A message to include before the message body. A newline will be added between the header and message body.
footer: string
A message to include at the end of the message body. A space will be added between the message body and footer.
longcodeId: number
The longcode id corresponding to the dedicated number to send the message from.
senderName: string
If your account is enabled for iMessage sending, specify your desired sender name using this field.
externalId: string
An external id to include with the metadata of your message. The externalId will be included in webhook notifications.
properties: { [key: string]: string }
Properties are used to populate the liquid template variables in your message.
See Using Properties for details.
scheduledDate: string
The date and time a message should be scheduled to send.
Must be in ISO8601 format (eg. "20230302T173000-0500").
repeat: IRepeat
If a scheduled message should go out repeatedly, repeat indicates how.
Default behavior: If repeat is not provided, the scheduled message will not repeat.
interface IRepeat {
monday: boolean;
tuesday: boolean;
wednesday: boolean;
thursday: boolean;
friday: boolean;
saturday
tags
Tags is a map of custom data to be included with your webhook notifications.
Recipients: One of the following
subscriberIds
subscribers
allSubscribers
groups
threadId
If templateId is used and corresponds to a template that requires a link, linkId is required.
Links can be created using the Create Short Link endpoint.
imessage://[email protected]&body=Signup) which launches iMessage and prefills their opt-in message. All they have to do is hit send.If they cannot send/receive iMessages (for example, the link was opened on an Android phone or the web), the deeplink will gracefully redirect them to a context-sensible location (launch the SMS app instead, show a web opt-in form etc.)
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
See Send as MMS for more details.
rehost: boolean
An indicator to specify if the attached image should be rehosted by MTA before being sent.
See Send as MMS for more details.
templateId: number
A template id corresponding to the controlled template that should be used as the body of the message.
linkId: number
If the message content is specified using a templateId and the template includes a link, this field is used to find the correspinding link.
subscriberIds: number[]
A list of subscriber ids to send the message to.
subscribers: (number | string)[]
A list of phone numbers and/or emails to send the message to. Phone numbers can be provided in the number or string type.
allSubscribers: boolean
An indicator to send the message to all subscribers if true.
Default: false.
groups: number[]
A list of group ids to send the message to.
threadId: number
A thread id to send the message to.
isMMS: boolean
An indicator to send the message as MMS instead of SMS.
Default behavior: False for messages without an attachment. True for messages with an attachment.
See Send as MMS for more details.
header: string
A message to include before the message body. A newline will be added between the header and message body.
footer: string
A message to include at the end of the message body. A space will be added between the message body and footer.
longcodeId: number
The longcode id corresponding to the dedicated number to send the message from.
senderName: string
If your account is enabled for iMessage sending, specify your desired sender name using this field.
externalId: string
An external id to include with the metadata of your message. The externalId will be included in webhook notifications.
properties: { [key: string]: string }
Properties are used to populate the liquid template variables in your message.
See Using Properties for details.
scheduledDate: string
The date and time a message should be scheduled to send.
Must be in ISO8601 format (eg. "20230302T173000-0500").
repeat: IRepeat
If a scheduled message should go out repeatedly, repeat indicates how.
Default behavior: If repeat is not provided, the scheduled message will not repeat.
interface IRepeat {
monday: boolean;
tuesday: boolean;
wednesday: boolean;
thursday: boolean;
friday: boolean;
saturday
tags
Tags is a map of custom data to be included with your webhook notifications.
Recipients: One of the following
subscriberIds
subscribers
allSubscribers
groups
threadId
If templateId is used and corresponds to a template that requires a link, linkId is required.
Links can be created using the Create Short Link endpoint.
imessage://[email protected]&body=Signup) which launches iMessage and prefills their opt-in message. All they have to do is hit send.If they cannot send/receive iMessages (for example, the link was opened on an Android phone or the web), the deeplink will gracefully redirect them to a context-sensible location (launch the SMS app instead, show a web opt-in form etc.)
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
See Send as MMS for more details.
rehost: boolean
An indicator to specify if the attached image should be rehosted by MTA before being sent.
See Send as MMS for more details.
templateId: number
A template id corresponding to the controlled template that should be used as the body of the message.
linkId: number
If the message content is specified using a templateId and the template includes a link, this field is used to find the correspinding link.
subscriberIds: number[]
A list of subscriber ids to send the message to.
subscribers: (number | string)[]
A list of phone numbers and/or emails to send the message to. Phone numbers can be provided in the number or string type.
allSubscribers: boolean
An indicator to send the message to all subscribers if true.
Default: false.
groups: number[]
A list of group ids to send the message to.
threadId: number
A thread id to send the message to.
isMMS: boolean
An indicator to send the message as MMS instead of SMS.
Default behavior: False for messages without an attachment. True for messages with an attachment.
See Send as MMS for more details.
header: string
A message to include before the message body. A newline will be added between the header and message body.
footer: string
A message to include at the end of the message body. A space will be added between the message body and footer.
longcodeId: number
The longcode id corresponding to the dedicated number to send the message from.
senderName: string
If your account is enabled for iMessage sending, specify your desired sender name using this field.
externalId: string
An external id to include with the metadata of your message. The externalId will be included in webhook notifications.
properties: { [key: string]: string }
Properties are used to populate the liquid template variables in your message.
See Using Properties for details.
scheduledDate: string
The date and time a message should be scheduled to send.
Must be in ISO8601 format (eg. "20230302T173000-0500").
repeat: IRepeat
If a scheduled message should go out repeatedly, repeat indicates how.
Default behavior: If repeat is not provided, the scheduled message will not repeat.
interface IRepeat {
monday: boolean;
tuesday: boolean;
wednesday: boolean;
thursday: boolean;
friday: boolean;
saturday
tags
Tags is a map of custom data to be included with your webhook notifications.
Recipients: One of the following
subscriberIds
subscribers
allSubscribers
groups
threadId
If templateId is used and corresponds to a template that requires a link, linkId is required.
Links can be created using the Create Short Link endpoint.
imessage://[email protected]&body=Signup) which launches iMessage and prefills their opt-in message. All they have to do is hit send.If they cannot send/receive iMessages (for example, the link was opened on an Android phone or the web), the deeplink will gracefully redirect them to a context-sensible location (launch the SMS app instead, show a web opt-in form etc.)
Success
BadRequestError
UnauthorizedError
ForbiddenError
RateLimitError
InternalServerError
message: string
The contents of the message being sent
isMMS: boolean
An indicator to that the message is an MMS instead of SMS.
Default behavior: False
totalCost: number
The total cost for sending the message
messageCredits: number
The number of message credits used for sending the message
premiumCredits: number
The number of premium credits used for sending the message
messageCount: number
The number of messages that would be sent
POST /v3/send HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 1084
{
"groups": [
1
],
"subscribers": [
1
],
"subscriberIds": [
1
],
"allSubscribers": true,
"excludedGroupIds": [
1
],
"threadId": 1,
"message": "text",
"image": "text",
"rehost": true,
"externalId": "text",
"scheduledDate": "text",
"header": "text",
"footer": "text",
"properties": {
"ANY_ADDITIONAL_PROPERTY": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"isMMS": true,
"repeat": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true,
"type": "week",
"frequency": -1,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"linkClickDays": 1,
"templateId": 1,
"linkId": 1,
"longcodeId": 1,
"eventId": "text",
"skipHeaderFooter": true,
"addPlaceholder": true,
"source": "control-panel",
"userSignature": "text",
"tags": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"poolId": "text",
"userId": 1,
"senderName": "text",
"exactSender": true,
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true
},
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1,
"gated": true,
"brandImage": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"messageId": "text",
"totalSent": 1,
"totalFailedInternationalRecipients": 1,
"outboundIds": [
1
]
}
}{
"subscribers": ["3175551111", "3175552222"],
"message": "Hello {{firstName}}! Visit {{link}}",
"properties": {
"3175551111": {
"firstName": "Bob",
"link": "https://example.com/abc"
},
"3175552222": {
"firstName": "Tony",
"link": "https://example.com/def"
}
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"messageId": "text",
"totalSent": 1,
"totalFailedInternationalRecipients": 1,
"outboundIds": [
1
]
}
}{
"subscribers": ["3175551111", "3175552222"],
"message": "Hello {{firstName}}! Visit {{link}}",
"properties": {
"3175551111": {
"firstName": "Bob",
"link": "https://example.com/abc"
},
"3175552222": {
"firstName": "Tony",
"link": "https://example.com/def"
}
}
}POST /v3/send HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 1084
{
"groups": [
1
],
"subscribers": [
1
],
"subscriberIds": [
1
],
"allSubscribers": true,
"excludedGroupIds": [
1
],
"threadId": 1,
"message": "text",
"image": "text",
"rehost": true,
"externalId": "text",
"scheduledDate": "text",
"header": "text",
"footer": "text",
"properties": {
"ANY_ADDITIONAL_PROPERTY": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"isMMS": true,
"repeat": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true,
"type": "week",
"frequency": -1,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"linkClickDays": 1,
"templateId": 1,
"linkId": 1,
"longcodeId": 1,
"eventId": "text",
"skipHeaderFooter": true,
"addPlaceholder": true,
"source": "control-panel",
"userSignature": "text",
"tags": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"poolId": "text",
"userId": 1,
"senderName": "text",
"exactSender": true,
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true
},
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1,
"gated": true,
"brandImage": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"messageId": "text",
"totalSent": 1,
"totalFailedInternationalRecipients": 1,
"outboundIds": [
1
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"name": "text",
"message": "text",
"timestamp": "2025-12-15T22:44:42.368Z",
"attachment": "text",
"mms": true
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"accountId": 1,
"name": "text",
"message": "text",
"requiresLink": true,
"type": "dispensary",
"isMMS": true,
"isGlobal": true,
"url": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"assignedChildAccounts": [
{
"id": 1,
"accountName": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"message": "text",
"timestamp": "2025-12-15T22:44:42.368Z",
"attachment": "text",
"mms": true
}
}{
"success": true,
"error": "text",
"message": "text",
"data": null
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"message": "text",
"timestamp": "2025-12-15T22:44:42.368Z",
"attachment": "text",
"mms": true
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"created": "2025-12-15T22:44:42.368Z",
"longUrl": "text",
"shortUrl": "text",
"finalUrl": "text",
"trackingEnabled": true,
"isMms": true,
"clicks": 1,
"tags": [
{
"id": 1,
"tag": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"id": 1,
"name": "text",
"message": "text",
"timestamp": "2025-12-15T22:44:42.368Z",
"attachment": "text",
"mms": true
}
}{
"subscribers": ["3175551111", "3175552222"],
"message": "Hello {{firstName}}! Visit {{link}}",
"properties": {
"3175551111": {
"firstName": "Bob",
"link": "https://example.com/abc"
},
"3175552222": {
"firstName": "Tony",
"link": "https://example.com/def"
}
}
}POST /v3/send HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 1084
{
"groups": [
1
],
"subscribers": [
1
],
"subscriberIds": [
1
],
"allSubscribers": true,
"excludedGroupIds": [
1
],
"threadId": 1,
"message": "text",
"image": "text",
"rehost": true,
"externalId": "text",
"scheduledDate": "text",
"header": "text",
"footer": "text",
"properties": {
"ANY_ADDITIONAL_PROPERTY": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"isMMS": true,
"repeat": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true,
"type": "week",
"frequency": -1,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"linkClickDays": 1,
"templateId": 1,
"linkId": 1,
"longcodeId": 1,
"eventId": "text",
"skipHeaderFooter": true,
"addPlaceholder": true,
"source": "control-panel",
"userSignature": "text",
"tags": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"poolId": "text",
"userId": 1,
"senderName": "text",
"exactSender": true,
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true
},
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1,
"gated": true,
"brandImage": "text"
}GET /v3/templates HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
GET /v3/controlled-templates HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true,
"error": "text",
"message": "text",
"data": {
"rows": [
{
"id": 1,
"accountId": 1,
"name": "text",
"message": "text",
"requiresLink": true,
"type": "dispensary",
"isMMS": true,
"isGlobal": true,
"url": "text",
"createdAt": "2025-12-15T22:44:42.368Z",
"updatedAt": "2025-12-15T22:44:42.368Z",
"assignedChildAccounts": [
{
"id": 1,
"accountName": "text"
}
]
}
],
"page": 1,
"pageSize": 1,
"total": 1
}
}GET /v3/controlled-templates/{controlledTemplateId} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
PATCH /v3/templates/{id} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 84
{
"name": "text",
"message": "text",
"attachment": "text",
"isMMS": true,
"updateAsMMS": true
}POST /v3/templates/{id} HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 14
{
"isMMS": true
}POST /v3/templates HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 65
{
"name": "text",
"message": "text",
"attachment": "text",
"isMMS": true
}POST /v3/links/shortlinks HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 103
{
"longUrl": "text",
"trackingEnabled": true,
"isMMS": true,
"ageCheck": true,
"tags": [
"text"
],
"isWebinar": true
}GET /v3/templates/{id}?isMMS=text HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
POST /v3/send HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 1084
{
"groups": [
1
],
"subscribers": [
1
],
"subscriberIds": [
1
],
"allSubscribers": true,
"excludedGroupIds": [
1
],
"threadId": 1,
"message": "text",
"image": "text",
"rehost": true,
"externalId": "text",
"scheduledDate": "text",
"header": "text",
"footer": "text",
"properties": {
"ANY_ADDITIONAL_PROPERTY": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"isMMS": true,
"repeat": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true,
"type": "week",
"frequency": -1,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"linkClickDays": 1,
"templateId": 1,
"linkId": 1,
"longcodeId": 1,
"eventId": "text",
"skipHeaderFooter": true,
"addPlaceholder": true,
"source": "control-panel",
"userSignature": "text",
"tags": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"poolId": "text",
"userId": 1,
"senderName": "text",
"exactSender": true,
"customRepeatFrequencyType": 1,
"customRepeatFrequency": 1,
"customRepeatDays": {
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true
},
"customEndMessageType": 1,
"customEndMessageDate": "text",
"customEndMessageOccurrences": 1,
"gated": true,
"brandImage": "text"
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"messageId": "text",
"totalSent": 1,
"totalFailedInternationalRecipients": 1,
"outboundIds": [
1
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"validRecipients": [
{
"externalId": 1,
"number": 1,
"email": "text"
}
],
"invalidRecipients": [
{
"externalId": 1,
"number": 1,
"email": "text",
"error": "text"
}
]
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"shortenedMessage": "text"
}
}POST /v3/send/cost HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 57
{
"from": "text",
"to": "text",
"message": "text",
"isMMS": true
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"fee": 1,
"carrierFee": 1,
"totalCost": 1,
"messageCredits": 1,
"premiumCredits": 1,
"messageCount": 1
}
}{
"success": true,
"error": "text",
"message": "text",
"data": {
"totalRecipients": 1,
"fromNumber": 1,
"longcodeStatus": "Basic",
"isLongcodeRegistered": true,
"time": {
"hours": 1,
"minutes": 1
},
"timeByCarrier": [
{
"carrier": "text",
"time": {
"hours": 1,
"minutes": 1
}
}
],
"brandRegistration": {
"status": "Pending",
"estimatedApprovalDate": "text"
}
}
}{
"subscribers": ["3175551111", "3175552222"],
"message": "Hello {{firstName}}! Visit {{link}}",
"properties": {
"3175551111": {
"firstName": "Bob",
"link": "https://example.com/abc"
},
"3175552222": {
"firstName": "Tony",
"link": "https://example.com/def"
}
}
}POST /v3/send/validate-recipients HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 87
{
"recipients": [
{
"externalId": 1,
"number": 1,
"email": "text"
}
],
"validateUnsubscribes": true
}POST /v3/send/shorten-message HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 18
{
"message": "text"
}POST /v3/send/messaging-speeds HTTP/1.1
Host: api.mobile-text-alerts.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 125
{
"longcodeId": 1,
"groups": [
1
],
"subscriberIds": [
1
],
"allSubscribers": true,
"excludedGroupIds": [
1
],
"isMMS": true,
"linkClickDays": 1
}enum RepeatFrequency {
NEVER = 0,
DAILY = 1,
WEEKLY = 2,
BIWEEKLY = 3,
MONTHLY = 4,
ANNUALLY = 5
}enum RepeatFrequency {
NEVER = 0,
DAILY = 1,
WEEKLY = 2,
BIWEEKLY = 3,
MONTHLY = 4,
ANNUALLY = 5
}enum RepeatFrequency {
NEVER = 0,
DAILY = 1,
WEEKLY = 2,
BIWEEKLY = 3,
MONTHLY = 4,
ANNUALLY = 5
}enum RepeatFrequency {
NEVER = 0,
DAILY = 1,
WEEKLY = 2,
BIWEEKLY = 3,
MONTHLY = 4,
ANNUALLY = 5
}