> For the complete documentation index, see [llms.txt](https://developers.mobile-text-alerts.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.mobile-text-alerts.com/developer-center-introduction.md).

# Developer Center Introduction

## Welcome to the Mobile Text Alerts Developer Center

The Mobile Text Alerts API gives you programmatic control over everything you can do in the platform dashboard. Send **SMS** and **MMS** (images, multiple attachments, and contact cards), reach Apple devices with **iMessage**, and send rich **RCS** messages — all through a single [`POST /send`](/api-reference/send.md#post-send) endpoint that picks the right route for each recipient.

Beyond sending, the API covers the full lifecycle of a messaging program:

* **Two-way messaging** — receive replies, manage threads, and configure automated replies and keywords.
* **Subscriber management** — create, update, group, and segment subscribers, including custom attributes and adaptive groups that populate themselves over time.
* **Scheduling and automation** — schedule sends, build drip campaigns, and reuse message templates.
* **Real-time events** — webhooks for message sends, replies, delivery statuses, and opt-ins.
* **Reporting** — delivery analytics and message log exports.

API access is bundled with every subscription at no additional cost, including free trial accounts.

{% hint style="info" %}
**Not a developer?** Every action described here is also available in the [platform dashboard](https://platform.mobile-text-alerts.com). The API is for teams who want to drive messaging from their own application.
{% endhint %}

### Get Started: Send your first message with the API

If you are just getting started, the three steps below take you from no account to a delivered message. If you are already partway there, jump straight to your next milestone:

{% stepper %}
{% step %}

#### Create your free account

A free trial account includes API access and message credits, so you can build against the real API before you subscribe.

<a href="https://mobile-text-alerts.com/signup-smsapi" class="button primary">Create your free account</a>
{% endstep %}

{% step %}

#### Generate an API key

In the platform dashboard, open [Settings → Developer](https://platform.mobile-text-alerts.com#settings_developer) and click **Generate a new key**. Copy the key somewhere safe — it is shown only once.

Full walkthrough: [Get an API Key](/getting-started/get-an-api-key.md).
{% endstep %}

{% step %}

#### Send your first message

Using the example requests below, replace the API key and recipient number.&#x20;

{% hint style="warning" %}
Trial accounts and unverified numbers can only send templated content.&#x20;

The following examples use global template `170`.  Once your sending number is approved, replace `templateId` with a custom `message`.
{% endhint %}

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location 'https://api.mobile-text-alerts.com/v3/send' \
  --header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258' \
  --header 'Content-Type: application/json' \
  --data '{
    "subscribers": ["+13175551111"],
    "templateId": 170
  }'
```

{% endtab %}

{% tab title="Node.js" %}
Requirements: Node.js `18+` (native `fetch`) and an `MTA_API_KEY` environment variable.

```js
const response = await fetch("https://api.mobile-text-alerts.com/v3/send", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MTA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    subscribers: ["+13175551111"],
    templateId: 170,
    // After approval, replace templateId with:
    // message: "Hello from the Mobile Text Alerts API! Reply STOP to end.",
  }),
});

console.log(await response.json());
```

{% endtab %}

{% tab title="Python" %}
Requirements: `pip install requests` and an `MTA_API_KEY` environment variable.

```python
import os
import requests

response = requests.post(
    "https://api.mobile-text-alerts.com/v3/send",
    headers={
        "Authorization": f"Bearer {os.getenv('MTA_API_KEY')}",
        "Content-Type": "application/json",
    },
    json={
        "subscribers": ["+13175551111"],
        "templateId": 170,
        # After approval, replace templateId with:
        # "message": "Hello from the Mobile Text Alerts API! Reply STOP to end.",
    },
)

print(response.json())
```

{% endtab %}
{% endtabs %}

A successful request returns a `200` with the message ID and a recipient count:

```json
{
  "data": {
    "messageId": "uuid",
    "totalSent": 1,
    "totalFailedInternationalRecipients": 0
  },
  "message": "Message Sent to 1 Recipient."
}
```

{% endstep %}
{% endstepper %}

Any number in the `subscribers` field that is not already on your account is automatically added as a new subscriber. To manage subscribers explicitly, see [Add a Subscriber](/getting-started/add-a-subscriber.md).

***

### Authentication

Every request is authenticated with a bearer token — your API key — in the `Authorization` header:

**Example bearer token:**

```
Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258
```

You can then confirm a key works:

**Example verification request:**

```bash
curl --location 'https://api.mobile-text-alerts.com/v3/auth/verify-api-key' \
  --header 'Authorization: Bearer 89fa747a-e01b-5940-99c2-4e96fa996258'
```

**Response:**

A valid key returns `{"message":"API Key verified", ...}`. A missing or revoked key returns a `401`.

{% hint style="info" %}
**API Key Lifespan**

Keys are scoped to a single account and never expire on their own, but they can be revoked from the dashboard at any time. For key generation, rotation, and the full authentication reference, see [Get an API Key](/getting-started/get-an-api-key.md).
{% endhint %}

***

### Mobile Text Alerts API Conventions

The following rules apply across every Mobile Text Alerts API endpoint.

<table><thead><tr><th width="182">Convention</th><th>Detail</th></tr></thead><tbody><tr><td><strong>Base URL</strong></td><td><code>https://api.mobile-text-alerts.com/v3</code> — the version (v3) is part of the path, not a header.</td></tr><tr><td><strong>Transport</strong></td><td><code>HTTPS</code> only. REST resources with standard <code>GET</code>, <code>POST</code>, <code>PATCH</code>, and <code>DELETE</code> methods.</td></tr><tr><td><a href="/pages/xrXlIPTvwbxgyREQ5GzP"><strong>Request bodies</strong></a></td><td>JSON. All <code>POST</code> and <code>PATCH</code> requests must send <code>Content-Type: application/json</code>.</td></tr><tr><td><strong>Response bodies</strong></td><td>JSON, wrapped in a top-level <code>data</code> object with an accompanying <code>message</code> string.</td></tr><tr><td><a href="/pages/QD3TvDH56e5gMyqhu9Tq"><strong>Status codes</strong></a></td><td>Standard HTTP codes: <mark style="color:$success;"><code>200</code></mark> success, <mark style="color:red;"><code>400</code></mark> bad request, <mark style="color:red;"><code>401</code></mark> unauthorized, <mark style="color:red;"><code>403</code></mark> forbidden, <mark style="color:red;"><code>429</code></mark> rate limited, <mark style="color:red;"><code>500</code></mark> server error.</td></tr><tr><td><a href="/pages/VmjnJAQuQfqpdhsLnnJQ"><strong>Errors</strong></a></td><td>Every error returns: <code>httpCode</code>, <code>message</code>, <code>timestamp</code>, <code>type</code>, <code>name</code>, and a <code>requestId</code> to use when contacting support.</td></tr><tr><td><strong>Phone numbers</strong></td><td>E.164 format (<code>+13175551111</code>) is the recommended format everywhere a phone number is accepted.</td></tr><tr><td><a href="/pages/unN2lF8UPun3EtuwM9tB"><strong>Lists</strong></a></td><td>Paginated with <code>page</code> (0-indexed), <code>pageSize</code> (default <code>25</code>, max <code>1000</code>), <code>sortBy</code>, and <code>sortDirection</code>.</td></tr><tr><td><a href="/pages/axCIvJXLW8bxBKiqKpuZ"><strong>Rate limits</strong></a></td><td><code>30</code> requests per minute per IP by default. Some endpoints override this with per-account limits.</td></tr></tbody></table>

***

### SDKs and Tooling

#### [TypeScript SDK](/sdks/typescript-sdk.md)

You do not have to manually create HTTP requests. The [TypeScript SDK](/sdks/typescript-sdk.md) wraps every endpoint with typed requests and responses, IDE autocompletion, and per-endpoint error classes.

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

```bash
npm install @mobiletextalerts/typescript-sdk
```

**Example client configuration:**

```typescript
import { createClient, sendMessageFromApi } from '@mobiletextalerts/typescript-sdk';

const client = createClient({
  baseUrl: 'https://api.mobile-text-alerts.com/v3',
  headers: { Authorization: `Bearer ${process.env.MTA_API_KEY}` },
});

await sendMessageFromApi({
  client,
  body: { subscribers: ['+13175551111'], message: 'Hello from the SDK!' },
});
```

More language libraries are in active development. See [SDKs](/sdks.md) for the current list.

#### Build with [AI assistants](/ai/how-to-use-ai-with-mobile-text-alerts.md)

Point your AI coding assistant at these docs and it can write integration code against the real, current API surface instead of guessing.

| Tool                                                                                   | What it does                                                                  | How to use it                                                                                |
| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| **Markdown pages**                                                                     | Any page is available as clean Markdown for pasting into a model's context    | Append `.md` to any Developer Center URL, e.g. `/getting-started/send-a-message.md`          |
| [**`llms.txt`**](https://developers.mobile-text-alerts.com/llms.txt)                   | Indexed list of every page with descriptions                                  | Give the URL to your assistant as a documentation map                                        |
| [**`llms-full.txt`**](https://developers.mobile-text-alerts.com/llms-full.txt)         | The entire Developer Center in one file                                       | Paste or fetch as full context for a model                                                   |
| [**Developer Center MCP server**](/mcp-servers.md#gitbook-developer-center-mcp-server) | Live documentation access from Claude, Cursor, VS Code, and other MCP clients | Connect to `https://developers.mobile-text-alerts.com/~gitbook/mcp`                          |
| [**Knowledge Base MCP server**](/mcp-servers/knowledge-base-mcp-server.md)             | Developer Center **and** Help Center content in one server                    | See the [setup guide](/mcp-servers.md#mobile-text-alerts-knowledge-base-mcp-server)          |
| [**Actions MCP server**](/mcp-servers/actions-mcp-server.md)                           | Lets an AI assistant send messages and run account actions through the API    | [Connect with Claude](/mcp-servers/actions-mcp-server/actions-server-connect-with-claude.md) |

New to MCP? Start with [MCP Servers](/mcp-servers.md).

***

### Next Steps

<table data-view="cards"><thead><tr><th></th><th data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><p><strong>Send messages</strong></p><p>Customize sends with MMS, templates, personalization, scheduling, iMessage, and RCS.</p></td><td><a href="/pages/LzSr9P3UdWWzFw3t2mF0">/pages/LzSr9P3UdWWzFw3t2mF0</a></td><td></td></tr><tr><td><p><strong>Receive replies</strong></p><p>Listen for inbound messages, delivery statuses, and opt-ins with webhooks.</p></td><td><a href="/pages/NaEgteGtphGTrt8v2ZAK">/pages/NaEgteGtphGTrt8v2ZAK</a></td><td></td></tr><tr><td><p><strong>Manage subscribers</strong></p><p>Create, update, group, and segment your contacts, including bulk operations.</p></td><td><a href="/pages/6lCXUinfzndmowyalpdL">/pages/6lCXUinfzndmowyalpdL</a></td><td></td></tr><tr><td><strong>Track delivery</strong><br>Poll delivery records or stream status changes in real time.</td><td><a href="/pages/5i7MLX7SRKHJyk1iD9Ne">/pages/5i7MLX7SRKHJyk1iD9Ne</a></td><td></td></tr><tr><td><p><strong>Go to production</strong></p><p>Choose a messaging route, register your brand, and plan around rate limits and errors.</p></td><td><a href="/pages/wpAAu8PGkATohFgGa7kj">/pages/wpAAu8PGkATohFgGa7kj</a></td><td></td></tr><tr><td><p><strong>Look up an endpoint</strong></p><p>Full reference for every public endpoint, with interactive requests.</p></td><td><a href="/pages/Emqx595M5uhg30TbFQbP">/pages/Emqx595M5uhg30TbFQbP</a></td><td></td></tr></tbody></table>

#### By use case

Start from what you are building rather than the endpoint you need to call.

* [**Generate and validate 2FA / MFA codes via SMS**](/use-cases/generate-and-validate-2fa-mfa-codes-via-sms.md) — issue verification codes, deliver them, and validate user input without building the state machine yourself.

More use case guides are on the way. If you are building something you do not see here, [tell us what you need](https://mobile-text-alerts.deskpro.com/new-ticket).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers.mobile-text-alerts.com/developer-center-introduction.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
