Only this pageAll pages
Powered by GitBook
1 of 75

Developer Center

Loading...

Loading...

Getting Started

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

AI

Loading...

Loading...

Loading...

Loading...

Messaging Routes

Loading...

Loading...

Loading...

Loading...

Loading...

Tutorials

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Use Cases

Loading...

Loading...

API REFERENCE

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...

Get an API Key

Learn how to generate API Keys to create authenticated requests to the Mobile Alerts API.

For free trials accounts please contact us to receive an API key.

Generate an API Key

API Keys can be generated in the Mobile Text Alerts platform dashboard.

  1. Visit for your account. This is under the three-dot menu in the top right of the platform dashboard.

  2. Select the tab or scroll down to Developer Resources.

  3. 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.

Bearer Token Authentication

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}"

Example request to verify the API Key

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"

Developer Center Introduction

Learn how to get started with the Mobile Text Alerts API.

Welcome to the Mobile Text Alerts Developer Center

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.

Latest Updates

See the latest revisions, new content and updated references for all developer resources in Developer Center.

The icon indicates an AI-first feature.

2025

First Steps
1

Sign Up for your Free SMS Trial Account

Create your free account

2

Get an API Key

Mobile Text Alerts API endpoints use bearer token authentication. Requests must include an Authorization header with a value of Bearer {myAPIKey} . API Keys are unique access tokens assigned to a Mobile Text Alerts account, learn more at .

3

Explore actions

Once authenticated, you can use the Mobile Text Alerts API to send messages, retrieve subscriber information, advanced features like configuring smart responses and more. All endpoints in the API adhere to REST conventions and utilize standard HTTP methods.

December 2025
  • Launched new SDKs page to help you learn how to integrate with MTA’s API across different platforms and languages. First SDK subpage added:

    • TypeScript SDK

November 2025

  • Launched new AI section, here you can learn how to utilize all of Mobile Text Alerts AI-first features. New pages:

    • How to Use AI with Mobile Text Alerts

    • MCP Servers

    • MTA Actions MCP Server

October 2025

  • Expanded API Reference with newly released API endpoints and refreshed documentation content on over 50 endpoints.

September 2025

  • 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.

August 2025

  • Expanded FAQ page with more commonly questions, sourced directly from conversations with our users!

  • Improvements to the following pages:

    • Get an API Key

    • Setting up Webhooks

    • Messaging Routes - , ,

  • Added a new Messaging Route Guide -

July 2025

  • 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

June 2025

  • 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.

May 2025

  • Added a new dedicated Getting Started guide: Check Delivery Status

  • New Tutorials:

    • Custom Subscriber Attributes

    • Group Subscribers

  • Launched a new section with our first use case study:

April 2025

  • 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.

Settings
Developer
/verify-api-key

Add a Subscriber

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.

Add a Subscriber with the Mobile Text Alerts 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.

Example request to add a subscriber

Below is an example cURL POST request to the /subscribers endpoint to add a new subscriber.

To view all possible request parameters see:

Example Response

If valid, a response will be returned with the message: "Subscriber created successfully."

Send a Message

Learn how create a request to the Mobile Text Alerts API that will send a message.

Send a message with the Mobile Text Alerts API

Messages are sent via the API with POST requests to the /send endpoint. The request data must contain both recipient and content information.

Required Fields: (Must be one of the following from each)

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]"}}          
Connect with Claude
10DLC
Toll-Free
Short Code
Message Templates
Send an iMessage
RCS / RBM
Custom Subscriber Attributes
assigning
Use Cases
Generate and validate 2FA / MFA codes via SMS
Screenshot of Copy Menu

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?

Get an API Key
Send a Message
Add a Subscriber
Setting up Webhooks
API Basics
Send an SMS Message
Send an MMS Message
Message Templates
Manage Subscribers
FAQ
Cover
Cover
Cover

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.

    How to build a sample request to the API

    Let's create a simple request to the /send endpoint.

    1

    Indicate the recipient(s)

    You can send a message to a phone number as a test. Set the subscribers field to the recipient phone number.

    2

    Create message content

    Write the content of the message to be sent.

    3

    Form API request

    Create the API request to the /send endpoint. Remember to include header.

    4

    Receive Response

    The API will return a message about the status of your request.

    Click here to learn more about how to customize your message sends.

    View more Subscriber API Endpoints

    Manage Subscribers

    Message Sending

    See the different tutorials for ways to send messages with the MTA API

    SDKs

    Mobile Text Alerts provides multiple SDKs to help you integrate with Mobile Text Alert's API across different platforms and languages.

    SDK Overview

    What is an SDK?

    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.

    Send iMessages

    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.

    Send iMessages via the API

    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.

    Chatbots

    • 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"
        }
    }

    Mobile Text Alerts SDKs

    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.

    Using the SDKs

    Generate an API Key

    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.

    Install an SDK

    See below to learn more about available official supported SDK libraries:

    • TypeScript SDK

    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:

    Send an SMS Message
    Send an MMS Message
    Send an iMessage
    Receive and Reply to Messages
    Message Templates
    After completing the necessary configuration and setup steps, you should have a Sender Identity attached to one of your existing outbound longcodes used for SMS/MMS. This structure enables minimal change necessary to start using the iMessage route and provides flexibility to manage Sender Identities like you currently manage longcodes.

    Specify a Sender Identity with senderName

    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.

    Specify a Sender Identity with 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.

    Create a request to the /send endpoint with the Sender Identity

    See Send a Message to learn more about making a /send call to the API.

    Webhooks

    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.

    opting in to receive iMessages
    fallback to SMS
    message templates
    Authorization
    POST /chatbots
    GET /chatbots/{chatbotId}
    PATCH /chatbots/{chatbotId}
    GET /chatbots

    API Basics

    Learn more about REST APIs and how to interact with them.

    What is an API?

    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 APIs

    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 in REST

    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.

    HTTP Methods:

    • 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.

    REST API Responses

    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.

    Error Response Codes

    The Mobile Text API returns HTTP status codes and JSON-based error codes and messages.

    HTTP Status Codes

    Each request to the API will return an HTTP status code, a three-digit code that indicates the outcome of the request.

    Code
    Description

    200

    RCS / RBM

    Learn about Rich Communication Services (RCS) messaging and how it is used for businesses with RBM (RCS Business Messaging)

    What is RCS 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.

    RCS Message Features

    • 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

    Who can receive RCS messages?

    Android

    RCS is currently available for virtually all Android phones (including Samsung) via the Google Messages app.

    Apple

    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.

    What is RCS Business Messaging (RBM)?

    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.

    RCS/RBM Agents

    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.

    How to send RCS messages with the MTA API

    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.

    Connect with Claude

    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.

    Add the MTA Actions MCP Server

    1. Open Claude (web or Desktop app) and click the "Search and tools" icon and select Manage Connectors.

    2. Under Connectors, click Add custom connector (or + Add) to begin the connection process.

    3. 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.

    Learn more

    Visit to learn more about custom connectors using remote MCP.

    iMessage

    Learn the basics of iMessage

    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.

    What is 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.

    Advantages of iMessage

    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.

    How to send iMessages with Mobile Text Alerts

    Request Parameters

    Learn the types of parameters used in a request to the Mobile Text Alerts API.

    Header Parameters

    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

    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.

    Request Bodies

    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:

    Subscribers

    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.

    Smart Replies

    • 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

    Request / Response Headers

    Learn which headers are used in MTA API calls and responses.

    Request Headers

    Request headers contain information about the client request. Learn more about the header types used by the Mobile Text Alerts API.

    Authorization

    Rate Limits

    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.

    General Rate Limit

    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).

    How to Use AI with Mobile Text Alerts

    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.

    AI in Platform Dashboard

    In the , there are several built-in AI powered features such as:

    MTA Actions MCP Server

    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.

    Access the Server

    "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.

    - Encryption is on by default for Google Messages users with RCS enabled, protecting messages from being accessed by Google or other third parties.
    Learn more about RCS Messaging
    Learn more about RCS Business Messaging
    Send a Message
    Key Features of an RCS Message
    • 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:

  • HTTP status code
    Response Headers
    Give the connector a friendly name such as: “Mobile Text Alerts”.
    • 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.

  • Claude Support
    Server URL

    The Actions MCP server is a remote server hosted at the following URL:

    Learn more about connecting to remote MCP servers.

    Authorization

    You can authenticate with the following methods:

    OAuth (recommended)

    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.

    Bearer Token Authentication

    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.

    Tools & Usage

    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.

    Troubleshooting

    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/mcp
    The Authorization header is used for authentication purposes in HTTP requests. This is a token or credentials used to prove the client's identity. The Mobile Text Alerts API uses Bearer Token Authentication with an API Key.

    Header 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

    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

    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.

    Parameter
    Type
    Description

    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.

    Note that Rate Limits are not the same as Message throughput, which is measured in message segments per second (MPS). MPS throughput is determined based on the sender's Brand type, Campaign type (use case), and Trust Score (for Standard Brands).

    Your rate limit usage can be tracked in the X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset response headers.

    Account Based Rate Limiting

    Some endpoints use account based rate limiting, where the rate limit is determined by the authenticated account instead of the IP address.

    Endpoint
    Rate Limit

    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

    Suggest a Message
  • Shorten a Message

  • Generate an Image

  • Look for the icon for quick access to these features.

    Mobile Text Alerts MCP Server

    What is an MCP server?

    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.

    Developer Center

    LLM-friendly version of Developer Center

    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.

    Open in ChatGPT or Claude

    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.

    Developer Center MCP Server

    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.

    How to connect an AI assistant to the Developer Center MCP Server

    1

    Copy the Developer Center MCP Server URL

    Copy the following URL:

    (Or from any page you can click on the Copy menu on the top right, and select Connect with MCP to copy the URL.)

    2

    Configure your AI tool

    Add the MCP server URL to your AI assistant’s settings. Each tool has a different setup process, so view the documentation for your tool to see how to configure an MCP server for it.

    3

    Query the Developer Center content

    Once connected, your AI assistant will have real-time access to all the published Developer Center pages to retrieve specific pages and answer questions.

    platform dashboard
    https://api.mobile-text-alerts.com/v3/drip-campaigns/{dripCampaignId}
    Bulk Subscriber Actions
    DELETE /subscribers/{idOrNumberOrEmail}
    GET /subscribers
    GET /subscribers/export
    GET /smart-replies
    Steps to sending iMessages with Mobile Text Alerts

    10DLC

    Learn about 10DLC and how to call the API for your account's number information

    What is 10DLC?

    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.

    10DLC vs Toll-Free vs Short Code

    Pros for using 10DLC numbers

    • 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.

    Cons for using 10DLC 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.

    10DLC throughput and limits

    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).

    Summary

    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.

    Get a 10DLC for sending messages

    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).

    Learn More

    to learn more about 10DLC, registering your brand and more.

    View your Numbers with the API

    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.

    Example Request

    Example Response

    Check Delivery Status

    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.).

    Call the List Deliveries API endpoint

    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)

    Query Parameters

    Name
    Type
    Description

    Configure the delivery-status webhook

    A 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.

    Receive and Reply to Messages

    This tutorial will explain the steps involved to receive message responses and to reply to them with the API

    Prerequisite:

    In order to receive message reply notifications, you must first configure a webhook.

    If you haven't yet configured any webhooks for your account see:

    Custom Subscriber Attributes

    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.

    Manage Custom Subscriber Attributes with the API

    FAQ

    Find answers to some frequently asked questions about using the MTA API.

    How can I send a single “Hello World” message to myself?

    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:

    Short Code

    Learn about dedicated short codes and how to call the API for your account's number information

    What is a dedicated short code?

    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.

    MCP Servers

    Learn more about Model Context Protocol and its use cases.

    What is MCP?

    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.

    GET, POST /subscribers

    15 requests every 15 seconds.

    For large scale subscriber changes Bulk Create/Update Subscribers endpoints are recommended.

    GET, PATCH, DELETE /subscribers/:idOrNumber

    15 requests every 15 seconds

    POST, PATCH /subscribers/bulk

    15 requests every 15 seconds. A maximum of 1,000 records in a single request.

    POST /send
    POST /groups/{groupId}/subscribers/bulk-create
    POST /groups/{groupId}/subscribers/bulk-delete
    GET /custom-fields
    GET, POST /account-variables
    GET, PATCH, DELETE /account-variables/{idOrTitle}
    Overview of process:
    1. Send outbound message

    2. User receives message and replies, you receive the reply

    3. Create response to a reply

    See below for details of each step of the process to ensure you have the data required to complete this process.

    Step 1: Send outbound message

    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.

    Use request metadata to add an internal identifier

    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.

    - Include the externalId parameter

    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"

    - Include the tags parameter

    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"}

    Send the request

    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.

    Step 2: User receives message and replies, you receive the reply

    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.

    Step 3: Create response to a reply

    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.

    message-reply
    Setting up your first webhook
    https://developers.mobile-text-alerts.com/llms.txt
    https://developers.mobile-text-alerts.com/llms-full.txt

    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.

  • Click here
    Your Numbers on the platform dashboard
    /dedicated-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.

    GET /deliveries
    delivery status code
    Setting up your first webhook
    Delivery Status payload
    In the MTA API all endpoints for Custom Subscriber Attributes are located under /custom-fields . Custom Fields was the previous name for what is now called Custom Subscriber Attributes.

    Available API actions:

    • Create a new Custom Subscriber Attribute

    • List all Custom Subscriber Attributes

    • Update a Custom Subscriber Attribute

    • Delete a Custom Subscriber Attribute

    Create a new Custom Subscriber Attribute

    A new Custom Subscriber Attribute can be created for your account by calling the POST /custom-fields endpoint.

    Request Body

    List all Custom Subscriber Attributes

    See all Custom Subscriber Attributes that have been created on your account by calling the GET /custom-fields endpoint.

    This endpoint returns an id field for each attribute, this is used to identify the attribute as the customFieldId in other requests to /custom-fields endpoints.

    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 Request

    Update a Custom Subscriber Attribute

    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

    Example Request

    In the below example, we are updating customFieldId: 7769 with a new name.

    Delete a Custom Subscriber Attribute

    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.

    Example Request

    (Deleting attribute with id :7769)

    Get a Custom Subscriber Attribute

    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 Request

    Example Response (for a date type attribute)

    Use Custom Subscriber Attributes

    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.

    platform dashboard
    Manage Custom Subscriber Attributes in the Dashboard
    See Send a Message to learn more.

    Can the MTA API be used to send 2FA/MFA verification codes?

    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.

    What information is available in response to an API call to send a message?

    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.

    How do I schedule a message to be sent in the future?

    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.

    Example request:

    Visit to learn more.

    Can I refer to my subscribers by name in the message I send to them?

    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.

    Example request:

    Visit to learn more.

    How can I be notified when my subscribers reply to a message?

    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.

    How can I import all of my subscribers?

    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.

    How can I see the status of a sent message?

    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.).

    Can I send iMessages to my subscribers?

    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.

    Pros for using a dedicated short code
    • 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.

    Cons for using a dedicated short code

    • 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 throughput and limits

    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.

    Summary

    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.

    Short Code Type Options

    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.

    Three types of short code options

    Premium short code

    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 code

    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 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.

    Get a dedicated short code for sending messages

    If you’d like to lease a dedicated short code for your business, you can contact us.

    View your Numbers with the API

    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.

    Example request

    Example response

    10DLC vs Toll-Free vs Short Code
    Click here to see a list of applications that support MCP integrations.

    How is MCP Useful When Working with AI?

    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.

    Ways MCP enhances AI workflows

    • 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).

    Types of MCP Servers

    MCP servers can be deployed locally or remotely, depending on your use case, security needs, and environment.

    Remote-Hosted Servers

    These servers are hosted externally, usually as web services or API endpoints, and made accessible via standard MCP protocol connections.

    Typical use cases

    • 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.

    Benefits

    • Centralized maintenance and version control.

    • Easier sharing across teams or projects.

    • Scalable infrastructure (e.g., using cloud hosting).

    Example

    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 Package Servers

    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.

    Typical use cases

    • Interacting with local files, codebases, or development tools.

    • Testing or prototyping custom MCP capabilities.

    • Keeping sensitive data fully offline.

    Benefits

    • Data never leaves the local machine.

    • Low-latency performance for local context access.

    • Easy to customize or extend for specialized workflows.

    Example

    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.

    Mobile Text Alerts MCP Servers

    Developer Center

    This Developer Center GitBook site includes a Model Context Protocol (MCP) server. See Developer Center MCP Server to learn more.

    Mobile Text Alerts Actions MCP Server

    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.

    Summary

    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.

    Anthropic
    Learn more about Model Context Protocol

    Toll-Free

    Learn about Toll-Free numbers and how to call the API for your account's number information

    What is a Toll-Free number?

    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 Verification

    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..

    Pros for using a toll-free number

    • 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.

    Cons for using a toll-free number

    • 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 throughput and limits

    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.

    Summary

    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.

    Get a toll-free number for sending messages

    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.

    View your Numbers with the API

    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.

    Verification Status

    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

    Example request

    Example response

    Setting up Webhooks

    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 Overview

    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.

    Event Types

    The Mobile Text Alerts API supports the following event types for webhooks:

    Message Reply message-reply

    When MTA receives an an inbound message from a provider, MTA will post the inbound message to the customer provided endpoint.

    View

    Delivery Status delivery-status

    When MTA receives an updated delivery status from a provider regarding a customer's sent message.

    View

    Message Send message-send

    When MTA send a message to a provider, MTA will post the message to the customer provided endpoint.

    View

    Number Opt-In number-opt-in

    You 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

    Webhook Failure Email Alerts

    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.

    Register a Webhook

    POST /webhooks

    Webhooks can be created for your account by calling the Register Webhooks /webhooks endpoint of the MTA API.

    Headers

    Name
    Value

    Request Fields

    Name
    Type
    Description

    Response

    Learn more

    Assign Custom Subscriber Attributes

    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.

    This page describes how to assign Custom Subscriber Attributes, see Custom Subscriber Attributes to learn how to create these fields with the API.

    Manage Custom Subscriber Attributes in the Dashboard

    Visit the tab in the platform dashboard by selecting Subscribers > Attributes. Here you can view and search all attributes currently available for your subscribers.

    Edit or Delete Attributes

    Click on a specific attribute to edit it, or click the "trash bin" icon to delete an attribute.

    Add Attributes

    1. Click the Add Attribute button.

    2. Enter the Name of the new attribute.

    3. 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.

    Assign Attributes to Subscribers

    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.

    Use a Workflow to collect Subscriber Attributes

    Workflow Builder allows you to automatically collect data from your subscribers via SMS.

    .

    Manage Subscriber Attributes with the MTA API

    Add/Update a Subscriber's attributes

    This section explains how to add/update attributes for individual subscribers on your account. To learn how to manage the attributes that are configured for your account, visit .

    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"

    Example Request to Create a Subscriber

    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.

    View Subscriber Attributes

    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 :

    Example Response:

    Webinars

    • Get Webinar GET /webinars/{webinarIdentifier}

    • List Webinars GET /webinars

    • List Webinar Events GET /webinars/events

    Verify

    • 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

    Automated Replies

    • 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

    Send an iMessage

    View the steps to sending iMessages with Mobile Text Alerts

    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.

    Controlled Templates

    • Get Controlled Template

    • List Controlled Templates

    Dedicated Numbers

    • List Dedicated Numbers

    Shortcodes

    • List Short Codes

    Bulk Group Actions

    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

    Deeplinks

    • 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
        }
    } 
    locally installed servers
    remote-hosted servers
    3 - Approved by Carrier
  • 4 - Denied by Carrier

  • 5 - Submission Failure Reported by Carrier

  • /dedicated-numbers
    tollFreeVerificationStatus
    Your Numbers on the platform dashboard
    /dedicated-numbers
    10DLC vs Toll-Free vs Short Code

    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

    Authorization

    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.

    Message Reply payload
    Delivery Status payload
    Message Send payload
    iMessages
    RCS messages
    Number Opt-In payload

    See the expected event payloads for MTA webhooks:

    Just getting started with webhooks?

    Setting up your first webhook
    (plain text)
  • 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)

  • Manage Custom Attributes
    Manage Subscribers
    sign-up page
    Click here to learn more
    Custom Subscriber Attributes
    /subscribers
    POST /subscribers
    retrieve or update the Custom Subscriber Attribute
    GET /subscribers
    POST /verify/number
    GET /controlled-templates/{controlledTemplateId}
    GET /controlled-templates
    GET /dedicated-numbers
    GET /shortcodes
    Bulk Group Actions
    GET /groups/member-count/bulk
    POST /groups/{groupId}/subscribers/bulk-create
    POST /groups/{groupId}/subscribers/bulk-delete
    POST /deeplinks
    POST /deeplinks/imessage
    Get a Custom Subscriber Attribute

    Send an MMS Message

    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.

    MMS example

    Credit Costs

    • 1 credit cost per SMS message (160 character limit, no attachment)

    • 3 credit cost per MMS message (1550 character limit, plus 500KB image attachment)

    When to use MMS over SMS

    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

    Supported attachment types

    The following file types are supported to use as attachments for MMS:

    Image file types
    Audio file types
    Video file types
    Other file types

    Attachment hosting with rehost field

    You 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.

    How to send an MMS with the API

    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.

    How to send an MMS with the API

    1

    Indicate the recipients(s)

    You can send a message to a phone number as a test. Here you would set the subscribers field to the recipient phone number.

    2

    Send Message endpoint POST /send

    Learn More

    Message Templates

    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.

    Use a template to send a message with 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.

    Send a message template with the API

    1

    Indicate the recipients(s)

    You can send a message to a phone number as a test. Here you would set the subscribers field to the recipient phone number.

    2

    Send Message POST /send

    Using Shortlinks with Controlled Templates

    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.

    Create Short Link POST /shortlinks

    Templates API endpoints

    View all templates

    You can call GET /templates to see all the available templates on your account:

    List Templates GET /templates

    View a specific template

    To see the details on a specific template, you will need the {id} of the template. Then call GET /templates/{id} :

    Get Template GET /templates/{id}

    Update a specific template

    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:

    Update Template PATCH /templates/{id}

    Delete a Template

    To remove a specific template, you will need the {id} of the template, then call DELETE /templates/{id}

    Delete Template DELETE /templates/{id}

    Create a new template

    When creating a new template, the message field is required to hold the content of the message.

    Example request:

    Create Template POST /templates

    Template-Only Sending

    If your account is configured for template-only message sending, please use the Controlled Template endpoints below to view available templates:

    List Controlled Templates GET /controlled-templates

    Get Controlled Template Endpoint GET /controlled-templates/{controlledTemplateId}

    Template Examples

    Groups

    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

    Group Member Management

    • Add Subscriber to Group

    • Delete Subscriber from Group

    Group Member Counts

    • List All Groups and Member Count

    • Get Adaptive Group Member Count

    See for large group changes in a single request.

    Links

    • 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

    Subdomains

    • Validate Subdomain

    • Update Subdomain

    Unsubscribes

    • Create Unsubscribe POST /unsubscribes

    • Get Unsubscribe for Number GET /unsubscribes/{number}

    • List Unsubscribes GET /unsubscribes

    • Bulk Unsubscribes POST /unsubscribes/bulk

    Deliveries

    • List Deliveries GET /deliveries

    Link Tags

    • 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

    Bulk Create/Update Subscribers

    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.

    Bulk Create Subscribers

    This endpoint is used to create (or update and create) many subscriber accounts in one request.

    CreateOnly Parameter

    If 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.

    Subscriber Request Body

    Records of subscribers should be in an array.

    Required Fields for new subscribers: email or number

    Bulk Update Subscribers

    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.

    Subscriber Request Body

    Records of subscribers should be in an array.

    Account Variables

    • 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

    Custom Fields

    • 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

    Manage Subscribers

    View all the ways you can interact with the API to manage your subscribers

    Create Subscriber API Endpoint
    Create Subscriber API Endpoint

    Groups Bulk Add/Delete Subscribers

    Bulk endpoints can be used to add or delete up to 1,000 subscriber records in a group in a single request.

    Bulk Add Subscribers to Group

    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

    Scheduled Messages

    • Get Scheduled Message

    • Update Scheduled Message

    • Delete Scheduled Message

    • List Scheduled Messages

    Threads

    • Get Thread

    • Delete Thread

    • List Threads

    • Mark Thread as Read

    SMS Fallback

    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

    Send

    • Send Message from API

    Sending Utilities

    • Validate Recipients

    Drip Campaigns

    • Create Drip Campaign

    • Get Drip Campaign

    • Update Drip Campaign

    • Delete Drip Campaign

    Bulk Subscriber Actions

    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

    Sender Identity

    Step 2: Receive opt-in consent for your subscribers

    Subscriber Opt In

    Step 3: Send iMessages to opted in subscribers

    Send iMessages

    Step 4: SMS Fallback for failed iMessage sends

    SMS Fallback

    Step 1: Get a registered Sender Identity

    Sender Identity

    Step 2: Receive opt-in consent for your subscribers

    Subscriber Opt In

    Step 3: Send iMessages to opted in subscribers

    Send iMessages

    Step 4: SMS Fallback for failed iMessage sends

    SMS Fallback

    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.

  • Create the message content and attachment

    The text content of the message should be assigned to the message field and the URL of the attachment to the image field.

    3

    Form API request

    Create the API request to the /send endpoint. Remember to include Authorization header.

    4

    Receive response

    The API will return a message about the status of your request.

    Mobile Text Alerts - MMS Messaging
    SMS and MMS: What They Are and When to Use Them

  • 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.

  • Indicate the template to be sent

    Use the templateId field to indicate which template will be used.

    3

    Form API request

    Create the API request to the /send endpoint. Remember to include Authorization header.

    4

    Receive response

    The API will return a message about the status of your request.

    91 Sample Text Messages to Customers, Message Templates
    43 Auto Reply Text Message Examples (+ 3 Tips)

  • Delete Subscriber API Endpoint

  • List all Subscribers API Endpoint

    GET /subscribers

    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 Request

    Example Successful Response

    Create Subscriber API Endpoint

    POST /subscribers

    Used to add a new subscriber.

    If given a phone number or email that already exists tied to the same account, this endpoint will update the existing subscriber with new information.

    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.

    If creating many subscribers at one time, the Bulk Create endpoint can be used to batch large updates, this can save on both request round trip time and overall API call volume.

    Body

    Required Fields: email or number

    Example Request

    Example Successful Response

    Update Subscriber API Endpoint

    PATCH /subscribers/{idOrNumberOrEmail}

    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.

    If updating many subscribers at one time, the Bulk Update endpoint can be used to batch large updates, this can save on both request round trip time and overall API call volume.

    Body (all optional)

    Example Request

    Example Successful Response

    Get Subscriber API Endpoint

    GET /subscribers/{idOrNumber}

    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 Request

    Example Successful Response

    Delete Subscriber API Endpoint

    DEL /subscribers/{idOrNumber}

    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 Request

    Example Successful Response

    Visit Subscribers for full API reference.

    List all Subscribers API Endpoint
    Create Subscriber API Endpoint
    Update Subscriber API Endpoint
    Get Subscriber API Endpoint
    parameter in the body of the request accepts an array of
    subscriberId
    values, while the
    groupId
    is specified as a path parameter.

    Example Request

    In the below example we are adding subscriberId :108767117 and 108767118 to groupId: 187561 .

    Successful response: {"message":"Added 2 subscribers to group 187561."

    Bulk Remove Subscribers from Group

    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.

    Example Request

    In the below example we are removing subscriberId :108767117 and 108767118 from groupId: 187561 .

    Successful response: {"message": "Removed 2 subscribers from group 187561."}

    groups/{groupId}/subscribers/bulk-create

    Scheduled Messages Management

    • 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 /scheduled/{scheduledMessageId}
    PATCH /scheduled/{scheduledMessageId}
    POST /scheduled/{scheduledMessageId}
    GET /scheduled
    Thread Items
    • Get Thread Items GET /threads/{threadId}/items

    • Delete Thread Item DELETE /threads/{threadId}/items

    GET /threads/{threadId}
    DELETE /threads/{threadId}
    GET /threads
    PATCH /threads/{threadId}/read

    Shorten Message POST /send/shorten-message

  • Get Message Cost POST /send/cost

  • Get Message Delivery Time POST /send/messaging-speeds

  • POST /send
    POST /send/validate-recipients
  • List Drip Campaigns GET /drip-campaigns

  • Drip Campaign Controls

    • 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}

    Drip Campaign Messages

    • 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}

    POST /drip-campaigns
    GET /drip-campaigns/{dripCampaignId}
    PATCH /drip-campaigns/{dripCampaignId}
    DELETE /drip-campaigns/{dripCampaignId}
    Bulk Group Actions
    DELETE /groups/{groupId}
    GET /groups
    POST /groups/{groupId}/subscribers
    DELETE /groups/{groupId}/subscribers/{subscriberId}
    GET /groups/member-count/all
    GET /groups/{groupId}/member-count
    GET /links/{linkId}/clicks
    POST /links/validate-subdomain
    POST /links/subdomain
    GET /link-tags
    GET /account-variables
    GET /custom-fields
    POST /custom-fields/bulk-create
    Bulk Create/Update Subscribers
    POST /subscribers/bulk
    PATCH /subscribers/bulk
    failure alert email
    failure email alerts

    Ensure you are authenticated before making the below example requests to the Mobile Text Alerts API.

    Name
    Type
    Description

    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
    Type
    Description

    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

    Subscriber Opt In

    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.

    iMessage Opt In

    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.

    Setting up your first webhook

    Learn how to set up a webhook endpoint on your server which will listen to events sent from MTA

    1

    Create your webhook endpoint

    You will need to create an endpoint on your server to receive the event notifications. MTA will send HTTP POST requests to this endpoint and will expect it to return a response with a

    Campaigns

    • 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": 101
    curl --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
        ]
      }'
    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)

  • 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

    Deeplinks

    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.

    Generate a Deeplink with the API

    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

    Example request

    Example successful response

    How to use a Mobile Text Alerts deeplink:

    1

    Generate your iMessage opt-in link

    See steps above. Example: https://mobile-text-alerts.com/deeplink/abcd1234

    2

    Direct your subscribers to this deeplink

    Through your method of choice, get this link to your subscribers. 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.

    3

    Recipient clicks the link, iMessage on the device is verified

    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.

    If you choose another method to prompt recipients for opt in to iMessages, you can still use the special imessage:// style URL to launch the iMessage app and prefill the message.

    Send Outbound Messages First

    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.

    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 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.

    deeplink
    200
    HTTP status code. If other status codes are returned, this will be treated as a failed request. You can configure
    when registering your webhook.

    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.

    2

    Get the URL of this endpoint

    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:

    3

    Create a secret value

    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.

    Mobile Text Alerts provides this signature as a robust validation mechanism for your security. This validation process is not mandatory or enforced by MTA, you are able to receive and act upon webhook callbacks without this signature verification.

    This is a common security best practice to ensure your webhook endpoints are as secure and only handle valid requests from MTA. But you as the developer can choose how/if you will implement validation.

    4

    Register your webhook

    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:

    5

    Receive event payloads to your URL

    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.

    email alerts when MTA receives these failed requests
  • List Campaign Messages GET /campaigns/{campaignId}/messages

  • GET /campaigns/{campaignId}
    GET /campaigns
    GET /campaigns/{campaignId}/analytics
    GET /campaigns/options
    Message Templates

    Generate and validate 2FA / MFA codes via SMS

    Learn how MTA can generate and then validate verification codes via SMS for simplified two-factor authentication.

    SMS Verification Overview

    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.

    Why use SMS verification?

    Steps for SMS validation with the MTA API

    1. to be sent to your user's number by calling the .

    2. If this is a valid phone number, the user receives a code and enters it into your application.

    3. You will then via the .

    4. MTA will return the of the request. You can then use this status code to allow/deny access to your application.

    Generate and send SMS verification code

    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.

    Send Verification Code endpoint verify/sms/send-code

    Duplicate Requests (Idempotency)

    This 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.

    Request Fields

    Name
    Type
    Description

    Response Fields

    Name
    Type
    Description

    Risk Types

    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

    Validate SMS code

    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.

    Check SMS Code endpoint verify/sms/check-code

    Request Fields

    Name
    Type
    Description

    *Either the to or verificationId field is required to identify the request.

    Response Fields

    Name
    Type
    Description

    Verification Status

    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

    Templates

    • Create Template POST /templates

    • Get Template GET /templates/{id}

    • Update Template PATCH /templates/{id}

    • Delete Template POST /templates/{id}

    • List Templates

    Sender Identity

    Learn about Sender Identities and how to get one provisioned for your account

    Sender Identity

    When sending iMessages you will use a dedicated Sender Identity to identify your brand when communicating with your subscribers.

    What is a Sender Identity?

    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.

    Get a registered Sender Identity

    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.

    MTA cannot guarantee access to everyone who requests a Sender Identity

    Provisioning and Use of Sender Identities

    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

    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.

    TypeScript SDK

    Set up your development environment to call the Mobile Text API with the TypeScript SDK.

    Overview

    This SDK provides TypeScript functions for all Mobile Text Alerts API endpoints, and provides:

    • Request/Response Types - All API data structures are typed

    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"
    }
    Contact us
    Custom Domains
    Schedule Message Sends
    Properties field for custom variables in messages
    SHA-256 HMAC
    event type
    Click here to see all fields
    Error Handling - Specific error types for each endpoint
  • Options Types - Configuration options with proper typing

  • Auto-completion - Full IDE support with intelligent suggestions

  • Using the TypeScript SDK

    Install Node

    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:

    Learn how to install or update Node to a newer version.

    Install @mobiletextalerts/typescript-sdk

    The Mobile Text Alerts TypeScript SDK is open-source and hosted on GitHub:

    • NPM package

    • GitHub source code

    The latest version of the TypeScript SDK can be installed with npm:

    Client Configuration

    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.

    Example client configuration

    Usage Examples

    After creating a client, you can use TypeScript functions to call any of the Mobile Text Alerts API endpoints.

    Send a Message

    The following example calls the POST /send endpoint:

    List Subscribers

    The following example calls the GET /subscribers endpoint:

    Create a Template

    The following example calls the POST /templates endpoint:

    Error Handling

    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.

    Rate Limits

    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/hooks
    curl --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 -v
    npm install @mobiletextalerts/typescript-sdk
    import { 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.

    On our internal deny list pulled from delivery reports.
  • 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

  • The supplied verification code is valid and the request has not yet expired.
  • 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.

    Generate a SMS verification code
    /send-code endpoint
    send this code to MTA to validate the request
    /check-code endpoint
    Verification Status
    GET /templates

    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.

    Send an SMS Message

    Learn how to customize your message sends with the MTA API

    SMS differences from MMS

    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.

    SMS Messaging vs. MMS Messaging

    A message with an attachment will be sent as MMS by default (messages without an attachment will be ). Messages without an attachment can be sent as MMS if isMMS is set to true.

    Credit Costs

    • 1 credit cost per SMS message (160 character limit, no attachment)

    • 3 credit cost per MMS message (1550 character limit, plus 500KB image attachment)

    Schedule Message Sends

    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.

    Repeat scheduled message sends

    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:

    Example repeat schedule

    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:

    Properties field for custom variables in messages

    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]

    How to include properties in a /send message request

    1

    Include your variable(s) in the message field, wrapped between {{ and }} .

    "message": "Hello {{firstName}}! Visit {{link}} to reveal your discount!"

    2

    Define the values of your variable(s) for each subscriber that will receive the message in the properties field.

    Message Templates

    Message Templates allows you to save pre-set messages. See the tutorial to learn how to use templates with the MTA API.

    Send Message API Endpoint

    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

    Name
    Value

    Request Fields

    Name
    Type
    Description

    Response

    A message with an attachment will be sent as MMS by default (messages without an attachment will be sent as SMS). Messages without an attachment can be sent as MMS if isMMS is set to true.

    Name
    Type
    Description

    firstName

    string

    First name of the subscriber.

    lastName

    string

    Last name of the subscriber.

    number

    number

    Phone number of the subscriber.

    email

    string

    Name
    Type
    Description

    firstName

    string

    First name of the subscriber.

    lastName

    string

    Last name of the subscriber.

    number

    number

    Phone number of the subscriber.

    email

    string

    Group Subscribers

    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.

    Manage Groups with the API

    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}}

    3

    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.

    ISO8601 format
    Custom Subscriber Attributes
    Message Templates
    Send a message with the Mobile Text Alerts API
    sent as SMS
    to see actions for adding/removing subscribers from your groups.

    Click here to view the full API Reference for Groups.

    Create a new Group

    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.

    Example request

    Successful response: "message": "Created group Example."

    Request Fields

    Delete Group

    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.

    Example Request

    In the below example we are deleting groupId: 187561 .

    Successful Response: {"message":"Group deleted successfully."}

    Update Groups

    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.

    Example Request

    In the below example, we are updating groupId: 187561 .

    Successful response: "message": "Updated group New Name."

    Request Fields

    List All Groups

    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.

    This endpoint produces paginated results. You may need to make multiple queries to retrieve every group on your account.

    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

    Example Request

    Successful response:

    Manage Group Members

    Subscribers can be added or deleted from your groups with the API endpoints documented below.

    If you need to add or delete many group members in a single request, see Groups Bulk Add/Delete Subscribers for bulk endpoints which can receive up to 1,000 records in a single request.

    Add Subscriber to Group

    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.

    Example request:

    In the below example we are adding subscriberId :108767117 to groupId: 187561 .

    Successful response: {"message":"Added subscriber 108767117 to group 187561."}

    By default, when adding a subscriber to a group the addToDripCampaigns field will be set to true . Set this field to false if you don't want this subscriber included in drip campaigns.

    Delete Group Member

    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.

    Example request

    In the below example we are deleting subscriberId :108767117 from groupId: 187561 .

    Successful Response: {"message":"Deleted subscriber 108767117 from group 187561."}

    online dashboard
    MTA API
    create a group
    delete a group
    update an existing group'
    view all groups
    Manage Group Members in the online dashboard
    Manage Group Members

    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"
    }
    Name
    Type
    Description

    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"
    }
    Name
    Type
    Description

    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

    externalId parameter
    risk type
    message-send
    delivery-status
    Risk Types
    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'  
    template
    MMS
    enabled for iMessage
    webhook
    Properties
    message is scheduled to send.
    ISO 8601
    (custom)
    repeatedly
    webhook

    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"
    }

    Adaptive Groups

    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.

    Manage Adaptive Groups with the API

    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.

    Create an Adaptive Group

    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.

    How the match field is selected in the platform dashboard

    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:

    You can use CUSTOM_FIELD to reference Custom Subscriber Attributes that have been created on your account. For the value use the ID of the custom field to reference the specific field as follows: 'custom-<customFieldId>' . Call the GET /custom-fields endpoint to retrieve all the customFieldId 's of attributes on your account.

    Note that the type of this field must match the type of the specific custom attribute.

    • 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.

    Optional Advanced Settings

    The settings field can also contain optional fields conditionSubOperator and conditionSubValue . These fields add an additional layer of comparison and complexity recommended only for advanced users.

    List of Opt-In Source IDs

    Example settings configuration for an Adaptive Group

    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:

    Example Adaptive Group conditions shown in the platform dashboard

    The complete settings configuration for this example:

    See Create Group to learn more about this endpoint.

    Update an Adaptive Group

    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.

    List Adaptive Groups

    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] .

    Example query with Adaptive Groups included:

    (note the [] brackets are escaped characters in the cURL request)

    Click here
    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 = 19
    interface 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'
    Webhooks Event Payloads
    "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" .

  • hardcoded values that map to IDs
    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-' 
    } 

    Webhooks

    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.

    Webhooks Event Payloads

    Optional Fields

    Some fields may not always be included in the webhook payload, these are indicated with: *. These fields may either be missing from the payload or have a NULL value.

    All other fields below are always expected in the webhook payload.

    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:

    Delivery Status

    V1 Delivery Status Payload
    Field
    Type
    Description
    V2 Delivery Status Payload
    Field
    Type
    Description
    V3 Delivery Status Payload
    Field
    Type
    Description

    MTA Delivery Status Codes

    One of the fields of the delivery status webhook is status which will return a code that is associated with the following statuses:

    Message Reply

    V1 Message Reply Payload
    Field
    Type
    Description
    V2 Message Reply Payload
    Field
    Type
    Description
    V3 Message Reply Payload
    Field
    Type
    Description

    Message Send

    V1 Message Send Payload
    Field
    Type
    Description
    V2 Message Send Payload
    Field
    Type
    Description
    V3 Message Send Payload
    Field
    Type
    Description

    Number Opt-In

    V1 Number Opt-In Payload
    Field
    Type
    Description
    V2 Number Opt-In Payload
    Field
    Type
    Description
    V3 Number Opt-In Payload
    Field
    Type
    Description

    Number Opt-In Types

    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:

    - A field with a pre-defined list of values.
  • 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 message
    enum NumberOptInType {
        SMS = 'sms',
        EMAIL = 'email',
        IMessage = 'imessage',
        RCS = 'rcs',
    }
    MTA Delivery Status Codes
    MTA Delivery Status Codes
    MTA Delivery Status Codes
    Number Opt-In Types
    Number Opt-In Types
    Name
    Type
    Description

    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
    Type
    Description

    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.

    Verify API Key

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /auth/verify-api-key

    Create Chatbot

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    namestringRequired
    descriptionstring | nullableOptional
    instructionsstringRequired
    longcodeIdnumberRequired
    filesstring[]Optional
    isEnabledbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /chatbots

    Get Chatbot

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    chatbotIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /chatbots/{chatbotId}

    Update Chatbot

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    chatbotIdstringRequired
    Body
    namestringOptional
    descriptionstring | nullableOptional
    instructionsstringOptional
    filesstring[]Optional
    isEnabledbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /chatbots/{chatbotId}

    List Chatbots

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /chatbots

    Update Drip Campaign

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    Body
    namestringOptional
    endDatestringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /drip-campaigns/{dripCampaignId}

    Create Subscriber

    post

    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

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    SubscriberRequest

    firstNamestringRequired
    lastNamestringRequired
    emailstringRequired
    numbernumberRequired
    groupIdsnumber[]Required
    employeeNumberstringRequired
    welcomeMessagestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /subscribers

    Get Subscriber

    get

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idOrNumberOrEmailstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /subscribers/{idOrNumberOrEmail}

    Update Subscriber

    patch

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idOrNumberOrEmailstringRequired
    Body

    SubscriberRequest

    firstNamestringRequired
    lastNamestringRequired
    emailstringRequired
    numbernumberRequired
    groupIdsnumber[]Required
    employeeNumberstringRequired
    welcomeMessagestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    patch
    /subscribers/{idOrNumberOrEmail}

    Delete Subscriber

    delete

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idOrNumberOrEmailstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    delete
    /subscribers/{idOrNumberOrEmail}

    List Subscribers

    get

    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 Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    allSubscribersbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /subscribers

    Export Subscribers

    get

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /subscribers/export

    Create Smart Reply

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    wordstringRequired
    messagestringRequired
    includeContactCardbooleanOptional
    includeSignupLinkbooleanOptional
    templateIdnumberOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /smart-replies

    Get Smart Reply

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /smart-replies/{id}

    Update Smart Reply

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Body
    wordstringOptional
    messagestringOptional
    includeContactCardbooleanOptional
    includeSignupLinkbooleanOptional
    templateIdnumberOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /smart-replies/{id}

    Delete Smart Reply

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /smart-replies/{id}

    List Smart Replies

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /smart-replies

    Create Subscriber

    post

    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

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    SubscriberRequest

    firstNamestringRequired
    lastNamestringRequired
    emailstringRequired
    numbernumberRequired
    groupIdsnumber[]Required
    employeeNumberstringRequired
    welcomeMessagestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /subscribers

    List Dedicated Numbers

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /dedicated-numbers

    List Deliveries

    get

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /deliveries

    Create Custom Field

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    namestringRequired
    typestring · enumOptionalPossible values:
    hiddenbooleanOptional
    optionsstring[]Optional
    formatstring · enumOptionalPossible values:
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /custom-fields

    List Custom Fields

    get

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /custom-fields

    Update Custom Field

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    customFieldIdstringRequired
    Body
    namestringOptional
    typestring · enumOptionalPossible values:
    optionsstring[]Optional
    formatstring · enumOptionalPossible values:
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /custom-fields/{customFieldId}

    Delete Custom Field

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    customFieldIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /custom-fields/{customFieldId}

    Get Custom Field

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    customFieldIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /custom-fields/{customFieldId}

    List Dedicated Numbers

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /dedicated-numbers

    Send Message from API

    post

    Overview

    Request Fields

    • message: string

      • The body of the message.

    • image: string

    Required Fields

    • Content to Send: One of the following

      • message

      • image

      • templateId

    Notes

    • 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.

    Features

    Send to All Subscribers

    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.

    Send as MMS

    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.

    Credit Costs

    • SMS messages cost 1 credit per 160 characters

    • MMS messages cost 3 credits

    Template-Only Sending

    • 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.

    Using Properties

    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:

    Duplicate Requests (Idempotency)

    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.

    iMessage Sending

    Introduction

    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.

    What is iMessage?

    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.

    Why send via iMessage?

    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.


    Sender Identities

    When communicating with subscribers via iMessage, you'll use a unique, dedicated "Sender Identity" that helps identify your brand.

    What is a Sender Identity?

    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.

    Provisioning and Using Sender Identities

    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.

    Custom Domains

    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.


    Subscriber Opt In

    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.

    iMessage Opt In

    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.

    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:

    1. Generate your iMessage opt-in deeplink, which will look like this: https://mobile-text-alerts.com/deeplink/abcd1234

    2. 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)

    3. 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.

    Sending Outbound Messages First

    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.


    Message Sending

    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).

    Specifying a Sender Identity

    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.

    SMS Fallback

    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.

    Webhooks

    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.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    groupsnumber[]Optional
    subscriberIdsnumber[]Optional
    allSubscribersbooleanOptional
    excludedGroupIdsnumber[]Optional
    threadIdnumberOptional
    messagestringRequired
    imagestringOptional
    rehostbooleanOptional
    externalIdstringOptional
    scheduledDatestringOptional
    headerstringOptional
    footerstringOptional
    isMMSbooleanOptional
    linkClickDaysnumberOptional
    templateIdnumberOptional
    linkIdnumberOptional
    longcodeIdnumberOptional
    eventIdstringOptional
    skipHeaderFooterbooleanOptional
    addPlaceholderbooleanOptional
    sourcestring · enumOptionalPossible values:
    userSignaturestringOptional
    poolIdstringOptional
    userIdnumberOptional
    senderNamestringOptional
    exactSenderbooleanOptional
    customRepeatFrequencyTypenumber | nullableOptional
    customRepeatFrequencynumber | nullableOptional
    customEndMessageTypenumber | nullableOptional
    customEndMessageDatestring | nullableOptional
    customEndMessageOccurrencesnumber | nullableOptional
    gatedbooleanOptional
    brandImagestringOptional
    post
    /send

    Send Message from API

    post

    Overview

    Request Fields

    • message: string

      • The body of the message.

    • image: string

    Required Fields

    • Content to Send: One of the following

      • message

      • image

      • templateId

    Notes

    • 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.

    Features

    Send to All Subscribers

    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.

    Send as MMS

    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.

    Credit Costs

    • SMS messages cost 1 credit per 160 characters

    • MMS messages cost 3 credits

    Template-Only Sending

    • 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.

    Using Properties

    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:

    Duplicate Requests (Idempotency)

    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.

    iMessage Sending

    Introduction

    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.

    What is iMessage?

    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.

    Why send via iMessage?

    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.


    Sender Identities

    When communicating with subscribers via iMessage, you'll use a unique, dedicated "Sender Identity" that helps identify your brand.

    What is a Sender Identity?

    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.

    Provisioning and Using Sender Identities

    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.

    Custom Domains

    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.


    Subscriber Opt In

    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.

    iMessage Opt In

    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.

    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:

    1. Generate your iMessage opt-in deeplink, which will look like this: https://mobile-text-alerts.com/deeplink/abcd1234

    2. 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)

    3. 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.

    Sending Outbound Messages First

    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.


    Message Sending

    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).

    Specifying a Sender Identity

    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.

    SMS Fallback

    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.

    Webhooks

    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.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    groupsnumber[]Optional
    subscriberIdsnumber[]Optional
    allSubscribersbooleanOptional
    excludedGroupIdsnumber[]Optional
    threadIdnumberOptional
    messagestringRequired
    imagestringOptional
    rehostbooleanOptional
    externalIdstringOptional
    scheduledDatestringOptional
    headerstringOptional
    footerstringOptional
    isMMSbooleanOptional
    linkClickDaysnumberOptional
    templateIdnumberOptional
    linkIdnumberOptional
    longcodeIdnumberOptional
    eventIdstringOptional
    skipHeaderFooterbooleanOptional
    addPlaceholderbooleanOptional
    sourcestring · enumOptionalPossible values:
    userSignaturestringOptional
    poolIdstringOptional
    userIdnumberOptional
    senderNamestringOptional
    exactSenderbooleanOptional
    customRepeatFrequencyTypenumber | nullableOptional
    customRepeatFrequencynumber | nullableOptional
    customEndMessageTypenumber | nullableOptional
    customEndMessageDatestring | nullableOptional
    customEndMessageOccurrencesnumber | nullableOptional
    gatedbooleanOptional
    brandImagestringOptional
    post
    /send

    Send Message from API

    post

    Overview

    Request Fields

    • message: string

      • The body of the message.

    • image: string

    Required Fields

    • Content to Send: One of the following

      • message

      • image

      • templateId

    Notes

    • 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.

    Features

    Send to All Subscribers

    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.

    Send as MMS

    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.

    Credit Costs

    • SMS messages cost 1 credit per 160 characters

    • MMS messages cost 3 credits

    Template-Only Sending

    • 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.

    Using Properties

    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:

    Duplicate Requests (Idempotency)

    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.

    iMessage Sending

    Introduction

    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.

    What is iMessage?

    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.

    Why send via iMessage?

    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.


    Sender Identities

    When communicating with subscribers via iMessage, you'll use a unique, dedicated "Sender Identity" that helps identify your brand.

    What is a Sender Identity?

    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.

    Provisioning and Using Sender Identities

    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.

    Custom Domains

    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.


    Subscriber Opt In

    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.

    iMessage Opt In

    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.

    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:

    1. Generate your iMessage opt-in deeplink, which will look like this: https://mobile-text-alerts.com/deeplink/abcd1234

    2. 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)

    3. 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.

    Sending Outbound Messages First

    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.


    Message Sending

    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).

    Specifying a Sender Identity

    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.

    SMS Fallback

    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.

    Webhooks

    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.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    groupsnumber[]Optional
    subscriberIdsnumber[]Optional
    allSubscribersbooleanOptional
    excludedGroupIdsnumber[]Optional
    threadIdnumberOptional
    messagestringRequired
    imagestringOptional
    rehostbooleanOptional
    externalIdstringOptional
    scheduledDatestringOptional
    headerstringOptional
    footerstringOptional
    isMMSbooleanOptional
    linkClickDaysnumberOptional
    templateIdnumberOptional
    linkIdnumberOptional
    longcodeIdnumberOptional
    eventIdstringOptional
    skipHeaderFooterbooleanOptional
    addPlaceholderbooleanOptional
    sourcestring · enumOptionalPossible values:
    userSignaturestringOptional
    poolIdstringOptional
    userIdnumberOptional
    senderNamestringOptional
    exactSenderbooleanOptional
    customRepeatFrequencyTypenumber | nullableOptional
    customRepeatFrequencynumber | nullableOptional
    customEndMessageTypenumber | nullableOptional
    customEndMessageDatestring | nullableOptional
    customEndMessageOccurrencesnumber | nullableOptional
    gatedbooleanOptional
    brandImagestringOptional
    post
    /send

    List Templates

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /templates

    List Controlled Templates

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /controlled-templates

    Get Controlled Template

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    controlledTemplateIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /controlled-templates/{controlledTemplateId}

    Update Template

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Body
    namestringOptional
    messagestringOptional
    attachmentstringOptional
    isMMSbooleanOptional
    updateAsMMSbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /templates/{id}

    Delete Template

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Body
    isMMSbooleanRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /templates/{id}

    Create Template

    post

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    namestringOptional
    messagestringRequired
    attachmentstringOptional
    isMMSbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /templates

    Create Link

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    longUrlstringRequired
    trackingEnabledbooleanOptional
    isMMSbooleanOptional
    ageCheckbooleanOptional
    tagsstring[]Optional
    isWebinarbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /links/shortlinks

    Get Template

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Query parameters
    isMMSstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /templates/{id}

    Get Webinar

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    webinarIdentifierstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /webinars/{webinarIdentifier}

    List Webinars

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /webinars

    List Webinar Events

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /webinars/events

    List Dedicated Numbers

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /dedicated-numbers

    Trigger SMS Verification Code

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    tostringRequired
    serviceNamestringOptional
    timeoutSecondsnumberOptional
    codeLengthnumberOptional
    realtimebooleanOptional
    bypassbooleanOptional
    externalIdstringOptional
    longcodeIdnumberOptional
    poolIdstringOptional
    senderNamestringOptional
    gatedbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /verify/sms/send-code

    Check SMS Verification Code

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    tostringOptional
    verificationIdstringOptional
    codestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /verify/sms/check-code

    Get Verification

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    verificationIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /verify/{verificationId}

    List Verifications

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /verify

    Verify Phone Number

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    numberstringRequired
    bypassbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /verify/number

    Get Default Reply

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /automated-replies/default-reply

    Update Default Reply

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    autoReplybooleanRequired
    autoReplyMessagestringOptional
    initialReplybooleanOptional
    initialReplyMessagestringOptional
    autoReplyDuringHoursbooleanOptional
    autoReplyAfterHoursbooleanOptional
    templateIdnumberOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /automated-replies/default-reply

    Get New Subscriber Reply

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /automated-replies/new-subscriber-reply

    Update New Subscriber Reply

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    newSubscriberMessagestringRequired
    templateIdnumberOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /automated-replies/new-subscriber-reply

    Get Controlled Template

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    controlledTemplateIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /controlled-templates/{controlledTemplateId}

    List Controlled Templates

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /controlled-templates

    List Dedicated Numbers

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /dedicated-numbers

    List Short Codes

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /shortcodes

    Get Bulk Adaptive Group Member Count

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    groupIdsstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /groups/member-count/bulk

    Bulk Add Subscribers To Group

    post

    Record Limit

    This endpoint will accept a maximum of 1,000 records in a single request.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Body
    subscriberIdsnumber[]Required
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /groups/{groupId}/subscribers/bulk-create

    Bulk Remove Subscribers from Group

    post

    Record Limit

    This endpoint will accept a maximum of 1,000 records in a single request.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Body
    subscriberIdsnumber[]Required
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /groups/{groupId}/subscribers/bulk-delete

    Create Deeplink

    post

    This feature is currently in closed beta. Please contact your MTA account rep or MTA support for more information.

    Request Body

    • androidURI: The deeplink URI for Android.

    • iosURI: The deeplink URI for iOS.

    • macURI: The deeplink URI for Mac.

    Response

    Upon successful creation, the response will include the deeplinkUrl

    Example

    Request:

    Response:

    undefined

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    androidURIstringRequired
    iosURIstringRequired
    macURIstringRequired
    windowsURIstringRequired
    defaultURIstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /deeplinks

    Create IMessage Deeplink

    post

    This feature is currently in closed beta. Please contact your MTA account rep or MTA support for more information.

    Request Body

    • 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

    Response

    Upon successful creation, the response will include the deeplinkUrl

    Example

    Request:

    Response:

    undefined

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    longcodeIdnumberOptional
    optInMessagestringRequired
    senderNamestringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /deeplinks/imessage

    List Deliveries

    get

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /deliveries

    Create Group

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    idnumberOptional
    accountIdnumberOptional
    namestringOptional
    hiddennumberOptional
    keywordstringOptional
    welcomeMessagestringOptional
    descriptionstringOptional
    parentWebinarIdstringOptional
    displayNamestring | nullableOptional
    sortOrdernumber | nullableOptional
    typestring · enumOptionalPossible values:
    isTemporarybooleanOptional
    createdAtone ofOptional
    string · date-timeOptional
    or
    stringOptional
    or
    string | nullableOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /groups

    Get Group

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /groups/{groupId}

    Update Group

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Body
    idnumberOptional
    accountIdnumberOptional
    namestringOptional
    hiddennumberOptional
    keywordstringOptional
    welcomeMessagestringOptional
    descriptionstringOptional
    parentWebinarIdstringOptional
    displayNamestring | nullableOptional
    sortOrdernumber | nullableOptional
    typestring · enumOptionalPossible values:
    isTemporarybooleanOptional
    createdAtone ofOptional
    string · date-timeOptional
    or
    stringOptional
    or
    string | nullableOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /groups/{groupId}

    Delete Group

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /groups/{groupId}

    List Groups

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /groups

    Add Subscriber to Group

    post

    Required Fields: subscriberId

    Note: Field addToDripCampaigns is true by default.

    undefined

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Body
    subscriberIdnumberRequired
    addToDripCampaignsbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /groups/{groupId}/subscribers

    Remove Subscriber from Group

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    subscriberIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /groups/{groupId}/subscribers/{subscriberId}

    List All Groups and Member Count

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /groups/member-count/all

    Get Adaptive Group Member Count

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /groups/{groupId}/member-count

    Create Link

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    longUrlstringRequired
    trackingEnabledbooleanOptional
    isMMSbooleanOptional
    ageCheckbooleanOptional
    tagsstring[]Optional
    isWebinarbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /links/shortlinks

    Get a tracked link by ID

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    linkIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /links/{linkId}

    Add tags to a Link

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    linkIdstringRequired
    Body
    tagsstring[]Optional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /links/{linkId}

    List and Search all tracked links

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    tagsstringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /links

    Get a tracked link by ID

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    linkIdstringRequired
    Query parameters
    excludeSimilarLinksbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /links/{linkId}/clicks

    Validate Subdomain

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    subdomainstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /links/validate-subdomain

    Update Subdomain

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    subdomainstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /links/subdomain

    Create Unsubscribe

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    numberstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /unsubscribes

    Get Unsubscribe for Number

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    numberstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /unsubscribes/{number}

    List Unsubscribes

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /unsubscribes

    Bulk Unsubscribes

    post

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Bodyobject[]
    numberstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /unsubscribes/bulk

    Create Tag

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    tagstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /link-tags

    Get Tag

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    linkTagIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /link-tags/{linkTagId}

    Update Tag

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    linkTagIdstringRequired
    Body
    tagstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /link-tags/{linkTagId}

    Delete Tag

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    linkTagIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /link-tags/{linkTagId}

    List Tags

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    linkIdnumberOptional
    tagstringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /link-tags

    Bulk Create Subscribers

    post

    Record Limit

    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).

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    createOnlystringOptional
    Bodyobject[]
    firstNamestringOptional
    lastNamestringOptional
    emailstringOptional
    numberone ofOptional
    numberOptional
    or
    stringOptional
    e164NumberstringOptional
    groupIdsnumber[]Optional
    employeeNumberstringOptional
    welcomeMessagestringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /subscribers/bulk

    Bulk Update Subscribers

    patch

    Record Limit

    This endpoint will accept a maximum of 1,000 records in a single request.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Bodyone of[]

    BulkUpdateSubscribers.RequestRecord

    or
    or
    patch
    /subscribers/bulk

    Create Account Variable

    post

    Rate Limiting

    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

    Body
    titlestringRequired
    valuestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /account-variables

    Get Account Variable

    get

    Rate Limiting

    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

    Path parameters
    idOrTitlestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /account-variables/{idOrTitle}

    Update Account Variable

    patch

    Rate Limiting

    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

    Path parameters
    idOrTitlestringRequired
    Body
    titlestringOptional
    valuestringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    patch
    /account-variables/{idOrTitle}

    Delete Account Variable

    delete

    Rate Limiting

    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

    Path parameters
    idOrTitlestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    delete
    /account-variables/{idOrTitle}

    List Account Variables

    get

    Rate Limiting

    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

    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /account-variables

    Create Custom Field

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    namestringRequired
    typestring · enumOptionalPossible values:
    hiddenbooleanOptional
    optionsstring[]Optional
    formatstring · enumOptionalPossible values:
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /custom-fields

    Get Custom Field

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    customFieldIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /custom-fields/{customFieldId}

    Update Custom Field

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    customFieldIdstringRequired
    Body
    namestringOptional
    typestring · enumOptionalPossible values:
    optionsstring[]Optional
    formatstring · enumOptionalPossible values:
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /custom-fields/{customFieldId}

    Delete Custom Field

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    customFieldIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /custom-fields/{customFieldId}

    List Custom Fields

    get

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /custom-fields

    Bulk Create Custom Fields

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /custom-fields/bulk-create

    Bulk Create Subscribers

    post

    Record Limit

    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).

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    createOnlystringOptional
    Bodyobject[]
    firstNamestringOptional
    lastNamestringOptional
    emailstringOptional
    numberone ofOptional
    numberOptional
    or
    stringOptional
    e164NumberstringOptional
    groupIdsnumber[]Optional
    employeeNumberstringOptional
    welcomeMessagestringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /subscribers/bulk

    Bulk Update Subscribers

    patch

    Record Limit

    This endpoint will accept a maximum of 1,000 records in a single request.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Bodyone of[]

    BulkUpdateSubscribers.RequestRecord

    or
    or
    patch
    /subscribers/bulk

    List Subscribers

    get

    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 Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    allSubscribersbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /subscribers

    Create Subscriber

    post

    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

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    SubscriberRequest

    firstNamestringRequired
    lastNamestringRequired
    emailstringRequired
    numbernumberRequired
    groupIdsnumber[]Required
    employeeNumberstringRequired
    welcomeMessagestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /subscribers

    Update Subscriber

    patch

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idOrNumberOrEmailstringRequired
    Body

    SubscriberRequest

    firstNamestringRequired
    lastNamestringRequired
    emailstringRequired
    numbernumberRequired
    groupIdsnumber[]Required
    employeeNumberstringRequired
    welcomeMessagestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    patch
    /subscribers/{idOrNumberOrEmail}

    Get Subscriber

    get

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idOrNumberOrEmailstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    get
    /subscribers/{idOrNumberOrEmail}

    Delete Subscriber

    delete

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idOrNumberOrEmailstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    delete
    /subscribers/{idOrNumberOrEmail}

    Bulk Add Subscribers To Group

    post

    Record Limit

    This endpoint will accept a maximum of 1,000 records in a single request.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Body
    subscriberIdsnumber[]Required
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /groups/{groupId}/subscribers/bulk-create

    Bulk Remove Subscribers from Group

    post

    Record Limit

    This endpoint will accept a maximum of 1,000 records in a single request.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Body
    subscriberIdsnumber[]Required
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /groups/{groupId}/subscribers/bulk-delete

    Get Scheduled Message

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    scheduledMessageIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /scheduled/{scheduledMessageId}

    Update Scheduled Message

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    scheduledMessageIdstringRequired
    Body
    messagestringOptional
    numberIdsnumber[]Optional
    groupIdsnumber[]Optional
    allSubscribersbooleanOptional
    scheduledDatestringOptional
    imagestring | nullableOptional
    repeatMessagenumberOptional
    repeatDaysnumber[]Optional
    repeatMonthTypestring | nullableOptional
    excludedGroupIdsnumber[]Optional
    headerstringOptional
    footerstringOptional
    isMMSbooleanOptional
    templateIdnumberOptional
    longcodeIdnumberOptional
    customRepeatFrequencyTypenumber | nullableOptional
    customRepeatFrequencynumber | nullableOptional
    customRepeatDaysnumber[]Optional
    customEndMessageTypenumber | nullableOptional
    customEndMessageDatestring | nullableOptional
    customEndMessageOccurrencesnumber | nullableOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /scheduled/{scheduledMessageId}

    Delete Scheduled Message

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    scheduledMessageIdstringRequired
    Body
    isMMSbooleanOptional
    skippedAtone ofOptional
    string · date-timeOptional
    or
    stringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /scheduled/{scheduledMessageId}

    List Scheduled Messages

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /scheduled

    Get Scheduled Message Calendar

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    yearstringRequired
    monthstringRequired
    Query parameters
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /scheduled/calendar/{year}/{month}

    Get Scheduled Message Recipients

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    scheduledMessageIdstringRequired
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /scheduled/{scheduledMessageId}/recipients

    Delete Scheduled Messages for Number

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    numberstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /scheduled/number/{number}

    Get Thread

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    threadIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /threads/{threadId}

    Delete Thread

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    threadIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /threads/{threadId}

    List Threads

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /threads

    Mark Thread as Read

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    threadIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /threads/{threadId}/read

    Get Thread Items

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    threadIdstringRequired
    Query parameters
    pagenumberRequired
    pageSizenumberRequired
    getScheduledbooleanRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /threads/{threadId}/items

    Delete Thread Item

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    threadIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /threads/{threadId}/items

    Send Message from API

    post

    Overview

    Request Fields

    • message: string

      • The body of the message.

    • image: string

    Required Fields

    • Content to Send: One of the following

      • message

      • image

      • templateId

    Notes

    • 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.

    Features

    Send to All Subscribers

    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.

    Send as MMS

    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.

    Credit Costs

    • SMS messages cost 1 credit per 160 characters

    • MMS messages cost 3 credits

    Template-Only Sending

    • 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.

    Using Properties

    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:

    Duplicate Requests (Idempotency)

    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.

    iMessage Sending

    Introduction

    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.

    What is iMessage?

    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.

    Why send via iMessage?

    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.


    Sender Identities

    When communicating with subscribers via iMessage, you'll use a unique, dedicated "Sender Identity" that helps identify your brand.

    What is a Sender Identity?

    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.

    Provisioning and Using Sender Identities

    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.

    Custom Domains

    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.


    Subscriber Opt In

    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.

    iMessage Opt In

    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.

    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:

    1. Generate your iMessage opt-in deeplink, which will look like this: https://mobile-text-alerts.com/deeplink/abcd1234

    2. 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)

    3. 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.

    Sending Outbound Messages First

    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.


    Message Sending

    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).

    Specifying a Sender Identity

    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.

    SMS Fallback

    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.

    Webhooks

    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.

    Rate Limiting

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    groupsnumber[]Optional
    subscriberIdsnumber[]Optional
    allSubscribersbooleanOptional
    excludedGroupIdsnumber[]Optional
    threadIdnumberOptional
    messagestringRequired
    imagestringOptional
    rehostbooleanOptional
    externalIdstringOptional
    scheduledDatestringOptional
    headerstringOptional
    footerstringOptional
    isMMSbooleanOptional
    linkClickDaysnumberOptional
    templateIdnumberOptional
    linkIdnumberOptional
    longcodeIdnumberOptional
    eventIdstringOptional
    skipHeaderFooterbooleanOptional
    addPlaceholderbooleanOptional
    sourcestring · enumOptionalPossible values:
    userSignaturestringOptional
    poolIdstringOptional
    userIdnumberOptional
    senderNamestringOptional
    exactSenderbooleanOptional
    customRepeatFrequencyTypenumber | nullableOptional
    customRepeatFrequencynumber | nullableOptional
    customEndMessageTypenumber | nullableOptional
    customEndMessageDatestring | nullableOptional
    customEndMessageOccurrencesnumber | nullableOptional
    gatedbooleanOptional
    brandImagestringOptional
    post
    /send

    Validate Recipients

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    validateUnsubscribesbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /send/validate-recipients

    Shorten Message

    post

    Rate Limiting

    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 20 requests every NaN seconds

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    messagestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    post
    /send/shorten-message

    Get Message Cost

    post

    Overview

    Request Fields

    • from: string

      • The phone number used to send the message

    • to: string

    Response Fields

    • fee: number

      • The fee for sending the message

    • carrierFee: number

    Notes

    • 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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    fromstringOptional
    tostringRequired
    messagestringOptional
    isMMSbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /send/cost

    Get Message Delivery Time

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    longcodeIdnumberRequired
    groupsnumber[]Optional
    subscriberIdsnumber[]Optional
    allSubscribersbooleanOptional
    excludedGroupIdsnumber[]Optional
    isMMSbooleanOptional
    linkClickDaysnumberOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /send/messaging-speeds

    Create Drip Campaign

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    namestringRequired
    endDatestringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /drip-campaigns

    Get Drip Campaign

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /drip-campaigns/{dripCampaignId}

    Update Drip Campaign

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    Body
    namestringOptional
    endDatestringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /drip-campaigns/{dripCampaignId}

    Delete Drip Campaign

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    Responses
    204

    Success

    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /drip-campaigns/{dripCampaignId}

    List Drip Campaigns

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /drip-campaigns

    Start Drip Campaign

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    Body
    groupIdnumberRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /drip-campaigns/{dripCampaignId}/start

    Stop Drip Campaign

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    Body
    groupIdnumberRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /drip-campaigns/{dripCampaignId}/stop

    Clone Drip Campaign

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /drip-campaigns/{dripCampaignId}/clone

    List Drip Campaign Numbers

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    sequenceIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /drip-campaigns/{dripCampaignId}/numbers/{sequenceId}

    Create Drip Campaign Message

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    Body
    titlestring | nullableOptional
    contentstring | nullableOptional
    attachmentstring | nullableOptional
    delaynumberOptional
    timeOfDaystringOptional
    isMmsnumberOptional
    previousIdnumberOptional
    templateIdnumberOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /drip-campaigns/{dripCampaignId}/messages

    Update Drip Campaign Message

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    messageIdstringRequired
    Body
    titlestring | nullableOptional
    contentstring | nullableOptional
    attachmentstring | nullableOptional
    delaynumberOptional
    timeOfDaystringOptional
    isMmsnumberOptional
    previousIdnumberOptional
    templateIdnumberOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /drip-campaigns/{dripCampaignId}/messages/{messageId}

    Delete Drip Campaign Message

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    dripCampaignIdstringRequired
    messageIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /drip-campaigns/{dripCampaignId}/messages/{messageId}

    Create IMessage Deeplink

    post

    This feature is currently in closed beta. Please contact your MTA account rep or MTA support for more information.

    Request Body

    • 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

    Response

    Upon successful creation, the response will include the deeplinkUrl

    Example

    Request:

    Response:

    undefined

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    longcodeIdnumberOptional
    optInMessagestringRequired
    senderNamestringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /deeplinks/imessage

    Get Campaign

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    campaignIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /campaigns/{campaignId}

    List Campaigns

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /campaigns

    Get Campaign Analytics

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    campaignIdstringRequired
    Query parameters
    startDatestringRequired
    endDatestringRequired
    intervalstring · enumRequiredPossible values:
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /campaigns/{campaignId}/analytics

    List Campaign Options

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /campaigns/options

    List Campaign Messages

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    campaignIdstringRequired
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /campaigns/{campaignId}/messages

    Trigger SMS Verification Code

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    tostringRequired
    serviceNamestringOptional
    timeoutSecondsnumberOptional
    codeLengthnumberOptional
    realtimebooleanOptional
    bypassbooleanOptional
    externalIdstringOptional
    longcodeIdnumberOptional
    poolIdstringOptional
    senderNamestringOptional
    gatedbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /verify/sms/send-code

    Check SMS Verification Code

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    tostringOptional
    verificationIdstringOptional
    codestringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /verify/sms/check-code

    Create Template

    post

    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

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    namestringOptional
    messagestringRequired
    attachmentstringOptional
    isMMSbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /templates

    Get Template

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Query parameters
    isMMSstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /templates/{id}

    Update Template

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Body
    namestringOptional
    messagestringOptional
    attachmentstringOptional
    isMMSbooleanOptional
    updateAsMMSbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /templates/{id}

    Delete Template

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    idstringRequired
    Body
    isMMSbooleanRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /templates/{id}

    List Templates

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /templates

    Create Group

    post
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    idnumberOptional
    accountIdnumberOptional
    namestringOptional
    hiddennumberOptional
    keywordstringOptional
    welcomeMessagestringOptional
    descriptionstringOptional
    parentWebinarIdstringOptional
    displayNamestring | nullableOptional
    sortOrdernumber | nullableOptional
    typestring · enumOptionalPossible values:
    isTemporarybooleanOptional
    createdAtone ofOptional
    string · date-timeOptional
    or
    stringOptional
    or
    string | nullableOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /groups

    Delete Group

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /groups/{groupId}

    Update Group

    patch
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Body
    idnumberOptional
    accountIdnumberOptional
    namestringOptional
    hiddennumberOptional
    keywordstringOptional
    welcomeMessagestringOptional
    descriptionstringOptional
    parentWebinarIdstringOptional
    displayNamestring | nullableOptional
    sortOrdernumber | nullableOptional
    typestring · enumOptionalPossible values:
    isTemporarybooleanOptional
    createdAtone ofOptional
    string · date-timeOptional
    or
    stringOptional
    or
    string | nullableOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    patch
    /groups/{groupId}

    List Groups

    get
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    pagenumberOptional
    pageSizenumberOptional
    sortBystringOptional
    sortDirectionstring · enumOptionalPossible values:
    querystringOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    get
    /groups

    Add Subscriber to Group

    post

    Required Fields: subscriberId

    Note: Field addToDripCampaigns is true by default.

    undefined

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    Body
    subscriberIdnumberRequired
    addToDripCampaignsbooleanOptional
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    post
    /groups/{groupId}/subscribers

    Remove Subscriber from Group

    delete
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    groupIdstringRequired
    subscriberIdstringRequired
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    500

    InternalServerError

    application/json
    delete
    /groups/{groupId}/subscribers/{subscriberId}
    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"
    }
    
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json

    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"
    }
    
    Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    {
      "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"
      }
    ]
    An attachment for the message in the form of a URL.
  • 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.

    If they can send/receive iMessages, Mobile Text Alerts will redirect them to a special iMessage specific link (eximessage://[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.)

  • Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    Controlled Template
    Webhooks
    An attachment for the message in the form of a URL.
  • 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.

    If they can send/receive iMessages, Mobile Text Alerts will redirect them to a special iMessage specific link (eximessage://[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.)

  • Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    Controlled Template
    Webhooks
    An attachment for the message in the form of a URL.
  • 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.

    If they can send/receive iMessages, Mobile Text Alerts will redirect them to a special iMessage specific link (eximessage://[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.)

  • Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    Controlled Template
    Webhooks
    An attachment for the message in the form of a URL.
  • 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.

    If they can send/receive iMessages, Mobile Text Alerts will redirect them to a special iMessage specific link (eximessage://[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.)

  • Responses
    200

    Success

    application/json
    400

    BadRequestError

    application/json
    401

    UnauthorizedError

    application/json
    403

    ForbiddenError

    application/json
    429

    RateLimitError

    application/json
    500

    InternalServerError

    application/json
    The phone number the message is being sent to
  • 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

  • The carrier fee for sending the message, when applicable
  • 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

  • Controlled Template
    Webhooks
    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
    }
    :
    boolean
    ;
    sunday: boolean;
    type: "week" | "month";
    frequency: RepeatFrequency;
    }
    enum RepeatFrequency {
        NEVER = 0,
        DAILY = 1,
        WEEKLY = 2,
        BIWEEKLY = 3,
        MONTHLY = 4,
        ANNUALLY = 5
    }
    :
    boolean
    ;
    sunday: boolean;
    type: "week" | "month";
    frequency: RepeatFrequency;
    }
    enum RepeatFrequency {
        NEVER = 0,
        DAILY = 1,
        WEEKLY = 2,
        BIWEEKLY = 3,
        MONTHLY = 4,
        ANNUALLY = 5
    }
    :
    boolean
    ;
    sunday: boolean;
    type: "week" | "month";
    frequency: RepeatFrequency;
    }
    enum RepeatFrequency {
        NEVER = 0,
        DAILY = 1,
        WEEKLY = 2,
        BIWEEKLY = 3,
        MONTHLY = 4,
        ANNUALLY = 5
    }
    :
    boolean
    ;
    sunday: boolean;
    type: "week" | "month";
    frequency: RepeatFrequency;
    }
    enum RepeatFrequency {
        NEVER = 0,
        DAILY = 1,
        WEEKLY = 2,
        BIWEEKLY = 3,
        MONTHLY = 4,
        ANNUALLY = 5
    }