Data Retention
Last updated: October 29, 2026
The short version
- Your message history stays while your account is open, because the inbox and logs are built on it.
- Opt-outs are kept long enough to keep honoring them.
- When you close your account, we delete your data 30 days later, and always within 90 days of closing.
How long TextKit keeps each kind of data, and why. "Deleted" means removed from our production systems; backups are overwritten on their normal cycle after that.
| Data | Kept for | Why |
|---|---|---|
| Message content and media | Life of the account, or until you delete or redact the message through the API, or ask us to. Free tier: 30 days (see below) | Message history, the shared inbox, and support |
| Message metadata and delivery receipts | Life of the account, or until you delete the message (a redacted message keeps its metadata, with the receipt's quoted text cut). Free tier: 30 days | Delivery logs, billing disputes, abuse investigations |
| Messages blocked by the content screen (up to 320 characters) | Life of the account. Free tier: 30 days in your log; the review record is kept | Review of content-screen decisions, and so your log shows the attempt |
| Link checks: for each kind of message and link domain from a registered number, whether its links passed and the domain they led to | 7 days | To check each kind of message's links once, not on every send |
| Short links: the original link, the message it was sent in, and its open counts (total, first and last open, and the kind of device; never an IP address or user agent) | As long as the message it was sent in. Free tier: 30 days with it | To send people to the link and report opens to you |
| Link domains you add for short links (the domain, its verification value and DNS check results) | Until you delete the domain, or the account closes | To serve your short links on your own domain |
| Review of new kinds of message (an account's first 30 days of live sending): each held message, to send once approved; for each kind, up to 320 characters of its first message, how many were held, and our decision with its reason | Held messages until we decide, at most 3 days (each is also in your message log as a blocked message, kept like the row below); the record of each kind and decision for the life of the account | To review new kinds of message before they go out, and to show what we decided and why |
| The registration check's answer for each kind of message from a registered number: whether it matches the registration, whether it is promotional, and a one-sentence reason (never the message text) | Life of the account, or until the registration or our classifier changes and the kind is checked again | So each kind is checked once, and to show why a kind was refused or held |
| Messages refused before sending for any other reason (opt-out, quiet hours, missing opt-in, unregistered sender, allowance, spend limit, credits, a closed or suspended account), with their text and the reason | Life of the account, or until you delete the message or ask us to. Free tier: 30 days | So your log shows every attempt and why it was not sent |
| Daily counts of blocked messages by reason | Life of the account | Your compliance reporting |
| The event log (the events your webhooks receive, viewable in the console) | Life of the account, or until you delete the message an event is about (redacting a message empties its text in its events). Free tier: 30 days | Debugging and replaying webhook events |
| Conversations (the thread view of messages with one number, and its last message preview) | Life of the account. Free tier: 30 days after the last message in the thread | The shared inbox |
| Your quiet-hours and re-confirmation settings, and the record that you imported opt-outs from a previous provider (counts only) or confirmed there were none | Life of the account | Account settings; the audit log records each change |
| Opt-out and opt-in records, including the registration each opt-in was given for, opt-in proof you record (through the API or a contact import) or that a sign-up on an opt-in page we host for you records (the request, and the YES reply that confirms it), and each number's subscription preference per topic | While the account is open, and at least 4 years after the last message to that number. Deleting a contact does not delete these: they belong to the phone number | To keep honoring opt-outs and topic preferences, and to answer TCPA claims |
| Re-confirmation questions: when we asked a number to confirm it still wants your marketing, the answer or its absence, and the one message held while we waited (also in your message log as a blocked message) | With the opt-in records above: at least 4 years after the last message to that number | To show what was asked and answered before marketing resumed |
| Contacts (phone number, name, email, company, state, tags, custom fields, notes, source, list memberships, the record's id in a connected tool), lists, segments, subscription topics, and import records (file name, who ran it, row counts) | Life of the account, or until you delete them | The address book, broadcast audiences, and merge fields |
| Connected tools (settings, the encrypted credential or approved access, the ingest token's fingerprint, sync counts) | Until you disconnect the tool, or the account closes | Keeping contacts and lists in step with your other tools |
| Which broadcasts a number was included in, and each broadcast's recipient list and results | Life of the account | Contact history and broadcast reporting |
| Verification attempts (the phone number or email address a code went to, the app name, and the outcome) | Codes expire after 10 minutes and are only ever stored hashed; outcomes, with the number or address, kept for the life of the account | Billing and fraud prevention |
| Lookup results | Cached for 24 hours. A message sent while a result is cached keeps the recipient's carrier name as part of its metadata | Cost and speed; delivery logs |
| Which mobile carrier a number you text is on (the number and the carrier only, not who sent to it) | 30 days | Charging the right carrier fee without a new lookup for every message |
| Customer records (customers API) and per-customer usage counts | Life of the account, or until you delete the customer (usage counts and attribution on past messages stay with the message history) | Attributing traffic and usage to the businesses you send for |
| Automation events you send us (event name, phone number, your user id, properties) | 30 days | Starting and advancing your automations; showing recent events in the console |
| Abandoned checkouts, orders and shipments already seen from a connected store (the store's id for each and when we saw it, no phone number) | 14 days | Using each cart, order and shipment at most once |
| Automation runs (recipient, the event properties that started the run, steps taken, why it ended) | Until the run ends, then 30 days. A run ends after at most 90 days | Running the flow; showing you what each run did |
| Automation flows (steps and message text) and the links between your user ids and phone numbers | Life of the account, or until you delete the flow; a user id's link until you unlink it through the API | Running your automations |
| Recurring schedules (recipient phone number, message text, repeat rule and time zone) | Life of the account, or until you delete the schedule. A paused or finished schedule is kept until you delete it | Sending each occurrence |
| The record of a recurring schedule's occurrences (date, outcome, message id; never the message text) | The most recent 90 occurrences of each schedule, deleted with the schedule. Messages a schedule sent are ordinary messages (first row) | Showing you what each occurrence did; making sure an occurrence is sent only once |
| API request logs | 30 days, and at most the newest 10,000 requests | Debugging and security |
| Session recordings of the website and console (with consent; everything typed and all console text masked) | 30 days | Finding what is confusing or broken |
| Message fingerprints by sending number (a hash of each live registered message's masked wording, never the text or the recipient) | 3 days | Noticing one message spread across many numbers or accounts |
| Numbers you released while carriers were filtering them (counts only), and a hold on new numbers when one was replaced | Until our team lifts the hold, or the account closes | Noticing a filtered number being swapped for a new one |
| API keys: a keyed hash to look each one up, and an encrypted copy so your admins can view it in the console | The hash: life of the account. The encrypted copy: until the key is revoked or rolled, or the account closes | Signing your requests in; showing your admins the key again |
| Live API key activity: the countries each live key has been used from, its requests per day, and when we last alerted about it or paused it | Requests per day: 14 days. Countries: until the key is revoked or the account closes | Telling you, and pausing the key, when it looks stolen |
| The browsers each person signed in to the console from (a random identifier, browser type, approximate location from the IP address, first and last seen) | Until that person's sign-in account is deleted; at most the 20 most recent per person | Emailing you about a sign-in from a browser we have not seen |
| Account audit log (who changed keys, team, webhooks, spend limits, numbers, consent, topic preferences, contact imports, lists, segments, topics, connected tools, settings, automations, recurring schedules, who approved or denied a command-line sign-in and the machine name it reported, closing the account, and from which IP) | Life of the account; deleted with it | Security and accountability |
| App connection requests (the name the app gives itself and the address it returns to) and the one-time approval codes | Requests: 15 minutes, or until approved or denied. Codes: 10 minutes, used once, stored only as hashes. The API key a connection creates is never stored in either | Letting you connect apps, such as AI assistants, to your account |
| Apps registered to connect (the name and return addresses an app registered) | Kept, so connections keep working | Recognizing the app on the next connection |
| Command-line sign-in requests (the machine name the tool reports and the IP address it asked from) | 10 minutes, or until the request is approved and collected, or denied, if sooner. The API key the sign-in creates is never stored in the request | Letting you approve a terminal's sign-in |
| Delivery statistics (counts by day, carrier, sending number, destination country, message category, customer, message tag, and failure code) | Life of the account; hourly detail 9 days | Deliverability reporting and degradation alerts |
| Opt-out rate counts per registration (messages sent and opt-outs, by hour; counts only) | 48 hours | Opt-out rate warnings and marketing pauses |
| Daily traffic counts per account, registration and sending number (messages sent, delivered, filtered and opt-outs; counts only) | 35 days | Abuse monitoring: volume alerts, and the carrier and new-account daily caps |
| Strikes (the kind of violation, the registration, a one-way hash of the person's number, the template's fingerprint and one line of evidence; never message text) | 30 days, the 20 newest | The automatic pause and our team's review (Messaging Policy §9) |
| Complaints (the kind of complaint, our number, its registration, a one-way hash of the person, and whether it came by reply or report; never the reply's text) | 90 days | The enforcement ladder (Messaging Policy §9) |
| Enforcement standing per registration (warning, half speed or paused, with the reasons and when) | Until our team moves it back; each change stays in your audit log | Applying the step and showing it to you |
| Abuse reports from our report form (the number reported, the reporter's phone number, what happened and any note, the account it matched) | 1 year | Investigating, and stopping the texts (Messaging Policy §10). Never shown to the business reported |
| Abuse-limit records: which of your numbers texted a person, and the people texted each day, kept as one-way hashes of the number, never the number itself | 2 days | The per-person limits and the new-account daily cap |
| A marketing pause on a registration (when, and the rate that caused it) | Until our team resumes it; the pause and the resume, with its reason, stay in your audit log | Enforcing the pause and showing it to you |
| Account usage metrics (message counts per hour and day, first-send times) | Daily counts 120 days; hourly counts until reported (about an hour); first-send times for the life of the account | Business reporting (Privacy §8) |
| TextKit Agent conversations (your questions and its answers) | Not stored by us: kept in your browser (the 20 most recent) until you clear them or sign out. A count of questions per person, kept to limit cost and abuse, is deleted within about two days | Answering questions about the docs |
| Requests to our public pages from self-identified AI crawlers and agents (counts per day, by the bot's name and the page path; no personal data) | 400 days | Learning how AI tools read our site |
| Webhook delivery logs (status code, response time, and the first 2 KB of your endpoint's response) | 30 days | Debugging your webhook integration |
A message's status callback URL (when you set status_callback on a send) | Until that message's final status is sent to it, or the account closes | Sending that message's status to the URL you gave |
| Undelivered webhook events (a reference to the event, not a second copy of it) | 30 days, or until you replay or dismiss them | Recovering events your endpoint missed |
| Brand and campaign registration details (including the example messages and description you write, and draft examples we suggest until you replace or confirm them), website check results, and the copy of what was filed for carrier review each time you submit (with your acknowledgment of the fee terms) | Life of the registration, plus 1 year. A registration has ended when it is rejected and not rechecked, when you release it, or when the account closes; a year after that, a daily job deletes it and its filed copies | Carrier and registry requirements; showing what the carriers reviewed |
| The business verification record for each business you register, or that the carriers' approval of your toll-free verification verifies (then recorded from that form, with the verification it came from): the authorized representative you name, each signed business attestation (the exact statement, the name and title typed, who signed it and how, the IP address, browser and time) and our decision with its reason | Life of the account, plus 1 year. A signed attestation is never changed; a new signature is a new record | Carrier and registry requirements; proving who signed for the business and what they agreed to |
| A hosted opt-in page's settings (its address, on or off, how many confirmed sign-ups it has had, and for a toll-free program's page the business name, use case, website and contact email it shows); the sign-ups themselves are kept with the opt-out and opt-in records. A sign-up waiting for its YES reply is also held on its own | A registration's page: life of the registration, plus 1 year, deleted with it. A toll-free program's page: life of the account. Turning a page off stops sign-ups but keeps its address and records. A sign-up waiting for its YES: 7 days (the request stays in the opt-in records) | Hosting the page and showing you its status |
| Suggestions read from your website when you ask us to fill in a registration, or when we fill in a toll-free verification form (business details and page addresses; never the pages themselves) | About 10 minutes; cleared within the hour | So that asking again does not read your site a second time |
| Texting plans made on our public plan page (the website address, the business details read from its public pages, and our suggestions; never the pages themselves, and not who asked) | About 10 minutes; cleared within the hour. Request counts per network address, kept to limit abuse, are deleted within about two days | So that asking again does not read the site a second time |
| Codes from our public try page (the code, salted and hashed, and your mobile number as a one-way hash, never the number itself) | Deleted when used, otherwise about 10 minutes; cleared within the hour. Counts per network address and per hashed number, kept to limit abuse, are deleted within about two days | Proving you hold the phone before we text it a sample |
| A phone number verified on our public try page, waiting for the account you create next | Read once and deleted when your account is created, otherwise deleted after about 30 minutes | Starting your account with your phone already verified |
| Toll-free verification forms and their history (what you submitted, what our team filed, and the carriers' answer) | Life of the account, plus 1 year | Carrier requirements; showing what the carriers reviewed |
| Each phone number's registration status and its history (status changes and the registration it is linked to), and the review items our team works from (registration submissions, live-access requests, requests for a toll-free number, a short code, or a local number in an area code you chose, reviews that are running long) | Life of the account. When the account closes, the status history is kept with the registration details (1 year after closing); review items are deleted with the account, except our own follow-up of the closing itself (deactivating registrations, releasing numbers), which is kept at most 1 year | Showing you where a number stands; reviewing and following up on your registration |
| Account data | Life of the account, then up to 90 days (deleted from 30 days after closing) | Running the account |
| Product update subscriptions (email address, sign-up source, confirmation and unsubscribe dates) | Until you unsubscribe or ask us to delete it; after you unsubscribe we keep the address only as a do-not-email record, unless you ask us to delete it | Sending the updates you asked for, and honoring unsubscribes |
| Billing records (credit purchases, the credit ledger, registration fees and their invoices, monthly statements) | 7 years | Tax and accounting law |
| Fraud and abuse signals | As long as needed to protect the network | Preventing repeat abuse |
Free tier
On the free tier (an account that has never added credits), the message log, the event log and conversations older than 30 days are deleted by a daily job, as the pricing page says. Nothing else changes: opt-out and opt-in records, registration details, billing records, daily blocked- message counts and the audit log are kept as the table says. Adding credits moves the account to the paid plan, which keeps its logs for the life of the account; logs already deleted are not restored.
When an account closes
The account owner can close the account in the console (Settings), or ask us to by emailing support@joinsimplesms.com. Closing stops all sending at once, revokes the account's API keys and releases its phone numbers.
We then wait 30 days, so that a mistaken closure can be reversed by contacting us; until then the account's people can still sign in to read and export its data. After that we delete the account's data: message content and metadata, contacts, logs, the audit log, settings and the sign-ins of the owner and everyone on the team. This is always done within 90 days of closing. We keep only:
- registration details and the copies of what was filed, for 1 year after closing;
- opt-out and consent records, for at least 4 years after the account's last message;
- billing records, for 7 years;
- fraud and abuse signals, for as long as needed to protect the network;
and anything the law or a valid legal hold requires.
Deleting sooner
Customers can ask us to delete specific messages, contacts, or all of their data at any time by emailing privacy@joinsimplesms.com. Message recipients can use the process in Privacy §9.
When we delete one phone number's data from an account on request, we remove the messages to and from it, the conversation with it, the events about those messages, the contact record, the opt-in evidence, its rows in broadcast recipient lists, its automation links, runs and events, and its verification attempts. We keep the number's opt-out record and the entries that prove it, so the opt-out keeps being honoured; counts that carry no number; and the account's audit log, where the deletion is recorded with the number's last four digits only.
You can also delete or redact one message yourself through the API
(DELETE /v1/messages/{id} and POST /v1/messages/{id}/redact), once it
has been delivered, failed or received. Both take effect at once.
- Deleting removes the message; the events about it and any webhook retries of them; the request and response bodies of the API request logs that carried it (the log rows stay, without them; any the search misses expire with the logs within 30 days); the saved reply to a repeated request that sent it, found through that request's log within 30 days of sending; the text of a scheduled send's queue record; and its place in the conversation preview (a conversation with no messages left is deleted).
- Redacting keeps the message and its metadata (numbers, status, timeline, segments, price and delivery result) and removes its text and media from the same places, including the start of the text that a carrier's delivery receipt quotes, now and on any later receipt.
Either way we keep: opt-out and consent records; usage, billing and delivery statistics, which carry no text; a broadcast's result for that recipient (its outcome and price); the account's audit log, which records the deletion or redaction with the other number's last four digits and never the text; text you saved yourself, such as a template, a schedule, a broadcast or an automation; and our own review records, kept as the table above says: messages the content screen refused (up to 320 characters) and the first message of each new kind of message we reviewed, with our decision. A message that is the proof of an opt-out or opt-in (the reply that recorded it, or the message an opt-in's proof names) is part of that consent record and is kept as long as the record is. While our team is reviewing the registration a message was sent under, or the account is suspended, its messages cannot be deleted or redacted until the review ends, so the review sees what was sent. Copies in backups are overwritten on their normal cycle.
When we delete one email address's data from an account on request, we remove the verifications whose codes went to it (and, for one that was first texted, its pointer by number) and the verification events that carry it. The audit log records the deletion with the address's domain only.