# TextKit Documentation

Source: https://jointextkit.com/docs
Index: https://jointextkit.com/llms.txt

REST API for sending and receiving SMS, verifying phone numbers, and
provisioning real US and Canada numbers.

- Base URL: https://api.jointextkit.com/v1
- Auth: `Authorization: Bearer ssms_sk_test_...` (free sandbox keys, instant)
- MCP: https://mcp.jointextkit.com (discovery: https://jointextkit.com/.well-known/mcp.json)
- Every page below has a markdown twin: append `.md` to its URL.
- All of them in one file: https://jointextkit.com/docs/llms-full.txt

## Pages

- [Quickstart](https://jointextkit.com/docs/quickstart.md): Send your first SMS in under five minutes.
- [Authentication](https://jointextkit.com/docs/authentication.md): API keys, test vs live mode, and key rotation.
- [Sandbox & test numbers](https://jointextkit.com/docs/sandbox.md): How test mode works, including magic numbers.
- [Messages](https://jointextkit.com/docs/messages.md): Send SMS, retrieve messages, and list history.
- [Verify](https://jointextkit.com/docs/verify.md): Phone and email verification (OTP) in two API calls.
- [Webhooks](https://jointextkit.com/docs/webhooks.md): Signed event delivery to your endpoint, with automatic retries.
- [CLI](https://jointextkit.com/docs/cli.md): Log in from the terminal, receive webhooks on localhost, and trigger sandbox events.
- [MCP server](https://jointextkit.com/docs/mcp.md): Give any AI agent TextKit as tools: texts, numbers, contacts, broadcasts, automations.
- [Migrate from Twilio Verify](https://jointextkit.com/docs/migrate-from-twilio.md): Line-by-line mapping from Twilio Verify to TextKit Verify.
- [Numbers](https://jointextkit.com/docs/numbers.md): Search, buy, organize, and release phone numbers, one at a time or hundreds at once.
- [Customers](https://jointextkit.com/docs/customers.md): Attribute numbers, messages, verifications and usage to the businesses you send for.
- [Lookup](https://jointextkit.com/docs/lookup.md): Carrier and line type for any number.
- [Inbox & conversations](https://jointextkit.com/docs/inbox.md): Threaded conversations, unread counts, and the shared team inbox.
- [Contacts](https://jointextkit.com/docs/contacts.md): Contacts, CSV import, segments and subscription topics: in the console and the API.
- [Teams](https://jointextkit.com/docs/teams.md): Multiple users on one account: roles, email invitations, signatures.
- [Batches & broadcasts](https://jointextkit.com/docs/broadcasts.md): One message to up to 10,000 people - from a CSV, the API, or tagged contacts - with per-recipient variables, pause, cancel and retry.
- [Scheduled messages](https://jointextkit.com/docs/scheduled.md): Send later: schedule 1:1 messages up to 30 days out.
- [Recurring schedules](https://jointextkit.com/docs/schedules.md): Send the same message every day, week or month at a local time.
- [Automations](https://jointextkit.com/docs/automations.md): Send events from your app; TextKit sends, waits, and branches.
- [Abandoned cart texts](https://jointextkit.com/docs/abandoned-cart.md): Text shoppers their cart link when they leave checkout. Works with Shopify Flow, Klaviyo, or your own code.
- [Auto-replies & office hours](https://jointextkit.com/docs/auto-reply.md): Per-number automatic replies, optionally only outside business hours.
- [Number porting](https://jointextkit.com/docs/porting.md): Bring an existing business number to TextKit.
- [Opt-out, consent & TCPA](https://jointextkit.com/docs/opt-out.md): Revocation in plain English, the consent ledger, and what is blocked.
- [Compliance & registration](https://jointextkit.com/docs/compliance.md): Website disclosure check, generated opt-in copy, 10DLC brand and campaign registration, and opt-in proof.
- [Compliance checks](https://jointextkit.com/docs/compliance-checks.md): Every check a send passes through, in order, what each one returns, quiet hours, and how blocked messages show in your log.
- [Security best practices](https://jointextkit.com/docs/security.md): Protect your account, API keys, and users: key hygiene, phishing awareness, and how we handle your data.
- [Deliverability](https://jointextkit.com/docs/deliverability.md): Delivery rates by day, carrier, and sending number, plus automatic degradation alerts.
- [Credits](https://jointextkit.com/docs/credits.md): Prepaid credits: buying them, what draws them down, and what happens when they run out.
- [Spend limits](https://jointextkit.com/docs/spend-limits.md): A monthly cap on live messaging spend, with alerts as you approach it.
- [Usage](https://jointextkit.com/docs/usage.md): Account usage by month and for today, with your plan limits, over the API.
- [Audit log](https://jointextkit.com/docs/audit-logs.md): Who changed keys, team, webhooks, spend limits, numbers, consent, and settings.
- [Errors](https://jointextkit.com/docs/errors.md): The error envelope and every error code.
- [Pricing](https://jointextkit.com/docs/pricing.md): What TextKit costs, and what the free tier includes.
- [Quickstarts by language](https://jointextkit.com/docs/quickstarts.md): Send your first SMS from Node.js, Python, PHP, Ruby, Go, Java, .NET, Rust, Next.js, Django, Laravel, Rails and more, with a free test key.
- [Send SMS with Node.js](https://jointextkit.com/docs/send-with-nodejs.md): Send your first SMS from Node.js with the TextKit SDK: install jointextkit, set your API key, send a test text, and handle errors.
- [Send SMS with Python](https://jointextkit.com/docs/send-with-python.md): Send your first SMS from Python with the TextKit SDK: pip install jointextkit, set your API key, send a test text, and handle errors.
- [Send SMS with PHP](https://jointextkit.com/docs/send-with-php.md): Send your first SMS from PHP with one cURL request to the TextKit REST API: set your API key, send a test text, and read errors.
- [Send SMS with Ruby](https://jointextkit.com/docs/send-with-ruby.md): Send your first SMS from Ruby with Net::HTTP and the TextKit REST API: no gem needed. Set your API key, send a test text, read errors.
- [Send SMS with Go](https://jointextkit.com/docs/send-with-go.md): Send your first SMS from Go with net/http and the TextKit REST API: no module needed. Set your API key, send a test text, read errors.
- [Send SMS with Java](https://jointextkit.com/docs/send-with-java.md): Send your first SMS from Java with the built-in HttpClient and the TextKit REST API: no dependency. Set your key, send a test, read errors.
- [Send SMS with .NET](https://jointextkit.com/docs/send-with-dotnet.md): Send your first SMS from C# and .NET with HttpClient and the TextKit REST API: no NuGet package. Set your key, send a test, read errors.
- [Send SMS with Rust](https://jointextkit.com/docs/send-with-rust.md): Send your first SMS from Rust with reqwest and the TextKit REST API: add three crates, set your API key, send a test text, and read errors.
- [Send SMS with Next.js](https://jointextkit.com/docs/send-with-nextjs.md): Send SMS from a Next.js App Router route handler with the TextKit SDK: install, keep the API key on the server, send a test text, handle errors.
- [Send SMS with Express](https://jointextkit.com/docs/send-with-express.md): Send SMS from an Express app with the TextKit Node.js SDK: install jointextkit, add a POST route, send a test text, and return API errors.
- [Send SMS with Hono](https://jointextkit.com/docs/send-with-hono.md): Send SMS from a Hono app with the TextKit SDK on Node.js, Bun, Deno or Cloudflare Workers: read the key per runtime and send a test text.
- [Send SMS with SvelteKit](https://jointextkit.com/docs/send-with-sveltekit.md): Send SMS from a SvelteKit server route with the TextKit SDK: install jointextkit, read the key from private env, send a test text, return errors.
- [Send SMS with Nuxt](https://jointextkit.com/docs/send-with-nuxt.md): Send SMS from a Nuxt server route with the TextKit SDK: install jointextkit, keep the API key on the server, send a test text, and return errors.
- [Send SMS with Bun](https://jointextkit.com/docs/send-with-bun.md): Send your first SMS from Bun with the TextKit SDK: bun add jointextkit, put your API key in .env, run one file, and handle errors from the API.
- [Send SMS with Deno](https://jointextkit.com/docs/send-with-deno.md): Send your first SMS from Deno with the TextKit SDK from npm: import npm:jointextkit, pass your API key, run with network access, handle errors.
- [Send SMS with Cloudflare Workers](https://jointextkit.com/docs/send-with-cloudflare-workers.md): Send SMS from a Cloudflare Worker with the TextKit SDK: store the API key as a Worker secret, send a test text, deploy with wrangler.
- [Send SMS with Supabase Edge Functions](https://jointextkit.com/docs/send-with-supabase.md): Send SMS from a Supabase Edge Function with the TextKit SDK: store the API key as a secret, send a test text, and deploy with the Supabase CLI.
- [Send SMS with AWS Lambda](https://jointextkit.com/docs/send-with-aws-lambda.md): Send SMS from an AWS Lambda function with the TextKit Node.js SDK: bundle jointextkit, set the API key in the environment, send a test text.
- [Send SMS with Flask](https://jointextkit.com/docs/send-with-flask.md): Send SMS from a Flask app with the TextKit Python SDK: pip install jointextkit, add a POST route, send a test text, and return API errors.
- [Send SMS with FastAPI](https://jointextkit.com/docs/send-with-fastapi.md): Send SMS from a FastAPI app with the TextKit Python SDK: add a POST endpoint with a Pydantic model, send a test text, and return API errors.
- [Send SMS with Django](https://jointextkit.com/docs/send-with-django.md): Send SMS from Django with the TextKit Python SDK: pip install jointextkit, send from a view or a management command, and handle API errors.
- [Send SMS with Laravel](https://jointextkit.com/docs/send-with-laravel.md): Send SMS from Laravel with its HTTP client and the TextKit REST API: no package needed. Add the key to config, send a test, catch errors.
- [Send SMS with Rails](https://jointextkit.com/docs/send-with-rails.md): Send SMS from Rails with a small service object over the TextKit REST API: no gem needed. Send a test from the console, then from a job.
