Added
Gmail Verified Sender ProgramCommittees 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.Over the API, a sender now reports its Gmail verified sender status and the dates it was submitted and verified.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.
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.
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.
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.
- 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 canvasThe 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.
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.
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.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.Added
Send each recipient to their own destination URLA 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.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.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.
Fixed
Sub-organizations blocked by a parent’s balance are now paused and toldCharges 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.Added
Choose how a scheduled project handles the daily carrier limitT-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.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”.
Changed
- A unique click counts a distinct device and network, not a distinct person. See Webhook events for the full explanation.
Fixed
Link tracking: per-link click details, a corrected unique-click count, and Android taps no longer filteredThe 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.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.
Added
- A new Delivery 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. If you matched on the old long codes, match on the documented short ones instead.
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 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. 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.
- Failed webhook deliveries now make all four documented retry attempts instead of stopping after three.
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.
Added
Official SDKs, CLI, and MCP ServerFour official packages are now published:@political-comms/sdk (TypeScript), political-comms (Python 3.10+), @political-comms/cli, and @political-comms/mcp, which lets Claude and other MCP clients manage projects, contact lists, media, analytics, and billing. Source: 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 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.
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.
Added
File URLs on the media APIListing 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.Improved
Cost estimates that match what actually billsThe 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.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 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, which now documents the three real error shapes.Added
Automatic pause on carrier blockingIf 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.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.Added
Survey report: response rate, nudge history, and unread badgesThe 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 recoveredA 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.Added
Survey projects on the API The Projects API 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 optionalIdempotency-Key header, so retrying within 24 hours returns the original response instead of running twice. See Error Handling 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.Added
WinRed report feeds for vendor accountsWinRed 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 CSVsContact 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.Fixed
Personalization on WinRed listsWinRed 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.Improved
Streamlined campaign registrationThe 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.Changed
Updated legal agreementsThe 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.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.Added
Sign in with a passkeyYou 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.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.
- 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.
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.
- 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.
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.
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.
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.
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.
- Set a default for each merge tag once in Organization Settings, used whenever a contact is missing that field.
- 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.
- The list now shows a Valid Until date for each authorization and warns you by email before it lapses.
- 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.
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.
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.
- A new Schedules page under Projects shows every scheduled send, past and upcoming, as a grouped list or a month calendar.
- You can now pick which contact field a tracking link passes to your destination, or none, which is the new default.
- 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.
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.
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 (VoterListsOnline) joins L2 as a second data provider, with political filters and itemized quotes showing what each add-on costs.
- Every survey question now supports MMS media, merge fields with fallbacks, accurate segment counting, and link tracking.
- 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Added
- Link tracking now filters out bot clicks automatically, so your click analytics reflect real people.
Added
- Seven new read-only additions to the public API let you pull more of your data programmatically.
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.
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.
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.
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.
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.
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.
Fixed
- Link click tracking now records every click. Some clicks were previously missing from your reports.
Changed
- Pages across the platform load faster, and message status updates appear sooner after a message goes out.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Changed
- Large projects and high message volumes run more smoothly, and pages that used to time out while loading now finish.
Changed
- Message status updates now arrive on time during heavy sending, instead of lagging behind when volume spiked.
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.
Changed
- The dashboard activity feed loads far faster, so recent messaging activity appears as soon as you open the page.
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.
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.
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.
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.
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.
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.
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.
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.
