---
url: https://textme-docs.matat.io/endpoints/overview.md
description: >-
  Every operation mapped to the XML root element that selects it, plus the
  request and response contract they all share.
---

# Endpoint overview

Every operation below is the same HTTP call:

```http
POST https://my.textme.co.il/api
Authorization: Bearer {api_token}
Content-Type: application/json      (or application/xml)
```

What changes is the **root element** of the body. `<sms>` sends a message, `<dlr>` pulls delivery reports, `<newCL>` creates a contact list. This page maps every root element to the page that documents it.

Swap the URL for `https://my.textme.co.il/api/test` to validate a payload without performing the action, see [Request format](../guide/request-format.md#testing-without-sending).

## [API tokens](./tokens.md)

| Root element | Operation |
|---|---|
| `getApiToken` | Mint a new token, or read back the most recent one. Requires an existing valid token. |

## [Send SMS](./send.md)

| Root element | Operation |
|---|---|
| `sms` | Send one message to any number of destinations and contact lists. Scheduling, opt-out footers, short links, recency filtering and campaign naming all live here. |

## [Bulk send](./bulk.md)

| Root element | Operation |
|---|---|
| `bulk` | Send up to 2,500 *different* messages in one call, each with its own text, sender and destinations. |

## [Voice (TTS)](./tts.md)

| Root element | Operation |
|---|---|
| `sms` + `tts` | The `sms` operation with a `tts` block attached: the message is spoken down the line instead of, or as well as, being texted. |

## [OTP](./otp.md)

| Root element | Operation |
|---|---|
| `send_otp` | Generate a one-time code, send it by SMS, and start its validity window. |
| `validate_otp` | Check a code the user typed. Status `12` means it did not verify. |

## [Balance](./balance.md)

| Root element | Operation |
|---|---|
| `balance` | Remaining SMS credit, international credit, or mail credit. |

## [Reports](./reports.md)

| Root element | Operation |
|---|---|
| `dlr` | Delivery reports for external ids you supplied when sending. Up to 1,000 ids, one week per request. |
| `dlrByDate` | Delivery reports for a time window, without needing external ids. One week per request. |
| `incoming` | Messages sent *to* your numbers. One week per request, up to a year back. |

## [Blocklist](./blacklist.md)

| Root element | Operation |
|---|---|
| `blacklist` | List numbers blocked during a date range. |
| `addNumBL` | Block numbers. Answers `946` on success, not `0`. |
| `rmNumBL` | Unblock numbers. Requires a `reason`. Answers `944` on partial success. |

## [Contact lists](./contact-lists.md)

| Root element | Operation |
|---|---|
| `newCL` | Create one or more lists, optionally populated, with up to six dynamic fields per contact. |
| `removeCL` | Delete lists by id. |
| `addNumCL` | Add numbers to existing lists. |
| `rmNumCL` | Remove numbers from existing lists. |
| `getCL` | Every list and its members, including empty lists. |
| `getCLbyID` | The members of one list. |

## [Campaigns](./campaigns.md)

| Root element | Operation |
|---|---|
| `cancel` | Cancel a scheduled campaign by `campaign_id`, or every campaign matching a `campaign_name`. |
| `get_birthday_campaigns` | List the account's birthday campaigns. |
| `edit_birthday_campaign` | Replace the message body on a birthday campaign. |

## [Verified senders](./verified-senders.md)

| Root element | Operation |
|---|---|
| `verify_phone` | Submit numbers to become usable as a `source`. |
| `getVerifiedPhones` | List the numbers already verified, optionally including sub-accounts'. |

## [Subscribers](./subscribers.md)

Reseller operations, for accounts that manage sub-accounts.

| Root element | Operation |
|---|---|
| `addSub` | Create a sub-account with a starting credit balance. |
| `updateAmountSub` | Move credit into a sub-account's wallet. |
| `getBlanceSubs` | Every sub-account's balance. |

## [Push API](./push.md)

Not something you call, but something TextMe calls. Delivery reports, incoming messages and opt-outs are POSTed to a URL you register, form-encoded.

## Shared response shape

Every operation answers with `status` and `message`, then its own data. `status` `0` means the call was accepted; see [Status codes](../reference/status-codes.md) for everything else, and note the two [blocklist operations that succeed with a non-zero status](../reference/status-codes.md#success).

Batch operations may also return an `errors` array beside a successful `status`. The call worked, individual rows did not. See [Partial success](../guide/errors.md#partial-success).

## Machine-readable contract

An OpenAPI 3.1 description of every operation on this page is published at
[`/openapi.json`](/openapi.json). It carries the request and response schema for
all 30 operations, the bearer security scheme, and the three
[push feeds](./push.md) as webhooks.

::: tip It describes an RPC API, not a REST one
Because every operation shares one URL, the spec is a single path with a
`oneOf` request body. That is accurate, and fine for validation and SDK
generation, but most tool-calling clients flatten it into one opaque
operation. A path-per-operation variant is possible if the backend adds
aliases such as `POST /api/sms` routing to the same handler.
:::
