# SimpleTexting > SimpleTexting is a business SMS and MMS marketing platform. Its v2 REST API lets developers send single text messages, run bulk campaigns to lists and segments, manage contacts and contact lists, upload MMS media, list sending numbers, and subscribe to delivery, incoming-message and unsubscribe webhooks — all authenticated with an account bearer token. Generated by API Evangelist on 2026-08-13 from this repository's artifacts. SimpleTexting does not publish an llms.txt of its own (probed 2026-08-13: /llms.txt returns 404 on simpletexting.com and an HTML application shell on api-app2/api-doc/app2 — no real document on any host). Two things to know before writing code: - **Access is approval-gated.** SimpleTexting's own reference states: "For additional security, our API is by approval only. If you'd like access, sign up for a trial account and email support@simpletexting.net with details about your use case." A token alone is not enough. - **There is no official SDK.** No SimpleTexting-published client library exists in npm, PyPI, RubyGems or anywhere else, and there is no github.com/simpletexting organization. Call the REST API directly with an HTTP client. Anything you find named "simpletexting" in a registry is third party — the PyPI package of that name is a community module last released in 2020. ## API - [API reference (v2)](https://api-doc.simpletexting.com/): Full ReDoc reference for the current API. Base URL `https://api-app2.simpletexting.com/v2`. The OpenAPI 3.0.1 document is embedded in this page rather than served at /openapi.json. - [API overview](https://simpletexting.com/api/): Product page for the API. - [Legacy v1 documentation](https://simpletexting.com/api/docs/): The older form-encoded surface at `https://app2.simpletexting.com/v1`, still served. It signals errors in the body (`1` success / `0` plus a named error), not with HTTP status codes. Query-parameter token auth on v1 is closed to accounts created after 2021-09-01. - [Status page](https://status.simpletexting.com/): Atlassian Statuspage with API as a named component; machine-readable at `https://status.simpletexting.com/api/v2/summary.json`, plus history.atom / history.rss. ## How to call it - Auth: `Authorization: Bearer ` on every request. The token is generated in the web app under API settings. One token carries full account authority — there are no scopes and no restricted keys. - Content type: send `content-type: application/json` on POST (multipart/form-data for media upload). Responses are always JSON. - Pagination: zero-based `page` plus `size` (default 50, maximum 500). List responses are `{content, totalPages, totalElements}`. Several list endpoints also take `since` (ISO 8601) and `direction` (ASC/DESC). - Errors: served as `application/problem+json` but NOT RFC 9457 — the body is `{status, errorCode, code, message, errorDetails, path, timestamp}`, e.g. `ERR_AUTH_TOKEN_MISSING` on a 401. - Idempotency: NOT supported. There is no Idempotency-Key. Do not blind-retry `POST /api/messages` or `POST /api/campaigns` — a retry can send and bill a second message. - Rate limits: no numeric API quota is published and no RateLimit-*/Retry-After header was observed. Real throughput is governed by number type and carrier registration (10DLC / toll-free / short code). - Ids are 24-character hex strings. Contacts can also be addressed by phone number, contact lists by name. ## Core operations - Messages: `createMessage` (POST /api/messages), `evaluateMessage` (POST /api/messages/evaluate — dry-run a body for category, length and credit cost), `getMessages`, `getMessage`. - Campaigns: `createCampaign` (POST /api/campaigns — to `listIds` and/or `segmentIds`), `getCampaigns`, `getCampaign`. - Contacts: `getContacts`, `createContact`, `getContact`, `updateContact`, `deleteContact`; batch via `processBatchUpdate`, `getBatchUpdateResults`, `processBatchDelete`. - Contact lists: `getLists`, `createList`, `getList`, `updateList`, `deleteList`, `addContactToList`, `removeContactFromGroup`. - Segments and custom fields (read-only): `getSegments`, `getCustomFields`. - Media for MMS: `upload`, `uploadByLink`, `getMediaItems`, `getMediaItem`, `delete`. - Webhooks: `getWebhooks`, `createWebhook`, `updateWebhook`, `deleteWebhook`. - Account: `getTenantInfo`, `getTenantPhones`. ## Events Subscribe a URL to any of five triggers: `INCOMING_MESSAGE`, `OUTGOING_MESSAGE`, `DELIVERY_REPORT`, `NON_DELIVERED_REPORT`, `UNSUBSCRIBE_REPORT`. A subscription can be filtered by `accountPhone`/`contactPhone` and capped with `requestPerSecLimit` (maximum 25/second). Callbacks are unsigned — SimpleTexting publishes no signature header or shared secret, so a receiver cannot verify origin. ## Billing model Credits, not messages: SMS up to 160 characters = 1 credit, extended SMS (up to 306) = 2, MMS = 3. Plans bundle a monthly credit allotment; overage is billed per credit. Use `evaluateMessage` before a large send to see `sumOfCredits` for a body. ## Product - [Pricing](https://simpletexting.com/pricing/): Build-your-own credit tiers; API access is included on paid plans. Free trial, no credit card. - [API feature page](https://simpletexting.com/features/api/) - [Help center](https://help.simpletexting.com/en/) - [SMS compliance](https://simpletexting.com/sms-compliance/): TCPA consent, CTIA guidelines, A2P 10DLC and toll-free registration. - [Terms](https://simpletexting.com/terms/) · [Privacy policy](https://simpletexting.com/privacy-policy/) ## This profile - [apis.yml](https://raw.githubusercontent.com/api-evangelist/simpletexting/refs/heads/main/apis.yml) - OpenAPI, harvested verbatim: `openapi/_original/simpletexting-openapi.yml` (plus one document per resource in `openapi/`) - Conventions: `conventions/simpletexting-conventions.yml` · Errors: `errors/simpletexting-problem-types.yml` - Webhooks: `asyncapi/simpletexting-webhooks.yml` · Data model: `data-model/simpletexting-data-model.yml` - Lifecycle: `lifecycle/simpletexting-lifecycle.yml` · Conformance: `conformance/simpletexting-conformance.yml` - Agent Skills: `skills/_index.yml`