> ## Documentation Index
> Fetch the complete documentation index at: https://docs.politicalcomms.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Recent updates, improvements, and fixes to the Political Comms platform.

Updates roll out continuously. The most recent changes appear first.

<Update label="October 2, 2026">
  ## Added

  * You can now rename, switch, or remove the merge tag for any column from the **Fields** section on a list's page. Select **Edit fields**. This works for uploaded lists and segments. See [Merge tags from your columns](/onboarding/contacts#merge-tags-from-your-columns).
  * You can now send email from a domain that already has mailboxes or is already set up elsewhere, including your main domain. Several organizations can send from the same domain, and each verifies it with its own DNS record. See [Sending domains and DNS](/help/email/sending-domains-and-dns#using-a-domain-that-already-has-email).
  * Email import now skips addresses with a common domain typo, such as `gmial.com`, and reports them as "Likely typo in the domain" so you can fix them. It also recognizes many more disposable addresses. See [Lists and address screening](/help/email/lists-and-validation#what-import-removes-and-holds-back).
  * You can now download your email suppressions as a CSV from the suppressions page. See [Bounces, complaints, and suppressions](/help/email/bounces-complaints-and-suppressions#suppression-scopes).
  * Monthly invoices now show volume by day. Each service you send or look up with gets a day-by-day list with a total that matches its monthly line, and the invoice CSV has a row per service and day. See [Billing](/help/billing#can-i-download-invoices-and-receipts).

  ## Changed

  * Uploading a text contact list now maps every column for you. Pick who owns the list and which column holds the phone number, and every other column becomes a merge tag automatically. You can still choose which columns to map instead. Standard columns such as first name and zip get the standard tag; any other column gets a tag named after its header, like `{donor_tier}`. This applies to lists created from now on; existing lists are unchanged. See [Merge tags from your columns](/onboarding/contacts#merge-tags-from-your-columns).
  * Contact list API: importing a list without merge tags now gives every column other than the phone column a merge tag automatically. If you send merge tags, only the columns you name are mapped, as before. Reading a list through the API now returns its available merge tags, so you can see the tag each column was given. See the [API reference](/api-reference/introduction).
  * Paid list validation is retired, so there is nothing to run or pay for before a send. Every campaign email is now screened as it goes out, and an address that looks undeliverable is skipped, not counted as a bounce, and held out of sends for 90 days. Skipped addresses are still billed at the normal email rate, and the campaign report shows them as Screened as invalid. See [Lists and address screening](/help/email/lists-and-validation#address-screening-at-send-time).
  * Acquired lists are no longer blocked until validated; they still warm up at half the normal daily ceiling. Role addresses such as info@ are now always removed at import, and a campaign sends to every subscribed contact that is not suppressed, so the recipient policy choice is gone. List export is now a plain contact export.
  * Email API: list and contact objects no longer include validation fields, campaigns no longer include a recipient policy, and the list import takes no options. The import summary reports a `screened` count. See the [API reference](/api-reference/introduction).
  * A bounce record that already exists and already authorizes this platform is now reported as already in place instead of as a conflict.
  * An address is no longer blocked when a mailbox provider rejects a message because of reputation or policy. It still counts as a bounce on that campaign, but the address stays sendable.

  ## Fixed

  * `sent_at` on `message.delivered` webhooks is now always set. It could arrive empty when the carrier confirmed delivery before the send was recorded; it now falls back to the carrier-reported send time, or the delivery time. See [Webhook events](/api-reference/webhooks/events#message-delivered).
  * Removing a sending domain no longer touches the domain's own email. Your DNS and mailboxes stay as they were, and setup another organization on the same domain relies on is left alone.
  * Opens and clicks are now recorded against your contacts, so the inactive-contact policy no longer holds back or drops people who read your email. Automated opens from privacy proxies and security scanners do not count.
  * The DMARC record we generate for a new sending domain now includes a reporting address, so DMARC reports arrive and the DMARC page fills in. For a domain you set up earlier, add the reporting address shown in your DNS records table to your DMARC record. See [Sending domains and DNS](/help/email/sending-domains-and-dns#the-records).
  * An address that soft bounces on three sends in a row is now stopped for your organization and that sender. Before, the count never reached three.
  * Seed addresses in Email settings now receive every campaign, with the first batch. They are left out of the audience count and every statistic.
</Update>

<Update label="October 1, 2026">
  ## Added

  * Email campaigns on a new sending domain now show their warm-up schedule before you send. A campaign larger than the domain's daily ceiling has always gone out over several days; the builder now lists how many messages each sending day will send, and asks you to confirm. The campaign page shows what went out each day and when the next day starts, and resuming a paused campaign shows the schedule again, updated for what is left. See [Warm-up](/help/email/campaigns-and-deliverability#warm-up).
  * Warm-up progress now appears on the sending domain under **Admin > Domains**, since every sender on a domain shares one ramp.

  ## Changed

  * Later days of a multi-day email send now start at the same time of day as the first day, in the campaign's time zone. Before, each later day started just after midnight Pacific, which is 3 AM Eastern.
  * A paused email campaign offers **Stop and edit** in place of Cancel. It returns the campaign to ready so you can change it, send a new test, and schedule the remaining recipients. People already sent to are not sent to again.
  * An email campaign waiting on its test send moves to ready (or to awaiting approval) as soon as the test is accepted. You no longer need to submit it a second time.
  * The Senders list no longer shows warm-up, lifetime bounce rate, or lifetime complaint rate columns, and the sender form no longer has a shared or dedicated pool choice. The two rate columns always read zero, and dedicated sending is set once for the organization under Email settings. Bounce and complaint rates remain on each sender's health panel.
  * The pacing setting has been removed from the email campaign builder. It was saved but never changed how a campaign sent. Large sends on a new domain are spread by the warm-up schedule instead.
  * Quiet hours now follow the time zone that holds most of your recipients, and a nationwide list gets a wider window. Each project still has one sending window. If more than half of your recipients are in one time zone, messages send from 8 AM to 10 PM in that zone, as before. If no time zone has a majority, the window opens at 8 AM Eastern and closes at 10 PM Pacific. Contacts are not held for their own local time, so on a nationwide list a recipient on the West Coast can be texted as early as 5 AM their time and one on the East Coast as late as 1 AM their time. Replies in two-way conversations are still not held. A project still sending at the close pauses itself with `pause_reason` `quiet_hours` and needs a manual restart once the window opens.

  ## Fixed

  * The warm-up timeline on an email campaign report was always empty. It now lists each sending day with what was planned, sent, and rolled over.
  * New sending domains would have spent an extra day on the first warm-up step from November 1, when clocks change. The nightly step-up now runs after the sending day has ended in both summer and winter time.
  * Editing a stopped, part-sent email campaign to remove a list now also removes that list's unsent recipients from the send.
  * An email campaign set to require approval can now be approved from its campaign page. Before, it stayed in awaiting approval with no way to approve it in the app, and the builder reported it as sending.
  * The Gmail Verified Sender checklist on a sender now shows Google Postmaster Tools as verified once the sending domain is verified there. Before, that check stayed unmet no matter what.
</Update>

<Update label="September 30, 2026">
  ## Fixed

  * Auto-recharge no longer stops for the rest of the day after ten recharges. A large send on a small target balance could use up that limit in minutes, after which the balance ran down with no warning. Auto-recharge now keeps running; the first time it runs ten times in a day, your billing contacts receive one email so you can check that it matches your sending. See [Billing](/help/billing#what-is-auto-recharge-and-how-do-i-enable-it).

  ## Changed

  * AT\&T recipients are now sent right away, like every other carrier, and the carrier delivers them at your campaign's AT\&T rate, usually within about an hour of sending. Before, the platform held most AT\&T recipients back and released them at that rate. In the last 90 minutes of the sending window the platform still holds back AT\&T recipients that could not be delivered before the window closes; they go out when you start the project again in the next window. The Start dialog now says AT\&T recipients are "all sent right away, and AT\&T usually finishes delivering within about an hour", and the AT\&T time estimate in the project throughput API now covers the AT\&T messages your campaign already has waiting plus this project's recipients. See [Sending speed](/help/sending-speed).
  * A project sending at its AT\&T rate no longer shows a carrier limit note or a time estimate under its progress bar. That is normal sending and needs no action, so the dashboard now just shows progress. The estimate before you start, in the Start dialog, is unchanged.
  * Bring your own Stripe: the Connect card now says you can sign in to an existing Stripe account or create one at Stripe's sign-in step, and that an account created there is set up under the Political Comms platform. See [Bring Your Own Stripe](/help/bring-your-own-stripe).
  * The auto-recharge section on Payment Methods now explains that each recharge tops up to the target balance and never more, so a send larger than the target is funded by several charges, and recommends a target close to a typical send.
  * Recharges during a fast send are no longer spaced a full minute apart. The next recharge starts as soon as the previous one has landed in your balance, with a 15 second minimum, so a send larger than your target balance is funded in a fraction of the time. A card is still never charged twice for the same shortfall.
</Update>

<Update label="September 29, 2026">
  ## Added

  * Every 10DLC campaign now sends to AT\&T at that campaign's carrier rate, whatever the brand type. AT\&T counts each part of a text, so the estimate accounts for your message length and a one-part text reaches AT\&T recipients faster; recipients on other carriers are never slowed. A send at the AT\&T limit shows an estimated finish time, and the Start dialog shows when your AT\&T recipients will be reached and warns before the sending window closes. The schedule time zone now defaults to your recipients' time zone. See [Sending speed and carrier limits](/help/sending-speed). API: `GET /projects/{id}/throughput` now reports the AT\&T estimate for political brands too, in the same fields.
  * API: you can now download a contact list's results. `GET /contact-lists/{id}` links the original file and, once analysis finishes, the analyzed file with phone type, carrier, city and state, and a new webhook event tells you the moment a list is done. See [Event types](/api-reference/webhooks/events#contact-list-analyzed).
  * SDKs and the CLI add a contact list download (`@political-comms/sdk` 0.14.0, `political-comms` 0.13.0 on PyPI).
  * Message webhooks and conversation messages now include the contact's mobile carrier. `message.sent`, `message.delivered`, `message.failed` and `message.replied` carry `carrier`, and so does each message from `GET /conversations/{id}/messages`. See [Carrier values](/api-reference/webhooks/events#carrier-values).
  * Segment a list by carrier: the Segment Builder has a new **By Carrier** operation (AT\&T, Verizon, T-Mobile, Other carriers, Unknown), and an analyzed list has a **Split by carrier** card that creates one list per carrier with no second analysis charge.
  * My Organizations has a **Make default** button, so you can choose which organization you land in and leave the one that used to be your default.

  ## Changed

  * API: running analysis on a list is now billed per number, like the dashboard, and a retried request no longer charges twice. If your balance is too low nothing is queued, and a list with nothing left to analyze costs nothing.
  * API: you can now resume a paused project by scheduling it again.
  * A contact list that is still being analyzed can no longer be used on a project. Creating, scheduling, or resuming a project with one now shows a clear message asking you to wait until the analysis finishes.
  * Every card payment to your balance, manual or auto-recharge, now emails a receipt to your organization's billing email (or contact email). When your parent organization collects payments through its own Stripe account, the receipt comes from that account.
  * Adding someone who already has a Political Comms login now adds them right away. There is no invitation to accept: they get an email and see your organization the next time they sign in.
  * Deactivating a member turns off their access to your organization only. Their login and their other organizations are not affected.
  * Signing in lands you in an organization you can work in. A pending or inactive organization no longer blocks your others, and its screen lists your other organizations with a Switch button.
  * Accounts are no longer deactivated after 90 days without a login, and the warning email is gone. Sessions still expire after 30 days, so you sign in again.
  * A person's name, email, phone, password and two-factor reset can be changed by an organization's admin only when that admin manages every organization the person belongs to. Anyone can still reset their own password from the sign-in page.

  ## Fixed

  * The Segment Builder's Field Mappings now offer the custom tags you have already created, and each column starts on the tag it already uses, so a new segment keeps the same merge tags as the lists it came from. A segment built from another segment now shows its columns too.
  * Mapping columns on a list upload now offers custom tags you created on any of your lists, including lists that are not tied to a brand.
  * Buying a phone number that takes unusually long to confirm no longer leaves it stuck as "not available". You now see that the purchase could not be confirmed and that you were not charged, and the number is freed up again within a few minutes.
  * A project that fails to start now tells you right away, with a notification that it could not finish building its recipient list and a prompt to start it again.
  * A contact list read through the API now shows as processing from the moment its analysis is queued.
  * A project that paused at the daily T-Mobile limit now tells you to schedule it for the next day's sending hours instead of resuming at midnight Pacific, which falls in quiet hours. At the limit, recipients on other known carriers keep sending while T-Mobile and unknown-carrier recipients wait, so analyzing your list first means only T-Mobile recipients wait.
  * Daily limit counts now follow the day a message was sent, so a status report that arrives after midnight no longer closes the new day early.
  * Paused-project alerts now fire once per pause instead of repeating.
  * A sub-organization's project no longer pauses when its parent organization runs low while the parent's auto-recharge is already processing. Sending waits up to a minute for the recharge and then continues on its own. If the recharge fails, the project pauses and the parent is notified, as before.
  * Organization member counts now include members whose default organization is a different one.
</Update>

<Update label="September 28, 2026">
  ## Added

  * API: you can now check carrier sending limits before you send. A campaign's throughput shows its daily T-Mobile allowance, how much is used today and the AT\&T per-minute rates, and a project's throughput estimates whether it will pause at the limit and how long it will take. See [Carrier throughput limits](/api-reference/best-practices#carrier-throughput-limits).
  * API: a project now tells you why it is paused, whether the platform paused it, and whether it is running through the daily limit, so you can resume it instead of waiting for it to finish.

  ## Changed

  * Terms of Use and Client Agreement: interest on late payments is now capped at 1.5% per month, down from 18% per month. You will be asked to accept the updated agreements the next time you sign in.
  * API rate limit raised to **600 requests per minute per key**, up from 100. The limit is now the same for every scope; the separate write (60/min) and delete (30/min) tiers are gone. See [Rate Limits](/api-reference/rate-limits).
  * Bursts are now fine: the limit works like a bucket of 600 tokens that refills at 10 per second. After a burst you keep getting 10 requests per second instead of being locked out for the rest of the minute, so a sync that sends a few hundred calls at once no longer loses most of them to `429`s.

  ## Fixed

  * The API reference said the setting to run through the daily limit lasts for the life of the project. It holds until the next schedule or resume, so send it each time.
  * On a `429`, `Retry-After` and `X-RateLimit-Reset` now report when capacity actually frees (the moment the oldest request in the window ages out) instead of always reporting a full 60 seconds. Clients that honor the header retry in seconds rather than idling for a minute.
  * Admin > API > key usage: the Success Rate and Avg Response Time tiles showed 0 for every key. They now show real values, and a new Rate Limited tile counts the requests your key had rejected with `429`.
  * SDKs (`@political-comms/sdk` 0.12.1, `political-comms` 0.11.1 on PyPI): a `429` retry now waits for `Retry-After` first, then `X-RateLimit-Reset`, so a skewed local clock cannot stretch or shorten the wait.
</Update>

<Update label="September 26, 2026">
  ## Added

  * Data Exports: `message_events` now carries `updated_at`, and a message is exported again in the window that holds a later delivery status change, so your warehouse converges on the final status. Keep the row with the greatest `updated_at` per `message_id`.
  * A new Help Center page, [Data exports to your S3 bucket](/help/data-exports), documents setup, schedules, the file layout and every column of the four datasets.
  * Monthly invoices: Billing > Ledger lists your last 12 months, each downloadable as a branded PDF (usage by service, sub-organization usage, adjustments, refunds, payments) or a CSV of the same lines. Invoices are generated automatically on the first of each month. See [Billing](/help/billing#can-i-download-invoices-and-receipts).
  * Payment receipts: Billing > Payment Methods lists every payment added to your balance with a receipt PDF per payment.

  ## Fixed

  * Data Exports: each scheduled run now starts exactly where the previous run for the same destination and dataset ended, so a missed run no longer leaves a gap. A destination that fell behind catches up seven days per run.
  * Data Exports: a window with no rows no longer writes an empty file, and a failed run no longer leaves a partial file behind.
  * Data Exports: Parquet files are now SNAPPY compressed as documented; earlier files were written uncompressed. Existing readers need no change.
</Update>

<Update label="September 25, 2026">
  ## Added

  * Internal notes are now on the API: `GET /brands`, `GET /campaigns` and `GET /tracking-domains` each return a `notes` field (up to 100 characters, null when unset; tracking domains carry it on owned rows only). Notes are set in the dashboard and are never sent to the registrar or to recipients.
  * The bulk brand CSV template has an optional `notes` column; whatever you put there is stored on the imported brand and shown beside it wherever brands are listed or picked.
  * Tracking domains now take a short internal note, edited inline on the Domains page.
  * Test sends can now use values you supply for merge fields, from the test dialog or the API, instead of a contact from your list. Use one set for every number or a set per number. Leave a field blank to see its fallback, and survey follow-up questions use the same values.
</Update>

<Update label="September 24, 2026">
  ## Changed

  * Self-service email sending is now $2.50 per 1,000 recipients, and the optional dedicated IP pool add-on is $35.00 per month. Full-service email, list validation, and AI drafts are unchanged. See [pricing](/help/billing).
</Update>

<Update label="September 23, 2026">
  ## Fixed

  * Segments now show the real mobile, landline and other counts carried over from the lists they were built from, and the Analyze Numbers page works for them. Analyzing a segment only charges for numbers that have never been looked up; existing segments have been corrected.
  * Segments built from a project's results (failed, delivered, clicked, replied, no reply) now preview and build in seconds on large campaigns. They previously reported "too large to preview" and the build failed on ordinary campaign sizes.
  * Short code and toll-free projects now show the number's name and the number under the project name, on the dashboard, the schedule, the approvals page and the project report. They previously showed an empty brand and campaign line, since those projects have neither.
</Update>

<Update label="September 22, 2026">
  ## Added

  * Import brands from a CSV. On the 10DLC page, **Import CSV** takes a spreadsheet of up to 100 brands, lets you match its columns and choose the entity type and use case for the batch, checks every row and shows the total registration cost before anything is created, then registers all of them in the background. Each brand is billed at your normal registration price.

  ## Fixed

  * Projects now finish on their own the moment the last message has gone out. A project could sit at 99.99% (for example 52,174 of 52,175) even though every message had been delivered or failed, because the finish line was measured by a running tally that could miss a count, and the recount that should have caught it never ran while replies kept arriving. Completion is now decided from the actual send records, and the final numbers on the project page are recomputed from those records shortly after the project completes, so they always add up.

  * Newly registered brands no longer show "Registration Pending" longer than they should. Their status now updates on its own within a couple of minutes even when the registry is slow to report back, and the 10DLC page refreshes statuses while brands are settling, so there is no need to sync manually.

  * Very large projects now send at full speed from start to finish. A project with two million recipients previously slowed to a crawl after the first half hour and did not finish in its sending window. Sending now runs several parallel lanes for large audiences, the sending fleet no longer shrinks in the middle of an active send, and the platform's capacity is reserved rather than opportunistic, so a busy evening cannot leave a send waiting for machines.

  * STOP replies during a large send no longer slow down delivery reporting. Delivery and reply updates could lag by more than an hour after a big send; they now keep pace. Opt-out list counts on the Contact Lists page can trail the latest opt-outs by a few seconds.
</Update>

<Update label="September 19, 2026">
  ## Changed

  * Email is generally available. The early access notice is gone from the API reference: email write endpoints require the email entitlement on your organization and return `403 ENTITLEMENT_REQUIRED` without it, and reads are open.
  * Toll-free messaging is now priced the same as 10DLC for new organizations. Short code messaging has its own lower per-message rate. Inbound SMS is included on every channel.
  * The dedicated IP pool add-on for email is now \$35.00 per month.

  ## Added

  * Full-service email: our team sets up your sending domain and builds and sends every campaign, at $0.01 per email plus a $1,000 one-time setup, with no monthly fee.
</Update>

<Update label="September 17, 2026">
  ## Changed

  * Carrier sending limits now slow down only the recipients they apply to. When a carrier's per-minute or daily limit is in use, recipients on every other carrier keep sending at full speed, and the send page tells you which limit is in effect and that it clears on its own. Projects on brands with a per-minute limit now front-load a large block of that carrier's messages and let it drain at the allowed rate instead of pausing every minute. The launch summary quotes the estimated number of recipients on the daily-limited carrier so the pause choice is an informed one.
  * Conversation threads read through the API now report a failed message's error code in the same short form the message.failed webhook and CSV exports already use, and platform-side outcomes that are not delivery results are left blank. Delivery error descriptions have been reworded in plain platform terms. See [Delivery error codes](/api-reference/webhooks/error-codes).
  * A custom domain that is waiting on a DNS record now reminds you once a day, not every few minutes, and the Domains page shows how long the platform will keep waiting. Every step that needs a record from you has the same seven-day window; after it the setup stops and the setup fee is refunded, and a retry starts again from that step.
  * If a certificate request expires before its validation record is published, the platform renews the request on its own. The record you were given does not change, and nothing is refunded or charged again.

  ## Removed

  * The organization-wide **Donation page URL** email setting and its `{donate_url}` tag. Paste the donation link into the button itself; a button saved without a link is now flagged before sending.

  ## Fixed

  * A Campaign Verify token generated in one organization and applied to a brand in another is now treated as an import for that organization: it shows as imported with its expiry, keeps its own copy of the verification, and no longer offers token generation. The organization that generated the token keeps its original verification. Imported verifications are now labelled in the Campaign Verify list.
  * When a DNS record is entered with the domain repeated at the end (which some registrars do automatically when you paste a full hostname into the Name field), the Domains page now says exactly where the record was found and what to type instead, rather than reporting it as missing.
  * The Domains page now names the DNS provider for app and link-tracking domains, the way it already did for email domains.
  * Adding an email sending domain that already has a mail (MX) record no longer stops setup. Sending is unaffected by that record, so the check ignores it.
  * When you add a domain for email, the sending domain now defaults to the domain you typed (so senders are [hello@yourdomain.com](mailto:hello@yourdomain.com)), instead of a `mail.` subdomain. You can still change it to a subdomain before continuing.
</Update>

<Update label="September 16, 2026">
  ## Added

  * If you manage sub-organizations, an owner or admin can now set a sub-organization's credit line and create, edit, cancel, or forgive its spend commitment from **Admin > Organizations**. See [Billing](/help/billing) for how commitments work.

  ## Fixed

  * Pausing a project and resuming it with a scheduled time now keeps every message that was already in progress on hold until the scheduled time, and sends it then. Previously those messages could be dropped and had to be recovered by hand.
</Update>

<Update label="September 15, 2026">
  ## Fixed

  * Message sending was interrupted between 8:54 AM and 10:47 AM ET after a change on the carrier gateway side rejected every outbound request. Projects that ran during the window were refunded. The platform now stops itself within seconds if the gateway starts rejecting every request, instead of letting a project run to completion.
  * Removing the image from an MMS project now saves. Previously the save succeeded but the image reappeared on refresh.
  * **Short Code** is back in the Text menu for every organization.
</Update>

<Update label="September 14, 2026">
  ## Added

  * Some features now require enablement by Political Comms. An API call to a feature your organization is not yet entitled to returns `403 ENTITLEMENT_REQUIRED` instead of succeeding; contact support to request enablement. See [Error Handling](/api-reference/errors) for the full list of entitlement keys.
  * Sending can now be paused for an organization or platform-wide by Political Comms. A create or send call made while paused returns `409 SENDING_PAUSED`. See [Error Handling](/api-reference/errors).

  ## Fixed

  * The **Data Export (CSV)** on a project report now lists every recipient in the project's audience, including anyone who was never sent a message because the project was paused, stopped, or is still sending. Those rows show **Not sent** in the Message 1 Disposition column, so the row count matches Total Recipients minus Ineligible.
</Update>

<Update label="September 12, 2026">
  ## Fixed

  * The **Messages** column on the billing ledger and in the ledger CSV export is now exact for every row. It previously showed a dash whenever a day combined more than one send batch for the same project.
</Update>

<Update label="September 11, 2026">
  ## Added

  * 10DLC brands can now carry a DBA (doing business as) name. Enter it as the optional **DBA / Display Name** on the brand form and it is registered as the brand's display name, with your legal name kept separately. Leave it blank to register under the legal name as before. **Use Org Profile** fills it from the organization profile's DBA.

  ## Fixed

  * Survey test sends now fill merge fields on every question, not only the first. The whole test reads as one recipient from the project's contact list; with no list, tags resolve the way they would for a recipient with an empty field.
  * A test message never borrows contact data from another account.
  * Survey results, the responses list, and the survey CSV export no longer include answers given on test conversations.
  * Random Sample operations in the segment builder estimate and build correctly again. Since August 15 they previewed as 0 contacts, and a segment built from one failed.
</Update>

<Update label="September 9, 2026">
  ## Changed

  * An EIN is no longer required to finish account setup. Leave it blank if your organization does not have one; brand and toll-free registrations ask for it when a carrier needs it.
  * The business profile is now your organization profile. The setup step opens already filled in with the name, address, and contact you gave at registration, so most organizations only choose an entity type and industry vertical. Business details live on **Admin > Organization > General**; the separate Business profile tab is gone.

  ## Fixed

  * Sub-organizations whose billing is managed by their agency no longer see an auto-recharge step or a prompt to add a card. The funding step names the agency that adds balance for them, and the agency's owners and admins get the day-7 and day-12 setup reminders for those sub-organizations.
</Update>

<Update label="September 8, 2026">
  ## Added

  **Gmail Verified Sender Program**

  Committees with a verified Campaign Verify identity can now submit a sender address to Google's Gmail Verified Sender Program straight from the sender identity page, with pre-submission checks, the exact address to enter, and status confirmed from Google Postmaster Tools once submitted. Verified status shows on the senders list, the campaign sender picker, **Admin > Domains**, and your Campaign Verify page. See [Gmail Verified Sender Program](/help/email/gmail-verified-sender-program).

  Over the API, a sender now reports its Gmail verified sender status and the dates it was submitted and verified.

  ## Fixed

  * The business profile form now marks the exact fields that still need attention instead of a bare "Validation failed", and an EIN typed as "N/A" or "Applied for" is called out as not an EIN rather than reported as blank.
  * Over the API, `VALIDATION_ERROR` responses now name each rejected field in `details[].field`. See [Errors](/api-reference/errors).
  * Sub-organizations that have not uploaded their own logo show their agency's logo and favicon again. Some showed the agency's name as text instead.
</Update>

<Update label="September 7, 2026">
  ## Added

  * Your integration can now hold a two-way conversation: reply inside a thread, read it, and list conversations with inbound replies. Guide: [Two-Way Conversations](/api-reference/two-way-conversations).

  ## Fixed

  * The DMARC summary, sending sources, and policy recommendation pages load again; they had returned an error since September 3.
  * Chat replies to an opted-out contact or a deleted project are refused before any charge, and a billed-but-unsent reply is refunded.
  * Releasing a phone number pauses any project still sending from it.
  * A project with link tracking on can no longer be saved without a tracking domain, which used to send unattributed links.
  * RCS can no longer be picked for a project. It was accepted at save, then failed at send.
  * CSV exports no longer split a record across two rows when a field contains a line break.
  * A batch send retries briefly-refused messages rather than billing them and failing them.
  * Two-factor changes and trusted devices are recorded in your audit log again.
</Update>

<Update label="September 6, 2026">
  ## Added

  **Guided account setup** New organizations start on a three-step checklist: business profile, funding, and auto-recharge. You have 14 days to finish the first two, after which creating anything new is blocked until you do, while everything already set up keeps running.

  **Business profile** Your legal details now live on **Admin > Organization > Business profile** and prefill your 10DLC and toll-free verification forms.

  **Organization signup links** Create a revocable signup link from **Admin > Organizations**, and anyone who registers through it becomes an active client organization one tier below yours.

  **Multi-org accounts** One login can now belong to more than one organization, each with its own role and brand access, switchable from your account menu.

  **Invite existing accounts** The Users page can invite someone who already has an account, and **Transfer ownership** moves the Owner role in one step.

  ## Changed

  * A paused project's message can be edited after some messages have gone out; recipients still on hold get the update when it restarts.

  ## Fixed

  **Pausing stops sending within seconds** Pausing holds every message that has not gone out, where previously ones already lined up kept sending.

  ## Removed

  * Archiving is gone everywhere. Completed is now the final state for a project, and its report stays available.
</Update>

<Update label="September 5, 2026">
  ## Added

  **Bring your own Stripe**

  * Reseller organizations can connect their own Stripe account from **Billing > Payment Methods**, so sub-organization recharges carry your descriptor, payout schedule, and disputes. See [Bring Your Own Stripe](/help/bring-your-own-stripe).
  * Charges route to the direct parent organization's connected account, so each tier needs the tier above it connected.
  * If a reseller's Stripe account is disconnected, affected sub-organizations are refused new cards and recharges right away and billing roles are notified.

  ## Changed

  **Email templates: a document editor, not a canvas**

  The email template designer is now a document editor: write the email like a document, press `/` for a menu of blocks and `@` to insert a merge tag as an editable pill. A Design rail sets colors and fonts, and a Checks panel shows compliance and message size against Gmail's clipping limit next to a desktop and mobile preview. Pasting from Google Docs or Notion keeps your formatting, and **Draft with Lincoln** now returns editable blocks.

  Templates come in two kinds: built in the editor, or imported as HTML. An editor template can be converted to HTML, which is one-way, and until it is converted it has to be edited in the dashboard rather than over the API.

  ## Removed

  * **The Payouts page** and the manual payout request flow. Payouts are now handled entirely in the reseller's own Stripe dashboard.
  * **The Agency Mode setting.** The features it controlled are unchanged, just no longer behind a single toggle.
</Update>

<Update label="September 4, 2026">
  ## Changed

  **A smaller, clearer email API** The public email API is about half the size, with list curation, validation, exports, test sends, and Lincoln drafting moved to the dashboard, and the reference regrouped as Text, Email, Assets, Billing & Usage, and Admin.

  **The file you upload is the list** The CSV you upload becomes the list, named after the file, instead of asking you to create a list first.

  **One kind of list** Any email list can now be chosen as a campaign's suppression list, and lists are scoped organization-wide or to one sending domain.

  **Unsubscribe files** Upload them under **Assets > File Uploads > Email unsubscribes** and they apply automatically to every campaign in their scope.

  **Faster, more accurate validation** A 100,000-address list finishes in tens of minutes instead of hours, and catch-all domains are actually tested rather than assumed deliverable.

  **A simpler sender page** Setup, health, deliverability, the Gmail program, and settings now run in one column, so each requirement appears once.

  ## Fixed

  * Warm-up progress counts down sending days rather than calendar days, because a day with no sending does not advance the ramp.
</Update>

<Update label="September 3, 2026">
  ## Added

  **Branded link domains** Every campaign link, the open pixel, the unsubscribe page, and view-in-browser now use the tracking domain you pick under **Link domain**, so link reputation stays with your own domain.

  **Download a list's validation results** **Export results** downloads a CSV of your uploaded file plus every verdict, filterable to just the undeliverable addresses.

  ## Fixed

  **Text Dashboard loads in under a second** It could take 5 to 30 seconds because replies were counted across every conversation on the page.

  **You stay signed in** Refreshing from two tabs at once could sign you out. A session now lasts 30 days from sign-in.

  **Domains: record status and Verify now** Active domains showed their DNS records as "Pending" even though they were live.

  **Email domain pre-flight** The Add domain check was failing silently, so it never warned you about a conflicting SPF record.
</Update>

<Update label="September 2, 2026">
  ## Added

  **Email is in early access** Political Comms now sends email alongside text: sending domains you verify with your own DNS records, From addresses with the CAN-SPAM address and paid-for-by disclaimer in every footer, lists with recorded consent, suppressions, and campaigns with scheduling and warm-up ramping. There is no inbox surface and no A/B testing.

  **Email pricing** \$1.50 per 1,000 recipients, plus optional list validation and a dedicated sending add-on. Sending domains and hosted unsubscribe pages are free.

  **The email API is published** Domains, senders, lists, suppressions, campaigns, and five new outbound webhook events, all refused until general availability so you can build against a stable contract.

  **Test sends are required** Every email campaign needs a successful test send before it can be submitted, and editing the content or recipients invalidates it. Approval is now a per-campaign toggle.

  **Lincoln drafts email templates** **Draft with Lincoln** turns a description, your images, and your brand colors into a finished subject, preheader, and design for **\$3.00 per draft**.

  ## Changed

  **One page for every upload** Uploading is now one flow at **Assets > File Uploads**, where you choose the kind first.

  **API keys and webhooks live on one Admin page** They are now a single **API** page with three tabs, each shown only to roles with that permission.
</Update>

<Update label="August 31, 2026">
  ## Added

  **Send each recipient to their own destination URL**

  A link tracking destination can now be a whole-URL placeholder instead of one fixed link, so each recipient's tracking link goes to the URL stored in their own contact field. You must also set a fallback URL, which catches recipients whose field is empty or invalid.

  Each recipient's destination is locked in when their link is created, so the click export always shows the real URL that person was sent to.
</Update>

<Update label="August 28, 2026">
  ## Changed

  **Generated files expire after 90 days** Billing exports, report PDFs and data exports are now actually removed after the 90 days their expiry date has always shown.

  ## Fixed

  **WinRed lists with "SMS opt-in required" now add donors** They were adding none at all, because the consent check looked for field names WinRed never sends.

  **Campaign Verify state and local submissions accepted again** Campaign Verify began requiring a second jurisdiction field, so every such submission was rejected.

  **Short code projects can be created and edited** A project assigned a short code was rejected at save because the number was checked against the 10DLC pool.

  **Exports no longer email the requester** The only email a report sends is the one you address yourself from its Email dialog.

  **Dialogs and headers fit a phone screen** Dialogs scroll inside themselves and header actions wrap instead of pushing off-screen.
</Update>

<Update label="August 27, 2026">
  ## Added

  **Ledger rebuilt** The Ledger page under Billing & Usage now has one filter bar covering dates, entry types, services, sub-organization, and a search across projects, lists, numbers and brands, and every filter, sort, and export responds in milliseconds across a full year.

  **Sub-organization spend** Organizations with sub-organizations see what each direct sub-org was charged, what those sends cost you, and the margin between them.

  **Responses (CSV)** A project report can now download every inbound reply, one row each, with the message it answered and, for surveys, the matched answer.

  ## Changed

  * Billing exports over long date ranges no longer time out on high-volume accounts.
  * Notification emails no longer show "January 1, 1970" or "\$NaN" in place of a missing value.

  ## Fixed

  * For part of August 27, a reply to a broadcast opened a new conversation instead of continuing its thread. Replies were still delivered and honored for opt-outs, and affected conversations are being consolidated.
  * Opening the Ledger no longer errors for organizations whose entries did not fit on one page.
  * Downloading a previous ledger export now returns the file that was actually generated.
  * Ledger days are counted in UTC, so the newest charges no longer go missing if you are west of UTC.
</Update>

<Update label="August 25, 2026">
  ## Fixed

  **Sub-organizations blocked by a parent's balance are now paused and told**

  Charges roll up, so a parent that runs out of funds blocks its sub-organizations from sending even when their own balance is healthy. That block used to be invisible: the project kept retrying, and the parent, the only one who could fix it, had no idea.

  Now those projects are paused with the reason "insufficient funds (parent organization)", the parent's billing admins are notified, and both organizations see a banner until funds are added. Over the API, an insufficient balance error tells you whether the shortfall is yours or a parent's.
</Update>

<Update label="August 24, 2026">
  ## Added

  **Choose how a scheduled project handles the daily carrier limit**

  T-Mobile limits how many of its subscribers a vetted brand can reach each day, and a project simply paused when it hit that limit, so a large send could take several days and several manual restarts.

  You can now choose, when you schedule or resume a project, to run straight through to completion in one pass instead. Messages to T-Mobile recipients beyond the daily limit may fail, and failed attempts are still billed. Leave the setting off and the project pauses at the limit exactly as before.
</Update>

<Update label="August 22, 2026">
  ## Added

  **Download all your project exports as a single ZIP** The Downloads menu on a project report now bundles every export into one archive named after the project, and fails with a specific reason rather than handing you an incomplete bundle.

  **Survey report emails now include the survey responses** Emailed survey reports arrived without the responses themselves; they now carry all three files.

  ## Fixed

  * Report PDFs no longer fail to generate on projects with a lot of link-tracking data.
  * If the report page cannot load its data in time, generation stops and tells you, instead of handing you a PDF that reads "Failed to load report data".
  * Report and export failures now name the actual cause instead of a generic "Server error".
</Update>

<Update label="August 20, 2026">
  ## Changed

  * A unique click counts a distinct **device and network**, not a distinct person. See [Webhook events](/api-reference/webhooks/events) for the full explanation.

  ## Fixed

  **Link tracking: per-link click details, a corrected unique-click count, and Android taps no longer filtered**

  The **Top Performing Links** table showed 0 unique clicks and no click times for every link, and dropped links whose contact record was missing. The data was recorded correctly the whole time, so nothing needs to be re-run.

  The headline **Unique Clicks** figure was overstated because it added up per-day counts, double-counting a supporter who clicked on two different days. It is now a single count of distinct devices across the whole window, with **repeat clicks** alongside. Expect existing campaigns to drop slightly; the new number is accurate.

  Taps from **Google Messages**, the default texting app on most Android phones, were being filtered out as automated traffic and now count.
</Update>

<Update label="August 8, 2026">
  ## Added

  * Project stats now report test-send activity separately from real traffic, so test clicks no longer inflate your real totals. The split is forward-only; test clicks recorded before this change stay in the production counters.

  ## Changed

  * Scheduling a project no longer requires a start time at least 60 seconds out. Any valid time is accepted, and the project starts sending as soon as audience compilation finishes.
</Update>

<Update label="August 7, 2026">
  ## Added

  * A new [Delivery error codes](/api-reference/webhooks/error-codes) page documents every failure reason a failed-message webhook can report, plus which failures are permanent, temporary, or sender-side.

  ## Fixed

  * Failed-message webhooks now always include a readable failure message, and send-time and carrier-reported failures use the same short codes documented in the [error codes reference](/api-reference/webhooks/error-codes). If you matched on the old long codes, match on the documented short ones instead.
</Update>

<Update label="August 4, 2026">
  ## Added

  * All four message webhook events now say whether the message was a test, so you can separate test traffic from real sends. Identifier meanings are documented in a new [Identifiers](/api-reference/webhooks/events#identifiers) section.

  ## Fixed

  * Every unique click now delivers a click event. Previously only the first came through and further ones were silently suppressed for 7 days.
  * The dashboard's **Send test webhook** button now produces a payload that matches real traffic exactly.
  * Message webhooks deliver phone numbers and timestamps exactly as documented in [Event Types](/api-reference/webhooks/events). If you worked around the old shapes, switch to the documented ones.
  * Webhook signature validation now works; verification against the raw request body always failed before, so if you skipped it, re-enable it. See the [signature validation guide](/api-reference/webhooks/signature-validation).
  * Failed webhook deliveries now make all four documented retry attempts instead of stopping after three.
</Update>

<Update label="July 31, 2026">
  ## Added

  **Link parameter placement** A tracking link's destination URL can now carry the selected link parameter anywhere in the address instead of always appending it, which supports providers that only echo back one specific field. URLs without a placeholder behave exactly as before.

  **Opt-out footer control on the API** You can now turn the automatic STOP footer on or off per broadcast project over the API, matching the toggle in the composer. It defaults to on, and surveys never carry it.

  ## Fixed

  * Editing a project no longer silently clears a saved link parameter, and clearing one back to "None" now sticks.
</Update>

<Update label="July 30, 2026">
  ## Added

  **Official SDKs, CLI, and MCP Server**

  Four official packages are now published: [`@political-comms/sdk`](https://www.npmjs.com/package/@political-comms/sdk) (TypeScript), [`political-comms`](https://pypi.org/project/political-comms/) (Python 3.10+), [`@political-comms/cli`](https://www.npmjs.com/package/@political-comms/cli), and [`@political-comms/mcp`](https://www.npmjs.com/package/@political-comms/mcp), which lets Claude and other MCP clients manage projects, contact lists, media, analytics, and billing. Source: [Political-Comms/political-comms-sdk](https://github.com/Political-Comms/political-comms-sdk).

  **Versioning and deprecation policy** The API's guarantees, including the 90-day sunset window, are now documented on a dedicated [Versioning & Deprecation](/api-reference/versioning) page.

  ## Fixed

  * Several developer-facing documents misstated the API rate limit as 100 requests per hour. The real limits, per key per minute, are 100 reads, 60 writes, and 30 deletes, which is what the API has always enforced.
</Update>

<Update label="July 29, 2026">
  ## Added

  **Delete contact lists and media files over the API** Deletion is blocked while a scheduled, sending, or active project depends on the item, and the error names the blocking projects.

  **Copy and archive projects** You can now duplicate a project over the API: message content, media, numbers, link tracking, and survey questions carry over, while contact lists, the schedule, and stats do not.

  **Create projects without a contact list** Contact lists are now optional at creation. Leave them out and the project is created as a draft; attach lists later and it moves on automatically.

  ## Improved

  * Dozens of situations that showed "An unexpected error occurred" now tell you what is wrong and how to fix it, including two-factor setup, CSV imports, exports, and user management.
  * Submitting a toll-free verification now shows the real rejection reason, and stuck drafts can be deleted.
</Update>

<Update label="July 27, 2026">
  ## Added

  **File URLs on the media API**

  Listing or reading a media file over the API now returns a direct URL for the file, alongside its size, content type, and status. Previously you only got identifiers and names, with no way to fetch the file itself.

  The URL is stable for the life of the file, which makes it usable as a verification baseline. Two things to know: it is empty until the file is ready, and it should be treated as opaque rather than rebuilt from the file name, because the stored name can differ.
</Update>

<Update label="July 26, 2026">
  ## Improved

  **Cost estimates that match what actually bills**

  The composer's cost estimate now reflects real message lengths per recipient, with personalization filled in from your actual contact data, and shows a message-parts range with the matching cost range.
</Update>

<Update label="July 24, 2026">
  ## Added

  **Dynamic Lists tab and Anedot integration** Contact Management has a new Dynamic Lists tab for lists that keep themselves up to date, and Anedot joins WinRed as a donation-platform integration: paste your secret and qualifying donors flow into a list automatically.

  **Recent clickers and recent repliers lists** Two new self-updating lists built from contacts who clicked a tracking link or replied, over a 30, 60, or 90-day window or all time, with no analysis cost.

  ## Fixed

  **API reference corrected against live behavior** A full audit of the [OpenAPI specification](https://politicalcomms.com/openapi.json) found many documented shapes had drifted; every documented request and response now matches what the API actually returns. If your integration was built from live responses, nothing changes for you. The corrections include [Error Handling](/api-reference/errors), which now documents the three real error shapes.
</Update>

<Update label="July 23, 2026">
  ## Added

  **Automatic pause on carrier blocking**

  If carriers start blocking a send as suspected spam, the project now pauses itself instead of burning the rest of your budget on messages that will not deliver. Managers are notified with the reason, and resuming starts the check from a fresh window.
</Update>

<Update label="July 22, 2026">
  ## Added

  **Lists that analyze new contacts automatically** Dynamic lists can now analyze new contacts as they arrive, an opt-in billed at the normal analysis rate. Scheduled projects also pick up contacts their lists gain after scheduling.

  ## Improved

  **Shorter tracking links** Tracking links now drop the "https\://" on domains phones still make tappable, saving 8 characters, often the difference that keeps a message inside one billed segment.
</Update>

<Update label="July 20, 2026">
  ## Added

  **Survey report: response rate, nudge history, and unread badges**

  The survey report now shows an initial response rate and a per-question history of nudges sent. "Poke" is now called "Nudge" everywhere, and the Chat button on the projects dashboard shows a red badge when a project has unread conversations.

  ## Fixed

  **Incoming replies recovered**

  A bug introduced in early June silently dropped incoming replies from contacts who had not messaged you before. It is fixed, and the dropped replies were recovered and delivered to their conversations.
</Update>

<Update label="July 16, 2026">
  ## Added

  **Survey projects on the API** The [Projects API](/api-reference/introduction) can now create and run surveys, not just broadcasts: questions with branching, per-question media, merge tags and tracking links, and the AI response analysis toggle. A new results call returns the same topline results as the dashboard.

  **Idempotency keys on API writes** Every API write now honors an optional `Idempotency-Key` header, so retrying within 24 hours returns the original response instead of running twice. See [Error Handling](/api-reference/errors) for the retry rules.

  ## Changed

  **New Jersey voter data paused** Voter-data purchases for New Jersey are paused while the industry works through the state's new data-broker law (A.5328). Every other state is unaffected, and lists you already own are untouched.
</Update>

<Update label="July 15, 2026">
  ## Added

  **WinRed report feeds for vendor accounts**

  WinRed vendor-level accounts can now feed contact lists through WinRed's scheduled report exports, with no per-committee setup required. Choose one combined list or a list per committee.

  ## Fixed

  **Merge tags and messy CSVs**

  Contact files with stray line breaks inside a field could push a line break into your message right before a personalized name. Values are now cleaned at import and again when the message renders.
</Update>

<Update label="July 14, 2026">
  ## Fixed

  **Personalization on WinRed lists**

  WinRed lists had no personalization fields available in the composer. Donor fields such as first name, last name, and city now work on all WinRed lists, including ones created before this fix.
</Update>

<Update label="July 9, 2026">
  ## Improved

  **Streamlined campaign registration**

  The 10DLC campaign registration form now starts from your organization type: pick it, and the form fills in a sensible default use case, sample messages, and the correct compliant opt-in website automatically.
</Update>

<Update label="July 8, 2026">
  ## Changed

  **Updated legal agreements**

  The platform agreements have been revised. Everyone is asked to re-accept once at their next sign-in; your account and sends are unaffected in the meantime.
</Update>

<Update label="July 7, 2026">
  ## Added

  **Custom roles and permissions** Organizations can now define their own team roles with exactly the permissions they choose, on a new Roles & Permissions page. Navigation and page access follow each member's permissions automatically.

  **Broadcast and survey filter** The projects dashboard can now filter by project type.

  ## Improved

  **Survey question numbering and reordering** Question numbers in reports and exports now match what recipients actually see, and reordering uses up and down buttons instead of drag-and-drop, which fought your text selection.
</Update>

<Update label="July 6, 2026">
  ## Added

  **Sign in with a passkey**

  You can now sign in with a passkey, using Face ID, a fingerprint, or a hardware security key, as a phishing-resistant alternative to a password plus an authenticator code. Your existing password and two-factor setup keep working.
</Update>

<Update label="July 3, 2026">
  ## Added

  **Template library**

  * Save broadcast messages, survey questions, or whole surveys as reusable templates shared across your organization, and pull them into a new project from the builder.

  **Survey nudges**

  * Re-engage people who stalled mid-survey by re-sending the question they stopped on, with the eligible count and cost shown before you send.

  ## Changed

  * Project creation is rebuilt as two columns: settings on the left, a live phone preview and running cost estimate on the right, plus a checklist of what is still missing before the project can send.
  * Survey reports now show per-question response totals and drop-off percentages, so you can see exactly where people quit.
</Update>

<Update label="July 2, 2026">
  ## Added

  **AI survey analysis**

  * Surveys can now read free-form replies, so an answer like "Yeah, of course, absolutely" counts toward the option it expresses and follows that option's branch instead of landing in "Other". Turn it on per survey at \$0.05 per analyzed reply; exact matches stay free.

  **Linc can answer account questions**

  * The Linc support assistant can now look up your own account data, including delivery totals, contact lists, registration status, and billing history, without ever seeing individual contacts, message bodies, or free-text answers.

  ## Fixed

  * Large sends no longer slow the rest of the platform down, the overnight stalls some accounts saw are gone, and a duplicated inbound message can no longer be billed twice.
</Update>

<Update label="July 1, 2026">
  ## Added

  **WinRed integration**

  * Pipe WinRed donors and leads straight into a contact list: create a WinRed list under Contact Management, paste the generated URL and secret into WinRed, and every qualifying donation or lead lands in the list with donor details usable as merge tags.
  * Each WinRed list has its own opt-in requirement, automatic removal on refunds and disputes, and a rolling retention window based on the donor's last WinRed activity.
</Update>

<Update label="June 30, 2026">
  ## Added

  * Your organization can now be granted a credit limit, so sending continues past a \$0 balance down to the agreed line, with your remaining spendable funds shown in the header balance tooltip and on the Payment Methods page. Setting a credit line turns auto-recharge off; contact your account representative to set one up.
</Update>

<Update label="June 29, 2026">
  ## Added

  * You now get an email whenever a 10DLC campaign is rejected at any stage, including early rejections that previously notified nobody.

  ## Changed

  * A design pass across the whole app: softer corners, layered shadows, clearer table headers, and subtle motion that respects your reduced-motion setting.
  * When a 10DLC brand fails registration, the brand page now explains why in plain language and lets you edit and resubmit right there, free of charge.

  ## Fixed

  * A custom domain is marked active only once your final DNS record resolves, and shows the exact record to add until then.
  * The composer's character and segment counter now matches what carriers send and what you are billed.
  * Billing export and ledger line items now carry their real signs instead of showing everything as positive.
</Update>

<Update label="June 17, 2026">
  ## Added

  **Organization-wide segments**

  * The segment builder now offers "All brands" and "All projects" scopes, so you can build an audience like everyone who clicked a link anywhere in your organization.

  **Default merge-tag values**

  * Set a default for each merge tag once in Organization Settings, used whenever a contact is missing that field.

  **Quiet hours**

  * Messages no longer send between 10 PM and 8 AM in each recipient's local time, and a project still sending at 10 PM pauses itself.

  **Campaign Verify expiration tracking**

  * The list now shows a Valid Until date for each authorization and warns you by email before it lapses.

  **Campaign goals for Linc replies**

  * Projects gain an optional goal and extra context, and Linc steers drafted replies toward it.

  ## Fixed

  * Brands no longer sit on "Vetting Pending" after vetting finishes, and re-testing a project sends from its current numbers.
</Update>

<Update label="June 12, 2026">
  ## Added

  * A new "By Area Code" segment operation lists the area codes present in a contact list, grouped by state with counts, so you can cut a list geographically.
  * Search on the Media Files page now covers your entire library, and the media picker has its own search box.
  * Accounts approaching the 90-day inactivity suspension get a warning email 7 days ahead.

  ## Fixed

  * Survey follow-up questions now reach everyone who answered the first question, and stalled conversations were sent their pending question.
  * Survey questions bill by their own SMS or MMS setting, and cost estimates model the real response funnel.
  * The failed-attempt lockout now shows a clear message with a live countdown.
  * Rapid clicking on manual send can no longer double-bill, and a scheduled campaign can no longer stall at activation.
</Update>

<Update label="June 4, 2026">
  ## Added

  **Multiple phone numbers per project**

  * A project can now send across up to 49 phone numbers, and every later message in a conversation comes from the number that started it.

  **Schedules page**

  * A new Schedules page under Projects shows every scheduled send, past and upcoming, as a grouped list or a month calendar.

  **Choose your tracking-link parameter**

  * You can now pick which contact field a tracking link passes to your destination, or none, which is the new default.

  **Toll-free in the public API**

  * The API now lists toll-free verifications, includes toll-free numbers, and creates toll-free projects.

  ## Fixed

  * Toll-free sends were billed at 10DLC rates. Corrected, and toll-free rates are now visible on the pricing pages.
  * Dependent geographic filters in a data purchase now list only values inside the counties you already picked.
</Update>

<Update label="May 29, 2026">
  ## Added

  * Contact lists, media files, and opt-out lists can now belong to a toll-free registration, just as they can belong to a brand, and STOP replies on toll-free projects are recorded against that registration's own opt-out list.

  ## Changed

  * Contact imports now check numbers against real numbering rules, so invalid numbers are flagged at import instead of failing later.

  ## Fixed

  * Being signed out on every page refresh, or roughly once a day, is fixed, including the shared-office-network case.
  * One failed renewal charge can no longer release your phone number; it starts a grace window with an email so you can top up.
  * Toll-free verification submissions are more reliable: formatting rejections are fixed and status updates no longer go missing.
  * Purchases, chat replies, and saves made while viewing as a sub-organization now happen in that organization.
</Update>

<Update label="May 27, 2026">
  ## Added

  **Toll-free texting, end to end**

  * A complete toll-free path now sits alongside 10DLC: buy a toll-free number, complete carrier verification with a form you can save as a draft, and send once it is verified.

  **Aristotle voter data**

  * Aristotle (VoterListsOnline) joins L2 as a second data provider, with political filters and itemized quotes showing what each add-on costs.

  **Survey authoring matches broadcasts**

  * Every survey question now supports MMS media, merge fields with fallbacks, accurate segment counting, and link tracking.

  **Survey exports carry list columns**

  * Survey exports now include the same audience columns as data exports.

  ## Changed

  * The character and segment counter fills in realistic merge-tag values, so a personalized message is no longer over-counted.

  ## Fixed

  * Contact list uploads no longer land in "Failed", and report-ready emails send again.
</Update>

<Update label="May 19, 2026">
  ## Added

  * Setting up a recurring data export is now a single screen: give a bucket and access credentials and exports start flowing.

  ## Fixed

  * Large data exports finish faster and no longer get stuck showing "Running" for an hour.
</Update>

<Update label="May 18, 2026">
  ## Added

  * Contact-list uploads now handle CSV files with no header row or with blank header cells, explaining what was detected with a one-click toggle between "first row is headers" and "first row is data".

  ## Changed

  * Large contact-list uploads of 50,000 rows and up now finish in minutes rather than tens of minutes, completing as soon as your contacts are in.
</Update>

<Update label="May 13, 2026">
  ## Added

  * The Campaign Verify form now explains what to do when your filing information is not published online, covering the two paths Campaign Verify accepts and how to use `https://forms.irs.gov/` as the Filing Record URL.
</Update>

<Update label="May 9, 2026">
  ## Added

  * The message editor now warns you before you send when your message uses a public link shortener, which carriers commonly block, or repeats opt-out instructions that the required footer already adds. Both warnings are dismissible and neither blocks sending.
</Update>

<Update label="May 3, 2026">
  ## Changed

  * The project chat screen is rebuilt for clarity and space, with contact avatars, unread badges, more readable timestamps, and a composer that stays pinned when the phone keyboard appears.
</Update>

<Update label="May 2, 2026">
  ## Added

  * Uploaded media files now show their progress and survive a page refresh, so uploads no longer disappear mid-compression, and the composer hides media that is still processing so you cannot attach it by mistake.

  ## Changed

  * Home page metric cards load instantly for organizations of any size, including parent organizations with many sub-organizations that used to render blank.
  * Filtering and counting against the L2 voter file is much faster, and saved searches load quickly instead of redoing the work.
  * Reports start downloading within seconds instead of waiting for the whole file.

  ## Fixed

  * On white-labeled custom domains, two-factor authentication was prompted at every login and ignored "Remember this device". Trusted devices are now remembered everywhere.
  * A small number of projects stayed stuck in Sending after all their messages had finished, and now move to Completed correctly.
</Update>

<Update label="May 1, 2026">
  ## Added

  * Project test sends now accept several phone numbers separated by commas, so you can check a campaign on multiple devices in one send.

  ## Changed

  * Image and video compression is tuned for cleaner MMS, and photos taken on a phone keep their orientation through upload.
</Update>

<Update label="April 27, 2026">
  ## Added

  * Build a custom voter universe in-app with live filters and an estimated count, then buy the resulting list with a credit card. Purchases arrive as CSV or JSON and stay downloadable from the new Purchase History tab, billed separately from your platform wallet.
</Update>

<Update label="April 23, 2026">
  ## Added

  * External tools and partners can now build, test, and schedule projects entirely through the public API, so everything the in-app build flow does is available programmatically.
  * When you attach a media file in the composer, its thumbnail, filename, and size appear inline, so you always know which file is attached.

  ## Fixed

  * Number lookups are steadier: slow lookups are no longer cut off mid-job, and lookups you have waiting complete more predictably.
</Update>

<Update label="April 19, 2026">
  ## Added

  * Parent organizations can become resellers with an in-app verification flow and receive payouts to their own bank account on a daily, weekly, or monthly schedule when a sub-organization adds funds. Any organization can now save a payment method on file.
</Update>

<Update label="April 17, 2026">
  ## Added

  * Survey questions can now branch on each answer, sending Yes to one question and No to another, or skipping straight to the end, with branch targets updating themselves when you reorder or delete questions.

  ## Fixed

  * Copying a project now keeps the opt-out footer setting from the original, and copying a survey is all-or-nothing, so a failure part way can no longer leave you with half a survey.
</Update>

<Update label="April 6, 2026">
  ## Added

  * Enterprise accounts can now stream project and message data to your own Amazon S3 bucket, Snowflake, or Databricks on an hourly or daily schedule, with a Data Exports admin page to manage destinations, watch job history, and trigger a one-off export.
</Update>

<Update label="April 4, 2026">
  ## Changed

  * Opt-out detection now catches many more phrases and typos, including "stip", "srop", and "remove me". That is roughly 700 more opt-outs caught per day, which keeps your lists cleaner and more compliant.
</Update>

<Update label="April 3, 2026">
  ## Added

  * Link tracking now filters out bot clicks automatically, so your click analytics reflect real people.
</Update>

<Update label="March 30, 2026">
  ## Added

  * Archived projects can now be copied to create a new active project.
</Update>

<Update label="March 28, 2026">
  ## Fixed

  * MMS media no longer changes quality when it is sent to carriers.
</Update>

<Update label="March 25, 2026">
  ## Added

  * Seven new read-only additions to the public API let you pull more of your data programmatically.
</Update>

<Update label="March 23, 2026">
  ## Added

  * You can now export your API configuration as a Postman collection for easy testing.
</Update>

<Update label="March 22, 2026">
  ## Changed

  * The dashboard loads much faster. Pages that took several seconds now open instantly.
  * Delivery status updates arrive noticeably sooner.
  * Message sending capacity is doubled, so large campaigns finish considerably faster.
</Update>

<Update label="March 20, 2026">
  ## Added

  * Organizations can now set custom pricing for 10DLC brand registration and campaign vetting.

  ## Fixed

  * The Campaign Verify submission form no longer shows validation errors on valid entries.
  * Project cost on the dashboard showed less than the actual cost. Corrected.
  * Large sends with link tracking could lock the platform up under heavy click volume. Redirects are now stable no matter the send size.
  * Sending speeds set on a campaign were not being applied. Fixed.
  * MMS previews now display in survey projects.
  * Survey projects no longer show validation errors on valid entries, and an edited survey now correctly requires a re-test before sending.
</Update>

<Update label="March 12, 2026">
  ## Fixed

  * A campaign using link tracking could freeze the dashboard while it was sending. Fixed.
</Update>

<Update label="February 28, 2026">
  ## Added

  * Agency Mode lets you manage several organizations from one admin interface, switching between clients in one place.
  * You can now duplicate an existing project to start a new campaign with the same settings.

  ## Fixed

  * Reply metrics now exclude opted-out recipients, so they reflect only active, opted-in people.
</Update>

<Update label="February 22, 2026">
  ## Added

  * In-app notifications now alert you to project completions, low balance, payment confirmations, and more, with full history behind the bell icon.
  * The billing page gained search and filtering for recurring charges.

  ## Fixed

  * Phone numbers and 10DLC campaigns were not always billed on their recurring schedule. Fixed, and every missing charge was backfilled.
  * You now get a notification when a scheduled project completes successfully.
</Update>

<Update label="February 20, 2026">
  ## Added

  * Dropdowns across the platform gained search and filtering, so finding the right option is faster.
  * Realistic iPhone message previews appear throughout the platform to show how your message will look to recipients.
  * Non-political brands get a streamlined vetting flow, which makes approval for messaging easier.

  ## Changed

  * Brand setup, campaign verification, and campaign creation flows are smoother and more intuitive.

  ## Fixed

  * Login error messages are clearer about what actually went wrong.
  * Decimal values in organization pricing settings now save correctly.
</Update>

<Update label="February 13, 2026">
  ## Added

  * Videos and images you attach are now compressed automatically to fit under the 900KB carrier
    limit, keeping as much quality as possible. Common video formats are supported, including MP4,
    MOV, and clips recorded on an iPhone.

  ## Changed

  * The reporting page has clearer charts and shows your message the way it will appear on a
    recipient's phone.

  ## Fixed

  * Login failures now tell you what went wrong instead of showing a generic error.
  * Pricing you set for your organization keeps its exact decimal amount instead of being rounded.
</Update>

<Update label="February 4, 2026">
  ## Fixed

  * Link click tracking now records every click. Some clicks were previously missing from your
    reports.
</Update>

<Update label="February 3, 2026">
  ## Changed

  * Messages send faster and hold that speed on large projects.

  ## Fixed

  * Large data exports finish instead of timing out partway through.
</Update>

<Update label="February 2, 2026">
  ## Changed

  * Analyzing a contact list is now about ten times faster, so you can move from upload to sending
    much sooner.

  ## Fixed

  * The cell count shown for a contact list now matches the number of contacts you actually have.
</Update>

<Update label="February 1, 2026">
  ## Changed

  * Pages across the platform load faster, and message status updates appear sooner after a
    message goes out.
</Update>

<Update label="January 26, 2026">
  ## Added

  * You can now run surveys. Build up to 30 questions that advance automatically based on how each
    person replies, watch completion rates as responses come in, and export the results to CSV.
</Update>

<Update label="January 11, 2026">
  ## Added

  * You can now filter the project dashboard and the archive, which makes finding a specific
    project much faster when you run a lot of them.

  ## Changed

  * The homepage handles resellers and sub-organizations properly, so agencies managing several
    tiers of accounts can navigate between them without leaving the page.

  ## Fixed

  * On the chat page, the message window now sits in its proper position instead of dropping below
    the conversation list.
  * Selecting more than one contact list in the segment builder no longer crashes the page.
</Update>

<Update label="January 8, 2026">
  ## Added

  * A daily usage ledger now shows every billing entry, filterable by date range, so you can see
    exactly what you were charged for and when.

  ## Changed

  * Pages now show a preview of the layout while they load instead of a spinner, so you can tell
    what is coming.

  ## Fixed

  * Recurring charges now calculate and run on the correct schedule. Some monthly charges were
    running at the wrong time or for the wrong amount.
</Update>

<Update label="January 4, 2026">
  ## Added

  * The platform now meets WCAG 2.1 AA accessibility standards, with better keyboard navigation,
    screen reader support, skip navigation links, and higher contrast text.

  ## Changed

  * Dark mode now uses one consistent color set, so every screen looks the same rather than some
    pages reading lighter or darker than others.
  * The interface has been redesigned throughout with more consistent spacing, type, and color.
  * Pages load faster on first visit because the app now downloads roughly 90KB to 100KB less.
</Update>

<Update label="January 1, 2026">
  ## Changed

  * Uploading a contact list is now up to 2.5 times faster, and searching for a phone number is
    about ten times faster. A list of 100,000 or more contacts now processes in under two minutes
    instead of more than five.
  * Dashboard pages, including your brand and campaign lists, now load in a fraction of a second
    even when you have a lot of them.

  ## Fixed

  * Searching for and buying a phone number no longer fails partway through, and the messages you
    see when something does go wrong now explain the problem.
</Update>

<Update label="December 20, 2025">
  ## Added

  * **Contact list segmentation** builds new lists from how people engaged with a project. Pull
    out everyone who clicked a link, everyone who replied, or everyone who did neither, and message
    that group directly.
  * **Outbound webhooks** send you a notification the moment something happens: a project starts or
    finishes, a message changes status, or a contact list updates. Deliveries are retried and
    signed so you can confirm they came from us.

  ## Changed

  * Projects start faster and the platform stays responsive when you are sending heavily.
</Update>

<Update label="December 10, 2025">
  ## Added

  * **API documentation** is now published, with working examples in cURL, JavaScript, and Python,
    plus a guide to authenticating and a set of best practices.
  * **API keys** can be created and managed yourself, with per-key permissions so an integration
    only gets the access it needs.
  * **Merge tag mapping** matches your CSV columns to merge tags during upload and detects the
    common ones on its own, so a column named FirstName becomes first\_name without your help.
  * **Multiple contact lists** can be used in a single project, with duplicates removed
    automatically across every list you add.
  * **Template fallbacks** let you write `{first_name|Friend}` so a contact with a blank field
    still gets a natural message. The editor previews it with sample contact data.
</Update>

<Update label="December 4, 2025">
  ## Added

  * You can now send a test message to up to 10 phone numbers at once. Add or remove numbers with
    the plus and minus buttons, and see the delivery result for each one in your test history.
</Update>

<Update label="December 2, 2025">
  ## Added

  * Link tracking is here. See who clicked a link in your campaign, measure click-through rates,
    spot links being shared onward, and break clicks down by device, browser, and operating system.
    Every organization gets the shared domains vter.io and msg.vote, and you can add your own
    branded short domain.

  ## Fixed

  * Contact list selections now save with a project draft, so you can stop mid-setup and come back
    without rebuilding your audience.
</Update>

<Update label="November 29, 2025">
  ## Fixed

  * Editing a project now loads every field. Some fields came up blank and had to be re-entered.
  * Deleting a project works again.
  * The reporting page now opens for projects that are still sending, not just finished ones.
  * You now stay logged in until 48 hours of inactivity, or 30 days at the outside. Sessions were
    ending sooner than that.
  * Suppression lists can be attached to a project again.
</Update>

<Update label="November 19, 2025">
  ## Added

  * Campaign Verify now has its own page, separate from brands. Save a draft, submit it, confirm
    your PIN, and generate as many tokens as you need for 10DLC, toll-free, and short code
    messaging. You can also import tokens you already hold from another Campaign Verify account.

  ## Changed

  * Brand pages have been redesigned around brand registration and 10DLC campaigns alone, with
    clearer status and navigation. Political vetting now lives on the Campaign Verify page instead.
</Update>

<Update label="November 18, 2025">
  ## Added

  * **Two-factor authentication** is available using an authenticator app such as Google
    Authenticator or Authy.
  * **Session activity** on your profile page shows every active session, when it started, and
    where it signed in from.

  ## Changed

  * The billing balances page now loads in under a second instead of 13, and the dashboard and
    projects pages load 40% to 60% faster.

  ## Fixed

  * Closing and reopening your browser no longer signs you out.
  * You can be signed in on several devices at once, and manage all of those sessions from your
    profile.
  * You are no longer signed out every 15 minutes or whenever we release an update.
  * Devices you marked as trusted for two-factor stay trusted through updates.

  ## Security

  * Sessions now expire after 48 hours without activity.
  * An account locks automatically after 10 failed sign-in attempts, which blocks password
    guessing.
</Update>

<Update label="November 14, 2025">
  ## Added

  * You can now run the platform on your own domain, such as app.yourcompany.com. Verify the domain
    through your DNS provider for a one-time \$5.00 setup fee, and we handle the security
    certificate and worldwide delivery.
  * A branding page in Admin gives you the rest of the white-label controls: upload your logo and
    favicon, manage several domains at once, watch each one's setup progress, and pick the primary
    domain that the others redirect to. Setup usually takes 20 to 50 minutes end to end.
</Update>

<Update label="November 12, 2025">
  ## Changed

  * Large projects and high message volumes run more smoothly, and pages that used to time out
    while loading now finish.
</Update>

<Update label="November 11, 2025">
  ## Changed

  * The dashboard now opens almost instantly, and messages send about three times faster with more
    accurate live progress on big sends.

  ## Fixed

  * Campaigns of 100,000 or more messages no longer fail partway through.
</Update>

<Update label="November 7, 2025">
  ## Fixed

  * You can download a contact list again once its analysis finishes.
</Update>

<Update label="November 6, 2025">
  ## Changed

  * Message status updates now arrive on time during heavy sending, instead of lagging behind when
    volume spiked.
</Update>

<Update label="November 4, 2025">
  ## Changed

  * Project exports now include the delivery status and disposition of each individual message,
    so you can see exactly what happened to every send rather than just the totals.
</Update>

<Update label="November 3, 2025">
  ## Changed

  * The dashboard activity feed loads far faster, so recent messaging activity appears as soon as
    you open the page.
</Update>

<Update label="November 2, 2025">
  ## Changed

  * The recurring usage page now nests phone numbers under the campaign they belong to, and a
    single toggle turns auto-renew on or off for a campaign and every number attached to it.

  ## Fixed

  * Recurring charges now run on schedule. Some were not triggering at all.
</Update>

<Update label="November 1, 2025">
  ## Added

  * A status page now shows live platform health, uptime history, and any active incident, so you
    can check whether an issue is on our side before you call support.

  ## Changed

  * Navigation has been reorganized so the sections you use most are fewer clicks away.

  ## Fixed

  * Auto-recharge no longer gets stuck. Your wallet tops up whenever the balance falls below the
    threshold you set.
  * Inbound messages are now billed correctly, so your usage and charges match what you actually
    received.
  * Projects no longer show as incomplete after every message has been delivered.
</Update>

<Update label="October 31, 2025">
  ## Added

  * Compliance and policy pages are now published, covering messaging policies, legal disclosures,
    and the carrier-required guidelines your campaign has to follow.
  * A Help Center and FAQ cover setup, common questions, troubleshooting, and how to reach support.
  * A features page lays out what the platform does and what it costs.

  ## Changed

  * The onboarding guide now walks through the whole path end to end, from registration and
    campaign setup through sending, billing, and reporting.
</Update>

<Update label="October 30, 2025">
  ## Added

  * This changelog is now available inside the app, so you can see what changed without leaving
    your dashboard.
  * You can add your own description to a phone number, which makes a long list of numbers far
    easier to keep straight.
</Update>

<Update label="October 19, 2025">
  ## Added

  * Archived projects are now viewable, with the metrics they finished with. Filter them in or out
    of your project list, and a clear marker shows they cannot be edited.

  ## Changed

  * Billing keeps up during large bursts of messages instead of timing out.

  ## Fixed

  * Every charge now records a ledger entry. Some charges were being applied without one, which
    left gaps in your billing history.
</Update>

<Update label="October 18, 2025">
  ## Added

  * You can now use bold and italic text in message templates.

  ## Changed

  * A project of 3,600 or more messages now finishes in under two minutes instead of more than 13.

  ## Fixed

  * Every message is now billed exactly once. Sending at high volume could previously drop a
    charge.
  * Registering a brand charges once instead of twice.
  * Any column header from your CSV now works as a placeholder in a template, so you can write
    `{FirstName}`, `{Company}`, or `{Title}` and have it filled in per contact.
  * Delivery rate now excludes replies from the calculation, so the percentage reflects actual
    deliveries.
</Update>

<Update label="October 14, 2025">
  ## Changed

  * The billing ledger now attributes each cost to the project or resource that caused it, so you
    can see where your money went rather than a single running total.
  * Your wallet balance updates the instant a charge lands, rather than a few seconds later.
</Update>

<Update label="October 13, 2025">
  ## Changed

  * Pausing and resuming a project is now reliable. Everything already sent is preserved and the
    project picks up exactly where it stopped, with no duplicate messages.
  * A campaign of 10,000 or more messages now sends in under an hour instead of more than four.
  * Projects start in under a second instead of 10 to 15, because messages are prepared while you
    finish editing.
</Update>

<Update label="October 9, 2025">
  ## Added

  * **Auto-recharge** keeps your account funded. When your balance drops below the threshold you
    set, we charge your payment method automatically so sending never stops mid-campaign.
  * **Automatic renewal** for phone numbers and campaigns. Numbers are prorated by the days
    remaining, campaigns renew on their anniversary date.
  * **Auto-completion and archiving** marks a project complete once every message has sent, then
    archives it 14 days later to keep your workspace clear.
  * **Real-time balance** now includes today's usage before it has been billed, so the number you
    see is what you can actually spend.
  * **Approvals** are now a single toggle, and projects that need approval are labeled as such in
    the workflow.

  ## Changed

  * Every project now requires a test message before the full send, and editing a project returns
    it to testing so nothing goes out by accident.
  * Creating a project is about ten times faster, and a campaign with thousands of contacts opens
    immediately.
</Update>

<Update label="January 20, 2025">
  ## Added

  * Custom domains now carry your own branding across every public page, including login,
    registration, and legal documents. Your users see your logo, organization name, and contact
    details rather than ours.
</Update>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.