{
  "entries": [
    {
      "id": "2026-09-23-incident-notice-across-the-dashboard",
      "date": "2026-09-23",
      "title": "Incident notice across the dashboard",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "The dashboard shows a notice on every page when Pingram has an active incident",
        "Close the notice with the × button; it stays hidden until you refresh the page"
      ]
    },
    {
      "id": "2026-09-22-announcing-make-integration",
      "date": "2026-09-22",
      "title": "Announcing Pingram on Make",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-make-integration",
      "bullets": [
        "Send email and SMS from Make scenarios with the verified Pingram app, including a custom API call for other Pingram requests",
        "Integration page with setup steps and example scenarios: [Make integration](/integrations/make)",
        "New Make accounts can start with 2 months of Make Pro through the partner signup link"
      ]
    },
    {
      "id": "2026-09-22-announcing-pingram-cursor-plugin",
      "date": "2026-09-22",
      "title": "Announcing the Pingram plugin for Cursor",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-pingram-cursor-plugin",
      "bullets": [
        "Install the Pingram plugin in Cursor to send email and SMS and manage your account from the editor. One install connects the hosted MCP server and Pingram skills; sign in once with your Pingram account",
        "The same plugin works in Grok Bot",
        "Canada and EU accounts should use their regional MCP host"
      ]
    },
    {
      "id": "2026-09-21-phone-verify-virtual-numbers",
      "date": "2026-09-21",
      "title": "Clearer phone verification when a number cannot receive SMS",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Signup now explains when a VoIP, landline, or other virtual number cannot be used, and asks for a real mobile number",
        "You can switch to a different number immediately instead of waiting through the previous two-minute cooldown"
      ]
    },
    {
      "id": "2026-09-21-heal-stale-default-template",
      "date": "2026-09-21",
      "title": "Deleting a default template no longer breaks live sends",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "After you delete or copy templates, the remaining (or newly created) template is set as the default so live API sends do not fail with “The template was not found”",
        "New and copied template IDs are prefilled with the notification ID to reduce typos that can leave a stale default behind",
        "The editor warns if a channel has templates but none is marked default"
      ]
    },
    {
      "id": "2026-09-18-broadcast-code-samples-api-key",
      "date": "2026-09-18",
      "title": "Broadcast code samples include your API key",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Broadcast Code samples now include your account API key in the Node.js, Python, and cURL snippets",
        "Raw email audience examples come first; filtered-audience samples include a short `user.identify` snippet to sync users on signup"
      ]
    },
    {
      "id": "2026-09-18-mcp-oidc-userinfo",
      "date": "2026-09-18",
      "title": "ChatGPT Enterprise domain restrictions for the Pingram MCP connector",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "The Pingram MCP connector now publishes OpenID Connect UserInfo, so ChatGPT Enterprise can restrict who links Pingram by verified email domain"
      ]
    },
    {
      "id": "2026-09-18-mcp-output-schema",
      "date": "2026-09-18",
      "title": "Structured JSON results for Pingram MCP tools",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Each Pingram MCP tool now advertises an output schema and returns structured JSON on success, matching the documented API response so clients like ChatGPT can validate results instead of parsing free-form text"
      ]
    },
    {
      "id": "2026-09-17-broadcast-archive-cli-mcp",
      "date": "2026-09-17",
      "title": "Broadcast archive and unarchive leave the CLI and MCP",
      "type": "deprecation",
      "announcement": null,
      "bullets": [
        "`pingram broadcasts archive` and `pingram broadcasts unarchive` are no longer CLI commands",
        "Archive and unarchive are also no longer MCP tools; they remain available in the dashboard and the Broadcasts API"
      ]
    },
    {
      "id": "2026-09-17-mcp-tool-annotations",
      "date": "2026-09-17",
      "title": "Clearer names and safety hints for MCP tools",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Each Pingram MCP tool now has a human-readable title in the connector listing (for example, \"Send Email\" instead of `email_send`)",
        "Tools also advertise whether they are read-only or destructive, so clients like Claude can review and group them correctly"
      ]
    },
    {
      "id": "2026-09-17-insights-overview-total-sends",
      "date": "2026-09-17",
      "title": "Insights overview shows total sends",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Insights overview now shows total notifications sent",
        "Detailed delivery, error, and engagement breakdowns stay on Insights Pro"
      ]
    },
    {
      "id": "2026-09-16-broadcasts",
      "date": "2026-09-16",
      "title": "Email broadcasts",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-broadcasts",
      "bullets": [
        "Create, schedule, and send email campaigns from the dashboard or the Broadcasts API",
        "Target identified users with property filters, or send to a list of email addresses",
        "Personalize subject and HTML per recipient with Liquid mergetags, and track delivery and engagement"
      ]
    },
    {
      "id": "2026-09-16-user-identify-properties",
      "date": "2026-09-16",
      "title": "Identify users with custom attributes",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "`user.identify` now accepts a `properties` map so you can store custom attributes such as first name or plan",
        "Use those attributes later for broadcast audience filters and in templates as `{{ user.properties.firstname }}`",
        "Later identify calls merge new keys into the existing map; omitted keys are left unchanged"
      ]
    },
    {
      "id": "2026-09-16-auto-upgrade-team-access",
      "date": "2026-09-16",
      "title": "Team members can manage Auto upgrade",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Anyone who can change the account plan can now enable or disable Auto upgrade in Settings → Plan",
        "`PATCH /account` no longer requires the owner role to set `autoUpgrade`"
      ]
    },
    {
      "id": "2026-09-15-mfa-paid-plans",
      "date": "2026-09-15",
      "title": "MFA available on any paid plan",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Multi-factor authentication is now included on every paid plan, not only Enterprise",
        "Enable an authenticator app from Profile → Security",
        "Free accounts can unlock MFA by upgrading to a paid plan"
      ]
    },
    {
      "id": "2026-09-14-disabled-channel-templates",
      "date": "2026-09-14",
      "title": "Templates for disabled channels stay visible",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "Templates for channels that are turned off now appear in a Templates for Disabled Channels section on the notification design screen",
        "You can still view and edit those templates, or enable the channel from Configure"
      ]
    },
    {
      "id": "2026-09-12-visual-email-editor-saves-canvas",
      "date": "2026-09-12",
      "title": "Visual email templates save the canvas design",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "Saving a visual email template now stores the design from the canvas, instead of the default starter HTML",
        "Pasted raw HTML templates still save the markup you pasted"
      ]
    },
    {
      "id": "2026-09-11-announcing-openclaw-integration",
      "date": "2026-09-11",
      "title": "Announcing OpenClaw / ClawBot Integration",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-openclaw-integration",
      "bullets": [
        "Connect OpenClaw (ClawBot) to Pingram’s hosted MCP so your agent can send email and SMS, check delivery logs, and manage your account after one OAuth login",
        "Setup guide with CLI and Control UI steps, example prompts, and troubleshooting",
        "Optional ClawHub skill so OpenClaw agents know how to use Pingram tools"
      ]
    },
    {
      "id": "2026-09-11-sms-invalid-destination-error",
      "date": "2026-09-11",
      "title": "Clearer SMS error when the destination number is invalid",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "Failed SMS logs now explain when the recipient number is not a real destination, instead of a generic unknown error",
        "Send API errors for invalid destination numbers return a specific code and how to fix it"
      ]
    },
    {
      "id": "2026-09-09-auto-upgrade",
      "date": "2026-09-09",
      "title": "Auto upgrade to the next budget tier",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-auto-upgrade",
      "bullets": [
        "Paid accounts can turn on Auto upgrade in Settings → Plan",
        "When spend reaches 90% of the monthly budget, we move you up one tier and charge the difference",
        "`GET /account` includes `autoUpgrade`; `PATCH /account` with `{ \"autoUpgrade\": true }` turns it on"
      ]
    },
    {
      "id": "2026-09-09-upgrade-charges-full-budget-difference",
      "date": "2026-09-09",
      "title": "Mid-cycle upgrades charge the full budget difference",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "Upgrading your monthly budget now charges the full difference between tiers, not a leftover-days amount",
        "The extra budget is available immediately; your billing date stays the same"
      ]
    },
    {
      "id": "2026-09-08-dashboard-integrations-catalog",
      "date": "2026-09-08",
      "title": "Find n8n, MCP, CLI, and more in Settings",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "Settings → Integrations now lists official Pingram integrations in one place, including n8n, Make, Apprise, GitHub Actions, MCP, Hermes, Skills, the CLI, and Auth0",
        "Copy the MCP server URL or an install command from a card, then open the setup guide"
      ]
    },
    {
      "id": "2026-09-04-a2p-10dlc-brand-create-fields",
      "date": "2026-09-04",
      "title": "10DLC brand create requires address and brand name",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "`createUs10dlcBrand` now requires `displayName` (the public brand name shown to recipients and carriers) and street address fields",
        "For sole proprietors, `legalName` is optional and defaults to first and last name; `displayName` is still required (use your DBA, or first and last name if you have no DBA)",
        "The dashboard brand registration form collects Brand Name on create and hides Legal Name for sole proprietors (stored legal name defaults to first and last name)",
        "SDKs (v1.0.29) include the required `displayName` and address fields on `createUs10dlcBrand`"
      ]
    },
    {
      "id": "2026-09-04-email-editor-preserves-pasted-html",
      "date": "2026-09-04",
      "title": "Pasted email HTML is saved as-is",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "Pasting a full HTML email into a template no longer rewrites the markup when you save",
        "Preview and the editor now show the same HTML you pasted"
      ]
    },
    {
      "id": "2026-09-03-logs-updating-results",
      "date": "2026-09-03",
      "title": "Logs finish loading instead of staying on Updating results",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "Opening a log no longer stays on Updating results when loading delivery details"
      ]
    },
    {
      "id": "2026-09-03-paid-plan-changes-in-place",
      "date": "2026-09-03",
      "title": "Paid plan changes apply in place",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Changing your paid plan in Settings no longer sends you through checkout again",
        "Upgrades apply immediately; downgrades take effect at the end of the current billing period",
        "The Plan page shows the scheduled plan and when it starts"
      ]
    },
    {
      "id": "2026-09-02-mcp-use-another-account",
      "date": "2026-09-02",
      "title": "Use another account from Pingram MCP",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "After you connect Pingram MCP, pass an optional `accountId` from **List Accounts** to send messages, list numbers, or manage 10DLC on that account",
        "Without `accountId`, tools still use your first account",
        "If you already connected Pingram MCP, reconnect the connector (or refresh tools) so clients pick up the new `accountId` argument"
      ]
    },
    {
      "id": "2026-09-01-a2p-10dlc-registration-field-docs",
      "date": "2026-09-01",
      "title": "Clearer A2P 10DLC registration field docs",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Brand and campaign registration request fields now include descriptions, allowed values, and what is required before carrier submission",
        "SDK JSDoc and API reference docs for `createUs10dlcBrand`, `updateUs10dlcBrand`, and `updateUs10dlcCampaign` cover the same details"
      ]
    },
    {
      "id": "2026-08-28-create-account-returns-api-key",
      "date": "2026-08-28",
      "title": "Create account returns the new API key",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "`POST /accounts` and `accounts.createAccount` now include `apiKey` — the new account's default secret key (`pingram_sk_…`)",
        "Use a personal access token to create the account, then send with the returned key without a follow-up `GET /keys`"
      ]
    },
    {
      "id": "2026-08-26-stop-creating-environments",
      "date": "2026-08-26",
      "title": "Creating additional environments is no longer supported",
      "type": "deprecation",
      "announcement": null,
      "bullets": [
        "You can no longer add a new environment from the dashboard, `POST /environments`, or `createEnvironment` in the SDKs",
        "Existing environments and API keys keep working"
      ]
    },
    {
      "id": "2026-08-26-multiple-events-webhook-endpoints",
      "date": "2026-08-26",
      "title": "Multiple events webhook endpoints",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-multiple-webhook-endpoints",
      "bullets": [
        "Add more than one HTTPS events webhook, each with its own subscribed events and signing secret",
        "Configure endpoints from the dashboard Webhook page or the API (`GET/POST /webhooks`, `PUT/DELETE /webhooks/{endpointId}`)",
        "Existing single-URL configurations keep receiving events during the migration"
      ]
    },
    {
      "id": "2026-08-25-a2p-10dlc-registration-apis",
      "date": "2026-08-25",
      "title": "A2P 10DLC registration APIs",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "Create, read, and update your US A2P 10DLC brand registration through the API and SDKs",
        "Read and update campaign registration fields (use case, samples, opt-in/out flows, and related compliance details) before carrier submission",
        "SDKs (v1.0.26) add `registrations` methods for brand and campaign registration on Node, Python, Go, PHP, Java, C#, and Ruby",
        "MCP can list and manage brand and campaign registrations for accounts you authenticate as"
      ]
    },
    {
      "id": "2026-08-25-voice-editor-shows-saved-agent",
      "date": "2026-08-25",
      "title": "Voice agent editor opens the saved configuration",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "Opening a voice agent now always shows the configuration saved on the agent, not a leftover local draft",
        "Unsaved edits still support Save changes and Discard changes, and leaving the page asks before those edits are lost"
      ]
    },
    {
      "id": "2026-08-21-create-accounts-cli-mcp",
      "date": "2026-08-21",
      "title": "Create extra accounts from the CLI and MCP",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "`pingram accounts create` and `pingram accounts list` manage extra accounts from the terminal — log in with a personal access token (`pingram_pat_…`), not an account API key",
        "Pass `--plan '{\"tier\":\"budget_50\",\"sourceBillingAccountId\":\"…\"}'` to attach a budget using another account's payment method",
        "After you connect Pingram MCP, an agent signed in as you can use **Create Account** and **List Accounts**"
      ]
    },
    {
      "id": "2026-08-20-bulk-unsuppress-starts-in-background",
      "date": "2026-08-20",
      "title": "Bulk email unsuppress starts in the background",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "`DELETE /email/suppressions/{reason}` now queues removal and returns immediately — it no longer waits until every address is cleared",
        "The response is a confirmation that the job started; matching suppressions finish clearing in the background"
      ]
    },
    {
      "id": "2026-08-18-log-suppression-remove",
      "date": "2026-08-18",
      "title": "Remove recipients from suppression in log details",
      "type": "improvement",
      "announcement": null,
      "bullets": [
        "Bounce and complaint log details now explain that the recipient is on the email suppression list, including after the first permanent bounce or complaint",
        "Remove that recipient from the suppression list directly from the log"
      ]
    },
    {
      "id": "2026-08-13-fix-voice-agent-tool-serialization",
      "date": "2026-08-13",
      "title": "Fix saving voice agents that use transfer, MCP, or knowledge tools",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "Saving or updating a voice agent with transfer, MCP, or knowledge tools no longer fails with an invalid request body",
        "Assigning a phone number after adding those tools works again (save could fail before the bind step)"
      ]
    },
    {
      "id": "2026-08-13-multiple-accounts",
      "date": "2026-08-13",
      "title": "Multiple accounts",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-multiple-accounts",
      "bullets": [
        "Create extra accounts from the dashboard sidebar or the API (`accounts.createAccount`), then switch between them",
        "Optionally attach a plan using another account's payment method",
        "Add teammates who already share an account with you, or invite new members by email"
      ]
    },
    {
      "id": "2026-08-11-bulk-remove-email-suppressions",
      "date": "2026-08-11",
      "title": "Bulk remove email suppressions",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "Clear email suppressions in bulk from the Users page, with filters by suppression type",
        "Choose retryable suppressions and/or permanent bounces (complaints stay managed one at a time)",
        "New API: `DELETE /email/suppressions/{reason}` to remove matching suppressions for an environment"
      ]
    },
    {
      "id": "2026-08-11-personal-access-tokens",
      "date": "2026-08-11",
      "title": "Personal access tokens",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "Create, list, and revoke personal access tokens from your profile",
        "Set an optional expiry (30, 90, or 365 days) or keep a token that never expires",
        "The full token is shown only once at creation; afterward you can identify tokens by name and prefix"
      ]
    },
    {
      "id": "2026-08-10-trim-to-and-from-on-sms-send",
      "date": "2026-08-10",
      "title": "Trim whitespace on SMS send to and from fields",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "`POST /sms` now trims leading and trailing whitespace on `to` and `from` before send"
      ]
    },
    {
      "id": "2026-08-07-account-owner-role",
      "date": "2026-08-07",
      "title": "Account owner role for team members",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "Account creators are owners; team settings shows an Owner tag next to owners",
        "Owners can promote other members to owner or set them to admin via the members API",
        "Member list responses always include each member's account role (`owner` or `admin`)"
      ]
    },
    {
      "id": "2026-08-07-announcing-github-actions-notifications",
      "date": "2026-08-07",
      "title": "Announcing Pingram notifications for GitHub Actions",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-github-actions-notifications",
      "bullets": [
        "Send email and SMS from CI with [`pingram-io/github-actions-send-email`](https://github.com/pingram-io/github-actions-send-email) and [`pingram-io/github-actions-send-sms`](https://github.com/pingram-io/github-actions-send-sms)",
        "Notify on failed builds or page on-call from a workflow step; `to` accepts a comma-separated list"
      ]
    },
    {
      "id": "2026-08-07-fix-mcp-oauth-session-renewal",
      "date": "2026-08-07",
      "title": "Keep Pingram MCP connected after the access token expires",
      "type": "fix",
      "announcement": null,
      "bullets": [
        "MCP clients now receive a refresh token after login, so sessions renew instead of failing",
        "Expired API tokens during tool calls return HTTP 401 at the MCP layer so clients can refresh and retry"
      ]
    },
    {
      "id": "2026-08-07-mobile-push-discontinued",
      "date": "2026-08-07",
      "title": "Mobile Push discontinued",
      "type": "deprecation",
      "announcement": null,
      "bullets": [
        "Mobile Push (APNs/FCM) is no longer delivered — `PUSH` is dropped from send routing even if it remains on a notification or in the request",
        "Dashboard setup for Mobile Push is removed: settings, channel toggles, templates, and mobile code samples no longer expose the channel"
      ]
    },
    {
      "id": "2026-08-06-product-changelog-at-pingram-io",
      "date": "2026-08-06",
      "title": "Product changelog at pingram.io/changelog",
      "type": "feature",
      "announcement": null,
      "bullets": [
        "Browse every ship at [/changelog](https://www.pingram.io/changelog) — grouped by month with feature, improvement, fix, and deprecation labels",
        "Machine-readable JSON feed at `/changelog.json` for integrations and tooling"
      ]
    },
    {
      "id": "2026-08-03-add-get-account-invoices-and-plan-tab-invoices-modal",
      "date": "2026-08-03",
      "title": "Add GET /account/invoices and Plan tab invoices modal",
      "type": "feature",
      "announcement": null,
      "bullets": []
    },
    {
      "id": "2026-07-23-announcing-pingram-mcp",
      "date": "2026-07-23",
      "title": "Announcing Pingram MCP",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-pingram-mcp",
      "bullets": [
        "Connect Claude, ChatGPT, or Cursor to your Pingram account with our hosted MCP server. Sign in once and let an AI agent send notifications and manage your account on your behalf",
        "Send email and SMS",
        "Query delivery logs by tracking ID"
      ]
    },
    {
      "id": "2026-07-23-announcing-pingram-cli",
      "date": "2026-07-23",
      "title": "Announcing the Pingram CLI",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-pingram-cli",
      "bullets": [
        "Manage domains, send messages, and inspect logs from your terminal. Install via npm, Homebrew, cURL, or PowerShell"
      ]
    },
    {
      "id": "2026-07-17-single-corner-sign-out-on-verify-phone-page",
      "date": "2026-07-17",
      "title": "Single corner sign out on verify-phone page",
      "type": "fix",
      "announcement": null,
      "bullets": []
    },
    {
      "id": "2026-06-15-announcing-hermes-notification-gateway-plugin",
      "date": "2026-06-15",
      "title": "Official Hermes Notification Gateway Plugin",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-hermes-notification-gateway-plugin",
      "bullets": [
        "Hermes Agent plugin for SMS, email, and voice through Pingram. Install, run setup, done"
      ]
    },
    {
      "id": "2026-05-27-smtp-canada-europe",
      "date": "2026-05-27",
      "title": "SMTP Now Available in Canada and Europe",
      "type": "improvement",
      "announcement": "https://www.pingram.io/blog/smtp-canada-europe",
      "bullets": [
        "SMTP relay is now available in Canada and Europe, bringing local email infrastructure to more regions",
        "**Canada**",
        "**Europe**"
      ]
    },
    {
      "id": "2026-05-27-supabase-integration-canada-europe",
      "date": "2026-05-27",
      "title": "Supabase Integration Now Available in Canada and Europe",
      "type": "improvement",
      "announcement": "https://www.pingram.io/blog/supabase-integration-canada-europe",
      "bullets": [
        "Connect your Supabase project to Pingram in Canada and Europe for better deliverability and data residency compliance",
        "**Canada**",
        "**Europe**"
      ]
    },
    {
      "id": "2026-05-04-announcing-pingram-notification-skills",
      "date": "2026-05-04",
      "title": "Announcing Pingram Notification Skills",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-pingram-notification-skills",
      "bullets": [
        "Agent skills for sending and receiving email, SMS, voice, and WhatsApp with Pingram. Use them from Claude, Cursor, Copilot, and other coding assistants"
      ]
    },
    {
      "id": "2026-04-22-announcing-mms-sms-notifications",
      "date": "2026-04-22",
      "title": "Announcing: MMS (picture) for SMS notifications",
      "type": "improvement",
      "announcement": "https://www.pingram.io/blog/announcing-mms-sms-notifications",
      "bullets": [
        "Two-way MMS on the same SMS send API, with the Pingram team helping you meet US A2P 10DLC and sender requirements alongside your sends"
      ]
    },
    {
      "id": "2026-03-27-announcing-sms-custom-sender-number",
      "date": "2026-03-27",
      "title": "Announcing: Multi-Number SMS Support",
      "type": "improvement",
      "announcement": "https://www.pingram.io/blog/announcing-sms-custom-sender-number",
      "bullets": [
        "Send SMS notifications from multiple phone numbers. Perfect for multi-brand businesses, regional messaging, and dedicated support lines",
        "Separate communications for different brands",
        "Use regional numbers to improve delivery and trust"
      ]
    },
    {
      "id": "2026-02-17-announcing-full-inbound-messaging",
      "date": "2026-02-17",
      "title": "Announcing: Full Inbound Messaging",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-full-inbound-messaging",
      "bullets": [
        "Receive any incoming email or SMS from your users with built-in inboxes, custom domains, and reply tracking",
        "Every Pingram account now gets a built-in email inbox (`yourcompany@mail.pingram.io`) ready to receive messages immediately",
        "You can also add custom domains to receive emails at addresses like `support@mail.yourcompany.com`"
      ]
    },
    {
      "id": "2026-02-04-announcing-supabase-integration",
      "date": "2026-02-04",
      "title": "Announcing: Supabase Integration",
      "type": "improvement",
      "announcement": "https://www.pingram.io/blog/announcing-supabase-integration",
      "bullets": [
        "Hitting the Supabase email rate limit? Our one-click SMTP integration lets you send emails with full tracking, analytics, and better deliverability",
        "**Bypass Supabase's email rate limits** - Send as many emails as your application needs",
        "**Improve deliverability** - Benefit from Pingram's optimized email infrastructure"
      ]
    },
    {
      "id": "2026-01-27-announcing-smtp",
      "date": "2026-01-27",
      "title": "Announcing: SMTP Relay for Pingram",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-smtp",
      "bullets": [
        "Send emails through Pingram using standard SMTP configuration, perfect for platforms that only support SMTP credentials"
      ]
    },
    {
      "id": "2026-01-21-notificationapi-is-now-pingram",
      "date": "2026-01-21",
      "title": "NotificationAPI is Now Pingram",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/notificationapi-is-now-pingram",
      "bullets": [
        "We are rebranding from NotificationAPI to Pingram. Same team, same product, same commitment to developers — just a new name that better reflects our mission",
        "Developer Experience",
        "Simplicity"
      ]
    },
    {
      "id": "2026-01-15-unlock-premium-date-ranges-and-detail-levels-for-insights-pr",
      "date": "2026-01-15",
      "title": "Unlock premium date ranges and detail levels for Insights Pro accounts",
      "type": "feature",
      "announcement": null,
      "bullets": []
    },
    {
      "id": "2025-12-16-announcing-email-inbound-webhooks",
      "date": "2025-12-16",
      "title": "Announcing: Email Inbound Webhooks",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-email-inbound-webhooks",
      "bullets": [
        "Pingram can capture replies to your email notifications and send them to your webhooks. Great for implementing automated and conversational flows",
        "**AI Powered Workflows**: Build AI powered workflows that respond to user replies or take action based on the content of the reply.",
        "**Pre-defined Auto Replies**: Automatically reply to user replies with a pre-defined message; e.g. \"We got your message!\""
      ]
    },
    {
      "id": "2025-12-16-announcing-sms-inbound-webhooks",
      "date": "2025-12-16",
      "title": "Announcing: SMS Inbound Webhooks",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-sms-inbound-webhooks",
      "bullets": [
        "Enable two-way SMS notifications with your users. Receive SMS replies via our easy-to-use webhooks and build interactive notification experiences",
        "**Appointment confirmations**: Let users reply YES or NO to confirm appointments",
        "**Customer support**: Route SMS replies to your support system"
      ]
    },
    {
      "id": "2025-10-28-new-notification-logs-v2-api-endpoints",
      "date": "2025-10-28",
      "title": "New Notification Logs v2 API Endpoints",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/new-notification-logs-v2-api-endpoints",
      "bullets": [
        "Access your notification logs programmatically with new API endpoints for tailing, searching, and bulk retrieval"
      ]
    },
    {
      "id": "2025-10-13-announcing-easy-email-attachments",
      "date": "2025-10-13",
      "title": "Send Email Attachments without Storing Files",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-easy-email-attachments",
      "bullets": [
        "Send email attachments directly via base64 content without hosting files elsewhere. Perfect for dynamic content and temporary files",
        "Send Emails → Attachments",
        "API Reference: attachments"
      ]
    },
    {
      "id": "2025-10-07-unsubscribe-webhook-events",
      "date": "2025-10-07",
      "title": "Introducing Unsubscribe Webhook Events",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/unsubscribe-webhook-events",
      "bullets": [
        "Get real-time webhook notifications when users opt out of your notifications"
      ]
    },
    {
      "id": "2025-08-29-announcing-notification-insights-v2",
      "date": "2025-08-29",
      "title": "Notification Insights V2: Unified Cross-Channel Analytics",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-notification-insights-v2",
      "bullets": [
        "Insights V2 adds time-series charts across channels for improved analytics and deeper breakdowns",
        "Time-series charts for requests, sends, deliveries, opens, clicks",
        "Filters by notification type and channel"
      ]
    },
    {
      "id": "2025-07-10-suppression-list-management",
      "date": "2025-07-10",
      "title": "Announcing: Email Suppression Management",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/suppression-list-management",
      "bullets": [
        "Take full control of your email suppression lists"
      ]
    },
    {
      "id": "2025-07-07-announcing-soc2-type-ii-compliance",
      "date": "2025-07-07",
      "title": "SOC2 Type II Compliance",
      "type": "improvement",
      "announcement": "https://www.pingram.io/blog/announcing-soc2-type-ii-compliance",
      "bullets": [
        "Pingram is now SOC2 Type II certified with a new Trust Center showcasing our security posture and compliance reports"
      ]
    },
    {
      "id": "2025-07-06-send-notification-content-without-templates",
      "date": "2025-07-06",
      "title": "Send Notification Content Without Templates",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/send-notification-content-without-templates",
      "bullets": [
        "You can now send notifications without designing and using templates, by directly passing content in your API calls"
      ]
    },
    {
      "id": "2025-05-03-introducing-competitive-sms-pricing",
      "date": "2025-05-03",
      "title": "Introducing Industry-Leading SMS Pricing",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/introducing-competitive-sms-pricing",
      "bullets": [
        "Pingram now offers competitive, transparent SMS pricing",
        "Custom sender numbers and branding",
        "Regional compliance and smart routing"
      ]
    },
    {
      "id": "2025-05-02-faster-notification-logs",
      "date": "2025-05-02",
      "title": "Improved Notification Logs V2 Interface",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/faster-notification-logs",
      "bullets": [
        "We've completely rebuilt our logs interface from the ground up for blazing fast performance and improved usability",
        "Faster log loading",
        "Instant search results"
      ]
    },
    {
      "id": "2025-01-23-announcing-notification-logs-v2",
      "date": "2025-01-23",
      "title": "Announcing: Notification Logs v2",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-notification-logs-v2",
      "bullets": [
        "Introducing the revamped Notification Logs feature on Pingram: Better tracking, faster searches, and richer data for teams that want to debug notifications",
        "**Notification Open & Click Tracking**",
        "**Faster Search**"
      ]
    },
    {
      "id": "2025-01-23-introducing-notificationapi-s-european-data-center",
      "date": "2025-01-23",
      "title": "Introducing: Pingram's European Data Center",
      "type": "improvement",
      "announcement": "https://www.pingram.io/blog/introducing-notificationapi-s-european-data-center",
      "bullets": [
        "Pingram now supports an EU region, based out of Frankfurt, ensuring better performance and data residency compliance for our European customers and users",
        "**Enhanced Performance for European Customers**",
        "**GDPR Compliance**"
      ]
    },
    {
      "id": "2024-12-11-introducing-notification-events-webhook-api",
      "date": "2024-12-11",
      "title": "Introducing Notification Events Webhook API",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/introducing-notification-events-webhook-api",
      "bullets": [
        "We are excited to roll out our Notification Events Webhook. This feature calls your APIs with important notification events, such as Delivery or Click"
      ]
    },
    {
      "id": "2024-07-23-announcing-logs-api",
      "date": "2024-07-23",
      "title": "Announcing: Logs API",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-logs-api",
      "bullets": [
        "Pingram’s new Logs API grants developers full access to their notification system’s logs & data"
      ]
    },
    {
      "id": "2024-05-01-announcing-user-dashboard",
      "date": "2024-05-01",
      "title": "Announcing: User Dashboard",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-user-dashboard",
      "bullets": [
        "Pingram"
      ]
    },
    {
      "id": "2024-04-11-announcing-api-documentation",
      "date": "2024-04-11",
      "title": "Announcing: API Documentation",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-api-documentation",
      "bullets": [
        "Pingram now has REST API documentation and Administrative API features in addition to SDKs, letting you manage your Pingram account via our API"
      ]
    },
    {
      "id": "2024-03-25-announcing-server-side-c-net-sdk",
      "date": "2024-03-25",
      "title": "Announcing Server-Side C# .NET SDK",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-server-side-c-net-sdk",
      "bullets": [
        "Pingram now officially supports a C# .NET library. This library is available on NuGet and thoroughly documented on our server SDK documentation website"
      ]
    },
    {
      "id": "2024-03-10-announcing-notification-scheduling",
      "date": "2024-03-10",
      "title": "Announcing: Notification Scheduling",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-notification-scheduling",
      "bullets": [
        "Notification scheduling is built into Pingram and replaces the cron, databases or other systems you have in place to send notifications at future dates"
      ]
    },
    {
      "id": "2022-08-31-announcing-insights",
      "date": "2022-08-31",
      "title": "Announcing: Insights",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-insights",
      "bullets": [
        "With Pingram Insights, teams get high-level reports and an understanding of what notifications they are sending, where they go, and what happens to them",
        "Outgoing notifications by notification",
        "Outgoing notifications by channel"
      ]
    },
    {
      "id": "2022-06-24-announcing-no-code-unsubscribe-links",
      "date": "2022-06-24",
      "title": "Announcing: No-Code Unsubscribe Links",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-no-code-unsubscribe-links",
      "bullets": [
        "Unsubscribe Links allows you to append an unsubscribe link to any of your notifications and improve your notifications user experience without writing any code"
      ]
    },
    {
      "id": "2022-06-09-announcing-notificationapi-logs",
      "date": "2022-06-09",
      "title": "Announcing Logs: In-Depth and Searchable History of All Notifications",
      "type": "feature",
      "announcement": "https://www.pingram.io/blog/announcing-notificationapi-logs",
      "bullets": [
        "With Logs, you can search and review all your outgoing notifications in order to address customer tickets or debug software issues"
      ]
    }
  ]
}